diff --git a/.gitignore b/.gitignore index 506b437ced..4c961a6db9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,41 +1,22 @@ - -#ignore thumbnails created by windows +# Ignore files created by windows Thumbs.db -#Ignore files built by Visual Studio -*.obj -*.exe -*.pdb -*.user -*.aps -*.pch -*.vspscc -*_i.c -*_p.c -*.ncb -*.suo -*.tlb -*.tlh -*.bak -*.cache -*.ilk -*.log -[Bb]in -[Dd]ebug/ -*.lib -*.sbr -obj/ -[Rr]elease*/ -_ReSharper*/ -[Tt]est[Rr]esult* -Binary +# Ignore files created by OS X +.DS_Store +# Ignore autogenerated source files Source/Core/Common/Src/scmrev.h +# Ignore files output by build +/[Bb]uild/ +/[Bb]inary/ +# Ignore files created by visual studio +*.ipch *.opensdf *.sdf -[Bb]uild -*.ipch -.sconsign.dblite -Externals/scons-local/* -.DS_Store +*.suo +*.vcxproj.user +*.obj +# Ignore files created by posix people *~ -#Ignore transifix configuration directory +# Ignore transifix configuration directory .tx +# Ignore tlog files +*.tlog \ No newline at end of file diff --git a/.hgeol b/.hgeol deleted file mode 100644 index d6ac94569e..0000000000 --- a/.hgeol +++ /dev/null @@ -1,3 +0,0 @@ -[patterns] -Data/User/Wii/**.* = BIN -** = native \ No newline at end of file diff --git a/.hgignore b/.hgignore deleted file mode 100644 index e8da105116..0000000000 --- a/.hgignore +++ /dev/null @@ -1,25 +0,0 @@ -syntax:glob -Binary -*.obj -*.pdb -*.idb -*.ilk -*.pch -*.sdf -*.suo -*.vcxproj.*.user -*/Win32/Release -*/Win32/DebugFast -*/Win32/Debug -*/x64/Release -*/x64/DebugFast -*/x64/Debug -Source/ipch -BuildLog.htm -Source/Core/Common/Src/svnrev.h -Externals/wxWidgets/build/msw/*/Release -Externals/wxWidgets/build/msw/*/DebugFast -Externals/wxWidgets/build/msw/*/Debug -*.svn* -Data/User/GameConfig -Data/User/Shaders \ No newline at end of file diff --git a/Data/Sys/GameSettings/G3DE6L.ini b/Data/Sys/GameSettings/G3DE6L.ini index 724b3dcee9..71859b9a83 100644 --- a/Data/Sys/GameSettings/G3DE6L.ini +++ b/Data/Sys/GameSettings/G3DE6L.ini @@ -2,6 +2,7 @@ [Core] # Values set here will override the main dolphin settings. +TLBHack = 1 [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. diff --git a/Data/Sys/GameSettings/G3DP6L.ini b/Data/Sys/GameSettings/G3DP6L.ini new file mode 100644 index 0000000000..7cf3b37cdf --- /dev/null +++ b/Data/Sys/GameSettings/G3DP6L.ini @@ -0,0 +1,19 @@ +# G3DP6L - Carmen Sandiego + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + diff --git a/Data/Sys/GameSettings/G3DX6L.ini b/Data/Sys/GameSettings/G3DX6L.ini new file mode 100644 index 0000000000..3c8f04b0d3 --- /dev/null +++ b/Data/Sys/GameSettings/G3DX6L.ini @@ -0,0 +1,19 @@ +# G3DX6L - Carmen Sandiego + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + diff --git a/Data/Sys/GameSettings/G5NEAF.ini b/Data/Sys/GameSettings/G5NEAF.ini new file mode 100644 index 0000000000..b8c392bcd9 --- /dev/null +++ b/Data/Sys/GameSettings/G5NEAF.ini @@ -0,0 +1,31 @@ +# G5NEAF - Namco Museum 50th Anniversary + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +SafeTextureCacheColorSamples = 0 +UseXFB = True +UseRealXFB = False diff --git a/Data/Sys/GameSettings/G5NP69.ini b/Data/Sys/GameSettings/G5NP69.ini new file mode 100644 index 0000000000..775070cc3f --- /dev/null +++ b/Data/Sys/GameSettings/G5NP69.ini @@ -0,0 +1,31 @@ +# G5NP69 - Namco Museum 50th Anniversary + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +SafeTextureCacheColorSamples = 0 +UseXFB = True +UseRealXFB = False diff --git a/Data/Sys/GameSettings/GE9E5D.ini b/Data/Sys/GameSettings/GE9E5D.ini index 82a11b476d..041e10157e 100644 --- a/Data/Sys/GameSettings/GE9E5D.ini +++ b/Data/Sys/GameSettings/GE9E5D.ini @@ -18,3 +18,6 @@ EmulationIssues = [ActionReplay] # Add action replay cheats here. +[Video_Settings] +SafeTextureCacheColorSamples = 512 + diff --git a/Data/Sys/GameSettings/GFUP6V.ini b/Data/Sys/GameSettings/GFUP6V.ini new file mode 100644 index 0000000000..314dba0bd6 --- /dev/null +++ b/Data/Sys/GameSettings/GFUP6V.ini @@ -0,0 +1,19 @@ +# GFUP6V - FutureTactics + +[Core] +# Values set here will override the main dolphin settings. +TLBHack=1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + diff --git a/Data/Sys/GameSettings/GGNE5D.ini b/Data/Sys/GameSettings/GGNE5D.ini new file mode 100644 index 0000000000..6f147c3c03 --- /dev/null +++ b/Data/Sys/GameSettings/GGNE5D.ini @@ -0,0 +1,26 @@ +# GGNE5D - The Grim Adventures of Billy & Mandy + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for the videos to display. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GIAE7D.ini b/Data/Sys/GameSettings/GIAE7D.ini index 1670fc2d1b..51bef32bf8 100644 --- a/Data/Sys/GameSettings/GIAE7D.ini +++ b/Data/Sys/GameSettings/GIAE7D.ini @@ -6,7 +6,7 @@ [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. EmulationStateId = 4 -EmulationIssues = Little shadow bug +EmulationIssues = [OnLoad] # Add memory patches to be loaded once on boot here. @@ -17,3 +17,6 @@ EmulationIssues = Little shadow bug [ActionReplay] # Add action replay cheats here. +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GIAP7D.ini b/Data/Sys/GameSettings/GIAP7D.ini new file mode 100644 index 0000000000..286780ac44 --- /dev/null +++ b/Data/Sys/GameSettings/GIAP7D.ini @@ -0,0 +1,22 @@ +# GIAP7D - Ice Age 2 The Meltdown + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GICD78.ini b/Data/Sys/GameSettings/GICD78.ini new file mode 100644 index 0000000000..a1347dcee2 --- /dev/null +++ b/Data/Sys/GameSettings/GICD78.ini @@ -0,0 +1,22 @@ +# GICD78 - The Incredibles + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GICE78.ini b/Data/Sys/GameSettings/GICE78.ini index 664aa5edee..a11e448d6b 100644 --- a/Data/Sys/GameSettings/GICE78.ini +++ b/Data/Sys/GameSettings/GICE78.ini @@ -19,3 +19,6 @@ EmulationIssues = $Infinite Health 04097DB8 38000064 +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GICF78.ini b/Data/Sys/GameSettings/GICF78.ini new file mode 100644 index 0000000000..24f0475783 --- /dev/null +++ b/Data/Sys/GameSettings/GICF78.ini @@ -0,0 +1,22 @@ +# GICF78 - The Incredibles + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GICH78.ini b/Data/Sys/GameSettings/GICH78.ini new file mode 100644 index 0000000000..dfed38cdbf --- /dev/null +++ b/Data/Sys/GameSettings/GICH78.ini @@ -0,0 +1,22 @@ +# GICH78 - The Incredibles + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GICJG9.ini b/Data/Sys/GameSettings/GICJG9.ini new file mode 100644 index 0000000000..9a90f61620 --- /dev/null +++ b/Data/Sys/GameSettings/GICJG9.ini @@ -0,0 +1,22 @@ +# GICJG9 - The Incredibles + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GICP78.ini b/Data/Sys/GameSettings/GICP78.ini new file mode 100644 index 0000000000..341670cf1f --- /dev/null +++ b/Data/Sys/GameSettings/GICP78.ini @@ -0,0 +1,22 @@ +# GICP78 - The Incredibles + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/GJKD52.ini b/Data/Sys/GameSettings/GJKD52.ini new file mode 100644 index 0000000000..0007f5b1c3 --- /dev/null +++ b/Data/Sys/GameSettings/GJKD52.ini @@ -0,0 +1,20 @@ +# GJKD52 - Jedi Knight II: Jedi Outcast + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Settings] +SafeTextureCacheColorSamples = 512 diff --git a/Data/Sys/GameSettings/GJKE52.ini b/Data/Sys/GameSettings/GJKE52.ini index 38599b2f3c..ecabf3348d 100644 --- a/Data/Sys/GameSettings/GJKE52.ini +++ b/Data/Sys/GameSettings/GJKE52.ini @@ -6,7 +6,6 @@ [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. EmulationStateId = 4 -Issues="Darkening" [OnLoad] # Add memory patches to be loaded once on boot here. @@ -17,3 +16,5 @@ Issues="Darkening" [ActionReplay] # Add action replay cheats here. +[Video_Settings] +SafeTextureCacheColorSamples = 512 diff --git a/Data/Sys/GameSettings/GJKF52.ini b/Data/Sys/GameSettings/GJKF52.ini new file mode 100644 index 0000000000..021607d303 --- /dev/null +++ b/Data/Sys/GameSettings/GJKF52.ini @@ -0,0 +1,20 @@ +# GJKF52 - Jedi Knight II: Jedi Outcast + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Settings] +SafeTextureCacheColorSamples = 512 diff --git a/Data/Sys/GameSettings/GJKP52.ini b/Data/Sys/GameSettings/GJKP52.ini new file mode 100644 index 0000000000..42e8bd5fef --- /dev/null +++ b/Data/Sys/GameSettings/GJKP52.ini @@ -0,0 +1,20 @@ +# GJKP52 - Jedi Knight II: Jedi Outcast + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Settings] +SafeTextureCacheColorSamples = 512 diff --git a/Data/Sys/GameSettings/GLMJ01.ini b/Data/Sys/GameSettings/GLMJ01.ini new file mode 100644 index 0000000000..ad6d9bf5ab --- /dev/null +++ b/Data/Sys/GameSettings/GLMJ01.ini @@ -0,0 +1,21 @@ +# GLMJ01 - LUIGI'S MANSION + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 diff --git a/Data/Sys/GameSettings/GMPJ01.ini b/Data/Sys/GameSettings/GMPJ01.ini new file mode 100644 index 0000000000..60afbffeff --- /dev/null +++ b/Data/Sys/GameSettings/GMPJ01.ini @@ -0,0 +1,21 @@ +# GMPJ01 - Mario Party 4 + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 diff --git a/Data/Sys/GameSettings/GMXE70.ini b/Data/Sys/GameSettings/GMXE70.ini index 214760e887..648fae2495 100644 --- a/Data/Sys/GameSettings/GMXE70.ini +++ b/Data/Sys/GameSettings/GMXE70.ini @@ -7,7 +7,7 @@ TLBHack = 1 [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. EmulationStateId = 4 -EmulationIssues = +EmulationIssues = Needs real xfb for the videos to display. [OnLoad] # Add memory patches to be loaded once on boot here. @@ -44,3 +44,10 @@ $Have Test And Multiplayer Fighting Levels(Save Game In Hacking Menu To Enable) [Video] ProjectionHack = 0 +[Video_Hacks] +EFBToTextureEnable = False +EFBCopyEnable = True + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GMXJB2.ini b/Data/Sys/GameSettings/GMXJB2.ini new file mode 100644 index 0000000000..9804d5f19a --- /dev/null +++ b/Data/Sys/GameSettings/GMXJB2.ini @@ -0,0 +1,30 @@ +# GMXJB2 - Enter The Matrix + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for the videos to display. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 + +[Video_Hacks] +EFBToTextureEnable = False +EFBCopyEnable = True + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GMXP70.ini b/Data/Sys/GameSettings/GMXP70.ini new file mode 100644 index 0000000000..7d959b8fb5 --- /dev/null +++ b/Data/Sys/GameSettings/GMXP70.ini @@ -0,0 +1,30 @@ +# GMXP70 - Enter The Matrix + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for the videos to display. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 + +[Video_Hacks] +EFBToTextureEnable = False +EFBCopyEnable = True + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GN4E69.ini b/Data/Sys/GameSettings/GN4E69.ini new file mode 100644 index 0000000000..61afa2e480 --- /dev/null +++ b/Data/Sys/GameSettings/GN4E69.ini @@ -0,0 +1,31 @@ +# GN4E69 - NASCAR 2005 + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for the videos to show up. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GNMEAF.ini b/Data/Sys/GameSettings/GNMEAF.ini new file mode 100644 index 0000000000..fc88ba0709 --- /dev/null +++ b/Data/Sys/GameSettings/GNMEAF.ini @@ -0,0 +1,30 @@ +# GNMEAF - NAMCO MUSEUM + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +SafeTextureCacheColorSamples = 0 + diff --git a/Data/Sys/GameSettings/GPOJ8P.ini b/Data/Sys/GameSettings/GPOJ8P.ini new file mode 100644 index 0000000000..a7dc099f11 --- /dev/null +++ b/Data/Sys/GameSettings/GPOJ8P.ini @@ -0,0 +1,30 @@ +# GPOJ8P - PHANTASY STAR ONLINE EPISODE I&II + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +SafeTextureCacheColorSamples = 512 + diff --git a/Data/Sys/GameSettings/GPXJ01.ini b/Data/Sys/GameSettings/GPXJ01.ini new file mode 100644 index 0000000000..ab4233ccb2 --- /dev/null +++ b/Data/Sys/GameSettings/GPXJ01.ini @@ -0,0 +1,18 @@ +# GPXJ01 - POKeMON BOX RUBY&SAPPHIRE + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 2 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + diff --git a/Data/Sys/GameSettings/GRVJA4.ini b/Data/Sys/GameSettings/GRVJA4.ini new file mode 100644 index 0000000000..f776bec5f3 --- /dev/null +++ b/Data/Sys/GameSettings/GRVJA4.ini @@ -0,0 +1,18 @@ +# GRVJA4 - GROOVE ADVENTURE RAVE + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + diff --git a/Data/Sys/GameSettings/GSAJ01.ini b/Data/Sys/GameSettings/GSAJ01.ini new file mode 100644 index 0000000000..aa18628e45 --- /dev/null +++ b/Data/Sys/GameSettings/GSAJ01.ini @@ -0,0 +1,27 @@ +# GSAJ01 - Star Fox Adventures + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = Use dx11 plugin(r6477) +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + diff --git a/Data/Sys/GameSettings/GSOJ8P.ini b/Data/Sys/GameSettings/GSOJ8P.ini new file mode 100644 index 0000000000..b8f6e66fe0 --- /dev/null +++ b/Data/Sys/GameSettings/GSOJ8P.ini @@ -0,0 +1,31 @@ +# GSOJ8P - Sonic Mega Collection + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = False +SafeTextureCacheColorSamples = 512 diff --git a/Data/Sys/GameSettings/GTOJAF.ini b/Data/Sys/GameSettings/GTOJAF.ini new file mode 100644 index 0000000000..0b50ff4f50 --- /dev/null +++ b/Data/Sys/GameSettings/GTOJAF.ini @@ -0,0 +1,32 @@ +# GTOJAF - TALES OF SYMPHONIA + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = 0.5 +PH_ZFar = 1 + +[Video_Settings] +SafeTextureCacheColorSamples = 512 + +[Video_Hacks] +DlistCachingEnable = False diff --git a/Data/Sys/GameSettings/GV4E69.ini b/Data/Sys/GameSettings/GV4E69.ini new file mode 100644 index 0000000000..2f67ffdfb6 --- /dev/null +++ b/Data/Sys/GameSettings/GV4E69.ini @@ -0,0 +1,28 @@ +# GV4E69 - MVP Baseball 2005 + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = Videos are messed up, skip them. 2d graphics are also messed up. +EmulationStateId = 3 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + diff --git a/Data/Sys/GameSettings/GVOE69.ini b/Data/Sys/GameSettings/GVOE69.ini new file mode 100644 index 0000000000..c766865799 --- /dev/null +++ b/Data/Sys/GameSettings/GVOE69.ini @@ -0,0 +1,31 @@ +# GVOE69 - BIONICLE + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for videos to show up. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GVOP69.ini b/Data/Sys/GameSettings/GVOP69.ini new file mode 100644 index 0000000000..6be9ec6c68 --- /dev/null +++ b/Data/Sys/GameSettings/GVOP69.ini @@ -0,0 +1,31 @@ +# GVOP69 - BIONICLE + +[Core] +# Values set here will override the main dolphin settings. +TLBHack = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for videos to show up. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GXCJ01.ini b/Data/Sys/GameSettings/GXCJ01.ini new file mode 100644 index 0000000000..c251b14f5e --- /dev/null +++ b/Data/Sys/GameSettings/GXCJ01.ini @@ -0,0 +1,27 @@ +# GXCJ01 - CustomRobo + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + diff --git a/Data/Sys/GameSettings/GXME52.ini b/Data/Sys/GameSettings/GXME52.ini index 9a2b0d3620..bdeecff7be 100644 --- a/Data/Sys/GameSettings/GXME52.ini +++ b/Data/Sys/GameSettings/GXME52.ini @@ -1,4 +1,4 @@ -# GXME52 - X-Men3 V6 +# GXME52 - X-Men Next Dimension [Core] # Values set here will override the main dolphin settings. @@ -6,7 +6,7 @@ [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. EmulationStateId = 4 -EmulationIssues = +EmulationIssues = Needs real xfb for the videos to display. [OnLoad] # Add memory patches to be loaded once on boot here. @@ -17,3 +17,14 @@ EmulationIssues = [ActionReplay] # Add action replay cheats here. +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GXMF52.ini b/Data/Sys/GameSettings/GXMF52.ini new file mode 100644 index 0000000000..1a5e3185b5 --- /dev/null +++ b/Data/Sys/GameSettings/GXMF52.ini @@ -0,0 +1,30 @@ +# GXMF52 - X-Men Next Dimension + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for the videos to display. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GXMP52.ini b/Data/Sys/GameSettings/GXMP52.ini new file mode 100644 index 0000000000..c7b4b99e36 --- /dev/null +++ b/Data/Sys/GameSettings/GXMP52.ini @@ -0,0 +1,30 @@ +# GXMP52 - X-Men Next Dimension + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = Needs real xfb for the videos to display. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = True diff --git a/Data/Sys/GameSettings/GYQJ01.ini b/Data/Sys/GameSettings/GYQJ01.ini new file mode 100644 index 0000000000..414e4fed0a --- /dev/null +++ b/Data/Sys/GameSettings/GYQJ01.ini @@ -0,0 +1,18 @@ +# GYQJ01 - Super Mario Stadium for JP + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + diff --git a/Data/Sys/GameSettings/GYTE69.ini b/Data/Sys/GameSettings/GYTE69.ini new file mode 100644 index 0000000000..8026ddead7 --- /dev/null +++ b/Data/Sys/GameSettings/GYTE69.ini @@ -0,0 +1,30 @@ +# GYTE69 - TY the Tasmanian Tiger 2 + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Hacks] +EFBToTextureEnable = False +EFBCopyEnable = True diff --git a/Data/Sys/GameSettings/GYTP69.ini b/Data/Sys/GameSettings/GYTP69.ini new file mode 100644 index 0000000000..07653f90f2 --- /dev/null +++ b/Data/Sys/GameSettings/GYTP69.ini @@ -0,0 +1,30 @@ +# GYTP69 - TY the Tasmanian Tiger 2 + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Hacks] +EFBToTextureEnable = False +EFBCopyEnable = True diff --git a/Data/Sys/GameSettings/GZWJ01.ini b/Data/Sys/GameSettings/GZWJ01.ini new file mode 100644 index 0000000000..0ac9697525 --- /dev/null +++ b/Data/Sys/GameSettings/GZWJ01.ini @@ -0,0 +1,29 @@ +# GZWJ01 - Atumare!! made in wario + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 3 +EmulationIssues = Need Save texture cache,graphic glitches + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +SafeTextureCacheColorSamples = 512 diff --git a/Data/Sys/GameSettings/R4ZJ01.ini b/Data/Sys/GameSettings/R4ZJ01.ini index 78ba97cb8a..4ebc4c2a85 100644 --- a/Data/Sys/GameSettings/R4ZJ01.ini +++ b/Data/Sys/GameSettings/R4ZJ01.ini @@ -27,4 +27,5 @@ PH_ZFar = [Video_Hacks] EFBAccessEnable = True - +EFBToTextureEnable = False +EFBCopyEnable = True diff --git a/Data/Sys/GameSettings/RBHE08.ini b/Data/Sys/GameSettings/RBHE08.ini index f77361be1a..2dd2773425 100644 --- a/Data/Sys/GameSettings/RBHE08.ini +++ b/Data/Sys/GameSettings/RBHE08.ini @@ -2,6 +2,7 @@ [Core] # Values set here will override the main dolphin settings. +BlockMerging = 1 [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. diff --git a/Data/Sys/GameSettings/RBHJ08.ini b/Data/Sys/GameSettings/RBHJ08.ini index 6daba6c41f..537d3b8444 100644 --- a/Data/Sys/GameSettings/RBHJ08.ini +++ b/Data/Sys/GameSettings/RBHJ08.ini @@ -2,6 +2,7 @@ [Core] # Values set here will override the main dolphin settings. +BlockMerging = 1 [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. diff --git a/Data/Sys/GameSettings/RBHP08.ini b/Data/Sys/GameSettings/RBHP08.ini index a91968a64d..f17ffee900 100644 --- a/Data/Sys/GameSettings/RBHP08.ini +++ b/Data/Sys/GameSettings/RBHP08.ini @@ -2,6 +2,7 @@ [Core] # Values set here will override the main dolphin settings. +BlockMerging = 1 [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. diff --git a/Data/Sys/GameSettings/RBRE5G.ini b/Data/Sys/GameSettings/RBRE5G.ini new file mode 100644 index 0000000000..d5eb264492 --- /dev/null +++ b/Data/Sys/GameSettings/RBRE5G.ini @@ -0,0 +1,30 @@ +# RBRE5G - Blast Works Build, Trade, Destroy + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = False diff --git a/Data/Sys/GameSettings/RBRP5G.ini b/Data/Sys/GameSettings/RBRP5G.ini new file mode 100644 index 0000000000..6086448137 --- /dev/null +++ b/Data/Sys/GameSettings/RBRP5G.ini @@ -0,0 +1,30 @@ +# RBRP5G - Blast Works Build, Trade, Destroy + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = False diff --git a/Data/Sys/GameSettings/RBRX5G.ini b/Data/Sys/GameSettings/RBRX5G.ini new file mode 100644 index 0000000000..213439f6e8 --- /dev/null +++ b/Data/Sys/GameSettings/RBRX5G.ini @@ -0,0 +1,30 @@ +# RBRX5G - Blast Works Build, Trade, Destroy + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = False diff --git a/Data/Sys/GameSettings/RDFE41.ini b/Data/Sys/GameSettings/RDFE41.ini new file mode 100644 index 0000000000..5f3e0370e9 --- /dev/null +++ b/Data/Sys/GameSettings/RDFE41.ini @@ -0,0 +1,21 @@ +# RDFE41 - Shaun White Snowboarding: Road Trip + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +EFBToTextureEnable = False +EFBCopyEnable = True diff --git a/Data/Sys/GameSettings/RDFP41.ini b/Data/Sys/GameSettings/RDFP41.ini index 94b21ba568..831f22452a 100644 --- a/Data/Sys/GameSettings/RDFP41.ini +++ b/Data/Sys/GameSettings/RDFP41.ini @@ -6,7 +6,6 @@ [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. EmulationStateId = 4 -Issues="It's Playable. But few problems in graphics and control.Full Sound" [OnLoad] # Add memory patches to be loaded once on boot here. @@ -17,3 +16,6 @@ Issues="It's Playable. But few problems in graphics and control.Full Sound" [ActionReplay] # Add action replay cheats here. +[Video_Hacks] +EFBToTextureEnable = False +EFBCopyEnable = True diff --git a/Data/Sys/GameSettings/RDQJGD.ini b/Data/Sys/GameSettings/RDQJGD.ini new file mode 100644 index 0000000000..7ce8f0d78d --- /dev/null +++ b/Data/Sys/GameSettings/RDQJGD.ini @@ -0,0 +1,26 @@ +# RDQJGD - DRAGON QUEST SWORDS + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = diff --git a/Data/Sys/GameSettings/RSPJ01.ini b/Data/Sys/GameSettings/RSPJ01.ini new file mode 100644 index 0000000000..c365686121 --- /dev/null +++ b/Data/Sys/GameSettings/RSPJ01.ini @@ -0,0 +1,22 @@ +# RSPJ01 - SPORTS PACK for REVOLUTION + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 5 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 + diff --git a/Data/Sys/GameSettings/RZPJ01.ini b/Data/Sys/GameSettings/RZPJ01.ini new file mode 100644 index 0000000000..26fd150008 --- /dev/null +++ b/Data/Sys/GameSettings/RZPJ01.ini @@ -0,0 +1,22 @@ +# RZPJ01 - LINKS CROSSBOW TRAINING + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 5 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 + diff --git a/Data/Sys/GameSettings/SJBE52.ini b/Data/Sys/GameSettings/SJBE52.ini index ce124b2e96..28e5acc253 100644 --- a/Data/Sys/GameSettings/SJBE52.ini +++ b/Data/Sys/GameSettings/SJBE52.ini @@ -1,4 +1,4 @@ -# SJBE52 - BondX +# SJBE52 - GoldenEye007 [Core] # Values set here will override the main dolphin settings. diff --git a/Data/Sys/GameSettings/SJBJ01.ini b/Data/Sys/GameSettings/SJBJ01.ini new file mode 100644 index 0000000000..4fe057a604 --- /dev/null +++ b/Data/Sys/GameSettings/SJBJ01.ini @@ -0,0 +1,31 @@ +# SJBJ01 - GoldenEye007 + +[Core] +# Values set here will override the main dolphin settings. +BlockMerging = 1 + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationIssues = Disable the gamecube controller or the wiimote to not have conflicts (r6480) +EmulationStateId = 4 + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Hacks] +EFBCopyEnable = True +EFBToTextureEnable = False diff --git a/Data/Sys/GameSettings/SJBP52.ini b/Data/Sys/GameSettings/SJBP52.ini index 426fc4a0e9..da58fb081a 100644 --- a/Data/Sys/GameSettings/SJBP52.ini +++ b/Data/Sys/GameSettings/SJBP52.ini @@ -1,4 +1,4 @@ -# SJBP52 - BondX +# SJBP52 - GoldenEye007 [Core] # Values set here will override the main dolphin settings. diff --git a/Data/Sys/GameSettings/SVVEG9.ini b/Data/Sys/GameSettings/SVVEG9.ini new file mode 100644 index 0000000000..38f6ecaed7 --- /dev/null +++ b/Data/Sys/GameSettings/SVVEG9.ini @@ -0,0 +1,30 @@ +# SVVEG9 - The Croods Prehistoric Party + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = False diff --git a/Data/Sys/GameSettings/SVVPAF.ini b/Data/Sys/GameSettings/SVVPAF.ini new file mode 100644 index 0000000000..1b3f553997 --- /dev/null +++ b/Data/Sys/GameSettings/SVVPAF.ini @@ -0,0 +1,31 @@ +# SVVPAF - The Croods Prehistoric Party + +[Core] +# Values set here will override the main dolphin settings. + +[EmuState] +# The Emulation State. 1 is worst, 5 is best, 0 is not set. +EmulationStateId = 4 +EmulationIssues = + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video] +ProjectionHack = 0 +PH_SZNear = 0 +PH_SZFar = 0 +PH_ExtraParam = 0 +PH_ZNear = +PH_ZFar = + +[Video_Settings] +UseXFB = True +UseRealXFB = False + diff --git a/Data/Sys/Shaders/FXAA.glsl b/Data/Sys/Shaders/FXAA.glsl new file mode 100644 index 0000000000..99caff7d03 --- /dev/null +++ b/Data/Sys/Shaders/FXAA.glsl @@ -0,0 +1,75 @@ +/* + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + +Copyright (C) 2013 mudlord + +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. +*/ + +uniform sampler2D samp9; + +out vec4 ocol0; +in vec2 uv0; + +uniform vec4 resolution; +#define FXAA_REDUCE_MIN (1.0/ 128.0) +#define FXAA_REDUCE_MUL (1.0 / 8.0) +#define FXAA_SPAN_MAX 8.0 + +vec4 applyFXAA(vec2 fragCoord, sampler2D tex) +{ + vec4 color; + vec2 inverseVP = resolution.zw; + vec3 rgbNW = texture(tex, (fragCoord + vec2(-1.0, -1.0)) * inverseVP).xyz; + vec3 rgbNE = texture(tex, (fragCoord + vec2(1.0, -1.0)) * inverseVP).xyz; + vec3 rgbSW = texture(tex, (fragCoord + vec2(-1.0, 1.0)) * inverseVP).xyz; + vec3 rgbSE = texture(tex, (fragCoord + vec2(1.0, 1.0)) * inverseVP).xyz; + vec3 rgbM = texture(tex, fragCoord * inverseVP).xyz; + vec3 luma = vec3(0.299, 0.587, 0.114); + float lumaNW = dot(rgbNW, luma); + float lumaNE = dot(rgbNE, luma); + float lumaSW = dot(rgbSW, luma); + float lumaSE = dot(rgbSE, luma); + float lumaM = dot(rgbM, luma); + float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE))); + float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE))); + + vec2 dir; + dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE)); + dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE)); + + float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * + (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN); + + float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce); + dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), + max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), + dir * rcpDirMin)) * inverseVP; + + vec3 rgbA = 0.5 * ( + texture(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz + + texture(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz); + vec3 rgbB = rgbA * 0.5 + 0.25 * ( + texture(tex, fragCoord * inverseVP + dir * -0.5).xyz + + texture(tex, fragCoord * inverseVP + dir * 0.5).xyz); + + float lumaB = dot(rgbB, luma); + if ((lumaB < lumaMin) || (lumaB > lumaMax)) + color = vec4(rgbA, 1.0); + else + color = vec4(rgbB, 1.0); + return color; +} + +void main() +{ + ocol0 = applyFXAA(uv0 * resolution.xy, samp9); +} diff --git a/Externals/Bochs_disasm/Bochs_disasm.vcxproj b/Externals/Bochs_disasm/Bochs_disasm.vcxproj index 50f62f70f6..660dbdc7c5 100644 --- a/Externals/Bochs_disasm/Bochs_disasm.vcxproj +++ b/Externals/Bochs_disasm/Bochs_disasm.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,129 +19,45 @@ - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6} - Bochs_disasm + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B} - + + StaticLibrary + v120 + Unicode + + true - StaticLibrary - Unicode - - true - StaticLibrary - Unicode - - + false - StaticLibrary - Unicode - - - false - StaticLibrary - Unicode - - - StaticLibrary - - - Unicode - - - StaticLibrary - - - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - true - - - - - - true - true - true - - - - - - true - true - true - - + + + - - - diff --git a/Externals/CLRun/clrun/CLRun.vcxproj b/Externals/CLRun/clrun/CLRun.vcxproj index c6a4cb2e6d..473e5c532a 100644 --- a/Externals/CLRun/clrun/CLRun.vcxproj +++ b/Externals/CLRun/clrun/CLRun.vcxproj @@ -1,14 +1,6 @@  - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -28,129 +20,27 @@ {AA862E5E-A993-497A-B6A0-0E8E94B10050} - CLRun - + + StaticLibrary + v120 + Unicode + + true - StaticLibrary - Unicode - - true - StaticLibrary - Unicode - - + false - StaticLibrary - Unicode - - - false - StaticLibrary - Unicode - - - StaticLibrary - - - Unicode - - - StaticLibrary - - - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\include;%(AdditionalIncludeDirectories) - - - true - - - - - ..\include;%(AdditionalIncludeDirectories) - - - true - - - - - ..\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\include - - - - - ..\include - - diff --git a/Externals/GLew/glew.vcxproj b/Externals/GLew/glew.vcxproj new file mode 100644 index 0000000000..7f2df6f775 --- /dev/null +++ b/Externals/GLew/glew.vcxproj @@ -0,0 +1,59 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72} + + + + StaticLibrary + v120 + Unicode + + + true + + + false + + + + + + + + + + + + GLEW_STATIC;%(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/Externals/GLew/glew.vcxproj.filters b/Externals/GLew/glew.vcxproj.filters new file mode 100644 index 0000000000..a7c7e3975c --- /dev/null +++ b/Externals/GLew/glew.vcxproj.filters @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Externals/GLew/glew32s.lib b/Externals/GLew/glew32s.lib deleted file mode 100755 index 589a5bb914..0000000000 Binary files a/Externals/GLew/glew32s.lib and /dev/null differ diff --git a/Externals/GLew/glew64s.lib b/Externals/GLew/glew64s.lib deleted file mode 100755 index 4316171d4c..0000000000 Binary files a/Externals/GLew/glew64s.lib and /dev/null differ diff --git a/Externals/GLew/include/GL/glew.h b/Externals/GLew/include/GL/glew.h index 8dec85bf77..c9d3203437 100644 --- a/Externals/GLew/include/GL/glew.h +++ b/Externals/GLew/include/GL/glew.h @@ -83,6 +83,12 @@ #if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H) #error gl.h included before glew.h #endif +#if defined(__gl2_h_) +#error gl2.h included before glew.h +#endif +#if defined(__gltypes_h_) +#error gltypes.h included before glew.h +#endif #if defined(__REGAL_H__) #error Regal.h included before glew.h #endif @@ -94,7 +100,9 @@ #endif #define __gl_h_ +#define __gl2_h_ #define __GL_H__ +#define __gltypes_h_ #define __REGAL_H__ #define __X_GL_H #define __glext_h_ @@ -1224,7 +1232,6 @@ GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei heigh #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E @@ -2049,8 +2056,6 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei #define GL_CONTEXT_FLAGS 0x821E #define GL_DEPTH_BUFFER 0x8223 #define GL_STENCIL_BUFFER 0x8224 -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A @@ -2357,11 +2362,6 @@ typedef void (GLAPIENTRY * PFNGLGETINTEGER64I_VPROC) (GLenum, GLuint, GLint64 *) #define GL_VERSION_3_3 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GL_RGB10_A2UI 0x906F typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); @@ -2377,13 +2377,8 @@ typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint d #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_SAMPLE_SHADING 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F #define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F @@ -2446,6 +2441,17 @@ typedef void (GLAPIENTRY * PFNGLMINSAMPLESHADINGPROC) (GLclampf value); #endif /* GL_VERSION_4_3 */ +/* ----------------------------- GL_VERSION_4_4 ---------------------------- */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 + +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 + +#define GLEW_VERSION_4_4 GLEW_GET_VAR(__GLEW_VERSION_4_4) + +#endif /* GL_VERSION_4_4 */ + /* -------------------------- GL_3DFX_multisample -------------------------- */ #ifndef GL_3DFX_multisample @@ -2528,7 +2534,7 @@ typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void* userParam); +typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf); typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message); @@ -2573,13 +2579,36 @@ typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GL #endif /* GL_AMD_draw_buffers_blend */ +/* ---------------------- GL_AMD_interleaved_elements ---------------------- */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 + +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RG8UI 0x8238 +#define GL_RG16UI 0x823A +#define GL_RGBA8UI 0x8D7C +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 + +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); + +#define glVertexAttribParameteriAMD GLEW_GET_FUN(__glewVertexAttribParameteriAMD) + +#define GLEW_AMD_interleaved_elements GLEW_GET_VAR(__GLEW_AMD_interleaved_elements) + +#endif /* GL_AMD_interleaved_elements */ + /* ----------------------- GL_AMD_multi_draw_indirect ---------------------- */ #ifndef GL_AMD_multi_draw_indirect #define GL_AMD_multi_draw_indirect 1 -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void* indirect, GLsizei primcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void* indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); #define glMultiDrawArraysIndirectAMD GLEW_GET_FUN(__glewMultiDrawArraysIndirectAMD) #define glMultiDrawElementsIndirectAMD GLEW_GET_FUN(__glewMultiDrawElementsIndirectAMD) @@ -2629,7 +2658,7 @@ typedef void (GLAPIENTRY * PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint* m typedef void (GLAPIENTRY * PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); typedef void (GLAPIENTRY * PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint* monitors); typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint *bytesWritten); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void* data); +typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar *counterString); typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint* numCounters, GLint *maxActiveCounters, GLsizei countersSize, GLuint *counters); typedef void (GLAPIENTRY * PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei* length, GLchar *groupString); @@ -2711,6 +2740,40 @@ typedef void (GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint i #endif /* GL_AMD_shader_stencil_export */ +/* ---------------------- GL_AMD_shader_trinary_minmax --------------------- */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 + +#define GLEW_AMD_shader_trinary_minmax GLEW_GET_VAR(__GLEW_AMD_shader_trinary_minmax) + +#endif /* GL_AMD_shader_trinary_minmax */ + +/* ------------------------- GL_AMD_sparse_texture ------------------------- */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 + +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C + +typedef void (GLAPIENTRY * PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); + +#define glTexStorageSparseAMD GLEW_GET_FUN(__glewTexStorageSparseAMD) +#define glTextureStorageSparseAMD GLEW_GET_FUN(__glewTextureStorageSparseAMD) + +#define GLEW_AMD_sparse_texture GLEW_GET_VAR(__GLEW_AMD_sparse_texture) + +#endif /* GL_AMD_sparse_texture */ + /* ------------------- GL_AMD_stencil_operation_extended ------------------- */ #ifndef GL_AMD_stencil_operation_extended @@ -2788,6 +2851,200 @@ typedef void (GLAPIENTRY * PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); #endif /* GL_AMD_vertex_shader_viewport_index */ +/* ------------------------- GL_ANGLE_depth_texture ------------------------ */ + +#ifndef GL_ANGLE_depth_texture +#define GL_ANGLE_depth_texture 1 + +#define GLEW_ANGLE_depth_texture GLEW_GET_VAR(__GLEW_ANGLE_depth_texture) + +#endif /* GL_ANGLE_depth_texture */ + +/* ----------------------- GL_ANGLE_framebuffer_blit ----------------------- */ + +#ifndef GL_ANGLE_framebuffer_blit +#define GL_ANGLE_framebuffer_blit 1 + +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA + +typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +#define glBlitFramebufferANGLE GLEW_GET_FUN(__glewBlitFramebufferANGLE) + +#define GLEW_ANGLE_framebuffer_blit GLEW_GET_VAR(__GLEW_ANGLE_framebuffer_blit) + +#endif /* GL_ANGLE_framebuffer_blit */ + +/* -------------------- GL_ANGLE_framebuffer_multisample ------------------- */ + +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_ANGLE_framebuffer_multisample 1 + +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 + +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +#define glRenderbufferStorageMultisampleANGLE GLEW_GET_FUN(__glewRenderbufferStorageMultisampleANGLE) + +#define GLEW_ANGLE_framebuffer_multisample GLEW_GET_VAR(__GLEW_ANGLE_framebuffer_multisample) + +#endif /* GL_ANGLE_framebuffer_multisample */ + +/* ----------------------- GL_ANGLE_instanced_arrays ----------------------- */ + +#ifndef GL_ANGLE_instanced_arrays +#define GL_ANGLE_instanced_arrays 1 + +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE + +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); + +#define glDrawArraysInstancedANGLE GLEW_GET_FUN(__glewDrawArraysInstancedANGLE) +#define glDrawElementsInstancedANGLE GLEW_GET_FUN(__glewDrawElementsInstancedANGLE) +#define glVertexAttribDivisorANGLE GLEW_GET_FUN(__glewVertexAttribDivisorANGLE) + +#define GLEW_ANGLE_instanced_arrays GLEW_GET_VAR(__GLEW_ANGLE_instanced_arrays) + +#endif /* GL_ANGLE_instanced_arrays */ + +/* -------------------- GL_ANGLE_pack_reverse_row_order -------------------- */ + +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_ANGLE_pack_reverse_row_order 1 + +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 + +#define GLEW_ANGLE_pack_reverse_row_order GLEW_GET_VAR(__GLEW_ANGLE_pack_reverse_row_order) + +#endif /* GL_ANGLE_pack_reverse_row_order */ + +/* ------------------------ GL_ANGLE_program_binary ------------------------ */ + +#ifndef GL_ANGLE_program_binary +#define GL_ANGLE_program_binary 1 + +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 + +#define GLEW_ANGLE_program_binary GLEW_GET_VAR(__GLEW_ANGLE_program_binary) + +#endif /* GL_ANGLE_program_binary */ + +/* ------------------- GL_ANGLE_texture_compression_dxt1 ------------------- */ + +#ifndef GL_ANGLE_texture_compression_dxt1 +#define GL_ANGLE_texture_compression_dxt1 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 + +#define GLEW_ANGLE_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt1) + +#endif /* GL_ANGLE_texture_compression_dxt1 */ + +/* ------------------- GL_ANGLE_texture_compression_dxt3 ------------------- */ + +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_ANGLE_texture_compression_dxt3 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 + +#define GLEW_ANGLE_texture_compression_dxt3 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt3) + +#endif /* GL_ANGLE_texture_compression_dxt3 */ + +/* ------------------- GL_ANGLE_texture_compression_dxt5 ------------------- */ + +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_ANGLE_texture_compression_dxt5 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 + +#define GLEW_ANGLE_texture_compression_dxt5 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt5) + +#endif /* GL_ANGLE_texture_compression_dxt5 */ + +/* ------------------------- GL_ANGLE_texture_usage ------------------------ */ + +#ifndef GL_ANGLE_texture_usage +#define GL_ANGLE_texture_usage 1 + +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 + +#define GLEW_ANGLE_texture_usage GLEW_GET_VAR(__GLEW_ANGLE_texture_usage) + +#endif /* GL_ANGLE_texture_usage */ + +/* -------------------------- GL_ANGLE_timer_query ------------------------- */ + +#ifndef GL_ANGLE_timer_query +#define GL_ANGLE_timer_query 1 + +#define GL_QUERY_COUNTER_BITS_ANGLE 0x8864 +#define GL_CURRENT_QUERY_ANGLE 0x8865 +#define GL_QUERY_RESULT_ANGLE 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ANGLE 0x8867 +#define GL_TIME_ELAPSED_ANGLE 0x88BF +#define GL_TIMESTAMP_ANGLE 0x8E28 + +typedef void (GLAPIENTRY * PFNGLBEGINQUERYANGLEPROC) (GLenum target, GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEQUERIESANGLEPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLENDQUERYANGLEPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGENQUERIESANGLEPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VANGLEPROC) (GLuint id, GLenum pname, GLint64* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVANGLEPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VANGLEPROC) (GLuint id, GLenum pname, GLuint64* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVANGLEPROC) (GLuint id, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYIVANGLEPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISQUERYANGLEPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERANGLEPROC) (GLuint id, GLenum target); + +#define glBeginQueryANGLE GLEW_GET_FUN(__glewBeginQueryANGLE) +#define glDeleteQueriesANGLE GLEW_GET_FUN(__glewDeleteQueriesANGLE) +#define glEndQueryANGLE GLEW_GET_FUN(__glewEndQueryANGLE) +#define glGenQueriesANGLE GLEW_GET_FUN(__glewGenQueriesANGLE) +#define glGetQueryObjecti64vANGLE GLEW_GET_FUN(__glewGetQueryObjecti64vANGLE) +#define glGetQueryObjectivANGLE GLEW_GET_FUN(__glewGetQueryObjectivANGLE) +#define glGetQueryObjectui64vANGLE GLEW_GET_FUN(__glewGetQueryObjectui64vANGLE) +#define glGetQueryObjectuivANGLE GLEW_GET_FUN(__glewGetQueryObjectuivANGLE) +#define glGetQueryivANGLE GLEW_GET_FUN(__glewGetQueryivANGLE) +#define glIsQueryANGLE GLEW_GET_FUN(__glewIsQueryANGLE) +#define glQueryCounterANGLE GLEW_GET_FUN(__glewQueryCounterANGLE) + +#define GLEW_ANGLE_timer_query GLEW_GET_VAR(__GLEW_ANGLE_timer_query) + +#endif /* GL_ANGLE_timer_query */ + +/* ------------------- GL_ANGLE_translated_shader_source ------------------- */ + +#ifndef GL_ANGLE_translated_shader_source +#define GL_ANGLE_translated_shader_source 1 + +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 + +typedef void (GLAPIENTRY * PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); + +#define glGetTranslatedShaderSourceANGLE GLEW_GET_FUN(__glewGetTranslatedShaderSourceANGLE) + +#define GLEW_ANGLE_translated_shader_source GLEW_GET_VAR(__GLEW_ANGLE_translated_shader_source) + +#endif /* GL_ANGLE_translated_shader_source */ + /* ----------------------- GL_APPLE_aux_depth_stencil ---------------------- */ #ifndef GL_APPLE_aux_depth_stencil @@ -2821,7 +3078,7 @@ typedef void (GLAPIENTRY * PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void* pointer); +typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); typedef void (GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount); @@ -3046,9 +3303,9 @@ typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF -typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer); +typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); typedef void (GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); #define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE) #define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE) @@ -3127,6 +3384,8 @@ typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuin #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +typedef int GLfixed; + typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFPROC) (GLclampf d); typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f); typedef void (GLAPIENTRY * PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint* range, GLint *precision); @@ -3148,6 +3407,7 @@ typedef void (GLAPIENTRY * PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint* #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF #define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A #define GL_MAX_ELEMENT_INDEX 0x8D6B @@ -3181,8 +3441,8 @@ typedef void (GLAPIENTRY * PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint* #define GL_ARB_base_instance 1 typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLuint baseinstance); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLuint baseinstance); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); #define glDrawArraysInstancedBaseInstance GLEW_GET_FUN(__glewDrawArraysInstancedBaseInstance) #define glDrawElementsInstancedBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseInstance) @@ -3192,6 +3452,51 @@ typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) #endif /* GL_ARB_base_instance */ +/* ------------------------ GL_ARB_bindless_texture ------------------------ */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 + +#define GL_UNSIGNED_INT64_ARB 0x140F + +typedef GLuint64 (GLAPIENTRY * PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT* params); +typedef GLboolean (GLAPIENTRY * PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64* values); +typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64* value); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT* v); + +#define glGetImageHandleARB GLEW_GET_FUN(__glewGetImageHandleARB) +#define glGetTextureHandleARB GLEW_GET_FUN(__glewGetTextureHandleARB) +#define glGetTextureSamplerHandleARB GLEW_GET_FUN(__glewGetTextureSamplerHandleARB) +#define glGetVertexAttribLui64vARB GLEW_GET_FUN(__glewGetVertexAttribLui64vARB) +#define glIsImageHandleResidentARB GLEW_GET_FUN(__glewIsImageHandleResidentARB) +#define glIsTextureHandleResidentARB GLEW_GET_FUN(__glewIsTextureHandleResidentARB) +#define glMakeImageHandleNonResidentARB GLEW_GET_FUN(__glewMakeImageHandleNonResidentARB) +#define glMakeImageHandleResidentARB GLEW_GET_FUN(__glewMakeImageHandleResidentARB) +#define glMakeTextureHandleNonResidentARB GLEW_GET_FUN(__glewMakeTextureHandleNonResidentARB) +#define glMakeTextureHandleResidentARB GLEW_GET_FUN(__glewMakeTextureHandleResidentARB) +#define glProgramUniformHandleui64ARB GLEW_GET_FUN(__glewProgramUniformHandleui64ARB) +#define glProgramUniformHandleui64vARB GLEW_GET_FUN(__glewProgramUniformHandleui64vARB) +#define glUniformHandleui64ARB GLEW_GET_FUN(__glewUniformHandleui64ARB) +#define glUniformHandleui64vARB GLEW_GET_FUN(__glewUniformHandleui64vARB) +#define glVertexAttribL1ui64ARB GLEW_GET_FUN(__glewVertexAttribL1ui64ARB) +#define glVertexAttribL1ui64vARB GLEW_GET_FUN(__glewVertexAttribL1ui64vARB) + +#define GLEW_ARB_bindless_texture GLEW_GET_VAR(__GLEW_ARB_bindless_texture) + +#endif /* GL_ARB_bindless_texture */ + /* ----------------------- GL_ARB_blend_func_extended ---------------------- */ #ifndef GL_ARB_blend_func_extended @@ -3212,6 +3517,31 @@ typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GL #endif /* GL_ARB_blend_func_extended */ +/* ------------------------- GL_ARB_buffer_storage ------------------------- */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 + +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_PERSISTENT_BIT 0x00000040 +#define GL_MAP_COHERENT_BIT 0x00000080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 + +typedef void (GLAPIENTRY * PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLbitfield flags); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid* data, GLbitfield flags); + +#define glBufferStorage GLEW_GET_FUN(__glewBufferStorage) +#define glNamedBufferStorageEXT GLEW_GET_FUN(__glewNamedBufferStorageEXT) + +#define GLEW_ARB_buffer_storage GLEW_GET_VAR(__GLEW_ARB_buffer_storage) + +#endif /* GL_ARB_buffer_storage */ + /* ---------------------------- GL_ARB_cl_event ---------------------------- */ #ifndef GL_ARB_cl_event @@ -3250,6 +3580,23 @@ typedef void (GLAPIENTRY * PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, #endif /* GL_ARB_clear_buffer_object */ +/* -------------------------- GL_ARB_clear_texture ------------------------- */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 + +#define GL_CLEAR_TEXTURE 0x9365 + +typedef void (GLAPIENTRY * PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const GLvoid* data); +typedef void (GLAPIENTRY * PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data); + +#define glClearTexImage GLEW_GET_FUN(__glewClearTexImage) +#define glClearTexSubImage GLEW_GET_FUN(__glewClearTexSubImage) + +#define GLEW_ARB_clear_texture GLEW_GET_VAR(__GLEW_ARB_clear_texture) + +#endif /* GL_ARB_clear_texture */ + /* ----------------------- GL_ARB_color_buffer_float ----------------------- */ #ifndef GL_ARB_color_buffer_float @@ -3330,6 +3677,24 @@ typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect) #endif /* GL_ARB_compute_shader */ +/* ------------------- GL_ARB_compute_variable_group_size ------------------ */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 + +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 + +typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); + +#define glDispatchComputeGroupSizeARB GLEW_GET_FUN(__glewDispatchComputeGroupSizeARB) + +#define GLEW_ARB_compute_variable_group_size GLEW_GET_VAR(__GLEW_ARB_compute_variable_group_size) + +#endif /* GL_ARB_compute_variable_group_size */ + /* ----------------------- GL_ARB_conservative_depth ----------------------- */ #ifndef GL_ARB_conservative_depth @@ -3398,7 +3763,7 @@ typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum sr typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, void* userParam); +typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); @@ -3506,10 +3871,10 @@ typedef void (GLAPIENTRY * PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLen #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, void* indices, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void* indices, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei* count, GLenum type, GLvoid**indices, GLsizei primcount, GLint *basevertex); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const *indices, GLsizei primcount, const GLint *basevertex); #define glDrawElementsBaseVertex GLEW_GET_FUN(__glewDrawElementsBaseVertex) #define glDrawElementsInstancedBaseVertex GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertex) @@ -3528,8 +3893,8 @@ typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, G #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void* indirect); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void* indirect); +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); #define glDrawArraysIndirect GLEW_GET_FUN(__glewDrawArraysIndirect) #define glDrawElementsIndirect GLEW_GET_FUN(__glewDrawElementsIndirect) @@ -3547,6 +3912,19 @@ typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum t #endif /* GL_ARB_draw_instanced */ +/* ------------------------ GL_ARB_enhanced_layouts ------------------------ */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 + +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C + +#define GLEW_ARB_enhanced_layouts GLEW_GET_VAR(__GLEW_ARB_enhanced_layouts) + +#endif /* GL_ARB_enhanced_layouts */ + /* -------------------- GL_ARB_explicit_attrib_location -------------------- */ #ifndef GL_ARB_explicit_attrib_location @@ -3848,7 +4226,7 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenu #define GL_PROGRAM_BINARY_FORMATS 0x87FF typedef void (GLAPIENTRY * PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLenum *binaryFormat, GLvoid*binary); -typedef void (GLAPIENTRY * PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void* binary, GLsizei length); +typedef void (GLAPIENTRY * PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); #define glGetProgramBinary GLEW_GET_FUN(__glewGetProgramBinary) @@ -4110,6 +4488,24 @@ typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum in #endif /* GL_ARB_imaging */ +/* ----------------------- GL_ARB_indirect_parameters ---------------------- */ + +#ifndef GL_ARB_indirect_parameters +#define GL_ARB_indirect_parameters 1 + +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF + +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); + +#define glMultiDrawArraysIndirectCountARB GLEW_GET_FUN(__glewMultiDrawArraysIndirectCountARB) +#define glMultiDrawElementsIndirectCountARB GLEW_GET_FUN(__glewMultiDrawElementsIndirectCountARB) + +#define GLEW_ARB_indirect_parameters GLEW_GET_VAR(__GLEW_ARB_indirect_parameters) + +#endif /* GL_ARB_indirect_parameters */ + /* ------------------------ GL_ARB_instanced_arrays ------------------------ */ #ifndef GL_ARB_instanced_arrays @@ -4149,10 +4545,6 @@ typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum #ifndef GL_ARB_internalformat_query2 #define GL_ARB_internalformat_query2 1 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_3D 0x806F -#define GL_SAMPLES 0x80A9 #define GL_INTERNALFORMAT_SUPPORTED 0x826F #define GL_INTERNALFORMAT_PREFERRED 0x8270 #define GL_INTERNALFORMAT_RED_SIZE 0x8271 @@ -4252,15 +4644,6 @@ typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum #define GL_VIEW_CLASS_RGTC2_RG 0x82D1 #define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 #define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_RENDERBUFFER 0x8D41 -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_NUM_SAMPLE_COUNTS 0x9380 typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params); @@ -4358,13 +4741,36 @@ typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, GLushort *in #endif /* GL_ARB_matrix_palette */ +/* --------------------------- GL_ARB_multi_bind --------------------------- */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 + +typedef void (GLAPIENTRY * PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint* textures); +typedef void (GLAPIENTRY * PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint* samplers); +typedef void (GLAPIENTRY * PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint* textures); +typedef void (GLAPIENTRY * PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizei *strides); + +#define glBindBuffersBase GLEW_GET_FUN(__glewBindBuffersBase) +#define glBindBuffersRange GLEW_GET_FUN(__glewBindBuffersRange) +#define glBindImageTextures GLEW_GET_FUN(__glewBindImageTextures) +#define glBindSamplers GLEW_GET_FUN(__glewBindSamplers) +#define glBindTextures GLEW_GET_FUN(__glewBindTextures) +#define glBindVertexBuffers GLEW_GET_FUN(__glewBindVertexBuffers) + +#define GLEW_ARB_multi_bind GLEW_GET_VAR(__GLEW_ARB_multi_bind) + +#endif /* GL_ARB_multi_bind */ + /* ----------------------- GL_ARB_multi_draw_indirect ---------------------- */ #ifndef GL_ARB_multi_draw_indirect #define GL_ARB_multi_draw_indirect 1 -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void* indirect, GLsizei primcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void* indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); #define glMultiDrawArraysIndirect GLEW_GET_FUN(__glewMultiDrawArraysIndirect) #define glMultiDrawElementsIndirect GLEW_GET_FUN(__glewMultiDrawElementsIndirect) @@ -4690,6 +5096,20 @@ typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXPROC) (GLenum mode); #endif /* GL_ARB_provoking_vertex */ +/* ----------------------- GL_ARB_query_buffer_object ---------------------- */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 + +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 + +#define GLEW_ARB_query_buffer_object GLEW_GET_VAR(__GLEW_ARB_query_buffer_object) + +#endif /* GL_ARB_query_buffer_object */ + /* ------------------ GL_ARB_robust_buffer_access_behavior ----------------- */ #ifndef GL_ARB_robust_buffer_access_behavior @@ -4844,6 +5264,17 @@ typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum #endif /* GL_ARB_seamless_cube_map */ +/* ------------------ GL_ARB_seamless_cubemap_per_texture ------------------ */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 + +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F + +#define GLEW_ARB_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_ARB_seamless_cubemap_per_texture) + +#endif /* GL_ARB_seamless_cubemap_per_texture */ + /* --------------------- GL_ARB_separate_shader_objects -------------------- */ #ifndef GL_ARB_separate_shader_objects @@ -5037,6 +5468,24 @@ typedef void (GLAPIENTRY * PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint prog #endif /* GL_ARB_shader_bit_encoding */ +/* --------------------- GL_ARB_shader_draw_parameters --------------------- */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 + +#define GLEW_ARB_shader_draw_parameters GLEW_GET_VAR(__GLEW_ARB_shader_draw_parameters) + +#endif /* GL_ARB_shader_draw_parameters */ + +/* ------------------------ GL_ARB_shader_group_vote ----------------------- */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 + +#define GLEW_ARB_shader_group_vote GLEW_GET_VAR(__GLEW_ARB_shader_group_vote) + +#endif /* GL_ARB_shader_group_vote */ + /* --------------------- GL_ARB_shader_image_load_store -------------------- */ #ifndef GL_ARB_shader_image_load_store @@ -5376,7 +5825,7 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, G #define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 #define GL_NAMED_STRING_TYPE_ARB 0x8DEA -typedef void (GLAPIENTRY * PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar ** path, const GLint *length); +typedef void (GLAPIENTRY * PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* const *path, const GLint *length); typedef void (GLAPIENTRY * PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name); typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name, GLsizei bufSize, GLint *stringlen, GLchar *string); typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar* name, GLenum pname, GLint *params); @@ -5427,6 +5876,33 @@ typedef void (GLAPIENTRY * PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, #endif /* GL_ARB_shadow_ambient */ +/* ------------------------- GL_ARB_sparse_texture ------------------------- */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 + +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA + +typedef void (GLAPIENTRY * PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY * PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +#define glTexPageCommitmentARB GLEW_GET_FUN(__glewTexPageCommitmentARB) +#define glTexturePageCommitmentEXT GLEW_GET_FUN(__glewTexturePageCommitmentEXT) + +#define GLEW_ARB_sparse_texture GLEW_GET_VAR(__GLEW_ARB_sparse_texture) + +#endif /* GL_ARB_sparse_texture */ + /* ------------------------ GL_ARB_stencil_texturing ----------------------- */ #ifndef GL_ARB_stencil_texturing @@ -5602,13 +6078,13 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLen #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, void* img); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLvoid *img); #define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB) #define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB) @@ -5794,6 +6270,17 @@ typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GL #endif /* GL_ARB_texture_gather */ +/* ------------------ GL_ARB_texture_mirror_clamp_to_edge ------------------ */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 + +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 + +#define GLEW_ARB_texture_mirror_clamp_to_edge GLEW_GET_VAR(__GLEW_ARB_texture_mirror_clamp_to_edge) + +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + /* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ #ifndef GL_ARB_texture_mirrored_repeat @@ -5934,6 +6421,18 @@ typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsiz #endif /* GL_ARB_texture_rgb10_a2ui */ +/* ------------------------ GL_ARB_texture_stencil8 ------------------------ */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 + +#define GL_STENCIL_INDEX 0x1901 +#define GL_STENCIL_INDEX8 0x8D48 + +#define GLEW_ARB_texture_stencil8 GLEW_GET_VAR(__GLEW_ARB_texture_stencil8) + +#endif /* GL_ARB_texture_stencil8 */ + /* ------------------------- GL_ARB_texture_storage ------------------------ */ #ifndef GL_ARB_texture_storage @@ -6225,13 +6724,6 @@ typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYPROC) (GLuint array); #ifndef GL_ARB_vertex_attrib_64bit #define GL_ARB_vertex_attrib_64bit 1 -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE - typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble* params); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble* v); @@ -6404,13 +6896,13 @@ typedef ptrdiff_t GLintptrARB; typedef ptrdiff_t GLsizeiptrARB; typedef void (GLAPIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid* data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid* data); +typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); +typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint* buffers); typedef void (GLAPIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint* buffers); typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid* data); +typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERARBPROC) (GLuint buffer); typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC) (GLenum target); @@ -6525,7 +7017,7 @@ typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void* string); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid** pointer); typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble* params); @@ -6540,7 +7032,7 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void* string); +typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble* v); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); @@ -6577,7 +7069,7 @@ typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLs typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte* v); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint* v); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); #define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB) #define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB) @@ -6671,6 +7163,17 @@ typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programO #endif /* GL_ARB_vertex_shader */ +/* ------------------- GL_ARB_vertex_type_10f_11f_11f_rev ------------------ */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 + +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B + +#define GLEW_ARB_vertex_type_10f_11f_11f_rev GLEW_GET_VAR(__GLEW_ARB_vertex_type_10f_11f_11f_rev) + +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + /* ------------------- GL_ARB_vertex_type_2_10_10_10_rev ------------------- */ #ifndef GL_ARB_vertex_type_2_10_10_10_rev @@ -6944,7 +7447,7 @@ typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum* bu typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void* pointer); +typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); #define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI) #define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI) @@ -7250,8 +7753,8 @@ typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint* params); typedef GLboolean (GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void* pointer, GLenum usage); -typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve); +typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); +typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); typedef void (GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); #define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI) @@ -7595,7 +8098,7 @@ typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 -typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void* data); +typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT) @@ -7649,19 +8152,19 @@ typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* image); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* row, void* column, void* span); -typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* row, const void* column); +typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); #define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT) #define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT) @@ -7701,8 +8204,8 @@ typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 -typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer); -typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer); +typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, GLvoid *pointer); #define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT) #define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT) @@ -7796,18 +8299,18 @@ typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zma typedef void (GLAPIENTRY * PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); typedef GLenum (GLAPIENTRY * PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); typedef void (GLAPIENTRY * PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); @@ -7832,8 +8335,8 @@ typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuff typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (GLAPIENTRY * PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); typedef void (GLAPIENTRY * PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, void* img); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, void* img); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLvoid *img); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLvoid *img); typedef void (GLAPIENTRY * PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble* params); typedef void (GLAPIENTRY * PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble* params); typedef void (GLAPIENTRY * PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat* params); @@ -7844,7 +8347,7 @@ typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params); typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void* pixels); +typedef void (GLAPIENTRY * PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); @@ -7853,18 +8356,18 @@ typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void** params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void* data); +typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void* string); +typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string); typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid** params); typedef void (GLAPIENTRY * PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void* pixels); +typedef void (GLAPIENTRY * PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params); @@ -7897,7 +8400,7 @@ typedef void (GLAPIENTRY * PFNGLMATRIXSCALEFEXTPROC) (GLenum matrixMode, GLfloat typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); typedef void (GLAPIENTRY * PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (GLAPIENTRY * PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (GLAPIENTRY * PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params); typedef void (GLAPIENTRY * PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); @@ -7908,9 +8411,9 @@ typedef void (GLAPIENTRY * PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coo typedef void (GLAPIENTRY * PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params); typedef void (GLAPIENTRY * PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); typedef void (GLAPIENTRY * PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params); typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint* params); typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); @@ -7918,11 +8421,11 @@ typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLe typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* param); typedef void (GLAPIENTRY * PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void* data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data); +typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); typedef void (GLAPIENTRY * PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); @@ -7942,65 +8445,48 @@ typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params); typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params); typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void* string); +typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); typedef void (GLAPIENTRY * PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* params); typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint* params); typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); @@ -8008,9 +8494,9 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLen typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* param); typedef void (GLAPIENTRY * PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); typedef GLboolean (GLAPIENTRY * PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); typedef void (GLAPIENTRY * PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (GLAPIENTRY * PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); @@ -8177,55 +8663,38 @@ typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, G #define glNamedRenderbufferStorageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageEXT) #define glNamedRenderbufferStorageMultisampleCoverageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleCoverageEXT) #define glNamedRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleEXT) -#define glProgramUniform1dEXT GLEW_GET_FUN(__glewProgramUniform1dEXT) -#define glProgramUniform1dvEXT GLEW_GET_FUN(__glewProgramUniform1dvEXT) #define glProgramUniform1fEXT GLEW_GET_FUN(__glewProgramUniform1fEXT) #define glProgramUniform1fvEXT GLEW_GET_FUN(__glewProgramUniform1fvEXT) #define glProgramUniform1iEXT GLEW_GET_FUN(__glewProgramUniform1iEXT) #define glProgramUniform1ivEXT GLEW_GET_FUN(__glewProgramUniform1ivEXT) #define glProgramUniform1uiEXT GLEW_GET_FUN(__glewProgramUniform1uiEXT) #define glProgramUniform1uivEXT GLEW_GET_FUN(__glewProgramUniform1uivEXT) -#define glProgramUniform2dEXT GLEW_GET_FUN(__glewProgramUniform2dEXT) -#define glProgramUniform2dvEXT GLEW_GET_FUN(__glewProgramUniform2dvEXT) #define glProgramUniform2fEXT GLEW_GET_FUN(__glewProgramUniform2fEXT) #define glProgramUniform2fvEXT GLEW_GET_FUN(__glewProgramUniform2fvEXT) #define glProgramUniform2iEXT GLEW_GET_FUN(__glewProgramUniform2iEXT) #define glProgramUniform2ivEXT GLEW_GET_FUN(__glewProgramUniform2ivEXT) #define glProgramUniform2uiEXT GLEW_GET_FUN(__glewProgramUniform2uiEXT) #define glProgramUniform2uivEXT GLEW_GET_FUN(__glewProgramUniform2uivEXT) -#define glProgramUniform3dEXT GLEW_GET_FUN(__glewProgramUniform3dEXT) -#define glProgramUniform3dvEXT GLEW_GET_FUN(__glewProgramUniform3dvEXT) #define glProgramUniform3fEXT GLEW_GET_FUN(__glewProgramUniform3fEXT) #define glProgramUniform3fvEXT GLEW_GET_FUN(__glewProgramUniform3fvEXT) #define glProgramUniform3iEXT GLEW_GET_FUN(__glewProgramUniform3iEXT) #define glProgramUniform3ivEXT GLEW_GET_FUN(__glewProgramUniform3ivEXT) #define glProgramUniform3uiEXT GLEW_GET_FUN(__glewProgramUniform3uiEXT) #define glProgramUniform3uivEXT GLEW_GET_FUN(__glewProgramUniform3uivEXT) -#define glProgramUniform4dEXT GLEW_GET_FUN(__glewProgramUniform4dEXT) -#define glProgramUniform4dvEXT GLEW_GET_FUN(__glewProgramUniform4dvEXT) #define glProgramUniform4fEXT GLEW_GET_FUN(__glewProgramUniform4fEXT) #define glProgramUniform4fvEXT GLEW_GET_FUN(__glewProgramUniform4fvEXT) #define glProgramUniform4iEXT GLEW_GET_FUN(__glewProgramUniform4iEXT) #define glProgramUniform4ivEXT GLEW_GET_FUN(__glewProgramUniform4ivEXT) #define glProgramUniform4uiEXT GLEW_GET_FUN(__glewProgramUniform4uiEXT) #define glProgramUniform4uivEXT GLEW_GET_FUN(__glewProgramUniform4uivEXT) -#define glProgramUniformMatrix2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2dvEXT) #define glProgramUniformMatrix2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2fvEXT) -#define glProgramUniformMatrix2x3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3dvEXT) #define glProgramUniformMatrix2x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3fvEXT) -#define glProgramUniformMatrix2x4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4dvEXT) #define glProgramUniformMatrix2x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4fvEXT) -#define glProgramUniformMatrix3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3dvEXT) #define glProgramUniformMatrix3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3fvEXT) -#define glProgramUniformMatrix3x2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2dvEXT) #define glProgramUniformMatrix3x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2fvEXT) -#define glProgramUniformMatrix3x4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4dvEXT) #define glProgramUniformMatrix3x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4fvEXT) -#define glProgramUniformMatrix4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4dvEXT) #define glProgramUniformMatrix4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4fvEXT) -#define glProgramUniformMatrix4x2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2dvEXT) #define glProgramUniformMatrix4x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2fvEXT) -#define glProgramUniformMatrix4x3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3dvEXT) #define glProgramUniformMatrix4x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3fvEXT) #define glPushClientAttribDefaultEXT GLEW_GET_FUN(__glewPushClientAttribDefaultEXT) #define glTextureBufferEXT GLEW_GET_FUN(__glewTextureBufferEXT) @@ -8739,10 +9208,10 @@ typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLin #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values); +typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); @@ -8851,7 +9320,7 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mod #define GL_EXT_multi_draw_arrays 1 typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid **indices, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid * const *indices, GLsizei primcount); #define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT) #define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT) @@ -8962,8 +9431,8 @@ typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void* data); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void* data); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); @@ -9334,9 +9803,9 @@ typedef void (GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); #define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT) #define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT) @@ -9413,7 +9882,7 @@ typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint leve #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); #define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT) @@ -9551,18 +10020,6 @@ typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum interna #ifndef GL_EXT_texture_env #define GL_EXT_texture_env 1 -#define GL_TEXTURE_ENV0_EXT 0 -#define GL_ENV_BLEND_EXT 0 -#define GL_TEXTURE_ENV_SHIFT_EXT 0 -#define GL_ENV_REPLACE_EXT 0 -#define GL_ENV_ADD_EXT 0 -#define GL_ENV_SUBTRACT_EXT 0 -#define GL_TEXTURE_ENV_MODE_ALPHA_EXT 0 -#define GL_ENV_REVERSE_SUBTRACT_EXT 0 -#define GL_ENV_REVERSE_BLEND_EXT 0 -#define GL_ENV_COPY_EXT 0 -#define GL_ENV_MODULATE_EXT 0 - #define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env) #endif /* GL_EXT_texture_env */ @@ -9933,7 +10390,7 @@ typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar ** varyings, GLenum bufferMode); +typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar * const* varyings, GLenum bufferMode); #define glBeginTransformFeedbackEXT GLEW_GET_FUN(__glewBeginTransformFeedbackEXT) #define glBindBufferBaseEXT GLEW_GET_FUN(__glewBindBufferBaseEXT) @@ -9987,13 +10444,13 @@ typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint progra #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 typedef void (GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean* pointer); -typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer); -typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer); -typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); #define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT) #define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT) @@ -10047,7 +10504,7 @@ typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble* v); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #define glGetVertexAttribLdvEXT GLEW_GET_FUN(__glewGetVertexAttribLdvEXT) #define glVertexArrayVertexAttribLOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribLOffsetEXT) @@ -10290,7 +10747,7 @@ typedef void (GLAPIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight); @@ -10335,7 +10792,7 @@ typedef void (GLAPIENTRY * PFNGLFRAMETERMINATORGREMEDYPROC) (void); #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 -typedef void (GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void* string); +typedef void (GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); #define glStringMarkerGREMEDY GLEW_GET_FUN(__glewStringMarkerGREMEDY) @@ -10380,9 +10837,6 @@ typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 - #define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test) #endif /* GL_HP_occlusion_test */ @@ -10529,6 +10983,28 @@ typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum ty #endif /* GL_INGR_interlace_read */ +/* -------------------------- GL_INTEL_map_texture ------------------------- */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 + +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF + +typedef GLvoid * (GLAPIENTRY * PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint* stride, GLenum *layout); +typedef void (GLAPIENTRY * PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (GLAPIENTRY * PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); + +#define glMapTexture2DINTEL GLEW_GET_FUN(__glewMapTexture2DINTEL) +#define glSyncTextureINTEL GLEW_GET_FUN(__glewSyncTextureINTEL) +#define glUnmapTexture2DINTEL GLEW_GET_FUN(__glewUnmapTexture2DINTEL) + +#define GLEW_INTEL_map_texture GLEW_GET_VAR(__GLEW_INTEL_map_texture) + +#endif /* GL_INTEL_map_texture */ + /* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ #ifndef GL_INTEL_parallel_arrays @@ -10617,15 +11093,15 @@ typedef void (GLAPIENTRY * PFNGLTEXSCISSORINTELPROC) (GLenum target, GLclampf tl typedef void (APIENTRY *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, void* userParam); +typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const GLvoid *userParam); typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); typedef void (GLAPIENTRY * PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar *label); typedef void (GLAPIENTRY * PFNGLGETOBJECTPTRLABELPROC) (void* ptr, GLsizei bufSize, GLsizei* length, GLchar *label); -typedef void (GLAPIENTRY * PFNGLGETPOINTERVPROC) (GLenum pname, void** params); typedef void (GLAPIENTRY * PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar* label); typedef void (GLAPIENTRY * PFNGLOBJECTPTRLABELPROC) (void* ptr, GLsizei length, const GLchar* label); +typedef void (GLAPIENTRY * PFNGLPOPDEBUGGROUPPROC) (void); typedef void (GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar * message); #define glDebugMessageCallback GLEW_GET_FUN(__glewDebugMessageCallback) @@ -10634,9 +11110,9 @@ typedef void (GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, G #define glGetDebugMessageLog GLEW_GET_FUN(__glewGetDebugMessageLog) #define glGetObjectLabel GLEW_GET_FUN(__glewGetObjectLabel) #define glGetObjectPtrLabel GLEW_GET_FUN(__glewGetObjectPtrLabel) -#define glGetPointerv GLEW_GET_FUN(__glewGetPointerv) #define glObjectLabel GLEW_GET_FUN(__glewObjectLabel) #define glObjectPtrLabel GLEW_GET_FUN(__glewObjectPtrLabel) +#define glPopDebugGroup GLEW_GET_FUN(__glewPopDebugGroup) #define glPushDebugGroup GLEW_GET_FUN(__glewPushDebugGroup) #define GLEW_KHR_debug GLEW_GET_VAR(__GLEW_KHR_debug) @@ -10819,6 +11295,21 @@ typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p); #endif /* GL_MESA_ycbcr_texture */ +/* ----------------------- GL_NVX_conditional_render ----------------------- */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 + +typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVXPROC) (void); + +#define glBeginConditionalRenderNVX GLEW_GET_FUN(__glewBeginConditionalRenderNVX) +#define glEndConditionalRenderNVX GLEW_GET_FUN(__glewEndConditionalRenderNVX) + +#define GLEW_NVX_conditional_render GLEW_GET_VAR(__GLEW_NVX_conditional_render) + +#endif /* GL_NVX_conditional_render */ + /* ------------------------- GL_NVX_gpu_memory_info ------------------------ */ #ifndef GL_NVX_gpu_memory_info @@ -10834,6 +11325,21 @@ typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p); #endif /* GL_NVX_gpu_memory_info */ +/* ------------------- GL_NV_bindless_multi_draw_indirect ------------------ */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 + +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); + +#define glMultiDrawArraysIndirectBindlessNV GLEW_GET_FUN(__glewMultiDrawArraysIndirectBindlessNV) +#define glMultiDrawElementsIndirectBindlessNV GLEW_GET_FUN(__glewMultiDrawElementsIndirectBindlessNV) + +#define GLEW_NV_bindless_multi_draw_indirect GLEW_GET_VAR(__GLEW_NV_bindless_multi_draw_indirect) + +#endif /* GL_NV_bindless_multi_draw_indirect */ + /* ------------------------- GL_NV_bindless_texture ------------------------ */ #ifndef GL_NV_bindless_texture @@ -10871,6 +11377,77 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsiz #endif /* GL_NV_bindless_texture */ +/* --------------------- GL_NV_blend_equation_advanced --------------------- */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 + +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_DISJOINT_NV 0x9283 +#define GL_CONJOINT_NV 0x9284 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#define GL_SRC_NV 0x9286 +#define GL_DST_NV 0x9287 +#define GL_SRC_OVER_NV 0x9288 +#define GL_DST_OVER_NV 0x9289 +#define GL_SRC_IN_NV 0x928A +#define GL_DST_IN_NV 0x928B +#define GL_SRC_OUT_NV 0x928C +#define GL_DST_OUT_NV 0x928D +#define GL_SRC_ATOP_NV 0x928E +#define GL_DST_ATOP_NV 0x928F +#define GL_PLUS_NV 0x9291 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_MULTIPLY_NV 0x9294 +#define GL_SCREEN_NV 0x9295 +#define GL_OVERLAY_NV 0x9296 +#define GL_DARKEN_NV 0x9297 +#define GL_LIGHTEN_NV 0x9298 +#define GL_COLORDODGE_NV 0x9299 +#define GL_COLORBURN_NV 0x929A +#define GL_HARDLIGHT_NV 0x929B +#define GL_SOFTLIGHT_NV 0x929C +#define GL_DIFFERENCE_NV 0x929E +#define GL_MINUS_NV 0x929F +#define GL_EXCLUSION_NV 0x92A0 +#define GL_CONTRAST_NV 0x92A1 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_INVERT_OVG_NV 0x92B4 + +typedef void (GLAPIENTRY * PFNGLBLENDBARRIERNVPROC) (void); +typedef void (GLAPIENTRY * PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); + +#define glBlendBarrierNV GLEW_GET_FUN(__glewBlendBarrierNV) +#define glBlendParameteriNV GLEW_GET_FUN(__glewBlendParameteriNV) + +#define GLEW_NV_blend_equation_advanced GLEW_GET_VAR(__GLEW_NV_blend_equation_advanced) + +#endif /* GL_NV_blend_equation_advanced */ + +/* ----------------- GL_NV_blend_equation_advanced_coherent ---------------- */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 + +#define GLEW_NV_blend_equation_advanced_coherent GLEW_GET_VAR(__GLEW_NV_blend_equation_advanced_coherent) + +#endif /* GL_NV_blend_equation_advanced_coherent */ + /* --------------------------- GL_NV_blend_square -------------------------- */ #ifndef GL_NV_blend_square @@ -10880,6 +11457,18 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsiz #endif /* GL_NV_blend_square */ +/* ------------------------- GL_NV_compute_program5 ------------------------ */ + +#ifndef GL_NV_compute_program5 +#define GL_NV_compute_program5 1 + +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC + +#define GLEW_NV_compute_program5 GLEW_GET_VAR(__GLEW_NV_compute_program5) + +#endif /* GL_NV_compute_program5 */ + /* ------------------------ GL_NV_conditional_render ----------------------- */ #ifndef GL_NV_conditional_render @@ -10925,6 +11514,18 @@ typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum #endif /* GL_NV_copy_image */ +/* -------------------------- GL_NV_deep_texture3D ------------------------- */ + +#ifndef GL_NV_deep_texture3D +#define GL_NV_deep_texture3D 1 + +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 + +#define GLEW_NV_deep_texture3D GLEW_GET_VAR(__GLEW_NV_deep_texture3D) + +#endif /* GL_NV_deep_texture3D */ + /* ------------------------ GL_NV_depth_buffer_float ----------------------- */ #ifndef GL_NV_depth_buffer_float @@ -10973,6 +11574,19 @@ typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFa #endif /* GL_NV_depth_range_unclamped */ +/* --------------------------- GL_NV_draw_texture -------------------------- */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 + +typedef void (GLAPIENTRY * PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); + +#define glDrawTextureNV GLEW_GET_FUN(__glewDrawTextureNV) + +#define GLEW_NV_draw_texture GLEW_GET_VAR(__GLEW_NV_draw_texture) + +#endif /* GL_NV_draw_texture */ + /* ---------------------------- GL_NV_evaluators --------------------------- */ #ifndef GL_NV_evaluators @@ -11006,10 +11620,10 @@ typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFa typedef void (GLAPIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void* points); +typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void* points); +typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); typedef void (GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat* params); typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint* params); @@ -11289,6 +11903,15 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum targe #endif /* GL_NV_gpu_program5 */ +/* -------------------- GL_NV_gpu_program5_mem_extended -------------------- */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 + +#define GLEW_NV_gpu_program5_mem_extended GLEW_GET_VAR(__GLEW_NV_gpu_program5_mem_extended) + +#endif /* GL_NV_gpu_program5_mem_extended */ + /* ------------------------- GL_NV_gpu_program_fp64 ------------------------ */ #ifndef GL_NV_gpu_program_fp64 @@ -11530,7 +12153,6 @@ typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalf* weight); #ifndef GL_NV_multisample_coverage #define GL_NV_multisample_coverage 1 -#define GL_COVERAGE_SAMPLES_NV 0x80A9 #define GL_COLOR_SAMPLES_NV 0x8E20 #define GLEW_NV_multisample_coverage GLEW_GET_VAR(__GLEW_NV_multisample_coverage) @@ -11672,8 +12294,6 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D #define GL_PRIMARY_COLOR 0x8577 #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 @@ -11875,7 +12495,7 @@ typedef void (GLAPIENTRY * PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei n #define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D typedef void (GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, void* pointer); +typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); #define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV) #define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV) @@ -12057,6 +12677,15 @@ typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage #endif /* GL_NV_register_combiners2 */ +/* ---------------------- GL_NV_shader_atomic_counters --------------------- */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 + +#define GLEW_NV_shader_atomic_counters GLEW_GET_VAR(__GLEW_NV_shader_atomic_counters) + +#endif /* GL_NV_shader_atomic_counters */ + /* ----------------------- GL_NV_shader_atomic_float ----------------------- */ #ifndef GL_NV_shader_atomic_float @@ -12107,6 +12736,15 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei cou #endif /* GL_NV_shader_buffer_load */ +/* ------------------- GL_NV_shader_storage_buffer_object ------------------ */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 + +#define GLEW_NV_shader_storage_buffer_object GLEW_GET_VAR(__GLEW_NV_shader_storage_buffer_object) + +#endif /* GL_NV_shader_storage_buffer_object */ + /* ---------------------- GL_NV_tessellation_program5 ---------------------- */ #ifndef GL_NV_tessellation_program5 @@ -12522,7 +13160,7 @@ typedef void (GLAPIENTRY * PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, GLvoid *pointer); #define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV) #define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV) @@ -12794,7 +13432,7 @@ typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort* v); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); @@ -13000,8 +13638,6 @@ typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint vid #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 -#define GL_BYTE 0x1400 - #define GLEW_OES_byte_coordinates GLEW_GET_VAR(__GLEW_OES_byte_coordinates) #endif /* GL_OES_byte_coordinates */ @@ -13163,6 +13799,138 @@ typedef void (GLAPIENTRY * PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, #endif /* GL_PGI_vertex_hints */ +/* ---------------------- GL_REGAL_ES1_0_compatibility --------------------- */ + +#ifndef GL_REGAL_ES1_0_compatibility +#define GL_REGAL_ES1_0_compatibility 1 + +typedef int GLclampx; + +typedef void (GLAPIENTRY * PFNGLALPHAFUNCXPROC) (GLenum func, GLclampx ref); +typedef void (GLAPIENTRY * PFNGLCLEARCOLORXPROC) (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); +typedef void (GLAPIENTRY * PFNGLCLEARDEPTHXPROC) (GLclampx depth); +typedef void (GLAPIENTRY * PFNGLCOLOR4XPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY * PFNGLDEPTHRANGEXPROC) (GLclampx zNear, GLclampx zFar); +typedef void (GLAPIENTRY * PFNGLFOGXPROC) (GLenum pname, GLfixed param); +typedef void (GLAPIENTRY * PFNGLFOGXVPROC) (GLenum pname, const GLfixed* params); +typedef void (GLAPIENTRY * PFNGLFRUSTUMFPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); +typedef void (GLAPIENTRY * PFNGLFRUSTUMXPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); +typedef void (GLAPIENTRY * PFNGLLIGHTMODELXPROC) (GLenum pname, GLfixed param); +typedef void (GLAPIENTRY * PFNGLLIGHTMODELXVPROC) (GLenum pname, const GLfixed* params); +typedef void (GLAPIENTRY * PFNGLLIGHTXPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY * PFNGLLIGHTXVPROC) (GLenum light, GLenum pname, const GLfixed* params); +typedef void (GLAPIENTRY * PFNGLLINEWIDTHXPROC) (GLfixed width); +typedef void (GLAPIENTRY * PFNGLLOADMATRIXXPROC) (const GLfixed* m); +typedef void (GLAPIENTRY * PFNGLMATERIALXPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY * PFNGLMATERIALXVPROC) (GLenum face, GLenum pname, const GLfixed* params); +typedef void (GLAPIENTRY * PFNGLMULTMATRIXXPROC) (const GLfixed* m); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAPIENTRY * PFNGLNORMAL3XPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (GLAPIENTRY * PFNGLORTHOFPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); +typedef void (GLAPIENTRY * PFNGLORTHOXPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); +typedef void (GLAPIENTRY * PFNGLPOINTSIZEXPROC) (GLfixed size); +typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETXPROC) (GLfixed factor, GLfixed units); +typedef void (GLAPIENTRY * PFNGLROTATEXPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEXPROC) (GLclampx value, GLboolean invert); +typedef void (GLAPIENTRY * PFNGLSCALEXPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY * PFNGLTEXENVXPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY * PFNGLTEXENVXVPROC) (GLenum target, GLenum pname, const GLfixed* params); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERXPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY * PFNGLTRANSLATEXPROC) (GLfixed x, GLfixed y, GLfixed z); + +#define glAlphaFuncx GLEW_GET_FUN(__glewAlphaFuncx) +#define glClearColorx GLEW_GET_FUN(__glewClearColorx) +#define glClearDepthx GLEW_GET_FUN(__glewClearDepthx) +#define glColor4x GLEW_GET_FUN(__glewColor4x) +#define glDepthRangex GLEW_GET_FUN(__glewDepthRangex) +#define glFogx GLEW_GET_FUN(__glewFogx) +#define glFogxv GLEW_GET_FUN(__glewFogxv) +#define glFrustumf GLEW_GET_FUN(__glewFrustumf) +#define glFrustumx GLEW_GET_FUN(__glewFrustumx) +#define glLightModelx GLEW_GET_FUN(__glewLightModelx) +#define glLightModelxv GLEW_GET_FUN(__glewLightModelxv) +#define glLightx GLEW_GET_FUN(__glewLightx) +#define glLightxv GLEW_GET_FUN(__glewLightxv) +#define glLineWidthx GLEW_GET_FUN(__glewLineWidthx) +#define glLoadMatrixx GLEW_GET_FUN(__glewLoadMatrixx) +#define glMaterialx GLEW_GET_FUN(__glewMaterialx) +#define glMaterialxv GLEW_GET_FUN(__glewMaterialxv) +#define glMultMatrixx GLEW_GET_FUN(__glewMultMatrixx) +#define glMultiTexCoord4x GLEW_GET_FUN(__glewMultiTexCoord4x) +#define glNormal3x GLEW_GET_FUN(__glewNormal3x) +#define glOrthof GLEW_GET_FUN(__glewOrthof) +#define glOrthox GLEW_GET_FUN(__glewOrthox) +#define glPointSizex GLEW_GET_FUN(__glewPointSizex) +#define glPolygonOffsetx GLEW_GET_FUN(__glewPolygonOffsetx) +#define glRotatex GLEW_GET_FUN(__glewRotatex) +#define glSampleCoveragex GLEW_GET_FUN(__glewSampleCoveragex) +#define glScalex GLEW_GET_FUN(__glewScalex) +#define glTexEnvx GLEW_GET_FUN(__glewTexEnvx) +#define glTexEnvxv GLEW_GET_FUN(__glewTexEnvxv) +#define glTexParameterx GLEW_GET_FUN(__glewTexParameterx) +#define glTranslatex GLEW_GET_FUN(__glewTranslatex) + +#define GLEW_REGAL_ES1_0_compatibility GLEW_GET_VAR(__GLEW_REGAL_ES1_0_compatibility) + +#endif /* GL_REGAL_ES1_0_compatibility */ + +/* ---------------------- GL_REGAL_ES1_1_compatibility --------------------- */ + +#ifndef GL_REGAL_ES1_1_compatibility +#define GL_REGAL_ES1_1_compatibility 1 + +typedef void (GLAPIENTRY * PFNGLCLIPPLANEFPROC) (GLenum plane, const GLfloat* equation); +typedef void (GLAPIENTRY * PFNGLCLIPPLANEXPROC) (GLenum plane, const GLfixed* equation); +typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFPROC) (GLenum pname, GLfloat eqn[4]); +typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEXPROC) (GLenum pname, GLfixed eqn[4]); +typedef void (GLAPIENTRY * PFNGLGETFIXEDVPROC) (GLenum pname, GLfixed* params); +typedef void (GLAPIENTRY * PFNGLGETLIGHTXVPROC) (GLenum light, GLenum pname, GLfixed* params); +typedef void (GLAPIENTRY * PFNGLGETMATERIALXVPROC) (GLenum face, GLenum pname, GLfixed* params); +typedef void (GLAPIENTRY * PFNGLGETTEXENVXVPROC) (GLenum env, GLenum pname, GLfixed* params); +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERXVPROC) (GLenum target, GLenum pname, GLfixed* params); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERXPROC) (GLenum pname, GLfixed param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERXVPROC) (GLenum pname, const GLfixed* params); +typedef void (GLAPIENTRY * PFNGLPOINTSIZEPOINTEROESPROC) (GLenum type, GLsizei stride, const GLvoid* pointer); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERXVPROC) (GLenum target, GLenum pname, const GLfixed* params); + +#define glClipPlanef GLEW_GET_FUN(__glewClipPlanef) +#define glClipPlanex GLEW_GET_FUN(__glewClipPlanex) +#define glGetClipPlanef GLEW_GET_FUN(__glewGetClipPlanef) +#define glGetClipPlanex GLEW_GET_FUN(__glewGetClipPlanex) +#define glGetFixedv GLEW_GET_FUN(__glewGetFixedv) +#define glGetLightxv GLEW_GET_FUN(__glewGetLightxv) +#define glGetMaterialxv GLEW_GET_FUN(__glewGetMaterialxv) +#define glGetTexEnvxv GLEW_GET_FUN(__glewGetTexEnvxv) +#define glGetTexParameterxv GLEW_GET_FUN(__glewGetTexParameterxv) +#define glPointParameterx GLEW_GET_FUN(__glewPointParameterx) +#define glPointParameterxv GLEW_GET_FUN(__glewPointParameterxv) +#define glPointSizePointerOES GLEW_GET_FUN(__glewPointSizePointerOES) +#define glTexParameterxv GLEW_GET_FUN(__glewTexParameterxv) + +#define GLEW_REGAL_ES1_1_compatibility GLEW_GET_VAR(__GLEW_REGAL_ES1_1_compatibility) + +#endif /* GL_REGAL_ES1_1_compatibility */ + +/* ---------------------------- GL_REGAL_enable ---------------------------- */ + +#ifndef GL_REGAL_enable +#define GL_REGAL_enable 1 + +#define GL_ERROR_REGAL 0x9322 +#define GL_DEBUG_REGAL 0x9323 +#define GL_LOG_REGAL 0x9324 +#define GL_EMULATION_REGAL 0x9325 +#define GL_DRIVER_REGAL 0x9326 +#define GL_MISSING_REGAL 0x9360 +#define GL_TRACE_REGAL 0x9361 +#define GL_CACHE_REGAL 0x9362 +#define GL_CODE_REGAL 0x9363 +#define GL_STATISTICS_REGAL 0x9364 + +#define GLEW_REGAL_enable GLEW_GET_VAR(__GLEW_REGAL_enable) + +#endif /* GL_REGAL_enable */ + /* ------------------------- GL_REGAL_error_string ------------------------- */ #ifndef GL_REGAL_error_string @@ -13206,6 +13974,12 @@ typedef GLboolean (GLAPIENTRY * PFNGLISSUPPORTEDREGALPROC) (const GLchar* ext); #define GL_LOG_STATUS_REGAL 0x9320 #define GL_LOG_HTTP_REGAL 0x9321 +typedef void (APIENTRY *GLLOGPROCREGAL)(GLenum stream, GLsizei length, const GLchar *message, GLvoid *context); + +typedef void (GLAPIENTRY * PFNGLLOGMESSAGECALLBACKREGALPROC) (GLLOGPROCREGAL callback); + +#define glLogMessageCallbackREGAL GLEW_GET_FUN(__glewLogMessageCallbackREGAL) + #define GLEW_REGAL_log GLEW_GET_VAR(__GLEW_REGAL_log) #endif /* GL_REGAL_log */ @@ -13378,8 +14152,8 @@ typedef void (GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 -typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const void* pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const GLvoid *pixels); #define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS) #define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS) @@ -13954,11 +14728,11 @@ typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params); typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* table); +typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void* table); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); #define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI) #define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI) @@ -14100,7 +14874,7 @@ typedef void (GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC) (GLint x, GLint y, GLsiz #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte* code); typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); @@ -14572,6 +15346,8 @@ GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSepa GLEW_FUN_EXPORT PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD; GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPARAMETERIAMDPROC __glewVertexAttribParameteriAMD; + GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD; @@ -14593,11 +15369,36 @@ GLEW_FUN_EXPORT PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCou GLEW_FUN_EXPORT PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD; +GLEW_FUN_EXPORT PFNGLTEXSTORAGESPARSEAMDPROC __glewTexStorageSparseAMD; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGESPARSEAMDPROC __glewTextureStorageSparseAMD; + GLEW_FUN_EXPORT PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD; GLEW_FUN_EXPORT PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD; GLEW_FUN_EXPORT PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD; +GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERANGLEPROC __glewBlitFramebufferANGLE; + +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC __glewRenderbufferStorageMultisampleANGLE; + +GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDANGLEPROC __glewDrawArraysInstancedANGLE; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDANGLEPROC __glewDrawElementsInstancedANGLE; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORANGLEPROC __glewVertexAttribDivisorANGLE; + +GLEW_FUN_EXPORT PFNGLBEGINQUERYANGLEPROC __glewBeginQueryANGLE; +GLEW_FUN_EXPORT PFNGLDELETEQUERIESANGLEPROC __glewDeleteQueriesANGLE; +GLEW_FUN_EXPORT PFNGLENDQUERYANGLEPROC __glewEndQueryANGLE; +GLEW_FUN_EXPORT PFNGLGENQUERIESANGLEPROC __glewGenQueriesANGLE; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VANGLEPROC __glewGetQueryObjecti64vANGLE; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVANGLEPROC __glewGetQueryObjectivANGLE; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VANGLEPROC __glewGetQueryObjectui64vANGLE; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVANGLEPROC __glewGetQueryObjectuivANGLE; +GLEW_FUN_EXPORT PFNGLGETQUERYIVANGLEPROC __glewGetQueryivANGLE; +GLEW_FUN_EXPORT PFNGLISQUERYANGLEPROC __glewIsQueryANGLE; +GLEW_FUN_EXPORT PFNGLQUERYCOUNTERANGLEPROC __glewQueryCounterANGLE; + +GLEW_FUN_EXPORT PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC __glewGetTranslatedShaderSourceANGLE; + GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE; @@ -14650,9 +15451,29 @@ GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstanc GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance; +GLEW_FUN_EXPORT PFNGLGETIMAGEHANDLEARBPROC __glewGetImageHandleARB; +GLEW_FUN_EXPORT PFNGLGETTEXTUREHANDLEARBPROC __glewGetTextureHandleARB; +GLEW_FUN_EXPORT PFNGLGETTEXTURESAMPLERHANDLEARBPROC __glewGetTextureSamplerHandleARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLUI64VARBPROC __glewGetVertexAttribLui64vARB; +GLEW_FUN_EXPORT PFNGLISIMAGEHANDLERESIDENTARBPROC __glewIsImageHandleResidentARB; +GLEW_FUN_EXPORT PFNGLISTEXTUREHANDLERESIDENTARBPROC __glewIsTextureHandleResidentARB; +GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC __glewMakeImageHandleNonResidentARB; +GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLERESIDENTARBPROC __glewMakeImageHandleResidentARB; +GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC __glewMakeTextureHandleNonResidentARB; +GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLERESIDENTARBPROC __glewMakeTextureHandleResidentARB; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC __glewProgramUniformHandleui64ARB; +GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC __glewProgramUniformHandleui64vARB; +GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64ARBPROC __glewUniformHandleui64ARB; +GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VARBPROC __glewUniformHandleui64vARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64ARBPROC __glewVertexAttribL1ui64ARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64VARBPROC __glewVertexAttribL1ui64vARB; + GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed; GLEW_FUN_EXPORT PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex; +GLEW_FUN_EXPORT PFNGLBUFFERSTORAGEPROC __glewBufferStorage; +GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT; + GLEW_FUN_EXPORT PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB; GLEW_FUN_EXPORT PFNGLCLEARBUFFERDATAPROC __glewClearBufferData; @@ -14660,11 +15481,16 @@ GLEW_FUN_EXPORT PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData; GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT; GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT; +GLEW_FUN_EXPORT PFNGLCLEARTEXIMAGEPROC __glewClearTexImage; +GLEW_FUN_EXPORT PFNGLCLEARTEXSUBIMAGEPROC __glewClearTexSubImage; + GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB; GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute; GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect; +GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC __glewDispatchComputeGroupSizeARB; + GLEW_FUN_EXPORT PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData; GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData; @@ -14776,6 +15602,9 @@ GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram; GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax; GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D; +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC __glewMultiDrawArraysIndirectCountARB; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC __glewMultiDrawElementsIndirectCountARB; + GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB; @@ -14800,6 +15629,13 @@ GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB; GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB; GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB; +GLEW_FUN_EXPORT PFNGLBINDBUFFERSBASEPROC __glewBindBuffersBase; +GLEW_FUN_EXPORT PFNGLBINDBUFFERSRANGEPROC __glewBindBuffersRange; +GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTURESPROC __glewBindImageTextures; +GLEW_FUN_EXPORT PFNGLBINDSAMPLERSPROC __glewBindSamplers; +GLEW_FUN_EXPORT PFNGLBINDTEXTURESPROC __glewBindTextures; +GLEW_FUN_EXPORT PFNGLBINDVERTEXBUFFERSPROC __glewBindVertexBuffers; + GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect; @@ -15023,6 +15859,9 @@ GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB; GLEW_FUN_EXPORT PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB; GLEW_FUN_EXPORT PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB; +GLEW_FUN_EXPORT PFNGLTEXPAGECOMMITMENTARBPROC __glewTexPageCommitmentARB; +GLEW_FUN_EXPORT PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT; + GLEW_FUN_EXPORT PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync; GLEW_FUN_EXPORT PFNGLDELETESYNCPROC __glewDeleteSync; GLEW_FUN_EXPORT PFNGLFENCESYNCPROC __glewFenceSync; @@ -15583,55 +16422,38 @@ GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT; GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT; GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT; GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DEXTPROC __glewProgramUniform1dEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DVEXTPROC __glewProgramUniform1dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DEXTPROC __glewProgramUniform2dEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DVEXTPROC __glewProgramUniform2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DEXTPROC __glewProgramUniform3dEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DVEXTPROC __glewProgramUniform3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DEXTPROC __glewProgramUniform4dEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DVEXTPROC __glewProgramUniform4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC __glewProgramUniformMatrix2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC __glewProgramUniformMatrix2x3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC __glewProgramUniformMatrix2x4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC __glewProgramUniformMatrix3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC __glewProgramUniformMatrix3x2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC __glewProgramUniformMatrix3x4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC __glewProgramUniformMatrix4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC __glewProgramUniformMatrix4x2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC __glewProgramUniformMatrix4x3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT; GLEW_FUN_EXPORT PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT; GLEW_FUN_EXPORT PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT; @@ -15966,6 +16788,10 @@ GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointe GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM; GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM; +GLEW_FUN_EXPORT PFNGLMAPTEXTURE2DINTELPROC __glewMapTexture2DINTEL; +GLEW_FUN_EXPORT PFNGLSYNCTEXTUREINTELPROC __glewSyncTextureINTEL; +GLEW_FUN_EXPORT PFNGLUNMAPTEXTURE2DINTELPROC __glewUnmapTexture2DINTEL; + GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL; GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL; GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL; @@ -15980,9 +16806,9 @@ GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert; GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog; GLEW_FUN_EXPORT PFNGLGETOBJECTLABELPROC __glewGetObjectLabel; GLEW_FUN_EXPORT PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel; -GLEW_FUN_EXPORT PFNGLGETPOINTERVPROC __glewGetPointerv; GLEW_FUN_EXPORT PFNGLOBJECTLABELPROC __glewObjectLabel; GLEW_FUN_EXPORT PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel; +GLEW_FUN_EXPORT PFNGLPOPDEBUGGROUPPROC __glewPopDebugGroup; GLEW_FUN_EXPORT PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup; GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled; @@ -16018,6 +16844,12 @@ GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA; +GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX; +GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX; + +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV; + GLEW_FUN_EXPORT PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV; GLEW_FUN_EXPORT PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV; GLEW_FUN_EXPORT PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV; @@ -16032,6 +16864,9 @@ GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleu GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV; GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV; +GLEW_FUN_EXPORT PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV; +GLEW_FUN_EXPORT PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV; + GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV; GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV; @@ -16041,6 +16876,8 @@ GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV; GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV; GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV; +GLEW_FUN_EXPORT PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV; + GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV; GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV; GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV; @@ -16439,11 +17276,59 @@ GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES; GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES; GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES; +GLEW_FUN_EXPORT PFNGLALPHAFUNCXPROC __glewAlphaFuncx; +GLEW_FUN_EXPORT PFNGLCLEARCOLORXPROC __glewClearColorx; +GLEW_FUN_EXPORT PFNGLCLEARDEPTHXPROC __glewClearDepthx; +GLEW_FUN_EXPORT PFNGLCOLOR4XPROC __glewColor4x; +GLEW_FUN_EXPORT PFNGLDEPTHRANGEXPROC __glewDepthRangex; +GLEW_FUN_EXPORT PFNGLFOGXPROC __glewFogx; +GLEW_FUN_EXPORT PFNGLFOGXVPROC __glewFogxv; +GLEW_FUN_EXPORT PFNGLFRUSTUMFPROC __glewFrustumf; +GLEW_FUN_EXPORT PFNGLFRUSTUMXPROC __glewFrustumx; +GLEW_FUN_EXPORT PFNGLLIGHTMODELXPROC __glewLightModelx; +GLEW_FUN_EXPORT PFNGLLIGHTMODELXVPROC __glewLightModelxv; +GLEW_FUN_EXPORT PFNGLLIGHTXPROC __glewLightx; +GLEW_FUN_EXPORT PFNGLLIGHTXVPROC __glewLightxv; +GLEW_FUN_EXPORT PFNGLLINEWIDTHXPROC __glewLineWidthx; +GLEW_FUN_EXPORT PFNGLLOADMATRIXXPROC __glewLoadMatrixx; +GLEW_FUN_EXPORT PFNGLMATERIALXPROC __glewMaterialx; +GLEW_FUN_EXPORT PFNGLMATERIALXVPROC __glewMaterialxv; +GLEW_FUN_EXPORT PFNGLMULTMATRIXXPROC __glewMultMatrixx; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4XPROC __glewMultiTexCoord4x; +GLEW_FUN_EXPORT PFNGLNORMAL3XPROC __glewNormal3x; +GLEW_FUN_EXPORT PFNGLORTHOFPROC __glewOrthof; +GLEW_FUN_EXPORT PFNGLORTHOXPROC __glewOrthox; +GLEW_FUN_EXPORT PFNGLPOINTSIZEXPROC __glewPointSizex; +GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETXPROC __glewPolygonOffsetx; +GLEW_FUN_EXPORT PFNGLROTATEXPROC __glewRotatex; +GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEXPROC __glewSampleCoveragex; +GLEW_FUN_EXPORT PFNGLSCALEXPROC __glewScalex; +GLEW_FUN_EXPORT PFNGLTEXENVXPROC __glewTexEnvx; +GLEW_FUN_EXPORT PFNGLTEXENVXVPROC __glewTexEnvxv; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERXPROC __glewTexParameterx; +GLEW_FUN_EXPORT PFNGLTRANSLATEXPROC __glewTranslatex; + +GLEW_FUN_EXPORT PFNGLCLIPPLANEFPROC __glewClipPlanef; +GLEW_FUN_EXPORT PFNGLCLIPPLANEXPROC __glewClipPlanex; +GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFPROC __glewGetClipPlanef; +GLEW_FUN_EXPORT PFNGLGETCLIPPLANEXPROC __glewGetClipPlanex; +GLEW_FUN_EXPORT PFNGLGETFIXEDVPROC __glewGetFixedv; +GLEW_FUN_EXPORT PFNGLGETLIGHTXVPROC __glewGetLightxv; +GLEW_FUN_EXPORT PFNGLGETMATERIALXVPROC __glewGetMaterialxv; +GLEW_FUN_EXPORT PFNGLGETTEXENVXVPROC __glewGetTexEnvxv; +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERXVPROC __glewGetTexParameterxv; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERXPROC __glewPointParameterx; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERXVPROC __glewPointParameterxv; +GLEW_FUN_EXPORT PFNGLPOINTSIZEPOINTEROESPROC __glewPointSizePointerOES; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERXVPROC __glewTexParameterxv; + GLEW_FUN_EXPORT PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL; GLEW_FUN_EXPORT PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL; GLEW_FUN_EXPORT PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL; +GLEW_FUN_EXPORT PFNGLLOGMESSAGECALLBACKREGALPROC __glewLogMessageCallbackREGAL; + GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS; GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS; @@ -16597,6 +17482,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_0; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_1; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_2; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_3; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_4; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1; @@ -16605,6 +17491,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_AMD_conservative_depth; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_debug_output; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_depth_clamp_separate; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_draw_buffers_blend; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_interleaved_elements; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_multi_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_name_gen_delete; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_performance_monitor; @@ -16613,12 +17500,26 @@ GLEW_VAR_EXPORT GLboolean __GLEW_AMD_query_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sample_positions; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_seamless_cubemap_per_texture; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_export; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_trinary_minmax; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sparse_texture; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_stencil_operation_extended; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_texture4; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback3_lines_triangles; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_layer; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_tessellator; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_viewport_index; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_depth_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_blit; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_instanced_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_pack_reverse_row_order; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_program_binary; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt1; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt3; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt5; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_usage; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_timer_query; +GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_translated_shader_source; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_aux_depth_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array; @@ -16640,13 +17541,17 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES2_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES3_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_arrays_of_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_base_instance; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_bindless_texture; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_blend_func_extended; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_buffer_storage; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_cl_event; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_clear_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_clear_texture; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compressed_texture_pixel_storage; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compute_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compute_variable_group_size; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_conservative_depth; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_image; @@ -16659,6 +17564,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers_blend; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_elements_base_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_instanced; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_enhanced_layouts; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_attrib_location; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_uniform_location; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_coord_conventions; @@ -16676,6 +17582,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader_fp64; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_indirect_parameters; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_instanced_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query2; @@ -16683,6 +17590,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_invalidate_subdata; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_alignment; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_range; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multi_bind; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multi_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture; @@ -16693,6 +17601,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_program_interface_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_provoking_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_query_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robust_buffer_access_behavior; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_application_isolation; @@ -16700,9 +17609,12 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_share_group_isolation; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sample_shading; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sampler_objects; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cube_map; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cubemap_per_texture; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_separate_shader_objects; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_atomic_counters; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_bit_encoding; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_draw_parameters; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_group_vote; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_load_store; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_size; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects; @@ -16717,6 +17629,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_include; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_packing; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sparse_texture; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_stencil_texturing; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sync; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_tessellation_shader; @@ -16735,6 +17648,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_gather; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirror_clamp_to_edge; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two; @@ -16743,6 +17657,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_lod; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rg; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rgb10_a2ui; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_stencil8; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_swizzle; @@ -16761,6 +17676,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_10f_11f_11f_rev; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_viewport_array; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos; @@ -16899,6 +17815,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat; GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists; GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read; +GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_map_texture; GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_debug; @@ -16909,15 +17826,22 @@ GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert; GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers; GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos; GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_NVX_conditional_render; GLEW_VAR_EXPORT GLboolean __GLEW_NVX_gpu_memory_info; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_multi_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced_coherent; GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_compute_program5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_conditional_render; GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color; GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_image; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_deep_texture3D; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_texture; GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators; GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence; @@ -16932,6 +17856,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5_mem_extended; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program_fp64; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_shader5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float; @@ -16949,8 +17874,10 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_present_video; GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart; GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners; GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_counters; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_storage_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection; @@ -16986,6 +17913,9 @@ GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample; GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample; GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints; GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints; +GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_0_compatibility; +GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_1_compatibility; +GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_enable; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_error_string; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_extension_query; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_log; diff --git a/Externals/GLew/include/GL/glxew.h b/Externals/GLew/include/GL/glxew.h index 0b66bde33a..015cc32f49 100644 --- a/Externals/GLew/include/GL/glxew.h +++ b/Externals/GLew/include/GL/glxew.h @@ -362,6 +362,26 @@ extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); #define GLX_GPU_NUM_RB_AMD 0x21A7 #define GLX_GPU_NUM_SPI_AMD 0x21A8 +typedef void ( * PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC) (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef GLXContext ( * PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC) (unsigned int id, GLXContext share_list); +typedef GLXContext ( * PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (unsigned int id, GLXContext share_context, const int* attribList); +typedef Bool ( * PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC) (GLXContext ctx); +typedef unsigned int ( * PFNGLXGETCONTEXTGPUIDAMDPROC) (GLXContext ctx); +typedef GLXContext ( * PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); +typedef unsigned int ( * PFNGLXGETGPUIDSAMDPROC) (unsigned int maxCount, unsigned int* ids); +typedef int ( * PFNGLXGETGPUINFOAMDPROC) (unsigned int id, int property, GLenum dataType, unsigned int size, void* data); +typedef Bool ( * PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx); + +#define glXBlitContextFramebufferAMD GLXEW_GET_FUN(__glewXBlitContextFramebufferAMD) +#define glXCreateAssociatedContextAMD GLXEW_GET_FUN(__glewXCreateAssociatedContextAMD) +#define glXCreateAssociatedContextAttribsAMD GLXEW_GET_FUN(__glewXCreateAssociatedContextAttribsAMD) +#define glXDeleteAssociatedContextAMD GLXEW_GET_FUN(__glewXDeleteAssociatedContextAMD) +#define glXGetContextGPUIDAMD GLXEW_GET_FUN(__glewXGetContextGPUIDAMD) +#define glXGetCurrentAssociatedContextAMD GLXEW_GET_FUN(__glewXGetCurrentAssociatedContextAMD) +#define glXGetGPUIDsAMD GLXEW_GET_FUN(__glewXGetGPUIDsAMD) +#define glXGetGPUInfoAMD GLXEW_GET_FUN(__glewXGetGPUInfoAMD) +#define glXMakeAssociatedContextCurrentAMD GLXEW_GET_FUN(__glewXMakeAssociatedContextCurrentAMD) + #define GLXEW_AMD_gpu_association GLXEW_GET_VAR(__GLXEW_AMD_gpu_association) #endif /* GLX_AMD_gpu_association */ @@ -555,6 +575,17 @@ typedef void ( * PFNGLXRELEASETEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, i #endif /* GLX_ATI_render_texture */ +/* --------------------------- GLX_EXT_buffer_age -------------------------- */ + +#ifndef GLX_EXT_buffer_age +#define GLX_EXT_buffer_age 1 + +#define GLX_BACK_BUFFER_AGE_EXT 0x20F4 + +#define GLXEW_EXT_buffer_age GLXEW_GET_VAR(__GLXEW_EXT_buffer_age) + +#endif /* GLX_EXT_buffer_age */ + /* ------------------- GLX_EXT_create_context_es2_profile ------------------ */ #ifndef GLX_EXT_create_context_es2_profile @@ -962,10 +993,10 @@ typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoC #endif /* GLX_NV_video_capture */ -/* ---------------------------- GLX_NV_video_out --------------------------- */ +/* -------------------------- GLX_NV_video_output -------------------------- */ -#ifndef GLX_NV_video_out -#define GLX_NV_video_out 1 +#ifndef GLX_NV_video_output +#define GLX_NV_video_output 1 #define GLX_VIDEO_OUT_COLOR_NV 0x20C3 #define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 @@ -992,9 +1023,9 @@ typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display* dpy, GLXPbuffer pbuf, #define glXReleaseVideoImageNV GLXEW_GET_FUN(__glewXReleaseVideoImageNV) #define glXSendPbufferToVideoNV GLXEW_GET_FUN(__glewXSendPbufferToVideoNV) -#define GLXEW_NV_video_out GLXEW_GET_VAR(__GLXEW_NV_video_out) +#define GLXEW_NV_video_output GLXEW_GET_VAR(__GLXEW_NV_video_output) -#endif /* GLX_NV_video_out */ +#endif /* GLX_NV_video_output */ /* -------------------------- GLX_OML_swap_method -------------------------- */ @@ -1047,16 +1078,6 @@ typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, i #ifndef GLX_SGIS_color_range #define GLX_SGIS_color_range 1 -#define GLX_MIN_RED_SGIS 0 -#define GLX_MAX_GREEN_SGIS 0 -#define GLX_MIN_BLUE_SGIS 0 -#define GLX_MAX_ALPHA_SGIS 0 -#define GLX_MIN_GREEN_SGIS 0 -#define GLX_MIN_ALPHA_SGIS 0 -#define GLX_MAX_RED_SGIS 0 -#define GLX_EXTENDED_RANGE_SGIS 0 -#define GLX_MAX_BLUE_SGIS 0 - #define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range) #endif /* GLX_SGIS_color_range */ @@ -1393,7 +1414,7 @@ typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, /* ------------------------------------------------------------------------- */ #ifdef GLEW_MX -#define GLXEW_FUN_EXPORT +#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT #define GLXEW_VAR_EXPORT #else #define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT @@ -1420,6 +1441,16 @@ GLXEW_FUN_EXPORT PFNGLXQUERYCONTEXTPROC __glewXQueryContext; GLXEW_FUN_EXPORT PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable; GLXEW_FUN_EXPORT PFNGLXSELECTEVENTPROC __glewXSelectEvent; +GLXEW_FUN_EXPORT PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC __glewXBlitContextFramebufferAMD; +GLXEW_FUN_EXPORT PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC __glewXCreateAssociatedContextAMD; +GLXEW_FUN_EXPORT PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __glewXCreateAssociatedContextAttribsAMD; +GLXEW_FUN_EXPORT PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC __glewXDeleteAssociatedContextAMD; +GLXEW_FUN_EXPORT PFNGLXGETCONTEXTGPUIDAMDPROC __glewXGetContextGPUIDAMD; +GLXEW_FUN_EXPORT PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC __glewXGetCurrentAssociatedContextAMD; +GLXEW_FUN_EXPORT PFNGLXGETGPUIDSAMDPROC __glewXGetGPUIDsAMD; +GLXEW_FUN_EXPORT PFNGLXGETGPUINFOAMDPROC __glewXGetGPUInfoAMD; +GLXEW_FUN_EXPORT PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __glewXMakeAssociatedContextCurrentAMD; + GLXEW_FUN_EXPORT PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB; GLXEW_FUN_EXPORT PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI; @@ -1555,6 +1586,7 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_robustness_share_group_isolation; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_vertex_buffer_object; GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_pixel_format_float; GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_render_texture; +GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_buffer_age; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es2_profile; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es_profile; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float; @@ -1580,7 +1612,7 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_present_video; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_swap_group; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_vertex_array_range; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_capture; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_out; +GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_output; GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_swap_method; GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_sync_control; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_blended_overlay; diff --git a/Externals/GLew/include/GL/wglew.h b/Externals/GLew/include/GL/wglew.h index 6dc08cdeee..1e77920c6c 100644 --- a/Externals/GLew/include/GL/wglew.h +++ b/Externals/GLew/include/GL/wglew.h @@ -446,6 +446,28 @@ typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, con #endif /* WGL_ARB_render_texture */ +/* ---------------- WGL_ARB_robustness_application_isolation --------------- */ + +#ifndef WGL_ARB_robustness_application_isolation +#define WGL_ARB_robustness_application_isolation 1 + +#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 + +#define WGLEW_ARB_robustness_application_isolation WGLEW_GET_VAR(__WGLEW_ARB_robustness_application_isolation) + +#endif /* WGL_ARB_robustness_application_isolation */ + +/* ---------------- WGL_ARB_robustness_share_group_isolation --------------- */ + +#ifndef WGL_ARB_robustness_share_group_isolation +#define WGL_ARB_robustness_share_group_isolation 1 + +#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 + +#define WGLEW_ARB_robustness_share_group_isolation WGLEW_GET_VAR(__WGLEW_ARB_robustness_share_group_isolation) + +#endif /* WGL_ARB_robustness_share_group_isolation */ + /* ----------------------- WGL_ATI_pixel_format_float ---------------------- */ #ifndef WGL_ATI_pixel_format_float @@ -1323,6 +1345,8 @@ WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pbuffer; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format_float; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_render_texture; +WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_application_isolation; +WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_share_group_isolation; WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_pixel_format_float; WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es2_profile; diff --git a/Externals/GLew/src/glew.c b/Externals/GLew/src/glew.c index 3703d9d306..5e5b904ae6 100644 --- a/Externals/GLew/src/glew.c +++ b/Externals/GLew/src/glew.c @@ -33,7 +33,7 @@ #if defined(_WIN32) # include -#elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) +#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) # include #endif @@ -166,6 +166,8 @@ void* NSGLGetProcAddress (const GLubyte *name) # define glewGetProcAddress(name) dlGetProcAddress(name) #elif defined(__ANDROID__) # define glewGetProcAddress(name) NULL /* TODO */ +#elif defined(__native_client__) +# define glewGetProcAddress(name) NULL /* TODO */ #else /* __linux */ # define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) #endif @@ -585,6 +587,8 @@ PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD = PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD = NULL; PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD = NULL; +PFNGLVERTEXATTRIBPARAMETERIAMDPROC __glewVertexAttribParameteriAMD = NULL; + PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD = NULL; PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD = NULL; @@ -606,11 +610,36 @@ PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD = NULL; PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD = NULL; +PFNGLTEXSTORAGESPARSEAMDPROC __glewTexStorageSparseAMD = NULL; +PFNGLTEXTURESTORAGESPARSEAMDPROC __glewTextureStorageSparseAMD = NULL; + PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD = NULL; PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD = NULL; PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD = NULL; +PFNGLBLITFRAMEBUFFERANGLEPROC __glewBlitFramebufferANGLE = NULL; + +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC __glewRenderbufferStorageMultisampleANGLE = NULL; + +PFNGLDRAWARRAYSINSTANCEDANGLEPROC __glewDrawArraysInstancedANGLE = NULL; +PFNGLDRAWELEMENTSINSTANCEDANGLEPROC __glewDrawElementsInstancedANGLE = NULL; +PFNGLVERTEXATTRIBDIVISORANGLEPROC __glewVertexAttribDivisorANGLE = NULL; + +PFNGLBEGINQUERYANGLEPROC __glewBeginQueryANGLE = NULL; +PFNGLDELETEQUERIESANGLEPROC __glewDeleteQueriesANGLE = NULL; +PFNGLENDQUERYANGLEPROC __glewEndQueryANGLE = NULL; +PFNGLGENQUERIESANGLEPROC __glewGenQueriesANGLE = NULL; +PFNGLGETQUERYOBJECTI64VANGLEPROC __glewGetQueryObjecti64vANGLE = NULL; +PFNGLGETQUERYOBJECTIVANGLEPROC __glewGetQueryObjectivANGLE = NULL; +PFNGLGETQUERYOBJECTUI64VANGLEPROC __glewGetQueryObjectui64vANGLE = NULL; +PFNGLGETQUERYOBJECTUIVANGLEPROC __glewGetQueryObjectuivANGLE = NULL; +PFNGLGETQUERYIVANGLEPROC __glewGetQueryivANGLE = NULL; +PFNGLISQUERYANGLEPROC __glewIsQueryANGLE = NULL; +PFNGLQUERYCOUNTERANGLEPROC __glewQueryCounterANGLE = NULL; + +PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC __glewGetTranslatedShaderSourceANGLE = NULL; + PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE = NULL; PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE = NULL; PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE = NULL; @@ -663,9 +692,29 @@ PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance = PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance = NULL; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance = NULL; +PFNGLGETIMAGEHANDLEARBPROC __glewGetImageHandleARB = NULL; +PFNGLGETTEXTUREHANDLEARBPROC __glewGetTextureHandleARB = NULL; +PFNGLGETTEXTURESAMPLERHANDLEARBPROC __glewGetTextureSamplerHandleARB = NULL; +PFNGLGETVERTEXATTRIBLUI64VARBPROC __glewGetVertexAttribLui64vARB = NULL; +PFNGLISIMAGEHANDLERESIDENTARBPROC __glewIsImageHandleResidentARB = NULL; +PFNGLISTEXTUREHANDLERESIDENTARBPROC __glewIsTextureHandleResidentARB = NULL; +PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC __glewMakeImageHandleNonResidentARB = NULL; +PFNGLMAKEIMAGEHANDLERESIDENTARBPROC __glewMakeImageHandleResidentARB = NULL; +PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC __glewMakeTextureHandleNonResidentARB = NULL; +PFNGLMAKETEXTUREHANDLERESIDENTARBPROC __glewMakeTextureHandleResidentARB = NULL; +PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC __glewProgramUniformHandleui64ARB = NULL; +PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC __glewProgramUniformHandleui64vARB = NULL; +PFNGLUNIFORMHANDLEUI64ARBPROC __glewUniformHandleui64ARB = NULL; +PFNGLUNIFORMHANDLEUI64VARBPROC __glewUniformHandleui64vARB = NULL; +PFNGLVERTEXATTRIBL1UI64ARBPROC __glewVertexAttribL1ui64ARB = NULL; +PFNGLVERTEXATTRIBL1UI64VARBPROC __glewVertexAttribL1ui64vARB = NULL; + PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed = NULL; PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex = NULL; +PFNGLBUFFERSTORAGEPROC __glewBufferStorage = NULL; +PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT = NULL; + PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB = NULL; PFNGLCLEARBUFFERDATAPROC __glewClearBufferData = NULL; @@ -673,11 +722,16 @@ PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData = NULL; PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT = NULL; PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT = NULL; +PFNGLCLEARTEXIMAGEPROC __glewClearTexImage = NULL; +PFNGLCLEARTEXSUBIMAGEPROC __glewClearTexSubImage = NULL; + PFNGLCLAMPCOLORARBPROC __glewClampColorARB = NULL; PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute = NULL; PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect = NULL; +PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC __glewDispatchComputeGroupSizeARB = NULL; + PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData = NULL; PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData = NULL; @@ -789,6 +843,9 @@ PFNGLRESETHISTOGRAMPROC __glewResetHistogram = NULL; PFNGLRESETMINMAXPROC __glewResetMinmax = NULL; PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC __glewMultiDrawArraysIndirectCountARB = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC __glewMultiDrawElementsIndirectCountARB = NULL; + PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB = NULL; PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB = NULL; PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB = NULL; @@ -813,6 +870,13 @@ PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB = NULL; PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB = NULL; PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB = NULL; +PFNGLBINDBUFFERSBASEPROC __glewBindBuffersBase = NULL; +PFNGLBINDBUFFERSRANGEPROC __glewBindBuffersRange = NULL; +PFNGLBINDIMAGETEXTURESPROC __glewBindImageTextures = NULL; +PFNGLBINDSAMPLERSPROC __glewBindSamplers = NULL; +PFNGLBINDTEXTURESPROC __glewBindTextures = NULL; +PFNGLBINDVERTEXBUFFERSPROC __glewBindVertexBuffers = NULL; + PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect = NULL; PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect = NULL; @@ -1036,6 +1100,9 @@ PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB = NULL; PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB = NULL; PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB = NULL; +PFNGLTEXPAGECOMMITMENTARBPROC __glewTexPageCommitmentARB = NULL; +PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT = NULL; + PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync = NULL; PFNGLDELETESYNCPROC __glewDeleteSync = NULL; PFNGLFENCESYNCPROC __glewFenceSync = NULL; @@ -1596,55 +1663,38 @@ PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT = NULL; PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT = NULL; PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT = NULL; PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT = NULL; -PFNGLPROGRAMUNIFORM1DEXTPROC __glewProgramUniform1dEXT = NULL; -PFNGLPROGRAMUNIFORM1DVEXTPROC __glewProgramUniform1dvEXT = NULL; PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT = NULL; PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT = NULL; PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT = NULL; PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT = NULL; PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT = NULL; PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT = NULL; -PFNGLPROGRAMUNIFORM2DEXTPROC __glewProgramUniform2dEXT = NULL; -PFNGLPROGRAMUNIFORM2DVEXTPROC __glewProgramUniform2dvEXT = NULL; PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT = NULL; PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT = NULL; PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT = NULL; PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT = NULL; PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT = NULL; PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT = NULL; -PFNGLPROGRAMUNIFORM3DEXTPROC __glewProgramUniform3dEXT = NULL; -PFNGLPROGRAMUNIFORM3DVEXTPROC __glewProgramUniform3dvEXT = NULL; PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT = NULL; PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT = NULL; PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT = NULL; PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT = NULL; PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT = NULL; PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT = NULL; -PFNGLPROGRAMUNIFORM4DEXTPROC __glewProgramUniform4dEXT = NULL; -PFNGLPROGRAMUNIFORM4DVEXTPROC __glewProgramUniform4dvEXT = NULL; PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT = NULL; PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT = NULL; PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT = NULL; PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT = NULL; PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT = NULL; PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC __glewProgramUniformMatrix2dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC __glewProgramUniformMatrix2x3dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC __glewProgramUniformMatrix2x4dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC __glewProgramUniformMatrix3dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC __glewProgramUniformMatrix3x2dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC __glewProgramUniformMatrix3x4dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC __glewProgramUniformMatrix4dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC __glewProgramUniformMatrix4x2dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC __glewProgramUniformMatrix4x3dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT = NULL; PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT = NULL; PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT = NULL; @@ -1979,6 +2029,10 @@ PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM = NULL; PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM = NULL; PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM = NULL; +PFNGLMAPTEXTURE2DINTELPROC __glewMapTexture2DINTEL = NULL; +PFNGLSYNCTEXTUREINTELPROC __glewSyncTextureINTEL = NULL; +PFNGLUNMAPTEXTURE2DINTELPROC __glewUnmapTexture2DINTEL = NULL; + PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL = NULL; PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL = NULL; PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL = NULL; @@ -1993,9 +2047,9 @@ PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert = NULL; PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog = NULL; PFNGLGETOBJECTLABELPROC __glewGetObjectLabel = NULL; PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel = NULL; -PFNGLGETPOINTERVPROC __glewGetPointerv = NULL; PFNGLOBJECTLABELPROC __glewObjectLabel = NULL; PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel = NULL; +PFNGLPOPDEBUGGROUPPROC __glewPopDebugGroup = NULL; PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup = NULL; PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled = NULL; @@ -2031,6 +2085,12 @@ PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA = NULL; PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA = NULL; PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA = NULL; +PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX = NULL; +PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX = NULL; + +PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV = NULL; + PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV = NULL; PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV = NULL; PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV = NULL; @@ -2045,6 +2105,9 @@ PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleui64vNV = NULL; PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV = NULL; PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV = NULL; +PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV = NULL; +PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV = NULL; + PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV = NULL; PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV = NULL; @@ -2054,6 +2117,8 @@ PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV = NULL; PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV = NULL; PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV = NULL; +PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV = NULL; + PFNGLEVALMAPSNVPROC __glewEvalMapsNV = NULL; PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV = NULL; PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV = NULL; @@ -2452,11 +2517,59 @@ PFNGLFRUSTUMFOESPROC __glewFrustumfOES = NULL; PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES = NULL; PFNGLORTHOFOESPROC __glewOrthofOES = NULL; +PFNGLALPHAFUNCXPROC __glewAlphaFuncx = NULL; +PFNGLCLEARCOLORXPROC __glewClearColorx = NULL; +PFNGLCLEARDEPTHXPROC __glewClearDepthx = NULL; +PFNGLCOLOR4XPROC __glewColor4x = NULL; +PFNGLDEPTHRANGEXPROC __glewDepthRangex = NULL; +PFNGLFOGXPROC __glewFogx = NULL; +PFNGLFOGXVPROC __glewFogxv = NULL; +PFNGLFRUSTUMFPROC __glewFrustumf = NULL; +PFNGLFRUSTUMXPROC __glewFrustumx = NULL; +PFNGLLIGHTMODELXPROC __glewLightModelx = NULL; +PFNGLLIGHTMODELXVPROC __glewLightModelxv = NULL; +PFNGLLIGHTXPROC __glewLightx = NULL; +PFNGLLIGHTXVPROC __glewLightxv = NULL; +PFNGLLINEWIDTHXPROC __glewLineWidthx = NULL; +PFNGLLOADMATRIXXPROC __glewLoadMatrixx = NULL; +PFNGLMATERIALXPROC __glewMaterialx = NULL; +PFNGLMATERIALXVPROC __glewMaterialxv = NULL; +PFNGLMULTMATRIXXPROC __glewMultMatrixx = NULL; +PFNGLMULTITEXCOORD4XPROC __glewMultiTexCoord4x = NULL; +PFNGLNORMAL3XPROC __glewNormal3x = NULL; +PFNGLORTHOFPROC __glewOrthof = NULL; +PFNGLORTHOXPROC __glewOrthox = NULL; +PFNGLPOINTSIZEXPROC __glewPointSizex = NULL; +PFNGLPOLYGONOFFSETXPROC __glewPolygonOffsetx = NULL; +PFNGLROTATEXPROC __glewRotatex = NULL; +PFNGLSAMPLECOVERAGEXPROC __glewSampleCoveragex = NULL; +PFNGLSCALEXPROC __glewScalex = NULL; +PFNGLTEXENVXPROC __glewTexEnvx = NULL; +PFNGLTEXENVXVPROC __glewTexEnvxv = NULL; +PFNGLTEXPARAMETERXPROC __glewTexParameterx = NULL; +PFNGLTRANSLATEXPROC __glewTranslatex = NULL; + +PFNGLCLIPPLANEFPROC __glewClipPlanef = NULL; +PFNGLCLIPPLANEXPROC __glewClipPlanex = NULL; +PFNGLGETCLIPPLANEFPROC __glewGetClipPlanef = NULL; +PFNGLGETCLIPPLANEXPROC __glewGetClipPlanex = NULL; +PFNGLGETFIXEDVPROC __glewGetFixedv = NULL; +PFNGLGETLIGHTXVPROC __glewGetLightxv = NULL; +PFNGLGETMATERIALXVPROC __glewGetMaterialxv = NULL; +PFNGLGETTEXENVXVPROC __glewGetTexEnvxv = NULL; +PFNGLGETTEXPARAMETERXVPROC __glewGetTexParameterxv = NULL; +PFNGLPOINTPARAMETERXPROC __glewPointParameterx = NULL; +PFNGLPOINTPARAMETERXVPROC __glewPointParameterxv = NULL; +PFNGLPOINTSIZEPOINTEROESPROC __glewPointSizePointerOES = NULL; +PFNGLTEXPARAMETERXVPROC __glewTexParameterxv = NULL; + PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL = NULL; PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL = NULL; PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL = NULL; +PFNGLLOGMESSAGECALLBACKREGALPROC __glewLogMessageCallbackREGAL = NULL; + PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS = NULL; PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS = NULL; @@ -2609,6 +2722,7 @@ GLboolean __GLEW_VERSION_4_0 = GL_FALSE; GLboolean __GLEW_VERSION_4_1 = GL_FALSE; GLboolean __GLEW_VERSION_4_2 = GL_FALSE; GLboolean __GLEW_VERSION_4_3 = GL_FALSE; +GLboolean __GLEW_VERSION_4_4 = GL_FALSE; GLboolean __GLEW_3DFX_multisample = GL_FALSE; GLboolean __GLEW_3DFX_tbuffer = GL_FALSE; GLboolean __GLEW_3DFX_texture_compression_FXT1 = GL_FALSE; @@ -2617,6 +2731,7 @@ GLboolean __GLEW_AMD_conservative_depth = GL_FALSE; GLboolean __GLEW_AMD_debug_output = GL_FALSE; GLboolean __GLEW_AMD_depth_clamp_separate = GL_FALSE; GLboolean __GLEW_AMD_draw_buffers_blend = GL_FALSE; +GLboolean __GLEW_AMD_interleaved_elements = GL_FALSE; GLboolean __GLEW_AMD_multi_draw_indirect = GL_FALSE; GLboolean __GLEW_AMD_name_gen_delete = GL_FALSE; GLboolean __GLEW_AMD_performance_monitor = GL_FALSE; @@ -2625,12 +2740,26 @@ GLboolean __GLEW_AMD_query_buffer_object = GL_FALSE; GLboolean __GLEW_AMD_sample_positions = GL_FALSE; GLboolean __GLEW_AMD_seamless_cubemap_per_texture = GL_FALSE; GLboolean __GLEW_AMD_shader_stencil_export = GL_FALSE; +GLboolean __GLEW_AMD_shader_trinary_minmax = GL_FALSE; +GLboolean __GLEW_AMD_sparse_texture = GL_FALSE; GLboolean __GLEW_AMD_stencil_operation_extended = GL_FALSE; GLboolean __GLEW_AMD_texture_texture4 = GL_FALSE; GLboolean __GLEW_AMD_transform_feedback3_lines_triangles = GL_FALSE; GLboolean __GLEW_AMD_vertex_shader_layer = GL_FALSE; GLboolean __GLEW_AMD_vertex_shader_tessellator = GL_FALSE; GLboolean __GLEW_AMD_vertex_shader_viewport_index = GL_FALSE; +GLboolean __GLEW_ANGLE_depth_texture = GL_FALSE; +GLboolean __GLEW_ANGLE_framebuffer_blit = GL_FALSE; +GLboolean __GLEW_ANGLE_framebuffer_multisample = GL_FALSE; +GLboolean __GLEW_ANGLE_instanced_arrays = GL_FALSE; +GLboolean __GLEW_ANGLE_pack_reverse_row_order = GL_FALSE; +GLboolean __GLEW_ANGLE_program_binary = GL_FALSE; +GLboolean __GLEW_ANGLE_texture_compression_dxt1 = GL_FALSE; +GLboolean __GLEW_ANGLE_texture_compression_dxt3 = GL_FALSE; +GLboolean __GLEW_ANGLE_texture_compression_dxt5 = GL_FALSE; +GLboolean __GLEW_ANGLE_texture_usage = GL_FALSE; +GLboolean __GLEW_ANGLE_timer_query = GL_FALSE; +GLboolean __GLEW_ANGLE_translated_shader_source = GL_FALSE; GLboolean __GLEW_APPLE_aux_depth_stencil = GL_FALSE; GLboolean __GLEW_APPLE_client_storage = GL_FALSE; GLboolean __GLEW_APPLE_element_array = GL_FALSE; @@ -2652,13 +2781,17 @@ GLboolean __GLEW_ARB_ES2_compatibility = GL_FALSE; GLboolean __GLEW_ARB_ES3_compatibility = GL_FALSE; GLboolean __GLEW_ARB_arrays_of_arrays = GL_FALSE; GLboolean __GLEW_ARB_base_instance = GL_FALSE; +GLboolean __GLEW_ARB_bindless_texture = GL_FALSE; GLboolean __GLEW_ARB_blend_func_extended = GL_FALSE; +GLboolean __GLEW_ARB_buffer_storage = GL_FALSE; GLboolean __GLEW_ARB_cl_event = GL_FALSE; GLboolean __GLEW_ARB_clear_buffer_object = GL_FALSE; +GLboolean __GLEW_ARB_clear_texture = GL_FALSE; GLboolean __GLEW_ARB_color_buffer_float = GL_FALSE; GLboolean __GLEW_ARB_compatibility = GL_FALSE; GLboolean __GLEW_ARB_compressed_texture_pixel_storage = GL_FALSE; GLboolean __GLEW_ARB_compute_shader = GL_FALSE; +GLboolean __GLEW_ARB_compute_variable_group_size = GL_FALSE; GLboolean __GLEW_ARB_conservative_depth = GL_FALSE; GLboolean __GLEW_ARB_copy_buffer = GL_FALSE; GLboolean __GLEW_ARB_copy_image = GL_FALSE; @@ -2671,6 +2804,7 @@ GLboolean __GLEW_ARB_draw_buffers_blend = GL_FALSE; GLboolean __GLEW_ARB_draw_elements_base_vertex = GL_FALSE; GLboolean __GLEW_ARB_draw_indirect = GL_FALSE; GLboolean __GLEW_ARB_draw_instanced = GL_FALSE; +GLboolean __GLEW_ARB_enhanced_layouts = GL_FALSE; GLboolean __GLEW_ARB_explicit_attrib_location = GL_FALSE; GLboolean __GLEW_ARB_explicit_uniform_location = GL_FALSE; GLboolean __GLEW_ARB_fragment_coord_conventions = GL_FALSE; @@ -2688,6 +2822,7 @@ GLboolean __GLEW_ARB_gpu_shader_fp64 = GL_FALSE; GLboolean __GLEW_ARB_half_float_pixel = GL_FALSE; GLboolean __GLEW_ARB_half_float_vertex = GL_FALSE; GLboolean __GLEW_ARB_imaging = GL_FALSE; +GLboolean __GLEW_ARB_indirect_parameters = GL_FALSE; GLboolean __GLEW_ARB_instanced_arrays = GL_FALSE; GLboolean __GLEW_ARB_internalformat_query = GL_FALSE; GLboolean __GLEW_ARB_internalformat_query2 = GL_FALSE; @@ -2695,6 +2830,7 @@ GLboolean __GLEW_ARB_invalidate_subdata = GL_FALSE; GLboolean __GLEW_ARB_map_buffer_alignment = GL_FALSE; GLboolean __GLEW_ARB_map_buffer_range = GL_FALSE; GLboolean __GLEW_ARB_matrix_palette = GL_FALSE; +GLboolean __GLEW_ARB_multi_bind = GL_FALSE; GLboolean __GLEW_ARB_multi_draw_indirect = GL_FALSE; GLboolean __GLEW_ARB_multisample = GL_FALSE; GLboolean __GLEW_ARB_multitexture = GL_FALSE; @@ -2705,6 +2841,7 @@ GLboolean __GLEW_ARB_point_parameters = GL_FALSE; GLboolean __GLEW_ARB_point_sprite = GL_FALSE; GLboolean __GLEW_ARB_program_interface_query = GL_FALSE; GLboolean __GLEW_ARB_provoking_vertex = GL_FALSE; +GLboolean __GLEW_ARB_query_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_robust_buffer_access_behavior = GL_FALSE; GLboolean __GLEW_ARB_robustness = GL_FALSE; GLboolean __GLEW_ARB_robustness_application_isolation = GL_FALSE; @@ -2712,9 +2849,12 @@ GLboolean __GLEW_ARB_robustness_share_group_isolation = GL_FALSE; GLboolean __GLEW_ARB_sample_shading = GL_FALSE; GLboolean __GLEW_ARB_sampler_objects = GL_FALSE; GLboolean __GLEW_ARB_seamless_cube_map = GL_FALSE; +GLboolean __GLEW_ARB_seamless_cubemap_per_texture = GL_FALSE; GLboolean __GLEW_ARB_separate_shader_objects = GL_FALSE; GLboolean __GLEW_ARB_shader_atomic_counters = GL_FALSE; GLboolean __GLEW_ARB_shader_bit_encoding = GL_FALSE; +GLboolean __GLEW_ARB_shader_draw_parameters = GL_FALSE; +GLboolean __GLEW_ARB_shader_group_vote = GL_FALSE; GLboolean __GLEW_ARB_shader_image_load_store = GL_FALSE; GLboolean __GLEW_ARB_shader_image_size = GL_FALSE; GLboolean __GLEW_ARB_shader_objects = GL_FALSE; @@ -2729,6 +2869,7 @@ GLboolean __GLEW_ARB_shading_language_include = GL_FALSE; GLboolean __GLEW_ARB_shading_language_packing = GL_FALSE; GLboolean __GLEW_ARB_shadow = GL_FALSE; GLboolean __GLEW_ARB_shadow_ambient = GL_FALSE; +GLboolean __GLEW_ARB_sparse_texture = GL_FALSE; GLboolean __GLEW_ARB_stencil_texturing = GL_FALSE; GLboolean __GLEW_ARB_sync = GL_FALSE; GLboolean __GLEW_ARB_tessellation_shader = GL_FALSE; @@ -2747,6 +2888,7 @@ GLboolean __GLEW_ARB_texture_env_crossbar = GL_FALSE; GLboolean __GLEW_ARB_texture_env_dot3 = GL_FALSE; GLboolean __GLEW_ARB_texture_float = GL_FALSE; GLboolean __GLEW_ARB_texture_gather = GL_FALSE; +GLboolean __GLEW_ARB_texture_mirror_clamp_to_edge = GL_FALSE; GLboolean __GLEW_ARB_texture_mirrored_repeat = GL_FALSE; GLboolean __GLEW_ARB_texture_multisample = GL_FALSE; GLboolean __GLEW_ARB_texture_non_power_of_two = GL_FALSE; @@ -2755,6 +2897,7 @@ GLboolean __GLEW_ARB_texture_query_lod = GL_FALSE; GLboolean __GLEW_ARB_texture_rectangle = GL_FALSE; GLboolean __GLEW_ARB_texture_rg = GL_FALSE; GLboolean __GLEW_ARB_texture_rgb10_a2ui = GL_FALSE; +GLboolean __GLEW_ARB_texture_stencil8 = GL_FALSE; GLboolean __GLEW_ARB_texture_storage = GL_FALSE; GLboolean __GLEW_ARB_texture_storage_multisample = GL_FALSE; GLboolean __GLEW_ARB_texture_swizzle = GL_FALSE; @@ -2773,6 +2916,7 @@ GLboolean __GLEW_ARB_vertex_blend = GL_FALSE; GLboolean __GLEW_ARB_vertex_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_vertex_program = GL_FALSE; GLboolean __GLEW_ARB_vertex_shader = GL_FALSE; +GLboolean __GLEW_ARB_vertex_type_10f_11f_11f_rev = GL_FALSE; GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev = GL_FALSE; GLboolean __GLEW_ARB_viewport_array = GL_FALSE; GLboolean __GLEW_ARB_window_pos = GL_FALSE; @@ -2911,6 +3055,7 @@ GLboolean __GLEW_IBM_texture_mirrored_repeat = GL_FALSE; GLboolean __GLEW_IBM_vertex_array_lists = GL_FALSE; GLboolean __GLEW_INGR_color_clamp = GL_FALSE; GLboolean __GLEW_INGR_interlace_read = GL_FALSE; +GLboolean __GLEW_INTEL_map_texture = GL_FALSE; GLboolean __GLEW_INTEL_parallel_arrays = GL_FALSE; GLboolean __GLEW_INTEL_texture_scissor = GL_FALSE; GLboolean __GLEW_KHR_debug = GL_FALSE; @@ -2921,15 +3066,22 @@ GLboolean __GLEW_MESA_pack_invert = GL_FALSE; GLboolean __GLEW_MESA_resize_buffers = GL_FALSE; GLboolean __GLEW_MESA_window_pos = GL_FALSE; GLboolean __GLEW_MESA_ycbcr_texture = GL_FALSE; +GLboolean __GLEW_NVX_conditional_render = GL_FALSE; GLboolean __GLEW_NVX_gpu_memory_info = GL_FALSE; +GLboolean __GLEW_NV_bindless_multi_draw_indirect = GL_FALSE; GLboolean __GLEW_NV_bindless_texture = GL_FALSE; +GLboolean __GLEW_NV_blend_equation_advanced = GL_FALSE; +GLboolean __GLEW_NV_blend_equation_advanced_coherent = GL_FALSE; GLboolean __GLEW_NV_blend_square = GL_FALSE; +GLboolean __GLEW_NV_compute_program5 = GL_FALSE; GLboolean __GLEW_NV_conditional_render = GL_FALSE; GLboolean __GLEW_NV_copy_depth_to_color = GL_FALSE; GLboolean __GLEW_NV_copy_image = GL_FALSE; +GLboolean __GLEW_NV_deep_texture3D = GL_FALSE; GLboolean __GLEW_NV_depth_buffer_float = GL_FALSE; GLboolean __GLEW_NV_depth_clamp = GL_FALSE; GLboolean __GLEW_NV_depth_range_unclamped = GL_FALSE; +GLboolean __GLEW_NV_draw_texture = GL_FALSE; GLboolean __GLEW_NV_evaluators = GL_FALSE; GLboolean __GLEW_NV_explicit_multisample = GL_FALSE; GLboolean __GLEW_NV_fence = GL_FALSE; @@ -2944,6 +3096,7 @@ GLboolean __GLEW_NV_geometry_program4 = GL_FALSE; GLboolean __GLEW_NV_geometry_shader4 = GL_FALSE; GLboolean __GLEW_NV_gpu_program4 = GL_FALSE; GLboolean __GLEW_NV_gpu_program5 = GL_FALSE; +GLboolean __GLEW_NV_gpu_program5_mem_extended = GL_FALSE; GLboolean __GLEW_NV_gpu_program_fp64 = GL_FALSE; GLboolean __GLEW_NV_gpu_shader5 = GL_FALSE; GLboolean __GLEW_NV_half_float = GL_FALSE; @@ -2961,8 +3114,10 @@ GLboolean __GLEW_NV_present_video = GL_FALSE; GLboolean __GLEW_NV_primitive_restart = GL_FALSE; GLboolean __GLEW_NV_register_combiners = GL_FALSE; GLboolean __GLEW_NV_register_combiners2 = GL_FALSE; +GLboolean __GLEW_NV_shader_atomic_counters = GL_FALSE; GLboolean __GLEW_NV_shader_atomic_float = GL_FALSE; GLboolean __GLEW_NV_shader_buffer_load = GL_FALSE; +GLboolean __GLEW_NV_shader_storage_buffer_object = GL_FALSE; GLboolean __GLEW_NV_tessellation_program5 = GL_FALSE; GLboolean __GLEW_NV_texgen_emboss = GL_FALSE; GLboolean __GLEW_NV_texgen_reflection = GL_FALSE; @@ -2998,6 +3153,9 @@ GLboolean __GLEW_OML_resample = GL_FALSE; GLboolean __GLEW_OML_subsample = GL_FALSE; GLboolean __GLEW_PGI_misc_hints = GL_FALSE; GLboolean __GLEW_PGI_vertex_hints = GL_FALSE; +GLboolean __GLEW_REGAL_ES1_0_compatibility = GL_FALSE; +GLboolean __GLEW_REGAL_ES1_1_compatibility = GL_FALSE; +GLboolean __GLEW_REGAL_enable = GL_FALSE; GLboolean __GLEW_REGAL_error_string = GL_FALSE; GLboolean __GLEW_REGAL_extension_query = GL_FALSE; GLboolean __GLEW_REGAL_log = GL_FALSE; @@ -3497,6 +3655,10 @@ static GLboolean _glewInit_GL_VERSION_4_0 (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_VERSION_4_3 */ +#ifdef GL_VERSION_4_4 + +#endif /* GL_VERSION_4_4 */ + #ifdef GL_3DFX_multisample #endif /* GL_3DFX_multisample */ @@ -3562,6 +3724,19 @@ static GLboolean _glewInit_GL_AMD_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_AMD_draw_buffers_blend */ +#ifdef GL_AMD_interleaved_elements + +static GLboolean _glewInit_GL_AMD_interleaved_elements (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glVertexAttribParameteriAMD = (PFNGLVERTEXATTRIBPARAMETERIAMDPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribParameteriAMD")) == NULL) || r; + + return r; +} + +#endif /* GL_AMD_interleaved_elements */ + #ifdef GL_AMD_multi_draw_indirect static GLboolean _glewInit_GL_AMD_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) @@ -3643,6 +3818,24 @@ static GLboolean _glewInit_GL_AMD_sample_positions (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_AMD_shader_stencil_export */ +#ifdef GL_AMD_shader_trinary_minmax + +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifdef GL_AMD_sparse_texture + +static GLboolean _glewInit_GL_AMD_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexStorageSparseAMD = (PFNGLTEXSTORAGESPARSEAMDPROC)glewGetProcAddress((const GLubyte*)"glTexStorageSparseAMD")) == NULL) || r; + r = ((glTextureStorageSparseAMD = (PFNGLTEXTURESTORAGESPARSEAMDPROC)glewGetProcAddress((const GLubyte*)"glTextureStorageSparseAMD")) == NULL) || r; + + return r; +} + +#endif /* GL_AMD_sparse_texture */ + #ifdef GL_AMD_stencil_operation_extended static GLboolean _glewInit_GL_AMD_stencil_operation_extended (GLEW_CONTEXT_ARG_DEF_INIT) @@ -3686,6 +3879,111 @@ static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator (GLEW_CONTEXT_ARG_DE #endif /* GL_AMD_vertex_shader_viewport_index */ +#ifdef GL_ANGLE_depth_texture + +#endif /* GL_ANGLE_depth_texture */ + +#ifdef GL_ANGLE_framebuffer_blit + +static GLboolean _glewInit_GL_ANGLE_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlitFramebufferANGLE = (PFNGLBLITFRAMEBUFFERANGLEPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferANGLE")) == NULL) || r; + + return r; +} + +#endif /* GL_ANGLE_framebuffer_blit */ + +#ifdef GL_ANGLE_framebuffer_multisample + +static GLboolean _glewInit_GL_ANGLE_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glRenderbufferStorageMultisampleANGLE = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleANGLE")) == NULL) || r; + + return r; +} + +#endif /* GL_ANGLE_framebuffer_multisample */ + +#ifdef GL_ANGLE_instanced_arrays + +static GLboolean _glewInit_GL_ANGLE_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawArraysInstancedANGLE = (PFNGLDRAWARRAYSINSTANCEDANGLEPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedANGLE")) == NULL) || r; + r = ((glDrawElementsInstancedANGLE = (PFNGLDRAWELEMENTSINSTANCEDANGLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedANGLE")) == NULL) || r; + r = ((glVertexAttribDivisorANGLE = (PFNGLVERTEXATTRIBDIVISORANGLEPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisorANGLE")) == NULL) || r; + + return r; +} + +#endif /* GL_ANGLE_instanced_arrays */ + +#ifdef GL_ANGLE_pack_reverse_row_order + +#endif /* GL_ANGLE_pack_reverse_row_order */ + +#ifdef GL_ANGLE_program_binary + +#endif /* GL_ANGLE_program_binary */ + +#ifdef GL_ANGLE_texture_compression_dxt1 + +#endif /* GL_ANGLE_texture_compression_dxt1 */ + +#ifdef GL_ANGLE_texture_compression_dxt3 + +#endif /* GL_ANGLE_texture_compression_dxt3 */ + +#ifdef GL_ANGLE_texture_compression_dxt5 + +#endif /* GL_ANGLE_texture_compression_dxt5 */ + +#ifdef GL_ANGLE_texture_usage + +#endif /* GL_ANGLE_texture_usage */ + +#ifdef GL_ANGLE_timer_query + +static GLboolean _glewInit_GL_ANGLE_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginQueryANGLE = (PFNGLBEGINQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryANGLE")) == NULL) || r; + r = ((glDeleteQueriesANGLE = (PFNGLDELETEQUERIESANGLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesANGLE")) == NULL) || r; + r = ((glEndQueryANGLE = (PFNGLENDQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glEndQueryANGLE")) == NULL) || r; + r = ((glGenQueriesANGLE = (PFNGLGENQUERIESANGLEPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesANGLE")) == NULL) || r; + r = ((glGetQueryObjecti64vANGLE = (PFNGLGETQUERYOBJECTI64VANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vANGLE")) == NULL) || r; + r = ((glGetQueryObjectivANGLE = (PFNGLGETQUERYOBJECTIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivANGLE")) == NULL) || r; + r = ((glGetQueryObjectui64vANGLE = (PFNGLGETQUERYOBJECTUI64VANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vANGLE")) == NULL) || r; + r = ((glGetQueryObjectuivANGLE = (PFNGLGETQUERYOBJECTUIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivANGLE")) == NULL) || r; + r = ((glGetQueryivANGLE = (PFNGLGETQUERYIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivANGLE")) == NULL) || r; + r = ((glIsQueryANGLE = (PFNGLISQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glIsQueryANGLE")) == NULL) || r; + r = ((glQueryCounterANGLE = (PFNGLQUERYCOUNTERANGLEPROC)glewGetProcAddress((const GLubyte*)"glQueryCounterANGLE")) == NULL) || r; + + return r; +} + +#endif /* GL_ANGLE_timer_query */ + +#ifdef GL_ANGLE_translated_shader_source + +static GLboolean _glewInit_GL_ANGLE_translated_shader_source (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetTranslatedShaderSourceANGLE = (PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetTranslatedShaderSourceANGLE")) == NULL) || r; + + return r; +} + +#endif /* GL_ANGLE_translated_shader_source */ + #ifdef GL_APPLE_aux_depth_stencil #endif /* GL_APPLE_aux_depth_stencil */ @@ -3892,6 +4190,34 @@ static GLboolean _glewInit_GL_ARB_base_instance (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_base_instance */ +#ifdef GL_ARB_bindless_texture + +static GLboolean _glewInit_GL_ARB_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetImageHandleARB = (PFNGLGETIMAGEHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetImageHandleARB")) == NULL) || r; + r = ((glGetTextureHandleARB = (PFNGLGETTEXTUREHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetTextureHandleARB")) == NULL) || r; + r = ((glGetTextureSamplerHandleARB = (PFNGLGETTEXTURESAMPLERHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetTextureSamplerHandleARB")) == NULL) || r; + r = ((glGetVertexAttribLui64vARB = (PFNGLGETVERTEXATTRIBLUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLui64vARB")) == NULL) || r; + r = ((glIsImageHandleResidentARB = (PFNGLISIMAGEHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glIsImageHandleResidentARB")) == NULL) || r; + r = ((glIsTextureHandleResidentARB = (PFNGLISTEXTUREHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glIsTextureHandleResidentARB")) == NULL) || r; + r = ((glMakeImageHandleNonResidentARB = (PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleNonResidentARB")) == NULL) || r; + r = ((glMakeImageHandleResidentARB = (PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleResidentARB")) == NULL) || r; + r = ((glMakeTextureHandleNonResidentARB = (PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleNonResidentARB")) == NULL) || r; + r = ((glMakeTextureHandleResidentARB = (PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleResidentARB")) == NULL) || r; + r = ((glProgramUniformHandleui64ARB = (PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64ARB")) == NULL) || r; + r = ((glProgramUniformHandleui64vARB = (PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64vARB")) == NULL) || r; + r = ((glUniformHandleui64ARB = (PFNGLUNIFORMHANDLEUI64ARBPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64ARB")) == NULL) || r; + r = ((glUniformHandleui64vARB = (PFNGLUNIFORMHANDLEUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64vARB")) == NULL) || r; + r = ((glVertexAttribL1ui64ARB = (PFNGLVERTEXATTRIBL1UI64ARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64ARB")) == NULL) || r; + r = ((glVertexAttribL1ui64vARB = (PFNGLVERTEXATTRIBL1UI64VARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64vARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_bindless_texture */ + #ifdef GL_ARB_blend_func_extended static GLboolean _glewInit_GL_ARB_blend_func_extended (GLEW_CONTEXT_ARG_DEF_INIT) @@ -3906,6 +4232,20 @@ static GLboolean _glewInit_GL_ARB_blend_func_extended (GLEW_CONTEXT_ARG_DEF_INIT #endif /* GL_ARB_blend_func_extended */ +#ifdef GL_ARB_buffer_storage + +static GLboolean _glewInit_GL_ARB_buffer_storage (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBufferStorage = (PFNGLBUFFERSTORAGEPROC)glewGetProcAddress((const GLubyte*)"glBufferStorage")) == NULL) || r; + r = ((glNamedBufferStorageEXT = (PFNGLNAMEDBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferStorageEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_buffer_storage */ + #ifdef GL_ARB_cl_event static GLboolean _glewInit_GL_ARB_cl_event (GLEW_CONTEXT_ARG_DEF_INIT) @@ -3935,6 +4275,20 @@ static GLboolean _glewInit_GL_ARB_clear_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT #endif /* GL_ARB_clear_buffer_object */ +#ifdef GL_ARB_clear_texture + +static GLboolean _glewInit_GL_ARB_clear_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glClearTexImage")) == NULL) || r; + r = ((glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)glewGetProcAddress((const GLubyte*)"glClearTexSubImage")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_clear_texture */ + #ifdef GL_ARB_color_buffer_float static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) @@ -3970,6 +4324,19 @@ static GLboolean _glewInit_GL_ARB_compute_shader (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_compute_shader */ +#ifdef GL_ARB_compute_variable_group_size + +static GLboolean _glewInit_GL_ARB_compute_variable_group_size (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDispatchComputeGroupSizeARB = (PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)glewGetProcAddress((const GLubyte*)"glDispatchComputeGroupSizeARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_compute_variable_group_size */ + #ifdef GL_ARB_conservative_depth #endif /* GL_ARB_conservative_depth */ @@ -4091,6 +4458,10 @@ static GLboolean _glewInit_GL_ARB_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_draw_instanced */ +#ifdef GL_ARB_enhanced_layouts + +#endif /* GL_ARB_enhanced_layouts */ + #ifdef GL_ARB_explicit_attrib_location #endif /* GL_ARB_explicit_attrib_location */ @@ -4289,6 +4660,20 @@ static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_imaging */ +#ifdef GL_ARB_indirect_parameters + +static GLboolean _glewInit_GL_ARB_indirect_parameters (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMultiDrawArraysIndirectCountARB = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectCountARB")) == NULL) || r; + r = ((glMultiDrawElementsIndirectCountARB = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectCountARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_indirect_parameters */ + #ifdef GL_ARB_instanced_arrays static GLboolean _glewInit_GL_ARB_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) @@ -4383,6 +4768,24 @@ static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_matrix_palette */ +#ifdef GL_ARB_multi_bind + +static GLboolean _glewInit_GL_ARB_multi_bind (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)glewGetProcAddress((const GLubyte*)"glBindBuffersBase")) == NULL) || r; + r = ((glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)glewGetProcAddress((const GLubyte*)"glBindBuffersRange")) == NULL) || r; + r = ((glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)glewGetProcAddress((const GLubyte*)"glBindImageTextures")) == NULL) || r; + r = ((glBindSamplers = (PFNGLBINDSAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glBindSamplers")) == NULL) || r; + r = ((glBindTextures = (PFNGLBINDTEXTURESPROC)glewGetProcAddress((const GLubyte*)"glBindTextures")) == NULL) || r; + r = ((glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glBindVertexBuffers")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_multi_bind */ + #ifdef GL_ARB_multi_draw_indirect static GLboolean _glewInit_GL_ARB_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) @@ -4533,6 +4936,10 @@ static GLboolean _glewInit_GL_ARB_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_provoking_vertex */ +#ifdef GL_ARB_query_buffer_object + +#endif /* GL_ARB_query_buffer_object */ + #ifdef GL_ARB_robust_buffer_access_behavior #endif /* GL_ARB_robust_buffer_access_behavior */ @@ -4620,6 +5027,10 @@ static GLboolean _glewInit_GL_ARB_sampler_objects (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_seamless_cube_map */ +#ifdef GL_ARB_seamless_cubemap_per_texture + +#endif /* GL_ARB_seamless_cubemap_per_texture */ + #ifdef GL_ARB_separate_shader_objects static GLboolean _glewInit_GL_ARB_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) @@ -4709,6 +5120,14 @@ static GLboolean _glewInit_GL_ARB_shader_atomic_counters (GLEW_CONTEXT_ARG_DEF_I #endif /* GL_ARB_shader_bit_encoding */ +#ifdef GL_ARB_shader_draw_parameters + +#endif /* GL_ARB_shader_draw_parameters */ + +#ifdef GL_ARB_shader_group_vote + +#endif /* GL_ARB_shader_group_vote */ + #ifdef GL_ARB_shader_image_load_store static GLboolean _glewInit_GL_ARB_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT) @@ -4861,6 +5280,20 @@ static GLboolean _glewInit_GL_ARB_shading_language_include (GLEW_CONTEXT_ARG_DEF #endif /* GL_ARB_shadow_ambient */ +#ifdef GL_ARB_sparse_texture + +static GLboolean _glewInit_GL_ARB_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexPageCommitmentARB = (PFNGLTEXPAGECOMMITMENTARBPROC)glewGetProcAddress((const GLubyte*)"glTexPageCommitmentARB")) == NULL) || r; + r = ((glTexturePageCommitmentEXT = (PFNGLTEXTUREPAGECOMMITMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glTexturePageCommitmentEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_sparse_texture */ + #ifdef GL_ARB_stencil_texturing #endif /* GL_ARB_stencil_texturing */ @@ -4992,6 +5425,10 @@ static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT #endif /* GL_ARB_texture_gather */ +#ifdef GL_ARB_texture_mirror_clamp_to_edge + +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + #ifdef GL_ARB_texture_mirrored_repeat #endif /* GL_ARB_texture_mirrored_repeat */ @@ -5036,6 +5473,10 @@ static GLboolean _glewInit_GL_ARB_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT #endif /* GL_ARB_texture_rgb10_a2ui */ +#ifdef GL_ARB_texture_stencil8 + +#endif /* GL_ARB_texture_stencil8 */ + #ifdef GL_ARB_texture_storage static GLboolean _glewInit_GL_ARB_texture_storage (GLEW_CONTEXT_ARG_DEF_INIT) @@ -5383,6 +5824,10 @@ static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_ARB_vertex_shader */ +#ifdef GL_ARB_vertex_type_10f_11f_11f_rev + +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + #ifdef GL_ARB_vertex_type_2_10_10_10_rev static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev (GLEW_CONTEXT_ARG_DEF_INIT) @@ -6119,55 +6564,38 @@ static GLboolean _glewInit_GL_EXT_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT r = ((glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageEXT")) == NULL) || r; r = ((glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleCoverageEXT")) == NULL) || r; r = ((glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleEXT")) == NULL) || r; - r = ((glProgramUniform1dEXT = (PFNGLPROGRAMUNIFORM1DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1dEXT")) == NULL) || r; - r = ((glProgramUniform1dvEXT = (PFNGLPROGRAMUNIFORM1DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1dvEXT")) == NULL) || r; r = ((glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fEXT")) == NULL) || r; r = ((glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fvEXT")) == NULL) || r; r = ((glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iEXT")) == NULL) || r; r = ((glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ivEXT")) == NULL) || r; r = ((glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiEXT")) == NULL) || r; r = ((glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uivEXT")) == NULL) || r; - r = ((glProgramUniform2dEXT = (PFNGLPROGRAMUNIFORM2DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2dEXT")) == NULL) || r; - r = ((glProgramUniform2dvEXT = (PFNGLPROGRAMUNIFORM2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2dvEXT")) == NULL) || r; r = ((glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fEXT")) == NULL) || r; r = ((glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fvEXT")) == NULL) || r; r = ((glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iEXT")) == NULL) || r; r = ((glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ivEXT")) == NULL) || r; r = ((glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiEXT")) == NULL) || r; r = ((glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uivEXT")) == NULL) || r; - r = ((glProgramUniform3dEXT = (PFNGLPROGRAMUNIFORM3DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3dEXT")) == NULL) || r; - r = ((glProgramUniform3dvEXT = (PFNGLPROGRAMUNIFORM3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3dvEXT")) == NULL) || r; r = ((glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fEXT")) == NULL) || r; r = ((glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fvEXT")) == NULL) || r; r = ((glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iEXT")) == NULL) || r; r = ((glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ivEXT")) == NULL) || r; r = ((glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiEXT")) == NULL) || r; r = ((glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uivEXT")) == NULL) || r; - r = ((glProgramUniform4dEXT = (PFNGLPROGRAMUNIFORM4DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4dEXT")) == NULL) || r; - r = ((glProgramUniform4dvEXT = (PFNGLPROGRAMUNIFORM4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4dvEXT")) == NULL) || r; r = ((glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fEXT")) == NULL) || r; r = ((glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fvEXT")) == NULL) || r; r = ((glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iEXT")) == NULL) || r; r = ((glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ivEXT")) == NULL) || r; r = ((glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiEXT")) == NULL) || r; r = ((glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uivEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fvEXT")) == NULL) || r; r = ((glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glPushClientAttribDefaultEXT")) == NULL) || r; r = ((glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferEXT")) == NULL) || r; @@ -7197,6 +7625,21 @@ static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_INGR_interlace_read */ +#ifdef GL_INTEL_map_texture + +static GLboolean _glewInit_GL_INTEL_map_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMapTexture2DINTEL = (PFNGLMAPTEXTURE2DINTELPROC)glewGetProcAddress((const GLubyte*)"glMapTexture2DINTEL")) == NULL) || r; + r = ((glSyncTextureINTEL = (PFNGLSYNCTEXTUREINTELPROC)glewGetProcAddress((const GLubyte*)"glSyncTextureINTEL")) == NULL) || r; + r = ((glUnmapTexture2DINTEL = (PFNGLUNMAPTEXTURE2DINTELPROC)glewGetProcAddress((const GLubyte*)"glUnmapTexture2DINTEL")) == NULL) || r; + + return r; +} + +#endif /* GL_INTEL_map_texture */ + #ifdef GL_INTEL_parallel_arrays static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT) @@ -7239,9 +7682,9 @@ static GLboolean _glewInit_GL_KHR_debug (GLEW_CONTEXT_ARG_DEF_INIT) r = ((glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLog")) == NULL) || r; r = ((glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectLabel")) == NULL) || r; r = ((glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectPtrLabel")) == NULL) || r; - r = ((glGetPointerv = (PFNGLGETPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetPointerv")) == NULL) || r; r = ((glObjectLabel = (PFNGLOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectLabel")) == NULL) || r; r = ((glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectPtrLabel")) == NULL) || r; + r = ((glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)glewGetProcAddress((const GLubyte*)"glPopDebugGroup")) == NULL) || r; r = ((glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)glewGetProcAddress((const GLubyte*)"glPushDebugGroup")) == NULL) || r; return r; @@ -7331,10 +7774,38 @@ static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_MESA_ycbcr_texture */ +#ifdef GL_NVX_conditional_render + +static GLboolean _glewInit_GL_NVX_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginConditionalRenderNVX = (PFNGLBEGINCONDITIONALRENDERNVXPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRenderNVX")) == NULL) || r; + r = ((glEndConditionalRenderNVX = (PFNGLENDCONDITIONALRENDERNVXPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRenderNVX")) == NULL) || r; + + return r; +} + +#endif /* GL_NVX_conditional_render */ + #ifdef GL_NVX_gpu_memory_info #endif /* GL_NVX_gpu_memory_info */ +#ifdef GL_NV_bindless_multi_draw_indirect + +static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMultiDrawArraysIndirectBindlessNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectBindlessNV")) == NULL) || r; + r = ((glMultiDrawElementsIndirectBindlessNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectBindlessNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_bindless_multi_draw_indirect */ + #ifdef GL_NV_bindless_texture static GLboolean _glewInit_GL_NV_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) @@ -7360,10 +7831,32 @@ static GLboolean _glewInit_GL_NV_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_NV_bindless_texture */ +#ifdef GL_NV_blend_equation_advanced + +static GLboolean _glewInit_GL_NV_blend_equation_advanced (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendBarrierNV = (PFNGLBLENDBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glBlendBarrierNV")) == NULL) || r; + r = ((glBlendParameteriNV = (PFNGLBLENDPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glBlendParameteriNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_blend_equation_advanced */ + +#ifdef GL_NV_blend_equation_advanced_coherent + +#endif /* GL_NV_blend_equation_advanced_coherent */ + #ifdef GL_NV_blend_square #endif /* GL_NV_blend_square */ +#ifdef GL_NV_compute_program5 + +#endif /* GL_NV_compute_program5 */ + #ifdef GL_NV_conditional_render static GLboolean _glewInit_GL_NV_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) @@ -7395,6 +7888,10 @@ static GLboolean _glewInit_GL_NV_copy_image (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_NV_copy_image */ +#ifdef GL_NV_deep_texture3D + +#endif /* GL_NV_deep_texture3D */ + #ifdef GL_NV_depth_buffer_float static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) @@ -7418,6 +7915,19 @@ static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_NV_depth_range_unclamped */ +#ifdef GL_NV_draw_texture + +static GLboolean _glewInit_GL_NV_draw_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawTextureNV = (PFNGLDRAWTEXTURENVPROC)glewGetProcAddress((const GLubyte*)"glDrawTextureNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_draw_texture */ + #ifdef GL_NV_evaluators static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) @@ -7569,6 +8079,10 @@ static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_NV_gpu_program5 */ +#ifdef GL_NV_gpu_program5_mem_extended + +#endif /* GL_NV_gpu_program5_mem_extended */ + #ifdef GL_NV_gpu_program_fp64 #endif /* GL_NV_gpu_program_fp64 */ @@ -7891,6 +8405,10 @@ static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_NV_register_combiners2 */ +#ifdef GL_NV_shader_atomic_counters + +#endif /* GL_NV_shader_atomic_counters */ + #ifdef GL_NV_shader_atomic_float #endif /* GL_NV_shader_atomic_float */ @@ -7920,6 +8438,10 @@ static GLboolean _glewInit_GL_NV_shader_buffer_load (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_NV_shader_buffer_load */ +#ifdef GL_NV_shader_storage_buffer_object + +#endif /* GL_NV_shader_storage_buffer_object */ + #ifdef GL_NV_tessellation_program5 #endif /* GL_NV_tessellation_program5 */ @@ -8298,6 +8820,78 @@ static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT) #endif /* GL_PGI_vertex_hints */ +#ifdef GL_REGAL_ES1_0_compatibility + +static GLboolean _glewInit_GL_REGAL_ES1_0_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAlphaFuncx = (PFNGLALPHAFUNCXPROC)glewGetProcAddress((const GLubyte*)"glAlphaFuncx")) == NULL) || r; + r = ((glClearColorx = (PFNGLCLEARCOLORXPROC)glewGetProcAddress((const GLubyte*)"glClearColorx")) == NULL) || r; + r = ((glClearDepthx = (PFNGLCLEARDEPTHXPROC)glewGetProcAddress((const GLubyte*)"glClearDepthx")) == NULL) || r; + r = ((glColor4x = (PFNGLCOLOR4XPROC)glewGetProcAddress((const GLubyte*)"glColor4x")) == NULL) || r; + r = ((glDepthRangex = (PFNGLDEPTHRANGEXPROC)glewGetProcAddress((const GLubyte*)"glDepthRangex")) == NULL) || r; + r = ((glFogx = (PFNGLFOGXPROC)glewGetProcAddress((const GLubyte*)"glFogx")) == NULL) || r; + r = ((glFogxv = (PFNGLFOGXVPROC)glewGetProcAddress((const GLubyte*)"glFogxv")) == NULL) || r; + r = ((glFrustumf = (PFNGLFRUSTUMFPROC)glewGetProcAddress((const GLubyte*)"glFrustumf")) == NULL) || r; + r = ((glFrustumx = (PFNGLFRUSTUMXPROC)glewGetProcAddress((const GLubyte*)"glFrustumx")) == NULL) || r; + r = ((glLightModelx = (PFNGLLIGHTMODELXPROC)glewGetProcAddress((const GLubyte*)"glLightModelx")) == NULL) || r; + r = ((glLightModelxv = (PFNGLLIGHTMODELXVPROC)glewGetProcAddress((const GLubyte*)"glLightModelxv")) == NULL) || r; + r = ((glLightx = (PFNGLLIGHTXPROC)glewGetProcAddress((const GLubyte*)"glLightx")) == NULL) || r; + r = ((glLightxv = (PFNGLLIGHTXVPROC)glewGetProcAddress((const GLubyte*)"glLightxv")) == NULL) || r; + r = ((glLineWidthx = (PFNGLLINEWIDTHXPROC)glewGetProcAddress((const GLubyte*)"glLineWidthx")) == NULL) || r; + r = ((glLoadMatrixx = (PFNGLLOADMATRIXXPROC)glewGetProcAddress((const GLubyte*)"glLoadMatrixx")) == NULL) || r; + r = ((glMaterialx = (PFNGLMATERIALXPROC)glewGetProcAddress((const GLubyte*)"glMaterialx")) == NULL) || r; + r = ((glMaterialxv = (PFNGLMATERIALXVPROC)glewGetProcAddress((const GLubyte*)"glMaterialxv")) == NULL) || r; + r = ((glMultMatrixx = (PFNGLMULTMATRIXXPROC)glewGetProcAddress((const GLubyte*)"glMultMatrixx")) == NULL) || r; + r = ((glMultiTexCoord4x = (PFNGLMULTITEXCOORD4XPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4x")) == NULL) || r; + r = ((glNormal3x = (PFNGLNORMAL3XPROC)glewGetProcAddress((const GLubyte*)"glNormal3x")) == NULL) || r; + r = ((glOrthof = (PFNGLORTHOFPROC)glewGetProcAddress((const GLubyte*)"glOrthof")) == NULL) || r; + r = ((glOrthox = (PFNGLORTHOXPROC)glewGetProcAddress((const GLubyte*)"glOrthox")) == NULL) || r; + r = ((glPointSizex = (PFNGLPOINTSIZEXPROC)glewGetProcAddress((const GLubyte*)"glPointSizex")) == NULL) || r; + r = ((glPolygonOffsetx = (PFNGLPOLYGONOFFSETXPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetx")) == NULL) || r; + r = ((glRotatex = (PFNGLROTATEXPROC)glewGetProcAddress((const GLubyte*)"glRotatex")) == NULL) || r; + r = ((glSampleCoveragex = (PFNGLSAMPLECOVERAGEXPROC)glewGetProcAddress((const GLubyte*)"glSampleCoveragex")) == NULL) || r; + r = ((glScalex = (PFNGLSCALEXPROC)glewGetProcAddress((const GLubyte*)"glScalex")) == NULL) || r; + r = ((glTexEnvx = (PFNGLTEXENVXPROC)glewGetProcAddress((const GLubyte*)"glTexEnvx")) == NULL) || r; + r = ((glTexEnvxv = (PFNGLTEXENVXVPROC)glewGetProcAddress((const GLubyte*)"glTexEnvxv")) == NULL) || r; + r = ((glTexParameterx = (PFNGLTEXPARAMETERXPROC)glewGetProcAddress((const GLubyte*)"glTexParameterx")) == NULL) || r; + r = ((glTranslatex = (PFNGLTRANSLATEXPROC)glewGetProcAddress((const GLubyte*)"glTranslatex")) == NULL) || r; + + return r; +} + +#endif /* GL_REGAL_ES1_0_compatibility */ + +#ifdef GL_REGAL_ES1_1_compatibility + +static GLboolean _glewInit_GL_REGAL_ES1_1_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClipPlanef = (PFNGLCLIPPLANEFPROC)glewGetProcAddress((const GLubyte*)"glClipPlanef")) == NULL) || r; + r = ((glClipPlanex = (PFNGLCLIPPLANEXPROC)glewGetProcAddress((const GLubyte*)"glClipPlanex")) == NULL) || r; + r = ((glGetClipPlanef = (PFNGLGETCLIPPLANEFPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanef")) == NULL) || r; + r = ((glGetClipPlanex = (PFNGLGETCLIPPLANEXPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanex")) == NULL) || r; + r = ((glGetFixedv = (PFNGLGETFIXEDVPROC)glewGetProcAddress((const GLubyte*)"glGetFixedv")) == NULL) || r; + r = ((glGetLightxv = (PFNGLGETLIGHTXVPROC)glewGetProcAddress((const GLubyte*)"glGetLightxv")) == NULL) || r; + r = ((glGetMaterialxv = (PFNGLGETMATERIALXVPROC)glewGetProcAddress((const GLubyte*)"glGetMaterialxv")) == NULL) || r; + r = ((glGetTexEnvxv = (PFNGLGETTEXENVXVPROC)glewGetProcAddress((const GLubyte*)"glGetTexEnvxv")) == NULL) || r; + r = ((glGetTexParameterxv = (PFNGLGETTEXPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterxv")) == NULL) || r; + r = ((glPointParameterx = (PFNGLPOINTPARAMETERXPROC)glewGetProcAddress((const GLubyte*)"glPointParameterx")) == NULL) || r; + r = ((glPointParameterxv = (PFNGLPOINTPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterxv")) == NULL) || r; + r = ((glPointSizePointerOES = (PFNGLPOINTSIZEPOINTEROESPROC)glewGetProcAddress((const GLubyte*)"glPointSizePointerOES")) == NULL) || r; + r = ((glTexParameterxv = (PFNGLTEXPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterxv")) == NULL) || r; + + return r; +} + +#endif /* GL_REGAL_ES1_1_compatibility */ + +#ifdef GL_REGAL_enable + +#endif /* GL_REGAL_enable */ + #ifdef GL_REGAL_error_string static GLboolean _glewInit_GL_REGAL_error_string (GLEW_CONTEXT_ARG_DEF_INIT) @@ -8327,6 +8921,15 @@ static GLboolean _glewInit_GL_REGAL_extension_query (GLEW_CONTEXT_ARG_DEF_INIT) #ifdef GL_REGAL_log +static GLboolean _glewInit_GL_REGAL_log (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glLogMessageCallbackREGAL = (PFNGLLOGMESSAGECALLBACKREGALPROC)glewGetProcAddress((const GLubyte*)"glLogMessageCallbackREGAL")) == NULL) || r; + + return r; +} + #endif /* GL_REGAL_log */ #ifdef GL_REND_screen_coordinates @@ -8909,7 +9512,8 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) } else { - CONST_CAST(GLEW_VERSION_4_3) = ( major > 4 ) || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; + CONST_CAST(GLEW_VERSION_4_4) = ( major > 4 ) || ( major == 4 && minor >= 4 ) ? GL_TRUE : GL_FALSE; + CONST_CAST(GLEW_VERSION_4_3) = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_4_2) = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_4_1) = GLEW_VERSION_4_2 == GL_TRUE || ( major == 4 && minor >= 1 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_4_0) = GLEW_VERSION_4_1 == GL_TRUE || ( major == 4 ) ? GL_TRUE : GL_FALSE; @@ -8975,6 +9579,8 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #endif /* GL_VERSION_4_2 */ #ifdef GL_VERSION_4_3 #endif /* GL_VERSION_4_3 */ +#ifdef GL_VERSION_4_4 +#endif /* GL_VERSION_4_4 */ #ifdef GL_3DFX_multisample CONST_CAST(GLEW_3DFX_multisample) = _glewSearchExtension("GL_3DFX_multisample", extStart, extEnd); #endif /* GL_3DFX_multisample */ @@ -9002,6 +9608,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_AMD_draw_buffers_blend) = _glewSearchExtension("GL_AMD_draw_buffers_blend", extStart, extEnd); if (glewExperimental || GLEW_AMD_draw_buffers_blend) CONST_CAST(GLEW_AMD_draw_buffers_blend) = !_glewInit_GL_AMD_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_draw_buffers_blend */ +#ifdef GL_AMD_interleaved_elements + CONST_CAST(GLEW_AMD_interleaved_elements) = _glewSearchExtension("GL_AMD_interleaved_elements", extStart, extEnd); + if (glewExperimental || GLEW_AMD_interleaved_elements) CONST_CAST(GLEW_AMD_interleaved_elements) = !_glewInit_GL_AMD_interleaved_elements(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_AMD_interleaved_elements */ #ifdef GL_AMD_multi_draw_indirect CONST_CAST(GLEW_AMD_multi_draw_indirect) = _glewSearchExtension("GL_AMD_multi_draw_indirect", extStart, extEnd); if (glewExperimental || GLEW_AMD_multi_draw_indirect) CONST_CAST(GLEW_AMD_multi_draw_indirect) = !_glewInit_GL_AMD_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9030,6 +9640,13 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_AMD_shader_stencil_export CONST_CAST(GLEW_AMD_shader_stencil_export) = _glewSearchExtension("GL_AMD_shader_stencil_export", extStart, extEnd); #endif /* GL_AMD_shader_stencil_export */ +#ifdef GL_AMD_shader_trinary_minmax + CONST_CAST(GLEW_AMD_shader_trinary_minmax) = _glewSearchExtension("GL_AMD_shader_trinary_minmax", extStart, extEnd); +#endif /* GL_AMD_shader_trinary_minmax */ +#ifdef GL_AMD_sparse_texture + CONST_CAST(GLEW_AMD_sparse_texture) = _glewSearchExtension("GL_AMD_sparse_texture", extStart, extEnd); + if (glewExperimental || GLEW_AMD_sparse_texture) CONST_CAST(GLEW_AMD_sparse_texture) = !_glewInit_GL_AMD_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_AMD_sparse_texture */ #ifdef GL_AMD_stencil_operation_extended CONST_CAST(GLEW_AMD_stencil_operation_extended) = _glewSearchExtension("GL_AMD_stencil_operation_extended", extStart, extEnd); if (glewExperimental || GLEW_AMD_stencil_operation_extended) CONST_CAST(GLEW_AMD_stencil_operation_extended) = !_glewInit_GL_AMD_stencil_operation_extended(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9050,6 +9667,47 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_AMD_vertex_shader_viewport_index CONST_CAST(GLEW_AMD_vertex_shader_viewport_index) = _glewSearchExtension("GL_AMD_vertex_shader_viewport_index", extStart, extEnd); #endif /* GL_AMD_vertex_shader_viewport_index */ +#ifdef GL_ANGLE_depth_texture + CONST_CAST(GLEW_ANGLE_depth_texture) = _glewSearchExtension("GL_ANGLE_depth_texture", extStart, extEnd); +#endif /* GL_ANGLE_depth_texture */ +#ifdef GL_ANGLE_framebuffer_blit + CONST_CAST(GLEW_ANGLE_framebuffer_blit) = _glewSearchExtension("GL_ANGLE_framebuffer_blit", extStart, extEnd); + if (glewExperimental || GLEW_ANGLE_framebuffer_blit) CONST_CAST(GLEW_ANGLE_framebuffer_blit) = !_glewInit_GL_ANGLE_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ANGLE_framebuffer_blit */ +#ifdef GL_ANGLE_framebuffer_multisample + CONST_CAST(GLEW_ANGLE_framebuffer_multisample) = _glewSearchExtension("GL_ANGLE_framebuffer_multisample", extStart, extEnd); + if (glewExperimental || GLEW_ANGLE_framebuffer_multisample) CONST_CAST(GLEW_ANGLE_framebuffer_multisample) = !_glewInit_GL_ANGLE_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ANGLE_framebuffer_multisample */ +#ifdef GL_ANGLE_instanced_arrays + CONST_CAST(GLEW_ANGLE_instanced_arrays) = _glewSearchExtension("GL_ANGLE_instanced_arrays", extStart, extEnd); + if (glewExperimental || GLEW_ANGLE_instanced_arrays) CONST_CAST(GLEW_ANGLE_instanced_arrays) = !_glewInit_GL_ANGLE_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ANGLE_instanced_arrays */ +#ifdef GL_ANGLE_pack_reverse_row_order + CONST_CAST(GLEW_ANGLE_pack_reverse_row_order) = _glewSearchExtension("GL_ANGLE_pack_reverse_row_order", extStart, extEnd); +#endif /* GL_ANGLE_pack_reverse_row_order */ +#ifdef GL_ANGLE_program_binary + CONST_CAST(GLEW_ANGLE_program_binary) = _glewSearchExtension("GL_ANGLE_program_binary", extStart, extEnd); +#endif /* GL_ANGLE_program_binary */ +#ifdef GL_ANGLE_texture_compression_dxt1 + CONST_CAST(GLEW_ANGLE_texture_compression_dxt1) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt1", extStart, extEnd); +#endif /* GL_ANGLE_texture_compression_dxt1 */ +#ifdef GL_ANGLE_texture_compression_dxt3 + CONST_CAST(GLEW_ANGLE_texture_compression_dxt3) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt3", extStart, extEnd); +#endif /* GL_ANGLE_texture_compression_dxt3 */ +#ifdef GL_ANGLE_texture_compression_dxt5 + CONST_CAST(GLEW_ANGLE_texture_compression_dxt5) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt5", extStart, extEnd); +#endif /* GL_ANGLE_texture_compression_dxt5 */ +#ifdef GL_ANGLE_texture_usage + CONST_CAST(GLEW_ANGLE_texture_usage) = _glewSearchExtension("GL_ANGLE_texture_usage", extStart, extEnd); +#endif /* GL_ANGLE_texture_usage */ +#ifdef GL_ANGLE_timer_query + CONST_CAST(GLEW_ANGLE_timer_query) = _glewSearchExtension("GL_ANGLE_timer_query", extStart, extEnd); + if (glewExperimental || GLEW_ANGLE_timer_query) CONST_CAST(GLEW_ANGLE_timer_query) = !_glewInit_GL_ANGLE_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ANGLE_timer_query */ +#ifdef GL_ANGLE_translated_shader_source + CONST_CAST(GLEW_ANGLE_translated_shader_source) = _glewSearchExtension("GL_ANGLE_translated_shader_source", extStart, extEnd); + if (glewExperimental || GLEW_ANGLE_translated_shader_source) CONST_CAST(GLEW_ANGLE_translated_shader_source) = !_glewInit_GL_ANGLE_translated_shader_source(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ANGLE_translated_shader_source */ #ifdef GL_APPLE_aux_depth_stencil CONST_CAST(GLEW_APPLE_aux_depth_stencil) = _glewSearchExtension("GL_APPLE_aux_depth_stencil", extStart, extEnd); #endif /* GL_APPLE_aux_depth_stencil */ @@ -9123,10 +9781,18 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_ARB_base_instance) = _glewSearchExtension("GL_ARB_base_instance", extStart, extEnd); if (glewExperimental || GLEW_ARB_base_instance) CONST_CAST(GLEW_ARB_base_instance) = !_glewInit_GL_ARB_base_instance(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_base_instance */ +#ifdef GL_ARB_bindless_texture + CONST_CAST(GLEW_ARB_bindless_texture) = _glewSearchExtension("GL_ARB_bindless_texture", extStart, extEnd); + if (glewExperimental || GLEW_ARB_bindless_texture) CONST_CAST(GLEW_ARB_bindless_texture) = !_glewInit_GL_ARB_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_bindless_texture */ #ifdef GL_ARB_blend_func_extended CONST_CAST(GLEW_ARB_blend_func_extended) = _glewSearchExtension("GL_ARB_blend_func_extended", extStart, extEnd); if (glewExperimental || GLEW_ARB_blend_func_extended) CONST_CAST(GLEW_ARB_blend_func_extended) = !_glewInit_GL_ARB_blend_func_extended(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_blend_func_extended */ +#ifdef GL_ARB_buffer_storage + CONST_CAST(GLEW_ARB_buffer_storage) = _glewSearchExtension("GL_ARB_buffer_storage", extStart, extEnd); + if (glewExperimental || GLEW_ARB_buffer_storage) CONST_CAST(GLEW_ARB_buffer_storage) = !_glewInit_GL_ARB_buffer_storage(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_buffer_storage */ #ifdef GL_ARB_cl_event CONST_CAST(GLEW_ARB_cl_event) = _glewSearchExtension("GL_ARB_cl_event", extStart, extEnd); if (glewExperimental || GLEW_ARB_cl_event) CONST_CAST(GLEW_ARB_cl_event) = !_glewInit_GL_ARB_cl_event(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9135,6 +9801,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_ARB_clear_buffer_object) = _glewSearchExtension("GL_ARB_clear_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_clear_buffer_object) CONST_CAST(GLEW_ARB_clear_buffer_object) = !_glewInit_GL_ARB_clear_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_clear_buffer_object */ +#ifdef GL_ARB_clear_texture + CONST_CAST(GLEW_ARB_clear_texture) = _glewSearchExtension("GL_ARB_clear_texture", extStart, extEnd); + if (glewExperimental || GLEW_ARB_clear_texture) CONST_CAST(GLEW_ARB_clear_texture) = !_glewInit_GL_ARB_clear_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_clear_texture */ #ifdef GL_ARB_color_buffer_float CONST_CAST(GLEW_ARB_color_buffer_float) = _glewSearchExtension("GL_ARB_color_buffer_float", extStart, extEnd); if (glewExperimental || GLEW_ARB_color_buffer_float) CONST_CAST(GLEW_ARB_color_buffer_float) = !_glewInit_GL_ARB_color_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9149,6 +9819,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_ARB_compute_shader) = _glewSearchExtension("GL_ARB_compute_shader", extStart, extEnd); if (glewExperimental || GLEW_ARB_compute_shader) CONST_CAST(GLEW_ARB_compute_shader) = !_glewInit_GL_ARB_compute_shader(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_compute_shader */ +#ifdef GL_ARB_compute_variable_group_size + CONST_CAST(GLEW_ARB_compute_variable_group_size) = _glewSearchExtension("GL_ARB_compute_variable_group_size", extStart, extEnd); + if (glewExperimental || GLEW_ARB_compute_variable_group_size) CONST_CAST(GLEW_ARB_compute_variable_group_size) = !_glewInit_GL_ARB_compute_variable_group_size(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_compute_variable_group_size */ #ifdef GL_ARB_conservative_depth CONST_CAST(GLEW_ARB_conservative_depth) = _glewSearchExtension("GL_ARB_conservative_depth", extStart, extEnd); #endif /* GL_ARB_conservative_depth */ @@ -9192,6 +9866,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_ARB_draw_instanced CONST_CAST(GLEW_ARB_draw_instanced) = _glewSearchExtension("GL_ARB_draw_instanced", extStart, extEnd); #endif /* GL_ARB_draw_instanced */ +#ifdef GL_ARB_enhanced_layouts + CONST_CAST(GLEW_ARB_enhanced_layouts) = _glewSearchExtension("GL_ARB_enhanced_layouts", extStart, extEnd); +#endif /* GL_ARB_enhanced_layouts */ #ifdef GL_ARB_explicit_attrib_location CONST_CAST(GLEW_ARB_explicit_attrib_location) = _glewSearchExtension("GL_ARB_explicit_attrib_location", extStart, extEnd); #endif /* GL_ARB_explicit_attrib_location */ @@ -9249,6 +9926,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_ARB_imaging) = _glewSearchExtension("GL_ARB_imaging", extStart, extEnd); if (glewExperimental || GLEW_ARB_imaging) CONST_CAST(GLEW_ARB_imaging) = !_glewInit_GL_ARB_imaging(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_imaging */ +#ifdef GL_ARB_indirect_parameters + CONST_CAST(GLEW_ARB_indirect_parameters) = _glewSearchExtension("GL_ARB_indirect_parameters", extStart, extEnd); + if (glewExperimental || GLEW_ARB_indirect_parameters) CONST_CAST(GLEW_ARB_indirect_parameters) = !_glewInit_GL_ARB_indirect_parameters(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_indirect_parameters */ #ifdef GL_ARB_instanced_arrays CONST_CAST(GLEW_ARB_instanced_arrays) = _glewSearchExtension("GL_ARB_instanced_arrays", extStart, extEnd); if (glewExperimental || GLEW_ARB_instanced_arrays) CONST_CAST(GLEW_ARB_instanced_arrays) = !_glewInit_GL_ARB_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9276,6 +9957,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_ARB_matrix_palette) = _glewSearchExtension("GL_ARB_matrix_palette", extStart, extEnd); if (glewExperimental || GLEW_ARB_matrix_palette) CONST_CAST(GLEW_ARB_matrix_palette) = !_glewInit_GL_ARB_matrix_palette(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_matrix_palette */ +#ifdef GL_ARB_multi_bind + CONST_CAST(GLEW_ARB_multi_bind) = _glewSearchExtension("GL_ARB_multi_bind", extStart, extEnd); + if (glewExperimental || GLEW_ARB_multi_bind) CONST_CAST(GLEW_ARB_multi_bind) = !_glewInit_GL_ARB_multi_bind(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_multi_bind */ #ifdef GL_ARB_multi_draw_indirect CONST_CAST(GLEW_ARB_multi_draw_indirect) = _glewSearchExtension("GL_ARB_multi_draw_indirect", extStart, extEnd); if (glewExperimental || GLEW_ARB_multi_draw_indirect) CONST_CAST(GLEW_ARB_multi_draw_indirect) = !_glewInit_GL_ARB_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9313,6 +9998,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_ARB_provoking_vertex) = _glewSearchExtension("GL_ARB_provoking_vertex", extStart, extEnd); if (glewExperimental || GLEW_ARB_provoking_vertex) CONST_CAST(GLEW_ARB_provoking_vertex) = !_glewInit_GL_ARB_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_provoking_vertex */ +#ifdef GL_ARB_query_buffer_object + CONST_CAST(GLEW_ARB_query_buffer_object) = _glewSearchExtension("GL_ARB_query_buffer_object", extStart, extEnd); +#endif /* GL_ARB_query_buffer_object */ #ifdef GL_ARB_robust_buffer_access_behavior CONST_CAST(GLEW_ARB_robust_buffer_access_behavior) = _glewSearchExtension("GL_ARB_robust_buffer_access_behavior", extStart, extEnd); #endif /* GL_ARB_robust_buffer_access_behavior */ @@ -9337,6 +10025,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_ARB_seamless_cube_map CONST_CAST(GLEW_ARB_seamless_cube_map) = _glewSearchExtension("GL_ARB_seamless_cube_map", extStart, extEnd); #endif /* GL_ARB_seamless_cube_map */ +#ifdef GL_ARB_seamless_cubemap_per_texture + CONST_CAST(GLEW_ARB_seamless_cubemap_per_texture) = _glewSearchExtension("GL_ARB_seamless_cubemap_per_texture", extStart, extEnd); +#endif /* GL_ARB_seamless_cubemap_per_texture */ #ifdef GL_ARB_separate_shader_objects CONST_CAST(GLEW_ARB_separate_shader_objects) = _glewSearchExtension("GL_ARB_separate_shader_objects", extStart, extEnd); if (glewExperimental || GLEW_ARB_separate_shader_objects) CONST_CAST(GLEW_ARB_separate_shader_objects) = !_glewInit_GL_ARB_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9348,6 +10039,12 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_ARB_shader_bit_encoding CONST_CAST(GLEW_ARB_shader_bit_encoding) = _glewSearchExtension("GL_ARB_shader_bit_encoding", extStart, extEnd); #endif /* GL_ARB_shader_bit_encoding */ +#ifdef GL_ARB_shader_draw_parameters + CONST_CAST(GLEW_ARB_shader_draw_parameters) = _glewSearchExtension("GL_ARB_shader_draw_parameters", extStart, extEnd); +#endif /* GL_ARB_shader_draw_parameters */ +#ifdef GL_ARB_shader_group_vote + CONST_CAST(GLEW_ARB_shader_group_vote) = _glewSearchExtension("GL_ARB_shader_group_vote", extStart, extEnd); +#endif /* GL_ARB_shader_group_vote */ #ifdef GL_ARB_shader_image_load_store CONST_CAST(GLEW_ARB_shader_image_load_store) = _glewSearchExtension("GL_ARB_shader_image_load_store", extStart, extEnd); if (glewExperimental || GLEW_ARB_shader_image_load_store) CONST_CAST(GLEW_ARB_shader_image_load_store) = !_glewInit_GL_ARB_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9395,6 +10092,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_ARB_shadow_ambient CONST_CAST(GLEW_ARB_shadow_ambient) = _glewSearchExtension("GL_ARB_shadow_ambient", extStart, extEnd); #endif /* GL_ARB_shadow_ambient */ +#ifdef GL_ARB_sparse_texture + CONST_CAST(GLEW_ARB_sparse_texture) = _glewSearchExtension("GL_ARB_sparse_texture", extStart, extEnd); + if (glewExperimental || GLEW_ARB_sparse_texture) CONST_CAST(GLEW_ARB_sparse_texture) = !_glewInit_GL_ARB_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_sparse_texture */ #ifdef GL_ARB_stencil_texturing CONST_CAST(GLEW_ARB_stencil_texturing) = _glewSearchExtension("GL_ARB_stencil_texturing", extStart, extEnd); #endif /* GL_ARB_stencil_texturing */ @@ -9454,6 +10155,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_ARB_texture_gather CONST_CAST(GLEW_ARB_texture_gather) = _glewSearchExtension("GL_ARB_texture_gather", extStart, extEnd); #endif /* GL_ARB_texture_gather */ +#ifdef GL_ARB_texture_mirror_clamp_to_edge + CONST_CAST(GLEW_ARB_texture_mirror_clamp_to_edge) = _glewSearchExtension("GL_ARB_texture_mirror_clamp_to_edge", extStart, extEnd); +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ #ifdef GL_ARB_texture_mirrored_repeat CONST_CAST(GLEW_ARB_texture_mirrored_repeat) = _glewSearchExtension("GL_ARB_texture_mirrored_repeat", extStart, extEnd); #endif /* GL_ARB_texture_mirrored_repeat */ @@ -9479,6 +10183,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_ARB_texture_rgb10_a2ui CONST_CAST(GLEW_ARB_texture_rgb10_a2ui) = _glewSearchExtension("GL_ARB_texture_rgb10_a2ui", extStart, extEnd); #endif /* GL_ARB_texture_rgb10_a2ui */ +#ifdef GL_ARB_texture_stencil8 + CONST_CAST(GLEW_ARB_texture_stencil8) = _glewSearchExtension("GL_ARB_texture_stencil8", extStart, extEnd); +#endif /* GL_ARB_texture_stencil8 */ #ifdef GL_ARB_texture_storage CONST_CAST(GLEW_ARB_texture_storage) = _glewSearchExtension("GL_ARB_texture_storage", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_storage) CONST_CAST(GLEW_ARB_texture_storage) = !_glewInit_GL_ARB_texture_storage(GLEW_CONTEXT_ARG_VAR_INIT); @@ -9549,6 +10256,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_ARB_vertex_shader) = _glewSearchExtension("GL_ARB_vertex_shader", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_shader) CONST_CAST(GLEW_ARB_vertex_shader) = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_shader */ +#ifdef GL_ARB_vertex_type_10f_11f_11f_rev + CONST_CAST(GLEW_ARB_vertex_type_10f_11f_11f_rev) = _glewSearchExtension("GL_ARB_vertex_type_10f_11f_11f_rev", extStart, extEnd); +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ #ifdef GL_ARB_vertex_type_2_10_10_10_rev CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = _glewSearchExtension("GL_ARB_vertex_type_2_10_10_10_rev", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_type_2_10_10_10_rev) CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = !_glewInit_GL_ARB_vertex_type_2_10_10_10_rev(GLEW_CONTEXT_ARG_VAR_INIT); @@ -10036,6 +10746,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_INGR_interlace_read CONST_CAST(GLEW_INGR_interlace_read) = _glewSearchExtension("GL_INGR_interlace_read", extStart, extEnd); #endif /* GL_INGR_interlace_read */ +#ifdef GL_INTEL_map_texture + CONST_CAST(GLEW_INTEL_map_texture) = _glewSearchExtension("GL_INTEL_map_texture", extStart, extEnd); + if (glewExperimental || GLEW_INTEL_map_texture) CONST_CAST(GLEW_INTEL_map_texture) = !_glewInit_GL_INTEL_map_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_INTEL_map_texture */ #ifdef GL_INTEL_parallel_arrays CONST_CAST(GLEW_INTEL_parallel_arrays) = _glewSearchExtension("GL_INTEL_parallel_arrays", extStart, extEnd); if (glewExperimental || GLEW_INTEL_parallel_arrays) CONST_CAST(GLEW_INTEL_parallel_arrays) = !_glewInit_GL_INTEL_parallel_arrays(GLEW_CONTEXT_ARG_VAR_INIT); @@ -10072,16 +10786,34 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_MESA_ycbcr_texture CONST_CAST(GLEW_MESA_ycbcr_texture) = _glewSearchExtension("GL_MESA_ycbcr_texture", extStart, extEnd); #endif /* GL_MESA_ycbcr_texture */ +#ifdef GL_NVX_conditional_render + CONST_CAST(GLEW_NVX_conditional_render) = _glewSearchExtension("GL_NVX_conditional_render", extStart, extEnd); + if (glewExperimental || GLEW_NVX_conditional_render) CONST_CAST(GLEW_NVX_conditional_render) = !_glewInit_GL_NVX_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NVX_conditional_render */ #ifdef GL_NVX_gpu_memory_info CONST_CAST(GLEW_NVX_gpu_memory_info) = _glewSearchExtension("GL_NVX_gpu_memory_info", extStart, extEnd); #endif /* GL_NVX_gpu_memory_info */ +#ifdef GL_NV_bindless_multi_draw_indirect + CONST_CAST(GLEW_NV_bindless_multi_draw_indirect) = _glewSearchExtension("GL_NV_bindless_multi_draw_indirect", extStart, extEnd); + if (glewExperimental || GLEW_NV_bindless_multi_draw_indirect) CONST_CAST(GLEW_NV_bindless_multi_draw_indirect) = !_glewInit_GL_NV_bindless_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_bindless_multi_draw_indirect */ #ifdef GL_NV_bindless_texture CONST_CAST(GLEW_NV_bindless_texture) = _glewSearchExtension("GL_NV_bindless_texture", extStart, extEnd); if (glewExperimental || GLEW_NV_bindless_texture) CONST_CAST(GLEW_NV_bindless_texture) = !_glewInit_GL_NV_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_bindless_texture */ +#ifdef GL_NV_blend_equation_advanced + CONST_CAST(GLEW_NV_blend_equation_advanced) = _glewSearchExtension("GL_NV_blend_equation_advanced", extStart, extEnd); + if (glewExperimental || GLEW_NV_blend_equation_advanced) CONST_CAST(GLEW_NV_blend_equation_advanced) = !_glewInit_GL_NV_blend_equation_advanced(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_blend_equation_advanced */ +#ifdef GL_NV_blend_equation_advanced_coherent + CONST_CAST(GLEW_NV_blend_equation_advanced_coherent) = _glewSearchExtension("GL_NV_blend_equation_advanced_coherent", extStart, extEnd); +#endif /* GL_NV_blend_equation_advanced_coherent */ #ifdef GL_NV_blend_square CONST_CAST(GLEW_NV_blend_square) = _glewSearchExtension("GL_NV_blend_square", extStart, extEnd); #endif /* GL_NV_blend_square */ +#ifdef GL_NV_compute_program5 + CONST_CAST(GLEW_NV_compute_program5) = _glewSearchExtension("GL_NV_compute_program5", extStart, extEnd); +#endif /* GL_NV_compute_program5 */ #ifdef GL_NV_conditional_render CONST_CAST(GLEW_NV_conditional_render) = _glewSearchExtension("GL_NV_conditional_render", extStart, extEnd); if (glewExperimental || GLEW_NV_conditional_render) CONST_CAST(GLEW_NV_conditional_render) = !_glewInit_GL_NV_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); @@ -10093,6 +10825,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_NV_copy_image) = _glewSearchExtension("GL_NV_copy_image", extStart, extEnd); if (glewExperimental || GLEW_NV_copy_image) CONST_CAST(GLEW_NV_copy_image) = !_glewInit_GL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_copy_image */ +#ifdef GL_NV_deep_texture3D + CONST_CAST(GLEW_NV_deep_texture3D) = _glewSearchExtension("GL_NV_deep_texture3D", extStart, extEnd); +#endif /* GL_NV_deep_texture3D */ #ifdef GL_NV_depth_buffer_float CONST_CAST(GLEW_NV_depth_buffer_float) = _glewSearchExtension("GL_NV_depth_buffer_float", extStart, extEnd); if (glewExperimental || GLEW_NV_depth_buffer_float) CONST_CAST(GLEW_NV_depth_buffer_float) = !_glewInit_GL_NV_depth_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); @@ -10103,6 +10838,10 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_NV_depth_range_unclamped CONST_CAST(GLEW_NV_depth_range_unclamped) = _glewSearchExtension("GL_NV_depth_range_unclamped", extStart, extEnd); #endif /* GL_NV_depth_range_unclamped */ +#ifdef GL_NV_draw_texture + CONST_CAST(GLEW_NV_draw_texture) = _glewSearchExtension("GL_NV_draw_texture", extStart, extEnd); + if (glewExperimental || GLEW_NV_draw_texture) CONST_CAST(GLEW_NV_draw_texture) = !_glewInit_GL_NV_draw_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_draw_texture */ #ifdef GL_NV_evaluators CONST_CAST(GLEW_NV_evaluators) = _glewSearchExtension("GL_NV_evaluators", extStart, extEnd); if (glewExperimental || GLEW_NV_evaluators) CONST_CAST(GLEW_NV_evaluators) = !_glewInit_GL_NV_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); @@ -10152,6 +10891,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_NV_gpu_program5 CONST_CAST(GLEW_NV_gpu_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); #endif /* GL_NV_gpu_program5 */ +#ifdef GL_NV_gpu_program5_mem_extended + CONST_CAST(GLEW_NV_gpu_program5_mem_extended) = _glewSearchExtension("GL_NV_gpu_program5_mem_extended", extStart, extEnd); +#endif /* GL_NV_gpu_program5_mem_extended */ #ifdef GL_NV_gpu_program_fp64 CONST_CAST(GLEW_NV_gpu_program_fp64) = _glewSearchExtension("GL_NV_gpu_program_fp64", extStart, extEnd); #endif /* GL_NV_gpu_program_fp64 */ @@ -10214,6 +10956,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_NV_register_combiners2) = _glewSearchExtension("GL_NV_register_combiners2", extStart, extEnd); if (glewExperimental || GLEW_NV_register_combiners2) CONST_CAST(GLEW_NV_register_combiners2) = !_glewInit_GL_NV_register_combiners2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_register_combiners2 */ +#ifdef GL_NV_shader_atomic_counters + CONST_CAST(GLEW_NV_shader_atomic_counters) = _glewSearchExtension("GL_NV_shader_atomic_counters", extStart, extEnd); +#endif /* GL_NV_shader_atomic_counters */ #ifdef GL_NV_shader_atomic_float CONST_CAST(GLEW_NV_shader_atomic_float) = _glewSearchExtension("GL_NV_shader_atomic_float", extStart, extEnd); #endif /* GL_NV_shader_atomic_float */ @@ -10221,6 +10966,9 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLEW_NV_shader_buffer_load) = _glewSearchExtension("GL_NV_shader_buffer_load", extStart, extEnd); if (glewExperimental || GLEW_NV_shader_buffer_load) CONST_CAST(GLEW_NV_shader_buffer_load) = !_glewInit_GL_NV_shader_buffer_load(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_shader_buffer_load */ +#ifdef GL_NV_shader_storage_buffer_object + CONST_CAST(GLEW_NV_shader_storage_buffer_object) = _glewSearchExtension("GL_NV_shader_storage_buffer_object", extStart, extEnd); +#endif /* GL_NV_shader_storage_buffer_object */ #ifdef GL_NV_tessellation_program5 CONST_CAST(GLEW_NV_tessellation_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); #endif /* GL_NV_tessellation_program5 */ @@ -10337,6 +11085,17 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #ifdef GL_PGI_vertex_hints CONST_CAST(GLEW_PGI_vertex_hints) = _glewSearchExtension("GL_PGI_vertex_hints", extStart, extEnd); #endif /* GL_PGI_vertex_hints */ +#ifdef GL_REGAL_ES1_0_compatibility + CONST_CAST(GLEW_REGAL_ES1_0_compatibility) = _glewSearchExtension("GL_REGAL_ES1_0_compatibility", extStart, extEnd); + if (glewExperimental || GLEW_REGAL_ES1_0_compatibility) CONST_CAST(GLEW_REGAL_ES1_0_compatibility) = !_glewInit_GL_REGAL_ES1_0_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_REGAL_ES1_0_compatibility */ +#ifdef GL_REGAL_ES1_1_compatibility + CONST_CAST(GLEW_REGAL_ES1_1_compatibility) = _glewSearchExtension("GL_REGAL_ES1_1_compatibility", extStart, extEnd); + if (glewExperimental || GLEW_REGAL_ES1_1_compatibility) CONST_CAST(GLEW_REGAL_ES1_1_compatibility) = !_glewInit_GL_REGAL_ES1_1_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_REGAL_ES1_1_compatibility */ +#ifdef GL_REGAL_enable + CONST_CAST(GLEW_REGAL_enable) = _glewSearchExtension("GL_REGAL_enable", extStart, extEnd); +#endif /* GL_REGAL_enable */ #ifdef GL_REGAL_error_string CONST_CAST(GLEW_REGAL_error_string) = _glewSearchExtension("GL_REGAL_error_string", extStart, extEnd); if (glewExperimental || GLEW_REGAL_error_string) CONST_CAST(GLEW_REGAL_error_string) = !_glewInit_GL_REGAL_error_string(GLEW_CONTEXT_ARG_VAR_INIT); @@ -10347,6 +11106,7 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) #endif /* GL_REGAL_extension_query */ #ifdef GL_REGAL_log CONST_CAST(GLEW_REGAL_log) = _glewSearchExtension("GL_REGAL_log", extStart, extEnd); + if (glewExperimental || GLEW_REGAL_log) CONST_CAST(GLEW_REGAL_log) = !_glewInit_GL_REGAL_log(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_REGAL_log */ #ifdef GL_REND_screen_coordinates CONST_CAST(GLEW_REND_screen_coordinates) = _glewSearchExtension("GL_REND_screen_coordinates", extStart, extEnd); @@ -10727,6 +11487,8 @@ GLboolean __WGLEW_ARB_pbuffer = GL_FALSE; GLboolean __WGLEW_ARB_pixel_format = GL_FALSE; GLboolean __WGLEW_ARB_pixel_format_float = GL_FALSE; GLboolean __WGLEW_ARB_render_texture = GL_FALSE; +GLboolean __WGLEW_ARB_robustness_application_isolation = GL_FALSE; +GLboolean __WGLEW_ARB_robustness_share_group_isolation = GL_FALSE; GLboolean __WGLEW_ATI_pixel_format_float = GL_FALSE; GLboolean __WGLEW_ATI_render_texture_rectangle = GL_FALSE; GLboolean __WGLEW_EXT_create_context_es2_profile = GL_FALSE; @@ -10926,6 +11688,14 @@ static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT) #endif /* WGL_ARB_render_texture */ +#ifdef WGL_ARB_robustness_application_isolation + +#endif /* WGL_ARB_robustness_application_isolation */ + +#ifdef WGL_ARB_robustness_share_group_isolation + +#endif /* WGL_ARB_robustness_share_group_isolation */ + #ifdef WGL_ATI_pixel_format_float #endif /* WGL_ATI_pixel_format_float */ @@ -11418,6 +12188,12 @@ GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(WGLEW_ARB_render_texture) = _glewSearchExtension("WGL_ARB_render_texture", extStart, extEnd); if (glewExperimental || WGLEW_ARB_render_texture|| crippled) CONST_CAST(WGLEW_ARB_render_texture)= !_glewInit_WGL_ARB_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_render_texture */ +#ifdef WGL_ARB_robustness_application_isolation + CONST_CAST(WGLEW_ARB_robustness_application_isolation) = _glewSearchExtension("WGL_ARB_robustness_application_isolation", extStart, extEnd); +#endif /* WGL_ARB_robustness_application_isolation */ +#ifdef WGL_ARB_robustness_share_group_isolation + CONST_CAST(WGLEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("WGL_ARB_robustness_share_group_isolation", extStart, extEnd); +#endif /* WGL_ARB_robustness_share_group_isolation */ #ifdef WGL_ATI_pixel_format_float CONST_CAST(WGLEW_ATI_pixel_format_float) = _glewSearchExtension("WGL_ATI_pixel_format_float", extStart, extEnd); #endif /* WGL_ATI_pixel_format_float */ @@ -11548,7 +12324,7 @@ GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) return GLEW_OK; } -#elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) +#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay = NULL; @@ -11570,6 +12346,16 @@ PFNGLXQUERYCONTEXTPROC __glewXQueryContext = NULL; PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable = NULL; PFNGLXSELECTEVENTPROC __glewXSelectEvent = NULL; +PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC __glewXBlitContextFramebufferAMD = NULL; +PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC __glewXCreateAssociatedContextAMD = NULL; +PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __glewXCreateAssociatedContextAttribsAMD = NULL; +PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC __glewXDeleteAssociatedContextAMD = NULL; +PFNGLXGETCONTEXTGPUIDAMDPROC __glewXGetContextGPUIDAMD = NULL; +PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC __glewXGetCurrentAssociatedContextAMD = NULL; +PFNGLXGETGPUIDSAMDPROC __glewXGetGPUIDsAMD = NULL; +PFNGLXGETGPUINFOAMDPROC __glewXGetGPUInfoAMD = NULL; +PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __glewXMakeAssociatedContextCurrentAMD = NULL; + PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB = NULL; PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI = NULL; @@ -11702,6 +12488,7 @@ GLboolean __GLXEW_ARB_robustness_share_group_isolation = GL_FALSE; GLboolean __GLXEW_ARB_vertex_buffer_object = GL_FALSE; GLboolean __GLXEW_ATI_pixel_format_float = GL_FALSE; GLboolean __GLXEW_ATI_render_texture = GL_FALSE; +GLboolean __GLXEW_EXT_buffer_age = GL_FALSE; GLboolean __GLXEW_EXT_create_context_es2_profile = GL_FALSE; GLboolean __GLXEW_EXT_create_context_es_profile = GL_FALSE; GLboolean __GLXEW_EXT_fbconfig_packed_float = GL_FALSE; @@ -11727,7 +12514,7 @@ GLboolean __GLXEW_NV_present_video = GL_FALSE; GLboolean __GLXEW_NV_swap_group = GL_FALSE; GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE; GLboolean __GLXEW_NV_video_capture = GL_FALSE; -GLboolean __GLXEW_NV_video_out = GL_FALSE; +GLboolean __GLXEW_NV_video_output = GL_FALSE; GLboolean __GLXEW_OML_swap_method = GL_FALSE; GLboolean __GLXEW_OML_sync_control = GL_FALSE; GLboolean __GLXEW_SGIS_blended_overlay = GL_FALSE; @@ -11802,6 +12589,23 @@ static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT) #ifdef GLX_AMD_gpu_association +static GLboolean _glewInit_GLX_AMD_gpu_association (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBlitContextFramebufferAMD = (PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)glewGetProcAddress((const GLubyte*)"glXBlitContextFramebufferAMD")) == NULL) || r; + r = ((glXCreateAssociatedContextAMD = (PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXCreateAssociatedContextAMD")) == NULL) || r; + r = ((glXCreateAssociatedContextAttribsAMD = (PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)glewGetProcAddress((const GLubyte*)"glXCreateAssociatedContextAttribsAMD")) == NULL) || r; + r = ((glXDeleteAssociatedContextAMD = (PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXDeleteAssociatedContextAMD")) == NULL) || r; + r = ((glXGetContextGPUIDAMD = (PFNGLXGETCONTEXTGPUIDAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetContextGPUIDAMD")) == NULL) || r; + r = ((glXGetCurrentAssociatedContextAMD = (PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentAssociatedContextAMD")) == NULL) || r; + r = ((glXGetGPUIDsAMD = (PFNGLXGETGPUIDSAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetGPUIDsAMD")) == NULL) || r; + r = ((glXGetGPUInfoAMD = (PFNGLXGETGPUINFOAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetGPUInfoAMD")) == NULL) || r; + r = ((glXMakeAssociatedContextCurrentAMD = (PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)glewGetProcAddress((const GLubyte*)"glXMakeAssociatedContextCurrentAMD")) == NULL) || r; + + return r; +} + #endif /* GLX_AMD_gpu_association */ #ifdef GLX_ARB_create_context @@ -11872,6 +12676,10 @@ static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT) #endif /* GLX_ATI_render_texture */ +#ifdef GLX_EXT_buffer_age + +#endif /* GLX_EXT_buffer_age */ + #ifdef GLX_EXT_create_context_es2_profile #endif /* GLX_EXT_create_context_es2_profile */ @@ -12114,9 +12922,9 @@ static GLboolean _glewInit_GLX_NV_video_capture (GLXEW_CONTEXT_ARG_DEF_INIT) #endif /* GLX_NV_video_capture */ -#ifdef GLX_NV_video_out +#ifdef GLX_NV_video_output -static GLboolean _glewInit_GLX_NV_video_out (GLXEW_CONTEXT_ARG_DEF_INIT) +static GLboolean _glewInit_GLX_NV_video_output (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; @@ -12130,7 +12938,7 @@ static GLboolean _glewInit_GLX_NV_video_out (GLXEW_CONTEXT_ARG_DEF_INIT) return r; } -#endif /* GLX_NV_video_out */ +#endif /* GLX_NV_video_output */ #ifdef GLX_OML_swap_method @@ -12414,6 +13222,7 @@ GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) #endif /* GLX_3DFX_multisample */ #ifdef GLX_AMD_gpu_association CONST_CAST(GLXEW_AMD_gpu_association) = _glewSearchExtension("GLX_AMD_gpu_association", extStart, extEnd); + if (glewExperimental || GLXEW_AMD_gpu_association) CONST_CAST(GLXEW_AMD_gpu_association) = !_glewInit_GLX_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_AMD_gpu_association */ #ifdef GLX_ARB_create_context CONST_CAST(GLXEW_ARB_create_context) = _glewSearchExtension("GLX_ARB_create_context", extStart, extEnd); @@ -12453,6 +13262,9 @@ GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLXEW_ATI_render_texture) = _glewSearchExtension("GLX_ATI_render_texture", extStart, extEnd); if (glewExperimental || GLXEW_ATI_render_texture) CONST_CAST(GLXEW_ATI_render_texture) = !_glewInit_GLX_ATI_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_ATI_render_texture */ +#ifdef GLX_EXT_buffer_age + CONST_CAST(GLXEW_EXT_buffer_age) = _glewSearchExtension("GLX_EXT_buffer_age", extStart, extEnd); +#endif /* GLX_EXT_buffer_age */ #ifdef GLX_EXT_create_context_es2_profile CONST_CAST(GLXEW_EXT_create_context_es2_profile) = _glewSearchExtension("GLX_EXT_create_context_es2_profile", extStart, extEnd); #endif /* GLX_EXT_create_context_es2_profile */ @@ -12542,10 +13354,10 @@ GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) CONST_CAST(GLXEW_NV_video_capture) = _glewSearchExtension("GLX_NV_video_capture", extStart, extEnd); if (glewExperimental || GLXEW_NV_video_capture) CONST_CAST(GLXEW_NV_video_capture) = !_glewInit_GLX_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_NV_video_capture */ -#ifdef GLX_NV_video_out - CONST_CAST(GLXEW_NV_video_out) = _glewSearchExtension("GLX_NV_video_out", extStart, extEnd); - if (glewExperimental || GLXEW_NV_video_out) CONST_CAST(GLXEW_NV_video_out) = !_glewInit_GLX_NV_video_out(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_video_out */ +#ifdef GLX_NV_video_output + CONST_CAST(GLXEW_NV_video_output) = _glewSearchExtension("GLX_NV_video_output", extStart, extEnd); + if (glewExperimental || GLXEW_NV_video_output) CONST_CAST(GLXEW_NV_video_output) = !_glewInit_GLX_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_NV_video_output */ #ifdef GLX_OML_swap_method CONST_CAST(GLXEW_OML_swap_method) = _glewSearchExtension("GLX_OML_swap_method", extStart, extEnd); #endif /* GLX_OML_swap_method */ @@ -12620,7 +13432,7 @@ GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) return GLEW_OK; } -#endif /* !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */ +#endif /* !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */ /* ------------------------------------------------------------------------ */ @@ -12643,9 +13455,9 @@ const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) static const GLubyte* _glewString[] = { (const GLubyte*)NULL, - (const GLubyte*)"1.9.0", + (const GLubyte*)"1.10.0", (const GLubyte*)"1", - (const GLubyte*)"9", + (const GLubyte*)"10", (const GLubyte*)"0" }; const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; @@ -12660,7 +13472,7 @@ GLboolean glewExperimental = GL_FALSE; #if defined(_WIN32) extern GLenum GLEWAPIENTRY wglewContextInit (void); -#elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) +#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) extern GLenum GLEWAPIENTRY glxewContextInit (void); #endif /* _WIN32 */ @@ -12671,7 +13483,7 @@ GLenum GLEWAPIENTRY glewInit (void) if ( r != 0 ) return r; #if defined(_WIN32) return wglewContextInit(); -#elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ +#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ return glxewContextInit(); #else return r; @@ -12798,6 +13610,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) ret = GLEW_VERSION_4_3; continue; } +#endif +#ifdef GL_VERSION_4_4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_4", 3)) + { + ret = GLEW_VERSION_4_4; + continue; + } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) @@ -12861,6 +13680,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_AMD_interleaved_elements + if (_glewStrSame3(&pos, &len, (const GLubyte*)"interleaved_elements", 20)) + { + ret = GLEW_AMD_interleaved_elements; + continue; + } +#endif #ifdef GL_AMD_multi_draw_indirect if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) { @@ -12917,6 +13743,20 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_AMD_shader_trinary_minmax + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_trinary_minmax", 21)) + { + ret = GLEW_AMD_shader_trinary_minmax; + continue; + } +#endif +#ifdef GL_AMD_sparse_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sparse_texture", 14)) + { + ret = GLEW_AMD_sparse_texture; + continue; + } +#endif #ifdef GL_AMD_stencil_operation_extended if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_operation_extended", 26)) { @@ -12958,6 +13798,93 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) ret = GLEW_AMD_vertex_shader_viewport_index; continue; } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ANGLE_", 6)) + { +#ifdef GL_ANGLE_depth_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) + { + ret = GLEW_ANGLE_depth_texture; + continue; + } +#endif +#ifdef GL_ANGLE_framebuffer_blit + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) + { + ret = GLEW_ANGLE_framebuffer_blit; + continue; + } +#endif +#ifdef GL_ANGLE_framebuffer_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) + { + ret = GLEW_ANGLE_framebuffer_multisample; + continue; + } +#endif +#ifdef GL_ANGLE_instanced_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) + { + ret = GLEW_ANGLE_instanced_arrays; + continue; + } +#endif +#ifdef GL_ANGLE_pack_reverse_row_order + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_reverse_row_order", 22)) + { + ret = GLEW_ANGLE_pack_reverse_row_order; + continue; + } +#endif +#ifdef GL_ANGLE_program_binary + if (_glewStrSame3(&pos, &len, (const GLubyte*)"program_binary", 14)) + { + ret = GLEW_ANGLE_program_binary; + continue; + } +#endif +#ifdef GL_ANGLE_texture_compression_dxt1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) + { + ret = GLEW_ANGLE_texture_compression_dxt1; + continue; + } +#endif +#ifdef GL_ANGLE_texture_compression_dxt3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt3", 24)) + { + ret = GLEW_ANGLE_texture_compression_dxt3; + continue; + } +#endif +#ifdef GL_ANGLE_texture_compression_dxt5 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt5", 24)) + { + ret = GLEW_ANGLE_texture_compression_dxt5; + continue; + } +#endif +#ifdef GL_ANGLE_texture_usage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_usage", 13)) + { + ret = GLEW_ANGLE_texture_usage; + continue; + } +#endif +#ifdef GL_ANGLE_timer_query + if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) + { + ret = GLEW_ANGLE_timer_query; + continue; + } +#endif +#ifdef GL_ANGLE_translated_shader_source + if (_glewStrSame3(&pos, &len, (const GLubyte*)"translated_shader_source", 24)) + { + ret = GLEW_ANGLE_translated_shader_source; + continue; + } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"APPLE_", 6)) @@ -13112,6 +14039,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_bindless_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_texture", 16)) + { + ret = GLEW_ARB_bindless_texture; + continue; + } +#endif #ifdef GL_ARB_blend_func_extended if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_extended", 19)) { @@ -13119,6 +14053,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_buffer_storage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_storage", 14)) + { + ret = GLEW_ARB_buffer_storage; + continue; + } +#endif #ifdef GL_ARB_cl_event if (_glewStrSame3(&pos, &len, (const GLubyte*)"cl_event", 8)) { @@ -13133,6 +14074,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_clear_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"clear_texture", 13)) + { + ret = GLEW_ARB_clear_texture; + continue; + } +#endif #ifdef GL_ARB_color_buffer_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_buffer_float", 18)) { @@ -13161,6 +14109,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_compute_variable_group_size + if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_variable_group_size", 27)) + { + ret = GLEW_ARB_compute_variable_group_size; + continue; + } +#endif #ifdef GL_ARB_conservative_depth if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_depth", 18)) { @@ -13245,6 +14200,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_enhanced_layouts + if (_glewStrSame3(&pos, &len, (const GLubyte*)"enhanced_layouts", 16)) + { + ret = GLEW_ARB_enhanced_layouts; + continue; + } +#endif #ifdef GL_ARB_explicit_attrib_location if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_attrib_location", 24)) { @@ -13364,6 +14326,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_indirect_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"indirect_parameters", 19)) + { + ret = GLEW_ARB_indirect_parameters; + continue; + } +#endif #ifdef GL_ARB_instanced_arrays if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) { @@ -13413,6 +14382,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_multi_bind + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_bind", 10)) + { + ret = GLEW_ARB_multi_bind; + continue; + } +#endif #ifdef GL_ARB_multi_draw_indirect if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) { @@ -13483,6 +14459,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_query_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"query_buffer_object", 19)) + { + ret = GLEW_ARB_query_buffer_object; + continue; + } +#endif #ifdef GL_ARB_robust_buffer_access_behavior if (_glewStrSame3(&pos, &len, (const GLubyte*)"robust_buffer_access_behavior", 29)) { @@ -13532,6 +14515,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_seamless_cubemap_per_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cubemap_per_texture", 28)) + { + ret = GLEW_ARB_seamless_cubemap_per_texture; + continue; + } +#endif #ifdef GL_ARB_separate_shader_objects if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_shader_objects", 23)) { @@ -13553,6 +14543,20 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_shader_draw_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_draw_parameters", 22)) + { + ret = GLEW_ARB_shader_draw_parameters; + continue; + } +#endif +#ifdef GL_ARB_shader_group_vote + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_group_vote", 17)) + { + ret = GLEW_ARB_shader_group_vote; + continue; + } +#endif #ifdef GL_ARB_shader_image_load_store if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_load_store", 23)) { @@ -13651,6 +14655,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_sparse_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sparse_texture", 14)) + { + ret = GLEW_ARB_sparse_texture; + continue; + } +#endif #ifdef GL_ARB_stencil_texturing if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_texturing", 17)) { @@ -13777,6 +14788,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_texture_mirror_clamp_to_edge + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp_to_edge", 28)) + { + ret = GLEW_ARB_texture_mirror_clamp_to_edge; + continue; + } +#endif #ifdef GL_ARB_texture_mirrored_repeat if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) { @@ -13833,6 +14851,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_texture_stencil8 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stencil8", 16)) + { + ret = GLEW_ARB_texture_stencil8; + continue; + } +#endif #ifdef GL_ARB_texture_storage if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_storage", 15)) { @@ -13959,6 +14984,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_ARB_vertex_type_10f_11f_11f_rev + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_type_10f_11f_11f_rev", 27)) + { + ret = GLEW_ARB_vertex_type_10f_11f_11f_rev; + continue; + } +#endif #ifdef GL_ARB_vertex_type_2_10_10_10_rev if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_type_2_10_10_10_rev", 26)) { @@ -14949,6 +15981,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) } if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) { +#ifdef GL_INTEL_map_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_texture", 11)) + { + ret = GLEW_INTEL_map_texture; + continue; + } +#endif #ifdef GL_INTEL_parallel_arrays if (_glewStrSame3(&pos, &len, (const GLubyte*)"parallel_arrays", 15)) { @@ -15034,6 +16073,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) } if (_glewStrSame2(&pos, &len, (const GLubyte*)"NVX_", 4)) { +#ifdef GL_NVX_conditional_render + if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) + { + ret = GLEW_NVX_conditional_render; + continue; + } +#endif #ifdef GL_NVX_gpu_memory_info if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_memory_info", 15)) { @@ -15044,6 +16090,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) } if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) { +#ifdef GL_NV_bindless_multi_draw_indirect + if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_multi_draw_indirect", 28)) + { + ret = GLEW_NV_bindless_multi_draw_indirect; + continue; + } +#endif #ifdef GL_NV_bindless_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_texture", 16)) { @@ -15051,6 +16104,20 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_NV_blend_equation_advanced + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_advanced", 23)) + { + ret = GLEW_NV_blend_equation_advanced; + continue; + } +#endif +#ifdef GL_NV_blend_equation_advanced_coherent + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_advanced_coherent", 32)) + { + ret = GLEW_NV_blend_equation_advanced_coherent; + continue; + } +#endif #ifdef GL_NV_blend_square if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_square", 12)) { @@ -15058,6 +16125,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_NV_compute_program5 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_program5", 16)) + { + ret = GLEW_NV_compute_program5; + continue; + } +#endif #ifdef GL_NV_conditional_render if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) { @@ -15079,6 +16153,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_NV_deep_texture3D + if (_glewStrSame3(&pos, &len, (const GLubyte*)"deep_texture3D", 14)) + { + ret = GLEW_NV_deep_texture3D; + continue; + } +#endif #ifdef GL_NV_depth_buffer_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) { @@ -15100,6 +16181,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_NV_draw_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_texture", 12)) + { + ret = GLEW_NV_draw_texture; + continue; + } +#endif #ifdef GL_NV_evaluators if (_glewStrSame3(&pos, &len, (const GLubyte*)"evaluators", 10)) { @@ -15198,6 +16286,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_NV_gpu_program5_mem_extended + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program5_mem_extended", 25)) + { + ret = GLEW_NV_gpu_program5_mem_extended; + continue; + } +#endif #ifdef GL_NV_gpu_program_fp64 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_fp64", 16)) { @@ -15317,6 +16412,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_NV_shader_atomic_counters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_counters", 22)) + { + ret = GLEW_NV_shader_atomic_counters; + continue; + } +#endif #ifdef GL_NV_shader_atomic_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_float", 19)) { @@ -15331,6 +16433,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) continue; } #endif +#ifdef GL_NV_shader_storage_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_storage_buffer_object", 28)) + { + ret = GLEW_NV_shader_storage_buffer_object; + continue; + } +#endif #ifdef GL_NV_tessellation_program5 if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_program5", 21)) { @@ -15588,6 +16697,27 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name) } if (_glewStrSame2(&pos, &len, (const GLubyte*)"REGAL_", 6)) { +#ifdef GL_REGAL_ES1_0_compatibility + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES1_0_compatibility", 19)) + { + ret = GLEW_REGAL_ES1_0_compatibility; + continue; + } +#endif +#ifdef GL_REGAL_ES1_1_compatibility + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES1_1_compatibility", 19)) + { + ret = GLEW_REGAL_ES1_1_compatibility; + continue; + } +#endif +#ifdef GL_REGAL_enable + if (_glewStrSame3(&pos, &len, (const GLubyte*)"enable", 6)) + { + ret = GLEW_REGAL_enable; + continue; + } +#endif #ifdef GL_REGAL_error_string if (_glewStrSame3(&pos, &len, (const GLubyte*)"error_string", 12)) { @@ -16204,6 +17334,20 @@ GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) ret = WGLEW_ARB_render_texture; continue; } +#endif +#ifdef WGL_ARB_robustness_application_isolation + if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) + { + ret = WGLEW_ARB_robustness_application_isolation; + continue; + } +#endif +#ifdef WGL_ARB_robustness_share_group_isolation + if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) + { + ret = WGLEW_ARB_robustness_share_group_isolation; + continue; + } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) @@ -16472,7 +17616,7 @@ GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) return ret; } -#elif !defined(__ANDROID__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) #if defined(GLEW_MX) GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) @@ -16623,6 +17767,13 @@ GLboolean glxewIsSupported (const char* name) } if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) { +#ifdef GLX_EXT_buffer_age + if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_age", 10)) + { + ret = GLXEW_EXT_buffer_age; + continue; + } +#endif #ifdef GLX_EXT_create_context_es2_profile if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es2_profile", 26)) { @@ -16807,10 +17958,10 @@ GLboolean glxewIsSupported (const char* name) continue; } #endif -#ifdef GLX_NV_video_out - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_out", 9)) +#ifdef GLX_NV_video_output + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) { - ret = GLXEW_NV_video_out; + ret = GLXEW_NV_video_output; continue; } #endif diff --git a/Externals/GLew/src/glewinfo.c b/Externals/GLew/src/glewinfo.c index ac0434bc95..7634a3ff0a 100644 --- a/Externals/GLew/src/glewinfo.c +++ b/Externals/GLew/src/glewinfo.c @@ -539,6 +539,15 @@ static void _glewInfo_GL_VERSION_4_3 (void) #endif /* GL_VERSION_4_3 */ +#ifdef GL_VERSION_4_4 + +static void _glewInfo_GL_VERSION_4_4 (void) +{ + glewPrintExt("GL_VERSION_4_4", GLEW_VERSION_4_4, GLEW_VERSION_4_4, GLEW_VERSION_4_4); +} + +#endif /* GL_VERSION_4_4 */ + #ifdef GL_3DFX_multisample static void _glewInfo_GL_3DFX_multisample (void) @@ -623,6 +632,17 @@ static void _glewInfo_GL_AMD_draw_buffers_blend (void) #endif /* GL_AMD_draw_buffers_blend */ +#ifdef GL_AMD_interleaved_elements + +static void _glewInfo_GL_AMD_interleaved_elements (void) +{ + glewPrintExt("GL_AMD_interleaved_elements", GLEW_AMD_interleaved_elements, glewIsSupported("GL_AMD_interleaved_elements"), glewGetExtension("GL_AMD_interleaved_elements")); + + glewInfoFunc("glVertexAttribParameteriAMD", glVertexAttribParameteriAMD == NULL); +} + +#endif /* GL_AMD_interleaved_elements */ + #ifdef GL_AMD_multi_draw_indirect static void _glewInfo_GL_AMD_multi_draw_indirect (void) @@ -716,6 +736,27 @@ static void _glewInfo_GL_AMD_shader_stencil_export (void) #endif /* GL_AMD_shader_stencil_export */ +#ifdef GL_AMD_shader_trinary_minmax + +static void _glewInfo_GL_AMD_shader_trinary_minmax (void) +{ + glewPrintExt("GL_AMD_shader_trinary_minmax", GLEW_AMD_shader_trinary_minmax, glewIsSupported("GL_AMD_shader_trinary_minmax"), glewGetExtension("GL_AMD_shader_trinary_minmax")); +} + +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifdef GL_AMD_sparse_texture + +static void _glewInfo_GL_AMD_sparse_texture (void) +{ + glewPrintExt("GL_AMD_sparse_texture", GLEW_AMD_sparse_texture, glewIsSupported("GL_AMD_sparse_texture"), glewGetExtension("GL_AMD_sparse_texture")); + + glewInfoFunc("glTexStorageSparseAMD", glTexStorageSparseAMD == NULL); + glewInfoFunc("glTextureStorageSparseAMD", glTextureStorageSparseAMD == NULL); +} + +#endif /* GL_AMD_sparse_texture */ + #ifdef GL_AMD_stencil_operation_extended static void _glewInfo_GL_AMD_stencil_operation_extended (void) @@ -775,6 +816,136 @@ static void _glewInfo_GL_AMD_vertex_shader_viewport_index (void) #endif /* GL_AMD_vertex_shader_viewport_index */ +#ifdef GL_ANGLE_depth_texture + +static void _glewInfo_GL_ANGLE_depth_texture (void) +{ + glewPrintExt("GL_ANGLE_depth_texture", GLEW_ANGLE_depth_texture, glewIsSupported("GL_ANGLE_depth_texture"), glewGetExtension("GL_ANGLE_depth_texture")); +} + +#endif /* GL_ANGLE_depth_texture */ + +#ifdef GL_ANGLE_framebuffer_blit + +static void _glewInfo_GL_ANGLE_framebuffer_blit (void) +{ + glewPrintExt("GL_ANGLE_framebuffer_blit", GLEW_ANGLE_framebuffer_blit, glewIsSupported("GL_ANGLE_framebuffer_blit"), glewGetExtension("GL_ANGLE_framebuffer_blit")); + + glewInfoFunc("glBlitFramebufferANGLE", glBlitFramebufferANGLE == NULL); +} + +#endif /* GL_ANGLE_framebuffer_blit */ + +#ifdef GL_ANGLE_framebuffer_multisample + +static void _glewInfo_GL_ANGLE_framebuffer_multisample (void) +{ + glewPrintExt("GL_ANGLE_framebuffer_multisample", GLEW_ANGLE_framebuffer_multisample, glewIsSupported("GL_ANGLE_framebuffer_multisample"), glewGetExtension("GL_ANGLE_framebuffer_multisample")); + + glewInfoFunc("glRenderbufferStorageMultisampleANGLE", glRenderbufferStorageMultisampleANGLE == NULL); +} + +#endif /* GL_ANGLE_framebuffer_multisample */ + +#ifdef GL_ANGLE_instanced_arrays + +static void _glewInfo_GL_ANGLE_instanced_arrays (void) +{ + glewPrintExt("GL_ANGLE_instanced_arrays", GLEW_ANGLE_instanced_arrays, glewIsSupported("GL_ANGLE_instanced_arrays"), glewGetExtension("GL_ANGLE_instanced_arrays")); + + glewInfoFunc("glDrawArraysInstancedANGLE", glDrawArraysInstancedANGLE == NULL); + glewInfoFunc("glDrawElementsInstancedANGLE", glDrawElementsInstancedANGLE == NULL); + glewInfoFunc("glVertexAttribDivisorANGLE", glVertexAttribDivisorANGLE == NULL); +} + +#endif /* GL_ANGLE_instanced_arrays */ + +#ifdef GL_ANGLE_pack_reverse_row_order + +static void _glewInfo_GL_ANGLE_pack_reverse_row_order (void) +{ + glewPrintExt("GL_ANGLE_pack_reverse_row_order", GLEW_ANGLE_pack_reverse_row_order, glewIsSupported("GL_ANGLE_pack_reverse_row_order"), glewGetExtension("GL_ANGLE_pack_reverse_row_order")); +} + +#endif /* GL_ANGLE_pack_reverse_row_order */ + +#ifdef GL_ANGLE_program_binary + +static void _glewInfo_GL_ANGLE_program_binary (void) +{ + glewPrintExt("GL_ANGLE_program_binary", GLEW_ANGLE_program_binary, glewIsSupported("GL_ANGLE_program_binary"), glewGetExtension("GL_ANGLE_program_binary")); +} + +#endif /* GL_ANGLE_program_binary */ + +#ifdef GL_ANGLE_texture_compression_dxt1 + +static void _glewInfo_GL_ANGLE_texture_compression_dxt1 (void) +{ + glewPrintExt("GL_ANGLE_texture_compression_dxt1", GLEW_ANGLE_texture_compression_dxt1, glewIsSupported("GL_ANGLE_texture_compression_dxt1"), glewGetExtension("GL_ANGLE_texture_compression_dxt1")); +} + +#endif /* GL_ANGLE_texture_compression_dxt1 */ + +#ifdef GL_ANGLE_texture_compression_dxt3 + +static void _glewInfo_GL_ANGLE_texture_compression_dxt3 (void) +{ + glewPrintExt("GL_ANGLE_texture_compression_dxt3", GLEW_ANGLE_texture_compression_dxt3, glewIsSupported("GL_ANGLE_texture_compression_dxt3"), glewGetExtension("GL_ANGLE_texture_compression_dxt3")); +} + +#endif /* GL_ANGLE_texture_compression_dxt3 */ + +#ifdef GL_ANGLE_texture_compression_dxt5 + +static void _glewInfo_GL_ANGLE_texture_compression_dxt5 (void) +{ + glewPrintExt("GL_ANGLE_texture_compression_dxt5", GLEW_ANGLE_texture_compression_dxt5, glewIsSupported("GL_ANGLE_texture_compression_dxt5"), glewGetExtension("GL_ANGLE_texture_compression_dxt5")); +} + +#endif /* GL_ANGLE_texture_compression_dxt5 */ + +#ifdef GL_ANGLE_texture_usage + +static void _glewInfo_GL_ANGLE_texture_usage (void) +{ + glewPrintExt("GL_ANGLE_texture_usage", GLEW_ANGLE_texture_usage, glewIsSupported("GL_ANGLE_texture_usage"), glewGetExtension("GL_ANGLE_texture_usage")); +} + +#endif /* GL_ANGLE_texture_usage */ + +#ifdef GL_ANGLE_timer_query + +static void _glewInfo_GL_ANGLE_timer_query (void) +{ + glewPrintExt("GL_ANGLE_timer_query", GLEW_ANGLE_timer_query, glewIsSupported("GL_ANGLE_timer_query"), glewGetExtension("GL_ANGLE_timer_query")); + + glewInfoFunc("glBeginQueryANGLE", glBeginQueryANGLE == NULL); + glewInfoFunc("glDeleteQueriesANGLE", glDeleteQueriesANGLE == NULL); + glewInfoFunc("glEndQueryANGLE", glEndQueryANGLE == NULL); + glewInfoFunc("glGenQueriesANGLE", glGenQueriesANGLE == NULL); + glewInfoFunc("glGetQueryObjecti64vANGLE", glGetQueryObjecti64vANGLE == NULL); + glewInfoFunc("glGetQueryObjectivANGLE", glGetQueryObjectivANGLE == NULL); + glewInfoFunc("glGetQueryObjectui64vANGLE", glGetQueryObjectui64vANGLE == NULL); + glewInfoFunc("glGetQueryObjectuivANGLE", glGetQueryObjectuivANGLE == NULL); + glewInfoFunc("glGetQueryivANGLE", glGetQueryivANGLE == NULL); + glewInfoFunc("glIsQueryANGLE", glIsQueryANGLE == NULL); + glewInfoFunc("glQueryCounterANGLE", glQueryCounterANGLE == NULL); +} + +#endif /* GL_ANGLE_timer_query */ + +#ifdef GL_ANGLE_translated_shader_source + +static void _glewInfo_GL_ANGLE_translated_shader_source (void) +{ + glewPrintExt("GL_ANGLE_translated_shader_source", GLEW_ANGLE_translated_shader_source, glewIsSupported("GL_ANGLE_translated_shader_source"), glewGetExtension("GL_ANGLE_translated_shader_source")); + + glewInfoFunc("glGetTranslatedShaderSourceANGLE", glGetTranslatedShaderSourceANGLE == NULL); +} + +#endif /* GL_ANGLE_translated_shader_source */ + #ifdef GL_APPLE_aux_depth_stencil static void _glewInfo_GL_APPLE_aux_depth_stencil (void) @@ -1016,6 +1187,32 @@ static void _glewInfo_GL_ARB_base_instance (void) #endif /* GL_ARB_base_instance */ +#ifdef GL_ARB_bindless_texture + +static void _glewInfo_GL_ARB_bindless_texture (void) +{ + glewPrintExt("GL_ARB_bindless_texture", GLEW_ARB_bindless_texture, glewIsSupported("GL_ARB_bindless_texture"), glewGetExtension("GL_ARB_bindless_texture")); + + glewInfoFunc("glGetImageHandleARB", glGetImageHandleARB == NULL); + glewInfoFunc("glGetTextureHandleARB", glGetTextureHandleARB == NULL); + glewInfoFunc("glGetTextureSamplerHandleARB", glGetTextureSamplerHandleARB == NULL); + glewInfoFunc("glGetVertexAttribLui64vARB", glGetVertexAttribLui64vARB == NULL); + glewInfoFunc("glIsImageHandleResidentARB", glIsImageHandleResidentARB == NULL); + glewInfoFunc("glIsTextureHandleResidentARB", glIsTextureHandleResidentARB == NULL); + glewInfoFunc("glMakeImageHandleNonResidentARB", glMakeImageHandleNonResidentARB == NULL); + glewInfoFunc("glMakeImageHandleResidentARB", glMakeImageHandleResidentARB == NULL); + glewInfoFunc("glMakeTextureHandleNonResidentARB", glMakeTextureHandleNonResidentARB == NULL); + glewInfoFunc("glMakeTextureHandleResidentARB", glMakeTextureHandleResidentARB == NULL); + glewInfoFunc("glProgramUniformHandleui64ARB", glProgramUniformHandleui64ARB == NULL); + glewInfoFunc("glProgramUniformHandleui64vARB", glProgramUniformHandleui64vARB == NULL); + glewInfoFunc("glUniformHandleui64ARB", glUniformHandleui64ARB == NULL); + glewInfoFunc("glUniformHandleui64vARB", glUniformHandleui64vARB == NULL); + glewInfoFunc("glVertexAttribL1ui64ARB", glVertexAttribL1ui64ARB == NULL); + glewInfoFunc("glVertexAttribL1ui64vARB", glVertexAttribL1ui64vARB == NULL); +} + +#endif /* GL_ARB_bindless_texture */ + #ifdef GL_ARB_blend_func_extended static void _glewInfo_GL_ARB_blend_func_extended (void) @@ -1028,6 +1225,18 @@ static void _glewInfo_GL_ARB_blend_func_extended (void) #endif /* GL_ARB_blend_func_extended */ +#ifdef GL_ARB_buffer_storage + +static void _glewInfo_GL_ARB_buffer_storage (void) +{ + glewPrintExt("GL_ARB_buffer_storage", GLEW_ARB_buffer_storage, glewIsSupported("GL_ARB_buffer_storage"), glewGetExtension("GL_ARB_buffer_storage")); + + glewInfoFunc("glBufferStorage", glBufferStorage == NULL); + glewInfoFunc("glNamedBufferStorageEXT", glNamedBufferStorageEXT == NULL); +} + +#endif /* GL_ARB_buffer_storage */ + #ifdef GL_ARB_cl_event static void _glewInfo_GL_ARB_cl_event (void) @@ -1053,6 +1262,18 @@ static void _glewInfo_GL_ARB_clear_buffer_object (void) #endif /* GL_ARB_clear_buffer_object */ +#ifdef GL_ARB_clear_texture + +static void _glewInfo_GL_ARB_clear_texture (void) +{ + glewPrintExt("GL_ARB_clear_texture", GLEW_ARB_clear_texture, glewIsSupported("GL_ARB_clear_texture"), glewGetExtension("GL_ARB_clear_texture")); + + glewInfoFunc("glClearTexImage", glClearTexImage == NULL); + glewInfoFunc("glClearTexSubImage", glClearTexSubImage == NULL); +} + +#endif /* GL_ARB_clear_texture */ + #ifdef GL_ARB_color_buffer_float static void _glewInfo_GL_ARB_color_buffer_float (void) @@ -1094,6 +1315,17 @@ static void _glewInfo_GL_ARB_compute_shader (void) #endif /* GL_ARB_compute_shader */ +#ifdef GL_ARB_compute_variable_group_size + +static void _glewInfo_GL_ARB_compute_variable_group_size (void) +{ + glewPrintExt("GL_ARB_compute_variable_group_size", GLEW_ARB_compute_variable_group_size, glewIsSupported("GL_ARB_compute_variable_group_size"), glewGetExtension("GL_ARB_compute_variable_group_size")); + + glewInfoFunc("glDispatchComputeGroupSizeARB", glDispatchComputeGroupSizeARB == NULL); +} + +#endif /* GL_ARB_compute_variable_group_size */ + #ifdef GL_ARB_conservative_depth static void _glewInfo_GL_ARB_conservative_depth (void) @@ -1226,6 +1458,15 @@ static void _glewInfo_GL_ARB_draw_instanced (void) #endif /* GL_ARB_draw_instanced */ +#ifdef GL_ARB_enhanced_layouts + +static void _glewInfo_GL_ARB_enhanced_layouts (void) +{ + glewPrintExt("GL_ARB_enhanced_layouts", GLEW_ARB_enhanced_layouts, glewIsSupported("GL_ARB_enhanced_layouts"), glewGetExtension("GL_ARB_enhanced_layouts")); +} + +#endif /* GL_ARB_enhanced_layouts */ + #ifdef GL_ARB_explicit_attrib_location static void _glewInfo_GL_ARB_explicit_attrib_location (void) @@ -1467,6 +1708,18 @@ static void _glewInfo_GL_ARB_imaging (void) #endif /* GL_ARB_imaging */ +#ifdef GL_ARB_indirect_parameters + +static void _glewInfo_GL_ARB_indirect_parameters (void) +{ + glewPrintExt("GL_ARB_indirect_parameters", GLEW_ARB_indirect_parameters, glewIsSupported("GL_ARB_indirect_parameters"), glewGetExtension("GL_ARB_indirect_parameters")); + + glewInfoFunc("glMultiDrawArraysIndirectCountARB", glMultiDrawArraysIndirectCountARB == NULL); + glewInfoFunc("glMultiDrawElementsIndirectCountARB", glMultiDrawElementsIndirectCountARB == NULL); +} + +#endif /* GL_ARB_indirect_parameters */ + #ifdef GL_ARB_instanced_arrays static void _glewInfo_GL_ARB_instanced_arrays (void) @@ -1554,6 +1807,22 @@ static void _glewInfo_GL_ARB_matrix_palette (void) #endif /* GL_ARB_matrix_palette */ +#ifdef GL_ARB_multi_bind + +static void _glewInfo_GL_ARB_multi_bind (void) +{ + glewPrintExt("GL_ARB_multi_bind", GLEW_ARB_multi_bind, glewIsSupported("GL_ARB_multi_bind"), glewGetExtension("GL_ARB_multi_bind")); + + glewInfoFunc("glBindBuffersBase", glBindBuffersBase == NULL); + glewInfoFunc("glBindBuffersRange", glBindBuffersRange == NULL); + glewInfoFunc("glBindImageTextures", glBindImageTextures == NULL); + glewInfoFunc("glBindSamplers", glBindSamplers == NULL); + glewInfoFunc("glBindTextures", glBindTextures == NULL); + glewInfoFunc("glBindVertexBuffers", glBindVertexBuffers == NULL); +} + +#endif /* GL_ARB_multi_bind */ + #ifdef GL_ARB_multi_draw_indirect static void _glewInfo_GL_ARB_multi_draw_indirect (void) @@ -1705,6 +1974,15 @@ static void _glewInfo_GL_ARB_provoking_vertex (void) #endif /* GL_ARB_provoking_vertex */ +#ifdef GL_ARB_query_buffer_object + +static void _glewInfo_GL_ARB_query_buffer_object (void) +{ + glewPrintExt("GL_ARB_query_buffer_object", GLEW_ARB_query_buffer_object, glewIsSupported("GL_ARB_query_buffer_object"), glewGetExtension("GL_ARB_query_buffer_object")); +} + +#endif /* GL_ARB_query_buffer_object */ + #ifdef GL_ARB_robust_buffer_access_behavior static void _glewInfo_GL_ARB_robust_buffer_access_behavior (void) @@ -1806,6 +2084,15 @@ static void _glewInfo_GL_ARB_seamless_cube_map (void) #endif /* GL_ARB_seamless_cube_map */ +#ifdef GL_ARB_seamless_cubemap_per_texture + +static void _glewInfo_GL_ARB_seamless_cubemap_per_texture (void) +{ + glewPrintExt("GL_ARB_seamless_cubemap_per_texture", GLEW_ARB_seamless_cubemap_per_texture, glewIsSupported("GL_ARB_seamless_cubemap_per_texture"), glewGetExtension("GL_ARB_seamless_cubemap_per_texture")); +} + +#endif /* GL_ARB_seamless_cubemap_per_texture */ + #ifdef GL_ARB_separate_shader_objects static void _glewInfo_GL_ARB_separate_shader_objects (void) @@ -1896,6 +2183,24 @@ static void _glewInfo_GL_ARB_shader_bit_encoding (void) #endif /* GL_ARB_shader_bit_encoding */ +#ifdef GL_ARB_shader_draw_parameters + +static void _glewInfo_GL_ARB_shader_draw_parameters (void) +{ + glewPrintExt("GL_ARB_shader_draw_parameters", GLEW_ARB_shader_draw_parameters, glewIsSupported("GL_ARB_shader_draw_parameters"), glewGetExtension("GL_ARB_shader_draw_parameters")); +} + +#endif /* GL_ARB_shader_draw_parameters */ + +#ifdef GL_ARB_shader_group_vote + +static void _glewInfo_GL_ARB_shader_group_vote (void) +{ + glewPrintExt("GL_ARB_shader_group_vote", GLEW_ARB_shader_group_vote, glewIsSupported("GL_ARB_shader_group_vote"), glewGetExtension("GL_ARB_shader_group_vote")); +} + +#endif /* GL_ARB_shader_group_vote */ + #ifdef GL_ARB_shader_image_load_store static void _glewInfo_GL_ARB_shader_image_load_store (void) @@ -2083,6 +2388,18 @@ static void _glewInfo_GL_ARB_shadow_ambient (void) #endif /* GL_ARB_shadow_ambient */ +#ifdef GL_ARB_sparse_texture + +static void _glewInfo_GL_ARB_sparse_texture (void) +{ + glewPrintExt("GL_ARB_sparse_texture", GLEW_ARB_sparse_texture, glewIsSupported("GL_ARB_sparse_texture"), glewGetExtension("GL_ARB_sparse_texture")); + + glewInfoFunc("glTexPageCommitmentARB", glTexPageCommitmentARB == NULL); + glewInfoFunc("glTexturePageCommitmentEXT", glTexturePageCommitmentEXT == NULL); +} + +#endif /* GL_ARB_sparse_texture */ + #ifdef GL_ARB_stencil_texturing static void _glewInfo_GL_ARB_stencil_texturing (void) @@ -2269,6 +2586,15 @@ static void _glewInfo_GL_ARB_texture_gather (void) #endif /* GL_ARB_texture_gather */ +#ifdef GL_ARB_texture_mirror_clamp_to_edge + +static void _glewInfo_GL_ARB_texture_mirror_clamp_to_edge (void) +{ + glewPrintExt("GL_ARB_texture_mirror_clamp_to_edge", GLEW_ARB_texture_mirror_clamp_to_edge, glewIsSupported("GL_ARB_texture_mirror_clamp_to_edge"), glewGetExtension("GL_ARB_texture_mirror_clamp_to_edge")); +} + +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + #ifdef GL_ARB_texture_mirrored_repeat static void _glewInfo_GL_ARB_texture_mirrored_repeat (void) @@ -2346,6 +2672,15 @@ static void _glewInfo_GL_ARB_texture_rgb10_a2ui (void) #endif /* GL_ARB_texture_rgb10_a2ui */ +#ifdef GL_ARB_texture_stencil8 + +static void _glewInfo_GL_ARB_texture_stencil8 (void) +{ + glewPrintExt("GL_ARB_texture_stencil8", GLEW_ARB_texture_stencil8, glewIsSupported("GL_ARB_texture_stencil8"), glewGetExtension("GL_ARB_texture_stencil8")); +} + +#endif /* GL_ARB_texture_stencil8 */ + #ifdef GL_ARB_texture_storage static void _glewInfo_GL_ARB_texture_storage (void) @@ -2671,6 +3006,15 @@ static void _glewInfo_GL_ARB_vertex_shader (void) #endif /* GL_ARB_vertex_shader */ +#ifdef GL_ARB_vertex_type_10f_11f_11f_rev + +static void _glewInfo_GL_ARB_vertex_type_10f_11f_11f_rev (void) +{ + glewPrintExt("GL_ARB_vertex_type_10f_11f_11f_rev", GLEW_ARB_vertex_type_10f_11f_11f_rev, glewIsSupported("GL_ARB_vertex_type_10f_11f_11f_rev"), glewGetExtension("GL_ARB_vertex_type_10f_11f_11f_rev")); +} + +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + #ifdef GL_ARB_vertex_type_2_10_10_10_rev static void _glewInfo_GL_ARB_vertex_type_2_10_10_10_rev (void) @@ -3450,55 +3794,38 @@ static void _glewInfo_GL_EXT_direct_state_access (void) glewInfoFunc("glNamedRenderbufferStorageEXT", glNamedRenderbufferStorageEXT == NULL); glewInfoFunc("glNamedRenderbufferStorageMultisampleCoverageEXT", glNamedRenderbufferStorageMultisampleCoverageEXT == NULL); glewInfoFunc("glNamedRenderbufferStorageMultisampleEXT", glNamedRenderbufferStorageMultisampleEXT == NULL); - glewInfoFunc("glProgramUniform1dEXT", glProgramUniform1dEXT == NULL); - glewInfoFunc("glProgramUniform1dvEXT", glProgramUniform1dvEXT == NULL); glewInfoFunc("glProgramUniform1fEXT", glProgramUniform1fEXT == NULL); glewInfoFunc("glProgramUniform1fvEXT", glProgramUniform1fvEXT == NULL); glewInfoFunc("glProgramUniform1iEXT", glProgramUniform1iEXT == NULL); glewInfoFunc("glProgramUniform1ivEXT", glProgramUniform1ivEXT == NULL); glewInfoFunc("glProgramUniform1uiEXT", glProgramUniform1uiEXT == NULL); glewInfoFunc("glProgramUniform1uivEXT", glProgramUniform1uivEXT == NULL); - glewInfoFunc("glProgramUniform2dEXT", glProgramUniform2dEXT == NULL); - glewInfoFunc("glProgramUniform2dvEXT", glProgramUniform2dvEXT == NULL); glewInfoFunc("glProgramUniform2fEXT", glProgramUniform2fEXT == NULL); glewInfoFunc("glProgramUniform2fvEXT", glProgramUniform2fvEXT == NULL); glewInfoFunc("glProgramUniform2iEXT", glProgramUniform2iEXT == NULL); glewInfoFunc("glProgramUniform2ivEXT", glProgramUniform2ivEXT == NULL); glewInfoFunc("glProgramUniform2uiEXT", glProgramUniform2uiEXT == NULL); glewInfoFunc("glProgramUniform2uivEXT", glProgramUniform2uivEXT == NULL); - glewInfoFunc("glProgramUniform3dEXT", glProgramUniform3dEXT == NULL); - glewInfoFunc("glProgramUniform3dvEXT", glProgramUniform3dvEXT == NULL); glewInfoFunc("glProgramUniform3fEXT", glProgramUniform3fEXT == NULL); glewInfoFunc("glProgramUniform3fvEXT", glProgramUniform3fvEXT == NULL); glewInfoFunc("glProgramUniform3iEXT", glProgramUniform3iEXT == NULL); glewInfoFunc("glProgramUniform3ivEXT", glProgramUniform3ivEXT == NULL); glewInfoFunc("glProgramUniform3uiEXT", glProgramUniform3uiEXT == NULL); glewInfoFunc("glProgramUniform3uivEXT", glProgramUniform3uivEXT == NULL); - glewInfoFunc("glProgramUniform4dEXT", glProgramUniform4dEXT == NULL); - glewInfoFunc("glProgramUniform4dvEXT", glProgramUniform4dvEXT == NULL); glewInfoFunc("glProgramUniform4fEXT", glProgramUniform4fEXT == NULL); glewInfoFunc("glProgramUniform4fvEXT", glProgramUniform4fvEXT == NULL); glewInfoFunc("glProgramUniform4iEXT", glProgramUniform4iEXT == NULL); glewInfoFunc("glProgramUniform4ivEXT", glProgramUniform4ivEXT == NULL); glewInfoFunc("glProgramUniform4uiEXT", glProgramUniform4uiEXT == NULL); glewInfoFunc("glProgramUniform4uivEXT", glProgramUniform4uivEXT == NULL); - glewInfoFunc("glProgramUniformMatrix2dvEXT", glProgramUniformMatrix2dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix2fvEXT", glProgramUniformMatrix2fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix2x3dvEXT", glProgramUniformMatrix2x3dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix2x3fvEXT", glProgramUniformMatrix2x3fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix2x4dvEXT", glProgramUniformMatrix2x4dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix2x4fvEXT", glProgramUniformMatrix2x4fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix3dvEXT", glProgramUniformMatrix3dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix3fvEXT", glProgramUniformMatrix3fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix3x2dvEXT", glProgramUniformMatrix3x2dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix3x2fvEXT", glProgramUniformMatrix3x2fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix3x4dvEXT", glProgramUniformMatrix3x4dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix3x4fvEXT", glProgramUniformMatrix3x4fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix4dvEXT", glProgramUniformMatrix4dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix4fvEXT", glProgramUniformMatrix4fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix4x2dvEXT", glProgramUniformMatrix4x2dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix4x2fvEXT", glProgramUniformMatrix4x2fvEXT == NULL); - glewInfoFunc("glProgramUniformMatrix4x3dvEXT", glProgramUniformMatrix4x3dvEXT == NULL); glewInfoFunc("glProgramUniformMatrix4x3fvEXT", glProgramUniformMatrix4x3fvEXT == NULL); glewInfoFunc("glPushClientAttribDefaultEXT", glPushClientAttribDefaultEXT == NULL); glewInfoFunc("glTextureBufferEXT", glTextureBufferEXT == NULL); @@ -4664,6 +4991,19 @@ static void _glewInfo_GL_INGR_interlace_read (void) #endif /* GL_INGR_interlace_read */ +#ifdef GL_INTEL_map_texture + +static void _glewInfo_GL_INTEL_map_texture (void) +{ + glewPrintExt("GL_INTEL_map_texture", GLEW_INTEL_map_texture, glewIsSupported("GL_INTEL_map_texture"), glewGetExtension("GL_INTEL_map_texture")); + + glewInfoFunc("glMapTexture2DINTEL", glMapTexture2DINTEL == NULL); + glewInfoFunc("glSyncTextureINTEL", glSyncTextureINTEL == NULL); + glewInfoFunc("glUnmapTexture2DINTEL", glUnmapTexture2DINTEL == NULL); +} + +#endif /* GL_INTEL_map_texture */ + #ifdef GL_INTEL_parallel_arrays static void _glewInfo_GL_INTEL_parallel_arrays (void) @@ -4702,9 +5042,9 @@ static void _glewInfo_GL_KHR_debug (void) glewInfoFunc("glGetDebugMessageLog", glGetDebugMessageLog == NULL); glewInfoFunc("glGetObjectLabel", glGetObjectLabel == NULL); glewInfoFunc("glGetObjectPtrLabel", glGetObjectPtrLabel == NULL); - glewInfoFunc("glGetPointerv", glGetPointerv == NULL); glewInfoFunc("glObjectLabel", glObjectLabel == NULL); glewInfoFunc("glObjectPtrLabel", glObjectPtrLabel == NULL); + glewInfoFunc("glPopDebugGroup", glPopDebugGroup == NULL); glewInfoFunc("glPushDebugGroup", glPushDebugGroup == NULL); } @@ -4806,6 +5146,18 @@ static void _glewInfo_GL_MESA_ycbcr_texture (void) #endif /* GL_MESA_ycbcr_texture */ +#ifdef GL_NVX_conditional_render + +static void _glewInfo_GL_NVX_conditional_render (void) +{ + glewPrintExt("GL_NVX_conditional_render", GLEW_NVX_conditional_render, glewIsSupported("GL_NVX_conditional_render"), glewGetExtension("GL_NVX_conditional_render")); + + glewInfoFunc("glBeginConditionalRenderNVX", glBeginConditionalRenderNVX == NULL); + glewInfoFunc("glEndConditionalRenderNVX", glEndConditionalRenderNVX == NULL); +} + +#endif /* GL_NVX_conditional_render */ + #ifdef GL_NVX_gpu_memory_info static void _glewInfo_GL_NVX_gpu_memory_info (void) @@ -4815,6 +5167,18 @@ static void _glewInfo_GL_NVX_gpu_memory_info (void) #endif /* GL_NVX_gpu_memory_info */ +#ifdef GL_NV_bindless_multi_draw_indirect + +static void _glewInfo_GL_NV_bindless_multi_draw_indirect (void) +{ + glewPrintExt("GL_NV_bindless_multi_draw_indirect", GLEW_NV_bindless_multi_draw_indirect, glewIsSupported("GL_NV_bindless_multi_draw_indirect"), glewGetExtension("GL_NV_bindless_multi_draw_indirect")); + + glewInfoFunc("glMultiDrawArraysIndirectBindlessNV", glMultiDrawArraysIndirectBindlessNV == NULL); + glewInfoFunc("glMultiDrawElementsIndirectBindlessNV", glMultiDrawElementsIndirectBindlessNV == NULL); +} + +#endif /* GL_NV_bindless_multi_draw_indirect */ + #ifdef GL_NV_bindless_texture static void _glewInfo_GL_NV_bindless_texture (void) @@ -4838,6 +5202,27 @@ static void _glewInfo_GL_NV_bindless_texture (void) #endif /* GL_NV_bindless_texture */ +#ifdef GL_NV_blend_equation_advanced + +static void _glewInfo_GL_NV_blend_equation_advanced (void) +{ + glewPrintExt("GL_NV_blend_equation_advanced", GLEW_NV_blend_equation_advanced, glewIsSupported("GL_NV_blend_equation_advanced"), glewGetExtension("GL_NV_blend_equation_advanced")); + + glewInfoFunc("glBlendBarrierNV", glBlendBarrierNV == NULL); + glewInfoFunc("glBlendParameteriNV", glBlendParameteriNV == NULL); +} + +#endif /* GL_NV_blend_equation_advanced */ + +#ifdef GL_NV_blend_equation_advanced_coherent + +static void _glewInfo_GL_NV_blend_equation_advanced_coherent (void) +{ + glewPrintExt("GL_NV_blend_equation_advanced_coherent", GLEW_NV_blend_equation_advanced_coherent, glewIsSupported("GL_NV_blend_equation_advanced_coherent"), glewGetExtension("GL_NV_blend_equation_advanced_coherent")); +} + +#endif /* GL_NV_blend_equation_advanced_coherent */ + #ifdef GL_NV_blend_square static void _glewInfo_GL_NV_blend_square (void) @@ -4847,6 +5232,15 @@ static void _glewInfo_GL_NV_blend_square (void) #endif /* GL_NV_blend_square */ +#ifdef GL_NV_compute_program5 + +static void _glewInfo_GL_NV_compute_program5 (void) +{ + glewPrintExt("GL_NV_compute_program5", GLEW_NV_compute_program5, glewIsSupported("GL_NV_compute_program5"), glewGetExtension("GL_NV_compute_program5")); +} + +#endif /* GL_NV_compute_program5 */ + #ifdef GL_NV_conditional_render static void _glewInfo_GL_NV_conditional_render (void) @@ -4879,6 +5273,15 @@ static void _glewInfo_GL_NV_copy_image (void) #endif /* GL_NV_copy_image */ +#ifdef GL_NV_deep_texture3D + +static void _glewInfo_GL_NV_deep_texture3D (void) +{ + glewPrintExt("GL_NV_deep_texture3D", GLEW_NV_deep_texture3D, glewIsSupported("GL_NV_deep_texture3D"), glewGetExtension("GL_NV_deep_texture3D")); +} + +#endif /* GL_NV_deep_texture3D */ + #ifdef GL_NV_depth_buffer_float static void _glewInfo_GL_NV_depth_buffer_float (void) @@ -4910,6 +5313,17 @@ static void _glewInfo_GL_NV_depth_range_unclamped (void) #endif /* GL_NV_depth_range_unclamped */ +#ifdef GL_NV_draw_texture + +static void _glewInfo_GL_NV_draw_texture (void) +{ + glewPrintExt("GL_NV_draw_texture", GLEW_NV_draw_texture, glewIsSupported("GL_NV_draw_texture"), glewGetExtension("GL_NV_draw_texture")); + + glewInfoFunc("glDrawTextureNV", glDrawTextureNV == NULL); +} + +#endif /* GL_NV_draw_texture */ + #ifdef GL_NV_evaluators static void _glewInfo_GL_NV_evaluators (void) @@ -5082,6 +5496,15 @@ static void _glewInfo_GL_NV_gpu_program5 (void) #endif /* GL_NV_gpu_program5 */ +#ifdef GL_NV_gpu_program5_mem_extended + +static void _glewInfo_GL_NV_gpu_program5_mem_extended (void) +{ + glewPrintExt("GL_NV_gpu_program5_mem_extended", GLEW_NV_gpu_program5_mem_extended, glewIsSupported("GL_NV_gpu_program5_mem_extended"), glewGetExtension("GL_NV_gpu_program5_mem_extended")); +} + +#endif /* GL_NV_gpu_program5_mem_extended */ + #ifdef GL_NV_gpu_program_fp64 static void _glewInfo_GL_NV_gpu_program_fp64 (void) @@ -5412,6 +5835,15 @@ static void _glewInfo_GL_NV_register_combiners2 (void) #endif /* GL_NV_register_combiners2 */ +#ifdef GL_NV_shader_atomic_counters + +static void _glewInfo_GL_NV_shader_atomic_counters (void) +{ + glewPrintExt("GL_NV_shader_atomic_counters", GLEW_NV_shader_atomic_counters, glewIsSupported("GL_NV_shader_atomic_counters"), glewGetExtension("GL_NV_shader_atomic_counters")); +} + +#endif /* GL_NV_shader_atomic_counters */ + #ifdef GL_NV_shader_atomic_float static void _glewInfo_GL_NV_shader_atomic_float (void) @@ -5444,6 +5876,15 @@ static void _glewInfo_GL_NV_shader_buffer_load (void) #endif /* GL_NV_shader_buffer_load */ +#ifdef GL_NV_shader_storage_buffer_object + +static void _glewInfo_GL_NV_shader_storage_buffer_object (void) +{ + glewPrintExt("GL_NV_shader_storage_buffer_object", GLEW_NV_shader_storage_buffer_object, glewIsSupported("GL_NV_shader_storage_buffer_object"), glewGetExtension("GL_NV_shader_storage_buffer_object")); +} + +#endif /* GL_NV_shader_storage_buffer_object */ + #ifdef GL_NV_tessellation_program5 static void _glewInfo_GL_NV_tessellation_program5 (void) @@ -5920,6 +6361,79 @@ static void _glewInfo_GL_PGI_vertex_hints (void) #endif /* GL_PGI_vertex_hints */ +#ifdef GL_REGAL_ES1_0_compatibility + +static void _glewInfo_GL_REGAL_ES1_0_compatibility (void) +{ + glewPrintExt("GL_REGAL_ES1_0_compatibility", GLEW_REGAL_ES1_0_compatibility, glewIsSupported("GL_REGAL_ES1_0_compatibility"), glewGetExtension("GL_REGAL_ES1_0_compatibility")); + + glewInfoFunc("glAlphaFuncx", glAlphaFuncx == NULL); + glewInfoFunc("glClearColorx", glClearColorx == NULL); + glewInfoFunc("glClearDepthx", glClearDepthx == NULL); + glewInfoFunc("glColor4x", glColor4x == NULL); + glewInfoFunc("glDepthRangex", glDepthRangex == NULL); + glewInfoFunc("glFogx", glFogx == NULL); + glewInfoFunc("glFogxv", glFogxv == NULL); + glewInfoFunc("glFrustumf", glFrustumf == NULL); + glewInfoFunc("glFrustumx", glFrustumx == NULL); + glewInfoFunc("glLightModelx", glLightModelx == NULL); + glewInfoFunc("glLightModelxv", glLightModelxv == NULL); + glewInfoFunc("glLightx", glLightx == NULL); + glewInfoFunc("glLightxv", glLightxv == NULL); + glewInfoFunc("glLineWidthx", glLineWidthx == NULL); + glewInfoFunc("glLoadMatrixx", glLoadMatrixx == NULL); + glewInfoFunc("glMaterialx", glMaterialx == NULL); + glewInfoFunc("glMaterialxv", glMaterialxv == NULL); + glewInfoFunc("glMultMatrixx", glMultMatrixx == NULL); + glewInfoFunc("glMultiTexCoord4x", glMultiTexCoord4x == NULL); + glewInfoFunc("glNormal3x", glNormal3x == NULL); + glewInfoFunc("glOrthof", glOrthof == NULL); + glewInfoFunc("glOrthox", glOrthox == NULL); + glewInfoFunc("glPointSizex", glPointSizex == NULL); + glewInfoFunc("glPolygonOffsetx", glPolygonOffsetx == NULL); + glewInfoFunc("glRotatex", glRotatex == NULL); + glewInfoFunc("glSampleCoveragex", glSampleCoveragex == NULL); + glewInfoFunc("glScalex", glScalex == NULL); + glewInfoFunc("glTexEnvx", glTexEnvx == NULL); + glewInfoFunc("glTexEnvxv", glTexEnvxv == NULL); + glewInfoFunc("glTexParameterx", glTexParameterx == NULL); + glewInfoFunc("glTranslatex", glTranslatex == NULL); +} + +#endif /* GL_REGAL_ES1_0_compatibility */ + +#ifdef GL_REGAL_ES1_1_compatibility + +static void _glewInfo_GL_REGAL_ES1_1_compatibility (void) +{ + glewPrintExt("GL_REGAL_ES1_1_compatibility", GLEW_REGAL_ES1_1_compatibility, glewIsSupported("GL_REGAL_ES1_1_compatibility"), glewGetExtension("GL_REGAL_ES1_1_compatibility")); + + glewInfoFunc("glClipPlanef", glClipPlanef == NULL); + glewInfoFunc("glClipPlanex", glClipPlanex == NULL); + glewInfoFunc("glGetClipPlanef", glGetClipPlanef == NULL); + glewInfoFunc("glGetClipPlanex", glGetClipPlanex == NULL); + glewInfoFunc("glGetFixedv", glGetFixedv == NULL); + glewInfoFunc("glGetLightxv", glGetLightxv == NULL); + glewInfoFunc("glGetMaterialxv", glGetMaterialxv == NULL); + glewInfoFunc("glGetTexEnvxv", glGetTexEnvxv == NULL); + glewInfoFunc("glGetTexParameterxv", glGetTexParameterxv == NULL); + glewInfoFunc("glPointParameterx", glPointParameterx == NULL); + glewInfoFunc("glPointParameterxv", glPointParameterxv == NULL); + glewInfoFunc("glPointSizePointerOES", glPointSizePointerOES == NULL); + glewInfoFunc("glTexParameterxv", glTexParameterxv == NULL); +} + +#endif /* GL_REGAL_ES1_1_compatibility */ + +#ifdef GL_REGAL_enable + +static void _glewInfo_GL_REGAL_enable (void) +{ + glewPrintExt("GL_REGAL_enable", GLEW_REGAL_enable, glewIsSupported("GL_REGAL_enable"), glewGetExtension("GL_REGAL_enable")); +} + +#endif /* GL_REGAL_enable */ + #ifdef GL_REGAL_error_string static void _glewInfo_GL_REGAL_error_string (void) @@ -5948,6 +6462,8 @@ static void _glewInfo_GL_REGAL_extension_query (void) static void _glewInfo_GL_REGAL_log (void) { glewPrintExt("GL_REGAL_log", GLEW_REGAL_log, glewIsSupported("GL_REGAL_log"), glewGetExtension("GL_REGAL_log")); + + glewInfoFunc("glLogMessageCallbackREGAL", glLogMessageCallbackREGAL == NULL); } #endif /* GL_REGAL_log */ @@ -6817,6 +7333,24 @@ static void _glewInfo_WGL_ARB_render_texture (void) #endif /* WGL_ARB_render_texture */ +#ifdef WGL_ARB_robustness_application_isolation + +static void _glewInfo_WGL_ARB_robustness_application_isolation (void) +{ + glewPrintExt("WGL_ARB_robustness_application_isolation", WGLEW_ARB_robustness_application_isolation, wglewIsSupported("WGL_ARB_robustness_application_isolation"), wglewGetExtension("WGL_ARB_robustness_application_isolation")); +} + +#endif /* WGL_ARB_robustness_application_isolation */ + +#ifdef WGL_ARB_robustness_share_group_isolation + +static void _glewInfo_WGL_ARB_robustness_share_group_isolation (void) +{ + glewPrintExt("WGL_ARB_robustness_share_group_isolation", WGLEW_ARB_robustness_share_group_isolation, wglewIsSupported("WGL_ARB_robustness_share_group_isolation"), wglewGetExtension("WGL_ARB_robustness_share_group_isolation")); +} + +#endif /* WGL_ARB_robustness_share_group_isolation */ + #ifdef WGL_ATI_pixel_format_float static void _glewInfo_WGL_ATI_pixel_format_float (void) @@ -7305,6 +7839,16 @@ static void _glewInfo_GLX_3DFX_multisample (void) static void _glewInfo_GLX_AMD_gpu_association (void) { glewPrintExt("GLX_AMD_gpu_association", GLXEW_AMD_gpu_association, glxewIsSupported("GLX_AMD_gpu_association"), glxewGetExtension("GLX_AMD_gpu_association")); + + glewInfoFunc("glXBlitContextFramebufferAMD", glXBlitContextFramebufferAMD == NULL); + glewInfoFunc("glXCreateAssociatedContextAMD", glXCreateAssociatedContextAMD == NULL); + glewInfoFunc("glXCreateAssociatedContextAttribsAMD", glXCreateAssociatedContextAttribsAMD == NULL); + glewInfoFunc("glXDeleteAssociatedContextAMD", glXDeleteAssociatedContextAMD == NULL); + glewInfoFunc("glXGetContextGPUIDAMD", glXGetContextGPUIDAMD == NULL); + glewInfoFunc("glXGetCurrentAssociatedContextAMD", glXGetCurrentAssociatedContextAMD == NULL); + glewInfoFunc("glXGetGPUIDsAMD", glXGetGPUIDsAMD == NULL); + glewInfoFunc("glXGetGPUInfoAMD", glXGetGPUInfoAMD == NULL); + glewInfoFunc("glXMakeAssociatedContextCurrentAMD", glXMakeAssociatedContextCurrentAMD == NULL); } #endif /* GLX_AMD_gpu_association */ @@ -7423,6 +7967,15 @@ static void _glewInfo_GLX_ATI_render_texture (void) #endif /* GLX_ATI_render_texture */ +#ifdef GLX_EXT_buffer_age + +static void _glewInfo_GLX_EXT_buffer_age (void) +{ + glewPrintExt("GLX_EXT_buffer_age", GLXEW_EXT_buffer_age, glxewIsSupported("GLX_EXT_buffer_age"), glxewGetExtension("GLX_EXT_buffer_age")); +} + +#endif /* GLX_EXT_buffer_age */ + #ifdef GLX_EXT_create_context_es2_profile static void _glewInfo_GLX_EXT_create_context_es2_profile (void) @@ -7692,11 +8245,11 @@ static void _glewInfo_GLX_NV_video_capture (void) #endif /* GLX_NV_video_capture */ -#ifdef GLX_NV_video_out +#ifdef GLX_NV_video_output -static void _glewInfo_GLX_NV_video_out (void) +static void _glewInfo_GLX_NV_video_output (void) { - glewPrintExt("GLX_NV_video_out", GLXEW_NV_video_out, glxewIsSupported("GLX_NV_video_out"), glxewGetExtension("GLX_NV_video_out")); + glewPrintExt("GLX_NV_video_output", GLXEW_NV_video_output, glxewIsSupported("GLX_NV_video_output"), glxewGetExtension("GLX_NV_video_output")); glewInfoFunc("glXBindVideoImageNV", glXBindVideoImageNV == NULL); glewInfoFunc("glXGetVideoDeviceNV", glXGetVideoDeviceNV == NULL); @@ -7706,7 +8259,7 @@ static void _glewInfo_GLX_NV_video_out (void) glewInfoFunc("glXSendPbufferToVideoNV", glXSendPbufferToVideoNV == NULL); } -#endif /* GLX_NV_video_out */ +#endif /* GLX_NV_video_output */ #ifdef GLX_OML_swap_method @@ -7987,6 +8540,9 @@ static void glewInfo (void) #ifdef GL_VERSION_4_3 _glewInfo_GL_VERSION_4_3(); #endif /* GL_VERSION_4_3 */ +#ifdef GL_VERSION_4_4 + _glewInfo_GL_VERSION_4_4(); +#endif /* GL_VERSION_4_4 */ #ifdef GL_3DFX_multisample _glewInfo_GL_3DFX_multisample(); #endif /* GL_3DFX_multisample */ @@ -8011,6 +8567,9 @@ static void glewInfo (void) #ifdef GL_AMD_draw_buffers_blend _glewInfo_GL_AMD_draw_buffers_blend(); #endif /* GL_AMD_draw_buffers_blend */ +#ifdef GL_AMD_interleaved_elements + _glewInfo_GL_AMD_interleaved_elements(); +#endif /* GL_AMD_interleaved_elements */ #ifdef GL_AMD_multi_draw_indirect _glewInfo_GL_AMD_multi_draw_indirect(); #endif /* GL_AMD_multi_draw_indirect */ @@ -8035,6 +8594,12 @@ static void glewInfo (void) #ifdef GL_AMD_shader_stencil_export _glewInfo_GL_AMD_shader_stencil_export(); #endif /* GL_AMD_shader_stencil_export */ +#ifdef GL_AMD_shader_trinary_minmax + _glewInfo_GL_AMD_shader_trinary_minmax(); +#endif /* GL_AMD_shader_trinary_minmax */ +#ifdef GL_AMD_sparse_texture + _glewInfo_GL_AMD_sparse_texture(); +#endif /* GL_AMD_sparse_texture */ #ifdef GL_AMD_stencil_operation_extended _glewInfo_GL_AMD_stencil_operation_extended(); #endif /* GL_AMD_stencil_operation_extended */ @@ -8053,6 +8618,42 @@ static void glewInfo (void) #ifdef GL_AMD_vertex_shader_viewport_index _glewInfo_GL_AMD_vertex_shader_viewport_index(); #endif /* GL_AMD_vertex_shader_viewport_index */ +#ifdef GL_ANGLE_depth_texture + _glewInfo_GL_ANGLE_depth_texture(); +#endif /* GL_ANGLE_depth_texture */ +#ifdef GL_ANGLE_framebuffer_blit + _glewInfo_GL_ANGLE_framebuffer_blit(); +#endif /* GL_ANGLE_framebuffer_blit */ +#ifdef GL_ANGLE_framebuffer_multisample + _glewInfo_GL_ANGLE_framebuffer_multisample(); +#endif /* GL_ANGLE_framebuffer_multisample */ +#ifdef GL_ANGLE_instanced_arrays + _glewInfo_GL_ANGLE_instanced_arrays(); +#endif /* GL_ANGLE_instanced_arrays */ +#ifdef GL_ANGLE_pack_reverse_row_order + _glewInfo_GL_ANGLE_pack_reverse_row_order(); +#endif /* GL_ANGLE_pack_reverse_row_order */ +#ifdef GL_ANGLE_program_binary + _glewInfo_GL_ANGLE_program_binary(); +#endif /* GL_ANGLE_program_binary */ +#ifdef GL_ANGLE_texture_compression_dxt1 + _glewInfo_GL_ANGLE_texture_compression_dxt1(); +#endif /* GL_ANGLE_texture_compression_dxt1 */ +#ifdef GL_ANGLE_texture_compression_dxt3 + _glewInfo_GL_ANGLE_texture_compression_dxt3(); +#endif /* GL_ANGLE_texture_compression_dxt3 */ +#ifdef GL_ANGLE_texture_compression_dxt5 + _glewInfo_GL_ANGLE_texture_compression_dxt5(); +#endif /* GL_ANGLE_texture_compression_dxt5 */ +#ifdef GL_ANGLE_texture_usage + _glewInfo_GL_ANGLE_texture_usage(); +#endif /* GL_ANGLE_texture_usage */ +#ifdef GL_ANGLE_timer_query + _glewInfo_GL_ANGLE_timer_query(); +#endif /* GL_ANGLE_timer_query */ +#ifdef GL_ANGLE_translated_shader_source + _glewInfo_GL_ANGLE_translated_shader_source(); +#endif /* GL_ANGLE_translated_shader_source */ #ifdef GL_APPLE_aux_depth_stencil _glewInfo_GL_APPLE_aux_depth_stencil(); #endif /* GL_APPLE_aux_depth_stencil */ @@ -8116,15 +8717,24 @@ static void glewInfo (void) #ifdef GL_ARB_base_instance _glewInfo_GL_ARB_base_instance(); #endif /* GL_ARB_base_instance */ +#ifdef GL_ARB_bindless_texture + _glewInfo_GL_ARB_bindless_texture(); +#endif /* GL_ARB_bindless_texture */ #ifdef GL_ARB_blend_func_extended _glewInfo_GL_ARB_blend_func_extended(); #endif /* GL_ARB_blend_func_extended */ +#ifdef GL_ARB_buffer_storage + _glewInfo_GL_ARB_buffer_storage(); +#endif /* GL_ARB_buffer_storage */ #ifdef GL_ARB_cl_event _glewInfo_GL_ARB_cl_event(); #endif /* GL_ARB_cl_event */ #ifdef GL_ARB_clear_buffer_object _glewInfo_GL_ARB_clear_buffer_object(); #endif /* GL_ARB_clear_buffer_object */ +#ifdef GL_ARB_clear_texture + _glewInfo_GL_ARB_clear_texture(); +#endif /* GL_ARB_clear_texture */ #ifdef GL_ARB_color_buffer_float _glewInfo_GL_ARB_color_buffer_float(); #endif /* GL_ARB_color_buffer_float */ @@ -8137,6 +8747,9 @@ static void glewInfo (void) #ifdef GL_ARB_compute_shader _glewInfo_GL_ARB_compute_shader(); #endif /* GL_ARB_compute_shader */ +#ifdef GL_ARB_compute_variable_group_size + _glewInfo_GL_ARB_compute_variable_group_size(); +#endif /* GL_ARB_compute_variable_group_size */ #ifdef GL_ARB_conservative_depth _glewInfo_GL_ARB_conservative_depth(); #endif /* GL_ARB_conservative_depth */ @@ -8173,6 +8786,9 @@ static void glewInfo (void) #ifdef GL_ARB_draw_instanced _glewInfo_GL_ARB_draw_instanced(); #endif /* GL_ARB_draw_instanced */ +#ifdef GL_ARB_enhanced_layouts + _glewInfo_GL_ARB_enhanced_layouts(); +#endif /* GL_ARB_enhanced_layouts */ #ifdef GL_ARB_explicit_attrib_location _glewInfo_GL_ARB_explicit_attrib_location(); #endif /* GL_ARB_explicit_attrib_location */ @@ -8224,6 +8840,9 @@ static void glewInfo (void) #ifdef GL_ARB_imaging _glewInfo_GL_ARB_imaging(); #endif /* GL_ARB_imaging */ +#ifdef GL_ARB_indirect_parameters + _glewInfo_GL_ARB_indirect_parameters(); +#endif /* GL_ARB_indirect_parameters */ #ifdef GL_ARB_instanced_arrays _glewInfo_GL_ARB_instanced_arrays(); #endif /* GL_ARB_instanced_arrays */ @@ -8245,6 +8864,9 @@ static void glewInfo (void) #ifdef GL_ARB_matrix_palette _glewInfo_GL_ARB_matrix_palette(); #endif /* GL_ARB_matrix_palette */ +#ifdef GL_ARB_multi_bind + _glewInfo_GL_ARB_multi_bind(); +#endif /* GL_ARB_multi_bind */ #ifdef GL_ARB_multi_draw_indirect _glewInfo_GL_ARB_multi_draw_indirect(); #endif /* GL_ARB_multi_draw_indirect */ @@ -8275,6 +8897,9 @@ static void glewInfo (void) #ifdef GL_ARB_provoking_vertex _glewInfo_GL_ARB_provoking_vertex(); #endif /* GL_ARB_provoking_vertex */ +#ifdef GL_ARB_query_buffer_object + _glewInfo_GL_ARB_query_buffer_object(); +#endif /* GL_ARB_query_buffer_object */ #ifdef GL_ARB_robust_buffer_access_behavior _glewInfo_GL_ARB_robust_buffer_access_behavior(); #endif /* GL_ARB_robust_buffer_access_behavior */ @@ -8296,6 +8921,9 @@ static void glewInfo (void) #ifdef GL_ARB_seamless_cube_map _glewInfo_GL_ARB_seamless_cube_map(); #endif /* GL_ARB_seamless_cube_map */ +#ifdef GL_ARB_seamless_cubemap_per_texture + _glewInfo_GL_ARB_seamless_cubemap_per_texture(); +#endif /* GL_ARB_seamless_cubemap_per_texture */ #ifdef GL_ARB_separate_shader_objects _glewInfo_GL_ARB_separate_shader_objects(); #endif /* GL_ARB_separate_shader_objects */ @@ -8305,6 +8933,12 @@ static void glewInfo (void) #ifdef GL_ARB_shader_bit_encoding _glewInfo_GL_ARB_shader_bit_encoding(); #endif /* GL_ARB_shader_bit_encoding */ +#ifdef GL_ARB_shader_draw_parameters + _glewInfo_GL_ARB_shader_draw_parameters(); +#endif /* GL_ARB_shader_draw_parameters */ +#ifdef GL_ARB_shader_group_vote + _glewInfo_GL_ARB_shader_group_vote(); +#endif /* GL_ARB_shader_group_vote */ #ifdef GL_ARB_shader_image_load_store _glewInfo_GL_ARB_shader_image_load_store(); #endif /* GL_ARB_shader_image_load_store */ @@ -8347,6 +8981,9 @@ static void glewInfo (void) #ifdef GL_ARB_shadow_ambient _glewInfo_GL_ARB_shadow_ambient(); #endif /* GL_ARB_shadow_ambient */ +#ifdef GL_ARB_sparse_texture + _glewInfo_GL_ARB_sparse_texture(); +#endif /* GL_ARB_sparse_texture */ #ifdef GL_ARB_stencil_texturing _glewInfo_GL_ARB_stencil_texturing(); #endif /* GL_ARB_stencil_texturing */ @@ -8401,6 +9038,9 @@ static void glewInfo (void) #ifdef GL_ARB_texture_gather _glewInfo_GL_ARB_texture_gather(); #endif /* GL_ARB_texture_gather */ +#ifdef GL_ARB_texture_mirror_clamp_to_edge + _glewInfo_GL_ARB_texture_mirror_clamp_to_edge(); +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ #ifdef GL_ARB_texture_mirrored_repeat _glewInfo_GL_ARB_texture_mirrored_repeat(); #endif /* GL_ARB_texture_mirrored_repeat */ @@ -8425,6 +9065,9 @@ static void glewInfo (void) #ifdef GL_ARB_texture_rgb10_a2ui _glewInfo_GL_ARB_texture_rgb10_a2ui(); #endif /* GL_ARB_texture_rgb10_a2ui */ +#ifdef GL_ARB_texture_stencil8 + _glewInfo_GL_ARB_texture_stencil8(); +#endif /* GL_ARB_texture_stencil8 */ #ifdef GL_ARB_texture_storage _glewInfo_GL_ARB_texture_storage(); #endif /* GL_ARB_texture_storage */ @@ -8479,6 +9122,9 @@ static void glewInfo (void) #ifdef GL_ARB_vertex_shader _glewInfo_GL_ARB_vertex_shader(); #endif /* GL_ARB_vertex_shader */ +#ifdef GL_ARB_vertex_type_10f_11f_11f_rev + _glewInfo_GL_ARB_vertex_type_10f_11f_11f_rev(); +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ #ifdef GL_ARB_vertex_type_2_10_10_10_rev _glewInfo_GL_ARB_vertex_type_2_10_10_10_rev(); #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ @@ -8893,6 +9539,9 @@ static void glewInfo (void) #ifdef GL_INGR_interlace_read _glewInfo_GL_INGR_interlace_read(); #endif /* GL_INGR_interlace_read */ +#ifdef GL_INTEL_map_texture + _glewInfo_GL_INTEL_map_texture(); +#endif /* GL_INTEL_map_texture */ #ifdef GL_INTEL_parallel_arrays _glewInfo_GL_INTEL_parallel_arrays(); #endif /* GL_INTEL_parallel_arrays */ @@ -8923,15 +9572,30 @@ static void glewInfo (void) #ifdef GL_MESA_ycbcr_texture _glewInfo_GL_MESA_ycbcr_texture(); #endif /* GL_MESA_ycbcr_texture */ +#ifdef GL_NVX_conditional_render + _glewInfo_GL_NVX_conditional_render(); +#endif /* GL_NVX_conditional_render */ #ifdef GL_NVX_gpu_memory_info _glewInfo_GL_NVX_gpu_memory_info(); #endif /* GL_NVX_gpu_memory_info */ +#ifdef GL_NV_bindless_multi_draw_indirect + _glewInfo_GL_NV_bindless_multi_draw_indirect(); +#endif /* GL_NV_bindless_multi_draw_indirect */ #ifdef GL_NV_bindless_texture _glewInfo_GL_NV_bindless_texture(); #endif /* GL_NV_bindless_texture */ +#ifdef GL_NV_blend_equation_advanced + _glewInfo_GL_NV_blend_equation_advanced(); +#endif /* GL_NV_blend_equation_advanced */ +#ifdef GL_NV_blend_equation_advanced_coherent + _glewInfo_GL_NV_blend_equation_advanced_coherent(); +#endif /* GL_NV_blend_equation_advanced_coherent */ #ifdef GL_NV_blend_square _glewInfo_GL_NV_blend_square(); #endif /* GL_NV_blend_square */ +#ifdef GL_NV_compute_program5 + _glewInfo_GL_NV_compute_program5(); +#endif /* GL_NV_compute_program5 */ #ifdef GL_NV_conditional_render _glewInfo_GL_NV_conditional_render(); #endif /* GL_NV_conditional_render */ @@ -8941,6 +9605,9 @@ static void glewInfo (void) #ifdef GL_NV_copy_image _glewInfo_GL_NV_copy_image(); #endif /* GL_NV_copy_image */ +#ifdef GL_NV_deep_texture3D + _glewInfo_GL_NV_deep_texture3D(); +#endif /* GL_NV_deep_texture3D */ #ifdef GL_NV_depth_buffer_float _glewInfo_GL_NV_depth_buffer_float(); #endif /* GL_NV_depth_buffer_float */ @@ -8950,6 +9617,9 @@ static void glewInfo (void) #ifdef GL_NV_depth_range_unclamped _glewInfo_GL_NV_depth_range_unclamped(); #endif /* GL_NV_depth_range_unclamped */ +#ifdef GL_NV_draw_texture + _glewInfo_GL_NV_draw_texture(); +#endif /* GL_NV_draw_texture */ #ifdef GL_NV_evaluators _glewInfo_GL_NV_evaluators(); #endif /* GL_NV_evaluators */ @@ -8992,6 +9662,9 @@ static void glewInfo (void) #ifdef GL_NV_gpu_program5 _glewInfo_GL_NV_gpu_program5(); #endif /* GL_NV_gpu_program5 */ +#ifdef GL_NV_gpu_program5_mem_extended + _glewInfo_GL_NV_gpu_program5_mem_extended(); +#endif /* GL_NV_gpu_program5_mem_extended */ #ifdef GL_NV_gpu_program_fp64 _glewInfo_GL_NV_gpu_program_fp64(); #endif /* GL_NV_gpu_program_fp64 */ @@ -9043,12 +9716,18 @@ static void glewInfo (void) #ifdef GL_NV_register_combiners2 _glewInfo_GL_NV_register_combiners2(); #endif /* GL_NV_register_combiners2 */ +#ifdef GL_NV_shader_atomic_counters + _glewInfo_GL_NV_shader_atomic_counters(); +#endif /* GL_NV_shader_atomic_counters */ #ifdef GL_NV_shader_atomic_float _glewInfo_GL_NV_shader_atomic_float(); #endif /* GL_NV_shader_atomic_float */ #ifdef GL_NV_shader_buffer_load _glewInfo_GL_NV_shader_buffer_load(); #endif /* GL_NV_shader_buffer_load */ +#ifdef GL_NV_shader_storage_buffer_object + _glewInfo_GL_NV_shader_storage_buffer_object(); +#endif /* GL_NV_shader_storage_buffer_object */ #ifdef GL_NV_tessellation_program5 _glewInfo_GL_NV_tessellation_program5(); #endif /* GL_NV_tessellation_program5 */ @@ -9154,6 +9833,15 @@ static void glewInfo (void) #ifdef GL_PGI_vertex_hints _glewInfo_GL_PGI_vertex_hints(); #endif /* GL_PGI_vertex_hints */ +#ifdef GL_REGAL_ES1_0_compatibility + _glewInfo_GL_REGAL_ES1_0_compatibility(); +#endif /* GL_REGAL_ES1_0_compatibility */ +#ifdef GL_REGAL_ES1_1_compatibility + _glewInfo_GL_REGAL_ES1_1_compatibility(); +#endif /* GL_REGAL_ES1_1_compatibility */ +#ifdef GL_REGAL_enable + _glewInfo_GL_REGAL_enable(); +#endif /* GL_REGAL_enable */ #ifdef GL_REGAL_error_string _glewInfo_GL_REGAL_error_string(); #endif /* GL_REGAL_error_string */ @@ -9402,6 +10090,12 @@ static void wglewInfo () #ifdef WGL_ARB_render_texture _glewInfo_WGL_ARB_render_texture(); #endif /* WGL_ARB_render_texture */ +#ifdef WGL_ARB_robustness_application_isolation + _glewInfo_WGL_ARB_robustness_application_isolation(); +#endif /* WGL_ARB_robustness_application_isolation */ +#ifdef WGL_ARB_robustness_share_group_isolation + _glewInfo_WGL_ARB_robustness_share_group_isolation(); +#endif /* WGL_ARB_robustness_share_group_isolation */ #ifdef WGL_ATI_pixel_format_float _glewInfo_WGL_ATI_pixel_format_float(); #endif /* WGL_ATI_pixel_format_float */ @@ -9564,6 +10258,9 @@ static void glxewInfo () #ifdef GLX_ATI_render_texture _glewInfo_GLX_ATI_render_texture(); #endif /* GLX_ATI_render_texture */ +#ifdef GLX_EXT_buffer_age + _glewInfo_GLX_EXT_buffer_age(); +#endif /* GLX_EXT_buffer_age */ #ifdef GLX_EXT_create_context_es2_profile _glewInfo_GLX_EXT_create_context_es2_profile(); #endif /* GLX_EXT_create_context_es2_profile */ @@ -9639,9 +10336,9 @@ static void glxewInfo () #ifdef GLX_NV_video_capture _glewInfo_GLX_NV_video_capture(); #endif /* GLX_NV_video_capture */ -#ifdef GLX_NV_video_out - _glewInfo_GLX_NV_video_out(); -#endif /* GLX_NV_video_out */ +#ifdef GLX_NV_video_output + _glewInfo_GLX_NV_video_output(); +#endif /* GLX_NV_video_output */ #ifdef GLX_OML_swap_method _glewInfo_GLX_OML_swap_method(); #endif /* GLX_OML_swap_method */ diff --git a/Externals/LZO/LZO.vcxproj b/Externals/LZO/LZO.vcxproj index 76b75cdc4c..e8e92795f0 100644 --- a/Externals/LZO/LZO.vcxproj +++ b/Externals/LZO/LZO.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,122 +19,41 @@ - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20} - LZO + {AB993F38-C31D-4897-B139-A620C42BC565} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - - - Unicode - - - StaticLibrary - - - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - true - - - - - - true - true - true - - - - - - true - true - true - - + + + - + diff --git a/Externals/LZO/LZO.vcxproj.filters b/Externals/LZO/LZO.vcxproj.filters deleted file mode 100644 index 889fdb14a0..0000000000 --- a/Externals/LZO/LZO.vcxproj.filters +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Header Files - - - Header Files - - - Header Files - - - - - {a40ddc0f-650c-440f-9a85-52fd8dc26122} - - - {65dbafef-bdb1-4bbc-8ebc-08f69f8f5f3a} - - - - - Source Files - - - - - - \ No newline at end of file diff --git a/Externals/OpenAL/Win64/EFX-Util.lib b/Externals/OpenAL/x64/EFX-Util.lib similarity index 100% rename from Externals/OpenAL/Win64/EFX-Util.lib rename to Externals/OpenAL/x64/EFX-Util.lib diff --git a/Externals/OpenAL/Win64/OpenAL32.dll b/Externals/OpenAL/x64/OpenAL32.dll similarity index 100% rename from Externals/OpenAL/Win64/OpenAL32.dll rename to Externals/OpenAL/x64/OpenAL32.dll diff --git a/Externals/OpenAL/Win64/OpenAL32.lib b/Externals/OpenAL/x64/OpenAL32.lib similarity index 100% rename from Externals/OpenAL/Win64/OpenAL32.lib rename to Externals/OpenAL/x64/OpenAL32.lib diff --git a/Externals/SDL/Include_1.2/SDL.h b/Externals/SDL/Include_1.2/SDL.h deleted file mode 100644 index 60ac26ce4b..0000000000 --- a/Externals/SDL/Include_1.2/SDL.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Main include header for the SDL library */ - -#ifndef _SDL_H -#define _SDL_H - -#include "SDL_main.h" -#include "SDL_stdinc.h" -#include "SDL_audio.h" -#include "SDL_cdrom.h" -#include "SDL_cpuinfo.h" -#include "SDL_endian.h" -#include "SDL_error.h" -#include "SDL_events.h" -#include "SDL_loadso.h" -#include "SDL_mutex.h" -#include "SDL_rwops.h" -#include "SDL_thread.h" -#include "SDL_timer.h" -#include "SDL_video.h" -#include "SDL_version.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* As of version 0.5, SDL is loaded dynamically into the application */ - -/* These are the flags which may be passed to SDL_Init() -- you should - specify the subsystems which you will be using in your application. -*/ -#define SDL_INIT_TIMER 0x00000001 -#define SDL_INIT_AUDIO 0x00000010 -#define SDL_INIT_VIDEO 0x00000020 -#define SDL_INIT_CDROM 0x00000100 -#define SDL_INIT_JOYSTICK 0x00000200 -#define SDL_INIT_NOPARACHUTE 0x00100000 /* Don't catch fatal signals */ -#define SDL_INIT_EVENTTHREAD 0x01000000 /* Not supported on all OS's */ -#define SDL_INIT_EVERYTHING 0x0000FFFF - -/* This function loads the SDL dynamically linked library and initializes - * the subsystems specified by 'flags' (and those satisfying dependencies) - * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup - * signal handlers for some commonly ignored fatal signals (like SIGSEGV) - */ -extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); - -/* This function initializes specific SDL subsystems */ -extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); - -/* This function cleans up specific SDL subsystems */ -extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); - -/* This function returns mask of the specified subsystems which have - been initialized. - If 'flags' is 0, it returns a mask of all initialized subsystems. -*/ -extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); - -/* This function cleans up all initialized subsystems and unloads the - * dynamically linked library. You should call it upon all exit conditions. - */ -extern DECLSPEC void SDLCALL SDL_Quit(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_H */ diff --git a/Externals/SDL/Include_1.2/SDL_active.h b/Externals/SDL/Include_1.2/SDL_active.h deleted file mode 100644 index 2cf474c5a3..0000000000 --- a/Externals/SDL/Include_1.2/SDL_active.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL application focus event handling */ - -#ifndef _SDL_active_h -#define _SDL_active_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* The available application states */ -#define SDL_APPMOUSEFOCUS 0x01 /* The app has mouse coverage */ -#define SDL_APPINPUTFOCUS 0x02 /* The app has input focus */ -#define SDL_APPACTIVE 0x04 /* The application is active */ - -/* Function prototypes */ -/* - * This function returns the current state of the application, which is a - * bitwise combination of SDL_APPMOUSEFOCUS, SDL_APPINPUTFOCUS, and - * SDL_APPACTIVE. If SDL_APPACTIVE is set, then the user is able to - * see your application, otherwise it has been iconified or disabled. - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetAppState(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_active_h */ diff --git a/Externals/SDL/Include_1.2/SDL_audio.h b/Externals/SDL/Include_1.2/SDL_audio.h deleted file mode 100644 index 68ec4759d8..0000000000 --- a/Externals/SDL/Include_1.2/SDL_audio.h +++ /dev/null @@ -1,253 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Access to the raw audio mixing buffer for the SDL library */ - -#ifndef _SDL_audio_h -#define _SDL_audio_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_endian.h" -#include "SDL_mutex.h" -#include "SDL_thread.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* The calculated values in this structure are calculated by SDL_OpenAudio() */ -typedef struct SDL_AudioSpec { - int freq; /* DSP frequency -- samples per second */ - Uint16 format; /* Audio data format */ - Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ - Uint8 silence; /* Audio buffer silence value (calculated) */ - Uint16 samples; /* Audio buffer size in samples (power of 2) */ - Uint16 padding; /* Necessary for some compile environments */ - Uint32 size; /* Audio buffer size in bytes (calculated) */ - /* This function is called when the audio device needs more data. - 'stream' is a pointer to the audio data buffer - 'len' is the length of that buffer in bytes. - Once the callback returns, the buffer will no longer be valid. - Stereo samples are stored in a LRLRLR ordering. - */ - void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len); - void *userdata; -} SDL_AudioSpec; - -/* Audio format flags (defaults to LSB byte order) */ -#define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ -#define AUDIO_S8 0x8008 /* Signed 8-bit samples */ -#define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ -#define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ -#define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ -#define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ -#define AUDIO_U16 AUDIO_U16LSB -#define AUDIO_S16 AUDIO_S16LSB - -/* Native audio byte ordering */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define AUDIO_U16SYS AUDIO_U16LSB -#define AUDIO_S16SYS AUDIO_S16LSB -#else -#define AUDIO_U16SYS AUDIO_U16MSB -#define AUDIO_S16SYS AUDIO_S16MSB -#endif - - -/* A structure to hold a set of audio conversion filters and buffers */ -typedef struct SDL_AudioCVT { - int needed; /* Set to 1 if conversion possible */ - Uint16 src_format; /* Source audio format */ - Uint16 dst_format; /* Target audio format */ - double rate_incr; /* Rate conversion increment */ - Uint8 *buf; /* Buffer to hold entire audio data */ - int len; /* Length of original audio buffer */ - int len_cvt; /* Length of converted audio buffer */ - int len_mult; /* buffer must be len*len_mult big */ - double len_ratio; /* Given len, final size is len*len_ratio */ - void (SDLCALL *filters[10])(struct SDL_AudioCVT *cvt, Uint16 format); - int filter_index; /* Current audio conversion function */ -} SDL_AudioCVT; - - -/* Function prototypes */ - -/* These functions are used internally, and should not be used unless you - * have a specific need to specify the audio driver you want to use. - * You should normally use SDL_Init() or SDL_InitSubSystem(). - */ -extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); -extern DECLSPEC void SDLCALL SDL_AudioQuit(void); - -/* This function fills the given character buffer with the name of the - * current audio driver, and returns a pointer to it if the audio driver has - * been initialized. It returns NULL if no driver has been initialized. - */ -extern DECLSPEC char * SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); - -/* - * This function opens the audio device with the desired parameters, and - * returns 0 if successful, placing the actual hardware parameters in the - * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio - * data passed to the callback function will be guaranteed to be in the - * requested format, and will be automatically converted to the hardware - * audio format if necessary. This function returns -1 if it failed - * to open the audio device, or couldn't set up the audio thread. - * - * When filling in the desired audio spec structure, - * 'desired->freq' should be the desired audio frequency in samples-per-second. - * 'desired->format' should be the desired audio format. - * 'desired->samples' is the desired size of the audio buffer, in samples. - * This number should be a power of two, and may be adjusted by the audio - * driver to a value more suitable for the hardware. Good values seem to - * range between 512 and 8096 inclusive, depending on the application and - * CPU speed. Smaller values yield faster response time, but can lead - * to underflow if the application is doing heavy processing and cannot - * fill the audio buffer in time. A stereo sample consists of both right - * and left channels in LR ordering. - * Note that the number of samples is directly related to time by the - * following formula: ms = (samples*1000)/freq - * 'desired->size' is the size in bytes of the audio buffer, and is - * calculated by SDL_OpenAudio(). - * 'desired->silence' is the value used to set the buffer to silence, - * and is calculated by SDL_OpenAudio(). - * 'desired->callback' should be set to a function that will be called - * when the audio device is ready for more data. It is passed a pointer - * to the audio buffer, and the length in bytes of the audio buffer. - * This function usually runs in a separate thread, and so you should - * protect data structures that it accesses by calling SDL_LockAudio() - * and SDL_UnlockAudio() in your code. - * 'desired->userdata' is passed as the first parameter to your callback - * function. - * - * The audio device starts out playing silence when it's opened, and should - * be enabled for playing by calling SDL_PauseAudio(0) when you are ready - * for your audio callback function to be called. Since the audio driver - * may modify the requested size of the audio buffer, you should allocate - * any local mixing buffers after you open the audio device. - */ -extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained); - -/* - * Get the current audio state: - */ -typedef enum { - SDL_AUDIO_STOPPED = 0, - SDL_AUDIO_PLAYING, - SDL_AUDIO_PAUSED -} SDL_audiostatus; -extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); - -/* - * This function pauses and unpauses the audio callback processing. - * It should be called with a parameter of 0 after opening the audio - * device to start playing sound. This is so you can safely initialize - * data for your callback function after opening the audio device. - * Silence will be written to the audio device during the pause. - */ -extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); - -/* - * This function loads a WAVE from the data source, automatically freeing - * that source if 'freesrc' is non-zero. For example, to load a WAVE file, - * you could do: - * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); - * - * If this function succeeds, it returns the given SDL_AudioSpec, - * filled with the audio data format of the wave data, and sets - * 'audio_buf' to a malloc()'d buffer containing the audio data, - * and sets 'audio_len' to the length of that audio buffer, in bytes. - * You need to free the audio buffer with SDL_FreeWAV() when you are - * done with it. - * - * This function returns NULL and sets the SDL error message if the - * wave file cannot be opened, uses an unknown data format, or is - * corrupt. Currently raw and MS-ADPCM WAVE files are supported. - */ -extern DECLSPEC SDL_AudioSpec * SDLCALL SDL_LoadWAV_RW(SDL_RWops *src, int freesrc, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len); - -/* Compatibility convenience function -- loads a WAV from a file */ -#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ - SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) - -/* - * This function frees data previously allocated with SDL_LoadWAV_RW() - */ -extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 *audio_buf); - -/* - * This function takes a source format and rate and a destination format - * and rate, and initializes the 'cvt' structure with information needed - * by SDL_ConvertAudio() to convert a buffer of audio data from one format - * to the other. - * This function returns 0, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT *cvt, - Uint16 src_format, Uint8 src_channels, int src_rate, - Uint16 dst_format, Uint8 dst_channels, int dst_rate); - -/* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), - * created an audio buffer cvt->buf, and filled it with cvt->len bytes of - * audio data in the source format, this function will convert it in-place - * to the desired format. - * The data conversion may expand the size of the audio data, so the buffer - * cvt->buf should be allocated after the cvt structure is initialized by - * SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long. - */ -extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT *cvt); - -/* - * This takes two audio buffers of the playing audio format and mixes - * them, performing addition, volume adjustment, and overflow clipping. - * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME - * for full audio volume. Note this does not change hardware volume. - * This is provided for convenience -- you can mix your own audio data. - */ -#define SDL_MIX_MAXVOLUME 128 -extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume); - -/* - * The lock manipulated by these functions protects the callback function. - * During a LockAudio/UnlockAudio pair, you can be guaranteed that the - * callback function is not running. Do not call these from the callback - * function or you will cause deadlock. - */ -extern DECLSPEC void SDLCALL SDL_LockAudio(void); -extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); - -/* - * This function shuts down audio processing and closes the audio device. - */ -extern DECLSPEC void SDLCALL SDL_CloseAudio(void); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_audio_h */ diff --git a/Externals/SDL/Include_1.2/SDL_byteorder.h b/Externals/SDL/Include_1.2/SDL_byteorder.h deleted file mode 100644 index 3871cfed56..0000000000 --- a/Externals/SDL/Include_1.2/SDL_byteorder.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* DEPRECATED */ -#include "SDL_endian.h" diff --git a/Externals/SDL/Include_1.2/SDL_cdrom.h b/Externals/SDL/Include_1.2/SDL_cdrom.h deleted file mode 100644 index 5f8f0c62a0..0000000000 --- a/Externals/SDL/Include_1.2/SDL_cdrom.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This is the CD-audio control API for Simple DirectMedia Layer */ - -#ifndef _SDL_cdrom_h -#define _SDL_cdrom_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_CDROM flag. This causes SDL to scan the system - for CD-ROM drives, and load appropriate drivers. -*/ - -/* The maximum number of CD-ROM tracks on a disk */ -#define SDL_MAX_TRACKS 99 - -/* The types of CD-ROM track possible */ -#define SDL_AUDIO_TRACK 0x00 -#define SDL_DATA_TRACK 0x04 - -/* The possible states which a CD-ROM drive can be in. */ -typedef enum { - CD_TRAYEMPTY, - CD_STOPPED, - CD_PLAYING, - CD_PAUSED, - CD_ERROR = -1 -} CDstatus; - -/* Given a status, returns true if there's a disk in the drive */ -#define CD_INDRIVE(status) ((int)(status) > 0) - -typedef struct SDL_CDtrack { - Uint8 id; /* Track number */ - Uint8 type; /* Data or audio track */ - Uint16 unused; - Uint32 length; /* Length, in frames, of this track */ - Uint32 offset; /* Offset, in frames, from start of disk */ -} SDL_CDtrack; - -/* This structure is only current as of the last call to SDL_CDStatus() */ -typedef struct SDL_CD { - int id; /* Private drive identifier */ - CDstatus status; /* Current drive status */ - - /* The rest of this structure is only valid if there's a CD in drive */ - int numtracks; /* Number of tracks on disk */ - int cur_track; /* Current track position */ - int cur_frame; /* Current frame offset within current track */ - SDL_CDtrack track[SDL_MAX_TRACKS+1]; -} SDL_CD; - -/* Conversion functions from frames to Minute/Second/Frames and vice versa */ -#define CD_FPS 75 -#define FRAMES_TO_MSF(f, M,S,F) { \ - int value = f; \ - *(F) = value%CD_FPS; \ - value /= CD_FPS; \ - *(S) = value%60; \ - value /= 60; \ - *(M) = value; \ -} -#define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F)) - -/* CD-audio API functions: */ - -/* Returns the number of CD-ROM drives on the system, or -1 if - SDL_Init() has not been called with the SDL_INIT_CDROM flag. - */ -extern DECLSPEC int SDLCALL SDL_CDNumDrives(void); - -/* Returns a human-readable, system-dependent identifier for the CD-ROM. - Example: - "/dev/cdrom" - "E:" - "/dev/disk/ide/1/master" -*/ -extern DECLSPEC const char * SDLCALL SDL_CDName(int drive); - -/* Opens a CD-ROM drive for access. It returns a drive handle on success, - or NULL if the drive was invalid or busy. This newly opened CD-ROM - becomes the default CD used when other CD functions are passed a NULL - CD-ROM handle. - Drives are numbered starting with 0. Drive 0 is the system default CD-ROM. -*/ -extern DECLSPEC SDL_CD * SDLCALL SDL_CDOpen(int drive); - -/* This function returns the current status of the given drive. - If the drive has a CD in it, the table of contents of the CD and current - play position of the CD will be stored in the SDL_CD structure. -*/ -extern DECLSPEC CDstatus SDLCALL SDL_CDStatus(SDL_CD *cdrom); - -/* Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks' - tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play - until the end of the CD. This function will skip data tracks. - This function should only be called after calling SDL_CDStatus() to - get track information about the CD. - For example: - // Play entire CD: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); - // Play last track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { - SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0); - } - // Play first and second track and 10 seconds of third track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 2, 10); - - This function returns 0, or -1 if there was an error. -*/ -extern DECLSPEC int SDLCALL SDL_CDPlayTracks(SDL_CD *cdrom, - int start_track, int start_frame, int ntracks, int nframes); - -/* Play the given CD starting at 'start' frame for 'length' frames. - It returns 0, or -1 if there was an error. -*/ -extern DECLSPEC int SDLCALL SDL_CDPlay(SDL_CD *cdrom, int start, int length); - -/* Pause play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDPause(SDL_CD *cdrom); - -/* Resume play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDResume(SDL_CD *cdrom); - -/* Stop play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDStop(SDL_CD *cdrom); - -/* Eject CD-ROM -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDEject(SDL_CD *cdrom); - -/* Closes the handle for the CD-ROM drive */ -extern DECLSPEC void SDLCALL SDL_CDClose(SDL_CD *cdrom); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_video_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config.h b/Externals/SDL/Include_1.2/SDL_config.h deleted file mode 100644 index c82f42adf0..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_h -#define _SDL_config_h - -#include "SDL_platform.h" - -/* Add any platform that doesn't build using the configure system */ -#if defined(__DREAMCAST__) -#include "SDL_config_dreamcast.h" -#elif defined(__MACOS__) -#include "SDL_config_macos.h" -#elif defined(__MACOSX__) -#include "SDL_config_macosx.h" -#elif defined(__SYMBIAN32__) -#include "SDL_config_symbian.h" /* must be before win32! */ -#elif defined(__WIN32__) -#include "SDL_config_win32.h" -#elif defined(__OS2__) -#include "SDL_config_os2.h" -#else -#include "SDL_config_minimal.h" -#endif /* platform config */ - -#endif /* _SDL_config_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config.h.in b/Externals/SDL/Include_1.2/SDL_config.h.in deleted file mode 100644 index fb49c0e2fa..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config.h.in +++ /dev/null @@ -1,306 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_h -#define _SDL_config_h - -/* This is a set of defines to configure the SDL features */ - -/* General platform specific identifiers */ -#include "SDL_platform.h" - -/* Make sure that this isn't included by Visual C++ */ -#ifdef _MSC_VER -#error You should copy include/SDL_config.h.default to include/SDL_config.h -#endif - -/* C language features */ -#undef const -#undef inline -#undef volatile - -/* C datatypes */ -#undef size_t -#undef int8_t -#undef uint8_t -#undef int16_t -#undef uint16_t -#undef int32_t -#undef uint32_t -#undef int64_t -#undef uint64_t -#undef uintptr_t -#undef SDL_HAS_64BIT_TYPE - -/* Endianness */ -#undef SDL_BYTEORDER - -/* Comment this if you want to build without any C library requirements */ -#undef HAVE_LIBC -#if HAVE_LIBC - -/* Useful headers */ -#undef HAVE_ALLOCA_H -#undef HAVE_SYS_TYPES_H -#undef HAVE_STDIO_H -#undef STDC_HEADERS -#undef HAVE_STDLIB_H -#undef HAVE_STDARG_H -#undef HAVE_MALLOC_H -#undef HAVE_MEMORY_H -#undef HAVE_STRING_H -#undef HAVE_STRINGS_H -#undef HAVE_INTTYPES_H -#undef HAVE_STDINT_H -#undef HAVE_CTYPE_H -#undef HAVE_MATH_H -#undef HAVE_ICONV_H -#undef HAVE_SIGNAL_H -#undef HAVE_ALTIVEC_H - -/* C library functions */ -#undef HAVE_MALLOC -#undef HAVE_CALLOC -#undef HAVE_REALLOC -#undef HAVE_FREE -#undef HAVE_ALLOCA -#ifndef _WIN32 /* Don't use C runtime versions of these on Windows */ -#undef HAVE_GETENV -#undef HAVE_PUTENV -#undef HAVE_UNSETENV -#endif -#undef HAVE_QSORT -#undef HAVE_ABS -#undef HAVE_BCOPY -#undef HAVE_MEMSET -#undef HAVE_MEMCPY -#undef HAVE_MEMMOVE -#undef HAVE_MEMCMP -#undef HAVE_STRLEN -#undef HAVE_STRLCPY -#undef HAVE_STRLCAT -#undef HAVE_STRDUP -#undef HAVE__STRREV -#undef HAVE__STRUPR -#undef HAVE__STRLWR -#undef HAVE_INDEX -#undef HAVE_RINDEX -#undef HAVE_STRCHR -#undef HAVE_STRRCHR -#undef HAVE_STRSTR -#undef HAVE_ITOA -#undef HAVE__LTOA -#undef HAVE__UITOA -#undef HAVE__ULTOA -#undef HAVE_STRTOL -#undef HAVE_STRTOUL -#undef HAVE__I64TOA -#undef HAVE__UI64TOA -#undef HAVE_STRTOLL -#undef HAVE_STRTOULL -#undef HAVE_STRTOD -#undef HAVE_ATOI -#undef HAVE_ATOF -#undef HAVE_STRCMP -#undef HAVE_STRNCMP -#undef HAVE__STRICMP -#undef HAVE_STRCASECMP -#undef HAVE__STRNICMP -#undef HAVE_STRNCASECMP -#undef HAVE_SSCANF -#undef HAVE_SNPRINTF -#undef HAVE_VSNPRINTF -#undef HAVE_ICONV -#undef HAVE_SIGACTION -#undef HAVE_SETJMP -#undef HAVE_NANOSLEEP -#undef HAVE_CLOCK_GETTIME -#undef HAVE_DLVSYM -#undef HAVE_GETPAGESIZE -#undef HAVE_MPROTECT - -#else -/* We may need some replacement for stdarg.h here */ -#include -#endif /* HAVE_LIBC */ - -/* Allow disabling of core subsystems */ -#undef SDL_AUDIO_DISABLED -#undef SDL_CDROM_DISABLED -#undef SDL_CPUINFO_DISABLED -#undef SDL_EVENTS_DISABLED -#undef SDL_FILE_DISABLED -#undef SDL_JOYSTICK_DISABLED -#undef SDL_LOADSO_DISABLED -#undef SDL_THREADS_DISABLED -#undef SDL_TIMERS_DISABLED -#undef SDL_VIDEO_DISABLED - -/* Enable various audio drivers */ -#undef SDL_AUDIO_DRIVER_ALSA -#undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC -#undef SDL_AUDIO_DRIVER_ARTS -#undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC -#undef SDL_AUDIO_DRIVER_BAUDIO -#undef SDL_AUDIO_DRIVER_BSD -#undef SDL_AUDIO_DRIVER_COREAUDIO -#undef SDL_AUDIO_DRIVER_DART -#undef SDL_AUDIO_DRIVER_DC -#undef SDL_AUDIO_DRIVER_DISK -#undef SDL_AUDIO_DRIVER_DUMMY -#undef SDL_AUDIO_DRIVER_DMEDIA -#undef SDL_AUDIO_DRIVER_DSOUND -#undef SDL_AUDIO_DRIVER_PULSE -#undef SDL_AUDIO_DRIVER_PULSE_DYNAMIC -#undef SDL_AUDIO_DRIVER_ESD -#undef SDL_AUDIO_DRIVER_ESD_DYNAMIC -#undef SDL_AUDIO_DRIVER_MINT -#undef SDL_AUDIO_DRIVER_MMEAUDIO -#undef SDL_AUDIO_DRIVER_NAS -#undef SDL_AUDIO_DRIVER_OSS -#undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H -#undef SDL_AUDIO_DRIVER_PAUD -#undef SDL_AUDIO_DRIVER_QNXNTO -#undef SDL_AUDIO_DRIVER_SNDMGR -#undef SDL_AUDIO_DRIVER_SUNAUDIO -#undef SDL_AUDIO_DRIVER_WAVEOUT - -/* Enable various cdrom drivers */ -#undef SDL_CDROM_AIX -#undef SDL_CDROM_BEOS -#undef SDL_CDROM_BSDI -#undef SDL_CDROM_DC -#undef SDL_CDROM_DUMMY -#undef SDL_CDROM_FREEBSD -#undef SDL_CDROM_LINUX -#undef SDL_CDROM_MACOS -#undef SDL_CDROM_MACOSX -#undef SDL_CDROM_MINT -#undef SDL_CDROM_OPENBSD -#undef SDL_CDROM_OS2 -#undef SDL_CDROM_OSF -#undef SDL_CDROM_QNX -#undef SDL_CDROM_WIN32 - -/* Enable various input drivers */ -#undef SDL_INPUT_LINUXEV -#undef SDL_INPUT_TSLIB -#undef SDL_JOYSTICK_BEOS -#undef SDL_JOYSTICK_DC -#undef SDL_JOYSTICK_DUMMY -#undef SDL_JOYSTICK_IOKIT -#undef SDL_JOYSTICK_LINUX -#undef SDL_JOYSTICK_MACOS -#undef SDL_JOYSTICK_MINT -#undef SDL_JOYSTICK_OS2 -#undef SDL_JOYSTICK_RISCOS -#undef SDL_JOYSTICK_WINMM -#undef SDL_JOYSTICK_USBHID -#undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H - -/* Enable various shared object loading systems */ -#undef SDL_LOADSO_BEOS -#undef SDL_LOADSO_DLCOMPAT -#undef SDL_LOADSO_DLOPEN -#undef SDL_LOADSO_DUMMY -#undef SDL_LOADSO_LDG -#undef SDL_LOADSO_MACOS -#undef SDL_LOADSO_OS2 -#undef SDL_LOADSO_WIN32 - -/* Enable various threading systems */ -#undef SDL_THREAD_BEOS -#undef SDL_THREAD_DC -#undef SDL_THREAD_OS2 -#undef SDL_THREAD_PTH -#undef SDL_THREAD_PTHREAD -#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX -#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP -#undef SDL_THREAD_SPROC -#undef SDL_THREAD_WIN32 - -/* Enable various timer systems */ -#undef SDL_TIMER_BEOS -#undef SDL_TIMER_DC -#undef SDL_TIMER_DUMMY -#undef SDL_TIMER_MACOS -#undef SDL_TIMER_MINT -#undef SDL_TIMER_OS2 -#undef SDL_TIMER_RISCOS -#undef SDL_TIMER_UNIX -#undef SDL_TIMER_WIN32 -#undef SDL_TIMER_WINCE - -/* Enable various video drivers */ -#undef SDL_VIDEO_DRIVER_AALIB -#undef SDL_VIDEO_DRIVER_BWINDOW -#undef SDL_VIDEO_DRIVER_DC -#undef SDL_VIDEO_DRIVER_DDRAW -#undef SDL_VIDEO_DRIVER_DGA -#undef SDL_VIDEO_DRIVER_DIRECTFB -#undef SDL_VIDEO_DRIVER_DRAWSPROCKET -#undef SDL_VIDEO_DRIVER_DUMMY -#undef SDL_VIDEO_DRIVER_FBCON -#undef SDL_VIDEO_DRIVER_GAPI -#undef SDL_VIDEO_DRIVER_GEM -#undef SDL_VIDEO_DRIVER_GGI -#undef SDL_VIDEO_DRIVER_IPOD -#undef SDL_VIDEO_DRIVER_NANOX -#undef SDL_VIDEO_DRIVER_OS2FS -#undef SDL_VIDEO_DRIVER_PHOTON -#undef SDL_VIDEO_DRIVER_PICOGUI -#undef SDL_VIDEO_DRIVER_PS2GS -#undef SDL_VIDEO_DRIVER_QTOPIA -#undef SDL_VIDEO_DRIVER_QUARTZ -#undef SDL_VIDEO_DRIVER_RISCOS -#undef SDL_VIDEO_DRIVER_SVGALIB -#undef SDL_VIDEO_DRIVER_TOOLBOX -#undef SDL_VIDEO_DRIVER_VGL -#undef SDL_VIDEO_DRIVER_WINDIB -#undef SDL_VIDEO_DRIVER_WSCONS -#undef SDL_VIDEO_DRIVER_X11 -#undef SDL_VIDEO_DRIVER_X11_DGAMOUSE -#undef SDL_VIDEO_DRIVER_X11_DPMS -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER -#undef SDL_VIDEO_DRIVER_X11_VIDMODE -#undef SDL_VIDEO_DRIVER_X11_XINERAMA -#undef SDL_VIDEO_DRIVER_X11_XME -#undef SDL_VIDEO_DRIVER_X11_XRANDR -#undef SDL_VIDEO_DRIVER_X11_XV -#undef SDL_VIDEO_DRIVER_XBIOS - -/* Enable OpenGL support */ -#undef SDL_VIDEO_OPENGL -#undef SDL_VIDEO_OPENGL_GLX -#undef SDL_VIDEO_OPENGL_WGL -#undef SDL_VIDEO_OPENGL_OSMESA -#undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC - -/* Enable assembly routines */ -#undef SDL_ASSEMBLY_ROUTINES -#undef SDL_HERMES_BLITTERS -#undef SDL_ALTIVEC_BLITTERS - -#endif /* _SDL_config_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_dreamcast.h b/Externals/SDL/Include_1.2/SDL_config_dreamcast.h deleted file mode 100644 index 9cbeea3166..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config_dreamcast.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_dreamcast_h -#define _SDL_config_dreamcast_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -typedef unsigned long uintptr_t; -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRDUP 1 -#define HAVE_INDEX 1 -#define HAVE_RINDEX 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_DC 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_DC 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_DC 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_DUMMY 1 - -/* Enable various threading systems */ -#define SDL_THREAD_DC 1 - -/* Enable various timer systems */ -#define SDL_TIMER_DC 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DC 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_dreamcast_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_macos.h b/Externals/SDL/Include_1.2/SDL_config_macos.h deleted file mode 100644 index c4a1c59804..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config_macos.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_macos_h -#define _SDL_config_macos_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -#include - -typedef SInt8 int8_t; -typedef UInt8 uint8_t; -typedef SInt16 int16_t; -typedef UInt16 uint16_t; -typedef SInt32 int32_t; -typedef UInt32 uint32_t; -typedef SInt64 int64_t; -typedef UInt64 uint64_t; -typedef unsigned long uintptr_t; - -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_ABS 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_ITOA 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_SSCANF 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_SNDMGR 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#if TARGET_API_MAC_CARBON -#define SDL_CDROM_DUMMY 1 -#else -#define SDL_CDROM_MACOS 1 -#endif - -/* Enable various input drivers */ -#if TARGET_API_MAC_CARBON -#define SDL_JOYSTICK_DUMMY 1 -#else -#define SDL_JOYSTICK_MACOS 1 -#endif - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_MACOS 1 - -/* Enable various threading systems */ -#define SDL_THREADS_DISABLED 1 - -/* Enable various timer systems */ -#define SDL_TIMER_MACOS 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_DRAWSPROCKET 1 -#define SDL_VIDEO_DRIVER_TOOLBOX 1 - -/* Enable OpenGL support */ -#define SDL_VIDEO_OPENGL 1 - -#endif /* _SDL_config_macos_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_macosx.h b/Externals/SDL/Include_1.2/SDL_config_macosx.h deleted file mode 100644 index 481c22edc3..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config_macosx.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_macosx_h -#define _SDL_config_macosx_h - -#include "SDL_platform.h" - -/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ -#include - -/* This is a set of defines to configure the SDL features */ - -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -/* If we specified an SDK or have a post-PowerPC chip, then alloca.h exists. */ -#if ( (MAC_OS_X_VERSION_MIN_REQUIRED >= 1030) || (!defined(__POWERPC__)) ) -#define HAVE_ALLOCA_H 1 -#endif -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_COREAUDIO 1 -#define SDL_AUDIO_DRIVER_SNDMGR 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_MACOSX 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_IOKIT 1 - -/* Enable various shared object loading systems */ -#ifdef __ppc__ -/* For Mac OS X 10.2 compatibility */ -#define SDL_LOADSO_DLCOMPAT 1 -#else -#define SDL_LOADSO_DLOPEN 1 -#endif - -/* Enable various threading systems */ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#if ((defined TARGET_API_MAC_CARBON) && (TARGET_API_MAC_CARBON)) -#define SDL_VIDEO_DRIVER_TOOLBOX 1 -#else -#define SDL_VIDEO_DRIVER_QUARTZ 1 -#endif - -/* Enable OpenGL support */ -#define SDL_VIDEO_OPENGL 1 - -/* Enable assembly routines */ -#define SDL_ASSEMBLY_ROUTINES 1 -#ifdef __ppc__ -#define SDL_ALTIVEC_BLITTERS 1 -#endif - -#endif /* _SDL_config_macosx_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_minimal.h b/Externals/SDL/Include_1.2/SDL_config_minimal.h deleted file mode 100644 index 78b6148ca9..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config_minimal.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_minimal_h -#define _SDL_config_minimal_h - -#include "SDL_platform.h" - -/* This is the minimal configuration that can be used to build SDL */ - -#include - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned int size_t; -typedef unsigned long uintptr_t; - -/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ -#define SDL_CDROM_DISABLED 1 - -/* Enable the stub joystick driver (src/joystick/dummy/\*.c) */ -#define SDL_JOYSTICK_DISABLED 1 - -/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable the stub thread support (src/thread/generic/\*.c) */ -#define SDL_THREADS_DISABLED 1 - -/* Enable the stub timer support (src/timer/dummy/\*.c) */ -#define SDL_TIMERS_DISABLED 1 - -/* Enable the dummy video driver (src/video/dummy/\*.c) */ -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_minimal_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_nds.h b/Externals/SDL/Include_1.2/SDL_config_nds.h deleted file mode 100644 index 20b789c85a..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config_nds.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_nds_h -#define _SDL_config_nds_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -/* General platform specific identifiers */ -#include "SDL_platform.h" - -/* C datatypes */ -#define SDL_HAS_64BIT_TYPE 1 - -/* Endianness */ -#define SDL_BYTEORDER 1234 - -/* Useful headers */ -#define HAVE_ALLOCA_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STDARG_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_STRING_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_ICONV_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SETJMP 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_NDS 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ -#define SDL_CDROM_DISABLED 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_NDS 1 - -/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable the stub thread support (src/thread/generic/\*.c) */ -#define SDL_THREADS_DISABLED 1 - -/* Enable various timer systems */ -#define SDL_TIMER_NDS 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_NDS 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_nds_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_os2.h b/Externals/SDL/Include_1.2/SDL_config_os2.h deleted file mode 100644 index 8cdea9ff2b..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config_os2.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_os2_h -#define _SDL_config_os2_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned int size_t; -typedef unsigned long uintptr_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; - -#define SDL_HAS_64BIT_TYPE 1 - -/* Use Watcom's LIBC */ -#define HAVE_LIBC 1 - -/* Useful headers */ -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STDARG_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRING_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE__STRREV 1 -#define HAVE__STRUPR 1 -#define HAVE__STRLWR 1 -#define HAVE_INDEX 1 -#define HAVE_RINDEX 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_ITOA 1 -#define HAVE__LTOA 1 -#define HAVE__UITOA 1 -#define HAVE__ULTOA 1 -#define HAVE_STRTOL 1 -#define HAVE__I64TOA 1 -#define HAVE__UI64TOA 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SETJMP 1 -#define HAVE_CLOCK_GETTIME 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_DART 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_OS2 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_OS2 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_OS2 1 - -/* Enable various threading systems */ -#define SDL_THREAD_OS2 1 - -/* Enable various timer systems */ -#define SDL_TIMER_OS2 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_OS2FS 1 - -/* Enable OpenGL support */ -/* Nothing here yet for OS/2... :( */ - -/* Enable assembly routines where available */ -#define SDL_ASSEMBLY_ROUTINES 1 - -#endif /* _SDL_config_os2_h */ diff --git a/Externals/SDL/Include_1.2/SDL_config_win32.h b/Externals/SDL/Include_1.2/SDL_config_win32.h deleted file mode 100644 index cfb44d2a07..0000000000 --- a/Externals/SDL/Include_1.2/SDL_config_win32.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_win32_h -#define _SDL_config_win32_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -#if defined(__GNUC__) || defined(__DMC__) -#define HAVE_STDINT_H 1 -#elif defined(_MSC_VER) -typedef signed __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef signed __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef signed __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; -#ifndef _UINTPTR_T_DEFINED -#ifdef _WIN64 -typedef unsigned __int64 uintptr_t; -#else -typedef unsigned int uintptr_t; -#endif -#define _UINTPTR_T_DEFINED -#endif -/* Older Visual C++ headers don't have the Win64-compatible typedefs... */ -#if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) -#define DWORD_PTR DWORD -#endif -#if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) -#define LONG_PTR LONG -#endif -#else /* !__GNUC__ && !_MSC_VER */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -#ifndef _SIZE_T_DEFINED_ -#define _SIZE_T_DEFINED_ -typedef unsigned int size_t; -#endif -typedef unsigned int uintptr_t; -#endif /* __GNUC__ || _MSC_VER */ -#define SDL_HAS_64BIT_TYPE 1 - -/* Enabled for SDL 1.2 (binary compatibility) */ -#define HAVE_LIBC 1 -#ifdef HAVE_LIBC -/* Useful headers */ -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#ifndef _WIN32_WCE -#define HAVE_SIGNAL_H 1 -#endif - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE__STRREV 1 -#define HAVE__STRUPR 1 -#define HAVE__STRLWR 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_ITOA 1 -#define HAVE__LTOA 1 -#define HAVE__ULTOA 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE__STRICMP 1 -#define HAVE__STRNICMP 1 -#define HAVE_SSCANF 1 -#else -#define HAVE_STDARG_H 1 -#define HAVE_STDDEF_H 1 -#endif - -/* Enable various audio drivers */ -#ifndef _WIN32_WCE -#define SDL_AUDIO_DRIVER_DSOUND 1 -#endif -#define SDL_AUDIO_DRIVER_WAVEOUT 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#ifdef _WIN32_WCE -#define SDL_CDROM_DISABLED 1 -#else -#define SDL_CDROM_WIN32 1 -#endif - -/* Enable various input drivers */ -#ifdef _WIN32_WCE -#define SDL_JOYSTICK_DISABLED 1 -#else -#define SDL_JOYSTICK_WINMM 1 -#endif - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_WIN32 1 - -/* Enable various threading systems */ -#define SDL_THREAD_WIN32 1 - -/* Enable various timer systems */ -#ifdef _WIN32_WCE -#define SDL_TIMER_WINCE 1 -#else -#define SDL_TIMER_WIN32 1 -#endif - -/* Enable various video drivers */ -#ifdef _WIN32_WCE -#define SDL_VIDEO_DRIVER_GAPI 1 -#endif -#ifndef _WIN32_WCE -#define SDL_VIDEO_DRIVER_DDRAW 1 -#endif -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_WINDIB 1 - -/* Enable OpenGL support */ -#ifndef _WIN32_WCE -#define SDL_VIDEO_OPENGL 1 -#define SDL_VIDEO_OPENGL_WGL 1 -#endif - -/* Enable assembly routines (Win64 doesn't have inline asm) */ -#ifndef _WIN64 -#define SDL_ASSEMBLY_ROUTINES 1 -#endif - -#endif /* _SDL_config_win32_h */ diff --git a/Externals/SDL/Include_1.2/SDL_copying.h b/Externals/SDL/Include_1.2/SDL_copying.h deleted file mode 100644 index 39e122db73..0000000000 --- a/Externals/SDL/Include_1.2/SDL_copying.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - diff --git a/Externals/SDL/Include_1.2/SDL_cpuinfo.h b/Externals/SDL/Include_1.2/SDL_cpuinfo.h deleted file mode 100644 index 72acbdd8ba..0000000000 --- a/Externals/SDL/Include_1.2/SDL_cpuinfo.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* CPU feature detection for SDL */ - -#ifndef _SDL_cpuinfo_h -#define _SDL_cpuinfo_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This function returns true if the CPU has the RDTSC instruction - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); - -/* This function returns true if the CPU has MMX features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); - -/* This function returns true if the CPU has MMX Ext. features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasMMXExt(void); - -/* This function returns true if the CPU has 3DNow features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); - -/* This function returns true if the CPU has 3DNow! Ext. features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNowExt(void); - -/* This function returns true if the CPU has SSE features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); - -/* This function returns true if the CPU has SSE2 features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); - -/* This function returns true if the CPU has AltiVec features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_cpuinfo_h */ diff --git a/Externals/SDL/Include_1.2/SDL_endian.h b/Externals/SDL/Include_1.2/SDL_endian.h deleted file mode 100644 index 8f8db4ccae..0000000000 --- a/Externals/SDL/Include_1.2/SDL_endian.h +++ /dev/null @@ -1,194 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Functions for reading and writing endian-specific values */ - -#ifndef _SDL_endian_h -#define _SDL_endian_h - -#include "SDL_stdinc.h" - -/* The two types of endianness */ -#define SDL_LIL_ENDIAN 1234 -#define SDL_BIG_ENDIAN 4321 - -#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ -#if defined(__hppa__) || \ - defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ - (defined(__MIPS__) && defined(__MISPEB__)) || \ - defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ - defined(__sparc__) -#define SDL_BYTEORDER SDL_BIG_ENDIAN -#else -#define SDL_BYTEORDER SDL_LIL_ENDIAN -#endif -#endif /* !SDL_BYTEORDER */ - - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Use inline functions for compilers that support them, and static - functions for those that do not. Because these functions become - static for compilers that do not support inline functions, this - header should only be included in files that actually use them. -*/ -#if defined(__GNUC__) && defined(__i386__) && \ - !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - __asm__("xchgb %b0,%h0" : "=q" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - __asm__("xchgb %b0,%h0" : "=Q" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - Uint16 result; - - __asm__("rlwimi %0,%2,8,16,23" : "=&r" (result) : "0" (x >> 8), "r" (x)); - return result; -} -#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) -static __inline__ Uint16 SDL_Swap16(Uint16 x) -{ - __asm__("rorw #8,%0" : "=d" (x) : "0" (x) : "cc"); - return x; -} -#else -static __inline__ Uint16 SDL_Swap16(Uint16 x) { - return((x<<8)|(x>>8)); -} -#endif - -#if defined(__GNUC__) && defined(__i386__) && \ - !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - __asm__("bswap %0" : "=r" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - __asm__("bswapl %0" : "=r" (x) : "0" (x)); - return x; -} -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - Uint32 result; - - __asm__("rlwimi %0,%2,24,16,23" : "=&r" (result) : "0" (x>>24), "r" (x)); - __asm__("rlwimi %0,%2,8,8,15" : "=&r" (result) : "0" (result), "r" (x)); - __asm__("rlwimi %0,%2,24,0,7" : "=&r" (result) : "0" (result), "r" (x)); - return result; -} -#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) -static __inline__ Uint32 SDL_Swap32(Uint32 x) -{ - __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0" : "=d" (x) : "0" (x) : "cc"); - return x; -} -#else -static __inline__ Uint32 SDL_Swap32(Uint32 x) { - return((x<<24)|((x<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|(x>>24)); -} -#endif - -#ifdef SDL_HAS_64BIT_TYPE -#if defined(__GNUC__) && defined(__i386__) && \ - !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) -static __inline__ Uint64 SDL_Swap64(Uint64 x) -{ - union { - struct { Uint32 a,b; } s; - Uint64 u; - } v; - v.u = x; - __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" - : "=r" (v.s.a), "=r" (v.s.b) - : "0" (v.s.a), "1" (v.s.b)); - return v.u; -} -#elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint64 SDL_Swap64(Uint64 x) -{ - __asm__("bswapq %0" : "=r" (x) : "0" (x)); - return x; -} -#else -static __inline__ Uint64 SDL_Swap64(Uint64 x) -{ - Uint32 hi, lo; - - /* Separate into high and low 32-bit values and swap them */ - lo = (Uint32)(x&0xFFFFFFFF); - x >>= 32; - hi = (Uint32)(x&0xFFFFFFFF); - x = SDL_Swap32(lo); - x <<= 32; - x |= SDL_Swap32(hi); - return(x); -} -#endif -#else -/* This is mainly to keep compilers from complaining in SDL code. - If there is no real 64-bit datatype, then compilers will complain about - the fake 64-bit datatype that SDL provides when it compiles user code. -*/ -#define SDL_Swap64(X) (X) -#endif /* SDL_HAS_64BIT_TYPE */ - - -/* Byteswap item from the specified endianness to the native endianness */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define SDL_SwapLE16(X) (X) -#define SDL_SwapLE32(X) (X) -#define SDL_SwapLE64(X) (X) -#define SDL_SwapBE16(X) SDL_Swap16(X) -#define SDL_SwapBE32(X) SDL_Swap32(X) -#define SDL_SwapBE64(X) SDL_Swap64(X) -#else -#define SDL_SwapLE16(X) SDL_Swap16(X) -#define SDL_SwapLE32(X) SDL_Swap32(X) -#define SDL_SwapLE64(X) SDL_Swap64(X) -#define SDL_SwapBE16(X) (X) -#define SDL_SwapBE32(X) (X) -#define SDL_SwapBE64(X) (X) -#endif - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_endian_h */ diff --git a/Externals/SDL/Include_1.2/SDL_error.h b/Externals/SDL/Include_1.2/SDL_error.h deleted file mode 100644 index 26d6bfaef1..0000000000 --- a/Externals/SDL/Include_1.2/SDL_error.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Simple error message routines for SDL */ - -#ifndef _SDL_error_h -#define _SDL_error_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Public functions */ -extern DECLSPEC void SDLCALL SDL_SetError(const char *fmt, ...); -extern DECLSPEC char * SDLCALL SDL_GetError(void); -extern DECLSPEC void SDLCALL SDL_ClearError(void); - -/* Private error message function - used internally */ -#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) -#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) -typedef enum { - SDL_ENOMEM, - SDL_EFREAD, - SDL_EFWRITE, - SDL_EFSEEK, - SDL_UNSUPPORTED, - SDL_LASTERROR -} SDL_errorcode; -extern DECLSPEC void SDLCALL SDL_Error(SDL_errorcode code); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_error_h */ diff --git a/Externals/SDL/Include_1.2/SDL_events.h b/Externals/SDL/Include_1.2/SDL_events.h deleted file mode 100644 index 9fe918c7be..0000000000 --- a/Externals/SDL/Include_1.2/SDL_events.h +++ /dev/null @@ -1,337 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL event handling */ - -#ifndef _SDL_events_h -#define _SDL_events_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_active.h" -#include "SDL_keyboard.h" -#include "SDL_mouse.h" -#include "SDL_joystick.h" -#include "SDL_quit.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* General keyboard/mouse state definitions */ -#define SDL_RELEASED 0 -#define SDL_PRESSED 1 - -/* Event enumerations */ -typedef enum { - SDL_NOEVENT = 0, /* Unused (do not remove) */ - SDL_ACTIVEEVENT, /* Application loses/gains visibility */ - SDL_KEYDOWN, /* Keys pressed */ - SDL_KEYUP, /* Keys released */ - SDL_MOUSEMOTION, /* Mouse moved */ - SDL_MOUSEBUTTONDOWN, /* Mouse button pressed */ - SDL_MOUSEBUTTONUP, /* Mouse button released */ - SDL_JOYAXISMOTION, /* Joystick axis motion */ - SDL_JOYBALLMOTION, /* Joystick trackball motion */ - SDL_JOYHATMOTION, /* Joystick hat position change */ - SDL_JOYBUTTONDOWN, /* Joystick button pressed */ - SDL_JOYBUTTONUP, /* Joystick button released */ - SDL_QUIT, /* User-requested quit */ - SDL_SYSWMEVENT, /* System specific event */ - SDL_EVENT_RESERVEDA, /* Reserved for future use.. */ - SDL_EVENT_RESERVEDB, /* Reserved for future use.. */ - SDL_VIDEORESIZE, /* User resized video mode */ - SDL_VIDEOEXPOSE, /* Screen needs to be redrawn */ - SDL_EVENT_RESERVED2, /* Reserved for future use.. */ - SDL_EVENT_RESERVED3, /* Reserved for future use.. */ - SDL_EVENT_RESERVED4, /* Reserved for future use.. */ - SDL_EVENT_RESERVED5, /* Reserved for future use.. */ - SDL_EVENT_RESERVED6, /* Reserved for future use.. */ - SDL_EVENT_RESERVED7, /* Reserved for future use.. */ - /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ - SDL_USEREVENT = 24, - /* This last event is only for bounding internal arrays - It is the number of bits in the event mask datatype -- Uint32 - */ - SDL_NUMEVENTS = 32 -} SDL_EventType; - -/* Predefined event masks */ -#define SDL_EVENTMASK(X) (1<<(X)) -typedef enum { - SDL_ACTIVEEVENTMASK = SDL_EVENTMASK(SDL_ACTIVEEVENT), - SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN), - SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP), - SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN)| - SDL_EVENTMASK(SDL_KEYUP), - SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION), - SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN), - SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP), - SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION)| - SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN)| - SDL_EVENTMASK(SDL_MOUSEBUTTONUP), - SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION), - SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION), - SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION), - SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN), - SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP), - SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION)| - SDL_EVENTMASK(SDL_JOYBALLMOTION)| - SDL_EVENTMASK(SDL_JOYHATMOTION)| - SDL_EVENTMASK(SDL_JOYBUTTONDOWN)| - SDL_EVENTMASK(SDL_JOYBUTTONUP), - SDL_VIDEORESIZEMASK = SDL_EVENTMASK(SDL_VIDEORESIZE), - SDL_VIDEOEXPOSEMASK = SDL_EVENTMASK(SDL_VIDEOEXPOSE), - SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT), - SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT) -} SDL_EventMask ; -#define SDL_ALLEVENTS 0xFFFFFFFF - -/* Application visibility event structure */ -typedef struct SDL_ActiveEvent { - Uint8 type; /* SDL_ACTIVEEVENT */ - Uint8 gain; /* Whether given states were gained or lost (1/0) */ - Uint8 state; /* A mask of the focus states */ -} SDL_ActiveEvent; - -/* Keyboard event structure */ -typedef struct SDL_KeyboardEvent { - Uint8 type; /* SDL_KEYDOWN or SDL_KEYUP */ - Uint8 which; /* The keyboard device index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ - SDL_keysym keysym; -} SDL_KeyboardEvent; - -/* Mouse motion event structure */ -typedef struct SDL_MouseMotionEvent { - Uint8 type; /* SDL_MOUSEMOTION */ - Uint8 which; /* The mouse device index */ - Uint8 state; /* The current button state */ - Uint16 x, y; /* The X/Y coordinates of the mouse */ - Sint16 xrel; /* The relative motion in the X direction */ - Sint16 yrel; /* The relative motion in the Y direction */ -} SDL_MouseMotionEvent; - -/* Mouse button event structure */ -typedef struct SDL_MouseButtonEvent { - Uint8 type; /* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ - Uint8 which; /* The mouse device index */ - Uint8 button; /* The mouse button index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ - Uint16 x, y; /* The X/Y coordinates of the mouse at press time */ -} SDL_MouseButtonEvent; - -/* Joystick axis motion event structure */ -typedef struct SDL_JoyAxisEvent { - Uint8 type; /* SDL_JOYAXISMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 axis; /* The joystick axis index */ - Sint16 value; /* The axis value (range: -32768 to 32767) */ -} SDL_JoyAxisEvent; - -/* Joystick trackball motion event structure */ -typedef struct SDL_JoyBallEvent { - Uint8 type; /* SDL_JOYBALLMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 ball; /* The joystick trackball index */ - Sint16 xrel; /* The relative motion in the X direction */ - Sint16 yrel; /* The relative motion in the Y direction */ -} SDL_JoyBallEvent; - -/* Joystick hat position change event structure */ -typedef struct SDL_JoyHatEvent { - Uint8 type; /* SDL_JOYHATMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 hat; /* The joystick hat index */ - Uint8 value; /* The hat position value: - SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP - SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT - SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN - Note that zero means the POV is centered. - */ -} SDL_JoyHatEvent; - -/* Joystick button event structure */ -typedef struct SDL_JoyButtonEvent { - Uint8 type; /* SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ - Uint8 which; /* The joystick device index */ - Uint8 button; /* The joystick button index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ -} SDL_JoyButtonEvent; - -/* The "window resized" event - When you get this event, you are responsible for setting a new video - mode with the new width and height. - */ -typedef struct SDL_ResizeEvent { - Uint8 type; /* SDL_VIDEORESIZE */ - int w; /* New width */ - int h; /* New height */ -} SDL_ResizeEvent; - -/* The "screen redraw" event */ -typedef struct SDL_ExposeEvent { - Uint8 type; /* SDL_VIDEOEXPOSE */ -} SDL_ExposeEvent; - -/* The "quit requested" event */ -typedef struct SDL_QuitEvent { - Uint8 type; /* SDL_QUIT */ -} SDL_QuitEvent; - -/* A user-defined event type */ -typedef struct SDL_UserEvent { - Uint8 type; /* SDL_USEREVENT through SDL_NUMEVENTS-1 */ - int code; /* User defined event code */ - void *data1; /* User defined data pointer */ - void *data2; /* User defined data pointer */ -} SDL_UserEvent; - -/* If you want to use this event, you should include SDL_syswm.h */ -struct SDL_SysWMmsg; -typedef struct SDL_SysWMmsg SDL_SysWMmsg; -typedef struct SDL_SysWMEvent { - Uint8 type; - SDL_SysWMmsg *msg; -} SDL_SysWMEvent; - -/* General event structure */ -typedef union SDL_Event { - Uint8 type; - SDL_ActiveEvent active; - SDL_KeyboardEvent key; - SDL_MouseMotionEvent motion; - SDL_MouseButtonEvent button; - SDL_JoyAxisEvent jaxis; - SDL_JoyBallEvent jball; - SDL_JoyHatEvent jhat; - SDL_JoyButtonEvent jbutton; - SDL_ResizeEvent resize; - SDL_ExposeEvent expose; - SDL_QuitEvent quit; - SDL_UserEvent user; - SDL_SysWMEvent syswm; -} SDL_Event; - - -/* Function prototypes */ - -/* Pumps the event loop, gathering events from the input devices. - This function updates the event queue and internal input device state. - This should only be run in the thread that sets the video mode. -*/ -extern DECLSPEC void SDLCALL SDL_PumpEvents(void); - -/* Checks the event queue for messages and optionally returns them. - If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to - the back of the event queue. - If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will not - be removed from the queue. - If 'action' is SDL_GETEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will be - removed from the queue. - This function returns the number of events actually stored, or -1 - if there was an error. This function is thread-safe. -*/ -typedef enum { - SDL_ADDEVENT, - SDL_PEEKEVENT, - SDL_GETEVENT -} SDL_eventaction; -/* */ -extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents, - SDL_eventaction action, Uint32 mask); - -/* Polls for currently pending events, and returns 1 if there are any pending - events, or 0 if there are none available. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. - */ -extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event); - -/* Waits indefinitely for the next available event, returning 1, or 0 if there - was an error while waiting for events. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. - */ -extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event); - -/* Add an event to the event queue. - This function returns 0 on success, or -1 if the event queue was full - or there was some other error. - */ -extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event); - -/* - This function sets up a filter to process all events before they - change internal state and are posted to the internal event queue. - - The filter is protypted as: -*/ -typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event); -/* - If the filter returns 1, then the event will be added to the internal queue. - If it returns 0, then the event will be dropped from the queue, but the - internal state will still be updated. This allows selective filtering of - dynamically arriving events. - - WARNING: Be very careful of what you do in the event filter function, as - it may run in a different thread! - - There is one caveat when dealing with the SDL_QUITEVENT event type. The - event filter is only called when the window manager desires to close the - application window. If the event filter returns 1, then the window will - be closed, otherwise the window will remain open if possible. - If the quit event is generated by an interrupt signal, it will bypass the - internal queue and be delivered to the application at the next event poll. -*/ -extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter); - -/* - Return the current event filter - can be used to "chain" filters. - If there is no event filter set, this function returns NULL. -*/ -extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void); - -/* - This function allows you to set the state of processing certain events. - If 'state' is set to SDL_IGNORE, that event will be automatically dropped - from the event queue and will not event be filtered. - If 'state' is set to SDL_ENABLE, that event will be processed normally. - If 'state' is set to SDL_QUERY, SDL_EventState() will return the - current processing state of the specified event. -*/ -#define SDL_QUERY -1 -#define SDL_IGNORE 0 -#define SDL_DISABLE 0 -#define SDL_ENABLE 1 -extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_events_h */ diff --git a/Externals/SDL/Include_1.2/SDL_getenv.h b/Externals/SDL/Include_1.2/SDL_getenv.h deleted file mode 100644 index 853b9ce454..0000000000 --- a/Externals/SDL/Include_1.2/SDL_getenv.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* DEPRECATED */ -#include "SDL_stdinc.h" diff --git a/Externals/SDL/Include_1.2/SDL_joystick.h b/Externals/SDL/Include_1.2/SDL_joystick.h deleted file mode 100644 index e4f72f1a41..0000000000 --- a/Externals/SDL/Include_1.2/SDL_joystick.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL joystick event handling */ - -#ifndef _SDL_joystick_h -#define _SDL_joystick_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system - for joysticks, and load appropriate drivers. -*/ - -/* The joystick structure used to identify an SDL joystick */ -struct _SDL_Joystick; -typedef struct _SDL_Joystick SDL_Joystick; - - -/* Function prototypes */ -/* - * Count the number of joysticks attached to the system - */ -extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); - -/* - * Get the implementation dependent name of a joystick. - * This can be called before any joysticks are opened. - * If no name can be found, this function returns NULL. - */ -extern DECLSPEC const char * SDLCALL SDL_JoystickName(int device_index); - -/* - * Open a joystick for use - the index passed as an argument refers to - * the N'th joystick on the system. This index is the value which will - * identify this joystick in future joystick events. - * - * This function returns a joystick identifier, or NULL if an error occurred. - */ -extern DECLSPEC SDL_Joystick * SDLCALL SDL_JoystickOpen(int device_index); - -/* - * Returns 1 if the joystick has been opened, or 0 if it has not. - */ -extern DECLSPEC int SDLCALL SDL_JoystickOpened(int device_index); - -/* - * Get the device index of an opened joystick. - */ -extern DECLSPEC int SDLCALL SDL_JoystickIndex(SDL_Joystick *joystick); - -/* - * Get the number of general axis controls on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); - -/* - * Get the number of trackballs on a joystick - * Joystick trackballs have only relative motion events associated - * with them and their state cannot be polled. - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); - -/* - * Get the number of POV hats on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); - -/* - * Get the number of buttons on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); - -/* - * Update the current state of the open joysticks. - * This is called automatically by the event loop if any joystick - * events are enabled. - */ -extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); - -/* - * Enable/disable joystick event polling. - * If joystick events are disabled, you must call SDL_JoystickUpdate() - * yourself and check the state of the joystick when you want joystick - * information. - * The state can be one of SDL_QUERY, SDL_ENABLE or SDL_IGNORE. - */ -extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); - -/* - * Get the current state of an axis control on a joystick - * The state is a value ranging from -32768 to 32767. - * The axis indices start at index 0. - */ -extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis); - -/* - * Get the current state of a POV hat on a joystick - * The return value is one of the following positions: - */ -#define SDL_HAT_CENTERED 0x00 -#define SDL_HAT_UP 0x01 -#define SDL_HAT_RIGHT 0x02 -#define SDL_HAT_DOWN 0x04 -#define SDL_HAT_LEFT 0x08 -#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) -#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) -#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) -#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) -/* - * The hat indices start at index 0. - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, int hat); - -/* - * Get the ball axis change since the last poll - * This returns 0, or -1 if you passed it invalid parameters. - * The ball indices start at index 0. - */ -extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, int ball, int *dx, int *dy); - -/* - * Get the current state of a button on a joystick - * The button indices start at index 0. - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, int button); - -/* - * Close a joystick previously opened with SDL_JoystickOpen() - */ -extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_joystick_h */ diff --git a/Externals/SDL/Include_1.2/SDL_keyboard.h b/Externals/SDL/Include_1.2/SDL_keyboard.h deleted file mode 100644 index 1ad7dcaa44..0000000000 --- a/Externals/SDL/Include_1.2/SDL_keyboard.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL keyboard event handling */ - -#ifndef _SDL_keyboard_h -#define _SDL_keyboard_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_keysym.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Keysym structure - - The scancode is hardware dependent, and should not be used by general - applications. If no hardware scancode is available, it will be 0. - - - The 'unicode' translated character is only available when character - translation is enabled by the SDL_EnableUNICODE() API. If non-zero, - this is a UNICODE character corresponding to the keypress. If the - high 9 bits of the character are 0, then this maps to the equivalent - ASCII character: - char ch; - if ( (keysym.unicode & 0xFF80) == 0 ) { - ch = keysym.unicode & 0x7F; - } else { - An international character.. - } - */ -typedef struct SDL_keysym { - Uint8 scancode; /* hardware specific scancode */ - SDLKey sym; /* SDL virtual keysym */ - SDLMod mod; /* current key modifiers */ - Uint16 unicode; /* translated character */ -} SDL_keysym; - -/* This is the mask which refers to all hotkey bindings */ -#define SDL_ALL_HOTKEYS 0xFFFFFFFF - -/* Function prototypes */ -/* - * Enable/Disable UNICODE translation of keyboard input. - * This translation has some overhead, so translation defaults off. - * If 'enable' is 1, translation is enabled. - * If 'enable' is 0, translation is disabled. - * If 'enable' is -1, the translation state is not changed. - * It returns the previous state of keyboard translation. - */ -extern DECLSPEC int SDLCALL SDL_EnableUNICODE(int enable); - -/* - * Enable/Disable keyboard repeat. Keyboard repeat defaults to off. - * 'delay' is the initial delay in ms between the time when a key is - * pressed, and keyboard repeat begins. - * 'interval' is the time in ms between keyboard repeat events. - */ -#define SDL_DEFAULT_REPEAT_DELAY 500 -#define SDL_DEFAULT_REPEAT_INTERVAL 30 -/* - * If 'delay' is set to 0, keyboard repeat is disabled. - */ -extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval); -extern DECLSPEC void SDLCALL SDL_GetKeyRepeat(int *delay, int *interval); - -/* - * Get a snapshot of the current state of the keyboard. - * Returns an array of keystates, indexed by the SDLK_* syms. - * Used: - * Uint8 *keystate = SDL_GetKeyState(NULL); - * if ( keystate[SDLK_RETURN] ) ... is pressed. - */ -extern DECLSPEC Uint8 * SDLCALL SDL_GetKeyState(int *numkeys); - -/* - * Get the current key modifier state - */ -extern DECLSPEC SDLMod SDLCALL SDL_GetModState(void); - -/* - * Set the current key modifier state - * This does not change the keyboard state, only the key modifier flags. - */ -extern DECLSPEC void SDLCALL SDL_SetModState(SDLMod modstate); - -/* - * Get the name of an SDL virtual keysym - */ -extern DECLSPEC char * SDLCALL SDL_GetKeyName(SDLKey key); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_keyboard_h */ diff --git a/Externals/SDL/Include_1.2/SDL_keysym.h b/Externals/SDL/Include_1.2/SDL_keysym.h deleted file mode 100644 index ff44a035f9..0000000000 --- a/Externals/SDL/Include_1.2/SDL_keysym.h +++ /dev/null @@ -1,311 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_keysym_h -#define _SDL_keysym_h - -/* What we really want is a mapping of every raw key on the keyboard. - To support international keyboards, we use the range 0xA1 - 0xFF - as international virtual keycodes. We'll follow in the footsteps of X11... - The names of the keys - */ - -typedef enum { - /* The keyboard syms have been cleverly chosen to map to ASCII */ - SDLK_UNKNOWN = 0, - SDLK_FIRST = 0, - SDLK_BACKSPACE = 8, - SDLK_TAB = 9, - SDLK_CLEAR = 12, - SDLK_RETURN = 13, - SDLK_PAUSE = 19, - SDLK_ESCAPE = 27, - SDLK_SPACE = 32, - SDLK_EXCLAIM = 33, - SDLK_QUOTEDBL = 34, - SDLK_HASH = 35, - SDLK_DOLLAR = 36, - SDLK_AMPERSAND = 38, - SDLK_QUOTE = 39, - SDLK_LEFTPAREN = 40, - SDLK_RIGHTPAREN = 41, - SDLK_ASTERISK = 42, - SDLK_PLUS = 43, - SDLK_COMMA = 44, - SDLK_MINUS = 45, - SDLK_PERIOD = 46, - SDLK_SLASH = 47, - SDLK_0 = 48, - SDLK_1 = 49, - SDLK_2 = 50, - SDLK_3 = 51, - SDLK_4 = 52, - SDLK_5 = 53, - SDLK_6 = 54, - SDLK_7 = 55, - SDLK_8 = 56, - SDLK_9 = 57, - SDLK_COLON = 58, - SDLK_SEMICOLON = 59, - SDLK_LESS = 60, - SDLK_EQUALS = 61, - SDLK_GREATER = 62, - SDLK_QUESTION = 63, - SDLK_AT = 64, - /* - Skip uppercase letters - */ - SDLK_LEFTBRACKET = 91, - SDLK_BACKSLASH = 92, - SDLK_RIGHTBRACKET = 93, - SDLK_CARET = 94, - SDLK_UNDERSCORE = 95, - SDLK_BACKQUOTE = 96, - SDLK_a = 97, - SDLK_b = 98, - SDLK_c = 99, - SDLK_d = 100, - SDLK_e = 101, - SDLK_f = 102, - SDLK_g = 103, - SDLK_h = 104, - SDLK_i = 105, - SDLK_j = 106, - SDLK_k = 107, - SDLK_l = 108, - SDLK_m = 109, - SDLK_n = 110, - SDLK_o = 111, - SDLK_p = 112, - SDLK_q = 113, - SDLK_r = 114, - SDLK_s = 115, - SDLK_t = 116, - SDLK_u = 117, - SDLK_v = 118, - SDLK_w = 119, - SDLK_x = 120, - SDLK_y = 121, - SDLK_z = 122, - SDLK_DELETE = 127, - /* End of ASCII mapped keysyms */ - - /* International keyboard syms */ - SDLK_WORLD_0 = 160, /* 0xA0 */ - SDLK_WORLD_1 = 161, - SDLK_WORLD_2 = 162, - SDLK_WORLD_3 = 163, - SDLK_WORLD_4 = 164, - SDLK_WORLD_5 = 165, - SDLK_WORLD_6 = 166, - SDLK_WORLD_7 = 167, - SDLK_WORLD_8 = 168, - SDLK_WORLD_9 = 169, - SDLK_WORLD_10 = 170, - SDLK_WORLD_11 = 171, - SDLK_WORLD_12 = 172, - SDLK_WORLD_13 = 173, - SDLK_WORLD_14 = 174, - SDLK_WORLD_15 = 175, - SDLK_WORLD_16 = 176, - SDLK_WORLD_17 = 177, - SDLK_WORLD_18 = 178, - SDLK_WORLD_19 = 179, - SDLK_WORLD_20 = 180, - SDLK_WORLD_21 = 181, - SDLK_WORLD_22 = 182, - SDLK_WORLD_23 = 183, - SDLK_WORLD_24 = 184, - SDLK_WORLD_25 = 185, - SDLK_WORLD_26 = 186, - SDLK_WORLD_27 = 187, - SDLK_WORLD_28 = 188, - SDLK_WORLD_29 = 189, - SDLK_WORLD_30 = 190, - SDLK_WORLD_31 = 191, - SDLK_WORLD_32 = 192, - SDLK_WORLD_33 = 193, - SDLK_WORLD_34 = 194, - SDLK_WORLD_35 = 195, - SDLK_WORLD_36 = 196, - SDLK_WORLD_37 = 197, - SDLK_WORLD_38 = 198, - SDLK_WORLD_39 = 199, - SDLK_WORLD_40 = 200, - SDLK_WORLD_41 = 201, - SDLK_WORLD_42 = 202, - SDLK_WORLD_43 = 203, - SDLK_WORLD_44 = 204, - SDLK_WORLD_45 = 205, - SDLK_WORLD_46 = 206, - SDLK_WORLD_47 = 207, - SDLK_WORLD_48 = 208, - SDLK_WORLD_49 = 209, - SDLK_WORLD_50 = 210, - SDLK_WORLD_51 = 211, - SDLK_WORLD_52 = 212, - SDLK_WORLD_53 = 213, - SDLK_WORLD_54 = 214, - SDLK_WORLD_55 = 215, - SDLK_WORLD_56 = 216, - SDLK_WORLD_57 = 217, - SDLK_WORLD_58 = 218, - SDLK_WORLD_59 = 219, - SDLK_WORLD_60 = 220, - SDLK_WORLD_61 = 221, - SDLK_WORLD_62 = 222, - SDLK_WORLD_63 = 223, - SDLK_WORLD_64 = 224, - SDLK_WORLD_65 = 225, - SDLK_WORLD_66 = 226, - SDLK_WORLD_67 = 227, - SDLK_WORLD_68 = 228, - SDLK_WORLD_69 = 229, - SDLK_WORLD_70 = 230, - SDLK_WORLD_71 = 231, - SDLK_WORLD_72 = 232, - SDLK_WORLD_73 = 233, - SDLK_WORLD_74 = 234, - SDLK_WORLD_75 = 235, - SDLK_WORLD_76 = 236, - SDLK_WORLD_77 = 237, - SDLK_WORLD_78 = 238, - SDLK_WORLD_79 = 239, - SDLK_WORLD_80 = 240, - SDLK_WORLD_81 = 241, - SDLK_WORLD_82 = 242, - SDLK_WORLD_83 = 243, - SDLK_WORLD_84 = 244, - SDLK_WORLD_85 = 245, - SDLK_WORLD_86 = 246, - SDLK_WORLD_87 = 247, - SDLK_WORLD_88 = 248, - SDLK_WORLD_89 = 249, - SDLK_WORLD_90 = 250, - SDLK_WORLD_91 = 251, - SDLK_WORLD_92 = 252, - SDLK_WORLD_93 = 253, - SDLK_WORLD_94 = 254, - SDLK_WORLD_95 = 255, /* 0xFF */ - - /* Numeric keypad */ - SDLK_KP0 = 256, - SDLK_KP1 = 257, - SDLK_KP2 = 258, - SDLK_KP3 = 259, - SDLK_KP4 = 260, - SDLK_KP5 = 261, - SDLK_KP6 = 262, - SDLK_KP7 = 263, - SDLK_KP8 = 264, - SDLK_KP9 = 265, - SDLK_KP_PERIOD = 266, - SDLK_KP_DIVIDE = 267, - SDLK_KP_MULTIPLY = 268, - SDLK_KP_MINUS = 269, - SDLK_KP_PLUS = 270, - SDLK_KP_ENTER = 271, - SDLK_KP_EQUALS = 272, - - /* Arrows + Home/End pad */ - SDLK_UP = 273, - SDLK_DOWN = 274, - SDLK_RIGHT = 275, - SDLK_LEFT = 276, - SDLK_INSERT = 277, - SDLK_HOME = 278, - SDLK_END = 279, - SDLK_PAGEUP = 280, - SDLK_PAGEDOWN = 281, - - /* Function keys */ - SDLK_F1 = 282, - SDLK_F2 = 283, - SDLK_F3 = 284, - SDLK_F4 = 285, - SDLK_F5 = 286, - SDLK_F6 = 287, - SDLK_F7 = 288, - SDLK_F8 = 289, - SDLK_F9 = 290, - SDLK_F10 = 291, - SDLK_F11 = 292, - SDLK_F12 = 293, - SDLK_F13 = 294, - SDLK_F14 = 295, - SDLK_F15 = 296, - - /* Key state modifier keys */ - SDLK_NUMLOCK = 300, - SDLK_CAPSLOCK = 301, - SDLK_SCROLLOCK = 302, - SDLK_RSHIFT = 303, - SDLK_LSHIFT = 304, - SDLK_RCTRL = 305, - SDLK_LCTRL = 306, - SDLK_RALT = 307, - SDLK_LALT = 308, - SDLK_RMETA = 309, - SDLK_LMETA = 310, - SDLK_LSUPER = 311, /* Left "Windows" key */ - SDLK_RSUPER = 312, /* Right "Windows" key */ - SDLK_MODE = 313, /* "Alt Gr" key */ - SDLK_COMPOSE = 314, /* Multi-key compose key */ - - /* Miscellaneous function keys */ - SDLK_HELP = 315, - SDLK_PRINT = 316, - SDLK_SYSREQ = 317, - SDLK_BREAK = 318, - SDLK_MENU = 319, - SDLK_POWER = 320, /* Power Macintosh power key */ - SDLK_EURO = 321, /* Some european keyboards */ - SDLK_UNDO = 322, /* Atari keyboard has Undo */ - - /* Add any other keys here */ - - SDLK_LAST -} SDLKey; - -/* Enumeration of valid key mods (possibly OR'd together) */ -typedef enum { - KMOD_NONE = 0x0000, - KMOD_LSHIFT= 0x0001, - KMOD_RSHIFT= 0x0002, - KMOD_LCTRL = 0x0040, - KMOD_RCTRL = 0x0080, - KMOD_LALT = 0x0100, - KMOD_RALT = 0x0200, - KMOD_LMETA = 0x0400, - KMOD_RMETA = 0x0800, - KMOD_NUM = 0x1000, - KMOD_CAPS = 0x2000, - KMOD_MODE = 0x4000, - KMOD_RESERVED = 0x8000 -} SDLMod; - -#define KMOD_CTRL (KMOD_LCTRL|KMOD_RCTRL) -#define KMOD_SHIFT (KMOD_LSHIFT|KMOD_RSHIFT) -#define KMOD_ALT (KMOD_LALT|KMOD_RALT) -#define KMOD_META (KMOD_LMETA|KMOD_RMETA) - -#endif /* _SDL_keysym_h */ diff --git a/Externals/SDL/Include_1.2/SDL_loadso.h b/Externals/SDL/Include_1.2/SDL_loadso.h deleted file mode 100644 index ce96449494..0000000000 --- a/Externals/SDL/Include_1.2/SDL_loadso.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent library loading routines */ - -/* Some things to keep in mind: - - These functions only work on C function names. Other languages may - have name mangling and intrinsic language support that varies from - compiler to compiler. - - Make sure you declare your function pointers with the same calling - convention as the actual library function. Your code will crash - mysteriously if you do not do this. - - Avoid namespace collisions. If you load a symbol from the library, - it is not defined whether or not it goes into the global symbol - namespace for the application. If it does and it conflicts with - symbols in your code or other shared libraries, you will not get - the results you expect. :) -*/ - - -#ifndef _SDL_loadso_h -#define _SDL_loadso_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This function dynamically loads a shared object and returns a pointer - * to the object handle (or NULL if there was an error). - * The 'sofile' parameter is a system dependent name of the object file. - */ -extern DECLSPEC void * SDLCALL SDL_LoadObject(const char *sofile); - -/* Given an object handle, this function looks up the address of the - * named function in the shared object and returns it. This address - * is no longer valid after calling SDL_UnloadObject(). - */ -extern DECLSPEC void * SDLCALL SDL_LoadFunction(void *handle, const char *name); - -/* Unload a shared object from memory */ -extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_loadso_h */ diff --git a/Externals/SDL/Include_1.2/SDL_main.h b/Externals/SDL/Include_1.2/SDL_main.h deleted file mode 100644 index cf8b728dc3..0000000000 --- a/Externals/SDL/Include_1.2/SDL_main.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_main_h -#define _SDL_main_h - -#include "SDL_stdinc.h" - -/* Redefine main() on Win32 and MacOS so that it is called by winmain.c */ - -#if defined(__WIN32__) || \ - (defined(__MWERKS__) && !defined(__BEOS__)) || \ - defined(__MACOS__) || defined(__MACOSX__) || \ - defined(__SYMBIAN32__) || defined(QWS) - -#ifdef __cplusplus -#define C_LINKAGE "C" -#else -#define C_LINKAGE -#endif /* __cplusplus */ - -/* The application's main() function must be called with C linkage, - and should be declared like this: -#ifdef __cplusplus -extern "C" -#endif - int main(int argc, char *argv[]) - { - } - */ -#define main SDL_main - -/* The prototype for the application's main() function */ -extern C_LINKAGE int SDL_main(int argc, char *argv[]); - - -/* From the SDL library code -- needed for registering the app on Win32 */ -#ifdef __WIN32__ - -#include "begin_code.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* This should be called from your WinMain() function, if any */ -extern DECLSPEC void SDLCALL SDL_SetModuleHandle(void *hInst); -/* This can also be called, but is no longer necessary */ -extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, void *hInst); -/* This can also be called, but is no longer necessary (SDL_Quit calls it) */ -extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); -#ifdef __cplusplus -} -#endif -#include "close_code.h" -#endif - -/* From the SDL library code -- needed for registering QuickDraw on MacOS */ -#if defined(__MACOS__) - -#include "begin_code.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Forward declaration so we don't need to include QuickDraw.h */ -struct QDGlobals; - -/* This should be called from your main() function, if any */ -extern DECLSPEC void SDLCALL SDL_InitQuickDraw(struct QDGlobals *the_qd); - -#ifdef __cplusplus -} -#endif -#include "close_code.h" -#endif - -#endif /* Need to redefine main()? */ - -#endif /* _SDL_main_h */ diff --git a/Externals/SDL/Include_1.2/SDL_mouse.h b/Externals/SDL/Include_1.2/SDL_mouse.h deleted file mode 100644 index 019497fbb1..0000000000 --- a/Externals/SDL/Include_1.2/SDL_mouse.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL mouse event handling */ - -#ifndef _SDL_mouse_h -#define _SDL_mouse_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct WMcursor WMcursor; /* Implementation dependent */ -typedef struct SDL_Cursor { - SDL_Rect area; /* The area of the mouse cursor */ - Sint16 hot_x, hot_y; /* The "tip" of the cursor */ - Uint8 *data; /* B/W cursor data */ - Uint8 *mask; /* B/W cursor mask */ - Uint8 *save[2]; /* Place to save cursor area */ - WMcursor *wm_cursor; /* Window-manager cursor */ -} SDL_Cursor; - -/* Function prototypes */ -/* - * Retrieve the current state of the mouse. - * The current button state is returned as a button bitmask, which can - * be tested using the SDL_BUTTON(X) macros, and x and y are set to the - * current mouse cursor position. You can pass NULL for either x or y. - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetMouseState(int *x, int *y); - -/* - * Retrieve the current state of the mouse. - * The current button state is returned as a button bitmask, which can - * be tested using the SDL_BUTTON(X) macros, and x and y are set to the - * mouse deltas since the last call to SDL_GetRelativeMouseState(). - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); - -/* - * Set the position of the mouse cursor (generates a mouse motion event) - */ -extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y); - -/* - * Create a cursor using the specified data and mask (in MSB format). - * The cursor width must be a multiple of 8 bits. - * - * The cursor is created in black and white according to the following: - * data mask resulting pixel on screen - * 0 1 White - * 1 1 Black - * 0 0 Transparent - * 1 0 Inverted color if possible, black if not. - * - * Cursors created with this function must be freed with SDL_FreeCursor(). - */ -extern DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor - (Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y); - -/* - * Set the currently active cursor to the specified one. - * If the cursor is currently visible, the change will be immediately - * represented on the display. - */ -extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor *cursor); - -/* - * Returns the currently active cursor. - */ -extern DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void); - -/* - * Deallocates a cursor created with SDL_CreateCursor(). - */ -extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor *cursor); - -/* - * Toggle whether or not the cursor is shown on the screen. - * The cursor start off displayed, but can be turned off. - * SDL_ShowCursor() returns 1 if the cursor was being displayed - * before the call, or 0 if it was not. You can query the current - * state by passing a 'toggle' value of -1. - */ -extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); - -/* Used as a mask when testing buttons in buttonstate - Button 1: Left mouse button - Button 2: Middle mouse button - Button 3: Right mouse button - Button 4: Mouse wheel up (may also be a real button) - Button 5: Mouse wheel down (may also be a real button) - */ -#define SDL_BUTTON(X) (1 << ((X)-1)) -#define SDL_BUTTON_LEFT 1 -#define SDL_BUTTON_MIDDLE 2 -#define SDL_BUTTON_RIGHT 3 -#define SDL_BUTTON_WHEELUP 4 -#define SDL_BUTTON_WHEELDOWN 5 -#define SDL_BUTTON_X1 6 -#define SDL_BUTTON_X2 7 -#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) -#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) -#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) -#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) -#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_mouse_h */ diff --git a/Externals/SDL/Include_1.2/SDL_mutex.h b/Externals/SDL/Include_1.2/SDL_mutex.h deleted file mode 100644 index 00165281de..0000000000 --- a/Externals/SDL/Include_1.2/SDL_mutex.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_mutex_h -#define _SDL_mutex_h - -/* Functions to provide thread synchronization primitives - - These are independent of the other SDL routines. -*/ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Synchronization functions which can time out return this value - if they time out. -*/ -#define SDL_MUTEX_TIMEDOUT 1 - -/* This is the timeout value which corresponds to never time out */ -#define SDL_MUTEX_MAXWAIT (~(Uint32)0) - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Mutex functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL mutex structure, defined in SDL_mutex.c */ -struct SDL_mutex; -typedef struct SDL_mutex SDL_mutex; - -/* Create a mutex, initialized unlocked */ -extern DECLSPEC SDL_mutex * SDLCALL SDL_CreateMutex(void); - -/* Lock the mutex (Returns 0, or -1 on error) */ -#define SDL_LockMutex(m) SDL_mutexP(m) -extern DECLSPEC int SDLCALL SDL_mutexP(SDL_mutex *mutex); - -/* Unlock the mutex (Returns 0, or -1 on error) - It is an error to unlock a mutex that has not been locked by - the current thread, and doing so results in undefined behavior. - */ -#define SDL_UnlockMutex(m) SDL_mutexV(m) -extern DECLSPEC int SDLCALL SDL_mutexV(SDL_mutex *mutex); - -/* Destroy a mutex */ -extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex *mutex); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Semaphore functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL semaphore structure, defined in SDL_sem.c */ -struct SDL_semaphore; -typedef struct SDL_semaphore SDL_sem; - -/* Create a semaphore, initialized with value, returns NULL on failure. */ -extern DECLSPEC SDL_sem * SDLCALL SDL_CreateSemaphore(Uint32 initial_value); - -/* Destroy a semaphore */ -extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem *sem); - -/* This function suspends the calling thread until the semaphore pointed - * to by sem has a positive count. It then atomically decreases the semaphore - * count. - */ -extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem *sem); - -/* Non-blocking variant of SDL_SemWait(), returns 0 if the wait succeeds, - SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error. -*/ -extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem *sem); - -/* Variant of SDL_SemWait() with a timeout in milliseconds, returns 0 if - the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in - the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ -extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 ms); - -/* Atomically increases the semaphore's count (not blocking), returns 0, - or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem *sem); - -/* Returns the current count of the semaphore */ -extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem *sem); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Condition variable functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL condition variable structure, defined in SDL_cond.c */ -struct SDL_cond; -typedef struct SDL_cond SDL_cond; - -/* Create a condition variable */ -extern DECLSPEC SDL_cond * SDLCALL SDL_CreateCond(void); - -/* Destroy a condition variable */ -extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond *cond); - -/* Restart one of the threads that are waiting on the condition variable, - returns 0 or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond *cond); - -/* Restart all threads that are waiting on the condition variable, - returns 0 or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond *cond); - -/* Wait on the condition variable, unlocking the provided mutex. - The mutex must be locked before entering this function! - The mutex is re-locked once the condition variable is signaled. - Returns 0 when it is signaled, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond *cond, SDL_mutex *mut); - -/* Waits for at most 'ms' milliseconds, and returns 0 if the condition - variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not - signaled in the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ -extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex, Uint32 ms); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_mutex_h */ diff --git a/Externals/SDL/Include_1.2/SDL_opengl.h b/Externals/SDL/Include_1.2/SDL_opengl.h deleted file mode 100644 index 36c0a3099e..0000000000 --- a/Externals/SDL/Include_1.2/SDL_opengl.h +++ /dev/null @@ -1,6551 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This is a simple file to encapsulate the OpenGL API headers */ - -#include "SDL_config.h" - -#ifdef __WIN32__ -#define WIN32_LEAN_AND_MEAN -#ifndef NOMINMAX -#define NOMINMAX /* Don't defined min() and max() */ -#endif -#include -#endif -#ifndef NO_SDL_GLEXT -#define __glext_h_ /* Don't let gl.h include glext.h */ -#endif -#if defined(__MACOSX__) -#include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ -#elif defined(__MACOS__) -#include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ -#else -#include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ -#endif -#ifndef NO_SDL_GLEXT -#undef __glext_h_ -#endif - -/* This file taken from "GLext.h" from the Jeff Molofee OpenGL tutorials. - It is included here because glext.h is not available on some systems. - If you don't want this version included, simply define "NO_SDL_GLEXT" - */ -#ifndef NO_SDL_GLEXT -#if !defined(__glext_h_) && !defined(GL_GLEXT_LEGACY) -#define __glext_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** License Applicability. Except to the extent portions of this file are -** made subject to an alternative license as permitted in the SGI Free -** Software License B, Version 1.1 (the "License"), the contents of this -** file are subject only to the provisions of the License. You may not use -** this file except in compliance with the License. You may obtain a copy -** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 -** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: -** -** http://oss.sgi.com/projects/FreeB -** -** Note that, as provided in the License, the Software is distributed on an -** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS -** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND -** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A -** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. -** -** Original Code. The Original Code is: OpenGL Sample Implementation, -** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -** Inc. The Original Code is Copyright (c) 1991-2004 Silicon Graphics, Inc. -** Copyright in any portions created by third parties is as indicated -** elsewhere herein. All Rights Reserved. -** -** Additional Notice Provisions: This software was created using the -** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has -** not been independently verified as being compliant with the OpenGL(R) -** version 1.2.1 Specification. -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/*************************************************************/ - -/* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated 2005/06/20 */ -/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ -#define GL_GLEXT_VERSION 29 - -#ifndef GL_VERSION_1_2 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_RESCALE_NORMAL 0x803A -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif - -#ifndef GL_ARB_imaging -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#endif - -#ifndef GL_VERSION_1_3 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#endif - -#ifndef GL_VERSION_1_4 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#endif - -#ifndef GL_VERSION_1_5 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE -#define GL_FOG_COORD GL_FOG_COORDINATE -#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE -#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE -#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER -#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#define GL_SRC0_RGB GL_SOURCE0_RGB -#define GL_SRC1_RGB GL_SOURCE1_RGB -#define GL_SRC2_RGB GL_SOURCE2_RGB -#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA -#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA -#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA -#endif - -#ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_COORDS 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#endif - -#ifndef GL_ARB_multitexture -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -#endif - -#ifndef GL_ARB_multisample -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#endif - -#ifndef GL_ARB_texture_env_add -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif - -#ifndef GL_ARB_texture_compression -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif - -#ifndef GL_ARB_point_parameters -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif - -#ifndef GL_ARB_shadow -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif - -#ifndef GL_ARB_window_pos -#endif - -#ifndef GL_ARB_vertex_program -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -#endif - -#ifndef GL_ARB_fragment_program -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -#endif - -#ifndef GL_ARB_shader_objects -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#endif - -#ifndef GL_ARB_point_sprite -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_HALF_FLOAT_ARB 0x140B -#endif - -#ifndef GL_ARB_texture_float -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif - -#ifndef GL_EXT_abgr -#define GL_ABGR_EXT 0x8000 -#endif - -#ifndef GL_EXT_blend_color -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif - -#ifndef GL_EXT_texture -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif - -#ifndef GL_EXT_texture3D -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif - -#ifndef GL_EXT_subtexture -#endif - -#ifndef GL_EXT_copy_texture -#endif - -#ifndef GL_EXT_histogram -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif - -#ifndef GL_EXT_convolution -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#endif - -#ifndef GL_SGI_color_matrix -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif - -#ifndef GL_SGI_color_table -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif - -#ifndef GL_SGIS_texture4D -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif - -#ifndef GL_EXT_cmyka -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif - -#ifndef GL_EXT_texture_object -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif - -#ifndef GL_SGIS_multisample -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif - -#ifndef GL_EXT_vertex_array -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#endif - -#ifndef GL_EXT_misc_attribute -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif - -#ifndef GL_SGIX_shadow -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif - -#ifndef GL_EXT_blend_logic_op -#endif - -#ifndef GL_SGIX_interlace -#define GL_INTERLACE_SGIX 0x8094 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif - -#ifndef GL_SGIS_texture_select -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif - -#ifndef GL_EXT_point_parameters -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif - -#ifndef GL_SGIX_instruments -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif - -#ifndef GL_SGIX_framezoom -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#endif - -#ifndef GL_FfdMaskSGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif - -#ifndef GL_SGIX_flush_raster -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif - -#ifndef GL_HP_image_transform -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif - -#ifndef GL_INGR_palette_buffer -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif - -#ifndef GL_EXT_color_subtable -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif - -#ifndef GL_EXT_index_texture -#endif - -#ifndef GL_EXT_index_material -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif - -#ifndef GL_EXT_index_func -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif - -#ifndef GL_WIN_phong_shading -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif - -#ifndef GL_WIN_specular_fog -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif - -#ifndef GL_EXT_light_texture -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -/* reuse GL_FRAGMENT_DEPTH_EXT */ -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif - -#ifndef GL_SGIX_impact_pixel_texture -#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 -#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 -#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 -#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 -#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 -#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 -#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A -#endif - -#ifndef GL_EXT_bgra -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif - -#ifndef GL_SGIX_async -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif - -#ifndef GL_INTEL_texture_scissor -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#endif - -#ifndef GL_HP_occlusion_test -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif - -#ifndef GL_EXT_secondary_color -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif - -#ifndef GL_EXT_multi_draw_arrays -#endif - -#ifndef GL_EXT_fog_coord -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_FOG_SCALE_SGIX 0x81FC -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif - -#ifndef GL_SUNX_constant_data -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif - -#ifndef GL_SUN_global_alpha -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif - -#ifndef GL_SUN_triangle_list -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -#endif - -#ifndef GL_SUN_vertex -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#endif - -#ifndef GL_INGR_color_clamp -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INTERLACE_READ_INGR 0x8568 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif - -#ifndef GL_EXT_texture_cube_map -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif - -#ifndef GL_EXT_texture_env_add -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -#endif - -#ifndef GL_NV_register_combiners -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif - -#ifndef GL_NV_fog_distance -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -/* reuse GL_EYE_PLANE */ -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif - -#ifndef GL_NV_blend_square -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif - -#ifndef GL_MESA_resize_buffers -#endif - -#ifndef GL_MESA_window_pos -#endif - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_CULL_VERTEX_IBM 103050 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -#endif - -#ifndef GL_SGIX_subsample -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif - -#ifndef GL_SGI_depth_pass_instrument -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif - -#ifndef GL_3DFX_tbuffer -#endif - -#ifndef GL_EXT_multisample -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif - -#ifndef GL_SGIX_resample -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif - -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif - -#ifndef GL_NV_evaluators -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif - -#ifndef GL_NV_texture_compression_vtc -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif - -#ifndef GL_NV_texture_shader -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif - -#ifndef GL_NV_vertex_program -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif - -#ifndef GL_OML_interlace -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif - -#ifndef GL_OML_subsample -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif - -#ifndef GL_OML_resample -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -#endif - -#ifndef GL_ATI_element_array -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#endif - -#ifndef GL_SUN_mesh_array -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_DEPTH_CLAMP_NV 0x864F -#endif - -#ifndef GL_NV_occlusion_query -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -#endif - -#ifndef GL_NV_point_sprite -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif - -#ifndef GL_NV_vertex_program1_1 -#endif - -#ifndef GL_EXT_shadow_funcs -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif - -#ifndef GL_APPLE_element_array -#define GL_ELEMENT_ARRAY_APPLE 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A -#endif - -#ifndef GL_APPLE_fence -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_YCBCR_422_APPLE 0x85B9 -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -#ifndef GL_S3_s3tc -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif - -#ifndef GL_ATI_texture_float -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif - -#ifndef GL_NV_float_buffer -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif - -#ifndef GL_NV_fragment_program -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -#endif - -#ifndef GL_NV_half_float -#define GL_HALF_FLOAT_NV 0x140B -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -#endif - -#ifndef GL_NV_primitive_restart -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif - -#ifndef GL_NV_vertex_program2 -#endif - -#ifndef GL_ATI_map_object_buffer -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#endif - -#ifndef GL_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#endif - -#ifndef GL_MESA_pack_invert -#define GL_PACK_INVERT_MESA 0x8758 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif - -#ifndef GL_NV_fragment_program_option -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif - -#ifndef GL_NV_vertex_program2_option -/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ -/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ -#endif - -#ifndef GL_NV_vertex_program3 -/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#endif - -#ifndef GL_GREMEDY_string_marker -#endif - - -/*************************************************************/ - -#include -#ifndef GL_VERSION_2_0 -/* GL type for program/shader text */ -typedef char GLchar; /* native character */ -#endif - -#ifndef GL_VERSION_1_5 -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif - -#ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif - -#ifndef GL_ARB_shader_objects -/* GL types for handling shader object handles and program/shader text */ -typedef char GLcharARB; /* native character */ -typedef unsigned int GLhandleARB; /* shader object handle */ -#endif - -/* GL types for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); -GLAPI void APIENTRY glBlendEquation (GLenum); -GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogram (GLenum); -GLAPI void APIENTRY glResetMinmax (GLenum); -GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum); -GLAPI void APIENTRY glClientActiveTexture (GLenum); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glFogCoordf (GLfloat); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *); -GLAPI void APIENTRY glFogCoordd (GLdouble); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *); -GLAPI void APIENTRY glPointParameteri (GLenum, GLint); -GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *); -GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos2i (GLint, GLint); -GLAPI void APIENTRY glWindowPos2iv (const GLint *); -GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *); -GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3iv (const GLint *); -GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -#endif - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQuery (GLuint); -GLAPI void APIENTRY glBeginQuery (GLenum, GLuint); -GLAPI void APIENTRY glEndQuery (GLenum); -GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *); -GLAPI void APIENTRY glBindBuffer (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint); -GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); -GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); -GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); -GLAPI void APIENTRY glAttachShader (GLuint, GLuint); -GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); -GLAPI void APIENTRY glCompileShader (GLuint); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum); -GLAPI void APIENTRY glDeleteProgram (GLuint); -GLAPI void APIENTRY glDeleteShader (GLuint); -GLAPI void APIENTRY glDetachShader (GLuint, GLuint); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); -GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgram (GLuint); -GLAPI GLboolean APIENTRY glIsShader (GLuint); -GLAPI void APIENTRY glLinkProgram (GLuint); -GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); -GLAPI void APIENTRY glUseProgram (GLuint); -GLAPI void APIENTRY glUniform1f (GLint, GLfloat); -GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1i (GLint, GLint); -GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glValidateProgram (GLuint); -GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#endif - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -#endif - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#endif - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#endif - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *); -GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *); -GLAPI void APIENTRY glWeightivARB (GLint, const GLint *); -GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *); -GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *); -GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexBlendARB (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#endif - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#endif - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#endif - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#endif - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint); -GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint); -GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint); -GLAPI void APIENTRY glEndQueryARB (GLenum); -GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB); -GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat); -GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1iARB (GLint, GLint); -GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#endif - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#endif - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#endif - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#endif - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogramEXT (GLenum); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#endif - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif - -#ifndef GL_EXT_color_matrix -#define GL_EXT_color_matrix 1 -#endif - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#endif - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint); -GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); -GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); -GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif - -#ifndef GL_SGIX_texture_select -#define GL_SGIX_texture_select 1 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#endif - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); -GLAPI void APIENTRY glDeformSGIX (GLbitfield); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#endif - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); -GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); -GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#endif - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#endif - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum); -GLAPI void APIENTRY glTextureLightEXT (GLenum); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#endif - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#endif - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); -GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -#endif - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#endif - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *); -GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *); -GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *); -GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *); -GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *); -GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *); -GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *); -GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_SGIX_fog_scale 1 -#endif - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#endif - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#endif - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#endif - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); -#endif - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#endif - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#endif - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#endif - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#endif - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#endif - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#endif - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#endif - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint); -GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFinishFenceNV (GLuint); -GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *); -GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#endif - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#endif - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint); -GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#endif - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#endif - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#endif - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint); -GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint); -GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *); -GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *); -GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *); -GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *); -GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *); -GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *); -GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort); -GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *); -GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#endif - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#endif - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#endif - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#endif - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -/* This is really a WGL extension, but defines some associated GL enums. - * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. - */ -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#endif - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#endif - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#endif - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#endif - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#endif - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#endif - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#endif - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#endif - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif -#endif /* NO_SDL_GLEXT */ diff --git a/Externals/SDL/Include_1.2/SDL_platform.h b/Externals/SDL/Include_1.2/SDL_platform.h deleted file mode 100644 index 1bfee29ec0..0000000000 --- a/Externals/SDL/Include_1.2/SDL_platform.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Try to get a standard set of platform defines */ - -#ifndef _SDL_platform_h -#define _SDL_platform_h - -#if defined(_AIX) -#undef __AIX__ -#define __AIX__ 1 -#endif -#if defined(__BEOS__) -#undef __BEOS__ -#define __BEOS__ 1 -#endif -#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) -#undef __BSDI__ -#define __BSDI__ 1 -#endif -#if defined(_arch_dreamcast) -#undef __DREAMCAST__ -#define __DREAMCAST__ 1 -#endif -#if defined(__FreeBSD__) || defined(__DragonFly__) -#undef __FREEBSD__ -#define __FREEBSD__ 1 -#endif -#if defined(hpux) || defined(__hpux) || defined(__hpux__) -#undef __HPUX__ -#define __HPUX__ 1 -#endif -#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) -#undef __IRIX__ -#define __IRIX__ 1 -#endif -#if defined(linux) || defined(__linux) || defined(__linux__) -#undef __LINUX__ -#define __LINUX__ 1 -#endif -#if defined(__APPLE__) -#undef __MACOSX__ -#define __MACOSX__ 1 -#elif defined(macintosh) -#undef __MACOS__ -#define __MACOS__ 1 -#endif -#if defined(__NetBSD__) -#undef __NETBSD__ -#define __NETBSD__ 1 -#endif -#if defined(__OpenBSD__) -#undef __OPENBSD__ -#define __OPENBSD__ 1 -#endif -#if defined(__OS2__) -#undef __OS2__ -#define __OS2__ 1 -#endif -#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) -#undef __OSF__ -#define __OSF__ 1 -#endif -#if defined(__QNXNTO__) -#undef __QNXNTO__ -#define __QNXNTO__ 1 -#endif -#if defined(riscos) || defined(__riscos) || defined(__riscos__) -#undef __RISCOS__ -#define __RISCOS__ 1 -#endif -#if defined(__SVR4) -#undef __SOLARIS__ -#define __SOLARIS__ 1 -#endif -#if defined(WIN32) || defined(_WIN32) -#undef __WIN32__ -#define __WIN32__ 1 -#endif - -#endif /* _SDL_platform_h */ diff --git a/Externals/SDL/Include_1.2/SDL_quit.h b/Externals/SDL/Include_1.2/SDL_quit.h deleted file mode 100644 index fcf40fbdda..0000000000 --- a/Externals/SDL/Include_1.2/SDL_quit.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL quit event handling */ - -#ifndef _SDL_quit_h -#define _SDL_quit_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/* - An SDL_QUITEVENT is generated when the user tries to close the application - window. If it is ignored or filtered out, the window will remain open. - If it is not ignored or filtered, it is queued normally and the window - is allowed to close. When the window is closed, screen updates will - complete, but have no effect. - - SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) - and SIGTERM (system termination request), if handlers do not already - exist, that generate SDL_QUITEVENT events as well. There is no way - to determine the cause of an SDL_QUITEVENT, but setting a signal - handler in your application will override the default generation of - quit events for that signal. -*/ - -/* There are no functions directly affecting the quit event */ -#define SDL_QuitRequested() \ - (SDL_PumpEvents(), SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUITMASK)) - -#endif /* _SDL_quit_h */ diff --git a/Externals/SDL/Include_1.2/SDL_rwops.h b/Externals/SDL/Include_1.2/SDL_rwops.h deleted file mode 100644 index 8c177017f5..0000000000 --- a/Externals/SDL/Include_1.2/SDL_rwops.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file provides a general interface for SDL to read and write - data sources. It can easily be extended to files, memory, etc. -*/ - -#ifndef _SDL_rwops_h -#define _SDL_rwops_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This is the read/write operation structure -- very basic */ - -typedef struct SDL_RWops { - /* Seek to 'offset' relative to whence, one of stdio's whence values: - SEEK_SET, SEEK_CUR, SEEK_END - Returns the final offset in the data source. - */ - int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence); - - /* Read up to 'num' objects each of size 'objsize' from the data - source to the area pointed at by 'ptr'. - Returns the number of objects read, or -1 if the read failed. - */ - int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum); - - /* Write exactly 'num' objects each of size 'objsize' from the area - pointed at by 'ptr' to data source. - Returns 'num', or -1 if the write failed. - */ - int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num); - - /* Close and free an allocated SDL_FSops structure */ - int (SDLCALL *close)(struct SDL_RWops *context); - - Uint32 type; - union { -#if defined(__WIN32__) && !defined(__SYMBIAN32__) - struct { - int append; - void *h; - struct { - void *data; - int size; - int left; - } buffer; - } win32io; -#endif -#ifdef HAVE_STDIO_H - struct { - int autoclose; - FILE *fp; - } stdio; -#endif - struct { - Uint8 *base; - Uint8 *here; - Uint8 *stop; - } mem; - struct { - void *data1; - } unknown; - } hidden; - -} SDL_RWops; - - -/* Functions to create SDL_RWops structures from various data sources */ - -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode); - -#ifdef HAVE_STDIO_H -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose); -#endif - -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size); -extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size); - -extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void); -extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area); - -#define RW_SEEK_SET 0 /* Seek from the beginning of data */ -#define RW_SEEK_CUR 1 /* Seek relative to current read point */ -#define RW_SEEK_END 2 /* Seek relative to the end of data */ - -/* Macros to easily read and write from an SDL_RWops structure */ -#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) -#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) -#define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) -#define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) -#define SDL_RWclose(ctx) (ctx)->close(ctx) - - -/* Read an item of the specified endianness and return in native format */ -extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src); -extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops *src); -extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops *src); -extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops *src); -extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops *src); -extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops *src); - -/* Write an item of native format to the specified endianness */ -extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops *dst, Uint16 value); -extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops *dst, Uint16 value); -extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops *dst, Uint32 value); -extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops *dst, Uint32 value); -extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops *dst, Uint64 value); -extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops *dst, Uint64 value); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_rwops_h */ diff --git a/Externals/SDL/Include_1.2/SDL_stdinc.h b/Externals/SDL/Include_1.2/SDL_stdinc.h deleted file mode 100644 index e47c21daff..0000000000 --- a/Externals/SDL/Include_1.2/SDL_stdinc.h +++ /dev/null @@ -1,596 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This is a general header that includes C language support */ - -#ifndef _SDL_stdinc_h -#define _SDL_stdinc_h - -#include "SDL_config.h" - - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_STDIO_H -#include -#endif -#if defined(STDC_HEADERS) -# include -# include -# include -#else -# if defined(HAVE_STDLIB_H) -# include -# elif defined(HAVE_MALLOC_H) -# include -# endif -# if defined(HAVE_STDDEF_H) -# include -# endif -# if defined(HAVE_STDARG_H) -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#if defined(HAVE_INTTYPES_H) -# include -#elif defined(HAVE_STDINT_H) -# include -#endif -#ifdef HAVE_CTYPE_H -# include -#endif -#ifdef HAVE_ICONV_H -# include -#endif - -/* The number of elements in an array */ -#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) -#define SDL_TABLESIZE(table) SDL_arraysize(table) - -/* Basic data types */ -typedef enum SDL_bool { - SDL_FALSE = 0, - SDL_TRUE = 1 -} SDL_bool; - -typedef int8_t Sint8; -typedef uint8_t Uint8; -typedef int16_t Sint16; -typedef uint16_t Uint16; -typedef int32_t Sint32; -typedef uint32_t Uint32; - -#ifdef SDL_HAS_64BIT_TYPE -typedef int64_t Sint64; -#ifndef SYMBIAN32_GCCE -typedef uint64_t Uint64; -#endif -#else -/* This is really just a hack to prevent the compiler from complaining */ -typedef struct { - Uint32 hi; - Uint32 lo; -} Uint64, Sint64; -#endif - -/* Make sure the types really have the right sizes */ -#define SDL_COMPILE_TIME_ASSERT(name, x) \ - typedef int SDL_dummy_ ## name[(x) * 2 - 1] - -SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); -SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); -SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); -SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); -SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); -SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); -SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); -SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); - -/* Check to make sure enums are the size of ints, for structure packing. - For both Watcom C/C++ and Borland C/C++ the compiler option that makes - enums having the size of an int must be enabled. - This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). -*/ -/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */ -#ifdef __MWERKS__ -#pragma enumsalwaysint on -#endif - -typedef enum { - DUMMY_ENUM_VALUE -} SDL_DUMMY_ENUM; - -#ifndef __NDS__ -SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); -#endif - - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef HAVE_MALLOC -#define SDL_malloc malloc -#else -extern DECLSPEC void * SDLCALL SDL_malloc(size_t size); -#endif - -#ifdef HAVE_CALLOC -#define SDL_calloc calloc -#else -extern DECLSPEC void * SDLCALL SDL_calloc(size_t nmemb, size_t size); -#endif - -#ifdef HAVE_REALLOC -#define SDL_realloc realloc -#else -extern DECLSPEC void * SDLCALL SDL_realloc(void *mem, size_t size); -#endif - -#ifdef HAVE_FREE -#define SDL_free free -#else -extern DECLSPEC void SDLCALL SDL_free(void *mem); -#endif - -#if defined(HAVE_ALLOCA) && !defined(alloca) -# if defined(HAVE_ALLOCA_H) -# include -# elif defined(__GNUC__) -# define alloca __builtin_alloca -# elif defined(_MSC_VER) -# include -# define alloca _alloca -# elif defined(__WATCOMC__) -# include -# elif defined(__BORLANDC__) -# include -# elif defined(__DMC__) -# include -# elif defined(__AIX__) - #pragma alloca -# elif defined(__MRC__) - void *alloca (unsigned); -# else - char *alloca (); -# endif -#endif -#ifdef HAVE_ALLOCA -#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) -#define SDL_stack_free(data) -#else -#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) -#define SDL_stack_free(data) SDL_free(data) -#endif - -#ifdef HAVE_GETENV -#define SDL_getenv getenv -#else -extern DECLSPEC char * SDLCALL SDL_getenv(const char *name); -#endif - -#ifdef HAVE_PUTENV -#define SDL_putenv putenv -#else -extern DECLSPEC int SDLCALL SDL_putenv(const char *variable); -#endif - -#ifdef HAVE_QSORT -#define SDL_qsort qsort -#else -extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, - int (*compare)(const void *, const void *)); -#endif - -#ifdef HAVE_ABS -#define SDL_abs abs -#else -#define SDL_abs(X) ((X) < 0 ? -(X) : (X)) -#endif - -#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) -#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) - -#ifdef HAVE_CTYPE_H -#define SDL_isdigit(X) isdigit(X) -#define SDL_isspace(X) isspace(X) -#define SDL_toupper(X) toupper(X) -#define SDL_tolower(X) tolower(X) -#else -#define SDL_isdigit(X) (((X) >= '0') && ((X) <= '9')) -#define SDL_isspace(X) (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n')) -#define SDL_toupper(X) (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X)) -#define SDL_tolower(X) (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X)) -#endif - -#ifdef HAVE_MEMSET -#define SDL_memset memset -#else -extern DECLSPEC void * SDLCALL SDL_memset(void *dst, int c, size_t len); -#endif - -#if defined(__GNUC__) && defined(i386) -#define SDL_memset4(dst, val, len) \ -do { \ - int u0, u1, u2; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; stosl\n\t" \ - : "=&D" (u0), "=&a" (u1), "=&c" (u2) \ - : "0" (dst), "1" (val), "2" ((Uint32)(len)) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memset4 -#define SDL_memset4(dst, val, len) \ -do { \ - unsigned _count = (len); \ - unsigned _n = (_count + 3) / 4; \ - Uint32 *_p = (Uint32 *)(dst); \ - Uint32 _val = (val); \ - switch (_count % 4) { \ - case 0: do { *_p++ = _val; \ - case 3: *_p++ = _val; \ - case 2: *_p++ = _val; \ - case 1: *_p++ = _val; \ - } while ( --_n ); \ - } \ -} while(0) -#endif - -/* We can count on memcpy existing on Mac OS X and being well-tuned. */ -#if defined(__MACH__) && defined(__APPLE__) -#define SDL_memcpy(dst, src, len) memcpy(dst, src, len) -#elif defined(__GNUC__) && defined(i386) -#define SDL_memcpy(dst, src, len) \ -do { \ - int u0, u1, u2; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; movsl\n\t" \ - "testb $2,%b4\n\t" \ - "je 1f\n\t" \ - "movsw\n" \ - "1:\ttestb $1,%b4\n\t" \ - "je 2f\n\t" \ - "movsb\n" \ - "2:" \ - : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ - : "0" ((unsigned)(len)/4), "q" (len), "1" (dst),"2" (src) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memcpy -#ifdef HAVE_MEMCPY -#define SDL_memcpy memcpy -#elif defined(HAVE_BCOPY) -#define SDL_memcpy(d, s, n) bcopy((s), (d), (n)) -#else -extern DECLSPEC void * SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); -#endif -#endif - -/* We can count on memcpy existing on Mac OS X and being well-tuned. */ -#if defined(__MACH__) && defined(__APPLE__) -#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4) -#elif defined(__GNUC__) && defined(i386) -#define SDL_memcpy4(dst, src, len) \ -do { \ - int ecx, edi, esi; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; movsl" \ - : "=&c" (ecx), "=&D" (edi), "=&S" (esi) \ - : "0" ((unsigned)(len)), "1" (dst), "2" (src) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memcpy4 -#define SDL_memcpy4(dst, src, len) SDL_memcpy(dst, src, (len) << 2) -#endif - -#if defined(__GNUC__) && defined(i386) -#define SDL_revcpy(dst, src, len) \ -do { \ - int u0, u1, u2; \ - char *dstp = (char *)(dst); \ - char *srcp = (char *)(src); \ - int n = (len); \ - if ( n >= 4 ) { \ - __asm__ __volatile__ ( \ - "std\n\t" \ - "rep ; movsl\n\t" \ - : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ - : "0" (n >> 2), \ - "1" (dstp+(n-4)), "2" (srcp+(n-4)) \ - : "memory" ); \ - } \ - switch (n & 3) { \ - case 3: dstp[2] = srcp[2]; \ - case 2: dstp[1] = srcp[1]; \ - case 1: dstp[0] = srcp[0]; \ - break; \ - default: \ - break; \ - } \ -} while(0) -#endif -#ifndef SDL_revcpy -extern DECLSPEC void * SDLCALL SDL_revcpy(void *dst, const void *src, size_t len); -#endif - -#ifdef HAVE_MEMMOVE -#define SDL_memmove memmove -#elif defined(HAVE_BCOPY) -#define SDL_memmove(d, s, n) bcopy((s), (d), (n)) -#else -#define SDL_memmove(dst, src, len) \ -do { \ - if ( dst < src ) { \ - SDL_memcpy(dst, src, len); \ - } else { \ - SDL_revcpy(dst, src, len); \ - } \ -} while(0) -#endif - -#ifdef HAVE_MEMCMP -#define SDL_memcmp memcmp -#else -extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); -#endif - -#ifdef HAVE_STRLEN -#define SDL_strlen strlen -#else -extern DECLSPEC size_t SDLCALL SDL_strlen(const char *string); -#endif - -#ifdef HAVE_STRLCPY -#define SDL_strlcpy strlcpy -#else -extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); -#endif - -#ifdef HAVE_STRLCAT -#define SDL_strlcat strlcat -#else -extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); -#endif - -#ifdef HAVE_STRDUP -#define SDL_strdup strdup -#else -extern DECLSPEC char * SDLCALL SDL_strdup(const char *string); -#endif - -#ifdef HAVE__STRREV -#define SDL_strrev _strrev -#else -extern DECLSPEC char * SDLCALL SDL_strrev(char *string); -#endif - -#ifdef HAVE__STRUPR -#define SDL_strupr _strupr -#else -extern DECLSPEC char * SDLCALL SDL_strupr(char *string); -#endif - -#ifdef HAVE__STRLWR -#define SDL_strlwr _strlwr -#else -extern DECLSPEC char * SDLCALL SDL_strlwr(char *string); -#endif - -#ifdef HAVE_STRCHR -#define SDL_strchr strchr -#elif defined(HAVE_INDEX) -#define SDL_strchr index -#else -extern DECLSPEC char * SDLCALL SDL_strchr(const char *string, int c); -#endif - -#ifdef HAVE_STRRCHR -#define SDL_strrchr strrchr -#elif defined(HAVE_RINDEX) -#define SDL_strrchr rindex -#else -extern DECLSPEC char * SDLCALL SDL_strrchr(const char *string, int c); -#endif - -#ifdef HAVE_STRSTR -#define SDL_strstr strstr -#else -extern DECLSPEC char * SDLCALL SDL_strstr(const char *haystack, const char *needle); -#endif - -#ifdef HAVE_ITOA -#define SDL_itoa itoa -#else -#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix) -#endif - -#ifdef HAVE__LTOA -#define SDL_ltoa _ltoa -#else -extern DECLSPEC char * SDLCALL SDL_ltoa(long value, char *string, int radix); -#endif - -#ifdef HAVE__UITOA -#define SDL_uitoa _uitoa -#else -#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix) -#endif - -#ifdef HAVE__ULTOA -#define SDL_ultoa _ultoa -#else -extern DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *string, int radix); -#endif - -#ifdef HAVE_STRTOL -#define SDL_strtol strtol -#else -extern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp, int base); -#endif - -#ifdef HAVE_STRTOUL -#define SDL_strtoul strtoul -#else -extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string, char **endp, int base); -#endif - -#ifdef SDL_HAS_64BIT_TYPE - -#ifdef HAVE__I64TOA -#define SDL_lltoa _i64toa -#else -extern DECLSPEC char* SDLCALL SDL_lltoa(Sint64 value, char *string, int radix); -#endif - -#ifdef HAVE__UI64TOA -#define SDL_ulltoa _ui64toa -#else -extern DECLSPEC char* SDLCALL SDL_ulltoa(Uint64 value, char *string, int radix); -#endif - -#ifdef HAVE_STRTOLL -#define SDL_strtoll strtoll -#else -extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp, int base); -#endif - -#ifdef HAVE_STRTOULL -#define SDL_strtoull strtoull -#else -extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp, int base); -#endif - -#endif /* SDL_HAS_64BIT_TYPE */ - -#ifdef HAVE_STRTOD -#define SDL_strtod strtod -#else -extern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp); -#endif - -#ifdef HAVE_ATOI -#define SDL_atoi atoi -#else -#define SDL_atoi(X) SDL_strtol(X, NULL, 0) -#endif - -#ifdef HAVE_ATOF -#define SDL_atof atof -#else -#define SDL_atof(X) SDL_strtod(X, NULL) -#endif - -#ifdef HAVE_STRCMP -#define SDL_strcmp strcmp -#else -extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); -#endif - -#ifdef HAVE_STRNCMP -#define SDL_strncmp strncmp -#else -extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); -#endif - -#ifdef HAVE_STRCASECMP -#define SDL_strcasecmp strcasecmp -#elif defined(HAVE__STRICMP) -#define SDL_strcasecmp _stricmp -#else -extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); -#endif - -#ifdef HAVE_STRNCASECMP -#define SDL_strncasecmp strncasecmp -#elif defined(HAVE__STRNICMP) -#define SDL_strncasecmp _strnicmp -#else -extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen); -#endif - -#ifdef HAVE_SSCANF -#define SDL_sscanf sscanf -#else -extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); -#endif - -#ifdef HAVE_SNPRINTF -#define SDL_snprintf snprintf -#else -extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); -#endif - -#ifdef HAVE_VSNPRINTF -#define SDL_vsnprintf vsnprintf -#else -extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); -#endif - -/* The SDL implementation of iconv() returns these error codes */ -#define SDL_ICONV_ERROR (size_t)-1 -#define SDL_ICONV_E2BIG (size_t)-2 -#define SDL_ICONV_EILSEQ (size_t)-3 -#define SDL_ICONV_EINVAL (size_t)-4 - -#ifdef HAVE_ICONV -#define SDL_iconv_t iconv_t -#define SDL_iconv_open iconv_open -#define SDL_iconv_close iconv_close -#else -typedef struct _SDL_iconv_t *SDL_iconv_t; -extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, const char *fromcode); -extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); -#endif -extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); -/* This function converts a string between encodings in one pass, returning a - string that must be freed with SDL_free() or NULL on error. -*/ -extern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); -#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_stdinc_h */ diff --git a/Externals/SDL/Include_1.2/SDL_syswm.h b/Externals/SDL/Include_1.2/SDL_syswm.h deleted file mode 100644 index 010dd1bcc6..0000000000 --- a/Externals/SDL/Include_1.2/SDL_syswm.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Include file for SDL custom system window manager hooks */ - -#ifndef _SDL_syswm_h -#define _SDL_syswm_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_version.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Your application has access to a special type of event 'SDL_SYSWMEVENT', - which contains window-manager specific information and arrives whenever - an unhandled window event occurs. This event is ignored by default, but - you can enable it with SDL_EventState() -*/ -#ifdef SDL_PROTOTYPES_ONLY -struct SDL_SysWMinfo; -typedef struct SDL_SysWMinfo SDL_SysWMinfo; -#else - -/* This is the structure for custom window manager events */ -#if defined(SDL_VIDEO_DRIVER_X11) -#if defined(__APPLE__) && defined(__MACH__) -/* conflicts with Quickdraw.h */ -#define Cursor X11Cursor -#endif - -#include -#include - -#if defined(__APPLE__) && defined(__MACH__) -/* matches the re-define above */ -#undef Cursor -#endif - -/* These are the various supported subsystems under UNIX */ -typedef enum { - SDL_SYSWM_X11 -} SDL_SYSWM_TYPE; - -/* The UNIX custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union { - XEvent xevent; - } event; -}; - -/* The UNIX custom window manager information structure. - When this structure is returned, it holds information about which - low level system it is using, and will be one of SDL_SYSWM_TYPE. - */ -typedef struct SDL_SysWMinfo { - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union { - struct { - Display *display; /* The X11 display */ - Window window; /* The X11 display window */ - /* These locking functions should be called around - any X11 functions using the display variable, - but not the gfxdisplay variable. - They lock the event thread, so should not be - called around event functions or from event filters. - */ - void (*lock_func)(void); - void (*unlock_func)(void); - - /* Introduced in SDL 1.0.2 */ - Window fswindow; /* The X11 fullscreen window */ - Window wmwindow; /* The X11 managed input window */ - - /* Introduced in SDL 1.2.12 */ - Display *gfxdisplay; /* The X11 display to which rendering is done */ - } x11; - } info; -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_NANOX) -#include - -/* The generic custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int data; -}; - -/* The windows custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version ; - GR_WINDOW_ID window ; /* The display window */ -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || defined(SDL_VIDEO_DRIVER_GAPI) -#define WIN32_LEAN_AND_MEAN -#include - -/* The windows custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - HWND hwnd; /* The window for the message */ - UINT msg; /* The type of message */ - WPARAM wParam; /* WORD message parameter */ - LPARAM lParam; /* LONG message parameter */ -}; - -/* The windows custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - HWND window; /* The Win32 display window */ - HGLRC hglrc; /* The OpenGL context, if any */ -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_RISCOS) - -/* RISC OS custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int eventCode; /* The window for the message */ - int pollBlock[64]; -}; - -/* The RISC OS custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - int wimpVersion; /* Wimp version running under */ - int taskHandle; /* The RISC OS task handle */ - int window; /* The RISC OS display window */ -} SDL_SysWMinfo; - -#elif defined(SDL_VIDEO_DRIVER_PHOTON) -#include -#include - -/* The QNX custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int data; -}; - -/* The QNX custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - int data; -} SDL_SysWMinfo; - -#else - -/* The generic custom event structure */ -struct SDL_SysWMmsg { - SDL_version version; - int data; -}; - -/* The generic custom window manager information structure */ -typedef struct SDL_SysWMinfo { - SDL_version version; - int data; -} SDL_SysWMinfo; - -#endif /* video driver type */ - -#endif /* SDL_PROTOTYPES_ONLY */ - -/* Function prototypes */ -/* - * This function gives you custom hooks into the window manager information. - * It fills the structure pointed to by 'info' with custom information and - * returns 1 if the function is implemented. If it's not implemented, or - * the version member of the 'info' structure is invalid, it returns 0. - * - * You typically use this function like this: - * SDL_SysWMInfo info; - * SDL_VERSION(&info.version); - * if ( SDL_GetWMInfo(&info) ) { ... } - */ -extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_syswm_h */ diff --git a/Externals/SDL/Include_1.2/SDL_thread.h b/Externals/SDL/Include_1.2/SDL_thread.h deleted file mode 100644 index 403ee46209..0000000000 --- a/Externals/SDL/Include_1.2/SDL_thread.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_thread_h -#define _SDL_thread_h - -/* Header for the SDL thread management routines - - These are independent of the other SDL routines. -*/ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/* Thread synchronization primitives */ -#include "SDL_mutex.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* The SDL thread structure, defined in SDL_thread.c */ -struct SDL_Thread; -typedef struct SDL_Thread SDL_Thread; - -/* Create a thread */ -#if ((defined(__WIN32__) && !defined(HAVE_LIBC)) || defined(__OS2__)) && !defined(__SYMBIAN32__) -/* - We compile SDL into a DLL on OS/2. This means, that it's the DLL which - creates a new thread for the calling process with the SDL_CreateThread() - API. There is a problem with this, that only the RTL of the SDL.DLL will - be initialized for those threads, and not the RTL of the calling application! - To solve this, we make a little hack here. - We'll always use the caller's _beginthread() and _endthread() APIs to - start a new thread. This way, if it's the SDL.DLL which uses this API, - then the RTL of SDL.DLL will be used to create the new thread, and if it's - the application, then the RTL of the application will be used. - So, in short: - Always use the _beginthread() and _endthread() of the calling runtime library! -*/ -#define SDL_PASSED_BEGINTHREAD_ENDTHREAD -#ifndef _WIN32_WCE -#include /* This has _beginthread() and _endthread() defined! */ -#endif - -#ifdef __OS2__ -typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void *arg); -typedef void (*pfnSDL_CurrentEndThread)(void); -#elif __GNUC__ -typedef unsigned long (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned (__stdcall *func)(void *), void *arg, - unsigned, unsigned *threadID); -typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); -#else -typedef uintptr_t (__cdecl *pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned (__stdcall *func)(void *), void *arg, - unsigned, unsigned *threadID); -typedef void (__cdecl *pfnSDL_CurrentEndThread)(unsigned code); -#endif - -extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); - -#ifdef __OS2__ -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthread, _endthread) -#elif defined(_WIN32_WCE) -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, NULL, NULL) -#else -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthreadex, _endthreadex) -#endif -#else -extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data); -#endif - -/* Get the 32-bit thread identifier for the current thread */ -extern DECLSPEC Uint32 SDLCALL SDL_ThreadID(void); - -/* Get the 32-bit thread identifier for the specified thread, - equivalent to SDL_ThreadID() if the specified thread is NULL. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetThreadID(SDL_Thread *thread); - -/* Wait for a thread to finish. - The return code for the thread function is placed in the area - pointed to by 'status', if 'status' is not NULL. - */ -extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread *thread, int *status); - -/* Forcefully kill a thread without worrying about its state */ -extern DECLSPEC void SDLCALL SDL_KillThread(SDL_Thread *thread); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_thread_h */ diff --git a/Externals/SDL/Include_1.2/SDL_timer.h b/Externals/SDL/Include_1.2/SDL_timer.h deleted file mode 100644 index d21159fed2..0000000000 --- a/Externals/SDL/Include_1.2/SDL_timer.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_timer_h -#define _SDL_timer_h - -/* Header for the SDL time management routines */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* This is the OS scheduler timeslice, in milliseconds */ -#define SDL_TIMESLICE 10 - -/* This is the maximum resolution of the SDL timer on all platforms */ -#define TIMER_RESOLUTION 10 /* Experimentally determined */ - -/* Get the number of milliseconds since the SDL library initialization. - * Note that this value wraps if the program runs for more than ~49 days. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); - -/* Wait a specified number of milliseconds before returning */ -extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); - -/* Function prototype for the timer callback function */ -typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); - -/* Set a callback to run after the specified number of milliseconds has - * elapsed. The callback function is passed the current timer interval - * and returns the next timer interval. If the returned value is the - * same as the one passed in, the periodic alarm continues, otherwise a - * new alarm is scheduled. If the callback returns 0, the periodic alarm - * is cancelled. - * - * To cancel a currently running timer, call SDL_SetTimer(0, NULL); - * - * The timer callback function may run in a different thread than your - * main code, and so shouldn't call any functions from within itself. - * - * The maximum resolution of this timer is 10 ms, which means that if - * you request a 16 ms timer, your callback will run approximately 20 ms - * later on an unloaded system. If you wanted to set a flag signaling - * a frame update at 30 frames per second (every 33 ms), you might set a - * timer for 30 ms: - * SDL_SetTimer((33/10)*10, flag_update); - * - * If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). - * - * Under UNIX, you should not use raise or use SIGALRM and this function - * in the same program, as it is implemented using setitimer(). You also - * should not use this function in multi-threaded applications as signals - * to multi-threaded apps have undefined behavior in some implementations. - * - * This function returns 0 if successful, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback); - -/* New timer API, supports multiple timers - * Written by Stephane Peter - */ - -/* Function prototype for the new timer callback function. - * The callback function is passed the current timer interval and returns - * the next timer interval. If the returned value is the same as the one - * passed in, the periodic alarm continues, otherwise a new alarm is - * scheduled. If the callback returns 0, the periodic alarm is cancelled. - */ -typedef Uint32 (SDLCALL *SDL_NewTimerCallback)(Uint32 interval, void *param); - -/* Definition of the timer ID type */ -typedef struct _SDL_TimerID *SDL_TimerID; - -/* Add a new timer to the pool of timers already running. - Returns a timer ID, or NULL when an error occurs. - */ -extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param); - -/* Remove one of the multiple timers knowing its ID. - * Returns a boolean value indicating success. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID t); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_timer_h */ diff --git a/Externals/SDL/Include_1.2/SDL_types.h b/Externals/SDL/Include_1.2/SDL_types.h deleted file mode 100644 index 853b9ce454..0000000000 --- a/Externals/SDL/Include_1.2/SDL_types.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* DEPRECATED */ -#include "SDL_stdinc.h" diff --git a/Externals/SDL/Include_1.2/SDL_version.h b/Externals/SDL/Include_1.2/SDL_version.h deleted file mode 100644 index 9ff0fa8a7f..0000000000 --- a/Externals/SDL/Include_1.2/SDL_version.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This header defines the current SDL version */ - -#ifndef _SDL_version_h -#define _SDL_version_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL -*/ -#define SDL_MAJOR_VERSION 1 -#define SDL_MINOR_VERSION 2 -#define SDL_PATCHLEVEL 13 - -typedef struct SDL_version { - Uint8 major; - Uint8 minor; - Uint8 patch; -} SDL_version; - -/* This macro can be used to fill a version structure with the compile-time - * version of the SDL library. - */ -#define SDL_VERSION(X) \ -{ \ - (X)->major = SDL_MAJOR_VERSION; \ - (X)->minor = SDL_MINOR_VERSION; \ - (X)->patch = SDL_PATCHLEVEL; \ -} - -/* This macro turns the version numbers into a numeric value: - (1,2,3) -> (1203) - This assumes that there will never be more than 100 patchlevels -*/ -#define SDL_VERSIONNUM(X, Y, Z) \ - ((X)*1000 + (Y)*100 + (Z)) - -/* This is the version number macro for the current SDL version */ -#define SDL_COMPILEDVERSION \ - SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) - -/* This macro will evaluate to true if compiled with SDL at least X.Y.Z */ -#define SDL_VERSION_ATLEAST(X, Y, Z) \ - (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) - -/* This function gets the version of the dynamically linked SDL library. - it should NOT be used to fill a version structure, instead you should - use the SDL_Version() macro. - */ -extern DECLSPEC const SDL_version * SDLCALL SDL_Linked_Version(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_version_h */ diff --git a/Externals/SDL/Include_1.2/SDL_video.h b/Externals/SDL/Include_1.2/SDL_video.h deleted file mode 100644 index f6baccee7f..0000000000 --- a/Externals/SDL/Include_1.2/SDL_video.h +++ /dev/null @@ -1,891 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Header file for access to the SDL raw framebuffer window */ - -#ifndef _SDL_video_h -#define _SDL_video_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -extern "C" { -#endif - -/* Transparency definitions: These define alpha as the opacity of a surface */ -#define SDL_ALPHA_OPAQUE 255 -#define SDL_ALPHA_TRANSPARENT 0 - -/* Useful data types */ -typedef struct SDL_Rect { - Sint16 x, y; - Uint16 w, h; -} SDL_Rect; - -typedef struct SDL_Color { - Uint8 r; - Uint8 g; - Uint8 b; - Uint8 unused; -} SDL_Color; -#define SDL_Colour SDL_Color - -typedef struct SDL_Palette { - int ncolors; - SDL_Color *colors; -} SDL_Palette; - -/* Everything in the pixel format structure is read-only */ -typedef struct SDL_PixelFormat { - SDL_Palette *palette; - Uint8 BitsPerPixel; - Uint8 BytesPerPixel; - Uint8 Rloss; - Uint8 Gloss; - Uint8 Bloss; - Uint8 Aloss; - Uint8 Rshift; - Uint8 Gshift; - Uint8 Bshift; - Uint8 Ashift; - Uint32 Rmask; - Uint32 Gmask; - Uint32 Bmask; - Uint32 Amask; - - /* RGB color key information */ - Uint32 colorkey; - /* Alpha value information (per-surface alpha) */ - Uint8 alpha; -} SDL_PixelFormat; - -/* This structure should be treated as read-only, except for 'pixels', - which, if not NULL, contains the raw pixel data for the surface. -*/ -typedef struct SDL_Surface { - Uint32 flags; /* Read-only */ - SDL_PixelFormat *format; /* Read-only */ - int w, h; /* Read-only */ - Uint16 pitch; /* Read-only */ - void *pixels; /* Read-write */ - int offset; /* Private */ - - /* Hardware-specific surface info */ - struct private_hwdata *hwdata; - - /* clipping information */ - SDL_Rect clip_rect; /* Read-only */ - Uint32 unused1; /* for binary compatibility */ - - /* Allow recursive locks */ - Uint32 locked; /* Private */ - - /* info for fast blit mapping to other surfaces */ - struct SDL_BlitMap *map; /* Private */ - - /* format version, bumped at every change to invalidate blit maps */ - unsigned int format_version; /* Private */ - - /* Reference count -- used when freeing surface */ - int refcount; /* Read-mostly */ -} SDL_Surface; - -/* These are the currently supported flags for the SDL_surface */ -/* Available for SDL_CreateRGBSurface() or SDL_SetVideoMode() */ -#define SDL_SWSURFACE 0x00000000 /* Surface is in system memory */ -#define SDL_HWSURFACE 0x00000001 /* Surface is in video memory */ -#define SDL_ASYNCBLIT 0x00000004 /* Use asynchronous blits if possible */ -/* Available for SDL_SetVideoMode() */ -#define SDL_ANYFORMAT 0x10000000 /* Allow any video depth/pixel-format */ -#define SDL_HWPALETTE 0x20000000 /* Surface has exclusive palette */ -#define SDL_DOUBLEBUF 0x40000000 /* Set up double-buffered video mode */ -#define SDL_FULLSCREEN 0x80000000 /* Surface is a full screen display */ -#define SDL_OPENGL 0x00000002 /* Create an OpenGL rendering context */ -#define SDL_OPENGLBLIT 0x0000000A /* Create an OpenGL rendering context and use it for blitting */ -#define SDL_RESIZABLE 0x00000010 /* This video mode may be resized */ -#define SDL_NOFRAME 0x00000020 /* No window caption or edge frame */ -/* Used internally (read-only) */ -#define SDL_HWACCEL 0x00000100 /* Blit uses hardware acceleration */ -#define SDL_SRCCOLORKEY 0x00001000 /* Blit uses a source color key */ -#define SDL_RLEACCELOK 0x00002000 /* Private flag */ -#define SDL_RLEACCEL 0x00004000 /* Surface is RLE encoded */ -#define SDL_SRCALPHA 0x00010000 /* Blit uses source alpha blending */ -#define SDL_PREALLOC 0x01000000 /* Surface uses preallocated memory */ - -/* Evaluates to true if the surface needs to be locked before access */ -#define SDL_MUSTLOCK(surface) \ - (surface->offset || \ - ((surface->flags & (SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_RLEACCEL)) != 0)) - -/* typedef for private surface blitting functions */ -typedef int (*SDL_blit)(struct SDL_Surface *src, SDL_Rect *srcrect, - struct SDL_Surface *dst, SDL_Rect *dstrect); - - -/* Useful for determining the video hardware capabilities */ -typedef struct SDL_VideoInfo { - Uint32 hw_available :1; /* Flag: Can you create hardware surfaces? */ - Uint32 wm_available :1; /* Flag: Can you talk to a window manager? */ - Uint32 UnusedBits1 :6; - Uint32 UnusedBits2 :1; - Uint32 blit_hw :1; /* Flag: Accelerated blits HW --> HW */ - Uint32 blit_hw_CC :1; /* Flag: Accelerated blits with Colorkey */ - Uint32 blit_hw_A :1; /* Flag: Accelerated blits with Alpha */ - Uint32 blit_sw :1; /* Flag: Accelerated blits SW --> HW */ - Uint32 blit_sw_CC :1; /* Flag: Accelerated blits with Colorkey */ - Uint32 blit_sw_A :1; /* Flag: Accelerated blits with Alpha */ - Uint32 blit_fill :1; /* Flag: Accelerated color fill */ - Uint32 UnusedBits3 :16; - Uint32 video_mem; /* The total amount of video memory (in K) */ - SDL_PixelFormat *vfmt; /* Value: The format of the video surface */ - int current_w; /* Value: The current video mode width */ - int current_h; /* Value: The current video mode height */ -} SDL_VideoInfo; - - -/* The most common video overlay formats. - For an explanation of these pixel formats, see: - http://www.webartz.com/fourcc/indexyuv.htm - - For information on the relationship between color spaces, see: - http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html - */ -#define SDL_YV12_OVERLAY 0x32315659 /* Planar mode: Y + V + U (3 planes) */ -#define SDL_IYUV_OVERLAY 0x56555949 /* Planar mode: Y + U + V (3 planes) */ -#define SDL_YUY2_OVERLAY 0x32595559 /* Packed mode: Y0+U0+Y1+V0 (1 plane) */ -#define SDL_UYVY_OVERLAY 0x59565955 /* Packed mode: U0+Y0+V0+Y1 (1 plane) */ -#define SDL_YVYU_OVERLAY 0x55595659 /* Packed mode: Y0+V0+Y1+U0 (1 plane) */ - -/* The YUV hardware video overlay */ -typedef struct SDL_Overlay { - Uint32 format; /* Read-only */ - int w, h; /* Read-only */ - int planes; /* Read-only */ - Uint16 *pitches; /* Read-only */ - Uint8 **pixels; /* Read-write */ - - /* Hardware-specific surface info */ - struct private_yuvhwfuncs *hwfuncs; - struct private_yuvhwdata *hwdata; - - /* Special flags */ - Uint32 hw_overlay :1; /* Flag: This overlay hardware accelerated? */ - Uint32 UnusedBits :31; -} SDL_Overlay; - - -/* Public enumeration for setting the OpenGL window attributes. */ -typedef enum { - SDL_GL_RED_SIZE, - SDL_GL_GREEN_SIZE, - SDL_GL_BLUE_SIZE, - SDL_GL_ALPHA_SIZE, - SDL_GL_BUFFER_SIZE, - SDL_GL_DOUBLEBUFFER, - SDL_GL_DEPTH_SIZE, - SDL_GL_STENCIL_SIZE, - SDL_GL_ACCUM_RED_SIZE, - SDL_GL_ACCUM_GREEN_SIZE, - SDL_GL_ACCUM_BLUE_SIZE, - SDL_GL_ACCUM_ALPHA_SIZE, - SDL_GL_STEREO, - SDL_GL_MULTISAMPLEBUFFERS, - SDL_GL_MULTISAMPLESAMPLES, - SDL_GL_ACCELERATED_VISUAL, - SDL_GL_SWAP_CONTROL -} SDL_GLattr; - -/* flags for SDL_SetPalette() */ -#define SDL_LOGPAL 0x01 -#define SDL_PHYSPAL 0x02 - -/* Function prototypes */ - -/* These functions are used internally, and should not be used unless you - * have a specific need to specify the video driver you want to use. - * You should normally use SDL_Init() or SDL_InitSubSystem(). - * - * SDL_VideoInit() initializes the video subsystem -- sets up a connection - * to the window manager, etc, and determines the current video mode and - * pixel format, but does not initialize a window or graphics mode. - * Note that event handling is activated by this routine. - * - * If you use both sound and video in your application, you need to call - * SDL_Init() before opening the sound device, otherwise under Win32 DirectX, - * you won't be able to set full-screen display modes. - */ -extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name, Uint32 flags); -extern DECLSPEC void SDLCALL SDL_VideoQuit(void); - -/* This function fills the given character buffer with the name of the - * video driver, and returns a pointer to it if the video driver has - * been initialized. It returns NULL if no driver has been initialized. - */ -extern DECLSPEC char * SDLCALL SDL_VideoDriverName(char *namebuf, int maxlen); - -/* - * This function returns a pointer to the current display surface. - * If SDL is doing format conversion on the display surface, this - * function returns the publicly visible surface, not the real video - * surface. - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_GetVideoSurface(void); - -/* - * This function returns a read-only pointer to information about the - * video hardware. If this is called before SDL_SetVideoMode(), the 'vfmt' - * member of the returned structure will contain the pixel format of the - * "best" video mode. - */ -extern DECLSPEC const SDL_VideoInfo * SDLCALL SDL_GetVideoInfo(void); - -/* - * Check to see if a particular video mode is supported. - * It returns 0 if the requested mode is not supported under any bit depth, - * or returns the bits-per-pixel of the closest available mode with the - * given width and height. If this bits-per-pixel is different from the - * one used when setting the video mode, SDL_SetVideoMode() will succeed, - * but will emulate the requested bits-per-pixel with a shadow surface. - * - * The arguments to SDL_VideoModeOK() are the same ones you would pass to - * SDL_SetVideoMode() - */ -extern DECLSPEC int SDLCALL SDL_VideoModeOK(int width, int height, int bpp, Uint32 flags); - -/* - * Return a pointer to an array of available screen dimensions for the - * given format and video flags, sorted largest to smallest. Returns - * NULL if there are no dimensions available for a particular format, - * or (SDL_Rect **)-1 if any dimension is okay for the given format. - * - * If 'format' is NULL, the mode list will be for the format given - * by SDL_GetVideoInfo()->vfmt - */ -extern DECLSPEC SDL_Rect ** SDLCALL SDL_ListModes(SDL_PixelFormat *format, Uint32 flags); - -/* - * Set up a video mode with the specified width, height and bits-per-pixel. - * - * If 'bpp' is 0, it is treated as the current display bits per pixel. - * - * If SDL_ANYFORMAT is set in 'flags', the SDL library will try to set the - * requested bits-per-pixel, but will return whatever video pixel format is - * available. The default is to emulate the requested pixel format if it - * is not natively available. - * - * If SDL_HWSURFACE is set in 'flags', the video surface will be placed in - * video memory, if possible, and you may have to call SDL_LockSurface() - * in order to access the raw framebuffer. Otherwise, the video surface - * will be created in system memory. - * - * If SDL_ASYNCBLIT is set in 'flags', SDL will try to perform rectangle - * updates asynchronously, but you must always lock before accessing pixels. - * SDL will wait for updates to complete before returning from the lock. - * - * If SDL_HWPALETTE is set in 'flags', the SDL library will guarantee - * that the colors set by SDL_SetColors() will be the colors you get. - * Otherwise, in 8-bit mode, SDL_SetColors() may not be able to set all - * of the colors exactly the way they are requested, and you should look - * at the video surface structure to determine the actual palette. - * If SDL cannot guarantee that the colors you request can be set, - * i.e. if the colormap is shared, then the video surface may be created - * under emulation in system memory, overriding the SDL_HWSURFACE flag. - * - * If SDL_FULLSCREEN is set in 'flags', the SDL library will try to set - * a fullscreen video mode. The default is to create a windowed mode - * if the current graphics system has a window manager. - * If the SDL library is able to set a fullscreen video mode, this flag - * will be set in the surface that is returned. - * - * If SDL_DOUBLEBUF is set in 'flags', the SDL library will try to set up - * two surfaces in video memory and swap between them when you call - * SDL_Flip(). This is usually slower than the normal single-buffering - * scheme, but prevents "tearing" artifacts caused by modifying video - * memory while the monitor is refreshing. It should only be used by - * applications that redraw the entire screen on every update. - * - * If SDL_RESIZABLE is set in 'flags', the SDL library will allow the - * window manager, if any, to resize the window at runtime. When this - * occurs, SDL will send a SDL_VIDEORESIZE event to you application, - * and you must respond to the event by re-calling SDL_SetVideoMode() - * with the requested size (or another size that suits the application). - * - * If SDL_NOFRAME is set in 'flags', the SDL library will create a window - * without any title bar or frame decoration. Fullscreen video modes have - * this flag set automatically. - * - * This function returns the video framebuffer surface, or NULL if it fails. - * - * If you rely on functionality provided by certain video flags, check the - * flags of the returned surface to make sure that functionality is available. - * SDL will fall back to reduced functionality if the exact flags you wanted - * are not available. - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_SetVideoMode - (int width, int height, int bpp, Uint32 flags); - -/* - * Makes sure the given list of rectangles is updated on the given screen. - * If 'x', 'y', 'w' and 'h' are all 0, SDL_UpdateRect will update the entire - * screen. - * These functions should not be called while 'screen' is locked. - */ -extern DECLSPEC void SDLCALL SDL_UpdateRects - (SDL_Surface *screen, int numrects, SDL_Rect *rects); -extern DECLSPEC void SDLCALL SDL_UpdateRect - (SDL_Surface *screen, Sint32 x, Sint32 y, Uint32 w, Uint32 h); - -/* - * On hardware that supports double-buffering, this function sets up a flip - * and returns. The hardware will wait for vertical retrace, and then swap - * video buffers before the next video surface blit or lock will return. - * On hardware that doesn not support double-buffering, this is equivalent - * to calling SDL_UpdateRect(screen, 0, 0, 0, 0); - * The SDL_DOUBLEBUF flag must have been passed to SDL_SetVideoMode() when - * setting the video mode for this function to perform hardware flipping. - * This function returns 0 if successful, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_Flip(SDL_Surface *screen); - -/* - * Set the gamma correction for each of the color channels. - * The gamma values range (approximately) between 0.1 and 10.0 - * - * If this function isn't supported directly by the hardware, it will - * be emulated using gamma ramps, if available. If successful, this - * function returns 0, otherwise it returns -1. - */ -extern DECLSPEC int SDLCALL SDL_SetGamma(float red, float green, float blue); - -/* - * Set the gamma translation table for the red, green, and blue channels - * of the video hardware. Each table is an array of 256 16-bit quantities, - * representing a mapping between the input and output for that channel. - * The input is the index into the array, and the output is the 16-bit - * gamma value at that index, scaled to the output color precision. - * - * You may pass NULL for any of the channels to leave it unchanged. - * If the call succeeds, it will return 0. If the display driver or - * hardware does not support gamma translation, or otherwise fails, - * this function will return -1. - */ -extern DECLSPEC int SDLCALL SDL_SetGammaRamp(const Uint16 *red, const Uint16 *green, const Uint16 *blue); - -/* - * Retrieve the current values of the gamma translation tables. - * - * You must pass in valid pointers to arrays of 256 16-bit quantities. - * Any of the pointers may be NULL to ignore that channel. - * If the call succeeds, it will return 0. If the display driver or - * hardware does not support gamma translation, or otherwise fails, - * this function will return -1. - */ -extern DECLSPEC int SDLCALL SDL_GetGammaRamp(Uint16 *red, Uint16 *green, Uint16 *blue); - -/* - * Sets a portion of the colormap for the given 8-bit surface. If 'surface' - * is not a palettized surface, this function does nothing, returning 0. - * If all of the colors were set as passed to SDL_SetColors(), it will - * return 1. If not all the color entries were set exactly as given, - * it will return 0, and you should look at the surface palette to - * determine the actual color palette. - * - * When 'surface' is the surface associated with the current display, the - * display colormap will be updated with the requested colors. If - * SDL_HWPALETTE was set in SDL_SetVideoMode() flags, SDL_SetColors() - * will always return 1, and the palette is guaranteed to be set the way - * you desire, even if the window colormap has to be warped or run under - * emulation. - */ -extern DECLSPEC int SDLCALL SDL_SetColors(SDL_Surface *surface, - SDL_Color *colors, int firstcolor, int ncolors); - -/* - * Sets a portion of the colormap for a given 8-bit surface. - * 'flags' is one or both of: - * SDL_LOGPAL -- set logical palette, which controls how blits are mapped - * to/from the surface, - * SDL_PHYSPAL -- set physical palette, which controls how pixels look on - * the screen - * Only screens have physical palettes. Separate change of physical/logical - * palettes is only possible if the screen has SDL_HWPALETTE set. - * - * The return value is 1 if all colours could be set as requested, and 0 - * otherwise. - * - * SDL_SetColors() is equivalent to calling this function with - * flags = (SDL_LOGPAL|SDL_PHYSPAL). - */ -extern DECLSPEC int SDLCALL SDL_SetPalette(SDL_Surface *surface, int flags, - SDL_Color *colors, int firstcolor, - int ncolors); - -/* - * Maps an RGB triple to an opaque pixel value for a given pixel format - */ -extern DECLSPEC Uint32 SDLCALL SDL_MapRGB -(const SDL_PixelFormat * const format, - const Uint8 r, const Uint8 g, const Uint8 b); - -/* - * Maps an RGBA quadruple to a pixel value for a given pixel format - */ -extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA -(const SDL_PixelFormat * const format, - const Uint8 r, const Uint8 g, const Uint8 b, const Uint8 a); - -/* - * Maps a pixel value into the RGB components for a given pixel format - */ -extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, - Uint8 *r, Uint8 *g, Uint8 *b); - -/* - * Maps a pixel value into the RGBA components for a given pixel format - */ -extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, SDL_PixelFormat *fmt, - Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); - -/* - * Allocate and free an RGB surface (must be called after SDL_SetVideoMode) - * If the depth is 4 or 8 bits, an empty palette is allocated for the surface. - * If the depth is greater than 8 bits, the pixel format is set using the - * flags '[RGB]mask'. - * If the function runs out of memory, it will return NULL. - * - * The 'flags' tell what kind of surface to create. - * SDL_SWSURFACE means that the surface should be created in system memory. - * SDL_HWSURFACE means that the surface should be created in video memory, - * with the same format as the display surface. This is useful for surfaces - * that will not change much, to take advantage of hardware acceleration - * when being blitted to the display surface. - * SDL_ASYNCBLIT means that SDL will try to perform asynchronous blits with - * this surface, but you must always lock it before accessing the pixels. - * SDL will wait for current blits to finish before returning from the lock. - * SDL_SRCCOLORKEY indicates that the surface will be used for colorkey blits. - * If the hardware supports acceleration of colorkey blits between - * two surfaces in video memory, SDL will try to place the surface in - * video memory. If this isn't possible or if there is no hardware - * acceleration available, the surface will be placed in system memory. - * SDL_SRCALPHA means that the surface will be used for alpha blits and - * if the hardware supports hardware acceleration of alpha blits between - * two surfaces in video memory, to place the surface in video memory - * if possible, otherwise it will be placed in system memory. - * If the surface is created in video memory, blits will be _much_ faster, - * but the surface format must be identical to the video surface format, - * and the only way to access the pixels member of the surface is to use - * the SDL_LockSurface() and SDL_UnlockSurface() calls. - * If the requested surface actually resides in video memory, SDL_HWSURFACE - * will be set in the flags member of the returned surface. If for some - * reason the surface could not be placed in video memory, it will not have - * the SDL_HWSURFACE flag set, and will be created in system memory instead. - */ -#define SDL_AllocSurface SDL_CreateRGBSurface -extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurface - (Uint32 flags, int width, int height, int depth, - Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); -extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, - int width, int height, int depth, int pitch, - Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); -extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface *surface); - -/* - * SDL_LockSurface() sets up a surface for directly accessing the pixels. - * Between calls to SDL_LockSurface()/SDL_UnlockSurface(), you can write - * to and read from 'surface->pixels', using the pixel format stored in - * 'surface->format'. Once you are done accessing the surface, you should - * use SDL_UnlockSurface() to release it. - * - * Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates - * to 0, then you can read and write to the surface at any time, and the - * pixel format of the surface will not change. In particular, if the - * SDL_HWSURFACE flag is not given when calling SDL_SetVideoMode(), you - * will not need to lock the display surface before accessing it. - * - * No operating system or library calls should be made between lock/unlock - * pairs, as critical system locks may be held during this time. - * - * SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked. - */ -extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface *surface); -extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface *surface); - -/* - * Load a surface from a seekable SDL data source (memory or file.) - * If 'freesrc' is non-zero, the source will be closed after being read. - * Returns the new surface, or NULL if there was an error. - * The new surface should be freed with SDL_FreeSurface(). - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP_RW(SDL_RWops *src, int freesrc); - -/* Convenience macro -- load a surface from a file */ -#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) - -/* - * Save a surface to a seekable SDL data source (memory or file.) - * If 'freedst' is non-zero, the source will be closed after being written. - * Returns 0 if successful or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SaveBMP_RW - (SDL_Surface *surface, SDL_RWops *dst, int freedst); - -/* Convenience macro -- save a surface to a file */ -#define SDL_SaveBMP(surface, file) \ - SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) - -/* - * Sets the color key (transparent pixel) in a blittable surface. - * If 'flag' is SDL_SRCCOLORKEY (optionally OR'd with SDL_RLEACCEL), - * 'key' will be the transparent pixel in the source image of a blit. - * SDL_RLEACCEL requests RLE acceleration for the surface if present, - * and removes RLE acceleration if absent. - * If 'flag' is 0, this function clears any current color key. - * This function returns 0, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SetColorKey - (SDL_Surface *surface, Uint32 flag, Uint32 key); - -/* - * This function sets the alpha value for the entire surface, as opposed to - * using the alpha component of each pixel. This value measures the range - * of transparency of the surface, 0 being completely transparent to 255 - * being completely opaque. An 'alpha' value of 255 causes blits to be - * opaque, the source pixels copied to the destination (the default). Note - * that per-surface alpha can be combined with colorkey transparency. - * - * If 'flag' is 0, alpha blending is disabled for the surface. - * If 'flag' is SDL_SRCALPHA, alpha blending is enabled for the surface. - * OR:ing the flag with SDL_RLEACCEL requests RLE acceleration for the - * surface; if SDL_RLEACCEL is not specified, the RLE accel will be removed. - * - * The 'alpha' parameter is ignored for surfaces that have an alpha channel. - */ -extern DECLSPEC int SDLCALL SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint8 alpha); - -/* - * Sets the clipping rectangle for the destination surface in a blit. - * - * If the clip rectangle is NULL, clipping will be disabled. - * If the clip rectangle doesn't intersect the surface, the function will - * return SDL_FALSE and blits will be completely clipped. Otherwise the - * function returns SDL_TRUE and blits to the surface will be clipped to - * the intersection of the surface area and the clipping rectangle. - * - * Note that blits are automatically clipped to the edges of the source - * and destination surfaces. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface *surface, const SDL_Rect *rect); - -/* - * Gets the clipping rectangle for the destination surface in a blit. - * 'rect' must be a pointer to a valid rectangle which will be filled - * with the correct values. - */ -extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rect); - -/* - * Creates a new surface of the specified format, and then copies and maps - * the given surface to it so the blit of the converted surface will be as - * fast as possible. If this function fails, it returns NULL. - * - * The 'flags' parameter is passed to SDL_CreateRGBSurface() and has those - * semantics. You can also pass SDL_RLEACCEL in the flags parameter and - * SDL will try to RLE accelerate colorkey and alpha blits in the resulting - * surface. - * - * This function is used internally by SDL_DisplayFormat(). - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_ConvertSurface - (SDL_Surface *src, SDL_PixelFormat *fmt, Uint32 flags); - -/* - * This performs a fast blit from the source surface to the destination - * surface. It assumes that the source and destination rectangles are - * the same size. If either 'srcrect' or 'dstrect' are NULL, the entire - * surface (src or dst) is copied. The final blit rectangles are saved - * in 'srcrect' and 'dstrect' after all clipping is performed. - * If the blit is successful, it returns 0, otherwise it returns -1. - * - * The blit function should not be called on a locked surface. - * - * The blit semantics for surfaces with and without alpha and colorkey - * are defined as follows: - * - * RGBA->RGB: - * SDL_SRCALPHA set: - * alpha-blend (using alpha-channel). - * SDL_SRCCOLORKEY ignored. - * SDL_SRCALPHA not set: - * copy RGB. - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * RGB values of the source colour key, ignoring alpha in the - * comparison. - * - * RGB->RGBA: - * SDL_SRCALPHA set: - * alpha-blend (using the source per-surface alpha value); - * set destination alpha to opaque. - * SDL_SRCALPHA not set: - * copy RGB, set destination alpha to source per-surface alpha value. - * both: - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * source colour key. - * - * RGBA->RGBA: - * SDL_SRCALPHA set: - * alpha-blend (using the source alpha channel) the RGB values; - * leave destination alpha untouched. [Note: is this correct?] - * SDL_SRCCOLORKEY ignored. - * SDL_SRCALPHA not set: - * copy all of RGBA to the destination. - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * RGB values of the source colour key, ignoring alpha in the - * comparison. - * - * RGB->RGB: - * SDL_SRCALPHA set: - * alpha-blend (using the source per-surface alpha value). - * SDL_SRCALPHA not set: - * copy RGB. - * both: - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * source colour key. - * - * If either of the surfaces were in video memory, and the blit returns -2, - * the video memory was lost, so it should be reloaded with artwork and - * re-blitted: - while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) { - while ( SDL_LockSurface(image) < 0 ) - Sleep(10); - -- Write image pixels to image->pixels -- - SDL_UnlockSurface(image); - } - * This happens under DirectX 5.0 when the system switches away from your - * fullscreen application. The lock will also fail until you have access - * to the video memory again. - */ -/* You should call SDL_BlitSurface() unless you know exactly how SDL - blitting works internally and how to use the other blit functions. -*/ -#define SDL_BlitSurface SDL_UpperBlit - -/* This is the public blit function, SDL_BlitSurface(), and it performs - rectangle validation and clipping before passing it to SDL_LowerBlit() -*/ -extern DECLSPEC int SDLCALL SDL_UpperBlit - (SDL_Surface *src, SDL_Rect *srcrect, - SDL_Surface *dst, SDL_Rect *dstrect); -/* This is a semi-private blit function and it performs low-level surface - blitting only. -*/ -extern DECLSPEC int SDLCALL SDL_LowerBlit - (SDL_Surface *src, SDL_Rect *srcrect, - SDL_Surface *dst, SDL_Rect *dstrect); - -/* - * This function performs a fast fill of the given rectangle with 'color' - * The given rectangle is clipped to the destination surface clip area - * and the final fill rectangle is saved in the passed in pointer. - * If 'dstrect' is NULL, the whole surface will be filled with 'color' - * The color should be a pixel of the format used by the surface, and - * can be generated by the SDL_MapRGB() function. - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_FillRect - (SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color); - -/* - * This function takes a surface and copies it to a new surface of the - * pixel format and colors of the video framebuffer, suitable for fast - * blitting onto the display surface. It calls SDL_ConvertSurface() - * - * If you want to take advantage of hardware colorkey or alpha blit - * acceleration, you should set the colorkey and alpha value before - * calling this function. - * - * If the conversion fails or runs out of memory, it returns NULL - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormat(SDL_Surface *surface); - -/* - * This function takes a surface and copies it to a new surface of the - * pixel format and colors of the video framebuffer (if possible), - * suitable for fast alpha blitting onto the display surface. - * The new surface will always have an alpha channel. - * - * If you want to take advantage of hardware colorkey or alpha blit - * acceleration, you should set the colorkey and alpha value before - * calling this function. - * - * If the conversion fails or runs out of memory, it returns NULL - */ -extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormatAlpha(SDL_Surface *surface); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* YUV video surface overlay functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* This function creates a video output overlay - Calling the returned surface an overlay is something of a misnomer because - the contents of the display surface underneath the area where the overlay - is shown is undefined - it may be overwritten with the converted YUV data. -*/ -extern DECLSPEC SDL_Overlay * SDLCALL SDL_CreateYUVOverlay(int width, int height, - Uint32 format, SDL_Surface *display); - -/* Lock an overlay for direct access, and unlock it when you are done */ -extern DECLSPEC int SDLCALL SDL_LockYUVOverlay(SDL_Overlay *overlay); -extern DECLSPEC void SDLCALL SDL_UnlockYUVOverlay(SDL_Overlay *overlay); - -/* Blit a video overlay to the display surface. - The contents of the video surface underneath the blit destination are - not defined. - The width and height of the destination rectangle may be different from - that of the overlay, but currently only 2x scaling is supported. -*/ -extern DECLSPEC int SDLCALL SDL_DisplayYUVOverlay(SDL_Overlay *overlay, SDL_Rect *dstrect); - -/* Free a video overlay */ -extern DECLSPEC void SDLCALL SDL_FreeYUVOverlay(SDL_Overlay *overlay); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* OpenGL support functions. */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Dynamically load an OpenGL library, or the default one if path is NULL - * - * If you do this, you need to retrieve all of the GL functions used in - * your program from the dynamic library using SDL_GL_GetProcAddress(). - */ -extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); - -/* - * Get the address of a GL function - */ -extern DECLSPEC void * SDLCALL SDL_GL_GetProcAddress(const char* proc); - -/* - * Set an attribute of the OpenGL subsystem before intialization. - */ -extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); - -/* - * Get an attribute of the OpenGL subsystem from the windowing - * interface, such as glX. This is of course different from getting - * the values from SDL's internal OpenGL subsystem, which only - * stores the values you request before initialization. - * - * Developers should track the values they pass into SDL_GL_SetAttribute - * themselves if they want to retrieve these values. - */ -extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int* value); - -/* - * Swap the OpenGL buffers, if double-buffering is supported. - */ -extern DECLSPEC void SDLCALL SDL_GL_SwapBuffers(void); - -/* - * Internal functions that should not be called unless you have read - * and understood the source code for these functions. - */ -extern DECLSPEC void SDLCALL SDL_GL_UpdateRects(int numrects, SDL_Rect* rects); -extern DECLSPEC void SDLCALL SDL_GL_Lock(void); -extern DECLSPEC void SDLCALL SDL_GL_Unlock(void); - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* These functions allow interaction with the window manager, if any. */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Sets/Gets the title and icon text of the display window (UTF-8 encoded) - */ -extern DECLSPEC void SDLCALL SDL_WM_SetCaption(const char *title, const char *icon); -extern DECLSPEC void SDLCALL SDL_WM_GetCaption(char **title, char **icon); - -/* - * Sets the icon for the display window. - * This function must be called before the first call to SDL_SetVideoMode(). - * It takes an icon surface, and a mask in MSB format. - * If 'mask' is NULL, the entire icon surface will be used as the icon. - */ -extern DECLSPEC void SDLCALL SDL_WM_SetIcon(SDL_Surface *icon, Uint8 *mask); - -/* - * This function iconifies the window, and returns 1 if it succeeded. - * If the function succeeds, it generates an SDL_APPACTIVE loss event. - * This function is a noop and returns 0 in non-windowed environments. - */ -extern DECLSPEC int SDLCALL SDL_WM_IconifyWindow(void); - -/* - * Toggle fullscreen mode without changing the contents of the screen. - * If the display surface does not require locking before accessing - * the pixel information, then the memory pointers will not change. - * - * If this function was able to toggle fullscreen mode (change from - * running in a window to fullscreen, or vice-versa), it will return 1. - * If it is not implemented, or fails, it returns 0. - * - * The next call to SDL_SetVideoMode() will set the mode fullscreen - * attribute based on the flags parameter - if SDL_FULLSCREEN is not - * set, then the display will be windowed by default where supported. - * - * This is currently only implemented in the X11 video driver. - */ -extern DECLSPEC int SDLCALL SDL_WM_ToggleFullScreen(SDL_Surface *surface); - -/* - * This function allows you to set and query the input grab state of - * the application. It returns the new input grab state. - */ -typedef enum { - SDL_GRAB_QUERY = -1, - SDL_GRAB_OFF = 0, - SDL_GRAB_ON = 1, - SDL_GRAB_FULLSCREEN /* Used internally */ -} SDL_GrabMode; -/* - * Grabbing means that the mouse is confined to the application window, - * and nearly all keyboard input is passed directly to the application, - * and not interpreted by a window manager, if any. - */ -extern DECLSPEC SDL_GrabMode SDLCALL SDL_WM_GrabInput(SDL_GrabMode mode); - -/* Not in public API at the moment - do not use! */ -extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface *src, SDL_Rect *srcrect, - SDL_Surface *dst, SDL_Rect *dstrect); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -} -#endif -#include "close_code.h" - -#endif /* _SDL_video_h */ diff --git a/Externals/SDL/Include_1.2/begin_code.h b/Externals/SDL/Include_1.2/begin_code.h deleted file mode 100644 index d1ddaa6ac2..0000000000 --- a/Externals/SDL/Include_1.2/begin_code.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2004 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file sets things up for C dynamic library function definitions, - static inlined functions, and structures aligned at 4-byte alignment. - If you don't like ugly C preprocessor code, don't look at this file. :) -*/ - -/* This shouldn't be nested -- included it around code only. */ -#ifdef _begin_code_h -#error Nested inclusion of begin_code.h -#endif -#define _begin_code_h - -/* Some compilers use a special export keyword */ -#ifndef DECLSPEC -# if defined(__BEOS__) -# if defined(__GNUC__) -# define DECLSPEC __declspec(dllexport) -# else -# define DECLSPEC __declspec(export) -# endif -# elif defined(__WIN32__) -# ifdef __BORLANDC__ -# ifdef BUILD_SDL -# define DECLSPEC -# else -# define DECLSPEC __declspec(dllimport) -# endif -# else -# define DECLSPEC __declspec(dllexport) -# endif -# elif defined(__OS2__) -# ifdef __WATCOMC__ -# ifdef BUILD_SDL -# define DECLSPEC __declspec(dllexport) -# else -# define DECLSPEC -# endif -# else -# define DECLSPEC -# endif -# else -# if defined(__GNUC__) && __GNUC__ >= 4 -# define DECLSPEC __attribute__ ((visibility("default"))) -# else -# define DECLSPEC -# endif -# endif -#endif - -/* By default SDL uses the C calling convention */ -#ifndef SDLCALL -#if defined(__WIN32__) && !defined(__GNUC__) -#define SDLCALL __cdecl -#else -#ifdef __OS2__ -/* But on OS/2, we use the _System calling convention */ -/* to be compatible with every compiler */ -#define SDLCALL _System -#else -#define SDLCALL -#endif -#endif -#endif /* SDLCALL */ - -#ifdef __SYMBIAN32__ -#ifndef EKA2 -#undef DECLSPEC -#define DECLSPEC -#elif !defined(__WINS__) -#undef DECLSPEC -#define DECLSPEC __declspec(dllexport) -#endif /* !EKA2 */ -#endif /* __SYMBIAN32__ */ - -/* Force structure packing at 4 byte alignment. - This is necessary if the header is included in code which has structure - packing set to an alternate value, say for loading structures from disk. - The packing is reset to the previous value in close_code.h - */ -#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) -#ifdef _MSC_VER -#pragma warning(disable: 4103) -#endif -#ifdef __BORLANDC__ -#pragma nopackwarning -#endif -#pragma pack(push,4) -#elif (defined(__MWERKS__) && defined(__MACOS__)) -#pragma options align=mac68k4byte -#pragma enumsalwaysint on -#endif /* Compiler needs structure packing set */ - -/* Set up compiler-specific options for inlining functions */ -#ifndef SDL_INLINE_OKAY -#ifdef __GNUC__ -#define SDL_INLINE_OKAY -#else -/* Add any special compiler-specific cases here */ -#if defined(_MSC_VER) || defined(__BORLANDC__) || \ - defined(__DMC__) || defined(__SC__) || \ - defined(__WATCOMC__) || defined(__LCC__) || \ - defined(__DECC) || defined(__EABI__) -#ifndef __inline__ -#define __inline__ __inline -#endif -#define SDL_INLINE_OKAY -#else -#if !defined(__MRC__) && !defined(_SGI_SOURCE) -#ifndef __inline__ -#define __inline__ inline -#endif -#define SDL_INLINE_OKAY -#endif /* Not a funky compiler */ -#endif /* Visual C++ */ -#endif /* GNU C */ -#endif /* SDL_INLINE_OKAY */ - -/* If inlining isn't supported, remove "__inline__", turning static - inlined functions into static functions (resulting in code bloat - in all files which include the offending header files) -*/ -#ifndef SDL_INLINE_OKAY -#define __inline__ -#endif - -/* Apparently this is needed by several Windows compilers */ -#if !defined(__MACH__) -#ifndef NULL -#ifdef __cplusplus -#define NULL 0 -#else -#define NULL ((void *)0) -#endif -#endif /* NULL */ -#endif /* ! Mac OS X - breaks precompiled headers */ diff --git a/Externals/SDL/Include_1.2/close_code.h b/Externals/SDL/Include_1.2/close_code.h deleted file mode 100644 index afbb65047c..0000000000 --- a/Externals/SDL/Include_1.2/close_code.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2004 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file reverses the effects of begin_code.h and should be included - after you finish any function and structure declarations in your headers -*/ - -#undef _begin_code_h - -/* Reset structure packing at previous byte alignment */ -#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__WATCOMC__) || defined(__BORLANDC__) -#ifdef __BORLANDC__ -#pragma nopackwarning -#endif -#if (defined(__MWERKS__) && defined(__MACOS__)) -#pragma options align=reset -#pragma enumsalwaysint reset -#else -#pragma pack(pop) -#endif -#endif /* Compiler needs structure packing set */ - diff --git a/Externals/SDL/Include_1.3/SDL.h b/Externals/SDL/Include_1.3/SDL.h deleted file mode 100644 index f1078304de..0000000000 --- a/Externals/SDL/Include_1.3/SDL.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL.h - * - * Main include header for the SDL library - */ -/** - * \mainpage Simple DirectMedia Layer (SDL) - -http://www.libsdl.org/ - -* \section intro_sec Introduction - -This is the Simple DirectMedia Layer, a general API that provides low -level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, -and 2D framebuffer across multiple platforms. - -The current version supports Linux, Windows, Windows CE, BeOS, MacOS, -Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. -The code contains support for Dreamcast, Atari, AIX, OSF/Tru64, -RISC OS, SymbianOS, and OS/2, but these are not officially supported. - -SDL is written in C, but works with C++ natively, and has bindings to -several other languages, including Ada, C#, Eiffel, Erlang, Euphoria, -Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, -Pike, Pliant, Python, Ruby, and Smalltalk. - -This library is distributed under GNU LGPL version 2, which can be -found in the file "COPYING". This license allows you to use SDL -freely in commercial programs as long as you link with the dynamic -library. - -The best way to learn how to use SDL is to check out the header files in -the "include" subdirectory and the programs in the "test" subdirectory. -The header files and test programs are well commented and always up to date. -More documentation is available in HTML format in "docs/index.html", and -a documentation wiki is available online at: - http://www.libsdl.org/cgi/docwiki.cgi - -The test programs in the "test" subdirectory are in the public domain. - -Frequently asked questions are answered online: - http://www.libsdl.org/faq.php - -If you need help with the library, or just want to discuss SDL related -issues, you can join the developers mailing list: - http://www.libsdl.org/mailing-list.php - -Enjoy! - Sam Lantinga (slouken@libsdl.org) - */ - -#ifndef _SDL_H -#define _SDL_H - -#include "SDL_main.h" -#include "SDL_stdinc.h" -#include "SDL_audio.h" -#include "SDL_cdrom.h" -#include "SDL_cpuinfo.h" -#include "SDL_endian.h" -#include "SDL_error.h" -#include "SDL_events.h" -#include "SDL_loadso.h" -#include "SDL_mutex.h" -#include "SDL_rwops.h" -#include "SDL_thread.h" -#include "SDL_timer.h" -#include "SDL_video.h" -#include "SDL_version.h" -#include "SDL_compat.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* As of version 0.5, SDL is loaded dynamically into the application */ - -/* These are the flags which may be passed to SDL_Init() -- you should - specify the subsystems which you will be using in your application. -*/ -#define SDL_INIT_TIMER 0x00000001 -#define SDL_INIT_AUDIO 0x00000010 -#define SDL_INIT_VIDEO 0x00000020 -#define SDL_INIT_CDROM 0x00000100 -#define SDL_INIT_JOYSTICK 0x00000200 -#define SDL_INIT_HAPTIC 0x00001000 -#define SDL_INIT_NOPARACHUTE 0x00100000 /* Don't catch fatal signals */ -#define SDL_INIT_EVENTTHREAD 0x01000000 /* Not supported on all OS's */ -#define SDL_INIT_EVERYTHING 0x0000FFFF - -/* This function loads the SDL dynamically linked library and initializes - * the subsystems specified by 'flags' (and those satisfying dependencies) - * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup - * signal handlers for some commonly ignored fatal signals (like SIGSEGV) - */ -extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); - -/* This function initializes specific SDL subsystems */ -extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); - -/* This function cleans up specific SDL subsystems */ -extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); - -/* This function returns mask of the specified subsystems which have - been initialized. - If 'flags' is 0, it returns a mask of all initialized subsystems. -*/ -extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); - -/* This function cleans up all initialized subsystems and unloads the - * dynamically linked library. You should call it upon all exit conditions. - */ -extern DECLSPEC void SDLCALL SDL_Quit(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_H */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_audio.h b/Externals/SDL/Include_1.3/SDL_audio.h deleted file mode 100644 index eeac3f5774..0000000000 --- a/Externals/SDL/Include_1.3/SDL_audio.h +++ /dev/null @@ -1,423 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_audio.h - * - * Access to the raw audio mixing buffer for the SDL library - */ - -#ifndef _SDL_audio_h -#define _SDL_audio_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_endian.h" -#include "SDL_mutex.h" -#include "SDL_thread.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -typedef Uint16 SDL_AudioFormat; - -/* The calculated values in this structure are calculated by SDL_OpenAudio() */ -typedef struct SDL_AudioSpec -{ - int freq; /* DSP frequency -- samples per second */ - SDL_AudioFormat format; /* Audio data format */ - Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ - Uint8 silence; /* Audio buffer silence value (calculated) */ - Uint16 samples; /* Audio buffer size in samples (power of 2) */ - Uint16 padding; /* Necessary for some compile environments */ - Uint32 size; /* Audio buffer size in bytes (calculated) */ - /* This function is called when the audio device needs more data. - 'stream' is a pointer to the audio data buffer - 'len' is the length of that buffer in bytes. - Once the callback returns, the buffer will no longer be valid. - Stereo samples are stored in a LRLRLR ordering. - */ - void (SDLCALL * callback) (void *userdata, Uint8 * stream, int len); - void *userdata; -} SDL_AudioSpec; - - -/* - These are what the 16 bits in SDL_AudioFormat currently mean... - (Unspecified bits are always zero.) - - ++-----------------------sample is signed if set - || - || ++-----------sample is bigendian if set - || || - || || ++---sample is float if set - || || || - || || || +---sample bit size---+ - || || || | | - 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 - - There are macros in SDL 1.3 and later to query these bits. -*/ - -#define SDL_AUDIO_MASK_BITSIZE (0xFF) -#define SDL_AUDIO_MASK_DATATYPE (1<<8) -#define SDL_AUDIO_MASK_ENDIAN (1<<12) -#define SDL_AUDIO_MASK_SIGNED (1<<15) -#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) -#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) -#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) -#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) -#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) -#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) -#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) - -/* Audio format flags (defaults to LSB byte order) */ -#define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ -#define AUDIO_S8 0x8008 /* Signed 8-bit samples */ -#define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ -#define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ -#define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ -#define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ -#define AUDIO_U16 AUDIO_U16LSB -#define AUDIO_S16 AUDIO_S16LSB - -/* int32 support new to SDL 1.3 */ -#define AUDIO_S32LSB 0x8020 /* 32-bit integer samples */ -#define AUDIO_S32MSB 0x9020 /* As above, but big-endian byte order */ -#define AUDIO_S32 AUDIO_S32LSB - -/* float32 support new to SDL 1.3 */ -#define AUDIO_F32LSB 0x8120 /* 32-bit floating point samples */ -#define AUDIO_F32MSB 0x9120 /* As above, but big-endian byte order */ -#define AUDIO_F32 AUDIO_F32LSB - -/* Native audio byte ordering */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define AUDIO_U16SYS AUDIO_U16LSB -#define AUDIO_S16SYS AUDIO_S16LSB -#define AUDIO_S32SYS AUDIO_S32LSB -#define AUDIO_F32SYS AUDIO_F32LSB -#else -#define AUDIO_U16SYS AUDIO_U16MSB -#define AUDIO_S16SYS AUDIO_S16MSB -#define AUDIO_S32SYS AUDIO_S32MSB -#define AUDIO_F32SYS AUDIO_F32MSB -#endif - -/* Which audio format changes are allowed when opening a device */ -#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 -#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 -#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 -#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE) - -/* A structure to hold a set of audio conversion filters and buffers */ -struct SDL_AudioCVT; -typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, - SDL_AudioFormat format); - -typedef struct SDL_AudioCVT -{ - int needed; /* Set to 1 if conversion possible */ - SDL_AudioFormat src_format; /* Source audio format */ - SDL_AudioFormat dst_format; /* Target audio format */ - double rate_incr; /* Rate conversion increment */ - Uint8 *buf; /* Buffer to hold entire audio data */ - int len; /* Length of original audio buffer */ - int len_cvt; /* Length of converted audio buffer */ - int len_mult; /* buffer must be len*len_mult big */ - double len_ratio; /* Given len, final size is len*len_ratio */ - SDL_AudioFilter filters[10]; /* Filter list */ - int filter_index; /* Current audio conversion function */ -} SDL_AudioCVT; - - -/* Function prototypes */ - -/* These functions return the list of built in audio drivers, in the - * order that they are normally initialized by default. - */ -extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); -extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); - -/* These functions are used internally, and should not be used unless you - * have a specific need to specify the audio driver you want to use. - * You should normally use SDL_Init() or SDL_InitSubSystem(). - */ -extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); -extern DECLSPEC void SDLCALL SDL_AudioQuit(void); - -/* This function returns the name of the current audio driver, or NULL - * if no driver has been initialized. - */ -extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); - -/* - * This function opens the audio device with the desired parameters, and - * returns 0 if successful, placing the actual hardware parameters in the - * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio - * data passed to the callback function will be guaranteed to be in the - * requested format, and will be automatically converted to the hardware - * audio format if necessary. This function returns -1 if it failed - * to open the audio device, or couldn't set up the audio thread. - * - * When filling in the desired audio spec structure, - * 'desired->freq' should be the desired audio frequency in samples-per-second. - * 'desired->format' should be the desired audio format. - * 'desired->samples' is the desired size of the audio buffer, in samples. - * This number should be a power of two, and may be adjusted by the audio - * driver to a value more suitable for the hardware. Good values seem to - * range between 512 and 8096 inclusive, depending on the application and - * CPU speed. Smaller values yield faster response time, but can lead - * to underflow if the application is doing heavy processing and cannot - * fill the audio buffer in time. A stereo sample consists of both right - * and left channels in LR ordering. - * Note that the number of samples is directly related to time by the - * following formula: ms = (samples*1000)/freq - * 'desired->size' is the size in bytes of the audio buffer, and is - * calculated by SDL_OpenAudio(). - * 'desired->silence' is the value used to set the buffer to silence, - * and is calculated by SDL_OpenAudio(). - * 'desired->callback' should be set to a function that will be called - * when the audio device is ready for more data. It is passed a pointer - * to the audio buffer, and the length in bytes of the audio buffer. - * This function usually runs in a separate thread, and so you should - * protect data structures that it accesses by calling SDL_LockAudio() - * and SDL_UnlockAudio() in your code. - * 'desired->userdata' is passed as the first parameter to your callback - * function. - * - * The audio device starts out playing silence when it's opened, and should - * be enabled for playing by calling SDL_PauseAudio(0) when you are ready - * for your audio callback function to be called. Since the audio driver - * may modify the requested size of the audio buffer, you should allocate - * any local mixing buffers after you open the audio device. - */ -extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, - SDL_AudioSpec * obtained); - -/* - * SDL Audio Device IDs. - * A successful call to SDL_OpenAudio() is always device id 1, and legacy - * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls - * always returns devices >= 2 on success. The legacy calls are good both - * for backwards compatibility and when you don't care about multiple, - * specific, or capture devices. - */ -typedef Uint32 SDL_AudioDeviceID; - -/* - * Get the number of available devices exposed by the current driver. - * Only valid after a successfully initializing the audio subsystem. - * Returns -1 if an explicit list of devices can't be determined; this is - * not an error. For example, if SDL is set up to talk to a remote audio - * server, it can't list every one available on the Internet, but it will - * still allow a specific host to be specified to SDL_OpenAudioDevice(). - * In many common cases, when this function returns a value <= 0, it can still - * successfully open the default device (NULL for first argument of - * SDL_OpenAudioDevice()). - */ -extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); - -/* - * Get the human-readable name of a specific audio device. - * Must be a value between 0 and (number of audio devices-1). - * Only valid after a successfully initializing the audio subsystem. - * The values returned by this function reflect the latest call to - * SDL_GetNumAudioDevices(); recall that function to redetect available - * hardware. - * - * The string returned by this function is UTF-8 encoded, read-only, and - * managed internally. You are not to free it. If you need to keep the - * string for any length of time, you should make your own copy of it, as it - * will be invalid next time any of several other SDL functions is called. - */ -extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, - int iscapture); - - -/* - * Open a specific audio device. Passing in a device name of NULL requests - * the most reasonable default (and is equivalent to calling SDL_OpenAudio()). - * The device name is a UTF-8 string reported by SDL_GetAudioDevice(), but - * some drivers allow arbitrary and driver-specific strings, such as a - * hostname/IP address for a remote audio server, or a filename in the - * diskaudio driver. - * Returns 0 on error, a valid device ID that is >= 2 on success. - * SDL_OpenAudio(), unlike this function, always acts on device ID 1. - */ -extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice(const char - *device, - int iscapture, - const - SDL_AudioSpec * - desired, - SDL_AudioSpec * - obtained, - int - allowed_changes); - - - -/* - * Get the current audio state: - */ -typedef enum -{ - SDL_AUDIO_STOPPED = 0, - SDL_AUDIO_PLAYING, - SDL_AUDIO_PAUSED -} SDL_audiostatus; -extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); - -extern DECLSPEC SDL_audiostatus SDLCALL -SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); - -/* - * This function pauses and unpauses the audio callback processing. - * It should be called with a parameter of 0 after opening the audio - * device to start playing sound. This is so you can safely initialize - * data for your callback function after opening the audio device. - * Silence will be written to the audio device during the pause. - */ -extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); -extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, - int pause_on); - -/* - * This function loads a WAVE from the data source, automatically freeing - * that source if 'freesrc' is non-zero. For example, to load a WAVE file, - * you could do: - * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); - * - * If this function succeeds, it returns the given SDL_AudioSpec, - * filled with the audio data format of the wave data, and sets - * 'audio_buf' to a malloc()'d buffer containing the audio data, - * and sets 'audio_len' to the length of that audio buffer, in bytes. - * You need to free the audio buffer with SDL_FreeWAV() when you are - * done with it. - * - * This function returns NULL and sets the SDL error message if the - * wave file cannot be opened, uses an unknown data format, or is - * corrupt. Currently raw and MS-ADPCM WAVE files are supported. - */ -extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, - int freesrc, - SDL_AudioSpec * spec, - Uint8 ** audio_buf, - Uint32 * audio_len); - -/* Compatibility convenience function -- loads a WAV from a file */ -#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ - SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) - -/* - * This function frees data previously allocated with SDL_LoadWAV_RW() - */ -extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); - -/* - * This function takes a source format and rate and a destination format - * and rate, and initializes the 'cvt' structure with information needed - * by SDL_ConvertAudio() to convert a buffer of audio data from one format - * to the other. - * Returns -1 if the format conversion is not supported, 0 if there's - * no conversion needed, or 1 if the audio filter is set up. - */ -extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, - SDL_AudioFormat src_format, - Uint8 src_channels, - int src_rate, - SDL_AudioFormat dst_format, - Uint8 dst_channels, - int dst_rate); - -/* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), - * created an audio buffer cvt->buf, and filled it with cvt->len bytes of - * audio data in the source format, this function will convert it in-place - * to the desired format. - * The data conversion may expand the size of the audio data, so the buffer - * cvt->buf should be allocated after the cvt structure is initialized by - * SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long. - */ -extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); - -/* - * This takes two audio buffers of the playing audio format and mixes - * them, performing addition, volume adjustment, and overflow clipping. - * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME - * for full audio volume. Note this does not change hardware volume. - * This is provided for convenience -- you can mix your own audio data. - */ -#define SDL_MIX_MAXVOLUME 128 -extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, - Uint32 len, int volume); - -/* - * This works like SDL_MixAudio, but you specify the audio format instead of - * using the format of audio device 1. Thus it can be used when no audio - * device is open at all. - */ -extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, - const Uint8 * src, - SDL_AudioFormat format, - Uint32 len, int volume); - -/* - * The lock manipulated by these functions protects the callback function. - * During a LockAudio/UnlockAudio pair, you can be guaranteed that the - * callback function is not running. Do not call these from the callback - * function or you will cause deadlock. - */ -extern DECLSPEC void SDLCALL SDL_LockAudio(void); -extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); -extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); -extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); - -/* - * This function shuts down audio processing and closes the audio device. - */ -extern DECLSPEC void SDLCALL SDL_CloseAudio(void); -extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); - -/* - * Returns 1 if audio device is still functioning, zero if not, -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_AudioDeviceConnected(SDL_AudioDeviceID dev); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_audio_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_cdrom.h b/Externals/SDL/Include_1.3/SDL_cdrom.h deleted file mode 100644 index f90dfda7c9..0000000000 --- a/Externals/SDL/Include_1.3/SDL_cdrom.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_cdrom.h - * - * This is the CD-audio control API for Simple DirectMedia Layer - */ - -#ifndef _SDL_cdrom_h -#define _SDL_cdrom_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_CDROM flag. This causes SDL to scan the system - for CD-ROM drives, and load appropriate drivers. -*/ - -/* The maximum number of CD-ROM tracks on a disk */ -#define SDL_MAX_TRACKS 99 - -/* The types of CD-ROM track possible */ -#define SDL_AUDIO_TRACK 0x00 -#define SDL_DATA_TRACK 0x04 - -/* The possible states which a CD-ROM drive can be in. */ -typedef enum -{ - CD_TRAYEMPTY, - CD_STOPPED, - CD_PLAYING, - CD_PAUSED, - CD_ERROR = -1 -} CDstatus; - -/* Given a status, returns true if there's a disk in the drive */ -#define CD_INDRIVE(status) ((int)(status) > 0) - -typedef struct SDL_CDtrack -{ - Uint8 id; /* Track number */ - Uint8 type; /* Data or audio track */ - Uint16 unused; - Uint32 length; /* Length, in frames, of this track */ - Uint32 offset; /* Offset, in frames, from start of disk */ -} SDL_CDtrack; - -/* This structure is only current as of the last call to SDL_CDStatus() */ -typedef struct SDL_CD -{ - int id; /* Private drive identifier */ - CDstatus status; /* Current drive status */ - - /* The rest of this structure is only valid if there's a CD in drive */ - int numtracks; /* Number of tracks on disk */ - int cur_track; /* Current track position */ - int cur_frame; /* Current frame offset within current track */ - SDL_CDtrack track[SDL_MAX_TRACKS + 1]; -} SDL_CD; - -/* Conversion functions from frames to Minute/Second/Frames and vice versa */ -#define CD_FPS 75 -#define FRAMES_TO_MSF(f, M,S,F) { \ - int value = f; \ - *(F) = value%CD_FPS; \ - value /= CD_FPS; \ - *(S) = value%60; \ - value /= 60; \ - *(M) = value; \ -} -#define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F)) - -/* CD-audio API functions: */ - -/* Returns the number of CD-ROM drives on the system, or -1 if - SDL_Init() has not been called with the SDL_INIT_CDROM flag. - */ -extern DECLSPEC int SDLCALL SDL_CDNumDrives(void); - -/* Returns a human-readable, system-dependent identifier for the CD-ROM. - Example: - "/dev/cdrom" - "E:" - "/dev/disk/ide/1/master" -*/ -extern DECLSPEC const char *SDLCALL SDL_CDName(int drive); - -/* Opens a CD-ROM drive for access. It returns a drive handle on success, - or NULL if the drive was invalid or busy. This newly opened CD-ROM - becomes the default CD used when other CD functions are passed a NULL - CD-ROM handle. - Drives are numbered starting with 0. Drive 0 is the system default CD-ROM. -*/ -extern DECLSPEC SDL_CD *SDLCALL SDL_CDOpen(int drive); - -/* This function returns the current status of the given drive. - If the drive has a CD in it, the table of contents of the CD and current - play position of the CD will be stored in the SDL_CD structure. -*/ -extern DECLSPEC CDstatus SDLCALL SDL_CDStatus(SDL_CD * cdrom); - -/* Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks' - tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play - until the end of the CD. This function will skip data tracks. - This function should only be called after calling SDL_CDStatus() to - get track information about the CD. - For example: - // Play entire CD: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); - // Play last track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { - SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0); - } - // Play first and second track and 10 seconds of third track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 2, 10); - - This function returns 0, or -1 if there was an error. -*/ -extern DECLSPEC int SDLCALL SDL_CDPlayTracks(SDL_CD * cdrom, - int start_track, - int start_frame, int ntracks, - int nframes); - -/* Play the given CD starting at 'start' frame for 'length' frames. - It returns 0, or -1 if there was an error. -*/ -extern DECLSPEC int SDLCALL SDL_CDPlay(SDL_CD * cdrom, int start, int length); - -/* Pause play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDPause(SDL_CD * cdrom); - -/* Resume play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDResume(SDL_CD * cdrom); - -/* Stop play -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDStop(SDL_CD * cdrom); - -/* Eject CD-ROM -- returns 0, or -1 on error */ -extern DECLSPEC int SDLCALL SDL_CDEject(SDL_CD * cdrom); - -/* Closes the handle for the CD-ROM drive */ -extern DECLSPEC void SDLCALL SDL_CDClose(SDL_CD * cdrom); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_video_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_compat.h b/Externals/SDL/Include_1.3/SDL_compat.h deleted file mode 100644 index 109dfb374e..0000000000 --- a/Externals/SDL/Include_1.3/SDL_compat.h +++ /dev/null @@ -1,290 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file contains functions for backwards compatibility with SDL 1.2 */ - -#ifndef _SDL_compat_h -#define _SDL_compat_h - -#include "SDL_video.h" -#include "SDL_version.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -#define SDL_SWSURFACE 0x00000000 /* Not used */ -#define SDL_SRCALPHA 0x00010000 -#define SDL_SRCCOLORKEY 0x00020000 -#define SDL_ANYFORMAT 0x00100000 -#define SDL_HWPALETTE 0x00200000 -#define SDL_DOUBLEBUF 0x00400000 -#define SDL_FULLSCREEN 0x00800000 -#define SDL_RESIZABLE 0x01000000 -#define SDL_NOFRAME 0x02000000 -#define SDL_OPENGL 0x04000000 -#define SDL_HWSURFACE 0x08000001 /* Not used */ -#define SDL_ASYNCBLIT 0x08000000 /* Not used */ -#define SDL_RLEACCELOK 0x08000000 /* Not used */ -#define SDL_HWACCEL 0x08000000 /* Not used */ - -#define SDL_APPMOUSEFOCUS 0x01 -#define SDL_APPINPUTFOCUS 0x02 -#define SDL_APPACTIVE 0x04 - -#define SDL_LOGPAL 0x01 -#define SDL_PHYSPAL 0x02 - -#define SDL_ACTIVEEVENT SDL_EVENT_RESERVED1 -#define SDL_VIDEORESIZE SDL_EVENT_RESERVED2 -#define SDL_VIDEOEXPOSE SDL_EVENT_RESERVED3 -#define SDL_ACTIVEEVENTMASK SDL_EVENTMASK(SDL_ACTIVEEVENT) -#define SDL_VIDEORESIZEMASK SDL_EVENTMASK(SDL_VIDEORESIZE) -#define SDL_VIDEOEXPOSEMASK SDL_EVENTMASK(SDL_VIDEOEXPOSE) - -#define SDL_BUTTON_WHEELUP 4 -#define SDL_BUTTON_WHEELDOWN 5 - -#define SDL_DEFAULT_REPEAT_DELAY 500 -#define SDL_DEFAULT_REPEAT_INTERVAL 30 - -typedef struct SDL_VideoInfo -{ - Uint32 hw_available:1; - Uint32 wm_available:1; - Uint32 UnusedBits1:6; - Uint32 UnusedBits2:1; - Uint32 blit_hw:1; - Uint32 blit_hw_CC:1; - Uint32 blit_hw_A:1; - Uint32 blit_sw:1; - Uint32 blit_sw_CC:1; - Uint32 blit_sw_A:1; - Uint32 blit_fill:1; - Uint32 UnusedBits3:16; - Uint32 video_mem; - - SDL_PixelFormat *vfmt; - - int current_w; - int current_h; -} SDL_VideoInfo; - -/* The most common video overlay formats. - For an explanation of these pixel formats, see: - http://www.webartz.com/fourcc/indexyuv.htm - - For information on the relationship between color spaces, see: - http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html - */ -#define SDL_YV12_OVERLAY 0x32315659 /* Planar mode: Y + V + U (3 planes) */ -#define SDL_IYUV_OVERLAY 0x56555949 /* Planar mode: Y + U + V (3 planes) */ -#define SDL_YUY2_OVERLAY 0x32595559 /* Packed mode: Y0+U0+Y1+V0 (1 plane) */ -#define SDL_UYVY_OVERLAY 0x59565955 /* Packed mode: U0+Y0+V0+Y1 (1 plane) */ -#define SDL_YVYU_OVERLAY 0x55595659 /* Packed mode: Y0+V0+Y1+U0 (1 plane) */ - -/* The YUV hardware video overlay */ -typedef struct SDL_Overlay -{ - Uint32 format; /* Read-only */ - int w, h; /* Read-only */ - int planes; /* Read-only */ - Uint16 *pitches; /* Read-only */ - Uint8 **pixels; /* Read-write */ - - /* Hardware-specific surface info */ - struct private_yuvhwfuncs *hwfuncs; - struct private_yuvhwdata *hwdata; - - /* Special flags */ - Uint32 hw_overlay:1; /* Flag: This overlay hardware accelerated? */ - Uint32 UnusedBits:31; -} SDL_Overlay; - -typedef enum -{ - SDL_GRAB_QUERY = -1, - SDL_GRAB_OFF = 0, - SDL_GRAB_ON = 1 -} SDL_GrabMode; - -struct SDL_SysWMinfo; - -/* Obsolete or renamed key codes */ - -/* These key constants were renamed for clarity or consistency. */ -#define SDLK_0 '0' -#define SDLK_1 '1' -#define SDLK_2 '2' -#define SDLK_3 '3' -#define SDLK_4 '4' -#define SDLK_5 '5' -#define SDLK_6 '6' -#define SDLK_7 '7' -#define SDLK_8 '8' -#define SDLK_9 '9' -#define SDLK_a 'a' -#define SDLK_b 'b' -#define SDLK_c 'c' -#define SDLK_d 'd' -#define SDLK_e 'e' -#define SDLK_f 'f' -#define SDLK_g 'g' -#define SDLK_h 'h' -#define SDLK_i 'i' -#define SDLK_j 'j' -#define SDLK_k 'k' -#define SDLK_l 'l' -#define SDLK_m 'm' -#define SDLK_n 'n' -#define SDLK_o 'o' -#define SDLK_p 'p' -#define SDLK_q 'q' -#define SDLK_r 'r' -#define SDLK_s 's' -#define SDLK_t 't' -#define SDLK_u 'u' -#define SDLK_v 'v' -#define SDLK_w 'w' -#define SDLK_x 'x' -#define SDLK_y 'y' -#define SDLK_z 'z' -#define SDLK_QUOTE '\'' -#define SDLK_MINUS '-' -#define SDLK_BACKQUOTE '`' -#define SDLK_EXCLAIM '!' -#define SDLK_QUOTEDBL '"' -#define SDLK_HASH '#' -#define SDLK_DOLLAR '$' -#define SDLK_AMPERSAND '&' -#define SDLK_LEFTPAREN '(' -#define SDLK_RIGHTPAREN ')' -#define SDLK_ASTERISK '*' -#define SDLK_PLUS '+' -#define SDLK_COLON ':' -#define SDLK_LESS '<' -#define SDLK_GREATER '>' -#define SDLK_QUESTION '?' -#define SDLK_AT '@' -#define SDLK_CARET '^' -#define SDLK_UNDERSCORE '_' -#define SDLK_KP0 SDLK_KP_0 -#define SDLK_KP1 SDLK_KP_1 -#define SDLK_KP2 SDLK_KP_2 -#define SDLK_KP3 SDLK_KP_3 -#define SDLK_KP4 SDLK_KP_4 -#define SDLK_KP5 SDLK_KP_5 -#define SDLK_KP6 SDLK_KP_6 -#define SDLK_KP7 SDLK_KP_7 -#define SDLK_KP8 SDLK_KP_8 -#define SDLK_KP9 SDLK_KP_9 -#define SDLK_NUMLOCK SDLK_NUMLOCKCLEAR -#define SDLK_SCROLLOCK SDLK_SCROLLLOCK -#define SDLK_PRINT SDLK_PRINTSCREEN - -/* The META modifier is equivalent to the GUI modifier from the USB standard */ -#define KMOD_LMETA KMOD_LGUI -#define KMOD_RMETA KMOD_RGUI -#define KMOD_META KMOD_GUI - -/* These keys don't appear in the USB specification (or at least not under those names). I'm unsure if the following assignments make sense or if these codes should be defined as actual additional SDLK_ constants. */ -#define SDLK_LSUPER SDLK_LMETA -#define SDLK_RSUPER SDLK_RMETA -#define SDLK_COMPOSE SDLK_APPLICATION -#define SDLK_BREAK SDLK_STOP -#define SDLK_EURO SDLK_2 - - -#define SDL_SetModuleHandle(x) -#define SDL_AllocSurface SDL_CreateRGBSurface - -extern DECLSPEC const SDL_version *SDLCALL SDL_Linked_Version(void); -extern DECLSPEC char *SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); -extern DECLSPEC char *SDLCALL SDL_VideoDriverName(char *namebuf, int maxlen); -extern DECLSPEC const SDL_VideoInfo *SDLCALL SDL_GetVideoInfo(void); -extern DECLSPEC int SDLCALL SDL_VideoModeOK(int width, - int height, - int bpp, Uint32 flags); -extern DECLSPEC SDL_Rect **SDLCALL SDL_ListModes(const SDL_PixelFormat * - format, Uint32 flags); -extern DECLSPEC SDL_Surface *SDLCALL SDL_SetVideoMode(int width, int height, - int bpp, Uint32 flags); -extern DECLSPEC SDL_Surface *SDLCALL SDL_GetVideoSurface(void); -extern DECLSPEC void SDLCALL SDL_UpdateRects(SDL_Surface * screen, - int numrects, SDL_Rect * rects); -extern DECLSPEC void SDLCALL SDL_UpdateRect(SDL_Surface * screen, - Sint32 x, - Sint32 y, Uint32 w, Uint32 h); -extern DECLSPEC int SDLCALL SDL_Flip(SDL_Surface * screen); -extern DECLSPEC int SDLCALL SDL_SetAlpha(SDL_Surface * surface, - Uint32 flag, Uint8 alpha); -extern DECLSPEC SDL_Surface *SDLCALL SDL_DisplayFormat(SDL_Surface * surface); -extern DECLSPEC SDL_Surface *SDLCALL SDL_DisplayFormatAlpha(SDL_Surface * - surface); -extern DECLSPEC void SDLCALL SDL_WM_SetCaption(const char *title, - const char *icon); -extern DECLSPEC void SDLCALL SDL_WM_GetCaption(const char **title, - const char **icon); -extern DECLSPEC void SDLCALL SDL_WM_SetIcon(SDL_Surface * icon, Uint8 * mask); -extern DECLSPEC int SDLCALL SDL_WM_IconifyWindow(void); -extern DECLSPEC int SDLCALL SDL_WM_ToggleFullScreen(SDL_Surface * surface); -extern DECLSPEC SDL_GrabMode SDLCALL SDL_WM_GrabInput(SDL_GrabMode mode); -extern DECLSPEC int SDLCALL SDL_SetPalette(SDL_Surface * surface, - int flags, - const SDL_Color * colors, - int firstcolor, int ncolors); -extern DECLSPEC int SDLCALL SDL_SetColors(SDL_Surface * surface, - const SDL_Color * colors, - int firstcolor, int ncolors); -extern DECLSPEC int SDLCALL SDL_GetWMInfo(struct SDL_SysWMinfo *info); -extern DECLSPEC Uint8 SDLCALL SDL_GetAppState(void); -extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y); -extern DECLSPEC SDL_Overlay *SDLCALL SDL_CreateYUVOverlay(int width, - int height, - Uint32 format, - SDL_Surface * - display); -extern DECLSPEC int SDLCALL SDL_LockYUVOverlay(SDL_Overlay * overlay); -extern DECLSPEC void SDLCALL SDL_UnlockYUVOverlay(SDL_Overlay * overlay); -extern DECLSPEC int SDLCALL SDL_DisplayYUVOverlay(SDL_Overlay * overlay, - SDL_Rect * dstrect); -extern DECLSPEC void SDLCALL SDL_FreeYUVOverlay(SDL_Overlay * overlay); -extern DECLSPEC void SDLCALL SDL_GL_SwapBuffers(void); -extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval); -extern DECLSPEC void SDLCALL SDL_GetKeyRepeat(int *delay, int *interval); -extern DECLSPEC int SDLCALL SDL_EnableUNICODE(int enable); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_compat_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_config.h b/Externals/SDL/Include_1.3/SDL_config.h deleted file mode 100644 index d72d7e585e..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_h -#define _SDL_config_h - -#include "SDL_platform.h" - -/* Add any platform that doesn't build using the configure system */ -#if defined(__NINTENDODS__) -#include "SDL_config_nintendods.h" -#elif defined(__DREAMCAST__) -#include "SDL_config_dreamcast.h" -#elif defined(__IPHONEOS__) -#include "SDL_config_iphoneos.h" -#elif defined(__MACOSX__) -#include "SDL_config_macosx.h" -#elif defined(__WIN32__) -#include "SDL_config_win32.h" -#elif defined(__OS2__) -#include "SDL_config_os2.h" -#else -#include "SDL_config_minimal.h" -#endif /* platform config */ - -#endif /* _SDL_config_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config.h.default b/Externals/SDL/Include_1.3/SDL_config.h.default deleted file mode 100644 index d72d7e585e..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config.h.default +++ /dev/null @@ -1,45 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_h -#define _SDL_config_h - -#include "SDL_platform.h" - -/* Add any platform that doesn't build using the configure system */ -#if defined(__NINTENDODS__) -#include "SDL_config_nintendods.h" -#elif defined(__DREAMCAST__) -#include "SDL_config_dreamcast.h" -#elif defined(__IPHONEOS__) -#include "SDL_config_iphoneos.h" -#elif defined(__MACOSX__) -#include "SDL_config_macosx.h" -#elif defined(__WIN32__) -#include "SDL_config_win32.h" -#elif defined(__OS2__) -#include "SDL_config_os2.h" -#else -#include "SDL_config_minimal.h" -#endif /* platform config */ - -#endif /* _SDL_config_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config.h.in b/Externals/SDL/Include_1.3/SDL_config.h.in deleted file mode 100644 index 88a1f11c8c..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config.h.in +++ /dev/null @@ -1,327 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_h -#define _SDL_config_h - -/* This is a set of defines to configure the SDL features */ - -/* General platform specific identifiers */ -#include "SDL_platform.h" - -/* Make sure that this isn't included by Visual C++ */ -#ifdef _MSC_VER -#error You should copy include/SDL_config.h.default to include/SDL_config.h -#endif - -/* C language features */ -#undef const -#undef inline -#undef volatile - -/* C datatypes */ -#undef size_t -#undef int8_t -#undef uint8_t -#undef int16_t -#undef uint16_t -#undef int32_t -#undef uint32_t -#undef int64_t -#undef uint64_t -#undef uintptr_t -#undef SDL_HAS_64BIT_TYPE - -/* Endianness */ -#undef SDL_BYTEORDER - -/* Comment this if you want to build without any C library requirements */ -#undef HAVE_LIBC -#if HAVE_LIBC - -/* Useful headers */ -#undef HAVE_ALLOCA_H -#undef HAVE_SYS_TYPES_H -#undef HAVE_STDIO_H -#undef STDC_HEADERS -#undef HAVE_STDLIB_H -#undef HAVE_STDARG_H -#undef HAVE_MALLOC_H -#undef HAVE_MEMORY_H -#undef HAVE_STRING_H -#undef HAVE_STRINGS_H -#undef HAVE_INTTYPES_H -#undef HAVE_STDINT_H -#undef HAVE_CTYPE_H -#undef HAVE_MATH_H -#undef HAVE_ICONV_H -#undef HAVE_SIGNAL_H -#undef HAVE_ALTIVEC_H - -/* C library functions */ -#undef HAVE_MALLOC -#undef HAVE_CALLOC -#undef HAVE_REALLOC -#undef HAVE_FREE -#undef HAVE_ALLOCA -#ifndef _WIN32 /* Don't use C runtime versions of these on Windows */ -#undef HAVE_GETENV -#undef HAVE_PUTENV -#undef HAVE_UNSETENV -#endif -#undef HAVE_QSORT -#undef HAVE_ABS -#undef HAVE_BCOPY -#undef HAVE_MEMSET -#undef HAVE_MEMCPY -#undef HAVE_MEMMOVE -#undef HAVE_MEMCMP -#undef HAVE_STRLEN -#undef HAVE_STRLCPY -#undef HAVE_STRLCAT -#undef HAVE_STRDUP -#undef HAVE__STRREV -#undef HAVE__STRUPR -#undef HAVE__STRLWR -#undef HAVE_INDEX -#undef HAVE_RINDEX -#undef HAVE_STRCHR -#undef HAVE_STRRCHR -#undef HAVE_STRSTR -#undef HAVE_ITOA -#undef HAVE__LTOA -#undef HAVE__UITOA -#undef HAVE__ULTOA -#undef HAVE_STRTOL -#undef HAVE_STRTOUL -#undef HAVE__I64TOA -#undef HAVE__UI64TOA -#undef HAVE_STRTOLL -#undef HAVE_STRTOULL -#undef HAVE_STRTOD -#undef HAVE_ATOI -#undef HAVE_ATOF -#undef HAVE_STRCMP -#undef HAVE_STRNCMP -#undef HAVE__STRICMP -#undef HAVE_STRCASECMP -#undef HAVE__STRNICMP -#undef HAVE_STRNCASECMP -#undef HAVE_SSCANF -#undef HAVE_SNPRINTF -#undef HAVE_VSNPRINTF -#undef HAVE_M_PI -#undef HAVE_CEIL -#undef HAVE_COPYSIGN -#undef HAVE_COS -#undef HAVE_COSF -#undef HAVE_FABS -#undef HAVE_FLOOR -#undef HAVE_LOG -#undef HAVE_POW -#undef HAVE_SCALBN -#undef HAVE_SIN -#undef HAVE_SINF -#undef HAVE_SQRT -#undef HAVE_SIGACTION -#undef HAVE_SETJMP -#undef HAVE_NANOSLEEP -#undef HAVE_CLOCK_GETTIME -#undef HAVE_DLVSYM -#undef HAVE_GETPAGESIZE - -#else -/* We may need some replacement for stdarg.h here */ -#include -#endif /* HAVE_LIBC */ - -/* Allow disabling of core subsystems */ -#undef SDL_AUDIO_DISABLED -#undef SDL_CDROM_DISABLED -#undef SDL_CPUINFO_DISABLED -#undef SDL_EVENTS_DISABLED -#undef SDL_FILE_DISABLED -#undef SDL_JOYSTICK_DISABLED -#undef SDL_HAPTIC_DISABLED -#undef SDL_LOADSO_DISABLED -#undef SDL_THREADS_DISABLED -#undef SDL_TIMERS_DISABLED -#undef SDL_VIDEO_DISABLED - -/* Enable various audio drivers */ -#undef SDL_AUDIO_DRIVER_ALSA -#undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC -#undef SDL_AUDIO_DRIVER_ARTS -#undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC -#undef SDL_AUDIO_DRIVER_PULSEAUDIO -#undef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC -#undef SDL_AUDIO_DRIVER_BEOSAUDIO -#undef SDL_AUDIO_DRIVER_BSD -#undef SDL_AUDIO_DRIVER_COREAUDIO -#undef SDL_AUDIO_DRIVER_DART -#undef SDL_AUDIO_DRIVER_DC -#undef SDL_AUDIO_DRIVER_DISK -#undef SDL_AUDIO_DRIVER_DUMMY -#undef SDL_AUDIO_DRIVER_DMEDIA -#undef SDL_AUDIO_DRIVER_DSOUND -#undef SDL_AUDIO_DRIVER_ESD -#undef SDL_AUDIO_DRIVER_ESD_DYNAMIC -#undef SDL_AUDIO_DRIVER_MINT -#undef SDL_AUDIO_DRIVER_MMEAUDIO -#undef SDL_AUDIO_DRIVER_NAS -#undef SDL_AUDIO_DRIVER_NAS_DYNAMIC -#undef SDL_AUDIO_DRIVER_NDS -#undef SDL_AUDIO_DRIVER_OSS -#undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H -#undef SDL_AUDIO_DRIVER_PAUDIO -#undef SDL_AUDIO_DRIVER_QNXNTO -#undef SDL_AUDIO_DRIVER_SNDMGR -#undef SDL_AUDIO_DRIVER_SUNAUDIO -#undef SDL_AUDIO_DRIVER_WINWAVEOUT -#undef SDL_AUDIO_DRIVER_FUSIONSOUND -#undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC - -/* Enable various cdrom drivers */ -#undef SDL_CDROM_AIX -#undef SDL_CDROM_BEOS -#undef SDL_CDROM_BSDI -#undef SDL_CDROM_DC -#undef SDL_CDROM_DUMMY -#undef SDL_CDROM_FREEBSD -#undef SDL_CDROM_LINUX -#undef SDL_CDROM_MACOSX -#undef SDL_CDROM_MINT -#undef SDL_CDROM_OPENBSD -#undef SDL_CDROM_OS2 -#undef SDL_CDROM_OSF -#undef SDL_CDROM_QNX -#undef SDL_CDROM_WIN32 - -/* Enable various input drivers */ -#undef SDL_INPUT_LINUXEV -#undef SDL_INPUT_TSLIB -#undef SDL_JOYSTICK_BEOS -#undef SDL_JOYSTICK_DC -#undef SDL_JOYSTICK_DINPUT -#undef SDL_JOYSTICK_DUMMY -#undef SDL_JOYSTICK_IOKIT -#undef SDL_JOYSTICK_LINUX -#undef SDL_JOYSTICK_MINT -#undef SDL_JOYSTICK_NDS -#undef SDL_JOYSTICK_OS2 -#undef SDL_JOYSTICK_RISCOS -#undef SDL_JOYSTICK_WINMM -#undef SDL_JOYSTICK_USBHID -#undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H -#undef SDL_HAPTIC_DUMMY -#undef SDL_HAPTIC_LINUX -#undef SDL_HAPTIC_IOKIT -#undef SDL_HAPTIC_DINPUT - -/* Enable various shared object loading systems */ -#undef SDL_LOADSO_BEOS -#undef SDL_LOADSO_DLCOMPAT -#undef SDL_LOADSO_DLOPEN -#undef SDL_LOADSO_DUMMY -#undef SDL_LOADSO_LDG -#undef SDL_LOADSO_OS2 -#undef SDL_LOADSO_WIN32 - -/* Enable various threading systems */ -#undef SDL_THREAD_BEOS -#undef SDL_THREAD_DC -#undef SDL_THREAD_NDS -#undef SDL_THREAD_OS2 -#undef SDL_THREAD_PTH -#undef SDL_THREAD_PTHREAD -#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX -#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP -#undef SDL_THREAD_SPROC -#undef SDL_THREAD_WIN32 - -/* Enable various timer systems */ -#undef SDL_TIMER_BEOS -#undef SDL_TIMER_DC -#undef SDL_TIMER_DUMMY -#undef SDL_TIMER_MINT -#undef SDL_TIMER_NDS -#undef SDL_TIMER_OS2 -#undef SDL_TIMER_RISCOS -#undef SDL_TIMER_UNIX -#undef SDL_TIMER_WIN32 -#undef SDL_TIMER_WINCE - -/* Enable various video drivers */ -#undef SDL_VIDEO_DRIVER_BWINDOW -#undef SDL_VIDEO_DRIVER_COCOA -#undef SDL_VIDEO_DRIVER_DC -#undef SDL_VIDEO_DRIVER_DIRECTFB -#undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC -#undef SDL_VIDEO_DRIVER_DUMMY -#undef SDL_VIDEO_DRIVER_FBCON -#undef SDL_VIDEO_DRIVER_GAPI -#undef SDL_VIDEO_DRIVER_GEM -#undef SDL_VIDEO_DRIVER_IPOD -#undef SDL_VIDEO_DRIVER_NANOX -#undef SDL_VIDEO_DRIVER_NDS -#undef SDL_VIDEO_DRIVER_OS2FS -#undef SDL_VIDEO_DRIVER_PHOTON -#undef SDL_VIDEO_DRIVER_PS2GS -#undef SDL_VIDEO_DRIVER_RISCOS -#undef SDL_VIDEO_DRIVER_SVGALIB -#undef SDL_VIDEO_DRIVER_VGL -#undef SDL_VIDEO_DRIVER_WIN32 -#undef SDL_VIDEO_DRIVER_WSCONS -#undef SDL_VIDEO_DRIVER_X11 -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT -#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS -#undef SDL_VIDEO_DRIVER_X11_VIDMODE -#undef SDL_VIDEO_DRIVER_X11_XINERAMA -#undef SDL_VIDEO_DRIVER_X11_XRANDR -#undef SDL_VIDEO_DRIVER_X11_XINPUT -#undef SDL_VIDEO_DRIVER_X11_SCRNSAVER -#undef SDL_VIDEO_DRIVER_X11_XV -#undef SDL_VIDEO_DRIVER_XBIOS - -#undef SDL_VIDEO_RENDER_D3D -#undef SDL_VIDEO_RENDER_GDI -#undef SDL_VIDEO_RENDER_OGL -#undef SDL_VIDEO_RENDER_X11 - -/* Enable OpenGL support */ -#undef SDL_VIDEO_OPENGL -#undef SDL_VIDEO_OPENGL_BGL -#undef SDL_VIDEO_OPENGL_CGL -#undef SDL_VIDEO_OPENGL_GLX -#undef SDL_VIDEO_OPENGL_WGL -#undef SDL_VIDEO_OPENGL_OSMESA -#undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC - -/* Enable assembly routines */ -#undef SDL_ASSEMBLY_ROUTINES -#undef SDL_ALTIVEC_BLITTERS - -#endif /* _SDL_config_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config_dreamcast.h b/Externals/SDL/Include_1.3/SDL_config_dreamcast.h deleted file mode 100644 index 5b8175c8a7..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config_dreamcast.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_dreamcast_h -#define _SDL_config_dreamcast_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -typedef unsigned long uintptr_t; -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRDUP 1 -#define HAVE_INDEX 1 -#define HAVE_RINDEX 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_DC 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_DC 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_DC 1 -#define SDL_HAPTIC_DUMMY 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_DUMMY 1 - -/* Enable various threading systems */ -#define SDL_THREAD_DC 1 - -/* Enable various timer systems */ -#define SDL_TIMER_DC 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DC 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_dreamcast_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config_iphoneos.h b/Externals/SDL/Include_1.3/SDL_config_iphoneos.h deleted file mode 100644 index 928976ac93..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config_iphoneos.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_iphoneos_h -#define _SDL_config_iphoneos_h - -#include "SDL_platform.h" - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned long uintptr_t; -#define SDL_HAS_64BIT_TYPE 1 - -#define HAVE_ALLOCA_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 - -/* enable iPhone version of Core Audio driver */ -#define SDL_AUDIO_DRIVER_COREAUDIOIPHONE 1 -/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ -#define SDL_CDROM_DISABLED 1 - -/* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ -#define SDL_HAPTIC_DISABLED 1 - -/* Enable Unix style SO loading */ -/* Technically this works, but it violates the iPhone developer agreement */ -/* #define SDL_LOADSO_DLOPEN 1 */ - -/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable various threading systems */ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Supported video drivers */ -#define SDL_VIDEO_DRIVER_UIKIT 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -/* enable OpenGL ES */ -#define SDL_VIDEO_OPENGL_ES 1 -#define SDL_VIDEO_RENDER_OGL_ES 1 - -/* enable iPhone keyboard support */ -#define SDL_IPHONE_KEYBOARD 1 - -/* Enable emulation of multiple mice through multi-touch */ -#define SDL_IPHONE_MULTIPLE_MICE 1 - -/* Set max recognized G-force from acceleromter - See src/joystick/uikit/SDLUIAccelerationDelegate.m for notes on why this is needed - */ -#define SDL_IPHONE_MAX_GFORCE 5.0 - -#endif /* _SDL_config_iphoneos_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config_macosx.h b/Externals/SDL/Include_1.3/SDL_config_macosx.h deleted file mode 100644 index c23274e15e..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config_macosx.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_macosx_h -#define _SDL_config_macosx_h - -#include "SDL_platform.h" - -/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ -#include - -/* This is a set of defines to configure the SDL features */ - -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -/* If we specified an SDK or have a post-PowerPC chip, then alloca.h exists. */ -#if ( (MAC_OS_X_VERSION_MIN_REQUIRED >= 1030) || (!defined(__POWERPC__)) ) -#define HAVE_ALLOCA_H 1 -#endif -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOULL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_STRNCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SIGACTION 1 -#define HAVE_SETJMP 1 -#define HAVE_NANOSLEEP 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_COREAUDIO 1 -#define SDL_AUDIO_DRIVER_SNDMGR 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_MACOSX 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_IOKIT 1 -#define SDL_HAPTIC_IOKIT 1 - -/* Enable various shared object loading systems */ -#ifdef __ppc__ -/* For Mac OS X 10.2 compatibility */ -#define SDL_LOADSO_DLCOMPAT 1 -#else -#define SDL_LOADSO_DLOPEN 1 -#endif - -/* Enable various threading systems */ -#define SDL_THREAD_PTHREAD 1 -#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 - -/* Enable various timer systems */ -#define SDL_TIMER_UNIX 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_COCOA 1 -#define SDL_VIDEO_DRIVER_DUMMY 1 - -/* Enable OpenGL support */ -#define SDL_VIDEO_OPENGL 1 -#define SDL_VIDEO_OPENGL_CGL 1 -#define SDL_VIDEO_RENDER_OGL 1 - -/* Enable assembly routines */ -#define SDL_ASSEMBLY_ROUTINES 1 -#ifdef __ppc__ -#define SDL_ALTIVEC_BLITTERS 1 -#endif - -#endif /* _SDL_config_macosx_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config_minimal.h b/Externals/SDL/Include_1.3/SDL_config_minimal.h deleted file mode 100644 index 1a85667484..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config_minimal.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_minimal_h -#define _SDL_config_minimal_h - -#include "SDL_platform.h" - -/* This is the minimal configuration that can be used to build SDL */ - -#include - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned int size_t; -typedef unsigned long uintptr_t; - -/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable the stub cdrom driver (src/cdrom/dummy/\*.c) */ -#define SDL_CDROM_DISABLED 1 - -/* Enable the stub joystick driver (src/joystick/dummy/\*.c) */ -#define SDL_JOYSTICK_DISABLED 1 - -/* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ -#define SDL_HAPTIC_DISABLED 1 - -/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable the stub thread support (src/thread/generic/\*.c) */ -#define SDL_THREADS_DISABLED 1 - -/* Enable the stub timer support (src/timer/dummy/\*.c) */ -#define SDL_TIMERS_DISABLED 1 - -/* Enable the dummy video driver (src/video/dummy/\*.c) */ -#define SDL_VIDEO_DRIVER_DUMMY 1 - -#endif /* _SDL_config_minimal_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config_nintendods.h b/Externals/SDL/Include_1.3/SDL_config_nintendods.h deleted file mode 100644 index 043ad08efa..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config_nintendods.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_nintendods_h -#define _SDL_config_nintendods_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; - -/* LiF: __PTRDIFF_TYPE__ was causing errors of conflicting typedefs with the - shipping with devkitARM. copied a similar ifdef from it. */ -#ifndef __PTRDIFF_TYPE__ -typedef unsigned long uintptr_t; -#else -typedef unsigned __PTRDIFF_TYPE__ uintptr_t; -#endif - - -#define SDL_HAS_64BIT_TYPE 1 - -/* Useful headers */ -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STRING_H 1 -#define HAVE_CTYPE_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRDUP 1 -#define HAVE_INDEX 1 -#define HAVE_RINDEX 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 - -/* DS isn't that sophisticated */ -#define LACKS_SYS_MMAN_H 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_NDS 1 -/*#define SDL_AUDIO_DRIVER_DUMMY 1 TODO: uncomment this later*/ - -/* DS doesn't have optical media */ -#define SDL_CDROM_DISABLED 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_NDS 1 -/*#define SDL_JOYSTICK_DUMMY 1 TODO: uncomment this later*/ - -/* DS has no dynamic linking afaik */ -#define SDL_LOADSO_DISABLED 1 - -/* Enable various threading systems */ -/*#define SDL_THREAD_NDS 1*/ -#define SDL_THREADS_DISABLED 1 - -/* Enable various timer systems */ -#define SDL_TIMER_NDS 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_NDS 1 -/*#define SDL_VIDEO_DRIVER_DUMMY 1 TODO: uncomment this later*/ - -#endif /* _SDL_config_nintendods_h */ diff --git a/Externals/SDL/Include_1.3/SDL_config_os2.h b/Externals/SDL/Include_1.3/SDL_config_os2.h deleted file mode 100644 index b80c85a13a..0000000000 --- a/Externals/SDL/Include_1.3/SDL_config_os2.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_config_os2_h -#define _SDL_config_os2_h - -#include "SDL_platform.h" - -/* This is a set of defines to configure the SDL features */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned int size_t; -typedef unsigned long uintptr_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; - -#define SDL_HAS_64BIT_TYPE 1 - -/* Use Watcom's LIBC */ -#define HAVE_LIBC 1 - -/* Useful headers */ -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDIO_H 1 -#define STDC_HEADERS 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STDARG_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRING_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_CTYPE_H 1 -#define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 - -/* C library functions */ -#define HAVE_MALLOC 1 -#define HAVE_CALLOC 1 -#define HAVE_REALLOC 1 -#define HAVE_FREE 1 -#define HAVE_ALLOCA 1 -#define HAVE_GETENV 1 -#define HAVE_PUTENV 1 -#define HAVE_UNSETENV 1 -#define HAVE_QSORT 1 -#define HAVE_ABS 1 -#define HAVE_BCOPY 1 -#define HAVE_MEMSET 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMCMP 1 -#define HAVE_STRLEN 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_STRDUP 1 -#define HAVE__STRREV 1 -#define HAVE__STRUPR 1 -#define HAVE__STRLWR 1 -#define HAVE_INDEX 1 -#define HAVE_RINDEX 1 -#define HAVE_STRCHR 1 -#define HAVE_STRRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_ITOA 1 -#define HAVE__LTOA 1 -#define HAVE__UITOA 1 -#define HAVE__ULTOA 1 -#define HAVE_STRTOL 1 -#define HAVE__I64TOA 1 -#define HAVE__UI64TOA 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOD 1 -#define HAVE_ATOI 1 -#define HAVE_ATOF 1 -#define HAVE_STRCMP 1 -#define HAVE_STRNCMP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRCASECMP 1 -#define HAVE_SSCANF 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_SETJMP 1 -#define HAVE_CLOCK_GETTIME 1 - -/* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_DART 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#define SDL_CDROM_OS2 1 - -/* Enable various input drivers */ -#define SDL_JOYSTICK_OS2 1 -#define SDL_HAPTIC_DUMMY 1 - -/* Enable various shared object loading systems */ -#define SDL_LOADSO_OS2 1 - -/* Enable various threading systems */ -#define SDL_THREAD_OS2 1 - -/* Enable various timer systems */ -#define SDL_TIMER_OS2 1 - -/* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_OS2FS 1 - -/* Enable OpenGL support */ -/* Nothing here yet for OS/2... :( */ - -/* Enable assembly routines where available */ -#define SDL_ASSEMBLY_ROUTINES 1 - -#endif /* _SDL_config_os2_h */ diff --git a/Externals/SDL/Include_1.3/SDL_copying.h b/Externals/SDL/Include_1.3/SDL_copying.h deleted file mode 100644 index 419598f7e3..0000000000 --- a/Externals/SDL/Include_1.3/SDL_copying.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ diff --git a/Externals/SDL/Include_1.3/SDL_cpuinfo.h b/Externals/SDL/Include_1.3/SDL_cpuinfo.h deleted file mode 100644 index fe4193eba9..0000000000 --- a/Externals/SDL/Include_1.3/SDL_cpuinfo.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_cpuinfo.h - * - * CPU feature detection for SDL - */ - -#ifndef _SDL_cpuinfo_h -#define _SDL_cpuinfo_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* This function returns true if the CPU has the RDTSC instruction - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); - -/* This function returns true if the CPU has MMX features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); - -/* This function returns true if the CPU has MMX Ext. features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasMMXExt(void); - -/* This function returns true if the CPU has 3DNow features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); - -/* This function returns true if the CPU has 3DNow! Ext. features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNowExt(void); - -/* This function returns true if the CPU has SSE features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); - -/* This function returns true if the CPU has SSE2 features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); - -/* This function returns true if the CPU has AltiVec features - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_cpuinfo_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_error.h b/Externals/SDL/Include_1.3/SDL_error.h deleted file mode 100644 index 5d54726e22..0000000000 --- a/Externals/SDL/Include_1.3/SDL_error.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_error.h - * Simple error message routines for SDL - */ - -#ifndef _SDL_error_h -#define _SDL_error_h - -#include "SDL_stdinc.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* Public functions */ -extern DECLSPEC void SDLCALL SDL_SetError(const char *fmt, ...); -extern DECLSPEC char *SDLCALL SDL_GetError(void); -extern DECLSPEC void SDLCALL SDL_ClearError(void); - -/* Private error message function - used internally */ -#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) -#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) -typedef enum -{ - SDL_ENOMEM, - SDL_EFREAD, - SDL_EFWRITE, - SDL_EFSEEK, - SDL_UNSUPPORTED, - SDL_LASTERROR -} SDL_errorcode; -extern DECLSPEC void SDLCALL SDL_Error(SDL_errorcode code); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_error_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_events.h b/Externals/SDL/Include_1.3/SDL_events.h deleted file mode 100644 index 13672f2e4a..0000000000 --- a/Externals/SDL/Include_1.3/SDL_events.h +++ /dev/null @@ -1,486 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_events.h - * - * Include file for SDL event handling - */ - -#ifndef _SDL_events_h -#define _SDL_events_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" -#include "SDL_keyboard.h" -#include "SDL_mouse.h" -#include "SDL_joystick.h" -#include "SDL_quit.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* General keyboard/mouse state definitions */ -#define SDL_RELEASED 0 -#define SDL_PRESSED 1 - -/** - * \enum SDL_EventType - * - * \brief The types of events that can be delivered - */ -typedef enum -{ - SDL_NOEVENT = 0, /**< Unused (do not remove) */ - SDL_WINDOWEVENT, /**< Window state change */ - SDL_KEYDOWN, /**< Keys pressed */ - SDL_KEYUP, /**< Keys released */ - SDL_TEXTINPUT, /**< Keyboard text input */ - SDL_MOUSEMOTION, /**< Mouse moved */ - SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ - SDL_MOUSEBUTTONUP, /**< Mouse button released */ - SDL_MOUSEWHEEL, /**< Mouse wheel motion */ - SDL_JOYAXISMOTION, /**< Joystick axis motion */ - SDL_JOYBALLMOTION, /**< Joystick trackball motion */ - SDL_JOYHATMOTION, /**< Joystick hat position change */ - SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ - SDL_JOYBUTTONUP, /**< Joystick button released */ - SDL_QUIT, /**< User-requested quit */ - SDL_SYSWMEVENT, /**< System specific event */ - SDL_PROXIMITYIN, /**< Proximity In event */ - SDL_PROXIMITYOUT, /**< Proximity Out event */ - SDL_EVENT_RESERVED1, /**< Reserved for future use... */ - SDL_EVENT_RESERVED2, - SDL_EVENT_RESERVED3, - /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ - SDL_USEREVENT = 24, - /* This last event is only for bounding internal arrays - It is the number of bits in the event mask datatype -- Uint32 - */ - SDL_NUMEVENTS = 32 -} SDL_EventType; - -/** - * \enum SDL_EventMask - * - * \brief Predefined event masks - */ -#define SDL_EVENTMASK(X) (1<<(X)) -typedef enum -{ - SDL_WINDOWEVENTMASK = SDL_EVENTMASK(SDL_WINDOWEVENT), - SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN), - SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP), - SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN) | SDL_EVENTMASK(SDL_KEYUP), - SDL_TEXTINPUTMASK = SDL_EVENTMASK(SDL_TEXTINPUT), - SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION), - SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN), - SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP), - SDL_MOUSEWHEELMASK = SDL_EVENTMASK(SDL_MOUSEWHEEL), - SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION) | - SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN) | SDL_EVENTMASK(SDL_MOUSEBUTTONUP), - SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION), - SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION), - SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION), - SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN), - SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP), - SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION) | - SDL_EVENTMASK(SDL_JOYBALLMOTION) | - SDL_EVENTMASK(SDL_JOYHATMOTION) | - SDL_EVENTMASK(SDL_JOYBUTTONDOWN) | SDL_EVENTMASK(SDL_JOYBUTTONUP), - SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT), - SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT), - SDL_PROXIMITYINMASK = SDL_EVENTMASK(SDL_PROXIMITYIN), - SDL_PROXIMITYOUTMASK = SDL_EVENTMASK(SDL_PROXIMITYOUT) -} SDL_EventMask; -#define SDL_ALLEVENTS 0xFFFFFFFF - -/** - * \struct SDL_WindowEvent - * - * \brief Window state change event data (event.window.*) - */ -typedef struct SDL_WindowEvent -{ - Uint8 type; /**< SDL_WINDOWEVENT */ - Uint8 event; /**< SDL_WindowEventID */ - int data1; /**< event dependent data */ - int data2; /**< event dependent data */ - SDL_WindowID windowID; /**< The associated window */ -} SDL_WindowEvent; - -/** - * \struct SDL_KeyboardEvent - * - * \brief Keyboard button event structure (event.key.*) - */ -typedef struct SDL_KeyboardEvent -{ - Uint8 type; /**< SDL_KEYDOWN or SDL_KEYUP */ - Uint8 which; /**< The keyboard device index */ - Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ - SDL_keysym keysym; /**< The key that was pressed or released */ - SDL_WindowID windowID; /**< The window with keyboard focus, if any */ -} SDL_KeyboardEvent; - -/** - * \struct SDL_TextInputEvent - * - * \brief Keyboard text input event structure (event.text.*) - */ -#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) -typedef struct SDL_TextInputEvent -{ - Uint8 type; /**< SDL_TEXTINPUT */ - Uint8 which; /**< The keyboard device index */ - char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ - SDL_WindowID windowID; /**< The window with keyboard focus, if any */ -} SDL_TextInputEvent; - -/** - * \struct SDL_MouseMotionEvent - * - * \brief Mouse motion event structure (event.motion.*) - */ -typedef struct SDL_MouseMotionEvent -{ - Uint8 type; /**< SDL_MOUSEMOTION */ - Uint8 which; /**< The mouse device index */ - Uint8 state; /**< The current button state */ - int x; /**< X coordinate, relative to window */ - int y; /**< Y coordinate, relative to window */ - int z; /**< Z coordinate, for future use */ - int pressure; /**< Pressure reported by tablets */ - int pressure_max; /**< Maximum value of the pressure reported by the device */ - int pressure_min; /**< Minimum value of the pressure reported by the device */ - int rotation; /**< For future use */ - int tilt; /**< For future use */ - int cursor; /**< The cursor being used in the event */ - int xrel; /**< The relative motion in the X direction */ - int yrel; /**< The relative motion in the Y direction */ - SDL_WindowID windowID; /**< The window with mouse focus, if any */ -} SDL_MouseMotionEvent; - -/** - * \struct SDL_MouseButtonEvent - * - * \brief Mouse button event structure (event.button.*) - */ -typedef struct SDL_MouseButtonEvent -{ - Uint8 type; /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ - Uint8 which; /**< The mouse device index */ - Uint8 button; /**< The mouse button index */ - Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ - int x; /**< X coordinate, relative to window */ - int y; /**< Y coordinate, relative to window */ - SDL_WindowID windowID; /**< The window with mouse focus, if any */ -} SDL_MouseButtonEvent; - -/** - * \struct SDL_MouseWheelEvent - * - * \brief Mouse wheel event structure (event.wheel.*) - */ -typedef struct SDL_MouseWheelEvent -{ - Uint8 type; /**< SDL_MOUSEWHEEL */ - Uint8 which; /**< The mouse device index */ - int x; /**< The amount scrolled horizontally */ - int y; /**< The amount scrolled vertically */ - SDL_WindowID windowID; /**< The window with mouse focus, if any */ -} SDL_MouseWheelEvent; - -/** - * \struct SDL_JoyAxisEvent - * - * \brief Joystick axis motion event structure (event.jaxis.*) - */ -typedef struct SDL_JoyAxisEvent -{ - Uint8 type; /**< SDL_JOYAXISMOTION */ - Uint8 which; /**< The joystick device index */ - Uint8 axis; /**< The joystick axis index */ - int value; /**< The axis value (range: -32768 to 32767) */ -} SDL_JoyAxisEvent; - -/** - * \struct SDL_JoyBallEvent - * - * \brief Joystick trackball motion event structure (event.jball.*) - */ -typedef struct SDL_JoyBallEvent -{ - Uint8 type; /**< SDL_JOYBALLMOTION */ - Uint8 which; /**< The joystick device index */ - Uint8 ball; /**< The joystick trackball index */ - int xrel; /**< The relative motion in the X direction */ - int yrel; /**< The relative motion in the Y direction */ -} SDL_JoyBallEvent; - -/** - * \struct SDL_JoyHatEvent - * - * \brief Joystick hat position change event structure (event.jhat.*) - */ -typedef struct SDL_JoyHatEvent -{ - Uint8 type; /**< SDL_JOYHATMOTION */ - Uint8 which; /**< The joystick device index */ - Uint8 hat; /**< The joystick hat index */ - Uint8 value; /**< The hat position value: - SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP - SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT - SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN - Note that zero means the POV is centered. - */ -} SDL_JoyHatEvent; - -/** - * \struct SDL_JoyButtonEvent - * - * \brief Joystick button event structure (event.jbutton.*) - */ -typedef struct SDL_JoyButtonEvent -{ - Uint8 type; /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ - Uint8 which; /**< The joystick device index */ - Uint8 button; /**< The joystick button index */ - Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ -} SDL_JoyButtonEvent; - -/** - * \struct SDL_QuitEvent - * - * \brief The "quit requested" event - */ -typedef struct SDL_QuitEvent -{ - Uint8 type; /**< SDL_QUIT */ -} SDL_QuitEvent; - -/** - * \struct SDL_UserEvent - * - * \brief A user-defined event type (event.user.*) - */ -typedef struct SDL_UserEvent -{ - Uint8 type; /**< SDL_USEREVENT through SDL_NUMEVENTS-1 */ - int code; /**< User defined event code */ - void *data1; /**< User defined data pointer */ - void *data2; /**< User defined data pointer */ - SDL_WindowID windowID; /**< The associated window if any*/ -} SDL_UserEvent; - -/** - * \struct SDL_SysWMEvent - * - * \brief A video driver dependent system event (event.syswm.*) - * - * \note If you want to use this event, you should include SDL_syswm.h - */ -struct SDL_SysWMmsg; -typedef struct SDL_SysWMmsg SDL_SysWMmsg; -typedef struct SDL_SysWMEvent -{ - Uint8 type; /**< SDL_SYSWMEVENT */ - SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ -} SDL_SysWMEvent; - -/* Typedefs for backwards compatibility */ -typedef struct SDL_ActiveEvent -{ - Uint8 type; - Uint8 gain; - Uint8 state; -} SDL_ActiveEvent; -typedef struct SDL_ResizeEvent -{ - Uint8 type; - int w; - int h; -} SDL_ResizeEvent; - -typedef struct SDL_ProximityEvent -{ - Uint8 type; - Uint8 which; - int cursor; - int x; - int y; -} SDL_ProximityEvent; - -/** - * \union SDL_Event - * - * \brief General event structure - */ -typedef union SDL_Event -{ - Uint8 type; /**< Event type, shared with all events */ - SDL_WindowEvent window; /**< Window event data */ - SDL_KeyboardEvent key; /**< Keyboard event data */ - SDL_TextInputEvent text; /**< Text input event data */ - SDL_MouseMotionEvent motion; /**< Mouse motion event data */ - SDL_MouseButtonEvent button; /**< Mouse button event data */ - SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ - SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ - SDL_JoyBallEvent jball; /**< Joystick ball event data */ - SDL_JoyHatEvent jhat; /**< Joystick hat event data */ - SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ - SDL_QuitEvent quit; /**< Quit request event data */ - SDL_UserEvent user; /**< Custom event data */ - SDL_SysWMEvent syswm; /**< System dependent window event data */ - SDL_ProximityEvent proximity; /**< Proximity In or Out event */ - - /* Temporarily here for backwards compatibility */ - SDL_ActiveEvent active; - SDL_ResizeEvent resize; -} SDL_Event; - - -/* Function prototypes */ - -/* Pumps the event loop, gathering events from the input devices. - This function updates the event queue and internal input device state. - This should only be run in the thread that sets the video mode. -*/ -extern DECLSPEC void SDLCALL SDL_PumpEvents(void); - -/* Checks the event queue for messages and optionally returns them. - If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to - the back of the event queue. - If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will not - be removed from the queue. - If 'action' is SDL_GETEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will be - removed from the queue. - This function returns the number of events actually stored, or -1 - if there was an error. This function is thread-safe. -*/ -typedef enum -{ - SDL_ADDEVENT, - SDL_PEEKEVENT, - SDL_GETEVENT -} SDL_eventaction; -/* */ -extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, - SDL_eventaction action, - Uint32 mask); - -/* Checks to see if certain event types are in the event queue. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 mask); - -/* Polls for currently pending events, and returns 1 if there are any pending - events, or 0 if there are none available. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. - */ -extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); - -/* Waits indefinitely for the next available event, returning 1, or 0 if there - was an error while waiting for events. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. - */ -extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); - -/* Add an event to the event queue. - This function returns 1 on success, 0 if the event was filtered, - or -1 if the event queue was full or there was some other error. - */ -extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); - -/* - This function sets up a filter to process all events before they - change internal state and are posted to the internal event queue. - - The filter is protypted as: -*/ -typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); -/* - If the filter returns 1, then the event will be added to the internal queue. - If it returns 0, then the event will be dropped from the queue, but the - internal state will still be updated. This allows selective filtering of - dynamically arriving events. - - WARNING: Be very careful of what you do in the event filter function, as - it may run in a different thread! - - There is one caveat when dealing with the SDL_QUITEVENT event type. The - event filter is only called when the window manager desires to close the - application window. If the event filter returns 1, then the window will - be closed, otherwise the window will remain open if possible. - If the quit event is generated by an interrupt signal, it will bypass the - internal queue and be delivered to the application at the next event poll. -*/ -extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, - void *userdata); - -/* - Return the current event filter - can be used to "chain" filters. - If there is no event filter set, this function returns SDL_FALSE. -*/ -extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, - void **userdata); - -/* - Run the filter function on the current event queue, removing any - events for which the filter returns 0. -*/ -extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, - void *userdata); - -/* - This function allows you to set the state of processing certain events. - If 'state' is set to SDL_IGNORE, that event will be automatically dropped - from the event queue and will not event be filtered. - If 'state' is set to SDL_ENABLE, that event will be processed normally. - If 'state' is set to SDL_QUERY, SDL_EventState() will return the - current processing state of the specified event. -*/ -#define SDL_QUERY -1 -#define SDL_IGNORE 0 -#define SDL_DISABLE 0 -#define SDL_ENABLE 1 -extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_events_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_haptic.h b/Externals/SDL/Include_1.3/SDL_haptic.h deleted file mode 100644 index 6d748c2d0d..0000000000 --- a/Externals/SDL/Include_1.3/SDL_haptic.h +++ /dev/null @@ -1,1154 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 2008 Edgar Simo - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_haptic.h - * - * \brief The SDL Haptic subsystem allows you to control haptic (force feedback) - * devices. - * - * The basic usage is as follows: - * - Initialize the Subsystem (SDL_INIT_HAPTIC). - * - Open a Haptic Device. - * - SDL_HapticOpen(...) to open from index. - * - SDL_HapticOpenFromJoystick(...) to open from an existing joystick. - * - Create an effect (SDL_HapticEffect). - * - Upload the effect with SDL_HapticNewEffect(...). - * - Run the effect with SDL_HapticRunEffect(...). - * - (optional) Free the effect with SDL_HapticDestroyEffect(...). - * - Close the haptic device with SDL_HapticClose(...). - * - * Example: - * - * \code - * int test_haptic( SDL_Joystick * joystick ) { - * SDL_Haptic *haptic; - * SDL_HapticEffect effect; - * int effect_id; - * - * // Open the device - * haptic = SDL_HapticOpenFromJoystick( joystick ); - * if (haptic == NULL) return -1; // Most likely joystick isn't haptic - * - * // See if it can do sine waves - * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { - * SDL_HapticClose(haptic); // No sine effect - * return -1; - * } - * - * // Create the effect - * memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default - * effect.type = SDL_HAPTIC_SINE; - * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates - * effect.periodic.direction.dir[0] = 18000; // Force comes from south - * effect.periodic.period = 1000; // 1000 ms - * effect.periodic.magnitude = 20000; // 20000/32767 strength - * effect.periodic.length = 5000; // 5 seconds long - * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength - * effect.periodic.fade_length = 1000; // Takes 1 second to fade away - * - * // Upload the effect - * effect_id = SDL_HapticNewEffect( haptic, &effect ); - * - * // Test the effect - * SDL_HapticRunEffect( haptic, effect_id, 1 ); - * SDL_Delay( 5000); // Wait for the effect to finish - * - * // We destroy the effect, although closing the device also does this - * SDL_HapticDestroyEffect( haptic, effect_id ); - * - * // Close the device - * SDL_HapticClose(haptic); - * - * return 0; // Success - * } - * \endcode - * - * \author Edgar Simo Serra - */ - -#ifndef _SDL_haptic_h -#define _SDL_haptic_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_joystick.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { - /* *INDENT-ON* */ -#endif /* __cplusplus */ - -/** - * \typedef SDL_Haptic - * - * \brief The haptic structure used to identify an SDL haptic. - * - * \sa SDL_HapticOpen - * \sa SDL_HapticOpenFromJoystick - * \sa SDL_HapticClose - */ -struct _SDL_Haptic; -typedef struct _SDL_Haptic SDL_Haptic; - - -/* - * Different haptic features a device can have. - */ -/** - * \def SDL_HAPTIC_CONSTANT - * - * \brief Constant haptic effect. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_CONSTANT (1<<0) /* Constant effect supported */ -/** - * \def SDL_HAPTIC_SINE - * - * \brief Periodic haptic effect that simulates sine waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_SINE (1<<1) /* Sine wave effect supported */ -/** - * \def SDL_HAPTIC_SQUARE - * - * \brief Periodic haptic effect that simulates square waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_SQUARE (1<<2) /* Square wave effect supported */ -/** - * \def SDL_HAPTIC_TRIANGLE - * - * \brief Periodic haptic effect that simulates triangular waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_TRIANGLE (1<<3) /* Triangle wave effect supported */ -/** - * \def SDL_HAPTIC_SAWTOOTHUP - * - * \brief Periodic haptic effect that simulates saw tooth up waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_SAWTOOTHUP (1<<4) /* Sawtoothup wave effect supported */ -/** - * \def SDL_HAPTIC_SAWTOOTHDOWN - * - * \brief Periodic haptic effect that simulates saw tooth down waves. - * - * \sa SDL_HapticPeriodic - */ -#define SDL_HAPTIC_SAWTOOTHDOWN (1<<5) /* Sawtoothdown wave effect supported */ -/** - * \def SDL_HAPTIC_RAMP - * - * \brief Ramp haptic effect. - * - * \sa SDL_HapticRamp - */ -#define SDL_HAPTIC_RAMP (1<<6) /* Ramp effect supported */ -/** - * \def SDL_HAPTIC_SPRING - * - * \brief Condition haptic effect that simulates a spring. Effect is based on the - * axes position. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_SPRING (1<<7) /* Spring effect supported - uses axes position */ -/** - * \def SDL_HAPTIC_DAMPER - * - * \brief Condition haptic effect that simulates dampening. Effect is based on the - * axes velocity. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_DAMPER (1<<8) /* Damper effect supported - uses axes velocity */ -/** - * \def SDL_HAPTIC_INERTIA - * - * \brief Condition haptic effect that simulates inertia. Effect is based on the axes - * acceleration. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_INERTIA (1<<9) /* Inertia effect supported - uses axes acceleration */ -/** - * \def SDL_HAPTIC_FRICTION - * - * \brief Condition haptic effect that simulates friction. Effect is based on the axes - * movement. - * - * \sa SDL_HapticCondition - */ -#define SDL_HAPTIC_FRICTION (1<<10) /* Friction effect supported - uses axes movement */ -/** - * \def SDL_HAPTIC_CUSTOM - * - * \brief User defined custom haptic effect. - */ -#define SDL_HAPTIC_CUSTOM (1<<11) /* Custom effect is supported */ -/* These last two are features the device has, not effects */ -/** - * \def SDL_HAPTIC_GAIN - * - * \brief Device supports setting the global gain. - * - * \sa SDL_HapticSetGain - */ -#define SDL_HAPTIC_GAIN (1<<12) /* Device can set global gain */ -/** - * \def SDL_HAPTIC_AUTOCENTER - * - * \brief Device supports setting autocenter. - * - * \sa SDL_HapticSetAutocenter - */ -#define SDL_HAPTIC_AUTOCENTER (1<<13) /* Device can set autocenter */ -/** - * \def SDL_HAPTIC_STATUS - * - * \brief Device can be queried for effect status. - * - * \sa SDL_HapticGetEffectStatus - */ -#define SDL_HAPTIC_STATUS (1<<14) /* Device can be queried for effect status */ -/** - * \def SDL_HAPTIC_PAUSE - * - * \brief Device can be paused. - * - * \sa SDL_HapticPause - * \sa SDL_HapticUnpause - */ -#define SDL_HAPTIC_PAUSE (1<<15) /* Device can be paused. */ - - -/* - * Direction encodings - */ -/** - * \def SDL_HAPTIC_POLAR - * - * \brief Uses polar coordinates for the direction. - * - * \sa SDL_HapticDirection - */ -#define SDL_HAPTIC_POLAR 0 -/** - * \def SDL_HAPTIC_CARTESIAN - * - * \brief Uses cartesian coordinates for the direction. - * - * \sa SDL_HapticDirection - */ -#define SDL_HAPTIC_CARTESIAN 1 -/** - * \def SDL_HAPTIC_SPHERICAL - * - * \brief Uses spherical coordinates for the direction. - * - * \sa SDL_HapticDirection - */ -#define SDL_HAPTIC_SPHERICAL 2 - - -/* - * Misc defines. - */ -/** - * \def SDL_HAPTIC_INFINITY - * - * \brief Used to play a device an infinite number of times. - * - * \sa SDL_HapticRunEffect - */ -#define SDL_HAPTIC_INFINITY 4294967295U - - -/** - * \struct SDL_HapticDirection - * - * \brief Structure that represents a haptic direction. - * - * Directions can be specified by: - * - SDL_HAPTIC_POLAR : Specified by polar coordinates. - * - SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. - * - SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. - * - * Cardinal directions of the haptic device are relative to the positioning - * of the device. North is considered to be away from the user. - * - * The following diagram represents the cardinal directions: - * \code - * .--. - * |__| .-------. - * |=.| |.-----.| - * |--| || || - * | | |'-----'| - * |__|~')_____(' - * [ COMPUTER ] - * - * - * North (0,-1) - * ^ - * | - * | - * (1,0) West <----[ HAPTIC ]----> East (-1,0) - * | - * | - * v - * South (0,1) - * - * - * [ USER ] - * \|||/ - * (o o) - * ---ooO-(_)-Ooo--- - * \endcode - * - * If type is SDL_HAPTIC_POLAR, direction is encoded by hundredths of a - * degree starting north and turning clockwise. SDL_HAPTIC_POLAR only uses - * the first dir parameter. The cardinal directions would be: - * - North: 0 (0 degrees) - * - East: 9000 (90 degrees) - * - South: 18000 (180 degrees) - * - West: 27000 (270 degrees) - * - * If type is SDL_HAPTIC_CARTESIAN, direction is encoded by three positions - * (X axis, Y axis and Z axis (with 3 axes)). SDL_HAPTIC_CARTESIAN uses - * the first three dir parameters. The cardinal directions would be: - * - North: 0,-1, 0 - * - East: -1, 0, 0 - * - South: 0, 1, 0 - * - West: 1, 0, 0 - * The Z axis represents the height of the effect if supported, otherwise - * it's unused. In cartesian encoding (1,2) would be the same as (2,4), you - * can use any multiple you want, only the direction matters. - * - * If type is SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. - * The first two dir parameters are used. The dir parameters are as follows - * (all values are in hundredths of degrees): - * 1) Degrees from (1, 0) rotated towards (0, 1). - * 2) Degrees towards (0, 0, 1) (device needs at least 3 axes). - * - * - * Example of force coming from the south with all encodings (force coming - * from the south means the user will have to pull the stick to counteract): - * \code - * SDL_HapticDirection direction; - * - * // Cartesian directions - * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. - * direction.dir[0] = 0; // X position - * direction.dir[1] = 1; // Y position - * // Assuming the device has 2 axes, we don't need to specify third parameter. - * - * // Polar directions - * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. - * direction.dir[0] = 18000; // Polar only uses first parameter - * - * // Spherical coordinates - * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding - * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. - * \endcode - * - * \sa SDL_HAPTIC_POLAR - * \sa SDL_HAPTIC_CARTESIAN - * \sa SDL_HAPTIC_SPHERICAL - * \sa SDL_HapticEffect - * \sa SDL_HapticNumAxes - */ -typedef struct SDL_HapticDirection -{ - Uint8 type; /**< The type of encoding. */ - Uint16 dir[3]; /**< The encoded direction. */ -} SDL_HapticDirection; - - -/** - * \struct SDL_HapticConstant - * - * \brief A structure containing a template for a Constant effect. - * - * The struct is exclusive to the SDL_HAPTIC_CONSTANT effect. - * - * A constant effect applies a constant force in the specified direction - * to the joystick. - * - * \sa SDL_HAPTIC_CONSTANT - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticConstant -{ - /* Header */ - Uint16 type; /**< SDL_HAPTIC_CONSTANT */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Constant */ - Sint16 level; /**< Strength of the constant effect. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticConstant; -/** - * \struct SDL_HapticPeriodic - * - * \brief A structure containing a template for a Periodic effect. - * - * The struct handles the following effects: - * - SDL_HAPTIC_SINE - * - SDL_HAPTIC_SQUARE - * - SDL_HAPTIC_TRIANGLE - * - SDL_HAPTIC_SAWTOOTHUP - * - SDL_HAPTIC_SAWTOOTHDOWN - * - * A periodic effect consists in a wave-shaped effect that repeats itself - * over time. The type determines the shape of the wave and the parameters - * determine the dimensions of the wave. - * - * Phase is given by hundredth of a cyle meaning that giving the phase a value - * of 9000 will displace it 25% of it's period. Here are sample values: - * - 0: No phase displacement. - * - 9000: Displaced 25% of it's period. - * - 18000: Displaced 50% of it's period. - * - 27000: Displaced 75% of it's period. - * - 36000: Displaced 100% of it's period, same as 0, but 0 is preffered. - * - * Examples: - * \code - * SDL_HAPTIC_SINE - * __ __ __ __ - * / \ / \ / \ / - * / \__/ \__/ \__/ - * - * SDL_HAPTIC_SQUARE - * __ __ __ __ __ - * | | | | | | | | | | - * | |__| |__| |__| |__| | - * - * SDL_HAPTIC_TRIANGLE - * /\ /\ /\ /\ /\ - * / \ / \ / \ / \ / - * / \/ \/ \/ \/ - * - * SDL_HAPTIC_SAWTOOTHUP - * /| /| /| /| /| /| /| - * / | / | / | / | / | / | / | - * / |/ |/ |/ |/ |/ |/ | - * - * SDL_HAPTIC_SAWTOOTHDOWN - * \ |\ |\ |\ |\ |\ |\ | - * \ | \ | \ | \ | \ | \ | \ | - * \| \| \| \| \| \| \| - * \endcode - * - * \sa SDL_HAPTIC_SINE - * \sa SDL_HAPTIC_SQUARE - * \sa SDL_HAPTIC_TRIANGLE - * \sa SDL_HAPTIC_SAWTOOTHUP - * \sa SDL_HAPTIC_SAWTOOTHDOWN - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticPeriodic -{ - /* Header */ - Uint16 type; /**< SDL_HAPTIC_SINE, SDL_HAPTIC_SQUARE, - SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or - SDL_HAPTIC_SAWTOOTHDOWN */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Periodic */ - Uint16 period; /**< Period of the wave. */ - Sint16 magnitude; /**< Peak value. */ - Sint16 offset; /**< Mean value of the wave. */ - Uint16 phase; /**< Horizontal shift given by hundredth of a cycle. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticPeriodic; -/** - * \struct SDL_HapticCondition - * - * \brief A structure containing a template for a Condition effect. - * - * The struct handles the following effects: - * - SDL_HAPTIC_SPRING: Effect based on axes position. - * - SDL_HAPTIC_DAMPER: Effect based on axes velocity. - * - SDL_HAPTIC_INERTIA: Effect based on axes acceleration. - * - SDL_HAPTIC_FRICTION: Effect based on axes movement. - * - * Direction is handled by condition internals instead of a direction member. - * The condition effect specific members have three parameters. The first - * refers to the X axis, the second refers to the Y axis and the third - * refers to the Z axis. The right terms refer to the positive side of the - * axis and the left terms refer to the negative side of the axis. Please - * refer to the SDL_HapticDirection diagram for which side is positive and - * which is negative. - * - * \sa SDL_HapticDirection - * \sa SDL_HAPTIC_SPRING - * \sa SDL_HAPTIC_DAMPER - * \sa SDL_HAPTIC_INERTIA - * \sa SDL_HAPTIC_FRICTION - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticCondition -{ - /* Header */ - Uint16 type; /**< SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER, - SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION */ - SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Condition */ - Uint16 right_sat[3]; /**< Level when joystick is to the positive side. */ - Uint16 left_sat[3]; /**< Level when joystick is to the negative side. */ - Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ - Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ - Uint16 deadband[3]; /**< Size of the dead zone. */ - Sint16 center[3]; /**< Position of the dead zone. */ -} SDL_HapticCondition; -/** - * \struct SDL_HapticRamp - * - * \brief A structure containing a template for a Ramp effect. - * - * This struct is exclusively for the SDL_HAPTIC_RAMP effect. - * - * The ramp effect starts at start strength and ends at end strength. - * It augments in linear fashion. If you use attack and fade with a ramp - * they effects get added to the ramp effect making the effect become - * quadratic instead of linear. - * - * \sa SDL_HAPTIC_RAMP - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticRamp -{ - /* Header */ - Uint16 type; /**< SDL_HAPTIC_RAMP */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Ramp */ - Sint16 start; /**< Beginning strength level. */ - Sint16 end; /**< Ending strength level. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticRamp; -/** - * \struct SDL_HapticCustom - * - * \brief A structure containing a template for the SDL_HAPTIC_CUSTOM effect. - * - * A custom force feedback effect is much like a periodic effect, where the - * application can define it's exact shape. You will have to allocate the - * data yourself. Data should consist of channels * samples Uint16 samples. - * - * If channels is one, the effect is rotated using the defined direction. - * Otherwise it uses the samples in data for the different axes. - * - * \sa SDL_HAPTIC_CUSTOM - * \sa SDL_HapticEffect - */ -typedef struct SDL_HapticCustom -{ - /* Header */ - Uint16 type; /**< SDL_HAPTIC_CUSTOM */ - SDL_HapticDirection direction; /**< Direction of the effect. */ - - /* Replay */ - Uint32 length; /**< Duration of the effect. */ - Uint16 delay; /**< Delay before starting the effect. */ - - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - /* Custom */ - Uint8 channels; /**< Axes to use, minimum of one. */ - Uint16 period; /**< Sample periods. */ - Uint16 samples; /**< Amount of samples. */ - Uint16 *data; /**< Should contain channels*samples items. */ - - /* Envelope */ - Uint16 attack_length; /**< Duration of the attack. */ - Uint16 attack_level; /**< Level at the start of the attack. */ - Uint16 fade_length; /**< Duration of the fade. */ - Uint16 fade_level; /**< Level at the end of the fade. */ -} SDL_HapticCustom; -/** - * \union SDL_HapticEffect - * - * \brief The generic template for any haptic effect. - * - * All values max at 32767 (0x7FFF). Signed values also can be negative. - * Time values unless specified otherwise are in milliseconds. - * - * You can also pass SDL_HAPTIC_INFINITY to length instead of a 0-32767 value. - * Neither delay, interval, attack_length nor fade_length support - * SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. - * - * Additionally, the SDL_HAPTIC_RAMP effect does not support a duration of - * SDL_HAPTIC_INFINITY. - * - * Button triggers may not be supported on all devices, it is advised to not - * use them if possible. Buttons start at index 1 instead of index 0 like - * they joystick. - * - * If both attack_length and fade_level are 0, the envelope is not used, - * otherwise both values are used. - * - * Common parts: - * \code - * // Replay - All effects have this - * Uint32 length; // Duration of effect (ms). - * Uint16 delay; // Delay before starting effect. - * - * // Trigger - All effects have this - * Uint16 button; // Button that triggers effect. - * Uint16 interval; // How soon before effect can be triggered again. - * - * // Envelope - All effects except condition effects have this - * Uint16 attack_length; // Duration of the attack (ms). - * Uint16 attack_level; // Level at the start of the attack. - * Uint16 fade_length; // Duration of the fade out (ms). - * Uint16 fade_level; // Level at the end of the fade. - * \endcode - * - * - * Here we have an example of a constant effect evolution in time: - * - * \code - * Strength - * ^ - * | - * | effect level --> _________________ - * | / \ - * | / \ - * | / \ - * | / \ - * | attack_level --> | \ - * | | | <--- fade_level - * | - * +--------------------------------------------------> Time - * [--] [---] - * attack_length fade_length - * - * [------------------][-----------------------] - * delay length - * \endcode - * - * Note either the attack_level or the fade_level may be above the actual - * effect level. - * - * \sa SDL_HapticConstant - * \sa SDL_HapticPeriodic - * \sa SDL_HapticCondition - * \sa SDL_HapticRamp - * \sa SDL_HapticCustom - */ -typedef union SDL_HapticEffect -{ - /* Common for all force feedback effects */ - Uint16 type; /**< Effect type. */ - SDL_HapticConstant constant; /**< Constant effect. */ - SDL_HapticPeriodic periodic; /**< Periodic effect. */ - SDL_HapticCondition condition; /**< Condition effect. */ - SDL_HapticRamp ramp; /**< Ramp effect. */ - SDL_HapticCustom custom; /**< Custom effect. */ -} SDL_HapticEffect; - - -/* Function prototypes */ -/** - * \fn int SDL_NumHaptics(void) - * - * \brief Count the number of joysticks attached to the system. - * - * \return Number of haptic devices detected on the system. - */ -extern DECLSPEC int SDLCALL SDL_NumHaptics(void); - -/** - * \fn const char * SDL_HapticName(int device_index) - * - * \brief Get the implementation dependent name of a Haptic device. - * This can be called before any joysticks are opened. - * If no name can be found, this function returns NULL. - * - * \param device_index Index of the device to get it's name. - * \return Name of the device or NULL on error. - * - * \sa SDL_NumHaptics - */ -extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); - -/** - * \fn SDL_Haptic * SDL_HapticOpen(int device_index) - * - * \brief Opens a Haptic device for usage - the index passed as an - * argument refers to the N'th Haptic device on this system. - * - * When opening a haptic device, it's gain will be set to maximum and - * autocenter will be disabled. To modify these values use - * SDL_HapticSetGain and SDL_HapticSetAutocenter - * - * \param device_index Index of the device to open. - * \return Device identifier or NULL on error. - * - * \sa SDL_HapticIndex - * \sa SDL_HapticOpenFromMouse - * \sa SDL_HapticOpenFromJoystick - * \sa SDL_HapticClose - * \sa SDL_HapticSetGain - * \sa SDL_HapticSetAutocenter - * \sa SDL_HapticPause - * \sa SDL_HapticStopAll - */ -extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); - -/** - * \fn int SDL_HapticOpened(int device_index) - * - * \brief Checks if the haptic device at index has been opened. - * - * \param device_index Index to check to see if it has been opened. - * \return 1 if it has been opened or 0 if it hasn't. - * - * \sa SDL_HapticOpen - * \sa SDL_HapticIndex - */ -extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); - -/** - * \fn int SDL_HapticIndex(SDL_Haptic * haptic) - * - * \brief Gets the index of a haptic device. - * - * \param haptic Haptic device to get the index of. - * \return The index of the haptic device or -1 on error. - * - * \sa SDL_HapticOpen - * \sa SDL_HapticOpened - */ -extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); - -/** - * \fn int SDL_MouseIsHaptic(void) - * - * \brief Gets whether or not the current mouse has haptic capabilities. - * - * \return SDL_TRUE if the mouse is haptic, SDL_FALSE if it isn't. - * - * \sa SDL_HapticOpenFromMouse - */ -extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); - -/** - * \fn SDL_Haptic * SDL_HapticOpenFromMouse(void) - * - * \brief Tries to open a haptic device from the current mouse. - * - * \return The haptic device identifier or NULL on error. - * - * \sa SDL_MouseIsHaptic - * \sa SDL_HapticOpen - */ -extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); - -/** - * \fn int SDL_JoystickIsHaptic(SDL_Joystick * joystick) - * - * \brief Checks to see if a joystick has haptic features. - * - * \param joystick Joystick to test for haptic capabilities. - * \return SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't - * or -1 if an error ocurred. - * - * \sa SDL_HapticOpenFromJoystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); - -/** - * \fn SDL_Haptic * SDL_HapticOpenFromJoystick(SDL_Joystick * joystick) - * - * \brief Opens a Haptic device for usage from a Joystick device. Still has - * to be closed seperately to the joystick. - * - * When opening from a joystick you should first close the haptic device before - * closing the joystick device. If not, on some implementations the haptic - * device will also get unallocated and you'll be unable to use force feedback - * on that device. - * - * \param joystick Joystick to create a haptic device from. - * \return A valid haptic device identifier on success or NULL on error. - * - * \sa SDL_HapticOpen - * \sa SDL_HapticClose - */ -extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * - joystick); - -/** - * \fn void SDL_HapticClose(SDL_Haptic * haptic) - * - * \brief Closes a Haptic device previously opened with SDL_HapticOpen. - * - * \param haptic Haptic device to close. - */ -extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); - -/** - * \fn int SDL_HapticNumEffects(SDL_Haptic * haptic) - * - * \brief Returns the number of effects a haptic device can store. - * - * On some platforms this isn't fully supported, and therefore is an - * aproximation. Always check to see if your created effect was actually - * created and do not rely solely on HapticNumEffects. - * - * \param haptic The haptic device to query effect max. - * \return The number of effects the haptic device can store or - * -1 on error. - * - * \sa SDL_HapticNumEffectsPlaying - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); - -/** - * \fn int SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic) - * - * \brief Returns the number of effects a haptic device can play at the same time. - * - * This is not supported on all platforms, but will always return a value. Added - * here for the sake of completness. - * - * \param haptic The haptic device to query maximum playing effect.s - * \return The number of effects the haptic device can play at the same time - * or -1 on error. - * - * \sa SDL_HapticNumEffects - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); - -/** - * \fn unsigned int SDL_HapticQuery(SDL_Haptic * haptic) - * - * \brief Gets the haptic devices supported features in bitwise matter. - * - * Example: - * \code - * if (SDL_HapticQueryEffects(haptic) & SDL_HAPTIC_CONSTANT) { - * printf("We have constant haptic effect!"); - * } - * \endcode - * - * - * \param haptic The haptic device to query. - * \return Haptic features in bitwise manner (OR'd). - * - * \sa SDL_HapticNumEffects - * \sa SDL_HapticEffectSupported - */ -extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); - - -/** - * \fn int SDL_HapticNumAxes(SDL_Haptic * haptic) - * - * \brief Gets the number of haptic axes the device has. - * - * \sa SDL_HapticDirection - */ -extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); - -/** - * \fn int SDL_HapticEffectSupported(SDL_Haptic * haptic, SDL_HapticEffect * effect) - * - * \brief Checks to see if effect is supported by haptic. - * - * \param haptic Haptic device to check on. - * \param effect Effect to check to see if it is supported. - * \return SDL_TRUE if effect is supported, SDL_FALSE if it isn't or - * -1 on error. - * - * \sa SDL_HapticQuery - * \sa SDL_HapticNewEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, - SDL_HapticEffect * - effect); - -/** - * \fn int SDL_HapticNewEffect(SDL_Haptic * haptic, SDL_HapticEffect * effect) - * - * \brief Creates a new haptic effect on the device. - * - * \param haptic Haptic device to create the effect on. - * \param effect Properties of the effect to create. - * \return The id of the effect on success or -1 on error. - * - * \sa SDL_HapticUpdateEffect - * \sa SDL_HapticRunEffect - * \sa SDL_HapticDestroyEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, - SDL_HapticEffect * effect); - -/** - * \fn int SDL_HapticUpdateEffect(SDL_Haptic * haptic, int effect, SDL_HapticEffect * data) - * - * \brief Updates the properties of an effect. - * - * Can be used dynamically, although behaviour when dynamically changing - * direction may be strange. Specifically the effect may reupload itself - * and start playing from the start. You cannot change the type either when - * running UpdateEffect. - * - * \param haptic Haptic device that has the effect. - * \param effect Effect to update. - * \param data New effect properties to use. - * \return The id of the effect on success or -1 on error. - * - * \sa SDL_HapticNewEffect - * \sa SDL_HapticRunEffect - * \sa SDL_HapticDestroyEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, - int effect, - SDL_HapticEffect * data); - -/** - * \fn int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect, Uint32 iterations) - * - * \brief Runs the haptic effect on it's assosciated haptic device. - * - * If iterations are SDL_HAPTIC_INFINITY, it'll run the effect over and over - * repeating the envelope (attack and fade) every time. If you only want the - * effect to last forever, set SDL_HAPTIC_INFINITY in the effect's length - * parameter. - * - * \param haptic Haptic device to run the effect on. - * \param effect Identifier of the haptic effect to run. - * \param iterations Number of iterations to run the effect. Use - * SDL_HAPTIC_INFINITY for infinity. - * \return 0 on success or -1 on error. - * - * \sa SDL_HapticStopEffect - * \sa SDL_HapticDestroyEffect - * \sa SDL_HapticGetEffectStatus - */ -extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, - int effect, - Uint32 iterations); - -/** - * \fn int SDL_HapticStopEffect(SDL_Haptic * haptic, int effect) - * - * \brief Stops the haptic effect on it's assosciated haptic device. - * - * \param haptic Haptic device to stop the effect on. - * \param effect Identifier of the effect to stop. - * \return 0 on success or -1 on error. - * - * \sa SDL_HapticRunEffect - * \sa SDL_HapticDestroyEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, - int effect); - -/** - * \fn void SDL_HapticDestroyEffect(SDL_Haptic * haptic, int effect) - * - * \brief Destroys a haptic effect on the device. This will stop the effect - * if it's running. Effects are automatically destroyed when the device is - * closed. - * - * \param haptic Device to destroy the effect on. - * \param effect Identifier of the effect to destroy. - * - * \sa SDL_HapticNewEffect - */ -extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, - int effect); - -/** - * \fn int SDL_HapticGetEffectStatus(SDL_Haptic *haptic, int effect) - * - * \brief Gets the status of the current effect on the haptic device. - * - * Device must support the SDL_HAPTIC_STATUS feature. - * - * \param haptic Haptic device to query the effect status on. - * \param effect Identifier of the effect to query it's status. - * \return 0 if it isn't playing, SDL_HAPTIC_PLAYING if it is playing - * or -1 on error. - * - * \sa SDL_HapticRunEffect - * \sa SDL_HapticStopEffect - */ -extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, - int effect); - -/** - * \fn int SDL_HapticSetGain(SDL_Haptic * haptic, int gain) - * - * \brief Sets the global gain of the device. Gain should be between 0 and 100. - * - * Device must support the SDL_HAPTIC_GAIN feature. - * - * The user may specify the maxmimum gain by setting the environment variable - * SDL_HAPTIC_GAIN_MAX which should be between 0 and 100. All calls to - * SDL_HapticSetGain will scale linearly using SDL_HAPTIC_GAIN_MAX as the - * maximum. - * - * \param haptic Haptic device to set the gain on. - * \param gain Value to set the gain to, should be between 0 and 100. - * \return 0 on success or -1 on error. - * - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); - -/** - * \fn int SDL_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) - * - * \brief Sets the global autocenter of the device. Autocenter should be between - * 0 and 100. Setting it to 0 will disable autocentering. - * - * Device must support the SDL_HAPTIC_AUTOCENTER feature. - * - * \param haptic Haptic device to set autocentering on. - * \param autocenter Value to set autocenter to, 0 disables autocentering. - * \return 0 on success or -1 on error. - * - * \sa SDL_HapticQuery - */ -extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, - int autocenter); - -/** - * \fn extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic) - * - * \brief Pauses a haptic device. - * - * Device must support the SDL_HAPTIC_PAUSE feature. Call SDL_HapticUnpause - * to resume playback. - * - * Do not modify the effects nor add new ones while the device is paused. - * That can cause all sorts of weird errors. - * - * \param haptic Haptic device to pause. - * \return 0 on success or -1 on error. - * - * \sa SDL_HapticUnpause - */ -extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); - -/** - * \fn extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic) - * - * \brief Unpauses a haptic device. - * - * Call to unpause after SDL_HapticPause. - * - * \param haptic Haptic device to pause. - * \return 0 on success or -1 on error. - * - * \sa SDL_HapticPause - */ -extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); - -/** - * \fn extern DECSLPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic) - * - * \brief Stops all the currently playing effects on a haptic device. - * - * \param haptic Haptic device to stop. - * \return 0 on success or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_haptic_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_joystick.h b/Externals/SDL/Include_1.3/SDL_joystick.h deleted file mode 100644 index 44aa3fbe23..0000000000 --- a/Externals/SDL/Include_1.3/SDL_joystick.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_joystick.h - * - * Include file for SDL joystick event handling - */ - -#ifndef _SDL_joystick_h -#define _SDL_joystick_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system - for joysticks, and load appropriate drivers. -*/ - -/* The joystick structure used to identify an SDL joystick */ -struct _SDL_Joystick; -typedef struct _SDL_Joystick SDL_Joystick; - - -/* Function prototypes */ -/* - * Count the number of joysticks attached to the system - */ -extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); - -/* - * Get the implementation dependent name of a joystick. - * This can be called before any joysticks are opened. - * If no name can be found, this function returns NULL. - */ -extern DECLSPEC const char *SDLCALL SDL_JoystickName(int device_index); - -/* - * Open a joystick for use - the index passed as an argument refers to - * the N'th joystick on the system. This index is the value which will - * identify this joystick in future joystick events. - * - * This function returns a joystick identifier, or NULL if an error occurred. - */ -extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); - -/* - * Returns 1 if the joystick has been opened, or 0 if it has not. - */ -extern DECLSPEC int SDLCALL SDL_JoystickOpened(int device_index); - -/* - * Get the device index of an opened joystick. - */ -extern DECLSPEC int SDLCALL SDL_JoystickIndex(SDL_Joystick * joystick); - -/* - * Get the number of general axis controls on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick * joystick); - -/* - * Get the number of trackballs on a joystick - * Joystick trackballs have only relative motion events associated - * with them and their state cannot be polled. - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick * joystick); - -/* - * Get the number of POV hats on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick * joystick); - -/* - * Get the number of buttons on a joystick - */ -extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick * joystick); - -/* - * Update the current state of the open joysticks. - * This is called automatically by the event loop if any joystick - * events are enabled. - */ -extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); - -/* - * Enable/disable joystick event polling. - * If joystick events are disabled, you must call SDL_JoystickUpdate() - * yourself and check the state of the joystick when you want joystick - * information. - * The state can be one of SDL_QUERY, SDL_ENABLE or SDL_IGNORE. - */ -extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); - -/* - * Get the current state of an axis control on a joystick - * The state is a value ranging from -32768 to 32767. - * The axis indices start at index 0. - */ -extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, - int axis); - -/* - * Get the current state of a POV hat on a joystick - * The return value is one of the following positions: - */ -#define SDL_HAT_CENTERED 0x00 -#define SDL_HAT_UP 0x01 -#define SDL_HAT_RIGHT 0x02 -#define SDL_HAT_DOWN 0x04 -#define SDL_HAT_LEFT 0x08 -#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) -#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) -#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) -#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) -/* - * The hat indices start at index 0. - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick * joystick, - int hat); - -/* - * Get the ball axis change since the last poll - * This returns 0, or -1 if you passed it invalid parameters. - * The ball indices start at index 0. - */ -extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick * joystick, - int ball, int *dx, int *dy); - -/* - * Get the current state of a button on a joystick - * The button indices start at index 0. - */ -extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick * joystick, - int button); - -/* - * Close a joystick previously opened with SDL_JoystickOpen() - */ -extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick * joystick); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_joystick_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_keyboard.h b/Externals/SDL/Include_1.3/SDL_keyboard.h deleted file mode 100644 index 28737ee0e2..0000000000 --- a/Externals/SDL/Include_1.3/SDL_keyboard.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_keyboard.h - * - * Include file for SDL keyboard event handling - */ - -#ifndef _SDL_keyboard_h -#define _SDL_keyboard_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_keysym.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/** - * \struct SDL_keysym - * - * \brief The SDL keysym structure, used in key events. - */ -typedef struct SDL_keysym -{ - SDL_scancode scancode; /**< SDL physical key code - see ::SDL_scancode for details */ - SDLKey sym; /**< SDL virtual key code - see ::SDLKey for details */ - Uint16 mod; /**< current key modifiers */ - Uint32 unicode; /**< OBSOLETE, use SDL_TextInputEvent instead */ -} SDL_keysym; - -/* Function prototypes */ - -/** - * \fn int SDL_GetNumKeyboards(void) - * - * \brief Get the number of keyboard input devices available. - * - * \sa SDL_SelectKeyboard() - */ -extern DECLSPEC int SDLCALL SDL_GetNumKeyboards(void); - -/** - * \fn int SDL_SelectKeyboard(int index) - * - * \brief Set the index of the currently selected keyboard. - * - * \return The index of the previously selected keyboard. - * - * \note You can query the currently selected keyboard by passing an index of -1. - * - * \sa SDL_GetNumKeyboards() - */ -extern DECLSPEC int SDLCALL SDL_SelectKeyboard(int index); - -/** - * \fn Uint8 *SDL_GetKeyboardState(int *numkeys) - * - * \brief Get a snapshot of the current state of the selected keyboard. - * - * \param numkeys if non-NULL, receives the length of the returned array. - * - * \return An array of key states. Indexes into this array are obtained by using ::SDL_scancode values. - * - * Example: - * Uint8 *state = SDL_GetKeyboardState(NULL); - * if ( state[SDL_SCANCODE_RETURN)] ) ... is pressed. - */ -extern DECLSPEC Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); - -/** - * \fn SDLMod SDL_GetModState(void) - * - * \brief Get the current key modifier state for the selected keyboard. - */ -extern DECLSPEC SDLMod SDLCALL SDL_GetModState(void); - -/** - * \fn void SDL_SetModState(SDLMod modstate) - * - * \brief Set the current key modifier state for the selected keyboard. - * - * \note This does not change the keyboard state, only the key modifier flags. - */ -extern DECLSPEC void SDLCALL SDL_SetModState(SDLMod modstate); - -/** - * \fn SDLKey SDL_GetKeyFromScancode(SDL_scancode scancode) - * - * \brief Get the key code corresponding to the given scancode according to the current keyboard layout. - * - * See ::SDLKey for details. - * - * \sa SDL_GetKeyName() - */ -extern DECLSPEC SDLKey SDLCALL SDL_GetKeyFromScancode(SDL_scancode scancode); - -/** - * \fn SDL_scancode SDL_GetScancodeFromKey(SDLKey key) - * - * \brief Get the scancode corresponding to the given key code according to the current keyboard layout. - * - * See ::SDL_scancode for details. - * - * \sa SDL_GetScancodeName() - */ -extern DECLSPEC SDL_scancode SDLCALL SDL_GetScancodeFromKey(SDLKey key); - -/** - * \fn const char *SDL_GetScancodeName(SDL_scancode scancode) - * - * \brief Get a human-readable name for a scancode. - * - * \return A pointer to a UTF-8 string that stays valid at least until the next call to this function. If you need it around any longer, you must copy it. If the scancode doesn't have a name, this function returns "". - * - * \sa SDL_scancode - */ -extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_scancode - scancode); - -/** - * \fn const char *SDL_GetKeyName(SDLKey key) - * - * \brief Get a human-readable name for a key. - * - * \return A pointer to a UTF-8 string that stays valid at least until the next call to this function. If you need it around any longer, you must copy it. If the key doesn't have a name, this function returns "". - * - * \sa SDLKey - */ -extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDLKey key); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_keyboard_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_loadso.h b/Externals/SDL/Include_1.3/SDL_loadso.h deleted file mode 100644 index be3ea3228b..0000000000 --- a/Externals/SDL/Include_1.3/SDL_loadso.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_loadso.h - * - * System dependent library loading routines - * - * Some things to keep in mind: - * - These functions only work on C function names. Other languages may - * have name mangling and intrinsic language support that varies from - * compiler to compiler. - * - Make sure you declare your function pointers with the same calling - * convention as the actual library function. Your code will crash - * mysteriously if you do not do this. - * - Avoid namespace collisions. If you load a symbol from the library, - * it is not defined whether or not it goes into the global symbol - * namespace for the application. If it does and it conflicts with - * symbols in your code or other shared libraries, you will not get - * the results you expect. :) - */ - -#ifndef _SDL_loadso_h -#define _SDL_loadso_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* This function dynamically loads a shared object and returns a pointer - * to the object handle (or NULL if there was an error). - * The 'sofile' parameter is a system dependent name of the object file. - */ -extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); - -/* Given an object handle, this function looks up the address of the - * named function in the shared object and returns it. This address - * is no longer valid after calling SDL_UnloadObject(). - */ -extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, - const char *name); - -/* Unload a shared object from memory */ -extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_loadso_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_main.h b/Externals/SDL/Include_1.3/SDL_main.h deleted file mode 100644 index d4d902de82..0000000000 --- a/Externals/SDL/Include_1.3/SDL_main.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_main_h -#define _SDL_main_h - -#include "SDL_stdinc.h" - -/* Redefine main() on some platforms so that it is called by SDL */ - -#if defined(__WIN32__) || \ - (defined(__MWERKS__) && !defined(__BEOS__)) || \ - defined(__SYMBIAN32__) || defined(__IPHONEOS__) - -#ifdef __cplusplus -#define C_LINKAGE "C" -#else -#define C_LINKAGE -#endif /* __cplusplus */ - -/* The application's main() function must be called with C linkage, - and should be declared like this: -#ifdef __cplusplus -extern "C" -#endif - int main(int argc, char *argv[]) - { - } - */ -#define main SDL_main - -/* The prototype for the application's main() function */ -extern C_LINKAGE int SDL_main(int argc, char *argv[]); - - -/* From the SDL library code -- needed for registering the app on Win32 */ -#ifdef __WIN32__ - -#include "begin_code.h" -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* This can be called to set the application class at startup */ -extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, - void *hInst); -extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); - -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" -#endif - -#endif /* Need to redefine main()? */ - -#endif /* _SDL_main_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_mouse.h b/Externals/SDL/Include_1.3/SDL_mouse.h deleted file mode 100644 index b57c371ca5..0000000000 --- a/Externals/SDL/Include_1.3/SDL_mouse.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_mouse.h - * - * Include file for SDL mouse event handling - */ - -#ifndef _SDL_mouse_h -#define _SDL_mouse_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -typedef struct SDL_Cursor SDL_Cursor; /* Implementation dependent */ - -/* Function prototypes */ - -/** - * \fn int SDL_GetNumMice(void) - * - * \brief Get the number of mouse input devices available. - * - * \sa SDL_SelectMouse() - */ -extern DECLSPEC int SDLCALL SDL_GetNumMice(void); - -/** - * \fn char* SDL_GetMouseName(int index) - * - * \brief Gets the name of a mouse with the given index. - * - * \param index is the index of the mouse, which name is to be returned. - * - * \return the name of the mouse with the specified index - */ -extern DECLSPEC char *SDLCALL SDL_GetMouseName(int index); - -/** - * \fn int SDL_SelectMouse(int index) - * - * \brief Set the index of the currently selected mouse. - * - * \return The index of the previously selected mouse. - * - * \note You can query the currently selected mouse by passing an index of -1. - * - * \sa SDL_GetNumMice() - */ -extern DECLSPEC int SDLCALL SDL_SelectMouse(int index); - -/** - * \fn SDL_WindowID SDL_GetMouseFocusWindow(int index) - * - * \brief Get the window which currently has focus for the currently selected mouse. - */ -extern DECLSPEC SDL_WindowID SDLCALL SDL_GetMouseFocusWindow(int index); - -/** - * \fn int SDL_SetRelativeMouseMode(int index, SDL_bool enabled) - * - * \brief Set relative mouse mode for the currently selected mouse. - * - * \param enabled Whether or not to enable relative mode - * - * \return 0 on success, or -1 if relative mode is not supported. - * - * While the mouse is in relative mode, the cursor is hidden, and the - * driver will try to report continuous motion in the current window. - * Only relative motion events will be delivered, the mouse position - * will not change. - * - * \note This function will flush any pending mouse motion. - * - * \sa SDL_GetRelativeMouseMode() - */ -extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(int index, - SDL_bool enabled); - -/** - * \fn SDL_bool SDL_GetRelativeMouseMode(int index) - * - * \brief Query whether relative mouse mode is enabled for the currently selected mouse. - * - * \sa SDL_SetRelativeMouseMode() - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(int index); - -/** - * \fn Uint8 SDL_GetMouseState(int index, int *x, int *y) - * - * \brief Retrieve the current state of the currently selected mouse. - * - * The current button state is returned as a button bitmask, which can - * be tested using the SDL_BUTTON(X) macros, and x and y are set to the - * mouse cursor position relative to the focus window for the currently - * selected mouse. You can pass NULL for either x or y. - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetMouseState(int index, int *x, int *y); - -/** - * \fn Uint8 SDL_GetRelativeMouseState(int index, int *x, int *y) - * - * \brief Retrieve the state of the currently selected mouse. - * - * The current button state is returned as a button bitmask, which can - * be tested using the SDL_BUTTON(X) macros, and x and y are set to the - * mouse deltas since the last call to SDL_GetRelativeMouseState(). - */ -extern DECLSPEC Uint8 SDLCALL SDL_GetRelativeMouseState(int index, int *x, - int *y); - -/** - * \fn void SDL_WarpMouseInWindow(SDL_WindowID windowID, int x, int y) - * - * \brief Moves the currently selected mouse to the given position within the window. - * - * \param windowID The window to move the mouse into, or 0 for the current mouse focus - * \param x The x coordinate within the window - * \param y The y coordinate within the window - * - * \note This function generates a mouse motion event - */ -extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_WindowID windowID, - int x, int y); - -/** - * \fn SDL_Cursor *SDL_CreateCursor (const Uint8 * data, const Uint8 * mask, int w, int h, int hot_x, int hot_y) - * - * \brief Create a cursor for the currently selected mouse, using the - * specified bitmap data and mask (in MSB format). - * - * The cursor width must be a multiple of 8 bits. - * - * The cursor is created in black and white according to the following: - * data mask resulting pixel on screen - * 0 1 White - * 1 1 Black - * 0 0 Transparent - * 1 0 Inverted color if possible, black if not. - * - * \sa SDL_FreeCursor() - */ -extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, - const Uint8 * mask, - int w, int h, int hot_x, - int hot_y); - -/** - * \fn void SDL_SetCursor(SDL_Cursor * cursor) - * - * \brief Set the active cursor for the currently selected mouse. - * - * \note The cursor must have been created for the selected mouse. - */ -extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); - -/** - * \fn SDL_Cursor *SDL_GetCursor(void) - * - * \brief Return the active cursor for the currently selected mouse. - */ -extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); - -/** - * \fn void SDL_FreeCursor(SDL_Cursor * cursor) - * - * \brief Frees a cursor created with SDL_CreateCursor(). - * - * \sa SDL_CreateCursor() - */ -extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); - -/** - * \fn int SDL_ShowCursor(int toggle) - * - * \brief Toggle whether or not the cursor is shown for the currently selected mouse. - * - * \param toggle 1 to show the cursor, 0 to hide it, -1 to query the current state. - * - * \return 1 if the cursor is shown, or 0 if the cursor is hidden. - */ -extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); - -/* Used as a mask when testing buttons in buttonstate - Button 1: Left mouse button - Button 2: Middle mouse button - Button 3: Right mouse button - */ - -/** - * \fn int SDL_GetCursorsNumber(int index) - * - * \brief Gets the number of cursors a pointing device supports. - * Useful for tablet users. Useful only under Windows. - * - * \param index is the index of the pointing device, which number of cursors we - * want to receive. - * - * \return the number of cursors supported by the pointing device. On Windows - * if a device is a tablet it returns a number >=1. Normal mice always return 1. - * On Linux every device reports one cursor. - */ -extern DECLSPEC int SDLCALL SDL_GetCursorsNumber(int index); - -/** - * \fn int SDL_GetCurrentCursor(int index) - * - * \brief Returns the index of the current cursor used by a specific pointing - * device. Useful only under Windows. - * - * \param index is the index of the pointing device, which cursor index we want - * to receive. - * - * \return the index of the cursor currently used by a specific pointing device. - * Always 0 under Linux. On Windows if the device isn't a tablet it returns 0. - * If the device is the tablet it returns the cursor index. - * 0 - stylus, 1 - eraser, 2 - cursor. - */ -extern DECLSPEC int SDLCALL SDL_GetCurrentCursor(int index); - -#define SDL_BUTTON(X) (1 << ((X)-1)) -#define SDL_BUTTON_LEFT 1 -#define SDL_BUTTON_MIDDLE 2 -#define SDL_BUTTON_RIGHT 3 -#define SDL_BUTTON_X1 4 -#define SDL_BUTTON_X2 5 -#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) -#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) -#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) -#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) -#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_mouse_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_mutex.h b/Externals/SDL/Include_1.3/SDL_mutex.h deleted file mode 100644 index 98f98a098a..0000000000 --- a/Externals/SDL/Include_1.3/SDL_mutex.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_mutex_h -#define _SDL_mutex_h - -/** - * \file SDL_mutex.h - * - * Functions to provide thread synchronization primitives - */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* Synchronization functions which can time out return this value - if they time out. -*/ -#define SDL_MUTEX_TIMEDOUT 1 - -/* This is the timeout value which corresponds to never time out */ -#define SDL_MUTEX_MAXWAIT (~(Uint32)0) - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Mutex functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL mutex structure, defined in SDL_mutex.c */ -struct SDL_mutex; -typedef struct SDL_mutex SDL_mutex; - -/* Create a mutex, initialized unlocked */ -extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); - -/* Lock the mutex (Returns 0, or -1 on error) */ -#define SDL_LockMutex(m) SDL_mutexP(m) -extern DECLSPEC int SDLCALL SDL_mutexP(SDL_mutex * mutex); - -/* Unlock the mutex (Returns 0, or -1 on error) - It is an error to unlock a mutex that has not been locked by - the current thread, and doing so results in undefined behavior. - */ -#define SDL_UnlockMutex(m) SDL_mutexV(m) -extern DECLSPEC int SDLCALL SDL_mutexV(SDL_mutex * mutex); - -/* Destroy a mutex */ -extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Semaphore functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL semaphore structure, defined in SDL_sem.c */ -struct SDL_semaphore; -typedef struct SDL_semaphore SDL_sem; - -/* Create a semaphore, initialized with value, returns NULL on failure. */ -extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); - -/* Destroy a semaphore */ -extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); - -/* This function suspends the calling thread until the semaphore pointed - * to by sem has a positive count. It then atomically decreases the semaphore - * count. - */ -extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); - -/* Non-blocking variant of SDL_SemWait(), returns 0 if the wait succeeds, - SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error. -*/ -extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); - -/* Variant of SDL_SemWait() with a timeout in milliseconds, returns 0 if - the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in - the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ -extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); - -/* Atomically increases the semaphore's count (not blocking), returns 0, - or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); - -/* Returns the current count of the semaphore */ -extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Condition variable functions */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* The SDL condition variable structure, defined in SDL_cond.c */ -struct SDL_cond; -typedef struct SDL_cond SDL_cond; - -/* Create a condition variable */ -extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); - -/* Destroy a condition variable */ -extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); - -/* Restart one of the threads that are waiting on the condition variable, - returns 0 or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); - -/* Restart all threads that are waiting on the condition variable, - returns 0 or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); - -/* Wait on the condition variable, unlocking the provided mutex. - The mutex must be locked before entering this function! - The mutex is re-locked once the condition variable is signaled. - Returns 0 when it is signaled, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mut); - -/* Waits for at most 'ms' milliseconds, and returns 0 if the condition - variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not - signaled in the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ -extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, - SDL_mutex * mutex, Uint32 ms); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_mutex_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_name.h b/Externals/SDL/Include_1.3/SDL_name.h deleted file mode 100644 index 511619af56..0000000000 --- a/Externals/SDL/Include_1.3/SDL_name.h +++ /dev/null @@ -1,11 +0,0 @@ - -#ifndef _SDLname_h_ -#define _SDLname_h_ - -#if defined(__STDC__) || defined(__cplusplus) -#define NeedFunctionPrototypes 1 -#endif - -#define SDL_NAME(X) SDL_##X - -#endif /* _SDLname_h_ */ diff --git a/Externals/SDL/Include_1.3/SDL_opengles.h b/Externals/SDL/Include_1.3/SDL_opengles.h deleted file mode 100644 index 814eb07159..0000000000 --- a/Externals/SDL/Include_1.3/SDL_opengles.h +++ /dev/null @@ -1,948 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org - */ - -/* - This is a simple file to encapsulate the OpenGL ES API headers. - Headers copied from The Kronos Group website. - http://www.khronos.org/opengles/ - */ - -#ifndef __gles_h_ -#define __gles_h_ - -/* $Id: gl.h 4533 2007-11-26 11:19:35Z markc $ */ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifdef __IPHONEOS__ -#include /* Header File For The OpenGL ES Library */ -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif - -#ifndef GL_APIENTRY -#define GL_APIENTRY -#endif - - -/* -** License Applicability. Except to the extent portions of this file are -** made subject to an alternative license as permitted in the SGI Free -** Software License B, Version 1.0 (the "License"), the contents of this -** file are subject only to the provisions of the License. You may not use -** this file except in compliance with the License. You may obtain a copy -** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 -** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: -** -** http://oss.sgi.com/projects/FreeB -** -** Note that, as provided in the License, the Software is distributed on an -** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS -** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND -** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A -** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. -** -** Original Code. The Original Code is: OpenGL Sample Implementation, -** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. -** Copyright in any portions created by third parties is as indicated -** elsewhere herein. All Rights Reserved. -** -** Additional Notice Provisions: The application programming interfaces -** established by SGI in conjunction with the Original Code are The -** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released -** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version -** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X -** Window System(R) (Version 1.3), released October 19, 1998. This software -** was created using the OpenGL(R) version 1.2.1 Sample Implementation -** published by SGI, but has not been independently verified as being -** compliant with the OpenGL(R) version 1.2.1 Specification. -*/ - - typedef unsigned int GLenum; - typedef unsigned char GLboolean; - typedef unsigned int GLbitfield; - typedef signed char GLbyte; - typedef short GLshort; - typedef int GLint; - typedef int GLsizei; - typedef unsigned char GLubyte; - typedef unsigned short GLushort; - typedef unsigned int GLuint; - typedef float GLfloat; - typedef float GLclampf; - typedef void GLvoid; - typedef int GLfixed; - typedef int GLclampx; - - typedef int GLintptr; - typedef int GLsizeiptr; - - -/*************************************************************/ - -/* OpenGL ES core versions */ -#define GL_VERSION_ES_CM_1_0 1 -#define GL_VERSION_ES_CL_1_0 1 -#define GL_VERSION_ES_CM_1_1 1 -#define GL_VERSION_ES_CL_1_1 1 - -/* ClearBufferMask */ -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 - -/* Boolean */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* BeginMode */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 - -/* AlphaFunction */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 - -/* BlendingFactorDest */ -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 - -/* BlendingFactorSrc */ -/* GL_ZERO */ -/* GL_ONE */ -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -/* GL_SRC_ALPHA */ -/* GL_ONE_MINUS_SRC_ALPHA */ -/* GL_DST_ALPHA */ -/* GL_ONE_MINUS_DST_ALPHA */ - -/* ClipPlaneName */ -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 - -/* ColorMaterialFace */ -/* GL_FRONT_AND_BACK */ - -/* ColorMaterialParameter */ -/* GL_AMBIENT_AND_DIFFUSE */ - -/* ColorPointerType */ -/* GL_UNSIGNED_BYTE */ -/* GL_FLOAT */ -/* GL_FIXED */ - -/* CullFaceMode */ -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 - -/* DepthFunction */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* EnableCap */ -#define GL_FOG 0x0B60 -#define GL_LIGHTING 0x0B50 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_ALPHA_TEST 0x0BC0 -#define GL_BLEND 0x0BE2 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -/* GL_LIGHT0 */ -/* GL_LIGHT1 */ -/* GL_LIGHT2 */ -/* GL_LIGHT3 */ -/* GL_LIGHT4 */ -/* GL_LIGHT5 */ -/* GL_LIGHT6 */ -/* GL_LIGHT7 */ -#define GL_POINT_SMOOTH 0x0B10 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_NORMALIZE 0x0BA1 -#define GL_RESCALE_NORMAL 0x803A -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 - -/* ErrorCode */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 - -/* FogMode */ -/* GL_LINEAR */ -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 - -/* FogParameter */ -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_COLOR 0x0B66 - -/* FrontFaceDirection */ -#define GL_CW 0x0900 -#define GL_CCW 0x0901 - -/* GetPName */ -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_LINE_WIDTH 0x0B21 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_SHADE_MODEL 0x0B54 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_MATRIX_MODE 0x0BA0 -#define GL_VIEWPORT 0x0BA2 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB - -/* GetTextureParameter */ -/* GL_TEXTURE_MAG_FILTER */ -/* GL_TEXTURE_MIN_FILTER */ -/* GL_TEXTURE_WRAP_S */ -/* GL_TEXTURE_WRAP_T */ - -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - -/* HintMode */ -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* HintTarget */ -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_FOG_HINT 0x0C54 -#define GL_GENERATE_MIPMAP_HINT 0x8192 - -/* LightModelParameter */ -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 - -/* LightParameter */ -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 - -/* DataType */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_FLOAT 0x1406 -#define GL_FIXED 0x140C - -/* LogicOp */ -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F - -/* MaterialFace */ -/* GL_FRONT_AND_BACK */ - -/* MaterialParameter */ -#define GL_EMISSION 0x1600 -#define GL_SHININESS 0x1601 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -/* GL_AMBIENT */ -/* GL_DIFFUSE */ -/* GL_SPECULAR */ - -/* MatrixMode */ -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 - -/* NormalPointerType */ -/* GL_BYTE */ -/* GL_SHORT */ -/* GL_FLOAT */ -/* GL_FIXED */ - -/* PixelFormat */ -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A - -/* PixelStoreParameter */ -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 - -/* PixelType */ -/* GL_UNSIGNED_BYTE */ -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 - -/* ShadingModel */ -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 - -/* StencilFunction */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* StencilOp */ -/* GL_ZERO */ -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -/* GL_INVERT */ - -/* StringName */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* TexCoordPointerType */ -/* GL_SHORT */ -/* GL_FLOAT */ -/* GL_FIXED */ -/* GL_BYTE */ - -/* TextureEnvMode */ -#define GL_MODULATE 0x2100 -#define GL_DECAL 0x2101 -/* GL_BLEND */ -#define GL_ADD 0x0104 -/* GL_REPLACE */ - -/* TextureEnvParameter */ -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_ENV_COLOR 0x2201 - -/* TextureEnvTarget */ -#define GL_TEXTURE_ENV 0x2300 - -/* TextureMagFilter */ -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 - -/* TextureMinFilter */ -/* GL_NEAREST */ -/* GL_LINEAR */ -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 - -/* TextureParameterName */ -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_GENERATE_MIPMAP 0x8191 - -/* TextureTarget */ -/* GL_TEXTURE_2D */ - -/* TextureUnit */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 - -/* TextureWrapMode */ -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F - -/* VertexPointerType */ -/* GL_SHORT */ -/* GL_FLOAT */ -/* GL_FIXED */ -/* GL_BYTE */ - -/* LightName */ -#define GL_LIGHT0 0x4000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 - -/* Buffer Objects */ -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 - -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A - -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 - -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 - -/* Texture combine + dot3 */ -#define GL_SUBTRACT 0x84E7 -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A - -#define GL_ALPHA_SCALE 0x0D1C - -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC1_ALPHA 0x8589 -#define GL_SRC2_ALPHA 0x858A - -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF - -/*------------------------------------------------------------------------* - * required OES extension tokens - *------------------------------------------------------------------------*/ - -/* OES_read_format */ -#ifndef GL_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif - -/* OES_point_size_array */ -#ifndef GL_OES_point_size_array -#define GL_POINT_SIZE_ARRAY_OES 0x8B9C -#define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A -#define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B -#define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C -#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F -#endif - -/* GL_OES_point_sprite */ -#ifndef GL_OES_point_sprite -#define GL_POINT_SPRITE_OES 0x8861 -#define GL_COORD_REPLACE_OES 0x8862 -#endif - -/*************************************************************/ - -/* Available only in Common profile */ - GL_API void GL_APIENTRY glAlphaFunc(GLenum func, GLclampf ref); - GL_API void GL_APIENTRY glClearColor(GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha); - GL_API void GL_APIENTRY glClearDepthf(GLclampf depth); - GL_API void GL_APIENTRY glClipPlanef(GLenum plane, - const GLfloat * equation); - GL_API void GL_APIENTRY glColor4f(GLfloat red, GLfloat green, - GLfloat blue, GLfloat alpha); - GL_API void GL_APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar); - GL_API void GL_APIENTRY glFogf(GLenum pname, GLfloat param); - GL_API void GL_APIENTRY glFogfv(GLenum pname, const GLfloat * params); - GL_API void GL_APIENTRY glFrustumf(GLfloat left, GLfloat right, - GLfloat bottom, GLfloat top, - GLfloat zNear, GLfloat zFar); - GL_API void GL_APIENTRY glGetClipPlanef(GLenum pname, GLfloat eqn[4]); - GL_API void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat * params); - GL_API void GL_APIENTRY glGetLightfv(GLenum light, GLenum pname, - GLfloat * params); - GL_API void GL_APIENTRY glGetMaterialfv(GLenum face, GLenum pname, - GLfloat * params); - GL_API void GL_APIENTRY glGetTexEnvfv(GLenum env, GLenum pname, - GLfloat * params); - GL_API void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, - GLfloat * params); - GL_API void GL_APIENTRY glLightModelf(GLenum pname, GLfloat param); - GL_API void GL_APIENTRY glLightModelfv(GLenum pname, - const GLfloat * params); - GL_API void GL_APIENTRY glLightf(GLenum light, GLenum pname, - GLfloat param); - GL_API void GL_APIENTRY glLightfv(GLenum light, GLenum pname, - const GLfloat * params); - GL_API void GL_APIENTRY glLineWidth(GLfloat width); - GL_API void GL_APIENTRY glLoadMatrixf(const GLfloat * m); - GL_API void GL_APIENTRY glMaterialf(GLenum face, GLenum pname, - GLfloat param); - GL_API void GL_APIENTRY glMaterialfv(GLenum face, GLenum pname, - const GLfloat * params); - GL_API void GL_APIENTRY glMultMatrixf(const GLfloat * m); - GL_API void GL_APIENTRY glMultiTexCoord4f(GLenum target, GLfloat s, - GLfloat t, GLfloat r, - GLfloat q); - GL_API void GL_APIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz); - GL_API void GL_APIENTRY glOrthof(GLfloat left, GLfloat right, - GLfloat bottom, GLfloat top, - GLfloat zNear, GLfloat zFar); - GL_API void GL_APIENTRY glPointParameterf(GLenum pname, GLfloat param); - GL_API void GL_APIENTRY glPointParameterfv(GLenum pname, - const GLfloat * params); - GL_API void GL_APIENTRY glPointSize(GLfloat size); - GL_API void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units); - GL_API void GL_APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, - GLfloat z); - GL_API void GL_APIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z); - GL_API void GL_APIENTRY glTexEnvf(GLenum target, GLenum pname, - GLfloat param); - GL_API void GL_APIENTRY glTexEnvfv(GLenum target, GLenum pname, - const GLfloat * params); - GL_API void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, - GLfloat param); - GL_API void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, - const GLfloat * params); - GL_API void GL_APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z); - -/* Available in both Common and Common-Lite profiles */ - GL_API void GL_APIENTRY glActiveTexture(GLenum texture); - GL_API void GL_APIENTRY glAlphaFuncx(GLenum func, GLclampx ref); - GL_API void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer); - GL_API void GL_APIENTRY glBindTexture(GLenum target, GLuint texture); - GL_API void GL_APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor); - GL_API void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, - const GLvoid * data, GLenum usage); - GL_API void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, - GLsizeiptr size, - const GLvoid * data); - GL_API void GL_APIENTRY glClear(GLbitfield mask); - GL_API void GL_APIENTRY glClearColorx(GLclampx red, GLclampx green, - GLclampx blue, GLclampx alpha); - GL_API void GL_APIENTRY glClearDepthx(GLclampx depth); - GL_API void GL_APIENTRY glClearStencil(GLint s); - GL_API void GL_APIENTRY glClientActiveTexture(GLenum texture); - GL_API void GL_APIENTRY glClipPlanex(GLenum plane, - const GLfixed * equation); - GL_API void GL_APIENTRY glColor4ub(GLubyte red, GLubyte green, - GLubyte blue, GLubyte alpha); - GL_API void GL_APIENTRY glColor4x(GLfixed red, GLfixed green, - GLfixed blue, GLfixed alpha); - GL_API void GL_APIENTRY glColorMask(GLboolean red, GLboolean green, - GLboolean blue, GLboolean alpha); - GL_API void GL_APIENTRY glColorPointer(GLint size, GLenum type, - GLsizei stride, - const GLvoid * pointer); - GL_API void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, - GLenum internalformat, - GLsizei width, - GLsizei height, - GLint border, - GLsizei imageSize, - const GLvoid * data); - GL_API void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLsizei width, - GLsizei height, - GLenum format, - GLsizei imageSize, - const GLvoid * data); - GL_API void GL_APIENTRY glCopyTexImage2D(GLenum target, GLint level, - GLenum internalformat, GLint x, - GLint y, GLsizei width, - GLsizei height, GLint border); - GL_API void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint x, GLint y, - GLsizei width, - GLsizei height); - GL_API void GL_APIENTRY glCullFace(GLenum mode); - GL_API void GL_APIENTRY glDeleteBuffers(GLsizei n, - const GLuint * buffers); - GL_API void GL_APIENTRY glDeleteTextures(GLsizei n, - const GLuint * textures); - GL_API void GL_APIENTRY glDepthFunc(GLenum func); - GL_API void GL_APIENTRY glDepthMask(GLboolean flag); - GL_API void GL_APIENTRY glDepthRangex(GLclampx zNear, GLclampx zFar); - GL_API void GL_APIENTRY glDisable(GLenum cap); - GL_API void GL_APIENTRY glDisableClientState(GLenum array); - GL_API void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, - GLsizei count); - GL_API void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, - GLenum type, - const GLvoid * indices); - GL_API void GL_APIENTRY glEnable(GLenum cap); - GL_API void GL_APIENTRY glEnableClientState(GLenum array); - GL_API void GL_APIENTRY glFinish(void); - GL_API void GL_APIENTRY glFlush(void); - GL_API void GL_APIENTRY glFogx(GLenum pname, GLfixed param); - GL_API void GL_APIENTRY glFogxv(GLenum pname, const GLfixed * params); - GL_API void GL_APIENTRY glFrontFace(GLenum mode); - GL_API void GL_APIENTRY glFrustumx(GLfixed left, GLfixed right, - GLfixed bottom, GLfixed top, - GLfixed zNear, GLfixed zFar); - GL_API void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean * params); - GL_API void GL_APIENTRY glGetBufferParameteriv(GLenum target, - GLenum pname, - GLint * params); - GL_API void GL_APIENTRY glGetClipPlanex(GLenum pname, GLfixed eqn[4]); - GL_API void GL_APIENTRY glGenBuffers(GLsizei n, GLuint * buffers); - GL_API void GL_APIENTRY glGenTextures(GLsizei n, GLuint * textures); - GL_API GLenum GL_APIENTRY glGetError(void); - GL_API void GL_APIENTRY glGetFixedv(GLenum pname, GLfixed * params); - GL_API void GL_APIENTRY glGetIntegerv(GLenum pname, GLint * params); - GL_API void GL_APIENTRY glGetLightxv(GLenum light, GLenum pname, - GLfixed * params); - GL_API void GL_APIENTRY glGetMaterialxv(GLenum face, GLenum pname, - GLfixed * params); - GL_API void GL_APIENTRY glGetPointerv(GLenum pname, void **params); - GL_API const GLubyte *GL_APIENTRY glGetString(GLenum name); - GL_API void GL_APIENTRY glGetTexEnviv(GLenum env, GLenum pname, - GLint * params); - GL_API void GL_APIENTRY glGetTexEnvxv(GLenum env, GLenum pname, - GLfixed * params); - GL_API void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, - GLint * params); - GL_API void GL_APIENTRY glGetTexParameterxv(GLenum target, GLenum pname, - GLfixed * params); - GL_API void GL_APIENTRY glHint(GLenum target, GLenum mode); - GL_API GLboolean GL_APIENTRY glIsBuffer(GLuint buffer); - GL_API GLboolean GL_APIENTRY glIsEnabled(GLenum cap); - GL_API GLboolean GL_APIENTRY glIsTexture(GLuint texture); - GL_API void GL_APIENTRY glLightModelx(GLenum pname, GLfixed param); - GL_API void GL_APIENTRY glLightModelxv(GLenum pname, - const GLfixed * params); - GL_API void GL_APIENTRY glLightx(GLenum light, GLenum pname, - GLfixed param); - GL_API void GL_APIENTRY glLightxv(GLenum light, GLenum pname, - const GLfixed * params); - GL_API void GL_APIENTRY glLineWidthx(GLfixed width); - GL_API void GL_APIENTRY glLoadIdentity(void); - GL_API void GL_APIENTRY glLoadMatrixx(const GLfixed * m); - GL_API void GL_APIENTRY glLogicOp(GLenum opcode); - GL_API void GL_APIENTRY glMaterialx(GLenum face, GLenum pname, - GLfixed param); - GL_API void GL_APIENTRY glMaterialxv(GLenum face, GLenum pname, - const GLfixed * params); - GL_API void GL_APIENTRY glMatrixMode(GLenum mode); - GL_API void GL_APIENTRY glMultMatrixx(const GLfixed * m); - GL_API void GL_APIENTRY glMultiTexCoord4x(GLenum target, GLfixed s, - GLfixed t, GLfixed r, - GLfixed q); - GL_API void GL_APIENTRY glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz); - GL_API void GL_APIENTRY glNormalPointer(GLenum type, GLsizei stride, - const GLvoid * pointer); - GL_API void GL_APIENTRY glOrthox(GLfixed left, GLfixed right, - GLfixed bottom, GLfixed top, - GLfixed zNear, GLfixed zFar); - GL_API void GL_APIENTRY glPixelStorei(GLenum pname, GLint param); - GL_API void GL_APIENTRY glPointParameterx(GLenum pname, GLfixed param); - GL_API void GL_APIENTRY glPointParameterxv(GLenum pname, - const GLfixed * params); - GL_API void GL_APIENTRY glPointSizex(GLfixed size); - GL_API void GL_APIENTRY glPolygonOffsetx(GLfixed factor, GLfixed units); - GL_API void GL_APIENTRY glPopMatrix(void); - GL_API void GL_APIENTRY glPushMatrix(void); - GL_API void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, - GLsizei height, GLenum format, - GLenum type, GLvoid * pixels); - GL_API void GL_APIENTRY glRotatex(GLfixed angle, GLfixed x, GLfixed y, - GLfixed z); - GL_API void GL_APIENTRY glSampleCoverage(GLclampf value, - GLboolean invert); - GL_API void GL_APIENTRY glSampleCoveragex(GLclampx value, - GLboolean invert); - GL_API void GL_APIENTRY glScalex(GLfixed x, GLfixed y, GLfixed z); - GL_API void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, - GLsizei height); - GL_API void GL_APIENTRY glShadeModel(GLenum mode); - GL_API void GL_APIENTRY glStencilFunc(GLenum func, GLint ref, - GLuint mask); - GL_API void GL_APIENTRY glStencilMask(GLuint mask); - GL_API void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, - GLenum zpass); - GL_API void GL_APIENTRY glTexCoordPointer(GLint size, GLenum type, - GLsizei stride, - const GLvoid * pointer); - GL_API void GL_APIENTRY glTexEnvi(GLenum target, GLenum pname, - GLint param); - GL_API void GL_APIENTRY glTexEnvx(GLenum target, GLenum pname, - GLfixed param); - GL_API void GL_APIENTRY glTexEnviv(GLenum target, GLenum pname, - const GLint * params); - GL_API void GL_APIENTRY glTexEnvxv(GLenum target, GLenum pname, - const GLfixed * params); - GL_API void GL_APIENTRY glTexImage2D(GLenum target, GLint level, - GLint internalformat, GLsizei width, - GLsizei height, GLint border, - GLenum format, GLenum type, - const GLvoid * pixels); - GL_API void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, - GLint param); - GL_API void GL_APIENTRY glTexParameterx(GLenum target, GLenum pname, - GLfixed param); - GL_API void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, - const GLint * params); - GL_API void GL_APIENTRY glTexParameterxv(GLenum target, GLenum pname, - const GLfixed * params); - GL_API void GL_APIENTRY glTexSubImage2D(GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid * pixels); - GL_API void GL_APIENTRY glTranslatex(GLfixed x, GLfixed y, GLfixed z); - GL_API void GL_APIENTRY glVertexPointer(GLint size, GLenum type, - GLsizei stride, - const GLvoid * pointer); - GL_API void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, - GLsizei height); - -/*------------------------------------------------------------------------* - * Required OES extension functions - *------------------------------------------------------------------------*/ - -/* GL_OES_read_format */ -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#endif - -/* GL_OES_point_size_array */ -#ifndef GL_OES_point_size_array -#define GL_OES_point_size_array 1 - GL_API void GL_APIENTRY glPointSizePointerOES(GLenum type, GLsizei stride, - const GLvoid * pointer); -#endif - -/* GL_OES_point_sprite */ -#ifndef GL_OES_point_sprite -#define GL_OES_point_sprite 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __gles_h_ */ diff --git a/Externals/SDL/Include_1.3/SDL_platform.h b/Externals/SDL/Include_1.3/SDL_platform.h deleted file mode 100644 index cc2e67fa49..0000000000 --- a/Externals/SDL/Include_1.3/SDL_platform.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* Try to get a standard set of platform defines */ - -#ifndef _SDL_platform_h -#define _SDL_platform_h - -#if defined(_AIX) -#undef __AIX__ -#define __AIX__ 1 -#endif -#if defined(__BEOS__) -#undef __BEOS__ -#define __BEOS__ 1 -#endif -#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) -#undef __BSDI__ -#define __BSDI__ 1 -#endif -#if defined(_arch_dreamcast) -#undef __DREAMCAST__ -#define __DREAMCAST__ 1 -#endif -#if defined(__FreeBSD__) || defined(__DragonFly__) -#undef __FREEBSD__ -#define __FREEBSD__ 1 -#endif -#if defined(hpux) || defined(__hpux) || defined(__hpux__) -#undef __HPUX__ -#define __HPUX__ 1 -#endif -#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) -#undef __IRIX__ -#define __IRIX__ 1 -#endif -#if defined(linux) || defined(__linux) || defined(__linux__) -#undef __LINUX__ -#define __LINUX__ 1 -#endif - -#if defined(__APPLE__) -/* lets us know what version of Mac OS X we're compiling on */ -#include "AvailabilityMacros.h" -#ifdef MAC_OS_X_VERSION_10_3 -#include "TargetConditionals.h" /* this header is in 10.3 or later */ -#if TARGET_OS_IPHONE -/* if compiling for iPhone */ -#undef __IPHONEOS__ -#define __IPHONEOS__ 1 -#undef __MACOSX__ -#else -/* if not compiling for iPhone */ -#undef __MACOSX__ -#define __MACOSX__ 1 -#endif /* TARGET_OS_IPHONE */ -#else -/* if earlier verion of Mac OS X than version 10.3 */ -#undef __MACOSX__ -#define __MACOSX__ 1 -#endif - -#endif /* defined(__APPLE__) */ - -#if defined(__NetBSD__) -#undef __NETBSD__ -#define __NETBSD__ 1 -#endif -#if defined(__OpenBSD__) -#undef __OPENBSD__ -#define __OPENBSD__ 1 -#endif -#if defined(__OS2__) -#undef __OS2__ -#define __OS2__ 1 -#endif -#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) -#undef __OSF__ -#define __OSF__ 1 -#endif -#if defined(__QNXNTO__) -#undef __QNXNTO__ -#define __QNXNTO__ 1 -#endif -#if defined(riscos) || defined(__riscos) || defined(__riscos__) -#undef __RISCOS__ -#define __RISCOS__ 1 -#endif -#if defined(__SVR4) -#undef __SOLARIS__ -#define __SOLARIS__ 1 -#endif -#if defined(WIN32) || defined(_WIN32) -#undef __WIN32__ -#define __WIN32__ 1 -#endif - -#if defined(__NDS__) -#undef __NINTENDODS__ -#define __NINTENDODS__ 1 -#endif - -#endif /* _SDL_platform_h */ diff --git a/Externals/SDL/Include_1.3/SDL_quit.h b/Externals/SDL/Include_1.3/SDL_quit.h deleted file mode 100644 index bcf6e3c457..0000000000 --- a/Externals/SDL/Include_1.3/SDL_quit.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_quit.h - * - * Include file for SDL quit event handling - */ - -#ifndef _SDL_quit_h -#define _SDL_quit_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/* - An SDL_QUITEVENT is generated when the user tries to close the application - window. If it is ignored or filtered out, the window will remain open. - If it is not ignored or filtered, it is queued normally and the window - is allowed to close. When the window is closed, screen updates will - complete, but have no effect. - - SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) - and SIGTERM (system termination request), if handlers do not already - exist, that generate SDL_QUITEVENT events as well. There is no way - to determine the cause of an SDL_QUITEVENT, but setting a signal - handler in your application will override the default generation of - quit events for that signal. -*/ - -/* There are no functions directly affecting the quit event */ -#define SDL_QuitRequested() \ - (SDL_PumpEvents(), SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUITMASK)) - -#endif /* _SDL_quit_h */ diff --git a/Externals/SDL/Include_1.3/SDL_rect.h b/Externals/SDL/Include_1.3/SDL_rect.h deleted file mode 100644 index c3394468e0..0000000000 --- a/Externals/SDL/Include_1.3/SDL_rect.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_rect.h - * - * Header file for SDL_rect definition and management functions - */ - -#ifndef _SDL_rect_h -#define _SDL_rect_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_pixels.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/** - * \struct SDL_Rect - * - * \brief A rectangle, with the origin at the upper left. - * - * \sa SDL_RectEmpty - * \sa SDL_RectEquals - * \sa SDL_HasIntersection - * \sa SDL_IntersectRect - * \sa SDL_UnionRect - */ -typedef struct SDL_Rect -{ - int x, y; - int w, h; -} SDL_Rect; - -/** - * \def SDL_RectEmpty() - * - * \brief Returns true if the rectangle has no area. - */ -#define SDL_RectEmpty(X) (((X)->w <= 0) || ((X)->h <= 0)) - -/** - * \def SDL_RectEquals() - * - * \brief Returns true if the two rectangles are equal. - */ -#define SDL_RectEquals(A, B) (((A)->x == (B)->x) && ((A)->y == (B)->y) && \ - ((A)->w == (B)->w) && ((A)->h == (B)->h)) - -/** - * \fn SDL_bool SDL_HasIntersection(const SDL_Rect * A, const SDL_Rect * B); - * - * \brief Determine whether two rectangles intersect. - * - * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, - const SDL_Rect * B); - -/** - * \fn SDL_bool SDL_IntersectRect(const SDL_Rect * A, const SDL_Rect * B, SDL_Rect * result) - * - * \brief Calculate the intersection of two rectangles. - * - * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, - const SDL_Rect * B, - SDL_Rect * result); - -/** - * \fn void SDL_UnionRect(const SDL_Rect * A, const SDL_Rect * B, SDL_Rect * result) - * - * \brief Calculate the union of two rectangles - */ -extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, - const SDL_Rect * B, - SDL_Rect * result); - -/** - * \fn SDL_bool SDL_IntersectRectAndLine(const SDL_Rect *rect, int *X1, int *Y1, int *X2, int *Y2) - * - * \brief Calculate the intersection of a rectangle and line segment. - * - * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * - rect, int *X1, - int *Y1, int *X2, - int *Y2); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_rect_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_revision.h b/Externals/SDL/Include_1.3/SDL_revision.h deleted file mode 100644 index a7851a2f4d..0000000000 --- a/Externals/SDL/Include_1.3/SDL_revision.h +++ /dev/null @@ -1 +0,0 @@ -#define SDL_REVISION 4404 diff --git a/Externals/SDL/Include_1.3/SDL_rwops.h b/Externals/SDL/Include_1.3/SDL_rwops.h deleted file mode 100644 index 957ce2edff..0000000000 --- a/Externals/SDL/Include_1.3/SDL_rwops.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_rwops.h - * - * This file provides a general interface for SDL to read and write - * data sources. It can easily be extended to files, memory, etc. - */ - -#ifndef _SDL_rwops_h -#define _SDL_rwops_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* This is the read/write operation structure -- very basic */ - -typedef struct SDL_RWops -{ - /* Seek to 'offset' relative to whence, one of stdio's whence values: - RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END - Returns the final offset in the data source. - */ - long (SDLCALL * seek) (struct SDL_RWops * context, long offset, - int whence); - - /* Read up to 'num' objects each of size 'objsize' from the data - source to the area pointed at by 'ptr'. - Returns the number of objects read, or 0 at error or end of file. - */ - size_t(SDLCALL * read) (struct SDL_RWops * context, void *ptr, - size_t size, size_t maxnum); - - /* Write exactly 'num' objects each of size 'objsize' from the area - pointed at by 'ptr' to data source. - Returns the number of objects written, or 0 at error or end of file. - */ - size_t(SDLCALL * write) (struct SDL_RWops * context, const void *ptr, - size_t size, size_t num); - - /* Close and free an allocated SDL_RWops structure. - Returns 0 if successful or -1 on write error when flushing data. - */ - int (SDLCALL * close) (struct SDL_RWops * context); - - Uint32 type; - union - { -#ifdef __WIN32__ - struct - { - SDL_bool append; - void *h; - struct - { - void *data; - int size; - int left; - } buffer; - } win32io; -#endif -#ifdef HAVE_STDIO_H - struct - { - SDL_bool autoclose; - FILE *fp; - } stdio; -#endif - struct - { - Uint8 *base; - Uint8 *here; - Uint8 *stop; - } mem; - struct - { - void *data1; - } unknown; - } hidden; - -} SDL_RWops; - - -/* Functions to create SDL_RWops structures from various data sources */ - -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, - const char *mode); - -#ifdef HAVE_STDIO_H -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, - SDL_bool autoclose); -#endif - -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); -extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, - int size); - -extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); -extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); - -#define RW_SEEK_SET 0 /* Seek from the beginning of data */ -#define RW_SEEK_CUR 1 /* Seek relative to current read point */ -#define RW_SEEK_END 2 /* Seek relative to the end of data */ - -/* Macros to easily read and write from an SDL_RWops structure */ -#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) -#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) -#define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) -#define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) -#define SDL_RWclose(ctx) (ctx)->close(ctx) - - -/* Read an item of the specified endianness and return in native format */ -extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); -extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); -extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); -extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); -extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); -extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); - -/* Write an item of native format to the specified endianness */ -extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); -extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); -extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); -extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); -extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); -extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_rwops_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_stdinc.h b/Externals/SDL/Include_1.3/SDL_stdinc.h deleted file mode 100644 index 1792759cc7..0000000000 --- a/Externals/SDL/Include_1.3/SDL_stdinc.h +++ /dev/null @@ -1,761 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_stdinc.h - * - * This is a general header that includes C language support - */ - -#ifndef _SDL_stdinc_h -#define _SDL_stdinc_h - -#include "SDL_config.h" - - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_STDIO_H -#include -#endif -#if defined(STDC_HEADERS) -# include -# include -# include -#else -# if defined(HAVE_STDLIB_H) -# include -# elif defined(HAVE_MALLOC_H) -# include -# endif -# if defined(HAVE_STDDEF_H) -# include -# endif -# if defined(HAVE_STDARG_H) -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#if defined(HAVE_INTTYPES_H) -# include -#elif defined(HAVE_STDINT_H) -# include -#endif -#ifdef HAVE_CTYPE_H -# include -#endif -#ifdef HAVE_MATH_H -# include -#endif -#ifdef HAVE_ICONV_H -# include -#endif - -/* The number of elements in an array */ -#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) -#define SDL_TABLESIZE(table) SDL_arraysize(table) - -/* Basic data types */ -typedef enum SDL_bool -{ - SDL_FALSE = 0, - SDL_TRUE = 1 -} SDL_bool; - -/** - * \typedef Sint8 - * \brief A signed 8-bit integer type. - */ -typedef int8_t Sint8; -/** - * \typedef Uint8 - * \brief An unsigned 8-bit integer type. - */ -typedef uint8_t Uint8; -/** - * \typedef Sint16 - * \brief A signed 16-bit integer type. - */ -typedef int16_t Sint16; -/** - * \typedef Uint16 - * \brief An unsigned 16-bit integer type. - */ -typedef uint16_t Uint16; -/** - * \typedef Sint32 - * \brief A signed 32-bit integer type. - */ -typedef int32_t Sint32; -/** - * \typedef Uint32 - * \brief An unsigned 32-bit integer type. - */ -typedef uint32_t Uint32; - -#ifdef SDL_HAS_64BIT_TYPE -/** - * \typedef Sint64 - * \brief A signed 64-bit integer type. - * \warning On platforms without any sort of 64-bit datatype, this is equivalent to Sint32! - */ -typedef int64_t Sint64; -/** - * \typedef Uint64 - * \brief An unsigned 64-bit integer type. - * \warning On platforms without any sort of 64-bit datatype, this is equivalent to Uint32! - */ -typedef uint64_t Uint64; -#else -/* This is really just a hack to prevent the compiler from complaining */ -typedef Sint32 Sint64; -typedef Uint32 Uint64; -#endif - -/* Make sure the types really have the right sizes */ -#define SDL_COMPILE_TIME_ASSERT(name, x) \ - typedef int SDL_dummy_ ## name[(x) * 2 - 1] -#ifndef DOXYGEN_SHOULD_IGNORE_THIS -SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); -SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); -SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); -SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); -SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); -SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); -#ifndef __NINTENDODS__ /* TODO: figure out why the following happens: - include/SDL_stdinc.h:150: error: size of array 'SDL_dummy_uint64' is negative - include/SDL_stdinc.h:151: error: size of array 'SDL_dummy_sint64' is negative */ -SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); -SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); -#endif -#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ - -/* Check to make sure enums are the size of ints, for structure packing. - For both Watcom C/C++ and Borland C/C++ the compiler option that makes - enums having the size of an int must be enabled. - This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). -*/ -/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */ -#ifdef __MWERKS__ -#pragma enumsalwaysint on -#endif - -#ifndef DOXYGEN_SHOULD_IGNORE_THIS -#ifndef __NINTENDODS__ /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ -typedef enum -{ - DUMMY_ENUM_VALUE -} SDL_DUMMY_ENUM; - -SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); -#endif -#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -#ifdef HAVE_MALLOC -#define SDL_malloc malloc -#else -extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); -#endif - -#ifdef HAVE_CALLOC -#define SDL_calloc calloc -#else -extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); -#endif - -#ifdef HAVE_REALLOC -#define SDL_realloc realloc -#else -extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); -#endif - -#ifdef HAVE_FREE -#define SDL_free free -#else -extern DECLSPEC void SDLCALL SDL_free(void *mem); -#endif - -#if defined(HAVE_ALLOCA) && !defined(alloca) -# if defined(HAVE_ALLOCA_H) -# include -# elif defined(__GNUC__) -# define alloca __builtin_alloca -# elif defined(_MSC_VER) -# include -# define alloca _alloca -# elif defined(__WATCOMC__) -# include -# elif defined(__BORLANDC__) -# include -# elif defined(__DMC__) -# include -# elif defined(__AIX__) -#pragma alloca -# elif defined(__MRC__) -void *alloca(unsigned); -# else -char *alloca(); -# endif -#endif -#ifdef HAVE_ALLOCA -#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) -#define SDL_stack_free(data) -#else -#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) -#define SDL_stack_free(data) SDL_free(data) -#endif - -#ifdef HAVE_GETENV -#define SDL_getenv getenv -#else -extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); -#endif - -#ifdef HAVE_PUTENV -#define SDL_putenv putenv -#else -extern DECLSPEC int SDLCALL SDL_putenv(const char *variable); -#endif - -#ifdef HAVE_QSORT -#define SDL_qsort qsort -#else -extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, - int (*compare) (const void *, - const void *)); -#endif - -#ifdef HAVE_ABS -#define SDL_abs abs -#else -#define SDL_abs(X) ((X) < 0 ? -(X) : (X)) -#endif - -#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) -#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) - -#ifdef HAVE_CTYPE_H -#define SDL_isdigit(X) isdigit(X) -#define SDL_isspace(X) isspace(X) -#define SDL_toupper(X) toupper(X) -#define SDL_tolower(X) tolower(X) -#else -#define SDL_isdigit(X) (((X) >= '0') && ((X) <= '9')) -#define SDL_isspace(X) (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n')) -#define SDL_toupper(X) (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X)) -#define SDL_tolower(X) (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X)) -#endif - -#ifdef HAVE_MEMSET -#define SDL_memset memset -#else -extern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len); -#endif -#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) -#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) - -#if defined(__GNUC__) && defined(i386) -#define SDL_memset4(dst, val, len) \ -do { \ - int u0, u1, u2; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; stosl\n\t" \ - : "=&D" (u0), "=&a" (u1), "=&c" (u2) \ - : "0" (dst), "1" (val), "2" ((Uint32)(len)) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memset4 -#define SDL_memset4(dst, val, len) \ -do { \ - unsigned _count = (len); \ - unsigned _n = (_count + 3) / 4; \ - Uint32 *_p = (Uint32 *)(dst); \ - Uint32 _val = (val); \ - switch (_count % 4) { \ - case 0: do { *_p++ = _val; \ - case 3: *_p++ = _val; \ - case 2: *_p++ = _val; \ - case 1: *_p++ = _val; \ - } while ( --_n ); \ - } \ -} while(0) -#endif - -/* We can count on memcpy existing on Mac OS X and being well-tuned. */ -#if defined(__MACH__) && defined(__APPLE__) -#define SDL_memcpy(dst, src, len) memcpy(dst, src, len) -#elif defined(__GNUC__) && defined(i386) -#define SDL_memcpy(dst, src, len) \ -do { \ - int u0, u1, u2; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; movsl\n\t" \ - "testb $2,%b4\n\t" \ - "je 1f\n\t" \ - "movsw\n" \ - "1:\ttestb $1,%b4\n\t" \ - "je 2f\n\t" \ - "movsb\n" \ - "2:" \ - : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ - : "0" ((unsigned)(len)/4), "q" (len), "1" (dst),"2" (src) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memcpy -#ifdef HAVE_MEMCPY -#define SDL_memcpy memcpy -#elif defined(HAVE_BCOPY) -#define SDL_memcpy(d, s, n) bcopy((s), (d), (n)) -#else -extern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src, - size_t len); -#endif -#endif - -/* We can count on memcpy existing on Mac OS X and being well-tuned. */ -#if defined(__MACH__) && defined(__APPLE__) -#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4) -#elif defined(__GNUC__) && defined(i386) -#define SDL_memcpy4(dst, src, len) \ -do { \ - int ecx, edi, esi; \ - __asm__ __volatile__ ( \ - "cld\n\t" \ - "rep ; movsl" \ - : "=&c" (ecx), "=&D" (edi), "=&S" (esi) \ - : "0" ((unsigned)(len)), "1" (dst), "2" (src) \ - : "memory" ); \ -} while(0) -#endif -#ifndef SDL_memcpy4 -#define SDL_memcpy4(dst, src, len) SDL_memcpy(dst, src, (len) << 2) -#endif - -#if defined(__GNUC__) && defined(i386) -#define SDL_revcpy(dst, src, len) \ -do { \ - int u0, u1, u2; \ - char *dstp = (char *)(dst); \ - char *srcp = (char *)(src); \ - int n = (len); \ - if ( n >= 4 ) { \ - __asm__ __volatile__ ( \ - "std\n\t" \ - "rep ; movsl\n\t" \ - "cld\n\t" \ - : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ - : "0" (n >> 2), \ - "1" (dstp+(n-4)), "2" (srcp+(n-4)) \ - : "memory" ); \ - } \ - switch (n & 3) { \ - case 3: dstp[2] = srcp[2]; \ - case 2: dstp[1] = srcp[1]; \ - case 1: dstp[0] = srcp[0]; \ - break; \ - default: \ - break; \ - } \ -} while(0) -#endif -#ifndef SDL_revcpy -extern DECLSPEC void *SDLCALL SDL_revcpy(void *dst, const void *src, - size_t len); -#endif - -#ifdef HAVE_MEMMOVE -#define SDL_memmove memmove -#elif defined(HAVE_BCOPY) -#define SDL_memmove(d, s, n) bcopy((s), (d), (n)) -#else -#define SDL_memmove(dst, src, len) \ -do { \ - if ( dst < src ) { \ - SDL_memcpy(dst, src, len); \ - } else { \ - SDL_revcpy(dst, src, len); \ - } \ -} while(0) -#endif - -#ifdef HAVE_MEMCMP -#define SDL_memcmp memcmp -#else -extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, - size_t len); -#endif - -#ifdef HAVE_STRLEN -#define SDL_strlen strlen -#else -extern DECLSPEC size_t SDLCALL SDL_strlen(const char *string); -#endif - -#ifdef HAVE_WCSLEN -#define SDL_wcslen wcslen -#else -#if !defined(wchar_t) && defined(__NINTENDODS__) -#define wchar_t short /* TODO: figure out why libnds doesn't have this */ -#endif -extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t * string); -#endif - -#ifdef HAVE_STRLCPY -#define SDL_strlcpy strlcpy -#else -extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, - size_t maxlen); -#endif - -#ifdef HAVE_STRLCAT -#define SDL_strlcat strlcat -#else -extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, - size_t maxlen); -#endif - -#ifdef HAVE_STRDUP -#define SDL_strdup strdup -#else -extern DECLSPEC char *SDLCALL SDL_strdup(const char *string); -#endif - -#ifdef HAVE__STRREV -#define SDL_strrev _strrev -#else -extern DECLSPEC char *SDLCALL SDL_strrev(char *string); -#endif - -#ifdef HAVE__STRUPR -#define SDL_strupr _strupr -#else -extern DECLSPEC char *SDLCALL SDL_strupr(char *string); -#endif - -#ifdef HAVE__STRLWR -#define SDL_strlwr _strlwr -#else -extern DECLSPEC char *SDLCALL SDL_strlwr(char *string); -#endif - -#ifdef HAVE_STRCHR -#define SDL_strchr strchr -#elif defined(HAVE_INDEX) -#define SDL_strchr index -#else -extern DECLSPEC char *SDLCALL SDL_strchr(const char *string, int c); -#endif - -#ifdef HAVE_STRRCHR -#define SDL_strrchr strrchr -#elif defined(HAVE_RINDEX) -#define SDL_strrchr rindex -#else -extern DECLSPEC char *SDLCALL SDL_strrchr(const char *string, int c); -#endif - -#ifdef HAVE_STRSTR -#define SDL_strstr strstr -#else -extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, - const char *needle); -#endif - -#ifdef HAVE_ITOA -#define SDL_itoa itoa -#else -#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix) -#endif - -#ifdef HAVE__LTOA -#define SDL_ltoa _ltoa -#else -extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *string, int radix); -#endif - -#ifdef HAVE__UITOA -#define SDL_uitoa _uitoa -#else -#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix) -#endif - -#ifdef HAVE__ULTOA -#define SDL_ultoa _ultoa -#else -extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *string, - int radix); -#endif - -#ifdef HAVE_STRTOL -#define SDL_strtol strtol -#else -extern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp, - int base); -#endif - -#ifdef HAVE_STRTOUL -#define SDL_strtoul strtoul -#else -extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string, - char **endp, int base); -#endif - -#ifdef SDL_HAS_64BIT_TYPE - -#ifdef HAVE__I64TOA -#define SDL_lltoa _i64toa -#else -extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *string, - int radix); -#endif - -#ifdef HAVE__UI64TOA -#define SDL_ulltoa _ui64toa -#else -extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *string, - int radix); -#endif - -#ifdef HAVE_STRTOLL -#define SDL_strtoll strtoll -#else -extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp, - int base); -#endif - -#ifdef HAVE_STRTOULL -#define SDL_strtoull strtoull -#else -extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp, - int base); -#endif - -#endif /* SDL_HAS_64BIT_TYPE */ - -#ifdef HAVE_STRTOD -#define SDL_strtod strtod -#else -extern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp); -#endif - -#ifdef HAVE_ATOI -#define SDL_atoi atoi -#else -#define SDL_atoi(X) SDL_strtol(X, NULL, 0) -#endif - -#ifdef HAVE_ATOF -#define SDL_atof atof -#else -#define SDL_atof(X) SDL_strtod(X, NULL) -#endif - -#ifdef HAVE_STRCMP -#define SDL_strcmp strcmp -#else -extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); -#endif - -#ifdef HAVE_STRNCMP -#define SDL_strncmp strncmp -#else -extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, - size_t maxlen); -#endif - -#ifdef HAVE_STRCASECMP -#define SDL_strcasecmp strcasecmp -#elif defined(HAVE__STRICMP) -#define SDL_strcasecmp _stricmp -#else -extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, - const char *str2); -#endif - -#ifdef HAVE_STRNCASECMP -#define SDL_strncasecmp strncasecmp -#elif defined(HAVE__STRNICMP) -#define SDL_strncasecmp _strnicmp -#else -extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, - const char *str2, size_t maxlen); -#endif - -#ifdef HAVE_SSCANF -#define SDL_sscanf sscanf -#else -extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, - ...); -#endif - -#ifdef HAVE_SNPRINTF -#define SDL_snprintf snprintf -#else -extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, - const char *fmt, ...); -#endif - -#ifdef HAVE_VSNPRINTF -#define SDL_vsnprintf vsnprintf -#else -extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, - const char *fmt, va_list ap); -#endif - -#ifndef M_PI -#define M_PI 3.14159265358979323846264338327950288 /* pi */ -#endif - -#ifdef HAVE_CEIL -#define SDL_ceil ceil -#else -#define SDL_ceil(x) ((double)(int)((x)+0.5)) -#endif - -#ifdef HAVE_COPYSIGN -#define SDL_copysign copysign -#else -extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); -#endif - -#ifdef HAVE_COS -#define SDL_cos cos -#else -extern DECLSPEC double SDLCALL SDL_cos(double x); -#endif - -#ifdef HAVE_COSF -#define SDL_cosf cosf -#else -#define SDL_cosf(x) (float)SDL_cos((double)x) -#endif - -#ifdef HAVE_FABS -#define SDL_fabs fabs -#else -extern DECLSPEC double SDLCALL SDL_fabs(double x); -#endif - -#ifdef HAVE_FLOOR -#define SDL_floor floor -#else -extern DECLSPEC double SDLCALL SDL_floor(double x); -#endif - -#ifdef HAVE_LOG -#define SDL_log log -#else -extern DECLSPEC double SDLCALL SDL_log(double x); -#endif - -#ifdef HAVE_POW -#define SDL_pow pow -#else -extern DECLSPEC double SDLCALL SDL_pow(double x, double y); -#endif - -#ifdef HAVE_SCALBN -#define SDL_scalbn scalbn -#else -extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); -#endif - -#ifdef HAVE_SIN -#define SDL_sin sin -#else -extern DECLSPEC double SDLCALL SDL_sin(double x); -#endif - -#ifdef HAVE_SINF -#define SDL_sinf sinf -#else -#define SDL_sinf(x) (float)SDL_sin((double)x) -#endif - -#ifdef HAVE_SQRT -#define SDL_sqrt sqrt -#else -extern DECLSPEC double SDLCALL SDL_sqrt(double x); -#endif - -/* The SDL implementation of iconv() returns these error codes */ -#define SDL_ICONV_ERROR (size_t)-1 -#define SDL_ICONV_E2BIG (size_t)-2 -#define SDL_ICONV_EILSEQ (size_t)-3 -#define SDL_ICONV_EINVAL (size_t)-4 - -#ifdef HAVE_ICONV -#define SDL_iconv_t iconv_t -#define SDL_iconv_open iconv_open -#define SDL_iconv_close iconv_close -#else -typedef struct _SDL_iconv_t *SDL_iconv_t; -extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, - const char *fromcode); -extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); -#endif -extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, - size_t * inbytesleft, char **outbuf, - size_t * outbytesleft); -/* This function converts a string between encodings in one pass, returning a - string that must be freed with SDL_free() or NULL on error. -*/ -extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, - const char *fromcode, - const char *inbuf, - size_t inbytesleft); -#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_stdinc_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_surface.h b/Externals/SDL/Include_1.3/SDL_surface.h deleted file mode 100644 index 3a4abba939..0000000000 --- a/Externals/SDL/Include_1.3/SDL_surface.h +++ /dev/null @@ -1,533 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_surface.h - * - * Header file for SDL_surface definition and management functions - */ - -#ifndef _SDL_surface_h -#define _SDL_surface_h - -#include "SDL_stdinc.h" -#include "SDL_pixels.h" -#include "SDL_rect.h" -#include "SDL_rwops.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* These are the currently supported flags for the SDL_surface */ -/* Used internally (read-only) */ -#define SDL_PREALLOC 0x00000001 /* Surface uses preallocated memory */ -#define SDL_RLEACCEL 0x00000002 /* Surface is RLE encoded */ - -/* Evaluates to true if the surface needs to be locked before access */ -#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) - -/** - * \struct SDL_Surface - * - * \brief A collection of pixels used in software blitting - * - * \note This structure should be treated as read-only, except for 'pixels', - * which, if not NULL, contains the raw pixel data for the surface. - */ -typedef struct SDL_Surface -{ - Uint32 flags; /**< Read-only */ - SDL_PixelFormat *format; /**< Read-only */ - int w, h; /**< Read-only */ - int pitch; /**< Read-only */ - void *pixels; /**< Read-write */ - - /* Application data associated with the surfade */ - void *userdata; /**< Read-write */ - - /* information needed for surfaces requiring locks */ - int locked; /**< Read-only */ - void *lock_data; /**< Read-only */ - - /* clipping information */ - SDL_Rect clip_rect; /**< Read-only */ - - /* info for fast blit mapping to other surfaces */ - struct SDL_BlitMap *map; /**< Private */ - - /* format version, bumped at every change to invalidate blit maps */ - unsigned int format_version; /**< Private */ - - /* Reference count -- used when freeing surface */ - int refcount; /**< Read-mostly */ -} SDL_Surface; - -/** - * \typedef SDL_blit - * - * \brief The type of function used for surface blitting functions - */ -typedef int (*SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, - struct SDL_Surface * dst, SDL_Rect * dstrect); - -/* - * Allocate and free an RGB surface (must be called after SDL_SetVideoMode) - * If the depth is 4 or 8 bits, an empty palette is allocated for the surface. - * If the depth is greater than 8 bits, the pixel format is set using the - * flags '[RGB]mask'. - * If the function runs out of memory, it will return NULL. - * - * The 'flags' are obsolete and should be set to 0. - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface - (Uint32 flags, int width, int height, int depth, - Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); -extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, - int width, - int height, - int depth, - int pitch, - Uint32 Rmask, - Uint32 Gmask, - Uint32 Bmask, - Uint32 Amask); -extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); - -/** - * \fn int SDL_SetSurfacePalette(SDL_Surface *surface, SDL_Palette *palette) - * - * \brief Set the palette used by a surface. - * - * \return 0, or -1 if the surface format doesn't use a palette. - * - * \note A single palette can be shared with many surfaces. - */ -extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, - SDL_Palette * palette); - -/* - * SDL_LockSurface() sets up a surface for directly accessing the pixels. - * Between calls to SDL_LockSurface()/SDL_UnlockSurface(), you can write - * to and read from 'surface->pixels', using the pixel format stored in - * 'surface->format'. Once you are done accessing the surface, you should - * use SDL_UnlockSurface() to release it. - * - * Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates - * to 0, then you can read and write to the surface at any time, and the - * pixel format of the surface will not change. - * - * No operating system or library calls should be made between lock/unlock - * pairs, as critical system locks may be held during this time. - * - * SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked. - */ -extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); -extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); - -/* - * Load a surface from a seekable SDL data source (memory or file.) - * If 'freesrc' is non-zero, the source will be closed after being read. - * Returns the new surface, or NULL if there was an error. - * The new surface should be freed with SDL_FreeSurface(). - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, - int freesrc); - -/* Convenience macro -- load a surface from a file */ -#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) - -/* - * Save a surface to a seekable SDL data source (memory or file.) - * If 'freedst' is non-zero, the source will be closed after being written. - * Returns 0 if successful or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SaveBMP_RW - (SDL_Surface * surface, SDL_RWops * dst, int freedst); - -/* Convenience macro -- save a surface to a file */ -#define SDL_SaveBMP(surface, file) \ - SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) - -/* - * \fn int SDL_SetSurfaceRLE(SDL_Surface *surface, int flag) - * - * \brief Sets the RLE acceleration hint for a surface. - * - * \return 0 on success, or -1 if the surface is not valid - * - * \note If RLE is enabled, colorkey and alpha blending blits are much faster, - * but the surface must be locked before directly accessing the pixels. - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, - int flag); - -/* - * \fn int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key) - * - * \brief Sets the color key (transparent pixel) in a blittable surface. - * - * \param surface The surface to update - * \param flag Non-zero to enable colorkey and 0 to disable colorkey - * \param key The transparent pixel in the native surface format - * - * \return 0 on success, or -1 if the surface is not valid - */ -extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, - Uint32 flag, Uint32 key); - -/** - * \fn int SDL_SetSurfaceColorMod(SDL_Surface *surface, Uint8 r, Uint8 g, Uint8 b) - * - * \brief Set an additional color value used in blit operations - * - * \param surface The surface to update - * \param r The red source color value multiplied into blit operations - * \param g The green source color value multiplied into blit operations - * \param b The blue source color value multiplied into blit operations - * - * \return 0 on success, or -1 if the surface is not valid - * - * \sa SDL_GetSurfaceColorMod() - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, - Uint8 r, Uint8 g, Uint8 b); - - -/** - * \fn int SDL_GetSurfaceColorMod(SDL_Surface *surface, Uint8 *r, Uint8 *g, Uint8 *b) - * - * \brief Get the additional color value used in blit operations - * - * \param surface The surface to query - * \param r A pointer filled in with the source red color value - * \param g A pointer filled in with the source green color value - * \param b A pointer filled in with the source blue color value - * - * \return 0 on success, or -1 if the surface is not valid - * - * \sa SDL_SetSurfaceColorMod() - */ -extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, - Uint8 * r, Uint8 * g, - Uint8 * b); - -/** - * \fn int SDL_SetSurfaceAlphaMod(SDL_Surface *surface, Uint8 alpha) - * - * \brief Set an additional alpha value used in blit operations - * - * \param surface The surface to update - * \param alpha The source alpha value multiplied into blit operations. - * - * \return 0 on success, or -1 if the surface is not valid - * - * \sa SDL_GetSurfaceAlphaMod() - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, - Uint8 alpha); - -/** - * \fn int SDL_GetSurfaceAlphaMod(SDL_Surface *surface, Uint8 *alpha) - * - * \brief Get the additional alpha value used in blit operations - * - * \param surface The surface to query - * \param alpha A pointer filled in with the source alpha value - * - * \return 0 on success, or -1 if the surface is not valid - * - * \sa SDL_SetSurfaceAlphaMod() - */ -extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, - Uint8 * alpha); - -/** - * \fn int SDL_SetSurfaceBlendMode(SDL_Surface *surface, int blendMode) - * - * \brief Set the blend mode used for blit operations - * - * \param surface The surface to update - * \param blendMode SDL_TextureBlendMode to use for blit blending - * - * \return 0 on success, or -1 if the parameters are not valid - * - * \sa SDL_GetSurfaceBlendMode() - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, - int blendMode); - -/** - * \fn int SDL_GetSurfaceBlendMode(SDL_Surface *surface, int *blendMode) - * - * \brief Get the blend mode used for blit operations - * - * \param surface The surface to query - * \param blendMode A pointer filled in with the current blend mode - * - * \return 0 on success, or -1 if the surface is not valid - * - * \sa SDL_SetSurfaceBlendMode() - */ -extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, - int *blendMode); - -/** - * \fn int SDL_SetSurfaceScaleMode(SDL_Surface *surface, int scaleMode) - * - * \brief Set the scale mode used for blit operations - * - * \param surface The surface to update - * \param scaleMode SDL_TextureScaleMode to use for blit scaling - * - * \return 0 on success, or -1 if the surface is not valid or the scale mode is not supported - * - * \note If the scale mode is not supported, the closest supported mode is chosen. Currently only SDL_TEXTURESCALEMODE_FAST is supported on surfaces. - * - * \sa SDL_GetSurfaceScaleMode() - */ -extern DECLSPEC int SDLCALL SDL_SetSurfaceScaleMode(SDL_Surface * surface, - int scaleMode); - -/** - * \fn int SDL_GetSurfaceScaleMode(SDL_Surface *surface, int *scaleMode) - * - * \brief Get the scale mode used for blit operations - * - * \param surface The surface to query - * \param scaleMode A pointer filled in with the current scale mode - * - * \return 0 on success, or -1 if the surface is not valid - * - * \sa SDL_SetSurfaceScaleMode() - */ -extern DECLSPEC int SDLCALL SDL_GetSurfaceScaleMode(SDL_Surface * surface, - int *scaleMode); - -/* - * Sets the clipping rectangle for the destination surface in a blit. - * - * If the clip rectangle is NULL, clipping will be disabled. - * If the clip rectangle doesn't intersect the surface, the function will - * return SDL_FALSE and blits will be completely clipped. Otherwise the - * function returns SDL_TRUE and blits to the surface will be clipped to - * the intersection of the surface area and the clipping rectangle. - * - * Note that blits are automatically clipped to the edges of the source - * and destination surfaces. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, - const SDL_Rect * rect); - -/* - * Gets the clipping rectangle for the destination surface in a blit. - * 'rect' must be a pointer to a valid rectangle which will be filled - * with the correct values. - */ -extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, - SDL_Rect * rect); - -/* - * Creates a new surface of the specified format, and then copies and maps - * the given surface to it so the blit of the converted surface will be as - * fast as possible. If this function fails, it returns NULL. - * - * The 'flags' parameter is passed to SDL_CreateRGBSurface() and has those - * semantics. You can also pass SDL_RLEACCEL in the flags parameter and - * SDL will try to RLE accelerate colorkey and alpha blits in the resulting - * surface. - * - * This function is used internally by SDL_DisplayFormat(). - */ -extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface - (SDL_Surface * src, SDL_PixelFormat * fmt, Uint32 flags); - -/* - * This function draws a point with 'color' - * The color should be a pixel of the format used by the surface, and - * can be generated by the SDL_MapRGB() function. - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_DrawPoint - (SDL_Surface * dst, int x, int y, Uint32 color); - -/* - * This function blends a point with an RGBA value - * The color should be a pixel of the format used by the surface, and - * can be generated by the SDL_MapRGB() function. - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_BlendPoint - (SDL_Surface * dst, int x, int y, int blendMode, - Uint8 r, Uint8 g, Uint8 b, Uint8 a); - -/* - * This function draws a line with 'color' - * The color should be a pixel of the format used by the surface, and - * can be generated by the SDL_MapRGB() function. - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_DrawLine - (SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color); - -/* - * This function blends an RGBA value along a line - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_BlendLine - (SDL_Surface * dst, int x1, int y1, int x2, int y2, int blendMode, - Uint8 r, Uint8 g, Uint8 b, Uint8 a); - -/* - * This function performs a fast fill of the given rectangle with 'color' - * The given rectangle is clipped to the destination surface clip area - * and the final fill rectangle is saved in the passed in pointer. - * If 'dstrect' is NULL, the whole surface will be filled with 'color' - * The color should be a pixel of the format used by the surface, and - * can be generated by the SDL_MapRGB() function. - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_FillRect - (SDL_Surface * dst, SDL_Rect * dstrect, Uint32 color); - -/* - * This function blends an RGBA value into the given rectangle. - * The given rectangle is clipped to the destination surface clip area - * and the final fill rectangle is saved in the passed in pointer. - * If 'dstrect' is NULL, the whole surface will be filled with 'color' - * This function returns 0 on success, or -1 on error. - */ -extern DECLSPEC int SDLCALL SDL_BlendRect - (SDL_Surface * dst, SDL_Rect * dstrect, int blendMode, Uint8 r, Uint8 g, - Uint8 b, Uint8 a); - -/* - * This performs a fast blit from the source surface to the destination - * surface. It assumes that the source and destination rectangles are - * the same size. If either 'srcrect' or 'dstrect' are NULL, the entire - * surface (src or dst) is copied. The final blit rectangles are saved - * in 'srcrect' and 'dstrect' after all clipping is performed. - * If the blit is successful, it returns 0, otherwise it returns -1. - * - * The blit function should not be called on a locked surface. - * - * The blit semantics for surfaces with and without alpha and colorkey - * are defined as follows: - * - * RGBA->RGB: - * SDL_SRCALPHA set: - * alpha-blend (using alpha-channel). - * SDL_SRCCOLORKEY ignored. - * SDL_SRCALPHA not set: - * copy RGB. - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * RGB values of the source colour key, ignoring alpha in the - * comparison. - * - * RGB->RGBA: - * SDL_SRCALPHA set: - * alpha-blend (using the source per-surface alpha value); - * set destination alpha to opaque. - * SDL_SRCALPHA not set: - * copy RGB, set destination alpha to source per-surface alpha value. - * both: - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * source colour key. - * - * RGBA->RGBA: - * SDL_SRCALPHA set: - * alpha-blend (using the source alpha channel) the RGB values; - * leave destination alpha untouched. [Note: is this correct?] - * SDL_SRCCOLORKEY ignored. - * SDL_SRCALPHA not set: - * copy all of RGBA to the destination. - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * RGB values of the source colour key, ignoring alpha in the - * comparison. - * - * RGB->RGB: - * SDL_SRCALPHA set: - * alpha-blend (using the source per-surface alpha value). - * SDL_SRCALPHA not set: - * copy RGB. - * both: - * if SDL_SRCCOLORKEY set, only copy the pixels matching the - * source colour key. - * - * If either of the surfaces were in video memory, and the blit returns -2, - * the video memory was lost, so it should be reloaded with artwork and - * re-blitted: - while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) { - while ( SDL_LockSurface(image) < 0 ) - Sleep(10); - -- Write image pixels to image->pixels -- - SDL_UnlockSurface(image); - } - * This happens under DirectX 5.0 when the system switches away from your - * fullscreen application. The lock will also fail until you have access - * to the video memory again. - */ -/* You should call SDL_BlitSurface() unless you know exactly how SDL - blitting works internally and how to use the other blit functions. -*/ -#define SDL_BlitSurface SDL_UpperBlit - -/* This is the public blit function, SDL_BlitSurface(), and it performs - rectangle validation and clipping before passing it to SDL_LowerBlit() -*/ -extern DECLSPEC int SDLCALL SDL_UpperBlit - (SDL_Surface * src, SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect); -/* This is a semi-private blit function and it performs low-level surface - blitting only. -*/ -extern DECLSPEC int SDLCALL SDL_LowerBlit - (SDL_Surface * src, SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect); - -/** - * \fn int SDL_SoftStretch(SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, const SDL_Rect * dstrect) - * - * \brief Perform a fast, low quality, stretch blit between two surfaces of the same pixel format. - * - * \note This function uses a static buffer, and is not thread-safe. - */ -extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, - const SDL_Rect * srcrect, - SDL_Surface * dst, - const SDL_Rect * dstrect); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_surface_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_syswm.h b/Externals/SDL/Include_1.3/SDL_syswm.h deleted file mode 100644 index 483118cf86..0000000000 --- a/Externals/SDL/Include_1.3/SDL_syswm.h +++ /dev/null @@ -1,244 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_syswm.h - * - * Include file for SDL custom system window manager hooks - */ - -#ifndef _SDL_syswm_h -#define _SDL_syswm_h - -#include "SDL_stdinc.h" -#include "SDL_error.h" -#include "SDL_video.h" -#include "SDL_version.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* Your application has access to a special type of event 'SDL_SYSWMEVENT', - which contains window-manager specific information and arrives whenever - an unhandled window event occurs. This event is ignored by default, but - you can enable it with SDL_EventState() -*/ -#ifdef SDL_PROTOTYPES_ONLY -struct SDL_SysWMinfo; -#else - -/* This is the structure for custom window manager events */ -#if defined(SDL_VIDEO_DRIVER_X11) -#if defined(__APPLE__) && defined(__MACH__) -/* conflicts with Quickdraw.h */ -#define Cursor X11Cursor -#endif - -#include -#include - -#if defined(__APPLE__) && defined(__MACH__) -/* matches the re-define above */ -#undef Cursor -#endif - -/* These are the various supported subsystems under UNIX */ -typedef enum -{ - SDL_SYSWM_X11 -} SDL_SYSWM_TYPE; - -/* The UNIX custom event structure */ -struct SDL_SysWMmsg -{ - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union - { - XEvent xevent; - } event; -}; - -/* The UNIX custom window manager information structure. - When this structure is returned, it holds information about which - low level system it is using, and will be one of SDL_SYSWM_TYPE. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - SDL_SYSWM_TYPE subsystem; - union - { - struct - { - Display *display; /* The X11 display */ - Window window; /* The X11 display window */ - /* These locking functions should be called around - any X11 functions using the display variable. - They lock the event thread, so should not be - called around event functions or from event filters. - */ - void (*lock_func) (void); - void (*unlock_func) (void); - - /* Introduced in SDL 1.0.2 */ - Window fswindow; /* The X11 fullscreen window */ - Window wmwindow; /* The X11 managed input window */ - } x11; - } info; -}; - -#elif defined(SDL_VIDEO_DRIVER_NANOX) -#include - -/* The generic custom event structure */ -struct SDL_SysWMmsg -{ - SDL_version version; - int data; -}; - -/* The windows custom window manager information structure */ -struct SDL_SysWMinfo -{ - SDL_version version; - GR_WINDOW_ID window; /* The display window */ -}; - -#elif defined(SDL_VIDEO_DRIVER_WIN32) -#define WIN32_LEAN_AND_MEAN -#include - -/* The windows custom event structure */ -struct SDL_SysWMmsg -{ - SDL_version version; - HWND hwnd; /* The window for the message */ - UINT msg; /* The type of message */ - WPARAM wParam; /* WORD message parameter */ - LPARAM lParam; /* LONG message parameter */ -}; - -/* The windows custom window manager information structure */ -struct SDL_SysWMinfo -{ - SDL_version version; - HWND window; /* The Win32 display window */ -}; - -#elif defined(SDL_VIDEO_DRIVER_RISCOS) - -/* RISC OS custom event structure */ -struct SDL_SysWMmsg -{ - SDL_version version; - int eventCode; /* The window for the message */ - int pollBlock[64]; -}; - -/* The RISC OS custom window manager information structure */ -struct SDL_SysWMinfo -{ - SDL_version version; - int wimpVersion; /* Wimp version running under */ - int taskHandle; /* The RISC OS task handle */ - int window; /* The RISC OS display window */ -}; - -#elif defined(SDL_VIDEO_DRIVER_PHOTON) -#include -#include - -/* The QNX custom event structure */ -struct SDL_SysWMmsg -{ - SDL_version version; - int data; -}; - -/* The QNX custom window manager information structure */ -struct SDL_SysWMinfo -{ - SDL_version version; - int data; -}; - -#else - -/* The generic custom event structure */ -struct SDL_SysWMmsg -{ - SDL_version version; - int data; -}; - -/* The generic custom window manager information structure */ -struct SDL_SysWMinfo -{ - SDL_version version; - int data; -}; - -#endif /* video driver type */ - -#endif /* SDL_PROTOTYPES_ONLY */ - -typedef struct SDL_SysWMinfo SDL_SysWMinfo; - -/* Function prototypes */ -/** - * \fn SDL_bool SDL_GetWindowWMInfo (SDL_WindowID windowID, SDL_SysWMinfo * info) - * - * \brief This function allows access to driver-dependent window information. - * - * \param windowID The window about which information is being requested - * \param info This structure must be initialized with the SDL version, and is then filled in with information about the given window. - * - * \return SDL_TRUE if the function is implemented and the version member of the 'info' struct is valid, SDL_FALSE otherwise. - * - * You typically use this function like this: - * \code - * SDL_SysWMInfo info; - * SDL_VERSION(&info.version); - * if ( SDL_GetWindowWMInfo(&info) ) { ... } - * \endcode - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_WindowID windowID, - SDL_SysWMinfo * info); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_syswm_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_thread.h b/Externals/SDL/Include_1.3/SDL_thread.h deleted file mode 100644 index 1a8b13f2e8..0000000000 --- a/Externals/SDL/Include_1.3/SDL_thread.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_thread_h -#define _SDL_thread_h - -/** - * \file SDL_thread.h - * - * Header for the SDL thread management routines - */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -/* Thread synchronization primitives */ -#include "SDL_mutex.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* The SDL thread structure, defined in SDL_thread.c */ -struct SDL_Thread; -typedef struct SDL_Thread SDL_Thread; - -/* Create a thread */ -#if (defined(__WIN32__) && !defined(HAVE_LIBC)) || defined(__OS2__) -/* - We compile SDL into a DLL on OS/2. This means, that it's the DLL which - creates a new thread for the calling process with the SDL_CreateThread() - API. There is a problem with this, that only the RTL of the SDL.DLL will - be initialized for those threads, and not the RTL of the calling application! - To solve this, we make a little hack here. - We'll always use the caller's _beginthread() and _endthread() APIs to - start a new thread. This way, if it's the SDL.DLL which uses this API, - then the RTL of SDL.DLL will be used to create the new thread, and if it's - the application, then the RTL of the application will be used. - So, in short: - Always use the _beginthread() and _endthread() of the calling runtime library! -*/ -#define SDL_PASSED_BEGINTHREAD_ENDTHREAD -#ifndef _WIN32_WCE -#include /* This has _beginthread() and _endthread() defined! */ -#endif - -#ifdef __OS2__ -typedef int (*pfnSDL_CurrentBeginThread) (void (*func) (void *), void *, - unsigned, void *arg); -typedef void (*pfnSDL_CurrentEndThread) (void); -#elif __GNUC__ -typedef unsigned long (__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned - (__stdcall * - func) (void *), - void *arg, - unsigned, - unsigned - *threadID); -typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); -#else -typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, - unsigned (__stdcall * - func) (void - *), - void *arg, unsigned, - unsigned *threadID); -typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); -#endif - -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThread(int (SDLCALL * f) (void *), void *data, - pfnSDL_CurrentBeginThread pfnBeginThread, - pfnSDL_CurrentEndThread pfnEndThread); - -#ifdef __OS2__ -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthread, _endthread) -#elif defined(_WIN32_WCE) -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, NULL, NULL) -#else -#define SDL_CreateThread(fn, data) SDL_CreateThread(fn, data, _beginthreadex, _endthreadex) -#endif -#else -extern DECLSPEC SDL_Thread *SDLCALL -SDL_CreateThread(int (SDLCALL * fn) (void *), void *data); -#endif - -/* Get the 32-bit thread identifier for the current thread */ -extern DECLSPEC Uint32 SDLCALL SDL_ThreadID(void); - -/* Get the 32-bit thread identifier for the specified thread, - equivalent to SDL_ThreadID() if the specified thread is NULL. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetThreadID(SDL_Thread * thread); - -/* Wait for a thread to finish. - The return code for the thread function is placed in the area - pointed to by 'status', if 'status' is not NULL. - */ -extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); - -/* This function is here for binary compatibility with legacy apps, but - in SDL 1.3 and later, it's a no-op. You cannot forcibly kill a thread - in a safe manner on many platforms. You should instead find a way to - alert your thread that it is time to terminate, and then have it gracefully - exit on its own. Do not ever call this function! - */ -extern DECLSPEC void SDLCALL SDL_KillThread(SDL_Thread * thread); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_thread_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_timer.h b/Externals/SDL/Include_1.3/SDL_timer.h deleted file mode 100644 index 75901d7311..0000000000 --- a/Externals/SDL/Include_1.3/SDL_timer.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -#ifndef _SDL_timer_h -#define _SDL_timer_h - -/** - * \file SDL_timer.h - * - * Header for the SDL time management routines - */ - -#include "SDL_stdinc.h" -#include "SDL_error.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/* This is the OS scheduler timeslice, in milliseconds */ -#define SDL_TIMESLICE 10 - -/* This is the maximum resolution of the SDL timer on all platforms */ -#define TIMER_RESOLUTION 10 /* Experimentally determined */ - -/* Get the number of milliseconds since the SDL library initialization. - * Note that this value wraps if the program runs for more than ~49 days. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); - -/* Wait a specified number of milliseconds before returning */ -extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); - -/* Function prototype for the timer callback function */ -typedef Uint32(SDLCALL * SDL_TimerCallback) (Uint32 interval); - -/* Set a callback to run after the specified number of milliseconds has - * elapsed. The callback function is passed the current timer interval - * and returns the next timer interval. If the returned value is the - * same as the one passed in, the periodic alarm continues, otherwise a - * new alarm is scheduled. If the callback returns 0, the periodic alarm - * is cancelled. - * - * To cancel a currently running timer, call SDL_SetTimer(0, NULL); - * - * The timer callback function may run in a different thread than your - * main code, and so shouldn't call any functions from within itself. - * - * The maximum resolution of this timer is 10 ms, which means that if - * you request a 16 ms timer, your callback will run approximately 20 ms - * later on an unloaded system. If you wanted to set a flag signaling - * a frame update at 30 frames per second (every 33 ms), you might set a - * timer for 30 ms: - * SDL_SetTimer((33/10)*10, flag_update); - * - * If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). - * - * Under UNIX, you should not use raise or use SIGALRM and this function - * in the same program, as it is implemented using setitimer(). You also - * should not use this function in multi-threaded applications as signals - * to multi-threaded apps have undefined behavior in some implementations. - * - * This function returns 0 if successful, or -1 if there was an error. - */ -extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, - SDL_TimerCallback callback); - -/* New timer API, supports multiple timers - * Written by Stephane Peter - */ - -/* Function prototype for the new timer callback function. - * The callback function is passed the current timer interval and returns - * the next timer interval. If the returned value is the same as the one - * passed in, the periodic alarm continues, otherwise a new alarm is - * scheduled. If the callback returns 0, the periodic alarm is cancelled. - */ -typedef Uint32(SDLCALL * SDL_NewTimerCallback) (Uint32 interval, void *param); - -/* Definition of the timer ID type */ -typedef struct _SDL_TimerID *SDL_TimerID; - -/* Add a new timer to the pool of timers already running. - Returns a timer ID, or NULL when an error occurs. - */ -extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, - SDL_NewTimerCallback - callback, void *param); - -/* Remove one of the multiple timers knowing its ID. - * Returns a boolean value indicating success. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID t); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_timer_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_types.h b/Externals/SDL/Include_1.3/SDL_types.h deleted file mode 100644 index 942732d0a0..0000000000 --- a/Externals/SDL/Include_1.3/SDL_types.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* DEPRECATED */ -#include "SDL_stdinc.h" diff --git a/Externals/SDL/Include_1.3/SDL_version.h b/Externals/SDL/Include_1.3/SDL_version.h deleted file mode 100644 index 702386ba4a..0000000000 --- a/Externals/SDL/Include_1.3/SDL_version.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_version.h - * - * This header defines the current SDL version - */ - -#ifndef _SDL_version_h -#define _SDL_version_h - -#include "SDL_stdinc.h" -#include "SDL_revision.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/** - * \struct SDL_version - * \brief Information the version of SDL in use. - * - * Represents the library's version as three levels: major revision - * (increments with massive changes, additions, and enhancements), - * minor revision (increments with backwards-compatible changes to the - * major revision), and patchlevel (increments with fixes to the minor - * revision). - * - * \sa SDL_VERSION - * \sa SDL_GetVersion - */ -typedef struct SDL_version -{ - Uint8 major; /**< major version */ - Uint8 minor; /**< minor version */ - Uint8 patch; /**< update version */ -} SDL_version; - -/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL -*/ -#define SDL_MAJOR_VERSION 1 -#define SDL_MINOR_VERSION 3 -#define SDL_PATCHLEVEL 0 - -/** - * \def SDL_VERSION(x) - * \brief Macro to determine SDL version program was compiled against. - * - * This macro fills in a SDL_version structure with the version of the - * library you compiled against. This is determined by what header the - * compiler uses. Note that if you dynamically linked the library, you might - * have a slightly newer or older version at runtime. That version can be - * determined with SDL_GetVersion(), which, unlike SDL_VERSION, - * is not a macro. - * - * \param x A pointer to a SDL_version struct to initialize. - * - * \sa SDL_version - * \sa SDL_GetVersion - */ -#define SDL_VERSION(x) \ -{ \ - (x)->major = SDL_MAJOR_VERSION; \ - (x)->minor = SDL_MINOR_VERSION; \ - (x)->patch = SDL_PATCHLEVEL; \ -} - -/* This macro turns the version numbers into a numeric value: - (1,2,3) -> (1203) - This assumes that there will never be more than 100 patchlevels -*/ -#define SDL_VERSIONNUM(X, Y, Z) \ - ((X)*1000 + (Y)*100 + (Z)) - -/* This is the version number macro for the current SDL version */ -#define SDL_COMPILEDVERSION \ - SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) - -/* This macro will evaluate to true if compiled with SDL at least X.Y.Z */ -#define SDL_VERSION_ATLEAST(X, Y, Z) \ - (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) - -/** - * \fn void SDL_GetVersion(SDL_version *ver) - * \brief Get the version of SDL that is linked against your program. - * - * If you are using a shared library (DLL) version of SDL, then it is - * possible that it will be different than the version you compiled against. - * - * This is a real function; the macro SDL_VERSION tells you what version - * of SDL you compiled against: - * - * \code - * SDL_version compiled; - * SDL_version linked; - * - * SDL_VERSION(&compiled); - * SDL_GetVersion(&linked); - * printf("We compiled against SDL version %d.%d.%d ...\n", - * compiled.major, compiled.minor, compiled.patch); - * printf("But we linked against SDL version %d.%d.%d.\n", - * linked.major, linked.minor, linked.patch); - * \endcode - * - * This function may be called safely at any time, even before SDL_Init(). - * - * \sa SDL_VERSION - */ -extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); - -/** - * \fn int SDL_GetRevision(void) - * \brief Get the code revision of SDL that is linked against your program. - */ -extern DECLSPEC int SDLCALL SDL_GetRevision(void); - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_version_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_video.h b/Externals/SDL/Include_1.3/SDL_video.h deleted file mode 100644 index 02aec68642..0000000000 --- a/Externals/SDL/Include_1.3/SDL_video.h +++ /dev/null @@ -1,1469 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/** - * \file SDL_video.h - * - * Header file for SDL video functions. - */ - -#ifndef _SDL_video_h -#define _SDL_video_h - -#include "SDL_stdinc.h" -#include "SDL_pixels.h" -#include "SDL_rect.h" -#include "SDL_surface.h" - -#include "begin_code.h" -/* Set up for C function definitions, even when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -extern "C" { -/* *INDENT-ON* */ -#endif - -/** - * \struct SDL_DisplayMode - * - * \brief The structure that defines a display mode - * - * \sa SDL_GetNumDisplayModes() - * \sa SDL_GetDisplayMode() - * \sa SDL_GetDesktopDisplayMode() - * \sa SDL_GetCurrentDisplayMode() - * \sa SDL_GetClosestDisplayMode() - * \sa SDL_SetDisplayMode() - */ -typedef struct -{ - Uint32 format; /**< pixel format */ - int w; /**< width */ - int h; /**< height */ - int refresh_rate; /**< refresh rate (or zero for unspecified) */ - void *driverdata; /**< driver-specific data, initialize to 0 */ -} SDL_DisplayMode; - -/** - * \typedef SDL_WindowID - * - * \brief The type used to identify a window - * - * \sa SDL_CreateWindow() - * \sa SDL_CreateWindowFrom() - * \sa SDL_DestroyWindow() - * \sa SDL_GetWindowData() - * \sa SDL_GetWindowFlags() - * \sa SDL_GetWindowGrab() - * \sa SDL_GetWindowPosition() - * \sa SDL_GetWindowSize() - * \sa SDL_GetWindowTitle() - * \sa SDL_HideWindow() - * \sa SDL_MaximizeWindow() - * \sa SDL_MinimizeWindow() - * \sa SDL_RaiseWindow() - * \sa SDL_RestoreWindow() - * \sa SDL_SetWindowData() - * \sa SDL_SetWindowFullscreen() - * \sa SDL_SetWindowGrab() - * \sa SDL_SetWindowIcon() - * \sa SDL_SetWindowPosition() - * \sa SDL_SetWindowSize() - * \sa SDL_SetWindowTitle() - * \sa SDL_ShowWindow() - */ -typedef Uint32 SDL_WindowID; - -/** - * \enum SDL_WindowFlags - * - * \brief The flags on a window - * - * \sa SDL_GetWindowFlags() - */ -typedef enum -{ - SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window, implies borderless */ - SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ - SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ - SDL_WINDOW_BORDERLESS = 0x00000008, /**< no window decoration */ - SDL_WINDOW_RESIZABLE = 0x00000010, /**< window can be resized */ - SDL_WINDOW_MINIMIZED = 0x00000020, /**< minimized */ - SDL_WINDOW_MAXIMIZED = 0x00000040, /**< maximized */ - SDL_WINDOW_INPUT_GRABBED = 0x00000100, /**< window has grabbed input focus */ - SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ - SDL_WINDOW_MOUSE_FOCUS = 0x00000400 /**< window has mouse focus */ -} SDL_WindowFlags; - -/** - * \def SDL_WINDOWPOS_UNDEFINED - * \brief Used to indicate that you don't care what the window position is. - */ -#define SDL_WINDOWPOS_UNDEFINED 0x7FFFFFF -/** - * \def SDL_WINDOWPOS_CENTERED - * \brief Used to indicate that the window position should be centered. - */ -#define SDL_WINDOWPOS_CENTERED 0x7FFFFFE - -/** - * \enum SDL_WindowEventID - * - * \brief Event subtype for window events - */ -typedef enum -{ - SDL_WINDOWEVENT_NONE, /**< Never used */ - SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ - SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ - SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be redrawn */ - SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1,data2 */ - SDL_WINDOWEVENT_RESIZED, /**< Window size changed to data1xdata2 */ - SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ - SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ - SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size and position */ - SDL_WINDOWEVENT_ENTER, /**< The window has gained mouse focus */ - SDL_WINDOWEVENT_LEAVE, /**< The window has lost mouse focus */ - SDL_WINDOWEVENT_FOCUS_GAINED, /**< The window has gained keyboard focus */ - SDL_WINDOWEVENT_FOCUS_LOST, /**< The window has lost keyboard focus */ - SDL_WINDOWEVENT_CLOSE /**< The window manager requests that the window be closed */ -} SDL_WindowEventID; - -/** - * \enum SDL_RendererFlags - * - * \brief Flags used when creating a rendering context - */ -typedef enum -{ - SDL_RENDERER_SINGLEBUFFER = 0x00000001, /**< Render directly to the window, if possible */ - SDL_RENDERER_PRESENTCOPY = 0x00000002, /**< Present uses a copy from back buffer to the front buffer */ - SDL_RENDERER_PRESENTFLIP2 = 0x00000004, /**< Present uses a flip, swapping back buffer and front buffer */ - SDL_RENDERER_PRESENTFLIP3 = 0x00000008, /**< Present uses a flip, rotating between two back buffers and a front buffer */ - SDL_RENDERER_PRESENTDISCARD = 0x00000010, /**< Present leaves the contents of the backbuffer undefined */ - SDL_RENDERER_PRESENTVSYNC = 0x00000020, /**< Present is synchronized with the refresh rate */ - SDL_RENDERER_ACCELERATED = 0x00000040 /**< The renderer uses hardware acceleration */ -} SDL_RendererFlags; - -/** - * \struct SDL_RendererInfo - * - * \brief Information on the capabilities of a render driver or context - */ -typedef struct SDL_RendererInfo -{ - const char *name; /**< The name of the renderer */ - Uint32 flags; /**< Supported SDL_RendererFlags */ - Uint32 mod_modes; /**< A mask of supported channel modulation */ - Uint32 blend_modes; /**< A mask of supported blend modes */ - Uint32 scale_modes; /**< A mask of supported scale modes */ - Uint32 num_texture_formats; /**< The number of available texture formats */ - Uint32 texture_formats[20]; /**< The available texture formats */ - int max_texture_width; /**< The maximimum texture width */ - int max_texture_height; /**< The maximimum texture height */ -} SDL_RendererInfo; - -/** - * \enum SDL_TextureAccess - * - * \brief The access pattern allowed for a texture - */ -typedef enum -{ - SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ - SDL_TEXTUREACCESS_STREAMING /**< Changes frequently, lockable */ -} SDL_TextureAccess; - -/** - * \enum SDL_TextureModulate - * - * \brief The texture channel modulation used in SDL_RenderCopy() - */ -typedef enum -{ - SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ - SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ - SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ -} SDL_TextureModulate; - -/** - * \enum SDL_BlendMode - * - * \brief The blend mode used in SDL_RenderCopy() and drawing operations - */ -typedef enum -{ - SDL_BLENDMODE_NONE = 0x00000000, /**< No blending */ - SDL_BLENDMODE_MASK = 0x00000001, /**< dst = A ? src : dst (alpha is mask) */ - SDL_BLENDMODE_BLEND = 0x00000002, /**< dst = (src * A) + (dst * (1-A)) */ - SDL_BLENDMODE_ADD = 0x00000004, /**< dst = (src * A) + dst */ - SDL_BLENDMODE_MOD = 0x00000008 /**< dst = src * dst */ -} SDL_BlendMode; - -/** - * \enum SDL_TextureScaleMode - * - * \brief The texture scale mode used in SDL_RenderCopy() - */ -typedef enum -{ - SDL_TEXTURESCALEMODE_NONE = 0x00000000, /**< No scaling, rectangles must match dimensions */ - SDL_TEXTURESCALEMODE_FAST = 0x00000001, /**< Point sampling or equivalent algorithm */ - SDL_TEXTURESCALEMODE_SLOW = 0x00000002, /**< Linear filtering or equivalent algorithm */ - SDL_TEXTURESCALEMODE_BEST = 0x00000004 /**< Bicubic filtering or equivalent algorithm */ -} SDL_TextureScaleMode; - -/** - * \typedef SDL_TextureID - * - * \brief An efficient driver-specific representation of pixel data - */ -typedef Uint32 SDL_TextureID; - -/** - * \typedef SDL_GLContext - * - * \brief An opaque handle to an OpenGL context. - */ -typedef void *SDL_GLContext; - -/** - * \enum SDL_GLattr - * - * \brief OpenGL configuration attributes - */ -typedef enum -{ - SDL_GL_RED_SIZE, - SDL_GL_GREEN_SIZE, - SDL_GL_BLUE_SIZE, - SDL_GL_ALPHA_SIZE, - SDL_GL_BUFFER_SIZE, - SDL_GL_DOUBLEBUFFER, - SDL_GL_DEPTH_SIZE, - SDL_GL_STENCIL_SIZE, - SDL_GL_ACCUM_RED_SIZE, - SDL_GL_ACCUM_GREEN_SIZE, - SDL_GL_ACCUM_BLUE_SIZE, - SDL_GL_ACCUM_ALPHA_SIZE, - SDL_GL_STEREO, - SDL_GL_MULTISAMPLEBUFFERS, - SDL_GL_MULTISAMPLESAMPLES, - SDL_GL_ACCELERATED_VISUAL, - SDL_GL_RETAINED_BACKING -} SDL_GLattr; - - -/* Function prototypes */ - -/** - * \fn int SDL_GetNumVideoDrivers(void) - * - * \brief Get the number of video drivers compiled into SDL - * - * \sa SDL_GetVideoDriver() - */ -extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); - -/** - * \fn const char *SDL_GetVideoDriver(int index) - * - * \brief Get the name of a built in video driver. - * - * \note The video drivers are presented in the order in which they are - * normally checked during initialization. - * - * \sa SDL_GetNumVideoDrivers() - */ -extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); - -/** - * \fn int SDL_VideoInit(const char *driver_name, Uint32 flags) - * - * \brief Initialize the video subsystem, optionally specifying a video driver. - * - * \param driver_name Initialize a specific driver by name, or NULL for the default video driver. - * \param flags FIXME: Still needed? - * - * \return 0 on success, -1 on error - * - * This function initializes the video subsystem; setting up a connection - * to the window manager, etc, and determines the available display modes - * and pixel formats, but does not initialize a window or graphics mode. - * - * \sa SDL_VideoQuit() - */ -extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name, - Uint32 flags); - -/** - * \fn void SDL_VideoQuit(void) - * - * \brief Shuts down the video subsystem. - * - * This function closes all windows, and restores the original video mode. - * - * \sa SDL_VideoInit() - */ -extern DECLSPEC void SDLCALL SDL_VideoQuit(void); - -/** - * \fn const char *SDL_GetCurrentVideoDriver(void) - * - * \brief Returns the name of the currently initialized video driver. - * - * \return The name of the current video driver or NULL if no driver - * has been initialized - * - * \sa SDL_GetNumVideoDrivers() - * \sa SDL_GetVideoDriver() - */ -extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); - -/** - * \fn int SDL_GetNumVideoDisplays(void) - * - * \brief Returns the number of available video displays. - * - * \sa SDL_SelectVideoDisplay() - */ -extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); - -/** - * \fn int SDL_SelectVideoDisplay(int index) - * - * \brief Set the index of the currently selected display. - * - * \return 0 on success, or -1 if the index is out of range. - * - * \sa SDL_GetNumVideoDisplays() - * \sa SDL_GetCurrentVideoDisplay() - */ -extern DECLSPEC int SDLCALL SDL_SelectVideoDisplay(int index); - -/** - * \fn int SDL_GetCurrentVideoDisplay(void) - * - * \brief Get the index of the currently selected display. - * - * \return The index of the currently selected display. - * - * \sa SDL_GetNumVideoDisplays() - * \sa SDL_SelectVideoDisplay() - */ -extern DECLSPEC int SDLCALL SDL_GetCurrentVideoDisplay(void); - -/** - * \fn int SDL_GetNumDisplayModes(void) - * - * \brief Returns the number of available display modes for the current display. - * - * \sa SDL_GetDisplayMode() - */ -extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(void); - -/** - * \fn int SDL_GetDisplayMode(int index, SDL_DisplayMode *mode) - * - * \brief Fill in information about a specific display mode. - * - * \note The display modes are sorted in this priority: - * \li bits per pixel -> more colors to fewer colors - * \li width -> largest to smallest - * \li height -> largest to smallest - * \li refresh rate -> highest to lowest - * - * \sa SDL_GetNumDisplayModes() - */ -extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int index, - SDL_DisplayMode * mode); - -/** - * \fn int SDL_GetDesktopDisplayMode(SDL_DisplayMode *mode) - * - * \brief Fill in information about the desktop display mode for the current display. - */ -extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(SDL_DisplayMode * mode); - -/** - * \fn int SDL_GetCurrentDisplayMode(SDL_DisplayMode *mode) - * - * \brief Fill in information about the current display mode. - */ -extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(SDL_DisplayMode * mode); - -/** - * \fn SDL_DisplayMode *SDL_GetClosestDisplayMode(const SDL_DisplayMode *mode, SDL_DisplayMode *closest) - * - * \brief Get the closest match to the requested display mode. - * - * \param mode The desired display mode - * \param closest A pointer to a display mode to be filled in with the closest match of the available display modes. - * - * \return The passed in value 'closest', or NULL if no matching video mode was available. - * - * The available display modes are scanned, and 'closest' is filled in with the closest mode matching the requested mode and returned. The mode format and refresh_rate default to the desktop mode if they are 0. The modes are scanned with size being first priority, format being second priority, and finally checking the refresh_rate. If all the available modes are too small, then NULL is returned. - * - * \sa SDL_GetNumDisplayModes() - * \sa SDL_GetDisplayMode() - */ -extern DECLSPEC SDL_DisplayMode *SDLCALL SDL_GetClosestDisplayMode(const - SDL_DisplayMode - * mode, - SDL_DisplayMode - * closest); - -/** - * \fn int SDL_SetFullscreenDisplayMode(const SDL_DisplayMode *mode) - * - * \brief Set the display mode used when a fullscreen window is visible - * on the currently selected display. - * - * \param mode The mode to use, or NULL for the desktop mode. - * - * \return 0 on success, or -1 if setting the display mode failed. - * - * \sa SDL_SetWindowFullscreen() - */ -extern DECLSPEC int SDLCALL SDL_SetFullscreenDisplayMode(const SDL_DisplayMode - * mode); - -/** - * \fn int SDL_GetFullscreenDisplayMode(SDL_DisplayMode *mode) - * - * \brief Fill in information about the display mode used when a fullscreen - * window is visible on the currently selected display. - */ -extern DECLSPEC int SDLCALL SDL_GetFullscreenDisplayMode(SDL_DisplayMode * - mode); - -/** - * \fn int SDL_SetDisplayPalette(const SDL_Color *colors, int firstcolor, int ncolors) - * - * \brief Set the palette entries for indexed display modes. - * - * \return 0 on success, or -1 if the display mode isn't palettized or the colors couldn't be set. - */ -extern DECLSPEC int SDLCALL SDL_SetDisplayPalette(const SDL_Color * colors, - int firstcolor, - int ncolors); - -/** - * \fn int SDL_GetDisplayPalette(SDL_Color *colors, int firstcolor, int ncolors) - * - * \brief Gets the palette entries for indexed display modes. - * - * \return 0 on success, or -1 if the display mode isn't palettized - */ -extern DECLSPEC int SDLCALL SDL_GetDisplayPalette(SDL_Color * colors, - int firstcolor, - int ncolors); - -/** - * \fn int SDL_SetGamma(float red, float green, float blue) - * - * \brief Set the gamma correction for each of the color channels on the currently selected display. - * - * \return 0 on success, or -1 if setting the gamma isn't supported. - * - * \sa SDL_SetGammaRamp() - */ -extern DECLSPEC int SDLCALL SDL_SetGamma(float red, float green, float blue); - -/** - * \fn int SDL_SetGammaRamp(const Uint16 * red, const Uint16 * green, const Uint16 * blue) - * - * \brief Set the gamma ramp for the currently selected display. - * - * \param red The translation table for the red channel, or NULL - * \param green The translation table for the green channel, or NULL - * \param blue The translation table for the blue channel, or NULL - * - * \return 0 on success, or -1 if gamma ramps are unsupported. - * - * Set the gamma translation table for the red, green, and blue channels - * of the video hardware. Each table is an array of 256 16-bit quantities, - * representing a mapping between the input and output for that channel. - * The input is the index into the array, and the output is the 16-bit - * gamma value at that index, scaled to the output color precision. - * - * \sa SDL_GetGammaRamp() - */ -extern DECLSPEC int SDLCALL SDL_SetGammaRamp(const Uint16 * red, - const Uint16 * green, - const Uint16 * blue); - -/** - * \fn int SDL_GetGammaRamp(Uint16 * red, Uint16 * green, Uint16 * blue) - * - * \brief Get the gamma ramp for the currently selected display. - * - * \param red A pointer to a 256 element array of 16-bit quantities to hold the translation table for the red channel, or NULL. - * \param green A pointer to a 256 element array of 16-bit quantities to hold the translation table for the green channel, or NULL. - * \param blue A pointer to a 256 element array of 16-bit quantities to hold the translation table for the blue channel, or NULL. - * - * \return 0 on success, or -1 if gamma ramps are unsupported. - * - * \sa SDL_SetGammaRamp() - */ -extern DECLSPEC int SDLCALL SDL_GetGammaRamp(Uint16 * red, Uint16 * green, - Uint16 * blue); - - -/** - * \fn SDL_WindowID SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags) - * - * \brief Create a window with the specified position, dimensions, and flags. - * - * \param title The title of the window, in UTF-8 encoding - * \param x The x position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED - * \param y The y position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED - * \param w The width of the window - * \param h The height of the window - * \param flags The flags for the window, a mask of any of the following: SDL_WINDOW_FULLSCREEN, SDL_WINDOW_OPENGL, SDL_WINDOW_SHOWN, SDL_WINDOW_BORDERLESS, SDL_WINDOW_RESIZABLE, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_MINIMIZED, SDL_WINDOW_INPUT_GRABBED - * - * \return The id of the window created, or zero if window creation failed. - * - * \sa SDL_DestroyWindow() - */ -extern DECLSPEC SDL_WindowID SDLCALL SDL_CreateWindow(const char *title, - int x, int y, int w, - int h, Uint32 flags); - -/** - * \fn SDL_WindowID SDL_CreateWindowFrom(void *data) - * - * \brief Create an SDL window struct from an existing native window. - * - * \param data A pointer to driver-dependent window creation data - * - * \return The id of the window created, or zero if window creation failed. - * - * \warning This function is NOT SUPPORTED, use at your own risk! - * - * \sa SDL_DestroyWindow() - */ -extern DECLSPEC SDL_WindowID SDLCALL SDL_CreateWindowFrom(const void *data); - -/** - * \fn Uint32 SDL_GetWindowFlags(SDL_WindowID windowID) - * - * \brief Get the window flags. - */ -extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_WindowID windowID); - -/** - * \fn void SDL_SetWindowTitle(SDL_WindowID windowID, const char *title) - * - * \brief Set the title of the window, in UTF-8 format. - * - * \sa SDL_GetWindowTitle() - */ -extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_WindowID windowID, - const char *title); - -/** - * \fn const char *SDL_GetWindowTitle(SDL_WindowID windowID) - * - * \brief Get the title of the window, in UTF-8 format. - * - * \sa SDL_SetWindowTitle() - */ -extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_WindowID windowID); - -/** - * \fn void SDL_SetWindowIcon(SDL_WindowID windowID, SDL_Surface *icon) - * - * \brief Set the icon of the window. - * - * \param icon The icon for the window - */ -extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_WindowID windowID, - SDL_Surface * icon); - -/** - * \fn void SDL_SetWindowData(SDL_WindowID windowID, void *userdata) - * - * \brief Associate an arbitrary pointer with the window. - * - * \sa SDL_GetWindowData() - */ -extern DECLSPEC void SDLCALL SDL_SetWindowData(SDL_WindowID windowID, - void *userdata); - -/** - * \fn void *SDL_GetWindowData(SDL_WindowID windowID) - * - * \brief Retrieve the data pointer associated with the window. - * - * \sa SDL_SetWindowData() - */ -extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_WindowID windowID); - -/** - * \fn void SDL_SetWindowPosition(SDL_WindowID windowID, int x, int y) - * - * \brief Set the position of the window. - * - * \param windowID The window to reposition - * \param x The x coordinate of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED - * \param y The y coordinate of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED - * - * \note The window coordinate origin is the upper left of the display. - * - * \sa SDL_GetWindowPosition() - */ -extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_WindowID windowID, - int x, int y); - -/** - * \fn void SDL_GetWindowPosition(SDL_WindowID windowID, int *x, int *y) - * - * \brief Get the position of the window. - * - * \sa SDL_SetWindowPosition() - */ -extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_WindowID windowID, - int *x, int *y); - -/** - * \fn void SDL_SetWindowSize(SDL_WindowID windowID, int w, int w) - * - * \brief Set the size of the window's client area. - * - * \note You can't change the size of a fullscreen window, it automatically - * matches the size of the display mode. - * - * \sa SDL_GetWindowSize() - */ -extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_WindowID windowID, int w, - int h); - -/** - * \fn void SDL_GetWindowSize(SDL_WindowID windowID, int *w, int *h) - * - * \brief Get the size of the window's client area. - * - * \sa SDL_SetWindowSize() - */ -extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_WindowID windowID, int *w, - int *h); - -/** - * \fn void SDL_ShowWindow(SDL_WindowID windowID) - * - * \brief Show the window - * - * \sa SDL_HideWindow() - */ -extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_WindowID windowID); - -/** - * \fn void SDL_HideWindow(SDL_WindowID windowID) - * - * \brief Hide the window - * - * \sa SDL_ShowWindow() - */ -extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_WindowID windowID); - -/** - * \fn void SDL_RaiseWindow(SDL_WindowID windowID) - * - * \brief Raise the window above other windows and set the input focus. - */ -extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_WindowID windowID); - -/** - * \fn void SDL_MaximizeWindow(SDL_WindowID windowID) - * - * \brief Make the window as large as possible. - * - * \sa SDL_RestoreWindow() - */ -extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_WindowID windowID); - -/** - * \fn void SDL_MinimizeWindow(SDL_WindowID windowID) - * - * \brief Minimize the window to an iconic representation. - * - * \sa SDL_RestoreWindow() - */ -extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_WindowID windowID); - -/** - * \fn void SDL_RestoreWindow(SDL_WindowID windowID) - * - * \brief Restore the size and position of a minimized or maximized window. - * - * \sa SDL_MaximizeWindow() - * \sa SDL_MinimizeWindow() - */ -extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_WindowID windowID); - -/** - * \fn int SDL_SetWindowFullscreen(SDL_WindowID windowID, int fullscreen) - * - * \brief Set the window's fullscreen state. - * - * \return 0 on success, or -1 if setting the display mode failed. - * - * \sa SDL_SetFullscreenDisplayMode() - */ -extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_WindowID windowID, - int fullscreen); - -/** - * \fn void SDL_SetWindowGrab(SDL_WindowID windowID, int mode) - * - * \brief Set the window's input grab mode. - * - * \param mode This is 1 to grab input, and 0 to release input. - * - * \sa SDL_GetWindowGrab() - */ -extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_WindowID windowID, - int mode); - -/** - * \fn int SDL_GetWindowGrab(SDL_WindowID windowID) - * - * \brief Get the window's input grab mode. - * - * \return This returns 1 if input is grabbed, and 0 otherwise. - * - * \sa SDL_SetWindowGrab() - */ -extern DECLSPEC int SDLCALL SDL_GetWindowGrab(SDL_WindowID windowID); - -/** - * \fn SDL_bool SDL_GetWindowWMInfo(SDL_WindowID windowID, struct SDL_SysWMinfo * info) - * - * \brief Get driver specific information about a window. - * - * \note Include SDL_syswm.h for the declaration of SDL_SysWMinfo. - */ -struct SDL_SysWMinfo; -extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_WindowID windowID, - struct SDL_SysWMinfo - *info); - -/** - * \fn void SDL_DestroyWindow(SDL_WindowID windowID) - * - * \brief Destroy a window. - */ -extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_WindowID windowID); - -/** - * \fn int SDL_GetNumRenderDrivers(void) - * - * \brief Get the number of 2D rendering drivers available for the current display. - * - * A render driver is a set of code that handles rendering and texture - * management on a particular display. Normally there is only one, but - * some drivers may have several available with different capabilities. - * - * \sa SDL_GetRenderDriverInfo() - * \sa SDL_CreateRenderer() - */ -extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); - -/** - * \fn int SDL_GetRenderDriverInfo(int index, SDL_RendererInfo *info) - * - * \brief Get information about a specific 2D rendering driver for the current display. - * - * \param index The index of the driver to query information about. - * \param info A pointer to an SDL_RendererInfo struct to be filled with information on the rendering driver. - * - * \return 0 on success, -1 if the index was out of range - * - * \sa SDL_CreateRenderer() - */ -extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, - SDL_RendererInfo * info); - -/** - * \fn int SDL_CreateRenderer(SDL_WindowID window, int index, Uint32 flags) - * - * \brief Create and make active a 2D rendering context for a window. - * - * \param windowID The window used for rendering - * \param index The index of the rendering driver to initialize, or -1 to initialize the first one supporting the requested flags. - * \param flags SDL_RendererFlags - * - * \return 0 on success, -1 if the flags were not supported, or -2 if - * there isn't enough memory to support the requested flags - * - * \sa SDL_SelectRenderer() - * \sa SDL_GetRendererInfo() - * \sa SDL_DestroyRenderer() - */ -extern DECLSPEC int SDLCALL SDL_CreateRenderer(SDL_WindowID windowID, - int index, Uint32 flags); - -/** - * \fn int SDL_SelectRenderer(SDL_WindowID windowID) - * - * \brief Select the rendering context for a particular window. - * - * \return 0 on success, -1 if the selected window doesn't have a - * rendering context. - */ -extern DECLSPEC int SDLCALL SDL_SelectRenderer(SDL_WindowID windowID); - -/** - * \fn int SDL_GetRendererInfo(SDL_RendererInfo *info) - * - * \brief Get information about the current rendering context. - */ -extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_RendererInfo * info); - -/** - * \fn SDL_TextureID SDL_CreateTexture(Uint32 format, int access, int w, int h) - * - * \brief Create a texture for the current rendering context. - * - * \param format The format of the texture - * \param access One of the enumerated values in SDL_TextureAccess - * \param w The width of the texture in pixels - * \param h The height of the texture in pixels - * - * \return The created texture is returned, or 0 if no rendering context was active, the format was unsupported, or the width or height were out of range. - * - * \sa SDL_QueryTexture() - * \sa SDL_DestroyTexture() - */ -extern DECLSPEC SDL_TextureID SDLCALL SDL_CreateTexture(Uint32 format, - int access, int w, - int h); - -/** - * \fn SDL_TextureID SDL_CreateTextureFromSurface(Uint32 format, SDL_Surface *surface) - * - * \brief Create a texture from an existing surface. - * - * \param format The format of the texture, or 0 to pick an appropriate format - * \param surface The surface containing pixel data used to fill the texture - * - * \return The created texture is returned, or 0 if no rendering context was active, the format was unsupported, or the surface width or height were out of range. - * - * \note The surface is not modified or freed by this function. - * - * \sa SDL_QueryTexture() - * \sa SDL_DestroyTexture() - */ -extern DECLSPEC SDL_TextureID SDLCALL SDL_CreateTextureFromSurface(Uint32 - format, - SDL_Surface - * surface); - -/** - * \fn int SDL_QueryTexture(SDL_TextureID textureID, Uint32 *format, int *access, int *w, int *h) - * - * \brief Query the attributes of a texture - * - * \param texture A texture to be queried - * \param format A pointer filled in with the raw format of the texture. The actual format may differ, but pixel transfers will use this format. - * \param access A pointer filled in with the actual access to the texture. - * \param w A pointer filled in with the width of the texture in pixels - * \param h A pointer filled in with the height of the texture in pixels - * - * \return 0 on success, or -1 if the texture is not valid - */ -extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_TextureID textureID, - Uint32 * format, int *access, - int *w, int *h); - -/** - * \fn int SDL_QueryTexturePixels(SDL_TextureID textureID, void **pixels, int pitch) - * - * \brief Query the pixels of a texture, if the texture does not need to be locked for pixel access. - * - * \param texture A texture to be queried, which was created with SDL_TEXTUREACCESS_STREAMING - * \param pixels A pointer filled with a pointer to the pixels for the texture - * \param pitch A pointer filled in with the pitch of the pixel data - * - * \return 0 on success, or -1 if the texture is not valid, or must be locked for pixel access. - */ -extern DECLSPEC int SDLCALL SDL_QueryTexturePixels(SDL_TextureID textureID, - void **pixels, int *pitch); - -/** - * \fn int SDL_SetTexturePalette(SDL_TextureID textureID, const SDL_Color * colors, int firstcolor, int ncolors) - * - * \brief Update an indexed texture with a color palette - * - * \param texture The texture to update - * \param colors The array of RGB color data - * \param firstcolor The first index to update - * \param ncolors The number of palette entries to fill with the color data - * - * \return 0 on success, or -1 if the texture is not valid or not an indexed texture - */ -extern DECLSPEC int SDLCALL SDL_SetTexturePalette(SDL_TextureID textureID, - const SDL_Color * colors, - int firstcolor, - int ncolors); - -/** - * \fn int SDL_GetTexturePalette(SDL_TextureID textureID, SDL_Color * colors, int firstcolor, int ncolors) - * - * \brief Update an indexed texture with a color palette - * - * \param texture The texture to update - * \param colors The array to fill with RGB color data - * \param firstcolor The first index to retrieve - * \param ncolors The number of palette entries to retrieve - * - * \return 0 on success, or -1 if the texture is not valid or not an indexed texture - */ -extern DECLSPEC int SDLCALL SDL_GetTexturePalette(SDL_TextureID textureID, - SDL_Color * colors, - int firstcolor, - int ncolors); - -/** - * \fn int SDL_SetTextureColorMod(SDL_TextureID textureID, Uint8 r, Uint8 g, Uint8 b) - * - * \brief Set an additional color value used in render copy operations - * - * \param texture The texture to update - * \param r The red source color value multiplied into copy operations - * \param g The green source color value multiplied into copy operations - * \param b The blue source color value multiplied into copy operations - * - * \return 0 on success, or -1 if the texture is not valid or color modulation is not supported - * - * \sa SDL_GetTextureColorMod() - */ -extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_TextureID textureID, - Uint8 r, Uint8 g, Uint8 b); - - -/** - * \fn int SDL_GetTextureColorMod(SDL_TextureID textureID, Uint8 *r, Uint8 *g, Uint8 *b) - * - * \brief Get the additional color value used in render copy operations - * - * \param texture The texture to query - * \param r A pointer filled in with the source red color value - * \param g A pointer filled in with the source green color value - * \param b A pointer filled in with the source blue color value - * - * \return 0 on success, or -1 if the texture is not valid - * - * \sa SDL_SetTextureColorMod() - */ -extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_TextureID textureID, - Uint8 * r, Uint8 * g, - Uint8 * b); - -/** - * \fn int SDL_SetTextureAlphaMod(SDL_TextureID textureID, Uint8 alpha) - * - * \brief Set an additional alpha value used in render copy operations - * - * \param texture The texture to update - * \param alpha The source alpha value multiplied into copy operations. - * - * \return 0 on success, or -1 if the texture is not valid or alpha modulation is not supported - * - * \sa SDL_GetTextureAlphaMod() - */ -extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_TextureID textureID, - Uint8 alpha); - -/** - * \fn int SDL_GetTextureAlphaMod(SDL_TextureID textureID, Uint8 *alpha) - * - * \brief Get the additional alpha value used in render copy operations - * - * \param texture The texture to query - * \param alpha A pointer filled in with the source alpha value - * - * \return 0 on success, or -1 if the texture is not valid - * - * \sa SDL_SetTextureAlphaMod() - */ -extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_TextureID textureID, - Uint8 * alpha); - -/** - * \fn int SDL_SetTextureBlendMode(SDL_TextureID textureID, int blendMode) - * - * \brief Set the blend mode used for texture copy operations - * - * \param texture The texture to update - * \param blendMode SDL_TextureBlendMode to use for texture blending - * - * \return 0 on success, or -1 if the texture is not valid or the blend mode is not supported - * - * \note If the blend mode is not supported, the closest supported mode is chosen. - * - * \sa SDL_GetTextureBlendMode() - */ -extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_TextureID textureID, - int blendMode); - -/** - * \fn int SDL_GetTextureBlendMode(SDL_TextureID textureID, int *blendMode) - * - * \brief Get the blend mode used for texture copy operations - * - * \param texture The texture to query - * \param blendMode A pointer filled in with the current blend mode - * - * \return 0 on success, or -1 if the texture is not valid - * - * \sa SDL_SetTextureBlendMode() - */ -extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_TextureID textureID, - int *blendMode); - -/** - * \fn int SDL_SetTextureScaleMode(SDL_TextureID textureID, int scaleMode) - * - * \brief Set the scale mode used for texture copy operations - * - * \param texture The texture to update - * \param scaleMode SDL_TextureScaleMode to use for texture scaling - * - * \return 0 on success, or -1 if the texture is not valid or the scale mode is not supported - * - * \note If the scale mode is not supported, the closest supported mode is chosen. - * - * \sa SDL_GetTextureScaleMode() - */ -extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_TextureID textureID, - int scaleMode); - -/** - * \fn int SDL_GetTextureScaleMode(SDL_TextureID textureID, int *scaleMode) - * - * \brief Get the scale mode used for texture copy operations - * - * \param texture The texture to query - * \param scaleMode A pointer filled in with the current scale mode - * - * \return 0 on success, or -1 if the texture is not valid - * - * \sa SDL_SetTextureScaleMode() - */ -extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_TextureID textureID, - int *scaleMode); - -/** - * \fn int SDL_UpdateTexture(SDL_TextureID textureID, const SDL_Rect *rect, const void *pixels, int pitch) - * - * \brief Update the given texture rectangle with new pixel data. - * - * \param texture The texture to update - * \param rect A pointer to the rectangle of pixels to update, or NULL to update the entire texture. - * \param pixels The raw pixel data - * \param pitch The number of bytes between rows of pixel data - * - * \return 0 on success, or -1 if the texture is not valid - * - * \note This is a fairly slow function. - */ -extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_TextureID textureID, - const SDL_Rect * rect, - const void *pixels, int pitch); - -/** - * \fn void SDL_LockTexture(SDL_TextureID textureID, const SDL_Rect *rect, int markDirty, void **pixels, int *pitch) - * - * \brief Lock a portion of the texture for pixel access. - * - * \param textureID The texture to lock for access, which was created with SDL_TEXTUREACCESS_STREAMING. - * \param rect A pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked. - * \param markDirty If this is nonzero, the locked area will be marked dirty when the texture is unlocked. - * \param pixels This is filled in with a pointer to the locked pixels, appropriately offset by the locked area. - * \param pitch This is filled in with the pitch of the locked pixels. - * - * \return 0 on success, or -1 if the texture is not valid or was created with SDL_TEXTUREACCESS_STATIC - * - * \sa SDL_DirtyTexture() - * \sa SDL_UnlockTexture() - */ -extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_TextureID textureID, - const SDL_Rect * rect, - int markDirty, void **pixels, - int *pitch); - -/** - * \fn void SDL_UnlockTexture(SDL_TextureID textureID) - * - * \brief Unlock a texture, uploading the changes to video memory, if needed. - * - * \sa SDL_LockTexture() - * \sa SDL_DirtyTexture() - */ -extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_TextureID textureID); - -/** - * \fn void SDL_DirtyTexture(SDL_TextureID textureID, int numrects, const SDL_Rect * rects) - * - * \brief Mark the specified rectangles of the texture as dirty. - * - * \param textureID The texture to mark dirty, which was created with SDL_TEXTUREACCESS_STREAMING. - * \param numrects The number of rectangles pointed to by rects. - * \param rects The pointer to an array of dirty rectangles. - * - * \sa SDL_LockTexture() - * \sa SDL_UnlockTexture() - */ -extern DECLSPEC void SDLCALL SDL_DirtyTexture(SDL_TextureID textureID, - int numrects, - const SDL_Rect * rects); - -/** - * \fn void SDL_SetRenderDrawColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a) - * - * \brief Set the color used for drawing operations (Fill and Line). - * - * \param r The red value used to draw on the rendering target - * \param g The green value used to draw on the rendering target - * \param b The blue value used to draw on the rendering target - * \param a The alpha value used to draw on the rendering target, usually SDL_ALPHA_OPAQUE (255) - * \return 0 on success, or -1 if there is no rendering context current - */ -extern DECLSPEC int SDL_SetRenderDrawColor(Uint8 r, Uint8 g, Uint8 b, - Uint8 a); - -/** - * \fn void SDL_GetRenderDrawColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a) - * - * \brief Get the color used for drawing operations (Fill and Line). - * - * \param r A pointer to the red value used to draw on the rendering target - * \param g A pointer to the green value used to draw on the rendering target - * \param b A pointer to the blue value used to draw on the rendering target - * \param a A pointer to the alpha value used to draw on the rendering target, usually SDL_ALPHA_OPAQUE (255) - * \return 0 on success, or -1 if there is no rendering context current - */ -extern DECLSPEC int SDL_GetRenderDrawColor(Uint8 * r, Uint8 * g, Uint8 * b, - Uint8 * a); - -/** - * \fn int SDL_SetRenderDrawBlendMode(int blendMode) - * - * \brief Set the blend mode used for drawing operations (Fill and Line). - * - * \param blendMode SDL_BlendMode to use for blending - * - * \return 0 on success, or -1 if there is no rendering context current - * - * \note If the blend mode is not supported, the closest supported mode is chosen. - * - * \sa SDL_SetRenderDrawBlendMode() - */ -extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(int blendMode); - -/** - * \fn int SDL_GetRenderDrawBlendMode(int *blendMode) - * - * \brief Get the blend mode used for drawing operations - * - * \param blendMode A pointer filled in with the current blend mode - * - * \return 0 on success, or -1 if there is no rendering context current - * - * \sa SDL_SetRenderDrawBlendMode() - */ -extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(int *blendMode); - -/** - * \fn int SDL_RenderPoint(int x, int y) - * - * \brief Draw a point on the current rendering target. - * - * \param x The x coordinate of the point - * \param y The y coordinate of the point - * - * \return 0 on success, or -1 if there is no rendering context current - */ -extern DECLSPEC int SDLCALL SDL_RenderPoint(int x, int y); - -/** - * \fn int SDL_RenderLine(int x1, int y1, int x2, int y2) - * - * \brief Draw a line on the current rendering target. - * - * \param x1 The x coordinate of the start point - * \param y1 The y coordinate of the start point - * \param x2 The x coordinate of the end point - * \param y2 The y coordinate of the end point - * - * \return 0 on success, or -1 if there is no rendering context current - */ -extern DECLSPEC int SDLCALL SDL_RenderLine(int x1, int y1, int x2, int y2); - -/** - * \fn void SDL_RenderFill(const SDL_Rect *rect) - * - * \brief Fill the current rendering target with the drawing color. - * - * \param r The red value used to fill the rendering target - * \param g The green value used to fill the rendering target - * \param b The blue value used to fill the rendering target - * \param a The alpha value used to fill the rendering target, usually SDL_ALPHA_OPAQUE (255) - * \param rect A pointer to the destination rectangle, or NULL for the entire rendering target. - * - * \return 0 on success, or -1 if there is no rendering context current - */ -extern DECLSPEC int SDLCALL SDL_RenderFill(const SDL_Rect * rect); - -/** - * \fn int SDL_RenderCopy(SDL_TextureID textureID, const SDL_Rect *srcrect, const SDL_Rect *dstrect) - * - * \brief Copy a portion of the texture to the current rendering target. - * - * \param texture The source texture. - * \param srcrect A pointer to the source rectangle, or NULL for the entire texture. - * \param dstrect A pointer to the destination rectangle, or NULL for the entire rendering target. - * - * \return 0 on success, or -1 if there is no rendering context current, or the driver doesn't support the requested operation. - */ -extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_TextureID textureID, - const SDL_Rect * srcrect, - const SDL_Rect * dstrect); - -/** - * \fn int SDL_RenderReadPixels(const SDL_Rect *rect, void *pixels, int pitch) - * - * \brief Read pixels from the current rendering target. - * - * \param rect A pointer to the rectangle to read, or NULL for the entire render target - * \param pixels A pointer to be filled in with the pixel data - * \param pitch The pitch of the pixels parameter - * - * \return 0 on success, or -1 if pixel reading is not supported. - * - * \warning This is a very slow operation, and should not be used frequently. - */ -extern DECLSPEC int SDLCALL SDL_RenderReadPixels(const SDL_Rect * rect, - void *pixels, int pitch); - -/** - * \fn int SDL_RenderWritePixels(const SDL_Rect *rect, const void *pixels, int pitch) - * - * \brief Write pixels to the current rendering target. - * - * \param rect A pointer to the rectangle to write, or NULL for the entire render target - * \param pixels A pointer to the pixel data to write - * \param pitch The pitch of the pixels parameter - * - * \return 0 on success, or -1 if pixel writing is not supported. - * - * \warning This is a very slow operation, and should not be used frequently. - */ -extern DECLSPEC int SDLCALL SDL_RenderWritePixels(const SDL_Rect * rect, - const void *pixels, - int pitch); - -/** - * \fn void SDL_RenderPresent(void) - * - * \brief Update the screen with rendering performed. - */ -extern DECLSPEC void SDLCALL SDL_RenderPresent(void); - -/** - * \fn void SDL_DestroyTexture(SDL_TextureID textureID); - * - * \brief Destroy the specified texture. - * - * \sa SDL_CreateTexture() - * \sa SDL_CreateTextureFromSurface() - */ -extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_TextureID textureID); - -/** - * \fn void SDL_DestroyRenderer(SDL_WindowID windowID); - * - * \brief Destroy the rendering context for a window and free associated - * textures. - * - * \sa SDL_CreateRenderer() - */ -extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_WindowID windowID); - -/** - * \fn SDL_bool SDL_IsScreenSaverEnabled(); - * - * \brief Returns whether the screensaver is currently enabled (default off). - * - * \sa SDL_EnableScreenSaver() - * \sa SDL_DisableScreenSaver() - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); - -/** - * \fn void SDL_EnableScreenSaver(); - * - * \brief Allow the screen to be blanked by a screensaver - * - * \sa SDL_IsScreenSaverEnabled() - * \sa SDL_DisableScreenSaver() - */ -extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); - -/** - * \fn void SDL_DisableScreenSaver(); - * - * \brief Prevent the screen from being blanked by a screensaver - * - * \sa SDL_IsScreenSaverEnabled() - * \sa SDL_EnableScreenSaver() - */ -extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* OpenGL support functions. */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * \fn int SDL_GL_LoadLibrary(const char *path) - * - * \brief Dynamically load an OpenGL library. - * - * \param path The platform dependent OpenGL library name, or NULL to open the default OpenGL library - * - * \return 0 on success, or -1 if the library couldn't be loaded - * - * This should be done after initializing the video driver, but before - * creating any OpenGL windows. If no OpenGL library is loaded, the default - * library will be loaded upon creation of the first OpenGL window. - * - * \note If you do this, you need to retrieve all of the GL functions used in - * your program from the dynamic library using SDL_GL_GetProcAddress(). - * - * \sa SDL_GL_GetProcAddress() - */ -extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); - -/** - * \fn void *SDL_GL_GetProcAddress(const char *proc) - * - * \brief Get the address of an OpenGL function. - */ -extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); - -/** - * \fn SDL_bool SDL_GL_ExtensionSupported(const char *extension) - * - * \brief Return true if an OpenGL extension is supported for the current context. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char - *extension); - -/** - * \fn int SDL_GL_SetAttribute(SDL_GLattr attr, int value) - * - * \brief Set an OpenGL window attribute before window creation. - */ -extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); - -/** - * \fn int SDL_GL_GetWindowAttribute(SDL_WindowID windowID, SDL_GLattr attr, int *value) - * - * \brief Get the actual value for an attribute from the current context. - */ -extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); - -/** - * \fn SDL_GLContext SDL_GL_CreateContext(SDL_WindowID windowID) - * - * \brief Create an OpenGL context for use with an OpenGL window, and make it current. - * - * \sa SDL_GL_DeleteContext() - */ -extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_WindowID - windowID); - -/** - * \fn int SDL_GL_MakeCurrent(SDL_WindowID windowID, SDL_GLContext context) - * - * \brief Set up an OpenGL context for rendering into an OpenGL window. - * - * \note The context must have been created with a compatible window. - */ -extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_WindowID windowID, - SDL_GLContext context); - -/** - * \fn int SDL_GL_SetSwapInterval(int interval) - * - * \brief Set the swap interval for the current OpenGL context. - * - * \param interval 0 for immediate updates, 1 for updates synchronized with the vertical retrace - * - * \return 0 on success, or -1 if setting the swap interval is not supported. - * - * \sa SDL_GL_GetSwapInterval() - */ -extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); - -/** - * \fn int SDL_GL_GetSwapInterval(void) - * - * \brief Get the swap interval for the current OpenGL context. - * - * \return 0 if there is no vertical retrace synchronization, 1 if the buffer swap is synchronized with the vertical retrace, and -1 if getting the swap interval is not supported. - * - * \sa SDL_GL_SetSwapInterval() - */ -extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); - -/** - * \fn void SDL_GL_SwapWindow(SDL_WindowID windowID) - * - * \brief Swap the OpenGL buffers for the window, if double-buffering is supported. - */ -extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_WindowID windowID); - -/** - * \fn void SDL_GL_DeleteContext(SDL_GLContext context) - * - * \brief Delete an OpenGL context. - * - * \sa SDL_GL_CreateContext() - */ -extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); - - -/* Ends C function definitions when using C++ */ -#ifdef __cplusplus -/* *INDENT-OFF* */ -} -/* *INDENT-ON* */ -#endif -#include "close_code.h" - -#endif /* _SDL_video_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/begin_code.h b/Externals/SDL/Include_1.3/begin_code.h deleted file mode 100644 index 33e8e53484..0000000000 --- a/Externals/SDL/Include_1.3/begin_code.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file sets things up for C dynamic library function definitions, - static inlined functions, and structures aligned at 4-byte alignment. - If you don't like ugly C preprocessor code, don't look at this file. :) -*/ - -/* This shouldn't be nested -- included it around code only. */ -#ifdef _begin_code_h -#error Nested inclusion of begin_code.h -#endif -#define _begin_code_h - -/* Some compilers use a special export keyword */ -#ifndef DECLSPEC -# if defined(__BEOS__) -# if defined(__GNUC__) -# define DECLSPEC __declspec(dllexport) -# else -# define DECLSPEC __declspec(export) -# endif -# elif defined(__WIN32__) -# ifdef __BORLANDC__ -# ifdef BUILD_SDL -# define DECLSPEC -# else -# define DECLSPEC __declspec(dllimport) -# endif -# else -# define DECLSPEC __declspec(dllexport) -# endif -# elif defined(__OS2__) -# ifdef __WATCOMC__ -# ifdef BUILD_SDL -# define DECLSPEC __declspec(dllexport) -# else -# define DECLSPEC -# endif -# else -# define DECLSPEC -# endif -# else -# if defined(__GNUC__) && __GNUC__ >= 4 -# define DECLSPEC __attribute__ ((visibility("default"))) -# else -# define DECLSPEC -# endif -# endif -#endif - -/* By default SDL uses the C calling convention */ -#ifndef SDLCALL -#if defined(__WIN32__) && !defined(__GNUC__) -#define SDLCALL __cdecl -#else -#ifdef __OS2__ -/* But on OS/2, we use the _System calling convention */ -/* to be compatible with every compiler */ -#define SDLCALL _System -#else -#define SDLCALL -#endif -#endif -#endif /* SDLCALL */ - -/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ -#ifdef __SYMBIAN32__ -#undef DECLSPEC -#define DECLSPEC -#endif /* __SYMBIAN32__ */ - -/* Force structure packing at 4 byte alignment. - This is necessary if the header is included in code which has structure - packing set to an alternate value, say for loading structures from disk. - The packing is reset to the previous value in close_code.h - */ -#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) -#ifdef _MSC_VER -#pragma warning(disable: 4103) -#endif -#ifdef __BORLANDC__ -#pragma nopackwarning -#endif -#pragma pack(push,4) -#endif /* Compiler needs structure packing set */ - -/* Set up compiler-specific options for inlining functions */ -#ifndef SDL_INLINE_OKAY -#ifdef __GNUC__ -#define SDL_INLINE_OKAY -#else -/* Add any special compiler-specific cases here */ -#if defined(_MSC_VER) || defined(__BORLANDC__) || \ - defined(__DMC__) || defined(__SC__) || \ - defined(__WATCOMC__) || defined(__LCC__) || \ - defined(__DECC) -#ifndef __inline__ -#define __inline__ __inline -#endif -#define SDL_INLINE_OKAY -#else -#if !defined(__MRC__) && !defined(_SGI_SOURCE) -#ifndef __inline__ -#define __inline__ inline -#endif -#define SDL_INLINE_OKAY -#endif /* Not a funky compiler */ -#endif /* Visual C++ */ -#endif /* GNU C */ -#endif /* SDL_INLINE_OKAY */ - -/* If inlining isn't supported, remove "__inline__", turning static - inlined functions into static functions (resulting in code bloat - in all files which include the offending header files) -*/ -#ifndef SDL_INLINE_OKAY -#define __inline__ -#endif - -/* Apparently this is needed by several Windows compilers */ -#if !defined(__MACH__) -#ifndef NULL -#ifdef __cplusplus -#define NULL 0 -#else -#define NULL ((void *)0) -#endif -#endif /* NULL */ -#endif /* ! Mac OS X - breaks precompiled headers */ diff --git a/Externals/SDL/Include_1.3/close_code.h b/Externals/SDL/Include_1.3/close_code.h deleted file mode 100644 index 660933d5f5..0000000000 --- a/Externals/SDL/Include_1.3/close_code.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Sam Lantinga - slouken@libsdl.org -*/ - -/* This file reverses the effects of begin_code.h and should be included - after you finish any function and structure declarations in your headers -*/ - -#undef _begin_code_h - -/* Reset structure packing at previous byte alignment */ -#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__WATCOMC__) || defined(__BORLANDC__) -#ifdef __BORLANDC__ -#pragma nopackwarning -#endif -#pragma pack(pop) -#endif /* Compiler needs structure packing set */ diff --git a/Externals/SDL/Include_1.3/doxyfile b/Externals/SDL/Include_1.3/doxyfile deleted file mode 100644 index e53097f4bd..0000000000 --- a/Externals/SDL/Include_1.3/doxyfile +++ /dev/null @@ -1,1229 +0,0 @@ -# Doxyfile 1.4.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = SDL - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 1.3.0 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = docs - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is YES. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = YES - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = DOXYGEN_SHOULD_IGNORE_THIS=1 \ - DECLSPEC= SDLCALL= - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = NO - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Externals/SDL/src/joystick/darwin/SDL_sysjoystick.c b/Externals/SDL/src/joystick/darwin/SDL_sysjoystick.c index 32d82f6df3..8592a00a80 100644 --- a/Externals/SDL/src/joystick/darwin/SDL_sysjoystick.c +++ b/Externals/SDL/src/joystick/darwin/SDL_sysjoystick.c @@ -186,7 +186,7 @@ static IOReturn HIDCreateOpenDeviceInterface (io_object_t hidDevice, recDevice * plugInResult = (*ppPlugInInterface)->QueryInterface (ppPlugInInterface, CFUUIDGetUUIDBytes (kIOHIDDeviceInterfaceID), (void *) &(pDevice->interface)); if (S_OK != plugInResult) - HIDReportErrorNum ("Couldnt query HID class device interface from plugInInterface", plugInResult); + HIDReportErrorNum ("Couldn't query HID class device interface from plugInInterface", plugInResult); (*ppPlugInInterface)->Release (ppPlugInInterface); } else diff --git a/Externals/SDL/win32/SDL.1.3.dll b/Externals/SDL/win32/SDL.1.3.dll deleted file mode 100644 index 2e09512bee..0000000000 Binary files a/Externals/SDL/win32/SDL.1.3.dll and /dev/null differ diff --git a/Externals/SDL/win32/SDL.1.3.lib b/Externals/SDL/win32/SDL.1.3.lib deleted file mode 100644 index 0b64b9aea9..0000000000 Binary files a/Externals/SDL/win32/SDL.1.3.lib and /dev/null differ diff --git a/Externals/SDL/win32/SDL.dll b/Externals/SDL/win32/SDL.dll deleted file mode 100644 index ec6d2d845a..0000000000 Binary files a/Externals/SDL/win32/SDL.dll and /dev/null differ diff --git a/Externals/SDL/win32/SDL.lib b/Externals/SDL/win32/SDL.lib deleted file mode 100644 index eea0c81b21..0000000000 Binary files a/Externals/SDL/win32/SDL.lib and /dev/null differ diff --git a/Externals/SDL/x64/SDL.dll b/Externals/SDL/x64/SDL.dll deleted file mode 100644 index 0ee6467b6d..0000000000 Binary files a/Externals/SDL/x64/SDL.dll and /dev/null differ diff --git a/Externals/SDL/x64/SDL.lib b/Externals/SDL/x64/SDL.lib deleted file mode 100644 index 628ed345c1..0000000000 Binary files a/Externals/SDL/x64/SDL.lib and /dev/null differ diff --git a/Externals/SDL2-2.0.1/BUGS.txt b/Externals/SDL2-2.0.1/BUGS.txt new file mode 100644 index 0000000000..c5ed3af237 --- /dev/null +++ b/Externals/SDL2-2.0.1/BUGS.txt @@ -0,0 +1,16 @@ + +Bugs are now managed in the SDL bug tracker, here: + + http://bugzilla.libsdl.org/ + +You may report bugs there, and search to see if a given issue has already + been reported, discussed, and maybe even fixed. + + +You may also find help on the SDL mailing list. Subscription information: + + http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org + +Bug reports are welcome here, but we really appreciate if you use Bugzilla, as + bugs discussed on the mailing list may be forgotten or missed. + diff --git a/Externals/SDL2-2.0.1/COPYING.txt b/Externals/SDL2-2.0.1/COPYING.txt new file mode 100644 index 0000000000..397e7b45d6 --- /dev/null +++ b/Externals/SDL2-2.0.1/COPYING.txt @@ -0,0 +1,20 @@ + +Simple DirectMedia Layer +Copyright (C) 1997-2013 Sam Lantinga + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/Externals/SDL2-2.0.1/README-SDL.txt b/Externals/SDL2-2.0.1/README-SDL.txt new file mode 100644 index 0000000000..fade0b9583 --- /dev/null +++ b/Externals/SDL2-2.0.1/README-SDL.txt @@ -0,0 +1,13 @@ + +Please distribute this file with the SDL runtime environment: + +The Simple DirectMedia Layer (SDL for short) is a cross-platform library +designed to make it easy to write multi-media software, such as games and +emulators. + +The Simple DirectMedia Layer library source code is available from: +http://www.libsdl.org/ + +This library is distributed under the terms of the zlib license: +http://www.zlib.net/zlib_license.html + diff --git a/Externals/SDL2-2.0.1/README.txt b/Externals/SDL2-2.0.1/README.txt new file mode 100644 index 0000000000..0dcc6905ae --- /dev/null +++ b/Externals/SDL2-2.0.1/README.txt @@ -0,0 +1,38 @@ + + Simple DirectMedia Layer + + (SDL) + + Version 2.0 + +--- +http://www.libsdl.org/ + +Simple DirectMedia Layer is a cross-platform development library designed +to provide low level access to audio, keyboard, mouse, joystick, and graphics +hardware via OpenGL and Direct3D. It is used by video playback software, +emulators, and popular games including Valve's award winning catalog +and many Humble Bundle games. + +SDL officially supports Windows, Mac OS X, Linux, iOS, and Android. +Support for other platforms may be found in the source code. + +SDL is written in C, works natively with C++, and there are bindings +available for several other languages, including C# and Python. + +This library is distributed under the zlib license, which can be found +in the file "COPYING.txt". + +The best way to learn how to use SDL is to check out the header files in +the "include" subdirectory and the programs in the "test" subdirectory. +The header files and test programs are well commented and always up to date. +More documentation and FAQs are available online at: + http://wiki.libsdl.org/ + +If you need help with the library, or just want to discuss SDL related +issues, you can join the developers mailing list: + http://www.libsdl.org/mailing-list.php + +Enjoy! + Sam Lantinga (slouken@libsdl.org) + diff --git a/Externals/SDL2-2.0.1/WhatsNew.txt b/Externals/SDL2-2.0.1/WhatsNew.txt new file mode 100644 index 0000000000..00836d8632 --- /dev/null +++ b/Externals/SDL2-2.0.1/WhatsNew.txt @@ -0,0 +1,57 @@ + +This is a list of major changes in SDL's version history. + +--------------------------------------------------------------------------- +2.0.1: +--------------------------------------------------------------------------- + +General: +* Added an API to get common filesystem paths in SDL_filesystem.h: + SDL_GetBasePath(), SDL_GetPrefPath() +* Added an API to do optimized YV12 and IYUV texture updates: + SDL_UpdateYUVTexture() +* Added an API to get the amount of RAM on the system: + SDL_GetSystemRAM() +* Added a macro to perform timestamp comparisons with SDL_GetTicks(): + SDL_TICKS_PASSED() +* Dramatically improved OpenGL ES 2.0 rendering performance +* Added OpenGL attribute SDL_GL_FRAMEBUFFER_SRGB_CAPABLE + +Windows: +* Created a static library configuration for the Visual Studio 2010 project +* Added a hint to create the Direct3D device with support for multi-threading: + SDL_HINT_RENDER_DIRECT3D_THREADSAFE +* Added a function to get the D3D9 adapter index for a display: + SDL_Direct3D9GetAdapterIndex() +* Added a function to get the D3D9 device for a D3D9 renderer: + SDL_RenderGetD3D9Device() +* Fixed building SDL with the mingw32 toolchain (mingw-w64 is preferred) +* Fixed crash when using two XInput controllers at the same time +* Fixed detecting a mixture of XInput and DirectInput controllers +* Fixed clearing a D3D render target larger than the window +* Improved support for format specifiers in SDL_snprintf() + +Mac OS X: +* Added support for retina displays: + Create your window with the SDL_WINDOW_ALLOW_HIGHDPI flag, and then use SDL_GL_GetDrawableSize() to find the actual drawable size. You are responsible for scaling mouse and drawing coordinates appropriately. +* Fixed mouse warping in fullscreen mode +* Right mouse click is emulated by holding the Ctrl key while left clicking + +Linux: +* Fixed float audio support with the PulseAudio driver +* Fixed missing line endpoints in the OpenGL renderer on some drivers +* X11 symbols are no longer defined to avoid collisions when linking statically + +iOS: +* Fixed status bar visibility on iOS 7 +* Flipped the accelerometer Y axis to match expected values + +Android: +IMPORTANT: You MUST get the updated SDLActivity.java to match C code +* Moved EGL initialization to native code +* Fixed the accelerometer axis rotation relative to the device rotation +* Fixed race conditions when handling the EGL context on pause/resume +* Touch devices are available for enumeration immediately after init + +Raspberry Pi: +* Added support for the Raspberry Pi, see README-raspberrypi.txt for details diff --git a/Externals/SDL2-2.0.1/include/SDL.h b/Externals/SDL2-2.0.1/include/SDL.h new file mode 100644 index 0000000000..c0c067ca58 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL.h @@ -0,0 +1,163 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL.h + * + * Main include header for the SDL library + */ + +/** + * \mainpage Simple DirectMedia Layer (SDL) + * + * http://www.libsdl.org/ + * + * \section intro_sec Introduction + * + * Simple DirectMedia Layer is a cross-platform development library designed + * to provide low level access to audio, keyboard, mouse, joystick, and + * graphics hardware via OpenGL and Direct3D. It is used by video playback + * software, emulators, and popular games including Valve's award winning + * catalog and many Humble Bundle games. + * + * SDL officially supports Windows, Mac OS X, Linux, iOS, and Android. + * Support for other platforms may be found in the source code. + * + * SDL is written in C, works natively with C++, and there are bindings + * available for several other languages, including C# and Python. + * + * This library is distributed under the zlib license, which can be found + * in the file "COPYING.txt". + * + * The best way to learn how to use SDL is to check out the header files in + * the "include" subdirectory and the programs in the "test" subdirectory. + * The header files and test programs are well commented and always up to date. + * More documentation and FAQs are available online at: + * http://wiki.libsdl.org/ + * + * If you need help with the library, or just want to discuss SDL related + * issues, you can join the developers mailing list: + * http://www.libsdl.org/mailing-list.php + * + * Enjoy! + * Sam Lantinga (slouken@libsdl.org) + */ + +#ifndef _SDL_H +#define _SDL_H + +#include "SDL_main.h" +#include "SDL_stdinc.h" +#include "SDL_assert.h" +#include "SDL_atomic.h" +#include "SDL_audio.h" +#include "SDL_clipboard.h" +#include "SDL_cpuinfo.h" +#include "SDL_endian.h" +#include "SDL_error.h" +#include "SDL_events.h" +#include "SDL_filesystem.h" +#include "SDL_joystick.h" +#include "SDL_gamecontroller.h" +#include "SDL_haptic.h" +#include "SDL_hints.h" +#include "SDL_loadso.h" +#include "SDL_log.h" +#include "SDL_messagebox.h" +#include "SDL_mutex.h" +#include "SDL_power.h" +#include "SDL_render.h" +#include "SDL_rwops.h" +#include "SDL_system.h" +#include "SDL_thread.h" +#include "SDL_timer.h" +#include "SDL_version.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* As of version 0.5, SDL is loaded dynamically into the application */ + +/** + * \name SDL_INIT_* + * + * These are the flags which may be passed to SDL_Init(). You should + * specify the subsystems which you will be using in your application. + */ +/* @{ */ +#define SDL_INIT_TIMER 0x00000001 +#define SDL_INIT_AUDIO 0x00000010 +#define SDL_INIT_VIDEO 0x00000020 /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ +#define SDL_INIT_JOYSTICK 0x00000200 /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ +#define SDL_INIT_HAPTIC 0x00001000 +#define SDL_INIT_GAMECONTROLLER 0x00002000 /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ +#define SDL_INIT_EVENTS 0x00004000 +#define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */ +#define SDL_INIT_EVERYTHING ( \ + SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ + SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \ + ) +/* @} */ + +/** + * This function initializes the subsystems specified by \c flags + * Unless the ::SDL_INIT_NOPARACHUTE flag is set, it will install cleanup + * signal handlers for some commonly ignored fatal signals (like SIGSEGV). + */ +extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); + +/** + * This function initializes specific SDL subsystems + */ +extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); + +/** + * This function cleans up specific SDL subsystems + */ +extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); + +/** + * This function returns a mask of the specified subsystems which have + * previously been initialized. + * + * If \c flags is 0, it returns a mask of all initialized subsystems. + */ +extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); + +/** + * This function cleans up all initialized subsystems. You should + * call it upon all exit conditions. + */ +extern DECLSPEC void SDLCALL SDL_Quit(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_H */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_assert.h b/Externals/SDL2-2.0.1/include/SDL_assert.h new file mode 100644 index 0000000000..4329434064 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_assert.h @@ -0,0 +1,246 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_assert_h +#define _SDL_assert_h + +#include "SDL_config.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SDL_ASSERT_LEVEL +#ifdef SDL_DEFAULT_ASSERT_LEVEL +#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL +#elif defined(_DEBUG) || defined(DEBUG) || \ + (defined(__GNUC__) && !defined(__OPTIMIZE__)) +#define SDL_ASSERT_LEVEL 2 +#else +#define SDL_ASSERT_LEVEL 1 +#endif +#endif /* SDL_ASSERT_LEVEL */ + +/* +These are macros and not first class functions so that the debugger breaks +on the assertion line and not in some random guts of SDL, and so each +assert can have unique static variables associated with it. +*/ + +#if defined(_MSC_VER) +/* Don't include intrin.h here because it contains C++ code */ + extern void __cdecl __debugbreak(void); + #define SDL_TriggerBreakpoint() __debugbreak() +#elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) +#elif defined(HAVE_SIGNAL_H) + #include + #define SDL_TriggerBreakpoint() raise(SIGTRAP) +#else + /* How do we trigger breakpoints on this platform? */ + #define SDL_TriggerBreakpoint() +#endif + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ +# define SDL_FUNCTION __func__ +#elif ((__GNUC__ >= 2) || defined(_MSC_VER)) +# define SDL_FUNCTION __FUNCTION__ +#else +# define SDL_FUNCTION "???" +#endif +#define SDL_FILE __FILE__ +#define SDL_LINE __LINE__ + +/* +sizeof (x) makes the compiler still parse the expression even without +assertions enabled, so the code is always checked at compile time, but +doesn't actually generate code for it, so there are no side effects or +expensive checks at run time, just the constant size of what x WOULD be, +which presumably gets optimized out as unused. +This also solves the problem of... + + int somevalue = blah(); + SDL_assert(somevalue == 1); + +...which would cause compiles to complain that somevalue is unused if we +disable assertions. +*/ + +#ifdef _MSC_VER /* stupid /W4 warnings. */ +#define SDL_NULL_WHILE_LOOP_CONDITION (-1 == __LINE__) +#else +#define SDL_NULL_WHILE_LOOP_CONDITION (0) +#endif + +#define SDL_disabled_assert(condition) \ + do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) + +typedef enum +{ + SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ + SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ + SDL_ASSERTION_ABORT, /**< Terminate the program. */ + SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ + SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ +} SDL_assert_state; + +typedef struct SDL_assert_data +{ + int always_ignore; + unsigned int trigger_count; + const char *condition; + const char *filename; + int linenum; + const char *function; + const struct SDL_assert_data *next; +} SDL_assert_data; + +#if (SDL_ASSERT_LEVEL > 0) + +/* Never call this directly. Use the SDL_assert* macros. */ +extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, + const char *, + const char *, int); + +/* the do {} while(0) avoids dangling else problems: + if (x) SDL_assert(y); else blah(); + ... without the do/while, the "else" could attach to this macro's "if". + We try to handle just the minimum we need here in a macro...the loop, + the static vars, and break points. The heavy lifting is handled in + SDL_ReportAssertion(), in SDL_assert.c. +*/ +#define SDL_enabled_assert(condition) \ + do { \ + while ( !(condition) ) { \ + static struct SDL_assert_data assert_data = { \ + 0, 0, #condition, 0, 0, 0, 0 \ + }; \ + const SDL_assert_state state = SDL_ReportAssertion(&assert_data, \ + SDL_FUNCTION, \ + SDL_FILE, \ + SDL_LINE); \ + if (state == SDL_ASSERTION_RETRY) { \ + continue; /* go again. */ \ + } else if (state == SDL_ASSERTION_BREAK) { \ + SDL_TriggerBreakpoint(); \ + } \ + break; /* not retrying. */ \ + } \ + } while (SDL_NULL_WHILE_LOOP_CONDITION) + +#endif /* enabled assertions support code */ + +/* Enable various levels of assertions. */ +#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_disabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 1 /* release settings. */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) +#else +# error Unknown assertion level. +#endif + +/* this assertion is never disabled at any level. */ +#define SDL_assert_always(condition) SDL_enabled_assert(condition) + + +typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)( + const SDL_assert_data* data, void* userdata); + +/** + * \brief Set an application-defined assertion handler. + * + * This allows an app to show its own assertion UI and/or force the + * response to an assertion failure. If the app doesn't provide this, SDL + * will try to do the right thing, popping up a system-specific GUI dialog, + * and probably minimizing any fullscreen windows. + * + * This callback may fire from any thread, but it runs wrapped in a mutex, so + * it will only fire from one thread at a time. + * + * Setting the callback to NULL restores SDL's original internal handler. + * + * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! + * + * \return SDL_assert_state value of how to handle the assertion failure. + * + * \param handler Callback function, called when an assertion fails. + * \param userdata A pointer passed to the callback as-is. + */ +extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( + SDL_AssertionHandler handler, + void *userdata); + +/** + * \brief Get a list of all assertion failures. + * + * Get all assertions triggered since last call to SDL_ResetAssertionReport(), + * or the start of the program. + * + * The proper way to examine this data looks something like this: + * + * + * const SDL_assert_data *item = SDL_GetAssertionReport(); + * while (item) { + * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", + * item->condition, item->function, item->filename, + * item->linenum, item->trigger_count, + * item->always_ignore ? "yes" : "no"); + * item = item->next; + * } + * + * + * \return List of all assertions. + * \sa SDL_ResetAssertionReport + */ +extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void); + +/** + * \brief Reset the list of all assertion failures. + * + * Reset list of all assertions triggered. + * + * \sa SDL_GetAssertionReport + */ +extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_assert_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_atomic.h b/Externals/SDL2-2.0.1/include/SDL_atomic.h new file mode 100644 index 0000000000..48b0053a0f --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_atomic.h @@ -0,0 +1,359 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_atomic.h + * + * Atomic operations. + * + * IMPORTANT: + * If you are not an expert in concurrent lockless programming, you should + * only be using the atomic lock and reference counting functions in this + * file. In all other cases you should be protecting your data structures + * with full mutexes. + * + * The list of "safe" functions to use are: + * SDL_AtomicLock() + * SDL_AtomicUnlock() + * SDL_AtomicIncRef() + * SDL_AtomicDecRef() + * + * Seriously, here be dragons! + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * You can find out a little more about lockless programming and the + * subtle issues that can arise here: + * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx + * + * There's also lots of good information here: + * http://www.1024cores.net/home/lock-free-algorithms + * http://preshing.com/ + * + * These operations may or may not actually be implemented using + * processor specific atomic operations. When possible they are + * implemented as true processor specific atomic operations. When that + * is not possible the are implemented using locks that *do* use the + * available atomic operations. + * + * All of the atomic operations that modify memory are full memory barriers. + */ + +#ifndef _SDL_atomic_h_ +#define _SDL_atomic_h_ + +#include "SDL_stdinc.h" +#include "SDL_platform.h" + +#include "begin_code.h" + +/* Need to do this here because intrin.h has C++ code in it */ +/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) +#include +#define HAVE_MSC_ATOMICS 1 +#endif + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name SDL AtomicLock + * + * The atomic locks are efficient spinlocks using CPU instructions, + * but are vulnerable to starvation and can spin forever if a thread + * holding a lock has been terminated. For this reason you should + * minimize the code executed inside an atomic lock and never do + * expensive things like API or system calls while holding them. + * + * The atomic locks are not safe to lock recursively. + * + * Porting Note: + * The spin lock functions and type are required and can not be + * emulated because they are used in the atomic emulation code. + */ +/* @{ */ + +typedef int SDL_SpinLock; + +/** + * \brief Try to lock a spin lock by setting it to a non-zero value. + * + * \param lock Points to the lock. + * + * \return SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already held. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); + +/** + * \brief Lock a spin lock by setting it to a non-zero value. + * + * \param lock Points to the lock. + */ +extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); + +/** + * \brief Unlock a spin lock by setting it to 0. Always returns immediately + * + * \param lock Points to the lock. + */ +extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); + +/* @} *//* SDL AtomicLock */ + + +/** + * The compiler barrier prevents the compiler from reordering + * reads and writes to globally visible variables across the call. + */ +#if defined(_MSC_VER) && (_MSC_VER > 1200) +void _ReadWriteBarrier(void); +#pragma intrinsic(_ReadWriteBarrier) +#define SDL_CompilerBarrier() _ReadWriteBarrier() +#elif defined(__GNUC__) +#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") +#else +#define SDL_CompilerBarrier() \ +{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } +#endif + +/** + * Memory barriers are designed to prevent reads and writes from being + * reordered by the compiler and being seen out of order on multi-core CPUs. + * + * A typical pattern would be for thread A to write some data and a flag, + * and for thread B to read the flag and get the data. In this case you + * would insert a release barrier between writing the data and the flag, + * guaranteeing that the data write completes no later than the flag is + * written, and you would insert an acquire barrier between reading the + * flag and reading the data, to ensure that all the reads associated + * with the flag have completed. + * + * In this pattern you should always see a release barrier paired with + * an acquire barrier and you should gate the data reads/writes with a + * single flag variable. + * + * For more information on these semantics, take a look at the blog post: + * http://preshing.com/20120913/acquire-and-release-semantics + */ +#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") +#elif defined(__GNUC__) && defined(__arm__) +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) +#ifdef __thumb__ +/* The mcr instruction isn't available in thumb mode, use real functions */ +extern DECLSPEC void SDLCALL SDL_MemoryBarrierRelease(); +extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire(); +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#endif /* __thumb__ */ +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") +#endif /* __GNUC__ && __arm__ */ +#else +/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ +#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() +#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() +#endif + + +/* Platform specific optimized versions of the atomic functions, + * you can disable these by defining SDL_DISABLE_ATOMIC_INLINE + */ +#if defined(SDL_ATOMIC_DISABLED) && SDL_ATOMIC_DISABLED +#define SDL_DISABLE_ATOMIC_INLINE +#endif +#ifndef SDL_DISABLE_ATOMIC_INLINE + +#ifdef HAVE_MSC_ATOMICS + +#define SDL_AtomicSet(a, v) _InterlockedExchange((long*)&(a)->value, (v)) +#define SDL_AtomicAdd(a, v) _InterlockedExchangeAdd((long*)&(a)->value, (v)) +#define SDL_AtomicCAS(a, oldval, newval) (_InterlockedCompareExchange((long*)&(a)->value, (newval), (oldval)) == (oldval)) +#define SDL_AtomicSetPtr(a, v) _InterlockedExchangePointer((a), (v)) +#if _M_IX86 +#define SDL_AtomicCASPtr(a, oldval, newval) (_InterlockedCompareExchange((long*)(a), (long)(newval), (long)(oldval)) == (long)(oldval)) +#else +#define SDL_AtomicCASPtr(a, oldval, newval) (_InterlockedCompareExchangePointer((a), (newval), (oldval)) == (oldval)) +#endif + +#elif defined(__MACOSX__) +#include + +#define SDL_AtomicCAS(a, oldval, newval) OSAtomicCompareAndSwap32Barrier((oldval), (newval), &(a)->value) +#ifdef __LP64__ +#define SDL_AtomicCASPtr(a, oldval, newval) OSAtomicCompareAndSwap64Barrier((int64_t)(oldval), (int64_t)(newval), (int64_t*)(a)) +#else +#define SDL_AtomicCASPtr(a, oldval, newval) OSAtomicCompareAndSwap32Barrier((int32_t)(oldval), (int32_t)(newval), (int32_t*)(a)) +#endif + +#elif defined(HAVE_GCC_ATOMICS) + +#define SDL_AtomicSet(a, v) __sync_lock_test_and_set(&(a)->value, v) +#define SDL_AtomicAdd(a, v) __sync_fetch_and_add(&(a)->value, v) +#define SDL_AtomicSetPtr(a, v) __sync_lock_test_and_set(a, v) +#define SDL_AtomicCAS(a, oldval, newval) __sync_bool_compare_and_swap(&(a)->value, oldval, newval) +#define SDL_AtomicCASPtr(a, oldval, newval) __sync_bool_compare_and_swap(a, oldval, newval) + +#endif + +#endif /* !SDL_DISABLE_ATOMIC_INLINE */ + + +/** + * \brief A type representing an atomic integer value. It is a struct + * so people don't accidentally use numeric operations on it. + */ +#ifndef SDL_atomic_t_defined +typedef struct { int value; } SDL_atomic_t; +#endif + +/** + * \brief Set an atomic variable to a new value if it is currently an old value. + * + * \return SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. + * + * \note If you don't know what this function is for, you shouldn't use it! +*/ +#ifndef SDL_AtomicCAS +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); +#endif + +/** + * \brief Set an atomic variable to a value. + * + * \return The previous value of the atomic variable. + */ +#ifndef SDL_AtomicSet +SDL_FORCE_INLINE int SDL_AtomicSet(SDL_atomic_t *a, int v) +{ + int value; + do { + value = a->value; + } while (!SDL_AtomicCAS(a, value, v)); + return value; +} +#endif + +/** + * \brief Get the value of an atomic variable + */ +#ifndef SDL_AtomicGet +SDL_FORCE_INLINE int SDL_AtomicGet(SDL_atomic_t *a) +{ + int value = a->value; + SDL_CompilerBarrier(); + return value; +} +#endif + +/** + * \brief Add to an atomic variable. + * + * \return The previous value of the atomic variable. + * + * \note This same style can be used for any number operation + */ +#ifndef SDL_AtomicAdd +SDL_FORCE_INLINE int SDL_AtomicAdd(SDL_atomic_t *a, int v) +{ + int value; + do { + value = a->value; + } while (!SDL_AtomicCAS(a, value, (value + v))); + return value; +} +#endif + +/** + * \brief Increment an atomic variable used as a reference count. + */ +#ifndef SDL_AtomicIncRef +#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) +#endif + +/** + * \brief Decrement an atomic variable used as a reference count. + * + * \return SDL_TRUE if the variable reached zero after decrementing, + * SDL_FALSE otherwise + */ +#ifndef SDL_AtomicDecRef +#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) +#endif + +/** + * \brief Set a pointer to a new value if it is currently an old value. + * + * \return SDL_TRUE if the pointer was set, SDL_FALSE otherwise. + * + * \note If you don't know what this function is for, you shouldn't use it! +*/ +#ifndef SDL_AtomicCASPtr +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void* *a, void *oldval, void *newval); +#endif + +/** + * \brief Set a pointer to a value atomically. + * + * \return The previous value of the pointer. + */ +#ifndef SDL_AtomicSetPtr +SDL_FORCE_INLINE void* SDL_AtomicSetPtr(void* *a, void* v) +{ + void* value; + do { + value = *a; + } while (!SDL_AtomicCASPtr(a, value, v)); + return value; +} +#endif + +/** + * \brief Get the value of a pointer atomically. + */ +#ifndef SDL_AtomicGetPtr +SDL_FORCE_INLINE void* SDL_AtomicGetPtr(void* *a) +{ + void* value = *a; + SDL_CompilerBarrier(); + return value; +} +#endif + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#include "close_code.h" + +#endif /* _SDL_atomic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_audio.h b/Externals/SDL2-2.0.1/include/SDL_audio.h new file mode 100644 index 0000000000..b9da236fc5 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_audio.h @@ -0,0 +1,506 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_audio.h + * + * Access to the raw audio mixing buffer for the SDL library. + */ + +#ifndef _SDL_audio_h +#define _SDL_audio_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_endian.h" +#include "SDL_mutex.h" +#include "SDL_thread.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Audio format flags. + * + * These are what the 16 bits in SDL_AudioFormat currently mean... + * (Unspecified bits are always zero). + * + * \verbatim + ++-----------------------sample is signed if set + || + || ++-----------sample is bigendian if set + || || + || || ++---sample is float if set + || || || + || || || +---sample bit size---+ + || || || | | + 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 + \endverbatim + * + * There are macros in SDL 2.0 and later to query these bits. + */ +typedef Uint16 SDL_AudioFormat; + +/** + * \name Audio flags + */ +/* @{ */ + +#define SDL_AUDIO_MASK_BITSIZE (0xFF) +#define SDL_AUDIO_MASK_DATATYPE (1<<8) +#define SDL_AUDIO_MASK_ENDIAN (1<<12) +#define SDL_AUDIO_MASK_SIGNED (1<<15) +#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) +#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) +#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) +#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) +#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) +#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) +#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) + +/** + * \name Audio format flags + * + * Defaults to LSB byte order. + */ +/* @{ */ +#define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ +#define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ +#define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ +#define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ +#define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ +#define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ +#define AUDIO_U16 AUDIO_U16LSB +#define AUDIO_S16 AUDIO_S16LSB +/* @} */ + +/** + * \name int32 support + */ +/* @{ */ +#define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ +#define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ +#define AUDIO_S32 AUDIO_S32LSB +/* @} */ + +/** + * \name float32 support + */ +/* @{ */ +#define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ +#define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ +#define AUDIO_F32 AUDIO_F32LSB +/* @} */ + +/** + * \name Native audio byte ordering + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define AUDIO_U16SYS AUDIO_U16LSB +#define AUDIO_S16SYS AUDIO_S16LSB +#define AUDIO_S32SYS AUDIO_S32LSB +#define AUDIO_F32SYS AUDIO_F32LSB +#else +#define AUDIO_U16SYS AUDIO_U16MSB +#define AUDIO_S16SYS AUDIO_S16MSB +#define AUDIO_S32SYS AUDIO_S32MSB +#define AUDIO_F32SYS AUDIO_F32MSB +#endif +/* @} */ + +/** + * \name Allow change flags + * + * Which audio format changes are allowed when opening a device. + */ +/* @{ */ +#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 +#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 +#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 +#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE) +/* @} */ + +/* @} *//* Audio flags */ + +/** + * This function is called when the audio device needs more data. + * + * \param userdata An application-specific parameter saved in + * the SDL_AudioSpec structure + * \param stream A pointer to the audio data buffer. + * \param len The length of that buffer in bytes. + * + * Once the callback returns, the buffer will no longer be valid. + * Stereo samples are stored in a LRLRLR ordering. + */ +typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, + int len); + +/** + * The calculated values in this structure are calculated by SDL_OpenAudio(). + */ +typedef struct SDL_AudioSpec +{ + int freq; /**< DSP frequency -- samples per second */ + SDL_AudioFormat format; /**< Audio data format */ + Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ + Uint8 silence; /**< Audio buffer silence value (calculated) */ + Uint16 samples; /**< Audio buffer size in samples (power of 2) */ + Uint16 padding; /**< Necessary for some compile environments */ + Uint32 size; /**< Audio buffer size in bytes (calculated) */ + SDL_AudioCallback callback; + void *userdata; +} SDL_AudioSpec; + + +struct SDL_AudioCVT; +typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, + SDL_AudioFormat format); + +/** + * A structure to hold a set of audio conversion filters and buffers. + */ +#ifdef __GNUC__ +/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't + pad it out to 88 bytes to guarantee ABI compatibility between compilers. + vvv + The next time we rev the ABI, make sure to size the ints and add padding. +*/ +#define SDL_AUDIOCVT_PACKED __attribute__((packed)) +#else +#define SDL_AUDIOCVT_PACKED +#endif +/* */ +typedef struct SDL_AudioCVT +{ + int needed; /**< Set to 1 if conversion possible */ + SDL_AudioFormat src_format; /**< Source audio format */ + SDL_AudioFormat dst_format; /**< Target audio format */ + double rate_incr; /**< Rate conversion increment */ + Uint8 *buf; /**< Buffer to hold entire audio data */ + int len; /**< Length of original audio buffer */ + int len_cvt; /**< Length of converted audio buffer */ + int len_mult; /**< buffer must be len*len_mult big */ + double len_ratio; /**< Given len, final size is len*len_ratio */ + SDL_AudioFilter filters[10]; /**< Filter list */ + int filter_index; /**< Current audio conversion function */ +} SDL_AUDIOCVT_PACKED SDL_AudioCVT; + + +/* Function prototypes */ + +/** + * \name Driver discovery functions + * + * These functions return the list of built in audio drivers, in the + * order that they are normally initialized by default. + */ +/* @{ */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); +extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); +/* @} */ + +/** + * \name Initialization and cleanup + * + * \internal These functions are used internally, and should not be used unless + * you have a specific need to specify the audio driver you want to + * use. You should normally use SDL_Init() or SDL_InitSubSystem(). + */ +/* @{ */ +extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); +extern DECLSPEC void SDLCALL SDL_AudioQuit(void); +/* @} */ + +/** + * This function returns the name of the current audio driver, or NULL + * if no driver has been initialized. + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); + +/** + * This function opens the audio device with the desired parameters, and + * returns 0 if successful, placing the actual hardware parameters in the + * structure pointed to by \c obtained. If \c obtained is NULL, the audio + * data passed to the callback function will be guaranteed to be in the + * requested format, and will be automatically converted to the hardware + * audio format if necessary. This function returns -1 if it failed + * to open the audio device, or couldn't set up the audio thread. + * + * When filling in the desired audio spec structure, + * - \c desired->freq should be the desired audio frequency in samples-per- + * second. + * - \c desired->format should be the desired audio format. + * - \c desired->samples is the desired size of the audio buffer, in + * samples. This number should be a power of two, and may be adjusted by + * the audio driver to a value more suitable for the hardware. Good values + * seem to range between 512 and 8096 inclusive, depending on the + * application and CPU speed. Smaller values yield faster response time, + * but can lead to underflow if the application is doing heavy processing + * and cannot fill the audio buffer in time. A stereo sample consists of + * both right and left channels in LR ordering. + * Note that the number of samples is directly related to time by the + * following formula: \code ms = (samples*1000)/freq \endcode + * - \c desired->size is the size in bytes of the audio buffer, and is + * calculated by SDL_OpenAudio(). + * - \c desired->silence is the value used to set the buffer to silence, + * and is calculated by SDL_OpenAudio(). + * - \c desired->callback should be set to a function that will be called + * when the audio device is ready for more data. It is passed a pointer + * to the audio buffer, and the length in bytes of the audio buffer. + * This function usually runs in a separate thread, and so you should + * protect data structures that it accesses by calling SDL_LockAudio() + * and SDL_UnlockAudio() in your code. + * - \c desired->userdata is passed as the first parameter to your callback + * function. + * + * The audio device starts out playing silence when it's opened, and should + * be enabled for playing by calling \c SDL_PauseAudio(0) when you are ready + * for your audio callback function to be called. Since the audio driver + * may modify the requested size of the audio buffer, you should allocate + * any local mixing buffers after you open the audio device. + */ +extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, + SDL_AudioSpec * obtained); + +/** + * SDL Audio Device IDs. + * + * A successful call to SDL_OpenAudio() is always device id 1, and legacy + * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls + * always returns devices >= 2 on success. The legacy calls are good both + * for backwards compatibility and when you don't care about multiple, + * specific, or capture devices. + */ +typedef Uint32 SDL_AudioDeviceID; + +/** + * Get the number of available devices exposed by the current driver. + * Only valid after a successfully initializing the audio subsystem. + * Returns -1 if an explicit list of devices can't be determined; this is + * not an error. For example, if SDL is set up to talk to a remote audio + * server, it can't list every one available on the Internet, but it will + * still allow a specific host to be specified to SDL_OpenAudioDevice(). + * + * In many common cases, when this function returns a value <= 0, it can still + * successfully open the default device (NULL for first argument of + * SDL_OpenAudioDevice()). + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); + +/** + * Get the human-readable name of a specific audio device. + * Must be a value between 0 and (number of audio devices-1). + * Only valid after a successfully initializing the audio subsystem. + * The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); recall that function to redetect available + * hardware. + * + * The string returned by this function is UTF-8 encoded, read-only, and + * managed internally. You are not to free it. If you need to keep the + * string for any length of time, you should make your own copy of it, as it + * will be invalid next time any of several other SDL functions is called. + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, + int iscapture); + + +/** + * Open a specific audio device. Passing in a device name of NULL requests + * the most reasonable default (and is equivalent to calling SDL_OpenAudio()). + * + * The device name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but + * some drivers allow arbitrary and driver-specific strings, such as a + * hostname/IP address for a remote audio server, or a filename in the + * diskaudio driver. + * + * \return 0 on error, a valid device ID that is >= 2 on success. + * + * SDL_OpenAudio(), unlike this function, always acts on device ID 1. + */ +extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice(const char + *device, + int iscapture, + const + SDL_AudioSpec * + desired, + SDL_AudioSpec * + obtained, + int + allowed_changes); + + + +/** + * \name Audio state + * + * Get the current audio state. + */ +/* @{ */ +typedef enum +{ + SDL_AUDIO_STOPPED = 0, + SDL_AUDIO_PLAYING, + SDL_AUDIO_PAUSED +} SDL_AudioStatus; +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); + +extern DECLSPEC SDL_AudioStatus SDLCALL +SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); +/* @} *//* Audio State */ + +/** + * \name Pause audio functions + * + * These functions pause and unpause the audio callback processing. + * They should be called with a parameter of 0 after opening the audio + * device to start playing sound. This is so you can safely initialize + * data for your callback function after opening the audio device. + * Silence will be written to the audio device during the pause. + */ +/* @{ */ +extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); +extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, + int pause_on); +/* @} *//* Pause audio functions */ + +/** + * This function loads a WAVE from the data source, automatically freeing + * that source if \c freesrc is non-zero. For example, to load a WAVE file, + * you could do: + * \code + * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); + * \endcode + * + * If this function succeeds, it returns the given SDL_AudioSpec, + * filled with the audio data format of the wave data, and sets + * \c *audio_buf to a malloc()'d buffer containing the audio data, + * and sets \c *audio_len to the length of that audio buffer, in bytes. + * You need to free the audio buffer with SDL_FreeWAV() when you are + * done with it. + * + * This function returns NULL and sets the SDL error message if the + * wave file cannot be opened, uses an unknown data format, or is + * corrupt. Currently raw and MS-ADPCM WAVE files are supported. + */ +extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, + int freesrc, + SDL_AudioSpec * spec, + Uint8 ** audio_buf, + Uint32 * audio_len); + +/** + * Loads a WAV from a file. + * Compatibility convenience function. + */ +#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ + SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) + +/** + * This function frees data previously allocated with SDL_LoadWAV_RW() + */ +extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); + +/** + * This function takes a source format and rate and a destination format + * and rate, and initializes the \c cvt structure with information needed + * by SDL_ConvertAudio() to convert a buffer of audio data from one format + * to the other. + * + * \return -1 if the format conversion is not supported, 0 if there's + * no conversion needed, or 1 if the audio filter is set up. + */ +extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, + SDL_AudioFormat src_format, + Uint8 src_channels, + int src_rate, + SDL_AudioFormat dst_format, + Uint8 dst_channels, + int dst_rate); + +/** + * Once you have initialized the \c cvt structure using SDL_BuildAudioCVT(), + * created an audio buffer \c cvt->buf, and filled it with \c cvt->len bytes of + * audio data in the source format, this function will convert it in-place + * to the desired format. + * + * The data conversion may expand the size of the audio data, so the buffer + * \c cvt->buf should be allocated after the \c cvt structure is initialized by + * SDL_BuildAudioCVT(), and should be \c cvt->len*cvt->len_mult bytes long. + */ +extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); + +#define SDL_MIX_MAXVOLUME 128 +/** + * This takes two audio buffers of the playing audio format and mixes + * them, performing addition, volume adjustment, and overflow clipping. + * The volume ranges from 0 - 128, and should be set to ::SDL_MIX_MAXVOLUME + * for full audio volume. Note this does not change hardware volume. + * This is provided for convenience -- you can mix your own audio data. + */ +extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, + Uint32 len, int volume); + +/** + * This works like SDL_MixAudio(), but you specify the audio format instead of + * using the format of audio device 1. Thus it can be used when no audio + * device is open at all. + */ +extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, + const Uint8 * src, + SDL_AudioFormat format, + Uint32 len, int volume); + +/** + * \name Audio lock functions + * + * The lock manipulated by these functions protects the callback function. + * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that + * the callback function is not running. Do not call these from the callback + * function or you will cause deadlock. + */ +/* @{ */ +extern DECLSPEC void SDLCALL SDL_LockAudio(void); +extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); +extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); +extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); +/* @} *//* Audio lock functions */ + +/** + * This function shuts down audio processing and closes the audio device. + */ +extern DECLSPEC void SDLCALL SDL_CloseAudio(void); +extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_audio_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_bits.h b/Externals/SDL2-2.0.1/include/SDL_bits.h new file mode 100644 index 0000000000..b1ed20bf72 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_bits.h @@ -0,0 +1,97 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_bits.h + * + * Functions for fiddling with bits and bitmasks. + */ + +#ifndef _SDL_bits_h +#define _SDL_bits_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_bits.h + */ + +/** + * Get the index of the most significant bit. Result is undefined when called + * with 0. This operation can also be stated as "count leading zeroes" and + * "log base 2". + * + * \return Index of the most significant bit, or -1 if the value is 0. + */ +SDL_FORCE_INLINE int +SDL_MostSignificantBitIndex32(Uint32 x) +{ +#if defined(__GNUC__) && __GNUC__ >= 4 + /* Count Leading Zeroes builtin in GCC. + * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html + */ + if (x == 0) { + return -1; + } + return 31 - __builtin_clz(x); +#else + /* Based off of Bit Twiddling Hacks by Sean Eron Anderson + * , released in the public domain. + * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog + */ + const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; + const int S[] = {1, 2, 4, 8, 16}; + + int msbIndex = 0; + int i; + + if (x == 0) { + return -1; + } + + for (i = 4; i >= 0; i--) + { + if (x & b[i]) + { + x >>= S[i]; + msbIndex |= S[i]; + } + } + + return msbIndex; +#endif +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_bits_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_blendmode.h b/Externals/SDL2-2.0.1/include/SDL_blendmode.h new file mode 100644 index 0000000000..85aa474595 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_blendmode.h @@ -0,0 +1,63 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_blendmode.h + * + * Header file declaring the SDL_BlendMode enumeration + */ + +#ifndef _SDL_blendmode_h +#define _SDL_blendmode_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The blend mode used in SDL_RenderCopy() and drawing operations. + */ +typedef enum +{ + SDL_BLENDMODE_NONE = 0x00000000, /**< no blending + dstRGBA = srcRGBA */ + SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending + dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) + dstA = srcA + (dstA * (1-srcA)) */ + SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending + dstRGB = (srcRGB * srcA) + dstRGB + dstA = dstA */ + SDL_BLENDMODE_MOD = 0x00000004 /**< color modulate + dstRGB = srcRGB * dstRGB + dstA = dstA */ +} SDL_BlendMode; + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_video_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_clipboard.h b/Externals/SDL2-2.0.1/include/SDL_clipboard.h new file mode 100644 index 0000000000..1f5742d167 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_clipboard.h @@ -0,0 +1,71 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_clipboard.h + * + * Include file for SDL clipboard handling + */ + +#ifndef _SDL_clipboard_h +#define _SDL_clipboard_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/** + * \brief Put UTF-8 text into the clipboard + * + * \sa SDL_GetClipboardText() + */ +extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); + +/** + * \brief Get UTF-8 text from the clipboard, which must be freed with SDL_free() + * + * \sa SDL_SetClipboardText() + */ +extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); + +/** + * \brief Returns a flag indicating whether the clipboard exists and contains a text string that is non-empty + * + * \sa SDL_GetClipboardText() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_clipboard_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_config_win32.h b/Externals/SDL2-2.0.1/include/SDL_config.h similarity index 54% rename from Externals/SDL/Include_1.3/SDL_config_win32.h rename to Externals/SDL2-2.0.1/include/SDL_config.h index 9d0da4dcd8..4d5c7c293f 100644 --- a/Externals/SDL/Include_1.3/SDL_config_win32.h +++ b/Externals/SDL2-2.0.1/include/SDL_config.h @@ -1,34 +1,34 @@ /* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ -#ifndef _SDL_config_win32_h -#define _SDL_config_win32_h +#ifndef _SDL_config_windows_h +#define _SDL_config_windows_h #include "SDL_platform.h" /* This is a set of defines to configure the SDL features */ -#if defined(__GNUC__) || defined(__DMC__) -#define HAVE_STDINT_H 1 +#if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) +#if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) +#define HAVE_STDINT_H 1 #elif defined(_MSC_VER) typedef signed __int8 int8_t; typedef unsigned __int8 uint8_t; @@ -68,10 +68,15 @@ typedef unsigned int size_t; #endif typedef unsigned int uintptr_t; #endif /* __GNUC__ || _MSC_VER */ -#define SDL_HAS_64BIT_TYPE 1 +#endif /* !_STDINT_H_ && !HAVE_STDINT_H */ -/* Enabled for SDL 1.2 (binary compatibility) */ -//#define HAVE_LIBC 1 +#ifdef _WIN64 +# define SIZEOF_VOIDP 8 +#else +# define SIZEOF_VOIDP 4 +#endif + +/* This is disabled by default to avoid C runtime dependencies and manifest requirements */ #ifdef HAVE_LIBC /* Useful headers */ #define HAVE_STDIO_H 1 @@ -79,9 +84,7 @@ typedef unsigned int uintptr_t; #define HAVE_STRING_H 1 #define HAVE_CTYPE_H 1 #define HAVE_MATH_H 1 -#ifndef _WIN32_WCE #define HAVE_SIGNAL_H 1 -#endif /* C library functions */ #define HAVE_MALLOC 1 @@ -102,12 +105,10 @@ typedef unsigned int uintptr_t; #define HAVE_STRCHR 1 #define HAVE_STRRCHR 1 #define HAVE_STRSTR 1 -#define HAVE_ITOA 1 #define HAVE__LTOA 1 #define HAVE__ULTOA 1 #define HAVE_STRTOL 1 #define HAVE_STRTOUL 1 -#define HAVE_STRTOLL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 #define HAVE_ATOF 1 @@ -115,79 +116,80 @@ typedef unsigned int uintptr_t; #define HAVE_STRNCMP 1 #define HAVE__STRICMP 1 #define HAVE__STRNICMP 1 -#define HAVE_SSCANF 1 -#define HAVE_M_PI 1 +#define HAVE_ATAN 1 +#define HAVE_ATAN2 1 #define HAVE_CEIL 1 -#define HAVE_COPYSIGN 1 #define HAVE_COS 1 #define HAVE_COSF 1 #define HAVE_FABS 1 #define HAVE_FLOOR 1 #define HAVE_LOG 1 #define HAVE_POW 1 -#define HAVE_SCALBN 1 #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#if _MSC_VER >= 1800 +#define HAVE_STRTOLL 1 +#define HAVE_SSCANF 1 +#define HAVE_COPYSIGN 1 +#define HAVE_SCALBN 1 +#endif +#if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES) +#define HAVE_M_PI 1 +#endif #else -#define HAVE_STDARG_H 1 -#define HAVE_STDDEF_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_STDDEF_H 1 #endif /* Enable various audio drivers */ -#ifndef _WIN32_WCE -#define SDL_AUDIO_DRIVER_DSOUND 1 -#endif -#define SDL_AUDIO_DRIVER_WINWAVEOUT 1 -#define SDL_AUDIO_DRIVER_DISK 1 -#define SDL_AUDIO_DRIVER_DUMMY 1 - -/* Enable various cdrom drivers */ -#ifdef _WIN32_WCE -#define SDL_CDROM_DISABLED 1 -#else -#define SDL_CDROM_WIN32 1 -#endif +#define SDL_AUDIO_DRIVER_DSOUND 1 +#define SDL_AUDIO_DRIVER_XAUDIO2 1 +#define SDL_AUDIO_DRIVER_WINMM 1 +#define SDL_AUDIO_DRIVER_DISK 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable various input drivers */ -#ifdef _WIN32_WCE -#define SDL_JOYSTICK_DISABLED 1 -#define SDL_HAPTIC_DUMMY 1 -#else -#define SDL_JOYSTICK_DINPUT 1 -#define SDL_HAPTIC_DINPUT 1 -#endif +#define SDL_JOYSTICK_DINPUT 1 +#define SDL_HAPTIC_DINPUT 1 /* Enable various shared object loading systems */ -#define SDL_LOADSO_WIN32 1 +#define SDL_LOADSO_WINDOWS 1 /* Enable various threading systems */ -#define SDL_THREAD_WIN32 1 +#define SDL_THREAD_WINDOWS 1 /* Enable various timer systems */ -#ifdef _WIN32_WCE -#define SDL_TIMER_WINCE 1 -#else -#define SDL_TIMER_WIN32 1 -#endif +#define SDL_TIMER_WINDOWS 1 /* Enable various video drivers */ -#define SDL_VIDEO_DRIVER_DUMMY 1 -#define SDL_VIDEO_DRIVER_WIN32 1 +#define SDL_VIDEO_DRIVER_DUMMY 1 +#define SDL_VIDEO_DRIVER_WINDOWS 1 -#define SDL_VIDEO_RENDER_D3D 1 -#define SDL_VIDEO_RENDER_GDI 1 +#ifndef SDL_VIDEO_RENDER_D3D +#define SDL_VIDEO_RENDER_D3D 1 +#endif /* Enable OpenGL support */ -#ifndef _WIN32_WCE -#define SDL_VIDEO_OPENGL 1 -#define SDL_VIDEO_OPENGL_WGL 1 -#define SDL_VIDEO_RENDER_OGL 1 +#ifndef SDL_VIDEO_OPENGL +#define SDL_VIDEO_OPENGL 1 #endif +#ifndef SDL_VIDEO_OPENGL_WGL +#define SDL_VIDEO_OPENGL_WGL 1 +#endif +#ifndef SDL_VIDEO_RENDER_OGL +#define SDL_VIDEO_RENDER_OGL 1 +#endif + +/* Enable system power support */ +#define SDL_POWER_WINDOWS 1 + +/* Enable filesystem support */ +#define SDL_FILESYSTEM_WINDOWS 1 /* Enable assembly routines (Win64 doesn't have inline asm) */ #ifndef _WIN64 -#define SDL_ASSEMBLY_ROUTINES 1 +#define SDL_ASSEMBLY_ROUTINES 1 #endif -#endif /* _SDL_config_win32_h */ +#endif /* _SDL_config_windows_h */ diff --git a/Externals/SDL2-2.0.1/include/SDL_cpuinfo.h b/Externals/SDL2-2.0.1/include/SDL_cpuinfo.h new file mode 100644 index 0000000000..6d72bbb81c --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_cpuinfo.h @@ -0,0 +1,151 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_cpuinfo.h + * + * CPU feature detection for SDL. + */ + +#ifndef _SDL_cpuinfo_h +#define _SDL_cpuinfo_h + +#include "SDL_stdinc.h" + +/* Need to do this here because intrin.h has C++ code in it */ +/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) +#include +#ifndef _WIN64 +#define __MMX__ +#define __3dNOW__ +#endif +#define __SSE__ +#define __SSE2__ +#elif defined(__MINGW64_VERSION_MAJOR) +#include +#else +#ifdef __ALTIVEC__ +#if HAVE_ALTIVEC_H && !defined(__APPLE_ALTIVEC__) +#include +#undef pixel +#endif +#endif +#ifdef __MMX__ +#include +#endif +#ifdef __3dNOW__ +#include +#endif +#ifdef __SSE__ +#include +#endif +#ifdef __SSE2__ +#include +#endif +#endif + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This is a guess for the cacheline size used for padding. + * Most x86 processors have a 64 byte cache line. + * The 64-bit PowerPC processors have a 128 byte cache line. + * We'll use the larger value to be generally safe. + */ +#define SDL_CACHELINE_SIZE 128 + +/** + * This function returns the number of CPU cores available. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); + +/** + * This function returns the L1 cache line size of the CPU + * + * This is useful for determining multi-threaded structure padding + * or SIMD prefetch sizes. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); + +/** + * This function returns true if the CPU has the RDTSC instruction. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); + +/** + * This function returns true if the CPU has AltiVec features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); + +/** + * This function returns true if the CPU has MMX features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); + +/** + * This function returns true if the CPU has 3DNow! features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); + +/** + * This function returns true if the CPU has SSE features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); + +/** + * This function returns true if the CPU has SSE2 features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); + +/** + * This function returns true if the CPU has SSE3 features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); + +/** + * This function returns true if the CPU has SSE4.1 features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); + +/** + * This function returns true if the CPU has SSE4.2 features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); + +/** + * This function returns the amount of RAM configured in the system, in MB. + */ +extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_cpuinfo_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_endian.h b/Externals/SDL2-2.0.1/include/SDL_endian.h similarity index 51% rename from Externals/SDL/Include_1.3/SDL_endian.h rename to Externals/SDL2-2.0.1/include/SDL_endian.h index db06dafd8f..3450316c0a 100644 --- a/Externals/SDL/Include_1.3/SDL_endian.h +++ b/Externals/SDL2-2.0.1/include/SDL_endian.h @@ -1,29 +1,28 @@ /* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ /** - * \file SDL_endian.h + * \file SDL_endian.h * - * Functions for reading and writing endian-specific values + * Functions for reading and writing endian-specific values */ #ifndef _SDL_endian_h @@ -31,91 +30,96 @@ #include "SDL_stdinc.h" -/* The two types of endianness */ -#define SDL_LIL_ENDIAN 1234 -#define SDL_BIG_ENDIAN 4321 +/** + * \name The two types of endianness + */ +/* @{ */ +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 +/* @} */ #ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +#ifdef __linux__ +#include +#define SDL_BYTEORDER __BYTE_ORDER +#else /* __linux __ */ #if defined(__hppa__) || \ defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ (defined(__MIPS__) && defined(__MISPEB__)) || \ defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ defined(__sparc__) -#define SDL_BYTEORDER SDL_BIG_ENDIAN +#define SDL_BYTEORDER SDL_BIG_ENDIAN #else -#define SDL_BYTEORDER SDL_LIL_ENDIAN +#define SDL_BYTEORDER SDL_LIL_ENDIAN #endif +#endif /* __linux __ */ #endif /* !SDL_BYTEORDER */ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus -/* *INDENT-OFF* */ extern "C" { -/* *INDENT-ON* */ #endif -/* Use inline functions for compilers that support them, and static - functions for those that do not. Because these functions become - static for compilers that do not support inline functions, this - header should only be included in files that actually use them. -*/ +/** + * \file SDL_endian.h + */ #if defined(__GNUC__) && defined(__i386__) && \ !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) -static __inline__ Uint16 +SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); return x; } #elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint16 +SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); return x; } #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) -static __inline__ Uint16 +SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { - Uint16 result; + int result; __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); - return result; + return (Uint16)result; } -#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) -static __inline__ Uint16 +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); return x; } #else -static __inline__ Uint16 +SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { - return ((x << 8) | (x >> 8)); + return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); } #endif #if defined(__GNUC__) && defined(__i386__) -static __inline__ Uint32 +SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { __asm__("bswap %0": "=r"(x):"0"(x)); return x; } #elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint32 +SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { __asm__("bswapl %0": "=r"(x):"0"(x)); return x; } #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) -static __inline__ Uint32 +SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { Uint32 result; @@ -125,25 +129,24 @@ SDL_Swap32(Uint32 x) __asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x)); return result; } -#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) -static __inline__ Uint32 +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); return x; } #else -static __inline__ Uint32 +SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { - return ((x << 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | - (x >> 24)); + return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | (x >> 24))); } #endif -#ifdef SDL_HAS_64BIT_TYPE #if defined(__GNUC__) && defined(__i386__) -static __inline__ Uint64 +SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { union @@ -161,38 +164,31 @@ SDL_Swap64(Uint64 x) return v.u; } #elif defined(__GNUC__) && defined(__x86_64__) -static __inline__ Uint64 +SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { __asm__("bswapq %0": "=r"(x):"0"(x)); return x; } #else -static __inline__ Uint64 +SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { Uint32 hi, lo; /* Separate into high and low 32-bit values and swap them */ - lo = (Uint32) (x & 0xFFFFFFFF); + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); x >>= 32; - hi = (Uint32) (x & 0xFFFFFFFF); + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); x = SDL_Swap32(lo); x <<= 32; x |= SDL_Swap32(hi); return (x); } #endif -#else -/* This is mainly to keep compilers from complaining in SDL code. - If there is no real 64-bit datatype, then compilers will complain about - the fake 64-bit datatype that SDL provides when it compiles user code. -*/ -#define SDL_Swap64(X) (X) -#endif /* SDL_HAS_64BIT_TYPE */ -static __inline__ float +SDL_FORCE_INLINE float SDL_SwapFloat(float x) { union @@ -206,32 +202,35 @@ SDL_SwapFloat(float x) } -/* Byteswap item from the specified endianness to the native endianness */ +/** + * \name Swap to native + * Byteswap item from the specified endianness to the native endianness. + */ +/* @{ */ #if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define SDL_SwapLE16(X) (X) -#define SDL_SwapLE32(X) (X) -#define SDL_SwapLE64(X) (X) -#define SDL_SwapFloatLE(X) (X) -#define SDL_SwapBE16(X) SDL_Swap16(X) -#define SDL_SwapBE32(X) SDL_Swap32(X) -#define SDL_SwapBE64(X) SDL_Swap64(X) -#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapFloatLE(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) #else -#define SDL_SwapLE16(X) SDL_Swap16(X) -#define SDL_SwapLE32(X) SDL_Swap32(X) -#define SDL_SwapLE64(X) SDL_Swap64(X) -#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) -#define SDL_SwapBE16(X) (X) -#define SDL_SwapBE32(X) (X) -#define SDL_SwapBE64(X) (X) -#define SDL_SwapFloatBE(X) (X) +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#define SDL_SwapFloatBE(X) (X) #endif +/* @} *//* Swap to native */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus -/* *INDENT-OFF* */ } -/* *INDENT-ON* */ #endif #include "close_code.h" diff --git a/Externals/SDL2-2.0.1/include/SDL_error.h b/Externals/SDL2-2.0.1/include/SDL_error.h new file mode 100644 index 0000000000..2b8bb4165f --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_error.h @@ -0,0 +1,76 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_error.h + * + * Simple error message routines for SDL. + */ + +#ifndef _SDL_error_h +#define _SDL_error_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Public functions */ +/* SDL_SetError() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_SetError(const char *fmt, ...); +extern DECLSPEC const char *SDLCALL SDL_GetError(void); +extern DECLSPEC void SDLCALL SDL_ClearError(void); + +/** + * \name Internal error functions + * + * \internal + * Private error reporting function - used internally. + */ +/* @{ */ +#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) +#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) +#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) +typedef enum +{ + SDL_ENOMEM, + SDL_EFREAD, + SDL_EFWRITE, + SDL_EFSEEK, + SDL_UNSUPPORTED, + SDL_LASTERROR +} SDL_errorcode; +/* SDL_Error() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); +/* @} *//* Internal error functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_error_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_events.h b/Externals/SDL2-2.0.1/include/SDL_events.h new file mode 100644 index 0000000000..c08903073a --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_events.h @@ -0,0 +1,720 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_events.h + * + * Include file for SDL event handling. + */ + +#ifndef _SDL_events_h +#define _SDL_events_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" +#include "SDL_keyboard.h" +#include "SDL_mouse.h" +#include "SDL_joystick.h" +#include "SDL_gamecontroller.h" +#include "SDL_quit.h" +#include "SDL_gesture.h" +#include "SDL_touch.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* General keyboard/mouse state definitions */ +#define SDL_RELEASED 0 +#define SDL_PRESSED 1 + +/** + * \brief The types of events that can be delivered. + */ +typedef enum +{ + SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ + + /* Application events */ + SDL_QUIT = 0x100, /**< User-requested quit */ + + /* These application events have special meaning on iOS, see README-ios.txt for details */ + SDL_APP_TERMINATING, /**< The application is being terminated by the OS + Called on iOS in applicationWillTerminate() + Called on Android in onDestroy() + */ + SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. + Called on iOS in applicationDidReceiveMemoryWarning() + Called on Android in onLowMemory() + */ + SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background + Called on iOS in applicationWillResignActive() + Called on Android in onPause() + */ + SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time + Called on iOS in applicationDidEnterBackground() + Called on Android in onPause() + */ + SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground + Called on iOS in applicationWillEnterForeground() + Called on Android in onResume() + */ + SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive + Called on iOS in applicationDidBecomeActive() + Called on Android in onResume() + */ + + /* Window events */ + SDL_WINDOWEVENT = 0x200, /**< Window state change */ + SDL_SYSWMEVENT, /**< System specific event */ + + /* Keyboard events */ + SDL_KEYDOWN = 0x300, /**< Key pressed */ + SDL_KEYUP, /**< Key released */ + SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ + SDL_TEXTINPUT, /**< Keyboard text input */ + + /* Mouse events */ + SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ + SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ + SDL_MOUSEBUTTONUP, /**< Mouse button released */ + SDL_MOUSEWHEEL, /**< Mouse wheel motion */ + + /* Joystick events */ + SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ + SDL_JOYBALLMOTION, /**< Joystick trackball motion */ + SDL_JOYHATMOTION, /**< Joystick hat position change */ + SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ + SDL_JOYBUTTONUP, /**< Joystick button released */ + SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ + SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ + + /* Game controller events */ + SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ + SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ + SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ + SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ + SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ + SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ + + /* Touch events */ + SDL_FINGERDOWN = 0x700, + SDL_FINGERUP, + SDL_FINGERMOTION, + + /* Gesture events */ + SDL_DOLLARGESTURE = 0x800, + SDL_DOLLARRECORD, + SDL_MULTIGESTURE, + + /* Clipboard events */ + SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */ + + /* Drag and drop events */ + SDL_DROPFILE = 0x1000, /**< The system requests a file open */ + + /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, + * and should be allocated with SDL_RegisterEvents() + */ + SDL_USEREVENT = 0x8000, + + /** + * This last event is only for bounding internal arrays + */ + SDL_LASTEVENT = 0xFFFF +} SDL_EventType; + +/** + * \brief Fields shared by every event + */ +typedef struct SDL_CommonEvent +{ + Uint32 type; + Uint32 timestamp; +} SDL_CommonEvent; + +/** + * \brief Window state change event data (event.window.*) + */ +typedef struct SDL_WindowEvent +{ + Uint32 type; /**< ::SDL_WINDOWEVENT */ + Uint32 timestamp; + Uint32 windowID; /**< The associated window */ + Uint8 event; /**< ::SDL_WindowEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ + Sint32 data2; /**< event dependent data */ +} SDL_WindowEvent; + +/** + * \brief Keyboard button event structure (event.key.*) + */ +typedef struct SDL_KeyboardEvent +{ + Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ + Uint32 timestamp; + Uint32 windowID; /**< The window with keyboard focus, if any */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 repeat; /**< Non-zero if this is a key repeat */ + Uint8 padding2; + Uint8 padding3; + SDL_Keysym keysym; /**< The key that was pressed or released */ +} SDL_KeyboardEvent; + +#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text editing event structure (event.edit.*) + */ +typedef struct SDL_TextEditingEvent +{ + Uint32 type; /**< ::SDL_TEXTEDITING */ + Uint32 timestamp; + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingEvent; + + +#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text input event structure (event.text.*) + */ +typedef struct SDL_TextInputEvent +{ + Uint32 type; /**< ::SDL_TEXTINPUT */ + Uint32 timestamp; + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ +} SDL_TextInputEvent; + +/** + * \brief Mouse motion event structure (event.motion.*) + */ +typedef struct SDL_MouseMotionEvent +{ + Uint32 type; /**< ::SDL_MOUSEMOTION */ + Uint32 timestamp; + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint32 state; /**< The current button state */ + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ + Sint32 xrel; /**< The relative motion in the X direction */ + Sint32 yrel; /**< The relative motion in the Y direction */ +} SDL_MouseMotionEvent; + +/** + * \brief Mouse button event structure (event.button.*) + */ +typedef struct SDL_MouseButtonEvent +{ + Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ + Uint32 timestamp; + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint8 button; /**< The mouse button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ +} SDL_MouseButtonEvent; + +/** + * \brief Mouse wheel event structure (event.wheel.*) + */ +typedef struct SDL_MouseWheelEvent +{ + Uint32 type; /**< ::SDL_MOUSEWHEEL */ + Uint32 timestamp; + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Sint32 x; /**< The amount scrolled horizontally */ + Sint32 y; /**< The amount scrolled vertically */ +} SDL_MouseWheelEvent; + +/** + * \brief Joystick axis motion event structure (event.jaxis.*) + */ +typedef struct SDL_JoyAxisEvent +{ + Uint32 type; /**< ::SDL_JOYAXISMOTION */ + Uint32 timestamp; + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The joystick axis index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_JoyAxisEvent; + +/** + * \brief Joystick trackball motion event structure (event.jball.*) + */ +typedef struct SDL_JoyBallEvent +{ + Uint32 type; /**< ::SDL_JOYBALLMOTION */ + Uint32 timestamp; + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 ball; /**< The joystick trackball index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 xrel; /**< The relative motion in the X direction */ + Sint16 yrel; /**< The relative motion in the Y direction */ +} SDL_JoyBallEvent; + +/** + * \brief Joystick hat position change event structure (event.jhat.*) + */ +typedef struct SDL_JoyHatEvent +{ + Uint32 type; /**< ::SDL_JOYHATMOTION */ + Uint32 timestamp; + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 hat; /**< The joystick hat index */ + Uint8 value; /**< The hat position value. + * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP + * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT + * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN + * + * Note that zero means the POV is centered. + */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyHatEvent; + +/** + * \brief Joystick button event structure (event.jbutton.*) + */ +typedef struct SDL_JoyButtonEvent +{ + Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ + Uint32 timestamp; + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The joystick button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyButtonEvent; + +/** + * \brief Joystick device event structure (event.jdevice.*) + */ +typedef struct SDL_JoyDeviceEvent +{ + Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ + Uint32 timestamp; + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ +} SDL_JoyDeviceEvent; + + +/** + * \brief Game controller axis motion event structure (event.caxis.*) + */ +typedef struct SDL_ControllerAxisEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ + Uint32 timestamp; + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_ControllerAxisEvent; + + +/** + * \brief Game controller button event structure (event.cbutton.*) + */ +typedef struct SDL_ControllerButtonEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ + Uint32 timestamp; + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The controller button (SDL_GameControllerButton) */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_ControllerButtonEvent; + + +/** + * \brief Controller device event structure (event.cdevice.*) + */ +typedef struct SDL_ControllerDeviceEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ + Uint32 timestamp; + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ +} SDL_ControllerDeviceEvent; + + +/** + * \brief Touch finger event structure (event.tfinger.*) + */ +typedef struct SDL_TouchFingerEvent +{ + Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ + Uint32 timestamp; + SDL_TouchID touchId; /**< The touch device id */ + SDL_FingerID fingerId; + float x; /**< Normalized in the range 0...1 */ + float y; /**< Normalized in the range 0...1 */ + float dx; /**< Normalized in the range 0...1 */ + float dy; /**< Normalized in the range 0...1 */ + float pressure; /**< Normalized in the range 0...1 */ +} SDL_TouchFingerEvent; + + +/** + * \brief Multiple Finger Gesture Event (event.mgesture.*) + */ +typedef struct SDL_MultiGestureEvent +{ + Uint32 type; /**< ::SDL_MULTIGESTURE */ + Uint32 timestamp; + SDL_TouchID touchId; /**< The touch device index */ + float dTheta; + float dDist; + float x; + float y; + Uint16 numFingers; + Uint16 padding; +} SDL_MultiGestureEvent; + + +/** + * \brief Dollar Gesture Event (event.dgesture.*) + */ +typedef struct SDL_DollarGestureEvent +{ + Uint32 type; /**< ::SDL_DOLLARGESTURE */ + Uint32 timestamp; + SDL_TouchID touchId; /**< The touch device id */ + SDL_GestureID gestureId; + Uint32 numFingers; + float error; + float x; /**< Normalized center of gesture */ + float y; /**< Normalized center of gesture */ +} SDL_DollarGestureEvent; + + +/** + * \brief An event used to request a file open by the system (event.drop.*) + * This event is disabled by default, you can enable it with SDL_EventState() + * \note If you enable this event, you must free the filename in the event. + */ +typedef struct SDL_DropEvent +{ + Uint32 type; /**< ::SDL_DROPFILE */ + Uint32 timestamp; + char *file; /**< The file name, which should be freed with SDL_free() */ +} SDL_DropEvent; + + +/** + * \brief The "quit requested" event + */ +typedef struct SDL_QuitEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; +} SDL_QuitEvent; + +/** + * \brief OS Specific event + */ +typedef struct SDL_OSEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; +} SDL_OSEvent; + +/** + * \brief A user-defined event type (event.user.*) + */ +typedef struct SDL_UserEvent +{ + Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ + Uint32 timestamp; + Uint32 windowID; /**< The associated window if any */ + Sint32 code; /**< User defined event code */ + void *data1; /**< User defined data pointer */ + void *data2; /**< User defined data pointer */ +} SDL_UserEvent; + + +struct SDL_SysWMmsg; +typedef struct SDL_SysWMmsg SDL_SysWMmsg; + +/** + * \brief A video driver dependent system event (event.syswm.*) + * This event is disabled by default, you can enable it with SDL_EventState() + * + * \note If you want to use this event, you should include SDL_syswm.h. + */ +typedef struct SDL_SysWMEvent +{ + Uint32 type; /**< ::SDL_SYSWMEVENT */ + Uint32 timestamp; + SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ +} SDL_SysWMEvent; + +/** + * \brief General event structure + */ +typedef union SDL_Event +{ + Uint32 type; /**< Event type, shared with all events */ + SDL_CommonEvent common; /**< Common event data */ + SDL_WindowEvent window; /**< Window event data */ + SDL_KeyboardEvent key; /**< Keyboard event data */ + SDL_TextEditingEvent edit; /**< Text editing event data */ + SDL_TextInputEvent text; /**< Text input event data */ + SDL_MouseMotionEvent motion; /**< Mouse motion event data */ + SDL_MouseButtonEvent button; /**< Mouse button event data */ + SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ + SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ + SDL_JoyBallEvent jball; /**< Joystick ball event data */ + SDL_JoyHatEvent jhat; /**< Joystick hat event data */ + SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ + SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ + SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ + SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ + SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ + SDL_QuitEvent quit; /**< Quit request event data */ + SDL_UserEvent user; /**< Custom event data */ + SDL_SysWMEvent syswm; /**< System dependent window event data */ + SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ + SDL_MultiGestureEvent mgesture; /**< Gesture event data */ + SDL_DollarGestureEvent dgesture; /**< Gesture event data */ + SDL_DropEvent drop; /**< Drag and drop event data */ + + /* This is necessary for ABI compatibility between Visual C++ and GCC + Visual C++ will respect the push pack pragma and use 52 bytes for + this structure, and GCC will use the alignment of the largest datatype + within the union, which is 8 bytes. + + So... we'll add padding to force the size to be 56 bytes for both. + */ + Uint8 padding[56]; +} SDL_Event; + + +/* Function prototypes */ + +/** + * Pumps the event loop, gathering events from the input devices. + * + * This function updates the event queue and internal input device state. + * + * This should only be run in the thread that sets the video mode. + */ +extern DECLSPEC void SDLCALL SDL_PumpEvents(void); + +/* @{ */ +typedef enum +{ + SDL_ADDEVENT, + SDL_PEEKEVENT, + SDL_GETEVENT +} SDL_eventaction; + +/** + * Checks the event queue for messages and optionally returns them. + * + * If \c action is ::SDL_ADDEVENT, up to \c numevents events will be added to + * the back of the event queue. + * + * If \c action is ::SDL_PEEKEVENT, up to \c numevents events at the front + * of the event queue, within the specified minimum and maximum type, + * will be returned and will not be removed from the queue. + * + * If \c action is ::SDL_GETEVENT, up to \c numevents events at the front + * of the event queue, within the specified minimum and maximum type, + * will be returned and will be removed from the queue. + * + * \return The number of events actually stored, or -1 if there was an error. + * + * This function is thread-safe. + */ +extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, + SDL_eventaction action, + Uint32 minType, Uint32 maxType); +/* @} */ + +/** + * Checks to see if certain event types are in the event queue. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); + +/** + * This function clears events from the event queue + */ +extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); +extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); + +/** + * \brief Polls for currently pending events. + * + * \return 1 if there are any pending events, or 0 if there are none available. + * + * \param event If not NULL, the next event is removed from the queue and + * stored in that area. + */ +extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); + +/** + * \brief Waits indefinitely for the next available event. + * + * \return 1, or 0 if there was an error while waiting for events. + * + * \param event If not NULL, the next event is removed from the queue and + * stored in that area. + */ +extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); + +/** + * \brief Waits until the specified timeout (in milliseconds) for the next + * available event. + * + * \return 1, or 0 if there was an error while waiting for events. + * + * \param event If not NULL, the next event is removed from the queue and + * stored in that area. + * \param timeout The timeout (in milliseconds) to wait for next event. + */ +extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, + int timeout); + +/** + * \brief Add an event to the event queue. + * + * \return 1 on success, 0 if the event was filtered, or -1 if the event queue + * was full or there was some other error. + */ +extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); + +typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); + +/** + * Sets up a filter to process all events before they change internal state and + * are posted to the internal event queue. + * + * The filter is prototyped as: + * \code + * int SDL_EventFilter(void *userdata, SDL_Event * event); + * \endcode + * + * If the filter returns 1, then the event will be added to the internal queue. + * If it returns 0, then the event will be dropped from the queue, but the + * internal state will still be updated. This allows selective filtering of + * dynamically arriving events. + * + * \warning Be very careful of what you do in the event filter function, as + * it may run in a different thread! + * + * There is one caveat when dealing with the ::SDL_QuitEvent event type. The + * event filter is only called when the window manager desires to close the + * application window. If the event filter returns 1, then the window will + * be closed, otherwise the window will remain open if possible. + * + * If the quit event is generated by an interrupt signal, it will bypass the + * internal queue and be delivered to the application at the next event poll. + */ +extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, + void *userdata); + +/** + * Return the current event filter - can be used to "chain" filters. + * If there is no event filter set, this function returns SDL_FALSE. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, + void **userdata); + +/** + * Add a function which is called when an event is added to the queue. + */ +extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Remove an event watch function added with SDL_AddEventWatch() + */ +extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Run the filter function on the current event queue, removing any + * events for which the filter returns 0. + */ +extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, + void *userdata); + +/* @{ */ +#define SDL_QUERY -1 +#define SDL_IGNORE 0 +#define SDL_DISABLE 0 +#define SDL_ENABLE 1 + +/** + * This function allows you to set the state of processing certain events. + * - If \c state is set to ::SDL_IGNORE, that event will be automatically + * dropped from the event queue and will not event be filtered. + * - If \c state is set to ::SDL_ENABLE, that event will be processed + * normally. + * - If \c state is set to ::SDL_QUERY, SDL_EventState() will return the + * current processing state of the specified event. + */ +extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); +/* @} */ +#define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) + +/** + * This function allocates a set of user-defined events, and returns + * the beginning event number for that set of events. + * + * If there aren't enough user-defined events left, this function + * returns (Uint32)-1 + */ +extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_events_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_filesystem.h b/Externals/SDL2-2.0.1/include/SDL_filesystem.h new file mode 100644 index 0000000000..ea8a1b56f9 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_filesystem.h @@ -0,0 +1,136 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_filesystem.h + * + * \brief Include file for filesystem SDL API functions + */ + +#ifndef _SDL_filesystem_h +#define _SDL_filesystem_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Get the path where the application resides. + * + * Get the "base path". This is the directory where the application was run + * from, which is probably the installation directory, and may or may not + * be the process's current working directory. + * + * This returns an absolute path in UTF-8 encoding, and is guaranteed to + * end with a path separator ('\\' on Windows, '/' most other places). + * + * The pointer returned by this function is owned by you. Please call + * SDL_free() on the pointer when you are done with it, or it will be a + * memory leak. This is not necessarily a fast call, though, so you should + * call this once near startup and save the string if you need it. + * + * Some platforms can't determine the application's path, and on other + * platforms, this might be meaningless. In such cases, this function will + * return NULL. + * + * \return String of base dir in UTF-8 encoding, or NULL on error. + * + * \sa SDL_GetPrefPath + */ +extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); + +/** + * \brief Get the user-and-app-specific path where files can be written. + * + * Get the "pref dir". This is meant to be where users can write personal + * files (preferences and save games, etc) that are specific to your + * application. This directory is unique per user, per application. + * + * This function will decide the appropriate location in the native filesystem, + * create the directory if necessary, and return a string of the absolute + * path to the directory in UTF-8 encoding. + * + * On Windows, the string might look like: + * "C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\" + * + * On Linux, the string might look like: + * "/home/bob/.local/share/My Program Name/" + * + * On Mac OS X, the string might look like: + * "/Users/bob/Library/Application Support/My Program Name/" + * + * (etc.) + * + * You specify the name of your organization (if it's not a real organization, + * your name or an Internet domain you own might do) and the name of your + * application. These should be untranslated proper names. + * + * Both the org and app strings may become part of a directory name, so + * please follow these rules: + * + * - Try to use the same org string (including case-sensitivity) for + * all your applications that use this function. + * - Always use a unique app string for each one, and make sure it never + * changes for an app once you've decided on it. + * - Unicode characters are legal, as long as it's UTF-8 encoded, but... + * - ...only use letters, numbers, and spaces. Avoid punctuation like + * "Game Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. + * + * This returns an absolute path in UTF-8 encoding, and is guaranteed to + * end with a path separator ('\\' on Windows, '/' most other places). + * + * The pointer returned by this function is owned by you. Please call + * SDL_free() on the pointer when you are done with it, or it will be a + * memory leak. This is not necessarily a fast call, though, so you should + * call this once near startup and save the string if you need it. + * + * You should assume the path returned by this function is the only safe + * place to write files (and that SDL_GetBasePath(), while it might be + * writable, or even the parent of the returned path, aren't where you + * should be writing things). + * + * Some platforms can't determine the pref path, and on other + * platforms, this might be meaningless. In such cases, this function will + * return NULL. + * + * \param org The name of your organization. + * \param app The name of your application. + * \return UTF-8 string of user dir in platform-dependent notation. NULL + * if there's a problem (creating directory failed, etc). + * + * \sa SDL_GetBasePath + */ +extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_system_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_gamecontroller.h b/Externals/SDL2-2.0.1/include/SDL_gamecontroller.h new file mode 100644 index 0000000000..e55749ce35 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_gamecontroller.h @@ -0,0 +1,298 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_gamecontroller.h + * + * Include file for SDL game controller event handling + */ + +#ifndef _SDL_gamecontroller_h +#define _SDL_gamecontroller_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_joystick.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_gamecontroller.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * for game controllers, and load appropriate drivers. + * + * If you would like to receive controller updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/* The gamecontroller structure used to identify an SDL game controller */ +struct _SDL_GameController; +typedef struct _SDL_GameController SDL_GameController; + + +typedef enum +{ + SDL_CONTROLLER_BINDTYPE_NONE = 0, + SDL_CONTROLLER_BINDTYPE_BUTTON, + SDL_CONTROLLER_BINDTYPE_AXIS, + SDL_CONTROLLER_BINDTYPE_HAT +} SDL_GameControllerBindType; + +/** + * Get the SDL joystick layer binding for this controller button/axis mapping + */ +typedef struct SDL_GameControllerButtonBind +{ + SDL_GameControllerBindType bindType; + union + { + int button; + int axis; + struct { + int hat; + int hat_mask; + } hat; + } value; + +} SDL_GameControllerButtonBind; + + +/** + * To count the number of game controllers in the system for the following: + * int nJoysticks = SDL_NumJoysticks(); + * int nGameControllers = 0; + * for ( int i = 0; i < nJoysticks; i++ ) { + * if ( SDL_IsGameController(i) ) { + * nGameControllers++; + * } + * } + * + * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: + * guid,name,mappings + * + * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. + * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. + * The mapping format for joystick is: + * bX - a joystick button, index X + * hX.Y - hat X with value Y + * aX - axis X of the joystick + * Buttons can be used as a controller axis and vice versa. + * + * This string shows an example of a valid mapping for a controller + * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", + * + */ + +/** + * Add or update an existing mapping configuration + * + * \return 1 if mapping is added, 0 if updated, -1 on error + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping( const char* mappingString ); + +/** + * Get a mapping string for a GUID + * + * \return the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ); + +/** + * Get a mapping string for an open GameController + * + * \return the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMapping( SDL_GameController * gamecontroller ); + +/** + * Is the joystick on this index supported by the game controller interface? + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); + + +/** + * Get the implementation dependent name of a game controller. + * This can be called before any controllers are opened. + * If no name can be found, this function returns NULL. + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); + +/** + * Open a game controller for use. + * The index passed as an argument refers to the N'th game controller on the system. + * This index is the value which will identify this controller in future controller + * events. + * + * \return A controller identifier, or NULL if an error occurred. + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); + +/** + * Return the name for this currently opened controller + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); + +/** + * Returns SDL_TRUE if the controller has been opened and currently connected, + * or SDL_FALSE if it has not. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); + +/** + * Get the underlying joystick object used by a controller + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); + +/** + * Enable/disable controller event polling. + * + * If controller events are disabled, you must call SDL_GameControllerUpdate() + * yourself and check the state of the controller when you want controller + * information. + * + * The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); + +/** + * Update the current state of the open game controllers. + * + * This is called automatically by the event loop if any game controller + * events are enabled. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); + + +/** + * The list of axes available from a controller + */ +typedef enum +{ + SDL_CONTROLLER_AXIS_INVALID = -1, + SDL_CONTROLLER_AXIS_LEFTX, + SDL_CONTROLLER_AXIS_LEFTY, + SDL_CONTROLLER_AXIS_RIGHTX, + SDL_CONTROLLER_AXIS_RIGHTY, + SDL_CONTROLLER_AXIS_TRIGGERLEFT, + SDL_CONTROLLER_AXIS_TRIGGERRIGHT, + SDL_CONTROLLER_AXIS_MAX +} SDL_GameControllerAxis; + +/** + * turn this string into a axis mapping + */ +extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *pchString); + +/** + * turn this axis enum into a string mapping + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); + +/** + * Get the SDL joystick layer binding for this controller button mapping + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, + SDL_GameControllerAxis axis); + +/** + * Get the current state of an axis control on a game controller. + * + * The state is a value ranging from -32768 to 32767. + * + * The axis indices start at index 0. + */ +extern DECLSPEC Sint16 SDLCALL +SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, + SDL_GameControllerAxis axis); + +/** + * The list of buttons available from a controller + */ +typedef enum +{ + SDL_CONTROLLER_BUTTON_INVALID = -1, + SDL_CONTROLLER_BUTTON_A, + SDL_CONTROLLER_BUTTON_B, + SDL_CONTROLLER_BUTTON_X, + SDL_CONTROLLER_BUTTON_Y, + SDL_CONTROLLER_BUTTON_BACK, + SDL_CONTROLLER_BUTTON_GUIDE, + SDL_CONTROLLER_BUTTON_START, + SDL_CONTROLLER_BUTTON_LEFTSTICK, + SDL_CONTROLLER_BUTTON_RIGHTSTICK, + SDL_CONTROLLER_BUTTON_LEFTSHOULDER, + SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, + SDL_CONTROLLER_BUTTON_DPAD_UP, + SDL_CONTROLLER_BUTTON_DPAD_DOWN, + SDL_CONTROLLER_BUTTON_DPAD_LEFT, + SDL_CONTROLLER_BUTTON_DPAD_RIGHT, + SDL_CONTROLLER_BUTTON_MAX +} SDL_GameControllerButton; + +/** + * turn this string into a button mapping + */ +extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *pchString); + +/** + * turn this button enum into a string mapping + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); + +/** + * Get the SDL joystick layer binding for this controller button mapping + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + + +/** + * Get the current state of a button on a game controller. + * + * The button indices start at index 0. + */ +extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Close a controller previously opened with SDL_GameControllerOpen(). + */ +extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_gamecontroller_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_gesture.h b/Externals/SDL2-2.0.1/include/SDL_gesture.h new file mode 100644 index 0000000000..21f10ead73 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_gesture.h @@ -0,0 +1,87 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_gesture.h + * + * Include file for SDL gesture event handling. + */ + +#ifndef _SDL_gesture_h +#define _SDL_gesture_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" + +#include "SDL_touch.h" + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_GestureID; + +/* Function prototypes */ + +/** + * \brief Begin Recording a gesture on the specified touch, or all touches (-1) + * + * + */ +extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); + + +/** + * \brief Save all currently loaded Dollar Gesture templates + * + * + */ +extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *src); + +/** + * \brief Save a currently loaded Dollar Gesture template + * + * + */ +extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *src); + + +/** + * \brief Load Dollar Gesture templates from a file + * + * + */ +extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_gesture_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_haptic.h b/Externals/SDL2-2.0.1/include/SDL_haptic.h new file mode 100644 index 0000000000..a029eb9969 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_haptic.h @@ -0,0 +1,1225 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_haptic.h + * + * \brief The SDL Haptic subsystem allows you to control haptic (force feedback) + * devices. + * + * The basic usage is as follows: + * - Initialize the Subsystem (::SDL_INIT_HAPTIC). + * - Open a Haptic Device. + * - SDL_HapticOpen() to open from index. + * - SDL_HapticOpenFromJoystick() to open from an existing joystick. + * - Create an effect (::SDL_HapticEffect). + * - Upload the effect with SDL_HapticNewEffect(). + * - Run the effect with SDL_HapticRunEffect(). + * - (optional) Free the effect with SDL_HapticDestroyEffect(). + * - Close the haptic device with SDL_HapticClose(). + * + * \par Simple rumble example: + * \code + * SDL_Haptic *haptic; + * + * // Open the device + * haptic = SDL_HapticOpen( 0 ); + * if (haptic == NULL) + * return -1; + * + * // Initialize simple rumble + * if (SDL_HapticRumbleInit( haptic ) != 0) + * return -1; + * + * // Play effect at 50% strength for 2 seconds + * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) + * return -1; + * SDL_Delay( 2000 ); + * + * // Clean up + * SDL_HapticClose( haptic ); + * \endcode + * + * \par Complete example: + * \code + * int test_haptic( SDL_Joystick * joystick ) { + * SDL_Haptic *haptic; + * SDL_HapticEffect effect; + * int effect_id; + * + * // Open the device + * haptic = SDL_HapticOpenFromJoystick( joystick ); + * if (haptic == NULL) return -1; // Most likely joystick isn't haptic + * + * // See if it can do sine waves + * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { + * SDL_HapticClose(haptic); // No sine effect + * return -1; + * } + * + * // Create the effect + * memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default + * effect.type = SDL_HAPTIC_SINE; + * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates + * effect.periodic.direction.dir[0] = 18000; // Force comes from south + * effect.periodic.period = 1000; // 1000 ms + * effect.periodic.magnitude = 20000; // 20000/32767 strength + * effect.periodic.length = 5000; // 5 seconds long + * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength + * effect.periodic.fade_length = 1000; // Takes 1 second to fade away + * + * // Upload the effect + * effect_id = SDL_HapticNewEffect( haptic, &effect ); + * + * // Test the effect + * SDL_HapticRunEffect( haptic, effect_id, 1 ); + * SDL_Delay( 5000); // Wait for the effect to finish + * + * // We destroy the effect, although closing the device also does this + * SDL_HapticDestroyEffect( haptic, effect_id ); + * + * // Close the device + * SDL_HapticClose(haptic); + * + * return 0; // Success + * } + * \endcode + * + * You can also find out more information on my blog: + * http://bobbens.dyndns.org/journal/2010/sdl_haptic/ + * + * \author Edgar Simo Serra + */ + +#ifndef _SDL_haptic_h +#define _SDL_haptic_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_joystick.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * \typedef SDL_Haptic + * + * \brief The haptic structure used to identify an SDL haptic. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticClose + */ +struct _SDL_Haptic; +typedef struct _SDL_Haptic SDL_Haptic; + + +/** + * \name Haptic features + * + * Different haptic features a device can have. + */ +/* @{ */ + +/** + * \name Haptic effects + */ +/* @{ */ + +/** + * \brief Constant effect supported. + * + * Constant haptic effect. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_CONSTANT (1<<0) + +/** + * \brief Sine wave effect supported. + * + * Periodic haptic effect that simulates sine waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SINE (1<<1) + +/** + * \brief Left/Right effect supported. + * + * Haptic effect for direct control over high/low frequency motors. + * + * \sa SDL_HapticLeftRight + * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, + * we ran out of bits, and this is important for XInput devices. + */ +#define SDL_HAPTIC_LEFTRIGHT (1<<2) + +/* !!! FIXME: put this back when we have more bits in 2.1 */ +/* #define SDL_HAPTIC_SQUARE (1<<2) */ + +/** + * \brief Triangle wave effect supported. + * + * Periodic haptic effect that simulates triangular waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_TRIANGLE (1<<3) + +/** + * \brief Sawtoothup wave effect supported. + * + * Periodic haptic effect that simulates saw tooth up waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHUP (1<<4) + +/** + * \brief Sawtoothdown wave effect supported. + * + * Periodic haptic effect that simulates saw tooth down waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHDOWN (1<<5) + +/** + * \brief Ramp effect supported. + * + * Ramp haptic effect. + * + * \sa SDL_HapticRamp + */ +#define SDL_HAPTIC_RAMP (1<<6) + +/** + * \brief Spring effect supported - uses axes position. + * + * Condition haptic effect that simulates a spring. Effect is based on the + * axes position. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_SPRING (1<<7) + +/** + * \brief Damper effect supported - uses axes velocity. + * + * Condition haptic effect that simulates dampening. Effect is based on the + * axes velocity. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_DAMPER (1<<8) + +/** + * \brief Inertia effect supported - uses axes acceleration. + * + * Condition haptic effect that simulates inertia. Effect is based on the axes + * acceleration. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_INERTIA (1<<9) + +/** + * \brief Friction effect supported - uses axes movement. + * + * Condition haptic effect that simulates friction. Effect is based on the + * axes movement. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_FRICTION (1<<10) + +/** + * \brief Custom effect is supported. + * + * User defined custom haptic effect. + */ +#define SDL_HAPTIC_CUSTOM (1<<11) + +/* @} *//* Haptic effects */ + +/* These last few are features the device has, not effects */ + +/** + * \brief Device can set global gain. + * + * Device supports setting the global gain. + * + * \sa SDL_HapticSetGain + */ +#define SDL_HAPTIC_GAIN (1<<12) + +/** + * \brief Device can set autocenter. + * + * Device supports setting autocenter. + * + * \sa SDL_HapticSetAutocenter + */ +#define SDL_HAPTIC_AUTOCENTER (1<<13) + +/** + * \brief Device can be queried for effect status. + * + * Device can be queried for effect status. + * + * \sa SDL_HapticGetEffectStatus + */ +#define SDL_HAPTIC_STATUS (1<<14) + +/** + * \brief Device can be paused. + * + * \sa SDL_HapticPause + * \sa SDL_HapticUnpause + */ +#define SDL_HAPTIC_PAUSE (1<<15) + + +/** + * \name Direction encodings + */ +/* @{ */ + +/** + * \brief Uses polar coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_POLAR 0 + +/** + * \brief Uses cartesian coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_CARTESIAN 1 + +/** + * \brief Uses spherical coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_SPHERICAL 2 + +/* @} *//* Direction encodings */ + +/* @} *//* Haptic features */ + +/* + * Misc defines. + */ + +/** + * \brief Used to play a device an infinite number of times. + * + * \sa SDL_HapticRunEffect + */ +#define SDL_HAPTIC_INFINITY 4294967295U + + +/** + * \brief Structure that represents a haptic direction. + * + * Directions can be specified by: + * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. + * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. + * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. + * + * Cardinal directions of the haptic device are relative to the positioning + * of the device. North is considered to be away from the user. + * + * The following diagram represents the cardinal directions: + * \verbatim + .--. + |__| .-------. + |=.| |.-----.| + |--| || || + | | |'-----'| + |__|~')_____(' + [ COMPUTER ] + + + North (0,-1) + ^ + | + | + (1,0) West <----[ HAPTIC ]----> East (-1,0) + | + | + v + South (0,1) + + + [ USER ] + \|||/ + (o o) + ---ooO-(_)-Ooo--- + \endverbatim + * + * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a + * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses + * the first \c dir parameter. The cardinal directions would be: + * - North: 0 (0 degrees) + * - East: 9000 (90 degrees) + * - South: 18000 (180 degrees) + * - West: 27000 (270 degrees) + * + * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions + * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses + * the first three \c dir parameters. The cardinal directions would be: + * - North: 0,-1, 0 + * - East: -1, 0, 0 + * - South: 0, 1, 0 + * - West: 1, 0, 0 + * + * The Z axis represents the height of the effect if supported, otherwise + * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you + * can use any multiple you want, only the direction matters. + * + * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. + * The first two \c dir parameters are used. The \c dir parameters are as + * follows (all values are in hundredths of degrees): + * - Degrees from (1, 0) rotated towards (0, 1). + * - Degrees towards (0, 0, 1) (device needs at least 3 axes). + * + * + * Example of force coming from the south with all encodings (force coming + * from the south means the user will have to pull the stick to counteract): + * \code + * SDL_HapticDirection direction; + * + * // Cartesian directions + * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. + * direction.dir[0] = 0; // X position + * direction.dir[1] = 1; // Y position + * // Assuming the device has 2 axes, we don't need to specify third parameter. + * + * // Polar directions + * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. + * direction.dir[0] = 18000; // Polar only uses first parameter + * + * // Spherical coordinates + * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding + * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. + * \endcode + * + * \sa SDL_HAPTIC_POLAR + * \sa SDL_HAPTIC_CARTESIAN + * \sa SDL_HAPTIC_SPHERICAL + * \sa SDL_HapticEffect + * \sa SDL_HapticNumAxes + */ +typedef struct SDL_HapticDirection +{ + Uint8 type; /**< The type of encoding. */ + Sint32 dir[3]; /**< The encoded direction. */ +} SDL_HapticDirection; + + +/** + * \brief A structure containing a template for a Constant effect. + * + * The struct is exclusive to the ::SDL_HAPTIC_CONSTANT effect. + * + * A constant effect applies a constant force in the specified direction + * to the joystick. + * + * \sa SDL_HAPTIC_CONSTANT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticConstant +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Constant */ + Sint16 level; /**< Strength of the constant effect. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticConstant; + +/** + * \brief A structure containing a template for a Periodic effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SINE + * - ::SDL_HAPTIC_LEFTRIGHT + * - ::SDL_HAPTIC_TRIANGLE + * - ::SDL_HAPTIC_SAWTOOTHUP + * - ::SDL_HAPTIC_SAWTOOTHDOWN + * + * A periodic effect consists in a wave-shaped effect that repeats itself + * over time. The type determines the shape of the wave and the parameters + * determine the dimensions of the wave. + * + * Phase is given by hundredth of a cycle meaning that giving the phase a value + * of 9000 will displace it 25% of its period. Here are sample values: + * - 0: No phase displacement. + * - 9000: Displaced 25% of its period. + * - 18000: Displaced 50% of its period. + * - 27000: Displaced 75% of its period. + * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. + * + * Examples: + * \verbatim + SDL_HAPTIC_SINE + __ __ __ __ + / \ / \ / \ / + / \__/ \__/ \__/ + + SDL_HAPTIC_SQUARE + __ __ __ __ __ + | | | | | | | | | | + | |__| |__| |__| |__| | + + SDL_HAPTIC_TRIANGLE + /\ /\ /\ /\ /\ + / \ / \ / \ / \ / + / \/ \/ \/ \/ + + SDL_HAPTIC_SAWTOOTHUP + /| /| /| /| /| /| /| + / | / | / | / | / | / | / | + / |/ |/ |/ |/ |/ |/ | + + SDL_HAPTIC_SAWTOOTHDOWN + \ |\ |\ |\ |\ |\ |\ | + \ | \ | \ | \ | \ | \ | \ | + \| \| \| \| \| \| \| + \endverbatim + * + * \sa SDL_HAPTIC_SINE + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HAPTIC_TRIANGLE + * \sa SDL_HAPTIC_SAWTOOTHUP + * \sa SDL_HAPTIC_SAWTOOTHDOWN + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticPeriodic +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT, + ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or + ::SDL_HAPTIC_SAWTOOTHDOWN */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Periodic */ + Uint16 period; /**< Period of the wave. */ + Sint16 magnitude; /**< Peak value. */ + Sint16 offset; /**< Mean value of the wave. */ + Uint16 phase; /**< Horizontal shift given by hundredth of a cycle. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticPeriodic; + +/** + * \brief A structure containing a template for a Condition effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SPRING: Effect based on axes position. + * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. + * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. + * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. + * + * Direction is handled by condition internals instead of a direction member. + * The condition effect specific members have three parameters. The first + * refers to the X axis, the second refers to the Y axis and the third + * refers to the Z axis. The right terms refer to the positive side of the + * axis and the left terms refer to the negative side of the axis. Please + * refer to the ::SDL_HapticDirection diagram for which side is positive and + * which is negative. + * + * \sa SDL_HapticDirection + * \sa SDL_HAPTIC_SPRING + * \sa SDL_HAPTIC_DAMPER + * \sa SDL_HAPTIC_INERTIA + * \sa SDL_HAPTIC_FRICTION + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCondition +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, + ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ + SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Condition */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side. */ + Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ + Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ + Uint16 deadband[3]; /**< Size of the dead zone. */ + Sint16 center[3]; /**< Position of the dead zone. */ +} SDL_HapticCondition; + +/** + * \brief A structure containing a template for a Ramp effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. + * + * The ramp effect starts at start strength and ends at end strength. + * It augments in linear fashion. If you use attack and fade with a ramp + * the effects get added to the ramp effect making the effect become + * quadratic instead of linear. + * + * \sa SDL_HAPTIC_RAMP + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticRamp +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_RAMP */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Ramp */ + Sint16 start; /**< Beginning strength level. */ + Sint16 end; /**< Ending strength level. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticRamp; + +/** + * \brief A structure containing a template for a Left/Right effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect. + * + * The Left/Right effect is used to explicitly control the large and small + * motors, commonly found in modern game controllers. One motor is high + * frequency, the other is low frequency. + * + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticLeftRight +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + + /* Rumble */ + Uint16 large_magnitude; /**< Control of the large controller motor. */ + Uint16 small_magnitude; /**< Control of the small controller motor. */ +} SDL_HapticLeftRight; + +/** + * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. + * + * A custom force feedback effect is much like a periodic effect, where the + * application can define its exact shape. You will have to allocate the + * data yourself. Data should consist of channels * samples Uint16 samples. + * + * If channels is one, the effect is rotated using the defined direction. + * Otherwise it uses the samples in data for the different axes. + * + * \sa SDL_HAPTIC_CUSTOM + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCustom +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Custom */ + Uint8 channels; /**< Axes to use, minimum of one. */ + Uint16 period; /**< Sample periods. */ + Uint16 samples; /**< Amount of samples. */ + Uint16 *data; /**< Should contain channels*samples items. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticCustom; + +/** + * \brief The generic template for any haptic effect. + * + * All values max at 32767 (0x7FFF). Signed values also can be negative. + * Time values unless specified otherwise are in milliseconds. + * + * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 + * value. Neither delay, interval, attack_length nor fade_length support + * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. + * + * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of + * ::SDL_HAPTIC_INFINITY. + * + * Button triggers may not be supported on all devices, it is advised to not + * use them if possible. Buttons start at index 1 instead of index 0 like + * the joystick. + * + * If both attack_length and fade_level are 0, the envelope is not used, + * otherwise both values are used. + * + * Common parts: + * \code + * // Replay - All effects have this + * Uint32 length; // Duration of effect (ms). + * Uint16 delay; // Delay before starting effect. + * + * // Trigger - All effects have this + * Uint16 button; // Button that triggers effect. + * Uint16 interval; // How soon before effect can be triggered again. + * + * // Envelope - All effects except condition effects have this + * Uint16 attack_length; // Duration of the attack (ms). + * Uint16 attack_level; // Level at the start of the attack. + * Uint16 fade_length; // Duration of the fade out (ms). + * Uint16 fade_level; // Level at the end of the fade. + * \endcode + * + * + * Here we have an example of a constant effect evolution in time: + * \verbatim + Strength + ^ + | + | effect level --> _________________ + | / \ + | / \ + | / \ + | / \ + | attack_level --> | \ + | | | <--- fade_level + | + +--------------------------------------------------> Time + [--] [---] + attack_length fade_length + + [------------------][-----------------------] + delay length + \endverbatim + * + * Note either the attack_level or the fade_level may be above the actual + * effect level. + * + * \sa SDL_HapticConstant + * \sa SDL_HapticPeriodic + * \sa SDL_HapticCondition + * \sa SDL_HapticRamp + * \sa SDL_HapticLeftRight + * \sa SDL_HapticCustom + */ +typedef union SDL_HapticEffect +{ + /* Common for all force feedback effects */ + Uint16 type; /**< Effect type. */ + SDL_HapticConstant constant; /**< Constant effect. */ + SDL_HapticPeriodic periodic; /**< Periodic effect. */ + SDL_HapticCondition condition; /**< Condition effect. */ + SDL_HapticRamp ramp; /**< Ramp effect. */ + SDL_HapticLeftRight leftright; /**< Left/Right effect. */ + SDL_HapticCustom custom; /**< Custom effect. */ +} SDL_HapticEffect; + + +/* Function prototypes */ +/** + * \brief Count the number of haptic devices attached to the system. + * + * \return Number of haptic devices detected on the system. + */ +extern DECLSPEC int SDLCALL SDL_NumHaptics(void); + +/** + * \brief Get the implementation dependent name of a Haptic device. + * + * This can be called before any joysticks are opened. + * If no name can be found, this function returns NULL. + * + * \param device_index Index of the device to get its name. + * \return Name of the device or NULL on error. + * + * \sa SDL_NumHaptics + */ +extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); + +/** + * \brief Opens a Haptic device for usage. + * + * The index passed as an argument refers to the N'th Haptic device on this + * system. + * + * When opening a haptic device, its gain will be set to maximum and + * autocenter will be disabled. To modify these values use + * SDL_HapticSetGain() and SDL_HapticSetAutocenter(). + * + * \param device_index Index of the device to open. + * \return Device identifier or NULL on error. + * + * \sa SDL_HapticIndex + * \sa SDL_HapticOpenFromMouse + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticClose + * \sa SDL_HapticSetGain + * \sa SDL_HapticSetAutocenter + * \sa SDL_HapticPause + * \sa SDL_HapticStopAll + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); + +/** + * \brief Checks if the haptic device at index has been opened. + * + * \param device_index Index to check to see if it has been opened. + * \return 1 if it has been opened or 0 if it hasn't. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticIndex + */ +extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); + +/** + * \brief Gets the index of a haptic device. + * + * \param haptic Haptic device to get the index of. + * \return The index of the haptic device or -1 on error. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpened + */ +extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); + +/** + * \brief Gets whether or not the current mouse has haptic capabilities. + * + * \return SDL_TRUE if the mouse is haptic, SDL_FALSE if it isn't. + * + * \sa SDL_HapticOpenFromMouse + */ +extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); + +/** + * \brief Tries to open a haptic device from the current mouse. + * + * \return The haptic device identifier or NULL on error. + * + * \sa SDL_MouseIsHaptic + * \sa SDL_HapticOpen + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); + +/** + * \brief Checks to see if a joystick has haptic features. + * + * \param joystick Joystick to test for haptic capabilities. + * \return 1 if the joystick is haptic, 0 if it isn't + * or -1 if an error ocurred. + * + * \sa SDL_HapticOpenFromJoystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); + +/** + * \brief Opens a Haptic device for usage from a Joystick device. + * + * You must still close the haptic device seperately. It will not be closed + * with the joystick. + * + * When opening from a joystick you should first close the haptic device before + * closing the joystick device. If not, on some implementations the haptic + * device will also get unallocated and you'll be unable to use force feedback + * on that device. + * + * \param joystick Joystick to create a haptic device from. + * \return A valid haptic device identifier on success or NULL on error. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticClose + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * + joystick); + +/** + * \brief Closes a Haptic device previously opened with SDL_HapticOpen(). + * + * \param haptic Haptic device to close. + */ +extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); + +/** + * \brief Returns the number of effects a haptic device can store. + * + * On some platforms this isn't fully supported, and therefore is an + * approximation. Always check to see if your created effect was actually + * created and do not rely solely on SDL_HapticNumEffects(). + * + * \param haptic The haptic device to query effect max. + * \return The number of effects the haptic device can store or + * -1 on error. + * + * \sa SDL_HapticNumEffectsPlaying + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); + +/** + * \brief Returns the number of effects a haptic device can play at the same + * time. + * + * This is not supported on all platforms, but will always return a value. + * Added here for the sake of completeness. + * + * \param haptic The haptic device to query maximum playing effects. + * \return The number of effects the haptic device can play at the same time + * or -1 on error. + * + * \sa SDL_HapticNumEffects + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); + +/** + * \brief Gets the haptic devices supported features in bitwise matter. + * + * Example: + * \code + * if (SDL_HapticQuery(haptic) & SDL_HAPTIC_CONSTANT) { + * printf("We have constant haptic effect!"); + * } + * \endcode + * + * \param haptic The haptic device to query. + * \return Haptic features in bitwise manner (OR'd). + * + * \sa SDL_HapticNumEffects + * \sa SDL_HapticEffectSupported + */ +extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); + + +/** + * \brief Gets the number of haptic axes the device has. + * + * \sa SDL_HapticDirection + */ +extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); + +/** + * \brief Checks to see if effect is supported by haptic. + * + * \param haptic Haptic device to check on. + * \param effect Effect to check to see if it is supported. + * \return SDL_TRUE if effect is supported, SDL_FALSE if it isn't or -1 on error. + * + * \sa SDL_HapticQuery + * \sa SDL_HapticNewEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, + SDL_HapticEffect * + effect); + +/** + * \brief Creates a new haptic effect on the device. + * + * \param haptic Haptic device to create the effect on. + * \param effect Properties of the effect to create. + * \return The id of the effect on success or -1 on error. + * + * \sa SDL_HapticUpdateEffect + * \sa SDL_HapticRunEffect + * \sa SDL_HapticDestroyEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, + SDL_HapticEffect * effect); + +/** + * \brief Updates the properties of an effect. + * + * Can be used dynamically, although behaviour when dynamically changing + * direction may be strange. Specifically the effect may reupload itself + * and start playing from the start. You cannot change the type either when + * running SDL_HapticUpdateEffect(). + * + * \param haptic Haptic device that has the effect. + * \param effect Effect to update. + * \param data New effect properties to use. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticNewEffect + * \sa SDL_HapticRunEffect + * \sa SDL_HapticDestroyEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, + int effect, + SDL_HapticEffect * data); + +/** + * \brief Runs the haptic effect on its associated haptic device. + * + * If iterations are ::SDL_HAPTIC_INFINITY, it'll run the effect over and over + * repeating the envelope (attack and fade) every time. If you only want the + * effect to last forever, set ::SDL_HAPTIC_INFINITY in the effect's length + * parameter. + * + * \param haptic Haptic device to run the effect on. + * \param effect Identifier of the haptic effect to run. + * \param iterations Number of iterations to run the effect. Use + * ::SDL_HAPTIC_INFINITY for infinity. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticStopEffect + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticGetEffectStatus + */ +extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, + int effect, + Uint32 iterations); + +/** + * \brief Stops the haptic effect on its associated haptic device. + * + * \param haptic Haptic device to stop the effect on. + * \param effect Identifier of the effect to stop. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticRunEffect + * \sa SDL_HapticDestroyEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, + int effect); + +/** + * \brief Destroys a haptic effect on the device. + * + * This will stop the effect if it's running. Effects are automatically + * destroyed when the device is closed. + * + * \param haptic Device to destroy the effect on. + * \param effect Identifier of the effect to destroy. + * + * \sa SDL_HapticNewEffect + */ +extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, + int effect); + +/** + * \brief Gets the status of the current effect on the haptic device. + * + * Device must support the ::SDL_HAPTIC_STATUS feature. + * + * \param haptic Haptic device to query the effect status on. + * \param effect Identifier of the effect to query its status. + * \return 0 if it isn't playing, 1 if it is playing or -1 on error. + * + * \sa SDL_HapticRunEffect + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, + int effect); + +/** + * \brief Sets the global gain of the device. + * + * Device must support the ::SDL_HAPTIC_GAIN feature. + * + * The user may specify the maximum gain by setting the environment variable + * SDL_HAPTIC_GAIN_MAX which should be between 0 and 100. All calls to + * SDL_HapticSetGain() will scale linearly using SDL_HAPTIC_GAIN_MAX as the + * maximum. + * + * \param haptic Haptic device to set the gain on. + * \param gain Value to set the gain to, should be between 0 and 100. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); + +/** + * \brief Sets the global autocenter of the device. + * + * Autocenter should be between 0 and 100. Setting it to 0 will disable + * autocentering. + * + * Device must support the ::SDL_HAPTIC_AUTOCENTER feature. + * + * \param haptic Haptic device to set autocentering on. + * \param autocenter Value to set autocenter to, 0 disables autocentering. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, + int autocenter); + +/** + * \brief Pauses a haptic device. + * + * Device must support the ::SDL_HAPTIC_PAUSE feature. Call + * SDL_HapticUnpause() to resume playback. + * + * Do not modify the effects nor add new ones while the device is paused. + * That can cause all sorts of weird errors. + * + * \param haptic Haptic device to pause. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticUnpause + */ +extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); + +/** + * \brief Unpauses a haptic device. + * + * Call to unpause after SDL_HapticPause(). + * + * \param haptic Haptic device to pause. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticPause + */ +extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); + +/** + * \brief Stops all the currently playing effects on a haptic device. + * + * \param haptic Haptic device to stop. + * \return 0 on success or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); + +/** + * \brief Checks to see if rumble is supported on a haptic device. + * + * \param haptic Haptic device to check to see if it supports rumble. + * \return SDL_TRUE if effect is supported, SDL_FALSE if it isn't or -1 on error. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); + +/** + * \brief Initializes the haptic device for simple rumble playback. + * + * \param haptic Haptic device to initialize for simple rumble playback. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticRumbleSupported + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); + +/** + * \brief Runs simple rumble on a haptic device + * + * \param haptic Haptic device to play rumble effect on. + * \param strength Strength of the rumble to play as a 0-1 float value. + * \param length Length of the rumble to play in milliseconds. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticRumbleSupported + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumbleStop + */ +extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); + +/** + * \brief Stops the simple rumble on a haptic device. + * + * \param haptic Haptic to stop the rumble on. + * \return 0 on success or -1 on error. + * + * \sa SDL_HapticRumbleSupported + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_haptic_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_hints.h b/Externals/SDL2-2.0.1/include/SDL_hints.h new file mode 100644 index 0000000000..dac928e075 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_hints.h @@ -0,0 +1,355 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_hints.h + * + * Official documentation for SDL configuration variables + * + * This file contains functions to set and get configuration hints, + * as well as listing each of them alphabetically. + * + * The convention for naming hints is SDL_HINT_X, where "SDL_X" is + * the environment variable that can be used to override the default. + * + * In general these hints are just that - they may or may not be + * supported or applicable on any given platform, but they provide + * a way for an application or user to give the library a hint as + * to how they would like the library to work. + */ + +#ifndef _SDL_hints_h +#define _SDL_hints_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. + * + * SDL can try to accelerate the SDL screen surface by using streaming + * textures with a 3D rendering engine. This variable controls whether and + * how this is done. + * + * This variable can be set to the following values: + * "0" - Disable 3D acceleration + * "1" - Enable 3D acceleration, using the default renderer. + * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) + * + * By default SDL tries to make a best guess for each platform whether + * to use acceleration or not. + */ +#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" + +/** + * \brief A variable specifying which render driver to use. + * + * If the application doesn't pick a specific renderer to use, this variable + * specifies the name of the preferred renderer. If the preferred renderer + * can't be initialized, the normal default renderer is used. + * + * This variable is case insensitive and can be set to the following values: + * "direct3d" + * "opengl" + * "opengles2" + * "opengles" + * "software" + * + * The default varies by platform, but it's the first one in the list that + * is available on the current platform. + */ +#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" + +/** + * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. + * + * This variable can be set to the following values: + * "0" - Disable shaders + * "1" - Enable shaders + * + * By default shaders are used if OpenGL supports them. + */ +#define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" + +/** + * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. + * + * This variable can be set to the following values: + * "0" - Thread-safety is not enabled (faster) + * "1" - Thread-safety is enabled + * + * By default the Direct3D device is created with thread-safety disabled. + */ +#define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" + +/** + * \brief A variable controlling the scaling quality + * + * This variable can be set to the following values: + * "0" or "nearest" - Nearest pixel sampling + * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) + * "2" or "best" - Currently this is the same as "linear" + * + * By default nearest pixel sampling is used + */ +#define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" + +/** + * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. + * + * This variable can be set to the following values: + * "0" - Disable vsync + * "1" - Enable vsync + * + * By default SDL does not sync screen surface updates with vertical refresh. + */ +#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" + +/** + * \brief A variable controlling whether the X11 VidMode extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XVidMode + * "1" - Enable XVidMode + * + * By default SDL will use XVidMode if it is available. + */ +#define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" + +/** + * \brief A variable controlling whether the X11 Xinerama extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable Xinerama + * "1" - Enable Xinerama + * + * By default SDL will use Xinerama if it is available. + */ +#define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" + +/** + * \brief A variable controlling whether the X11 XRandR extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XRandR + * "1" - Enable XRandR + * + * By default SDL will not use XRandR because of window manager issues. + */ +#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" + +/** + * \brief A variable controlling whether grabbing input grabs the keyboard + * + * This variable can be set to the following values: + * "0" - Grab will affect only the mouse + * "1" - Grab will affect mouse and keyboard + * + * By default SDL will not grab the keyboard so system shortcuts still work. + */ +#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" + +/** + * \brief Minimize your SDL_Window if it loses key focus when in Fullscreen mode. Defaults to true. + * + */ +#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" + + +/** + * \brief A variable controlling whether the idle timer is disabled on iOS. + * + * When an iOS app does not receive touches for some time, the screen is + * dimmed automatically. For games where the accelerometer is the only input + * this is problematic. This functionality can be disabled by setting this + * hint. + * + * This variable can be set to the following values: + * "0" - Enable idle timer + * "1" - Disable idle timer + */ +#define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" + +/** + * \brief A variable controlling which orientations are allowed on iOS. + * + * In some circumstances it is necessary to be able to explicitly control + * which UI orientations are allowed. + * + * This variable is a space delimited list of the following values: + * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" + */ +#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" + + +/** + * \brief A variable that lets you disable the detection and use of Xinput gamepad devices + * + * The variable can be set to the following values: + * "0" - Disable XInput timer (only uses direct input) + * "1" - Enable XInput timer (the default) + */ +#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" + + +/** + * \brief A variable that lets you manually hint extra gamecontroller db entries + * + * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" + + +/** + * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. + * + * The variable can be set to the following values: + * "0" - Disable joystick & gamecontroller input events when the + * application is in the background. + * "1" - Enable joystick & gamecontroller input events when the + * application is in the backgroumd. + * + * The default value is "0". This hint may be set at any time. + */ +#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" + + +/** + * \brief If set to 0 then never set the top most bit on a SDL Window, even if the video mode expects it. + * This is a debugging aid for developers and not expected to be used by end users. The default is "1" + * + * This variable can be set to the following values: + * "0" - don't allow topmost + * "1" - allow topmost + */ +#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" + + +/** + * \brief A variable that controls the timer resolution, in milliseconds. + * + * The higher resolution the timer, the more frequently the CPU services + * timer interrupts, and the more precise delays are, but this takes up + * power and CPU time. This hint is only used on Windows 7 and earlier. + * + * See this blog post for more information: + * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ + * + * If this variable is set to "0", the system timer resolution is not set. + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" + + +/** + * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac) + */ +#define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" + + +/** + * \brief An enumeration of hint priorities + */ +typedef enum +{ + SDL_HINT_DEFAULT, + SDL_HINT_NORMAL, + SDL_HINT_OVERRIDE +} SDL_HintPriority; + + +/** + * \brief Set a hint with a specific priority + * + * The priority controls the behavior when setting a hint that already + * has a value. Hints will replace existing hints of their priority and + * lower. Environment variables are considered to have override priority. + * + * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, + const char *value, + SDL_HintPriority priority); + +/** + * \brief Set a hint with normal priority + * + * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, + const char *value); + +/** + * \brief Get a hint + * + * \return The string value of a hint variable. + */ +extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); + +/** + * \brief Add a function to watch a particular hint + * + * \param name The hint to watch + * \param callback The function to call when the hint value changes + * \param userdata A pointer to pass to the callback function + */ +typedef void (*SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); +extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * \brief Remove a function watching a particular hint + * + * \param name The hint being watched + * \param callback The function being called when the hint value changes + * \param userdata A pointer being passed to the callback function + */ +extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * \brief Clear all hints + * + * This function is called during SDL_Quit() to free stored hints. + */ +extern DECLSPEC void SDLCALL SDL_ClearHints(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_hints_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_joystick.h b/Externals/SDL2-2.0.1/include/SDL_joystick.h new file mode 100644 index 0000000000..b0e4b5dab8 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_joystick.h @@ -0,0 +1,253 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_joystick.h + * + * Include file for SDL joystick event handling + * + * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks, with the exact joystick + * behind a device_index changing as joysticks are plugged and unplugged. + * + * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted + * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. + * + * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of + * the device (a X360 wired controller for example). This identifier is platform dependent. + * + * + */ + +#ifndef _SDL_joystick_h +#define _SDL_joystick_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_joystick.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * for joysticks, and load appropriate drivers. + * + * If you would like to receive joystick updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/* The joystick structure used to identify an SDL joystick */ +struct _SDL_Joystick; +typedef struct _SDL_Joystick SDL_Joystick; + +/* A structure that encodes the stable unique id for a joystick device */ +typedef struct { + Uint8 data[16]; +} SDL_JoystickGUID; + +typedef Sint32 SDL_JoystickID; + + +/* Function prototypes */ +/** + * Count the number of joysticks attached to the system right now + */ +extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); + +/** + * Get the implementation dependent name of a joystick. + * This can be called before any joysticks are opened. + * If no name can be found, this function returns NULL. + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); + +/** + * Open a joystick for use. + * The index passed as an argument refers tothe N'th joystick on the system. + * This index is the value which will identify this joystick in future joystick + * events. + * + * \return A joystick identifier, or NULL if an error occurred. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); + +/** + * Return the name for this currently opened joystick. + * If no name can be found, this function returns NULL. + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick * joystick); + +/** + * Return the GUID for the joystick at this index + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); + +/** + * Return the GUID for this opened joystick + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick * joystick); + +/** + * Return a string representation for this guid. pszGUID must point to at least 33 bytes + * (32 for the string plus a NULL terminator). + */ +extern DECLSPEC void SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); + +/** + * convert a string into a joystick formatted guid + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); + +/** + * Returns SDL_TRUE if the joystick has been opened and currently connected, or SDL_FALSE if it has not. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick * joystick); + +/** + * Get the instance ID of an opened joystick or -1 if the joystick is invalid. + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick * joystick); + +/** + * Get the number of general axis controls on a joystick. + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick * joystick); + +/** + * Get the number of trackballs on a joystick. + * + * Joystick trackballs have only relative motion events associated + * with them and their state cannot be polled. + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick * joystick); + +/** + * Get the number of POV hats on a joystick. + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick * joystick); + +/** + * Get the number of buttons on a joystick. + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick * joystick); + +/** + * Update the current state of the open joysticks. + * + * This is called automatically by the event loop if any joystick + * events are enabled. + */ +extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); + +/** + * Enable/disable joystick event polling. + * + * If joystick events are disabled, you must call SDL_JoystickUpdate() + * yourself and check the state of the joystick when you want joystick + * information. + * + * The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE. + */ +extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); + +/** + * Get the current state of an axis control on a joystick. + * + * The state is a value ranging from -32768 to 32767. + * + * The axis indices start at index 0. + */ +extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, + int axis); + +/** + * \name Hat positions + */ +/* @{ */ +#define SDL_HAT_CENTERED 0x00 +#define SDL_HAT_UP 0x01 +#define SDL_HAT_RIGHT 0x02 +#define SDL_HAT_DOWN 0x04 +#define SDL_HAT_LEFT 0x08 +#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) +#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) +#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) +#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) +/* @} */ + +/** + * Get the current state of a POV hat on a joystick. + * + * The hat indices start at index 0. + * + * \return The return value is one of the following positions: + * - ::SDL_HAT_CENTERED + * - ::SDL_HAT_UP + * - ::SDL_HAT_RIGHT + * - ::SDL_HAT_DOWN + * - ::SDL_HAT_LEFT + * - ::SDL_HAT_RIGHTUP + * - ::SDL_HAT_RIGHTDOWN + * - ::SDL_HAT_LEFTUP + * - ::SDL_HAT_LEFTDOWN + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick * joystick, + int hat); + +/** + * Get the ball axis change since the last poll. + * + * \return 0, or -1 if you passed it invalid parameters. + * + * The ball indices start at index 0. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick * joystick, + int ball, int *dx, int *dy); + +/** + * Get the current state of a button on a joystick. + * + * The button indices start at index 0. + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick * joystick, + int button); + +/** + * Close a joystick previously opened with SDL_JoystickOpen(). + */ +extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick * joystick); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_joystick_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_keyboard.h b/Externals/SDL2-2.0.1/include/SDL_keyboard.h new file mode 100644 index 0000000000..e10f9fd15a --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_keyboard.h @@ -0,0 +1,217 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_keyboard.h + * + * Include file for SDL keyboard event handling + */ + +#ifndef _SDL_keyboard_h +#define _SDL_keyboard_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_keycode.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The SDL keysym structure, used in key events. + * + * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. + */ +typedef struct SDL_Keysym +{ + SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ + SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ + Uint16 mod; /**< current key modifiers */ + Uint32 unused; +} SDL_Keysym; + +/* Function prototypes */ + +/** + * \brief Get the window which currently has keyboard focus. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); + +/** + * \brief Get a snapshot of the current state of the keyboard. + * + * \param numkeys if non-NULL, receives the length of the returned array. + * + * \return An array of key states. Indexes into this array are obtained by using ::SDL_Scancode values. + * + * \b Example: + * \code + * const Uint8 *state = SDL_GetKeyboardState(NULL); + * if ( state[SDL_SCANCODE_RETURN] ) { + * printf(" is pressed.\n"); + * } + * \endcode + */ +extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); + +/** + * \brief Get the current key modifier state for the keyboard. + */ +extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); + +/** + * \brief Set the current key modifier state for the keyboard. + * + * \note This does not change the keyboard state, only the key modifier flags. + */ +extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); + +/** + * \brief Get the key code corresponding to the given scancode according + * to the current keyboard layout. + * + * See ::SDL_Keycode for details. + * + * \sa SDL_GetKeyName() + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); + +/** + * \brief Get the scancode corresponding to the given key code according to the + * current keyboard layout. + * + * See ::SDL_Scancode for details. + * + * \sa SDL_GetScancodeName() + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); + +/** + * \brief Get a human-readable name for a scancode. + * + * \return A pointer to the name for the scancode. + * If the scancode doesn't have a name, this function returns + * an empty string (""). + * + * \sa SDL_Scancode + */ +extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); + +/** + * \brief Get a scancode from a human-readable name + * + * \return scancode, or SDL_SCANCODE_UNKNOWN if the name wasn't recognized + * + * \sa SDL_Scancode + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); + +/** + * \brief Get a human-readable name for a key. + * + * \return A pointer to a UTF-8 string that stays valid at least until the next + * call to this function. If you need it around any longer, you must + * copy it. If the key doesn't have a name, this function returns an + * empty string (""). + * + * \sa SDL_Key + */ +extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); + +/** + * \brief Get a key code from a human-readable name + * + * \return key code, or SDLK_UNKNOWN if the name wasn't recognized + * + * \sa SDL_Keycode + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); + +/** + * \brief Start accepting Unicode text input events. + * This function will show the on-screen keyboard if supported. + * + * \sa SDL_StopTextInput() + * \sa SDL_SetTextInputRect() + * \sa SDL_HasScreenKeyboardSupport() + */ +extern DECLSPEC void SDLCALL SDL_StartTextInput(void); + +/** + * \brief Return whether or not Unicode text input events are enabled. + * + * \sa SDL_StartTextInput() + * \sa SDL_StopTextInput() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); + +/** + * \brief Stop receiving any text input events. + * This function will hide the on-screen keyboard if supported. + * + * \sa SDL_StartTextInput() + * \sa SDL_HasScreenKeyboardSupport() + */ +extern DECLSPEC void SDLCALL SDL_StopTextInput(void); + +/** + * \brief Set the rectangle used to type Unicode text inputs. + * This is used as a hint for IME and on-screen keyboard placement. + * + * \sa SDL_StartTextInput() + */ +extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); + +/** + * \brief Returns whether the platform has some screen keyboard support. + * + * \return SDL_TRUE if some keyboard support is available else SDL_FALSE. + * + * \note Not all screen keyboard functions are supported on all platforms. + * + * \sa SDL_IsScreenKeyboardShown() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); + +/** + * \brief Returns whether the screen keyboard is shown for given window. + * + * \param window The window for which screen keyboard should be queried. + * + * \return SDL_TRUE if screen keyboard is shown else SDL_FALSE. + * + * \sa SDL_HasScreenKeyboardSupport() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_keyboard_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_keysym.h b/Externals/SDL2-2.0.1/include/SDL_keycode.h similarity index 79% rename from Externals/SDL/Include_1.3/SDL_keysym.h rename to Externals/SDL2-2.0.1/include/SDL_keycode.h index 72b2c35fb3..de584e126b 100644 --- a/Externals/SDL/Include_1.3/SDL_keysym.h +++ b/Externals/SDL2-2.0.1/include/SDL_keycode.h @@ -1,49 +1,48 @@ /* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ /** - * \file SDL_keysym.h + * \file SDL_keycode.h + * + * Defines constants which identify keyboard keys and modifiers. */ -#ifndef _SDL_keysym_h -#define _SDL_keysym_h +#ifndef _SDL_keycode_h +#define _SDL_keycode_h #include "SDL_stdinc.h" #include "SDL_scancode.h" /** - * \typedef SDLKey + * \brief The SDL virtual key representation. * - * \brief The SDL virtual key representation. - * - * Values of this type are used to represent keyboard keys using the current - * layout of the keyboard. These values include Unicode values representing - * the unmodified character that would be generated by pressing the key, or - * an SDLK_* constant for those keys that do not generate characters. + * Values of this type are used to represent keyboard keys using the current + * layout of the keyboard. These values include Unicode values representing + * the unmodified character that would be generated by pressing the key, or + * an SDLK_* constant for those keys that do not generate characters. */ -typedef Sint32 SDLKey; +typedef Sint32 SDL_Keycode; #define SDLK_SCANCODE_MASK (1<<30) -#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) +#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) enum { @@ -54,6 +53,73 @@ enum SDLK_BACKSPACE = '\b', SDLK_TAB = '\t', SDLK_SPACE = ' ', + SDLK_EXCLAIM = '!', + SDLK_QUOTEDBL = '"', + SDLK_HASH = '#', + SDLK_PERCENT = '%', + SDLK_DOLLAR = '$', + SDLK_AMPERSAND = '&', + SDLK_QUOTE = '\'', + SDLK_LEFTPAREN = '(', + SDLK_RIGHTPAREN = ')', + SDLK_ASTERISK = '*', + SDLK_PLUS = '+', + SDLK_COMMA = ',', + SDLK_MINUS = '-', + SDLK_PERIOD = '.', + SDLK_SLASH = '/', + SDLK_0 = '0', + SDLK_1 = '1', + SDLK_2 = '2', + SDLK_3 = '3', + SDLK_4 = '4', + SDLK_5 = '5', + SDLK_6 = '6', + SDLK_7 = '7', + SDLK_8 = '8', + SDLK_9 = '9', + SDLK_COLON = ':', + SDLK_SEMICOLON = ';', + SDLK_LESS = '<', + SDLK_EQUALS = '=', + SDLK_GREATER = '>', + SDLK_QUESTION = '?', + SDLK_AT = '@', + /* + Skip uppercase letters + */ + SDLK_LEFTBRACKET = '[', + SDLK_BACKSLASH = '\\', + SDLK_RIGHTBRACKET = ']', + SDLK_CARET = '^', + SDLK_UNDERSCORE = '_', + SDLK_BACKQUOTE = '`', + SDLK_a = 'a', + SDLK_b = 'b', + SDLK_c = 'c', + SDLK_d = 'd', + SDLK_e = 'e', + SDLK_f = 'f', + SDLK_g = 'g', + SDLK_h = 'h', + SDLK_i = 'i', + SDLK_j = 'j', + SDLK_k = 'k', + SDLK_l = 'l', + SDLK_m = 'm', + SDLK_n = 'n', + SDLK_o = 'o', + SDLK_p = 'p', + SDLK_q = 'q', + SDLK_r = 'r', + SDLK_s = 's', + SDLK_t = 't', + SDLK_u = 'u', + SDLK_v = 'v', + SDLK_w = 'w', + SDLK_x = 'x', + SDLK_y = 'y', + SDLK_z = 'z', SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), @@ -246,9 +312,7 @@ enum }; /** - * \enum SDLMod - * - * \brief Enumeration of valid key mods (possibly OR'd together) + * \brief Enumeration of valid key mods (possibly OR'd together). */ typedef enum { @@ -265,13 +329,13 @@ typedef enum KMOD_CAPS = 0x2000, KMOD_MODE = 0x4000, KMOD_RESERVED = 0x8000 -} SDLMod; +} SDL_Keymod; -#define KMOD_CTRL (KMOD_LCTRL|KMOD_RCTRL) -#define KMOD_SHIFT (KMOD_LSHIFT|KMOD_RSHIFT) -#define KMOD_ALT (KMOD_LALT|KMOD_RALT) -#define KMOD_GUI (KMOD_LGUI|KMOD_RGUI) +#define KMOD_CTRL (KMOD_LCTRL|KMOD_RCTRL) +#define KMOD_SHIFT (KMOD_LSHIFT|KMOD_RSHIFT) +#define KMOD_ALT (KMOD_LALT|KMOD_RALT) +#define KMOD_GUI (KMOD_LGUI|KMOD_RGUI) -#endif /* _SDL_keysym_h */ +#endif /* _SDL_keycode_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_loadso.h b/Externals/SDL2-2.0.1/include/SDL_loadso.h new file mode 100644 index 0000000000..790d0a724c --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_loadso.h @@ -0,0 +1,81 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_loadso.h + * + * System dependent library loading routines + * + * Some things to keep in mind: + * \li These functions only work on C function names. Other languages may + * have name mangling and intrinsic language support that varies from + * compiler to compiler. + * \li Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * \li Avoid namespace collisions. If you load a symbol from the library, + * it is not defined whether or not it goes into the global symbol + * namespace for the application. If it does and it conflicts with + * symbols in your code or other shared libraries, you will not get + * the results you expect. :) + */ + +#ifndef _SDL_loadso_h +#define _SDL_loadso_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This function dynamically loads a shared object and returns a pointer + * to the object handle (or NULL if there was an error). + * The 'sofile' parameter is a system dependent name of the object file. + */ +extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); + +/** + * Given an object handle, this function looks up the address of the + * named function in the shared object and returns it. This address + * is no longer valid after calling SDL_UnloadObject(). + */ +extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, + const char *name); + +/** + * Unload a shared object from memory. + */ +extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_loadso_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_log.h b/Externals/SDL2-2.0.1/include/SDL_log.h new file mode 100644 index 0000000000..79ae4cde43 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_log.h @@ -0,0 +1,211 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_log.h + * + * Simple log messages with categories and priorities. + * + * By default logs are quiet, but if you're debugging SDL you might want: + * + * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); + * + * Here's where the messages go on different platforms: + * Windows: debug output stream + * Android: log output + * Others: standard error output (stderr) + */ + +#ifndef _SDL_log_h +#define _SDL_log_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * \brief The maximum size of a log message + * + * Messages longer than the maximum size will be truncated + */ +#define SDL_MAX_LOG_MESSAGE 4096 + +/** + * \brief The predefined log categories + * + * By default the application category is enabled at the INFO level, + * the assert category is enabled at the WARN level, test is enabled + * at the VERBOSE level and all other categories are enabled at the + * CRITICAL level. + */ +enum +{ + SDL_LOG_CATEGORY_APPLICATION, + SDL_LOG_CATEGORY_ERROR, + SDL_LOG_CATEGORY_ASSERT, + SDL_LOG_CATEGORY_SYSTEM, + SDL_LOG_CATEGORY_AUDIO, + SDL_LOG_CATEGORY_VIDEO, + SDL_LOG_CATEGORY_RENDER, + SDL_LOG_CATEGORY_INPUT, + SDL_LOG_CATEGORY_TEST, + + /* Reserved for future SDL library use */ + SDL_LOG_CATEGORY_RESERVED1, + SDL_LOG_CATEGORY_RESERVED2, + SDL_LOG_CATEGORY_RESERVED3, + SDL_LOG_CATEGORY_RESERVED4, + SDL_LOG_CATEGORY_RESERVED5, + SDL_LOG_CATEGORY_RESERVED6, + SDL_LOG_CATEGORY_RESERVED7, + SDL_LOG_CATEGORY_RESERVED8, + SDL_LOG_CATEGORY_RESERVED9, + SDL_LOG_CATEGORY_RESERVED10, + + /* Beyond this point is reserved for application use, e.g. + enum { + MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, + MYAPP_CATEGORY_AWESOME2, + MYAPP_CATEGORY_AWESOME3, + ... + }; + */ + SDL_LOG_CATEGORY_CUSTOM +}; + +/** + * \brief The predefined log priorities + */ +typedef enum +{ + SDL_LOG_PRIORITY_VERBOSE = 1, + SDL_LOG_PRIORITY_DEBUG, + SDL_LOG_PRIORITY_INFO, + SDL_LOG_PRIORITY_WARN, + SDL_LOG_PRIORITY_ERROR, + SDL_LOG_PRIORITY_CRITICAL, + SDL_NUM_LOG_PRIORITIES +} SDL_LogPriority; + + +/** + * \brief Set the priority of all log categories + */ +extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); + +/** + * \brief Set the priority of a particular log category + */ +extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, + SDL_LogPriority priority); + +/** + * \brief Get the priority of a particular log category + */ +extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); + +/** + * \brief Reset all priorities to default. + * + * \note This is called in SDL_Quit(). + */ +extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); + +/** + * \brief Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO + */ +extern DECLSPEC void SDLCALL SDL_Log(const char *fmt, ...); + +/** + * \brief Log a message with SDL_LOG_PRIORITY_VERBOSE + */ +extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, const char *fmt, ...); + +/** + * \brief Log a message with SDL_LOG_PRIORITY_DEBUG + */ +extern DECLSPEC void SDLCALL SDL_LogDebug(int category, const char *fmt, ...); + +/** + * \brief Log a message with SDL_LOG_PRIORITY_INFO + */ +extern DECLSPEC void SDLCALL SDL_LogInfo(int category, const char *fmt, ...); + +/** + * \brief Log a message with SDL_LOG_PRIORITY_WARN + */ +extern DECLSPEC void SDLCALL SDL_LogWarn(int category, const char *fmt, ...); + +/** + * \brief Log a message with SDL_LOG_PRIORITY_ERROR + */ +extern DECLSPEC void SDLCALL SDL_LogError(int category, const char *fmt, ...); + +/** + * \brief Log a message with SDL_LOG_PRIORITY_CRITICAL + */ +extern DECLSPEC void SDLCALL SDL_LogCritical(int category, const char *fmt, ...); + +/** + * \brief Log a message with the specified category and priority. + */ +extern DECLSPEC void SDLCALL SDL_LogMessage(int category, + SDL_LogPriority priority, + const char *fmt, ...); + +/** + * \brief Log a message with the specified category and priority. + */ +extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, + SDL_LogPriority priority, + const char *fmt, va_list ap); + +/** + * \brief The prototype for the log output function + */ +typedef void (*SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); + +/** + * \brief Get the current log output function. + */ +extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); + +/** + * \brief This function allows you to replace the default log output + * function with one of your own. + */ +extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_log_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_main.h b/Externals/SDL2-2.0.1/include/SDL_main.h new file mode 100644 index 0000000000..b7e4a10e5e --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_main.h @@ -0,0 +1,125 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_main_h +#define _SDL_main_h + +#include "SDL_stdinc.h" + +/** + * \file SDL_main.h + * + * Redefine main() on some platforms so that it is called by SDL. + */ + +#ifndef SDL_MAIN_HANDLED +#if defined(__WIN32__) +/* On Windows SDL provides WinMain(), which parses the command line and passes + the arguments to your main function. + + If you provide your own WinMain(), you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#elif defined(__IPHONEOS__) +/* On iOS SDL provides a main function that creates an application delegate + and starts the iOS application run loop. + + See src/video/uikit/SDL_uikitappdelegate.m for more details. + */ +#define SDL_MAIN_NEEDED + +#elif defined(__ANDROID__) +/* On Android SDL provides a Java class in SDLActivity.java that is the + main activity entry point. + + See README-android.txt for more details on extending that class. + */ +#define SDL_MAIN_NEEDED + +#endif +#endif /* SDL_MAIN_HANDLED */ + +#ifdef __cplusplus +#define C_LINKAGE "C" +#else +#define C_LINKAGE +#endif /* __cplusplus */ + +/** + * \file SDL_main.h + * + * The application's main() function must be called with C linkage, + * and should be declared like this: + * \code + * #ifdef __cplusplus + * extern "C" + * #endif + * int main(int argc, char *argv[]) + * { + * } + * \endcode + */ + +#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) +#define main SDL_main +#endif + +/** + * The prototype for the application's main() function + */ +extern C_LINKAGE int SDL_main(int argc, char *argv[]); + + +#include "begin_code.h" +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This is called by the real SDL main function to let the rest of the + * library know that initialization was done properly. + * + * Calling this yourself without knowing what you're doing can cause + * crashes and hard to diagnose problems with your application. + */ +extern DECLSPEC void SDL_SetMainReady(void); + +#ifdef __WIN32__ + +/** + * This can be called to set the application class at startup + */ +extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, + void *hInst); +extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); + +#endif /* __WIN32__ */ + + +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_main_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_messagebox.h b/Externals/SDL2-2.0.1/include/SDL_messagebox.h new file mode 100644 index 0000000000..cb1a1ccff0 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_messagebox.h @@ -0,0 +1,144 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_messagebox_h +#define _SDL_messagebox_h + +#include "SDL_stdinc.h" +#include "SDL_video.h" /* For SDL_Window */ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SDL_MessageBox flags. If supported will display warning icon, etc. + */ +typedef enum +{ + SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ + SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ + SDL_MESSAGEBOX_INFORMATION = 0x00000040 /**< informational dialog */ +} SDL_MessageBoxFlags; + +/** + * \brief Flags for SDL_MessageBoxButtonData. + */ +typedef enum +{ + SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ + SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ +} SDL_MessageBoxButtonFlags; + +/** + * \brief Individual button data. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ + int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ + const char * text; /**< The UTF-8 button text */ +} SDL_MessageBoxButtonData; + +/** + * \brief RGB value used in a message box color scheme + */ +typedef struct +{ + Uint8 r, g, b; +} SDL_MessageBoxColor; + +typedef enum +{ + SDL_MESSAGEBOX_COLOR_BACKGROUND, + SDL_MESSAGEBOX_COLOR_TEXT, + SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, + SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, + SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, + SDL_MESSAGEBOX_COLOR_MAX +} SDL_MessageBoxColorType; + +/** + * \brief A set of colors to use for message box dialogs + */ +typedef struct +{ + SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; +} SDL_MessageBoxColorScheme; + +/** + * \brief MessageBox structure containing title, text, window, etc. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxFlags */ + SDL_Window *window; /**< Parent window, can be NULL */ + const char *title; /**< UTF-8 title */ + const char *message; /**< UTF-8 message text */ + + int numbuttons; + const SDL_MessageBoxButtonData *buttons; + + const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ +} SDL_MessageBoxData; + +/** + * \brief Create a modal message box. + * + * \param messageboxdata The SDL_MessageBoxData structure with title, text, etc. + * \param buttonid The pointer to which user id of hit button should be copied. + * + * \return -1 on error, otherwise 0 and buttonid contains user id of button + * hit or -1 if dialog was closed. + * + * \note This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or + * closes the messagebox. + */ +extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + +/** + * \brief Create a simple modal message box + * + * \param flags ::SDL_MessageBoxFlags + * \param title UTF-8 title text + * \param message UTF-8 message text + * \param window The parent window, or NULL for no parent + * + * \return 0 on success, -1 on error + * + * \sa SDL_ShowMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_messagebox_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_mouse.h b/Externals/SDL2-2.0.1/include/SDL_mouse.h new file mode 100644 index 0000000000..36c29e90a7 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_mouse.h @@ -0,0 +1,224 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_mouse.h + * + * Include file for SDL mouse event handling. + */ + +#ifndef _SDL_mouse_h +#define _SDL_mouse_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SDL_Cursor SDL_Cursor; /* Implementation dependent */ + +/** + * \brief Cursor types for SDL_CreateSystemCursor. + */ +typedef enum +{ + SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ + SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ + SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ + SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ + SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ + SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ + SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ + SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ + SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ + SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ + SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ + SDL_SYSTEM_CURSOR_HAND, /**< Hand */ + SDL_NUM_SYSTEM_CURSORS +} SDL_SystemCursor; + +/* Function prototypes */ + +/** + * \brief Get the window which currently has mouse focus. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); + +/** + * \brief Retrieve the current state of the mouse. + * + * The current button state is returned as a button bitmask, which can + * be tested using the SDL_BUTTON(X) macros, and x and y are set to the + * mouse cursor position relative to the focus window for the currently + * selected mouse. You can pass NULL for either x or y. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); + +/** + * \brief Retrieve the relative state of the mouse. + * + * The current button state is returned as a button bitmask, which can + * be tested using the SDL_BUTTON(X) macros, and x and y are set to the + * mouse deltas since the last call to SDL_GetRelativeMouseState(). + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); + +/** + * \brief Moves the mouse to the given position within the window. + * + * \param window The window to move the mouse into, or NULL for the current mouse focus + * \param x The x coordinate within the window + * \param y The y coordinate within the window + * + * \note This function generates a mouse motion event + */ +extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, + int x, int y); + +/** + * \brief Set relative mouse mode. + * + * \param enabled Whether or not to enable relative mode + * + * \return 0 on success, or -1 if relative mode is not supported. + * + * While the mouse is in relative mode, the cursor is hidden, and the + * driver will try to report continuous motion in the current window. + * Only relative motion events will be delivered, the mouse position + * will not change. + * + * \note This function will flush any pending mouse motion. + * + * \sa SDL_GetRelativeMouseMode() + */ +extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); + +/** + * \brief Query whether relative mouse mode is enabled. + * + * \sa SDL_SetRelativeMouseMode() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); + +/** + * \brief Create a cursor, using the specified bitmap data and + * mask (in MSB format). + * + * The cursor width must be a multiple of 8 bits. + * + * The cursor is created in black and white according to the following: + * + * + * + * + * + * + *
data mask resulting pixel on screen
0 1 White
1 1 Black
0 0 Transparent
1 0 Inverted color if possible, black + * if not.
+ * + * \sa SDL_FreeCursor() + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, + const Uint8 * mask, + int w, int h, int hot_x, + int hot_y); + +/** + * \brief Create a color cursor. + * + * \sa SDL_FreeCursor() + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, + int hot_x, + int hot_y); + +/** + * \brief Create a system cursor. + * + * \sa SDL_FreeCursor() + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); + +/** + * \brief Set the active cursor. + */ +extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); + +/** + * \brief Return the active cursor. + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); + +/** + * \brief Return the default cursor. + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); + +/** + * \brief Frees a cursor created with SDL_CreateCursor(). + * + * \sa SDL_CreateCursor() + */ +extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); + +/** + * \brief Toggle whether or not the cursor is shown. + * + * \param toggle 1 to show the cursor, 0 to hide it, -1 to query the current + * state. + * + * \return 1 if the cursor is shown, or 0 if the cursor is hidden. + */ +extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); + +/** + * Used as a mask when testing buttons in buttonstate. + * - Button 1: Left mouse button + * - Button 2: Middle mouse button + * - Button 3: Right mouse button + */ +#define SDL_BUTTON(X) (1 << ((X)-1)) +#define SDL_BUTTON_LEFT 1 +#define SDL_BUTTON_MIDDLE 2 +#define SDL_BUTTON_RIGHT 3 +#define SDL_BUTTON_X1 4 +#define SDL_BUTTON_X2 5 +#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) +#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) +#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) +#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) +#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_mouse_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_mutex.h b/Externals/SDL2-2.0.1/include/SDL_mutex.h new file mode 100644 index 0000000000..2b5df0ec33 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_mutex.h @@ -0,0 +1,251 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_mutex_h +#define _SDL_mutex_h + +/** + * \file SDL_mutex.h + * + * Functions to provide thread synchronization primitives. + */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Synchronization functions which can time out return this value + * if they time out. + */ +#define SDL_MUTEX_TIMEDOUT 1 + +/** + * This is the timeout value which corresponds to never time out. + */ +#define SDL_MUTEX_MAXWAIT (~(Uint32)0) + + +/** + * \name Mutex functions + */ +/* @{ */ + +/* The SDL mutex structure, defined in SDL_sysmutex.c */ +struct SDL_mutex; +typedef struct SDL_mutex SDL_mutex; + +/** + * Create a mutex, initialized unlocked. + */ +extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); + +/** + * Lock the mutex. + * + * \return 0, or -1 on error. + */ +#define SDL_mutexP(m) SDL_LockMutex(m) +extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex); + +/** + * Try to lock the mutex + * + * \return 0, SDL_MUTEX_TIMEDOUT, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex); + +/** + * Unlock the mutex. + * + * \return 0, or -1 on error. + * + * \warning It is an error to unlock a mutex that has not been locked by + * the current thread, and doing so results in undefined behavior. + */ +#define SDL_mutexV(m) SDL_UnlockMutex(m) +extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); + +/** + * Destroy a mutex. + */ +extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); + +/* @} *//* Mutex functions */ + + +/** + * \name Semaphore functions + */ +/* @{ */ + +/* The SDL semaphore structure, defined in SDL_syssem.c */ +struct SDL_semaphore; +typedef struct SDL_semaphore SDL_sem; + +/** + * Create a semaphore, initialized with value, returns NULL on failure. + */ +extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); + +/** + * Destroy a semaphore. + */ +extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); + +/** + * This function suspends the calling thread until the semaphore pointed + * to by \c sem has a positive count. It then atomically decreases the + * semaphore count. + */ +extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); + +/** + * Non-blocking variant of SDL_SemWait(). + * + * \return 0 if the wait succeeds, ::SDL_MUTEX_TIMEDOUT if the wait would + * block, and -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); + +/** + * Variant of SDL_SemWait() with a timeout in milliseconds. + * + * \return 0 if the wait succeeds, ::SDL_MUTEX_TIMEDOUT if the wait does not + * succeed in the allotted time, and -1 on error. + * + * \warning On some platforms this function is implemented by looping with a + * delay of 1 ms, and so should be avoided if possible. + */ +extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); + +/** + * Atomically increases the semaphore's count (not blocking). + * + * \return 0, or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); + +/** + * Returns the current count of the semaphore. + */ +extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); + +/* @} *//* Semaphore functions */ + + +/** + * \name Condition variable functions + */ +/* @{ */ + +/* The SDL condition variable structure, defined in SDL_syscond.c */ +struct SDL_cond; +typedef struct SDL_cond SDL_cond; + +/** + * Create a condition variable. + * + * Typical use of condition variables: + * + * Thread A: + * SDL_LockMutex(lock); + * while ( ! condition ) { + * SDL_CondWait(cond, lock); + * } + * SDL_UnlockMutex(lock); + * + * Thread B: + * SDL_LockMutex(lock); + * ... + * condition = true; + * ... + * SDL_CondSignal(cond); + * SDL_UnlockMutex(lock); + * + * There is some discussion whether to signal the condition variable + * with the mutex locked or not. There is some potential performance + * benefit to unlocking first on some platforms, but there are some + * potential race conditions depending on how your code is structured. + * + * In general it's safer to signal the condition variable while the + * mutex is locked. + */ +extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); + +/** + * Destroy a condition variable. + */ +extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); + +/** + * Restart one of the threads that are waiting on the condition variable. + * + * \return 0 or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); + +/** + * Restart all threads that are waiting on the condition variable. + * + * \return 0 or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); + +/** + * Wait on the condition variable, unlocking the provided mutex. + * + * \warning The mutex must be locked before entering this function! + * + * The mutex is re-locked once the condition variable is signaled. + * + * \return 0 when it is signaled, or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); + +/** + * Waits for at most \c ms milliseconds, and returns 0 if the condition + * variable is signaled, ::SDL_MUTEX_TIMEDOUT if the condition is not + * signaled in the allotted time, and -1 on error. + * + * \warning On some platforms this function is implemented by looping with a + * delay of 1 ms, and so should be avoided if possible. + */ +extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, + SDL_mutex * mutex, Uint32 ms); + +/* @} *//* Condition variable functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_mutex_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.2/SDL_name.h b/Externals/SDL2-2.0.1/include/SDL_name.h similarity index 84% rename from Externals/SDL/Include_1.2/SDL_name.h rename to Externals/SDL2-2.0.1/include/SDL_name.h index 511619af56..d0469e1f29 100644 --- a/Externals/SDL/Include_1.2/SDL_name.h +++ b/Externals/SDL2-2.0.1/include/SDL_name.h @@ -6,6 +6,6 @@ #define NeedFunctionPrototypes 1 #endif -#define SDL_NAME(X) SDL_##X +#define SDL_NAME(X) SDL_##X #endif /* _SDLname_h_ */ diff --git a/Externals/SDL/Include_1.3/SDL_opengl.h b/Externals/SDL2-2.0.1/include/SDL_opengl.h similarity index 55% rename from Externals/SDL/Include_1.3/SDL_opengl.h rename to Externals/SDL2-2.0.1/include/SDL_opengl.h index 2a2ebb47ee..2f120aa95a 100644 --- a/Externals/SDL/Include_1.3/SDL_opengl.h +++ b/Externals/SDL2-2.0.1/include/SDL_opengl.h @@ -1,29 +1,37 @@ /* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ -/* This is a simple file to encapsulate the OpenGL API headers */ +/** + * \file SDL_opengl.h + * + * This is a simple file to encapsulate the OpenGL API headers. + */ + +#ifndef _SDL_opengl_h +#define _SDL_opengl_h #include "SDL_config.h" +#ifndef __IPHONEOS__ + #ifdef __WIN32__ #define WIN32_LEAN_AND_MEAN #ifndef NOMINMAX @@ -31,27 +39,42 @@ #endif #include #endif + +#ifdef __glext_h_ +/* Someone has already included glext.h */ +#define NO_SDL_GLEXT +#endif #ifndef NO_SDL_GLEXT #define __glext_h_ /* Don't let gl.h include glext.h */ #endif #if defined(__MACOSX__) #include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ +#define __X_GL_H #else #include /* Header File For The OpenGL Library */ -#include /* Header File For The GLU Library */ #endif #ifndef NO_SDL_GLEXT #undef __glext_h_ #endif -/* This file is included because glext.h is not available on some systems. - If you don't want this version included, simply define "NO_SDL_GLEXT" - The latest version is available from: - http://oss.sgi.com/projects/ogl-sample/registry/ +/** + * \file SDL_opengl.h + * + * This file is included because glext.h is not available on some systems. + * If you don't want this version included, simply define ::NO_SDL_GLEXT. + * + * The latest version is available from: + * http://www.opengl.org/registry/ */ + +/** + * \def NO_SDL_GLEXT + * + * Define this if you have your own version of glext.h and want to disable the + * version included in SDL_opengl.h. + */ + #if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) -/* *INDENT-OFF* */ #ifndef __glext_h_ #define __glext_h_ @@ -60,8 +83,8 @@ extern "C" { #endif /* -** Copyright (c) 2007 The Khronos Group Inc. -** +** Copyright (c) 2007-2010 The Khronos Group Inc. +** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including @@ -69,10 +92,10 @@ extern "C" { ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: -** +** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. -** +** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. @@ -82,6 +105,12 @@ extern "C" { ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ +/* Header file version number, required by OpenGL ABI for Linux */ +/* glext.h last updated $Date: 2010-08-03 01:30:25 -0700 (Tue, 03 Aug 2010) $ */ +/* Current version at http://www.opengl.org/registry/ */ +#define GL_GLEXT_VERSION 64 +/* Function declaration macros - to move into glplatform.h */ + #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define WIN32_LEAN_AND_MEAN 1 #include @@ -99,18 +128,12 @@ extern "C" { /*************************************************************/ -/* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated 2008/11/14 */ -/* Current version at http://www.opengl.org/registry/ */ -#define GL_GLEXT_VERSION 44 - #ifndef GL_VERSION_1_2 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_RESCALE_NORMAL 0x803A #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C @@ -137,17 +160,21 @@ extern "C" { #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #endif +#ifndef GL_VERSION_1_2_DEPRECATED +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#endif + #ifndef GL_ARB_imaging #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 @@ -160,6 +187,9 @@ extern "C" { #define GL_BLEND_EQUATION 0x8009 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B +#endif + +#ifndef GL_ARB_imaging_DEPRECATED #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 @@ -260,12 +290,6 @@ extern "C" { #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F @@ -274,9 +298,6 @@ extern "C" { #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 @@ -287,10 +308,6 @@ extern "C" { #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF @@ -299,6 +316,22 @@ extern "C" { #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D +#endif + +#ifndef GL_VERSION_1_3_DEPRECATED +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 @@ -330,16 +363,26 @@ extern "C" { #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#endif + +#ifndef GL_VERSION_1_4_DEPRECATED +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 @@ -355,15 +398,8 @@ extern "C" { #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_COMPARE_R_TO_TEXTURE 0x884E #endif @@ -378,15 +414,6 @@ extern "C" { #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 @@ -404,31 +431,42 @@ extern "C" { #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 -#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE -#define GL_FOG_COORD GL_FOG_COORDINATE -#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE -#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE -#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER -#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#define GL_SRC0_RGB GL_SOURCE0_RGB -#define GL_SRC1_RGB GL_SOURCE1_RGB -#define GL_SRC2_RGB GL_SOURCE2_RGB -#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA -#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA -#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA +#endif + +#ifndef GL_VERSION_1_5_DEPRECATED +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC1_ALPHA 0x8589 +#define GL_SRC2_ALPHA 0x858A #endif #ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION +#define GL_BLEND_EQUATION_RGB 0x8009 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 @@ -452,11 +490,8 @@ extern "C" { #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_COORDS 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 @@ -507,8 +542,14 @@ extern "C" { #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #endif +#ifndef GL_VERSION_2_0_DEPRECATED +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +#endif + #ifndef GL_VERSION_2_1 -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED @@ -523,25 +564,31 @@ extern "C" { #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#endif + +#ifndef GL_VERSION_2_1_DEPRECATED +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B #endif #ifndef GL_VERSION_3_0 -#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB -#define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 -#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 -#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 -#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 -#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 -#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 -#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D @@ -559,19 +606,9 @@ extern "C" { #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A @@ -613,7 +650,6 @@ extern "C" { #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 -#define GL_ALPHA_INTEGER 0x8D97 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A @@ -642,6 +678,9 @@ extern "C" { #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 /* Reuse tokens from ARB_depth_buffer_float */ /* reuse GL_DEPTH_COMPONENT32F */ /* reuse GL_DEPTH32F_STENCIL8 */ @@ -669,8 +708,6 @@ extern "C" { /* reuse GL_TEXTURE_GREEN_TYPE */ /* reuse GL_TEXTURE_BLUE_TYPE */ /* reuse GL_TEXTURE_ALPHA_TYPE */ -/* reuse GL_TEXTURE_LUMINANCE_TYPE */ -/* reuse GL_TEXTURE_INTENSITY_TYPE */ /* reuse GL_TEXTURE_DEPTH_TYPE */ /* reuse GL_UNSIGNED_NORMALIZED */ /* reuse GL_FRAMEBUFFER_BINDING */ @@ -770,6 +807,323 @@ extern "C" { /* reuse GL_VERTEX_ARRAY_BINDING */ #endif +#ifndef GL_VERSION_3_0_DEPRECATED +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +/* Reuse tokens from ARB_framebuffer_object */ +/* reuse GL_TEXTURE_LUMINANCE_TYPE */ +/* reuse GL_TEXTURE_INTENSITY_TYPE */ +#endif + +#ifndef GL_VERSION_3_1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT 0x8C2E +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +/* Reuse tokens from ARB_copy_buffer */ +/* reuse GL_COPY_READ_BUFFER */ +/* reuse GL_COPY_WRITE_BUFFER */ +/* Reuse tokens from ARB_draw_instanced (none) */ +/* Reuse tokens from ARB_uniform_buffer_object */ +/* reuse GL_UNIFORM_BUFFER */ +/* reuse GL_UNIFORM_BUFFER_BINDING */ +/* reuse GL_UNIFORM_BUFFER_START */ +/* reuse GL_UNIFORM_BUFFER_SIZE */ +/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */ +/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */ +/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */ +/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */ +/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */ +/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */ +/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */ +/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */ +/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */ +/* reuse GL_ACTIVE_UNIFORM_BLOCKS */ +/* reuse GL_UNIFORM_TYPE */ +/* reuse GL_UNIFORM_SIZE */ +/* reuse GL_UNIFORM_NAME_LENGTH */ +/* reuse GL_UNIFORM_BLOCK_INDEX */ +/* reuse GL_UNIFORM_OFFSET */ +/* reuse GL_UNIFORM_ARRAY_STRIDE */ +/* reuse GL_UNIFORM_MATRIX_STRIDE */ +/* reuse GL_UNIFORM_IS_ROW_MAJOR */ +/* reuse GL_UNIFORM_BLOCK_BINDING */ +/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */ +/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */ +/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */ +/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */ +/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */ +/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */ +/* reuse GL_INVALID_INDEX */ +#endif + +#ifndef GL_VERSION_3_2 +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +/* reuse GL_MAX_VARYING_COMPONENTS */ +/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ +/* Reuse tokens from ARB_depth_clamp */ +/* reuse GL_DEPTH_CLAMP */ +/* Reuse tokens from ARB_draw_elements_base_vertex (none) */ +/* Reuse tokens from ARB_fragment_coord_conventions (none) */ +/* Reuse tokens from ARB_provoking_vertex */ +/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ +/* reuse GL_FIRST_VERTEX_CONVENTION */ +/* reuse GL_LAST_VERTEX_CONVENTION */ +/* reuse GL_PROVOKING_VERTEX */ +/* Reuse tokens from ARB_seamless_cube_map */ +/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ +/* Reuse tokens from ARB_sync */ +/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */ +/* reuse GL_OBJECT_TYPE */ +/* reuse GL_SYNC_CONDITION */ +/* reuse GL_SYNC_STATUS */ +/* reuse GL_SYNC_FLAGS */ +/* reuse GL_SYNC_FENCE */ +/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */ +/* reuse GL_UNSIGNALED */ +/* reuse GL_SIGNALED */ +/* reuse GL_ALREADY_SIGNALED */ +/* reuse GL_TIMEOUT_EXPIRED */ +/* reuse GL_CONDITION_SATISFIED */ +/* reuse GL_WAIT_FAILED */ +/* reuse GL_TIMEOUT_IGNORED */ +/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */ +/* reuse GL_TIMEOUT_IGNORED */ +/* Reuse tokens from ARB_texture_multisample */ +/* reuse GL_SAMPLE_POSITION */ +/* reuse GL_SAMPLE_MASK */ +/* reuse GL_SAMPLE_MASK_VALUE */ +/* reuse GL_MAX_SAMPLE_MASK_WORDS */ +/* reuse GL_TEXTURE_2D_MULTISAMPLE */ +/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */ +/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ +/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */ +/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */ +/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */ +/* reuse GL_TEXTURE_SAMPLES */ +/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */ +/* reuse GL_SAMPLER_2D_MULTISAMPLE */ +/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */ +/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */ +/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */ +/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ +/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ +/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */ +/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */ +/* reuse GL_MAX_INTEGER_SAMPLES */ +/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */ +#endif + +#ifndef GL_VERSION_3_3 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +/* Reuse tokens from ARB_blend_func_extended */ +/* reuse GL_SRC1_COLOR */ +/* reuse GL_ONE_MINUS_SRC1_COLOR */ +/* reuse GL_ONE_MINUS_SRC1_ALPHA */ +/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */ +/* Reuse tokens from ARB_explicit_attrib_location (none) */ +/* Reuse tokens from ARB_occlusion_query2 */ +/* reuse GL_ANY_SAMPLES_PASSED */ +/* Reuse tokens from ARB_sampler_objects */ +/* reuse GL_SAMPLER_BINDING */ +/* Reuse tokens from ARB_shader_bit_encoding (none) */ +/* Reuse tokens from ARB_texture_rgb10_a2ui */ +/* reuse GL_RGB10_A2UI */ +/* Reuse tokens from ARB_texture_swizzle */ +/* reuse GL_TEXTURE_SWIZZLE_R */ +/* reuse GL_TEXTURE_SWIZZLE_G */ +/* reuse GL_TEXTURE_SWIZZLE_B */ +/* reuse GL_TEXTURE_SWIZZLE_A */ +/* reuse GL_TEXTURE_SWIZZLE_RGBA */ +/* Reuse tokens from ARB_timer_query */ +/* reuse GL_TIME_ELAPSED */ +/* reuse GL_TIMESTAMP */ +/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */ +/* reuse GL_INT_2_10_10_10_REV */ +#endif + +#ifndef GL_VERSION_4_0 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +/* Reuse tokens from ARB_texture_query_lod (none) */ +/* Reuse tokens from ARB_draw_buffers_blend (none) */ +/* Reuse tokens from ARB_draw_indirect */ +/* reuse GL_DRAW_INDIRECT_BUFFER */ +/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */ +/* Reuse tokens from ARB_gpu_shader5 */ +/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */ +/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */ +/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */ +/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */ +/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */ +/* reuse GL_MAX_VERTEX_STREAMS */ +/* Reuse tokens from ARB_gpu_shader_fp64 */ +/* reuse GL_DOUBLE_VEC2 */ +/* reuse GL_DOUBLE_VEC3 */ +/* reuse GL_DOUBLE_VEC4 */ +/* reuse GL_DOUBLE_MAT2 */ +/* reuse GL_DOUBLE_MAT3 */ +/* reuse GL_DOUBLE_MAT4 */ +/* reuse GL_DOUBLE_MAT2x3 */ +/* reuse GL_DOUBLE_MAT2x4 */ +/* reuse GL_DOUBLE_MAT3x2 */ +/* reuse GL_DOUBLE_MAT3x4 */ +/* reuse GL_DOUBLE_MAT4x2 */ +/* reuse GL_DOUBLE_MAT4x3 */ +/* Reuse tokens from ARB_shader_subroutine */ +/* reuse GL_ACTIVE_SUBROUTINES */ +/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */ +/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */ +/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */ +/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */ +/* reuse GL_MAX_SUBROUTINES */ +/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */ +/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ +/* reuse GL_COMPATIBLE_SUBROUTINES */ +/* Reuse tokens from ARB_tessellation_shader */ +/* reuse GL_PATCHES */ +/* reuse GL_PATCH_VERTICES */ +/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */ +/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */ +/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */ +/* reuse GL_TESS_GEN_MODE */ +/* reuse GL_TESS_GEN_SPACING */ +/* reuse GL_TESS_GEN_VERTEX_ORDER */ +/* reuse GL_TESS_GEN_POINT_MODE */ +/* reuse GL_ISOLINES */ +/* reuse GL_FRACTIONAL_ODD */ +/* reuse GL_FRACTIONAL_EVEN */ +/* reuse GL_MAX_PATCH_VERTICES */ +/* reuse GL_MAX_TESS_GEN_LEVEL */ +/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */ +/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */ +/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */ +/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */ +/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */ +/* reuse GL_MAX_TESS_PATCH_COMPONENTS */ +/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */ +/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */ +/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */ +/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */ +/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */ +/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */ +/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */ +/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */ +/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */ +/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */ +/* reuse GL_TESS_EVALUATION_SHADER */ +/* reuse GL_TESS_CONTROL_SHADER */ +/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */ +/* Reuse tokens from ARB_transform_feedback2 */ +/* reuse GL_TRANSFORM_FEEDBACK */ +/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ +/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ +/* reuse GL_TRANSFORM_FEEDBACK_BINDING */ +/* Reuse tokens from ARB_transform_feedback3 */ +/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */ +/* reuse GL_MAX_VERTEX_STREAMS */ +#endif + +#ifndef GL_VERSION_4_1 +/* Reuse tokens from ARB_ES2_compatibility */ +/* reuse GL_FIXED */ +/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */ +/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */ +/* reuse GL_LOW_FLOAT */ +/* reuse GL_MEDIUM_FLOAT */ +/* reuse GL_HIGH_FLOAT */ +/* reuse GL_LOW_INT */ +/* reuse GL_MEDIUM_INT */ +/* reuse GL_HIGH_INT */ +/* reuse GL_SHADER_COMPILER */ +/* reuse GL_NUM_SHADER_BINARY_FORMATS */ +/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */ +/* reuse GL_MAX_VARYING_VECTORS */ +/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */ +/* Reuse tokens from ARB_get_program_binary */ +/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */ +/* reuse GL_PROGRAM_BINARY_LENGTH */ +/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */ +/* reuse GL_PROGRAM_BINARY_FORMATS */ +/* Reuse tokens from ARB_separate_shader_objects */ +/* reuse GL_VERTEX_SHADER_BIT */ +/* reuse GL_FRAGMENT_SHADER_BIT */ +/* reuse GL_GEOMETRY_SHADER_BIT */ +/* reuse GL_TESS_CONTROL_SHADER_BIT */ +/* reuse GL_TESS_EVALUATION_SHADER_BIT */ +/* reuse GL_ALL_SHADER_BITS */ +/* reuse GL_PROGRAM_SEPARABLE */ +/* reuse GL_ACTIVE_PROGRAM */ +/* reuse GL_PROGRAM_PIPELINE_BINDING */ +/* Reuse tokens from ARB_shader_precision (none) */ +/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */ +/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */ +/* reuse GL_MAX_VIEWPORTS */ +/* reuse GL_VIEWPORT_SUBPIXEL_BITS */ +/* reuse GL_VIEWPORT_BOUNDS_RANGE */ +/* reuse GL_LAYER_PROVOKING_VERTEX */ +/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */ +/* reuse GL_UNDEFINED_VERTEX */ +#endif + #ifndef GL_ARB_multitexture #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 @@ -1287,12 +1641,17 @@ extern "C" { #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_INDEX 0x8222 #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING #define GL_RENDERBUFFER_BINDING 0x8CA7 @@ -1349,6 +1708,12 @@ extern "C" { #define GL_MAX_SAMPLES 0x8D57 #endif +#ifndef GL_ARB_framebuffer_object_DEPRECATED +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#endif + #ifndef GL_ARB_framebuffer_sRGB #define GL_FRAMEBUFFER_SRGB 0x8DB9 #endif @@ -1381,6 +1746,7 @@ extern "C" { #endif #ifndef GL_ARB_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE #endif #ifndef GL_ARB_map_buffer_range @@ -1436,6 +1802,421 @@ extern "C" { #define GL_VERTEX_ARRAY_BINDING 0x85B5 #endif +#ifndef GL_ARB_uniform_buffer_object +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +#endif + +#ifndef GL_ARB_compatibility +/* ARB_compatibility just defines tokens from core 3.0 */ +#endif + +#ifndef GL_ARB_copy_buffer +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#endif + +#ifndef GL_ARB_shader_texture_lod +#endif + +#ifndef GL_ARB_depth_clamp +#define GL_DEPTH_CLAMP 0x864F +#endif + +#ifndef GL_ARB_draw_elements_base_vertex +#endif + +#ifndef GL_ARB_fragment_coord_conventions +#endif + +#ifndef GL_ARB_provoking_vertex +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#endif + +#ifndef GL_ARB_seamless_cube_map +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#endif + +#ifndef GL_ARB_sync +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#endif + +#ifndef GL_ARB_texture_multisample +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#endif + +#ifndef GL_ARB_vertex_array_bgra +/* reuse GL_BGRA */ +#endif + +#ifndef GL_ARB_draw_buffers_blend +#endif + +#ifndef GL_ARB_sample_shading +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +#endif + +#ifndef GL_ARB_texture_cube_map_array +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#endif + +#ifndef GL_ARB_texture_gather +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#endif + +#ifndef GL_ARB_texture_query_lod +#endif + +#ifndef GL_ARB_shading_language_include +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +#endif + +#ifndef GL_ARB_texture_compression_bptc +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#endif + +#ifndef GL_ARB_blend_func_extended +#define GL_SRC1_COLOR 0x88F9 +/* reuse GL_SRC1_ALPHA */ +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#endif + +#ifndef GL_ARB_explicit_attrib_location +#endif + +#ifndef GL_ARB_occlusion_query2 +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#endif + +#ifndef GL_ARB_sampler_objects +#define GL_SAMPLER_BINDING 0x8919 +#endif + +#ifndef GL_ARB_shader_bit_encoding +#endif + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_RGB10_A2UI 0x906F +#endif + +#ifndef GL_ARB_texture_swizzle +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#endif + +#ifndef GL_ARB_timer_query +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#endif + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */ +#define GL_INT_2_10_10_10_REV 0x8D9F +#endif + +#ifndef GL_ARB_draw_indirect +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#endif + +#ifndef GL_ARB_gpu_shader5 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +/* reuse GL_MAX_VERTEX_STREAMS */ +#endif + +#ifndef GL_ARB_gpu_shader_fp64 +/* reuse GL_DOUBLE */ +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#endif + +#ifndef GL_ARB_shader_subroutine +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +/* reuse GL_UNIFORM_SIZE */ +/* reuse GL_UNIFORM_NAME_LENGTH */ +#endif + +#ifndef GL_ARB_tessellation_shader +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +/* reuse GL_TRIANGLES */ +/* reuse GL_QUADS */ +#define GL_ISOLINES 0x8E7A +/* reuse GL_EQUAL */ +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +/* reuse GL_CCW */ +/* reuse GL_CW */ +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#endif + +#ifndef GL_ARB_texture_buffer_object_rgb32 +/* reuse GL_RGB32F */ +/* reuse GL_RGB32UI */ +/* reuse GL_RGB32I */ +#endif + +#ifndef GL_ARB_transform_feedback2 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#endif + +#ifndef GL_ARB_transform_feedback3 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#endif + +#ifndef GL_ARB_ES2_compatibility +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#endif + +#ifndef GL_ARB_get_program_binary +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#endif + +#ifndef GL_ARB_separate_shader_objects +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#endif + +#ifndef GL_ARB_shader_precision +#endif + +#ifndef GL_ARB_vertex_attrib_64bit +/* reuse GL_RGB32I */ +/* reuse GL_DOUBLE_VEC2 */ +/* reuse GL_DOUBLE_VEC3 */ +/* reuse GL_DOUBLE_VEC4 */ +/* reuse GL_DOUBLE_MAT2 */ +/* reuse GL_DOUBLE_MAT3 */ +/* reuse GL_DOUBLE_MAT4 */ +/* reuse GL_DOUBLE_MAT2x3 */ +/* reuse GL_DOUBLE_MAT2x4 */ +/* reuse GL_DOUBLE_MAT3x2 */ +/* reuse GL_DOUBLE_MAT3x4 */ +/* reuse GL_DOUBLE_MAT4x2 */ +/* reuse GL_DOUBLE_MAT4x3 */ +#endif + +#ifndef GL_ARB_viewport_array +/* reuse GL_SCISSOR_BOX */ +/* reuse GL_VIEWPORT */ +/* reuse GL_DEPTH_RANGE */ +/* reuse GL_SCISSOR_TEST */ +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +/* reuse GL_FIRST_VERTEX_CONVENTION */ +/* reuse GL_LAST_VERTEX_CONVENTION */ +/* reuse GL_PROVOKING_VERTEX */ +#endif + +#ifndef GL_ARB_cl_event +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +#endif + +#ifndef GL_ARB_debug_output +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +#endif + +#ifndef GL_ARB_robustness +/* reuse GL_NO_ERROR */ +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +#endif + +#ifndef GL_ARB_shader_stencil_export +#endif + #ifndef GL_EXT_abgr #define GL_ABGR_EXT 0x8000 #endif @@ -3257,9 +4038,9 @@ extern "C" { #endif #ifndef GL_APPLE_element_array -#define GL_ELEMENT_ARRAY_APPLE 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E #endif #ifndef GL_APPLE_fence @@ -3276,6 +4057,7 @@ extern "C" { #define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E #define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F #define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF #endif @@ -3421,7 +4203,7 @@ extern "C" { #endif #ifndef GL_EXT_blend_equation_separate -#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 #define GL_BLEND_EQUATION_ALPHA_EXT 0x883D #endif @@ -3780,6 +4562,12 @@ extern "C" { #define GL_SEPARATE_ATTRIBS_NV 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_LAYER_NV 0x8DAA +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 #endif #ifndef GL_EXT_bindable_uniform @@ -3902,11 +4690,11 @@ extern "C" { #define GL_SAMPLE_MASK_VALUE_NV 0x8E52 #define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 #define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 #define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 #define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 #define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 #define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 #endif #ifndef GL_NV_transform_feedback2 @@ -3916,34 +4704,440 @@ extern "C" { #define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 #endif +#ifndef GL_ATI_meminfo +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#endif + +#ifndef GL_AMD_performance_monitor +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#endif + +#ifndef GL_AMD_texture_texture4 +#endif + +#ifndef GL_AMD_vertex_shader_tesselator +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +#endif + +#ifndef GL_EXT_provoking_vertex +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +#endif + +#ifndef GL_EXT_texture_snorm +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +/* reuse GL_RED_SNORM */ +/* reuse GL_RG_SNORM */ +/* reuse GL_RGB_SNORM */ +/* reuse GL_RGBA_SNORM */ +/* reuse GL_R8_SNORM */ +/* reuse GL_RG8_SNORM */ +/* reuse GL_RGB8_SNORM */ +/* reuse GL_RGBA8_SNORM */ +/* reuse GL_R16_SNORM */ +/* reuse GL_RG16_SNORM */ +/* reuse GL_RGB16_SNORM */ +/* reuse GL_RGBA16_SNORM */ +/* reuse GL_SIGNED_NORMALIZED */ +#endif + +#ifndef GL_AMD_draw_buffers_blend +#endif + +#ifndef GL_APPLE_texture_range +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +/* reuse GL_STORAGE_CACHED_APPLE */ +/* reuse GL_STORAGE_SHARED_APPLE */ +#endif + +#ifndef GL_APPLE_float_pixels +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#endif + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +#endif + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif + +#ifndef GL_APPLE_object_purgeable +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +#endif + +#ifndef GL_APPLE_row_bytes +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#endif + +#ifndef GL_APPLE_rgb_422 +#define GL_RGB_422_APPLE 0x8A1F +/* reuse GL_UNSIGNED_SHORT_8_8_APPLE */ +/* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */ +#endif + +#ifndef GL_NV_video_capture +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +#endif + +#ifndef GL_NV_copy_image +#endif + +#ifndef GL_EXT_separate_shader_objects +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +#endif + +#ifndef GL_NV_parameter_buffer_object2 +#endif + +#ifndef GL_NV_shader_buffer_load +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +#endif + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +#endif + +#ifndef GL_NV_texture_barrier +#endif + +#ifndef GL_AMD_shader_stencil_export +#endif + +#ifndef GL_AMD_seamless_cubemap_per_texture +/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB */ +#endif + +#ifndef GL_AMD_conservative_depth +#endif + +#ifndef GL_EXT_shader_image_load_store +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +#endif + +#ifndef GL_EXT_vertex_attrib_64bit +/* reuse GL_DOUBLE */ +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +#endif + +#ifndef GL_NV_gpu_program5 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +#endif + +#ifndef GL_NV_gpu_shader5 +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +/* reuse GL_PATCHES */ +#endif + +#ifndef GL_NV_shader_buffer_store +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +/* reuse GL_READ_WRITE */ +/* reuse GL_WRITE_ONLY */ +#endif + +#ifndef GL_NV_tessellation_program5 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#endif + +#ifndef GL_NV_vertex_attrib_integer_64bit +/* reuse GL_INT64_NV */ +/* reuse GL_UNSIGNED_INT64_NV */ +#endif + +#ifndef GL_NV_multisample_coverage +#define GL_COVERAGE_SAMPLES_NV 0x80A9 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#endif + +#ifndef GL_AMD_name_gen_delete +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +#endif + +#ifndef GL_AMD_debug_output +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +#endif + +#ifndef GL_NV_vdpau_interop +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_WRITE_DISCARD_NV 0x88BE +#endif + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#endif + /*************************************************************/ #include #ifndef GL_VERSION_2_0 /* GL type for program/shader text */ -typedef char GLchar; /* native character */ +typedef char GLchar; #endif #ifndef GL_VERSION_1_5 /* GL types for handling large vertex buffer objects */ +#if defined(__APPLE__) +typedef long GLintptr; +typedef long GLsizeiptr; +#else typedef ptrdiff_t GLintptr; typedef ptrdiff_t GLsizeiptr; #endif +#endif #ifndef GL_ARB_vertex_buffer_object /* GL types for handling large vertex buffer objects */ +#if defined(__APPLE__) +typedef long GLintptrARB; +typedef long GLsizeiptrARB; +#else typedef ptrdiff_t GLintptrARB; typedef ptrdiff_t GLsizeiptrARB; #endif - -#ifndef GL_ARB_shader_objects -/* GL types for handling shader object handles and program/shader text */ -typedef char GLcharARB; /* native character */ -typedef unsigned int GLhandleARB; /* shader object handle */ #endif -/* GL types for "half" precision (s10e5) float data in host memory */ +#ifndef GL_ARB_shader_objects +/* GL types for program/shader text and shader object handles */ +typedef char GLcharARB; +#if defined(__APPLE__) +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +#endif + +/* GL type for "half" precision (s10e5) float data in host memory */ #ifndef GL_ARB_half_float_pixel typedef unsigned short GLhalfARB; #endif @@ -3985,7 +5179,8 @@ typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #else -#include /* Fallback option */ +/* Fallback if nothing above works */ +#include #endif #endif @@ -3994,51 +5189,84 @@ typedef int64_t GLint64EXT; typedef uint64_t GLuint64EXT; #endif +#ifndef GL_ARB_sync +typedef int64_t GLint64; +typedef uint64_t GLuint64; +typedef struct __GLsync *GLsync; +#endif + +#ifndef GL_ARB_cl_event +/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */ +struct _cl_context; +struct _cl_event; +#endif + +#ifndef GL_ARB_debug_output +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); +#endif + +#ifndef GL_AMD_debug_output +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); +#endif + +#ifndef GL_NV_vdpau_interop +typedef GLintptr GLvdpauSurfaceNV; +#endif + #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); -GLAPI void APIENTRY glBlendEquation (GLenum); -GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogram (GLenum); -GLAPI void APIENTRY glResetMinmax (GLenum); -GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif + +#ifndef GL_VERSION_1_2_DEPRECATED +#define GL_VERSION_1_2_DEPRECATED 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); @@ -4071,62 +5299,73 @@ typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenu typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum); -GLAPI void APIENTRY glClientActiveTexture (GLenum); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *); +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); +#endif + +#ifndef GL_VERSION_1_3_DEPRECATED +#define GL_VERSION_1_3_DEPRECATED 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); @@ -4164,77 +5403,75 @@ typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); #endif #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glFogCoordf (GLfloat); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *); -GLAPI void APIENTRY glFogCoordd (GLdouble); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *); -GLAPI void APIENTRY glPointParameteri (GLenum, GLint); -GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *); -GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos2i (GLint, GLint); -GLAPI void APIENTRY glWindowPos2iv (const GLint *); -GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *); -GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3iv (const GLint *); -GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *); +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +#endif + +#ifndef GL_VERSION_1_4_DEPRECATED +#define GL_VERSION_1_4_DEPRECATED 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); @@ -4273,25 +5510,25 @@ typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQuery (GLuint); -GLAPI void APIENTRY glBeginQuery (GLenum, GLuint); -GLAPI void APIENTRY glEndQuery (GLenum); -GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *); -GLAPI void APIENTRY glBindBuffer (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint); -GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *); +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); +GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); @@ -4317,104 +5554,104 @@ typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); -GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); -GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); -GLAPI void APIENTRY glAttachShader (GLuint, GLuint); -GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); -GLAPI void APIENTRY glCompileShader (GLuint); +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum); -GLAPI void APIENTRY glDeleteProgram (GLuint); -GLAPI void APIENTRY glDeleteShader (GLuint); -GLAPI void APIENTRY glDetachShader (GLuint, GLuint); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); -GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgram (GLuint); -GLAPI GLboolean APIENTRY glIsShader (GLuint); -GLAPI void APIENTRY glLinkProgram (GLuint); -GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); -GLAPI void APIENTRY glUseProgram (GLuint); -GLAPI void APIENTRY glUniform1f (GLint, GLfloat); -GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1i (GLint, GLint); -GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glValidateProgram (GLuint); -GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); @@ -4509,12 +5746,12 @@ typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); @@ -4531,64 +5768,64 @@ typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei co /* ARB_map_buffer_range */ /* ARB_vertex_array_object */ #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint, GLboolean, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glGetBooleani_v (GLenum, GLuint, GLboolean *); -GLAPI void APIENTRY glGetIntegeri_v (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glEnablei (GLenum, GLuint); -GLAPI void APIENTRY glDisablei (GLenum, GLuint); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum, GLuint); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum); +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr); -GLAPI void APIENTRY glBindBufferBase (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint, GLsizei, const GLint *, GLenum); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint, GLuint, GLint *); -GLAPI void APIENTRY glClampColor (GLenum, GLenum); -GLAPI void APIENTRY glBeginConditionalRender (GLuint, GLenum); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribI1i (GLuint, GLint); -GLAPI void APIENTRY glVertexAttribI2i (GLuint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI3i (GLuint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI4i (GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint, GLenum, GLuint *); -GLAPI void APIENTRY glGetUniformuiv (GLuint, GLint, GLuint *); -GLAPI void APIENTRY glBindFragDataLocation (GLuint, GLuint, const GLchar *); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glUniform1ui (GLint, GLuint); -GLAPI void APIENTRY glUniform2ui (GLint, GLuint, GLuint); -GLAPI void APIENTRY glUniform3ui (GLint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform4ui (GLint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform1uiv (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform2uiv (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform3uiv (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform4uiv (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glTexParameterIiv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glTexParameterIuiv (GLenum, GLenum, const GLuint *); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum, GLenum, GLuint *); -GLAPI void APIENTRY glClearBufferiv (GLenum, GLint, const GLint *); -GLAPI void APIENTRY glClearBufferuiv (GLenum, GLint, const GLuint *); -GLAPI void APIENTRY glClearBufferfv (GLenum, GLint, const GLfloat *); -GLAPI void APIENTRY glClearBufferfi (GLenum, GLint, GLfloat, GLint); -GLAPI const GLubyte * APIENTRY glGetStringi (GLenum, GLuint); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); @@ -4600,11 +5837,14 @@ typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); @@ -4625,9 +5865,6 @@ typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte * typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); @@ -4650,43 +5887,134 @@ typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); #endif +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +/* OpenGL 3.1 also reuses entry points from these extensions: */ +/* ARB_copy_buffer */ +/* ARB_uniform_buffer_object */ +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +#endif + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +/* OpenGL 3.2 also reuses entry points from these extensions: */ +/* ARB_draw_elements_base_vertex */ +/* ARB_provoking_vertex */ +/* ARB_sync */ +/* ARB_texture_multisample */ +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +#endif + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +/* OpenGL 3.3 also reuses entry points from these extensions: */ +/* ARB_blend_func_extended */ +/* ARB_sampler_objects */ +/* ARB_explicit_attrib_location, but it has none */ +/* ARB_occlusion_query2 (no entry points) */ +/* ARB_shader_bit_encoding (no entry points) */ +/* ARB_texture_rgb10_a2ui (no entry points) */ +/* ARB_texture_swizzle (no entry points) */ +/* ARB_timer_query */ +/* ARB_vertex_type_2_10_10_10_rev */ +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +#endif + +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +/* OpenGL 4.0 also reuses entry points from these extensions: */ +/* ARB_texture_query_lod (no entry points) */ +/* ARB_draw_indirect */ +/* ARB_gpu_shader5 (no entry points) */ +/* ARB_gpu_shader_fp64 */ +/* ARB_shader_subroutine */ +/* ARB_tessellation_shader */ +/* ARB_texture_buffer_object_rgb32 (no entry points) */ +/* ARB_texture_cube_map_array (no entry points) */ +/* ARB_texture_gather (no entry points) */ +/* ARB_transform_feedback2 */ +/* ARB_transform_feedback3 */ +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLclampf value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLclampf value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +/* OpenGL 4.1 also reuses entry points from these extensions: */ +/* ARB_ES2_compatibility */ +/* ARB_get_program_binary */ +/* ARB_separate_shader_objects */ +/* ARB_shader_precision (no entry points) */ +/* ARB_vertex_attrib_64bit */ +/* ARB_viewport_array */ +#endif + #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); @@ -4727,10 +6055,10 @@ typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLsh #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); @@ -4741,7 +6069,7 @@ typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); +GLAPI void APIENTRY glSampleCoverageARB (GLclampf value, GLboolean invert); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); #endif @@ -4757,13 +6085,13 @@ typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean i #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *); +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); @@ -4781,8 +6109,8 @@ typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); @@ -4791,16 +6119,16 @@ typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLflo #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *); -GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *); -GLAPI void APIENTRY glWeightivARB (GLint, const GLint *); -GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *); -GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *); -GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexBlendARB (GLint); +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); @@ -4817,11 +6145,11 @@ typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); @@ -4861,22 +6189,22 @@ typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *); +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); @@ -4899,68 +6227,68 @@ typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint); +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); @@ -5034,17 +6362,17 @@ typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); #ifndef GL_ARB_vertex_buffer_object #define GL_ARB_vertex_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint); -GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); +GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); @@ -5062,14 +6390,14 @@ typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pn #ifndef GL_ARB_occlusion_query #define GL_ARB_occlusion_query 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint); -GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint); -GLAPI void APIENTRY glEndQueryARB (GLenum); -GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *); +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); @@ -5084,45 +6412,45 @@ typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB); +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB); -GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat); -GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1iARB (GLint, GLint); -GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); @@ -5168,9 +6496,9 @@ typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei m #ifndef GL_ARB_vertex_shader #define GL_ARB_vertex_shader 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *); +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); @@ -5200,7 +6528,7 @@ typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, #ifndef GL_ARB_draw_buffers #define GL_ARB_draw_buffers 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *); +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); #endif @@ -5212,7 +6540,7 @@ typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs) #ifndef GL_ARB_color_buffer_float #define GL_ARB_color_buffer_float 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); #endif @@ -5236,8 +6564,8 @@ typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum, GLsizei, GLenum, const GLvoid *, GLsizei); +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); @@ -5246,26 +6574,26 @@ typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint); -GLAPI void APIENTRY glBindRenderbuffer (GLenum, GLuint); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei, GLuint *); -GLAPI void APIENTRY glRenderbufferStorage (GLenum, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum, GLenum, GLint *); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint); -GLAPI void APIENTRY glBindFramebuffer (GLenum, GLuint); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFramebuffers (GLsizei, GLuint *); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum, GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGenerateMipmap (GLenum); -GLAPI void APIENTRY glBlitFramebuffer (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum, GLenum, GLuint, GLint, GLint); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); @@ -5296,10 +6624,10 @@ typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriARB (GLuint, GLenum, GLint); -GLAPI void APIENTRY glFramebufferTextureARB (GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum, GLenum, GLuint, GLint, GLenum); +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); @@ -5314,25 +6642,25 @@ typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLen #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisor (GLuint, GLuint); +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); #endif #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapBufferRange (GLenum, GLintptr, GLsizeiptr, GLbitfield); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum, GLintptr, GLsizeiptr); +GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); #endif #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferARB (GLenum, GLenum, GLuint); +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); #endif @@ -5348,10 +6676,10 @@ typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalfo #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArray (GLuint); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenVertexArrays (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); @@ -5359,6 +6687,728 @@ typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); #endif +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +#endif + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); +#endif + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +#endif + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); +#endif + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif + +#ifndef GL_ARB_sample_shading +#define GL_ARB_sample_shading 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLclampf value); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value); +#endif + +#ifndef GL_ARB_texture_cube_map_array +#define GL_ARB_texture_cube_map_array 1 +#endif + +#ifndef GL_ARB_texture_gather +#define GL_ARB_texture_gather 1 +#endif + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif + +#ifndef GL_ARB_shading_language_include +#define GL_ARB_shading_language_include 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif + +#ifndef GL_ARB_texture_compression_bptc +#define GL_ARB_texture_compression_bptc 1 +#endif + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +#endif + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +#endif + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +#endif + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +#endif + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); +#endif + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +#endif + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +#endif + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +#endif + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +#endif + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLclampf n, GLclampf f); +GLAPI void APIENTRY glClearDepthf (GLclampf d); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLclampf d); +#endif + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +#endif + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* *strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* *strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +#endif + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLclampd *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLclampd n, GLclampd f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLclampd *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLclampd n, GLclampd f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#endif + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); +#endif + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif + +#ifndef GL_ARB_robustness +#define GL_ARB_robustness 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +#endif + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif + #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #endif @@ -5366,7 +7416,7 @@ typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); +GLAPI void APIENTRY glBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); #endif @@ -5374,7 +7424,7 @@ typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, G #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); #endif @@ -5386,8 +7436,8 @@ typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); @@ -5396,8 +7446,8 @@ typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); @@ -5406,8 +7456,8 @@ typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filte #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); @@ -5416,11 +7466,11 @@ typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); @@ -5432,16 +7482,16 @@ typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint lev #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogramEXT (GLenum); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum); +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); @@ -5458,19 +7508,19 @@ typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); @@ -5494,13 +7544,13 @@ typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum in #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); @@ -5514,7 +7564,7 @@ typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GL #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #endif @@ -5522,12 +7572,12 @@ typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); @@ -5540,8 +7590,8 @@ typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, G #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); @@ -5558,12 +7608,12 @@ typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); @@ -5576,8 +7626,8 @@ typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); @@ -5586,8 +7636,8 @@ typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat * #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); @@ -5604,8 +7654,8 @@ typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum); +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); @@ -5618,15 +7668,15 @@ typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint); -GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); -GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); -GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, GLvoid* *params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); @@ -5666,7 +7716,7 @@ typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLs #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum); +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #endif @@ -5694,10 +7744,10 @@ typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); @@ -5712,8 +7762,8 @@ typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLi #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); @@ -5722,8 +7772,8 @@ typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLflo #ifndef GL_SGIS_point_parameters #define GL_SGIS_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); @@ -5733,11 +7783,11 @@ typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfl #define GL_SGIX_instruments 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); @@ -5754,7 +7804,7 @@ typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint); +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #endif @@ -5770,10 +7820,10 @@ typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); -GLAPI void APIENTRY glDeformSGIX (GLbitfield); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); @@ -5784,7 +7834,7 @@ typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mas #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); #endif @@ -5804,8 +7854,8 @@ typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); @@ -5818,12 +7868,12 @@ typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); @@ -5844,8 +7894,8 @@ typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); @@ -5858,7 +7908,7 @@ typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei s #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum, GLint); +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); #endif @@ -5866,10 +7916,10 @@ typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); @@ -5884,12 +7934,12 @@ typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GL #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); -GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); -GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); @@ -5922,7 +7972,7 @@ typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); #endif @@ -5930,7 +7980,7 @@ typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #endif @@ -5942,7 +7992,7 @@ typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); GLAPI void APIENTRY glUnlockArraysEXT (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); @@ -5952,8 +8002,8 @@ typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); @@ -5966,24 +8016,24 @@ typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *par #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint); +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); @@ -6016,7 +8066,7 @@ typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); #endif @@ -6032,9 +8082,9 @@ typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint star #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum); -GLAPI void APIENTRY glTextureLightEXT (GLenum); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); @@ -6052,12 +8102,12 @@ typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); #ifndef GL_SGIX_async #define GL_SGIX_async 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); @@ -6078,10 +8128,10 @@ typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); -GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const GLvoid* *pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); @@ -6096,10 +8146,10 @@ typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); @@ -6122,23 +8172,23 @@ typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, G #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); @@ -6162,7 +8212,7 @@ typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum t #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum); +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif @@ -6170,21 +8220,21 @@ typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); #endif #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); @@ -6200,28 +8250,28 @@ typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei strid #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *); -GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *); -GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *); -GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *); -GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *); -GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *); -GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *); -GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); @@ -6274,14 +8324,14 @@ typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); @@ -6296,13 +8346,13 @@ typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); @@ -6316,46 +8366,46 @@ typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsize #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); @@ -6402,7 +8452,7 @@ typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FV #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif @@ -6410,7 +8460,7 @@ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenu #ifndef GL_INGR_blend_func_separate #define GL_INGR_blend_func_separate 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif @@ -6454,9 +8504,9 @@ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLen #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); @@ -6471,7 +8521,7 @@ typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum t #define GL_NV_vertex_array_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); @@ -6480,19 +8530,19 @@ typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvo #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); @@ -6536,30 +8586,30 @@ typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *); +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); @@ -6594,8 +8644,8 @@ typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint); +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); @@ -6604,14 +8654,14 @@ typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); @@ -6650,7 +8700,7 @@ typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint); +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #endif @@ -6658,8 +8708,8 @@ typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternEXT (GLenum); +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); @@ -6684,7 +8734,7 @@ typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif @@ -6692,7 +8742,7 @@ typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const GLvoid *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); #endif @@ -6708,13 +8758,13 @@ typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid #ifndef GL_NV_fence #define GL_NV_fence 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint); -GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFinishFenceNV (GLuint); -GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum); +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); @@ -6728,15 +8778,15 @@ typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *); -GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum); +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); @@ -6756,8 +8806,8 @@ typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); @@ -6786,70 +8836,70 @@ typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, G #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint); -GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *); +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLuint count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLuint count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); @@ -6944,10 +8994,10 @@ typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei cou #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *); +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); @@ -6958,20 +9008,20 @@ typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloa #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint); +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); GLAPI void APIENTRY glBeginFragmentShaderATI (void); GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); @@ -6992,8 +9042,8 @@ typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, cons #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat); +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); @@ -7002,18 +9052,18 @@ typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint); -GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *); +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); @@ -7034,46 +9084,46 @@ typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVertexShaderEXT (void); GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint); -GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *); -GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *); -GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *); -GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *); -GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *); -GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *); -GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); @@ -7122,51 +9172,51 @@ typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum v #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort); -GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *); -GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat); +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); @@ -7218,9 +9268,9 @@ typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat para #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei); +GLAPI void APIENTRY glElementPointerATI (GLenum type, const GLvoid *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); @@ -7230,7 +9280,7 @@ typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); #endif @@ -7250,13 +9300,13 @@ typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, G #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint); +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); @@ -7270,8 +9320,8 @@ typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pnam #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *); +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); @@ -7292,7 +9342,7 @@ typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint #ifndef GL_EXT_stencil_two_side #define GL_EXT_stencil_two_side 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum); +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); #endif @@ -7308,11 +9358,11 @@ typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); #ifndef GL_APPLE_element_array #define GL_APPLE_element_array 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei); +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const GLvoid *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); @@ -7324,14 +9374,14 @@ typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, #ifndef GL_APPLE_fence #define GL_APPLE_fence 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint); +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); @@ -7346,10 +9396,10 @@ typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint); +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); @@ -7360,9 +9410,9 @@ typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); #ifndef GL_APPLE_vertex_array_range #define GL_APPLE_vertex_array_range 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint); +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); @@ -7380,7 +9430,7 @@ typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLin #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *); +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); #endif @@ -7408,12 +9458,12 @@ typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs) #define GL_NV_fragment_program 1 /* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *); +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); @@ -7426,52 +9476,52 @@ typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsiz #ifndef GL_NV_half_float #define GL_NV_half_float 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *); +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); @@ -7524,8 +9574,8 @@ typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, c #ifndef GL_NV_pixel_data_range #define GL_NV_pixel_data_range 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum); +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, GLvoid *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); @@ -7535,7 +9585,7 @@ typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); #define GL_NV_primitive_restart 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); @@ -7552,8 +9602,8 @@ typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); #ifndef GL_ATI_map_object_buffer #define GL_ATI_map_object_buffer 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint); +GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); @@ -7562,8 +9612,8 @@ typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); #ifndef GL_ATI_separate_stencil #define GL_ATI_separate_stencil 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint); +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); @@ -7572,9 +9622,9 @@ typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLen #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); @@ -7588,7 +9638,7 @@ typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd); +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); #endif @@ -7600,7 +9650,7 @@ typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); #ifndef GL_EXT_blend_equation_separate #define GL_EXT_blend_equation_separate 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum); +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); #endif @@ -7636,23 +9686,23 @@ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLen #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); @@ -7676,7 +9726,7 @@ typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const GLvoid *string); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); #endif @@ -7688,7 +9738,7 @@ typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid #ifndef GL_EXT_stencil_clear_tag #define GL_EXT_stencil_clear_tag 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei, GLuint); +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); #endif @@ -7700,7 +9750,7 @@ typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GL #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif @@ -7708,7 +9758,7 @@ typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif @@ -7720,8 +9770,8 @@ typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum targ #ifndef GL_EXT_timer_query #define GL_EXT_timer_query 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint, GLenum, GLint64EXT *); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint, GLenum, GLuint64EXT *); +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); @@ -7730,8 +9780,8 @@ typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pnam #ifndef GL_EXT_gpu_program_parameters #define GL_EXT_gpu_program_parameters 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); @@ -7740,8 +9790,8 @@ typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, G #ifndef GL_APPLE_flush_buffer_range #define GL_APPLE_flush_buffer_range 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum, GLintptr, GLsizeiptr); +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); @@ -7750,22 +9800,22 @@ typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GL #ifndef GL_NV_gpu_program4 #define GL_NV_gpu_program4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum, GLuint, const GLint *); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum, GLuint, const GLuint *); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum, GLuint, const GLint *); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum, GLuint, const GLuint *); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum, GLuint, GLuint *); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum, GLuint, GLuint *); +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); @@ -7788,10 +9838,10 @@ typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, G #ifndef GL_NV_geometry_program4 #define GL_NV_geometry_program4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum, GLint); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum, GLenum, GLuint, GLint, GLenum); +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); @@ -7802,7 +9852,7 @@ typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLen #ifndef GL_EXT_geometry_shader4 #define GL_EXT_geometry_shader4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint, GLenum, GLint); +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); #endif @@ -7810,29 +9860,29 @@ typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum p #ifndef GL_NV_vertex_program4 #define GL_NV_vertex_program4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint, GLint); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint, GLenum, GLuint *); +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); @@ -7862,17 +9912,17 @@ typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum p #ifndef GL_EXT_gpu_shader4 #define GL_EXT_gpu_shader4 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint, GLint, GLuint *); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint, GLuint, const GLchar *); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint, const GLchar *); -GLAPI void APIENTRY glUniform1uiEXT (GLint, GLuint); -GLAPI void APIENTRY glUniform2uiEXT (GLint, GLuint, GLuint); -GLAPI void APIENTRY glUniform3uiEXT (GLint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform4uiEXT (GLint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform1uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform2uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform3uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform4uivEXT (GLint, GLsizei, const GLuint *); +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); @@ -7890,8 +9940,8 @@ typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum, GLsizei, GLenum, const GLvoid *, GLsizei); +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); @@ -7908,7 +9958,7 @@ typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei #ifndef GL_EXT_texture_buffer_object #define GL_EXT_texture_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum, GLenum, GLuint); +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); #endif @@ -7928,9 +9978,9 @@ typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalfo #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble, GLdouble); -GLAPI void APIENTRY glClearDepthdNV (GLdouble); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble, GLdouble); +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); @@ -7944,7 +9994,7 @@ typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei); +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif @@ -7960,9 +10010,9 @@ typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLen #ifndef GL_NV_parameter_buffer_object #define GL_NV_parameter_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum, GLuint, GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum, GLuint, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum, GLuint, GLuint, GLsizei, const GLuint *); +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); @@ -7972,12 +10022,12 @@ typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, #ifndef GL_EXT_draw_buffers2 #define GL_EXT_draw_buffers2 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint, GLboolean, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum, GLuint, GLboolean *); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum, GLuint); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum, GLuint); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum, GLuint); +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); @@ -7990,17 +10040,18 @@ typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuin #ifndef GL_NV_transform_feedback #define GL_NV_transform_feedback 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum); +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint, const GLint *, GLenum); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum, GLuint, GLuint, GLintptr); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint, GLsizei, const GLint *, GLenum); -GLAPI void APIENTRY glActiveVaryingNV (GLuint, const GLchar *); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint, const GLchar *); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint, GLuint, GLint *); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); @@ -8013,14 +10064,15 @@ typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #endif #ifndef GL_EXT_bindable_uniform #define GL_EXT_bindable_uniform 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint, GLint, GLuint); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint, GLint); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint, GLint); +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); @@ -8030,12 +10082,12 @@ typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint #ifndef GL_EXT_texture_integer #define GL_EXT_texture_integer 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum, GLenum, const GLuint *); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum, GLenum, GLuint *); -GLAPI void APIENTRY glClearColorIiEXT (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); @@ -8056,7 +10108,7 @@ typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint, GLenum); +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRenderNV (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); @@ -8065,217 +10117,251 @@ typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); #ifndef GL_NV_present_video #define GL_NV_present_video 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); #endif #ifndef GL_EXT_transform_feedback #define GL_EXT_transform_feedback 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum); +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackEXT (void); -GLAPI void APIENTRY glBindBufferRangeEXT (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr); -GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum, GLuint, GLuint, GLintptr); -GLAPI void APIENTRY glBindBufferBaseEXT (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint, GLsizei, const GLint *, GLenum); -GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint, GLuint, GLint *); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #endif #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield); -GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield); -GLAPI void APIENTRY glMatrixLoadfEXT (GLenum, const GLfloat *); -GLAPI void APIENTRY glMatrixLoaddEXT (GLenum, const GLdouble *); -GLAPI void APIENTRY glMatrixMultfEXT (GLenum, const GLfloat *); -GLAPI void APIENTRY glMatrixMultdEXT (GLenum, const GLdouble *); -GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum); -GLAPI void APIENTRY glMatrixRotatefEXT (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMatrixRotatedEXT (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMatrixScalefEXT (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMatrixScaledEXT (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMatrixFrustumEXT (GLenum, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMatrixOrthoEXT (GLenum, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMatrixPopEXT (GLenum); -GLAPI void APIENTRY glMatrixPushEXT (GLenum); -GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum, const GLfloat *); -GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum, const GLdouble *); -GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum, const GLfloat *); -GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum, const GLdouble *); -GLAPI void APIENTRY glTextureParameterfEXT (GLuint, GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glTextureParameterfvEXT (GLuint, GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glTextureParameteriEXT (GLuint, GLenum, GLenum, GLint); -GLAPI void APIENTRY glTextureParameterivEXT (GLuint, GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glTextureImage1DEXT (GLuint, GLenum, GLint, GLenum, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTextureImage2DEXT (GLuint, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint, GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); -GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); -GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetTextureImageEXT (GLuint, GLenum, GLint, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint, GLenum, GLint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint, GLenum, GLint, GLenum, GLint *); -GLAPI void APIENTRY glTextureImage3DEXT (GLuint, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum, GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum, GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum, GLenum, GLenum, GLint); -GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum, GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum, GLenum, GLint, GLenum, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); -GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); -GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum, GLenum, GLint, GLint, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum, GLenum, GLint, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum, GLenum, GLint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum, GLenum, GLint, GLenum, GLint *); -GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glBindMultiTextureEXT (GLenum, GLenum, GLuint); -GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum, GLuint); -GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum, GLuint); -GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum, GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum, GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexEnviEXT (GLenum, GLenum, GLenum, GLint); -GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum, GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexGendEXT (GLenum, GLenum, GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexGendvEXT (GLenum, GLenum, GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexGenfEXT (GLenum, GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum, GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexGeniEXT (GLenum, GLenum, GLenum, GLint); -GLAPI void APIENTRY glMultiTexGenivEXT (GLenum, GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum, GLenum, GLenum, GLdouble *); -GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum, GLuint, GLvoid* *); -GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint, GLenum, GLint, GLvoid *); -GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum, GLenum, GLint, GLvoid *); -GLAPI void APIENTRY glNamedProgramStringEXT (GLuint, GLenum, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint, GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint, GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint, GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint, GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint, GLenum, GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint, GLenum, GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint, GLenum, GLuint, const GLint *); -GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint, GLenum, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint, GLenum, GLuint, const GLuint *); -GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint, GLenum, GLuint, GLsizei, const GLuint *); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint, GLenum, GLuint, GLint *); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint, GLenum, GLuint, GLuint *); -GLAPI void APIENTRY glTextureParameterIivEXT (GLuint, GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint, GLenum, GLenum, const GLuint *); -GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint, GLenum, GLenum, GLuint *); -GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum, GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum, GLenum, GLenum, const GLuint *); -GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum, GLenum, GLenum, GLuint *); -GLAPI void APIENTRY glProgramUniform1fEXT (GLuint, GLint, GLfloat); -GLAPI void APIENTRY glProgramUniform2fEXT (GLuint, GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramUniform3fEXT (GLuint, GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramUniform4fEXT (GLuint, GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramUniform1iEXT (GLuint, GLint, GLint); -GLAPI void APIENTRY glProgramUniform2iEXT (GLuint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramUniform3iEXT (GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramUniform4iEXT (GLuint, GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint, GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint, GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint, GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint, GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint, GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint, GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint, GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint, GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint, GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint, GLint, GLuint); -GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint, GLint, GLuint, GLuint); -GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint, GLint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint, GLint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint, GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint, GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint, GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint, GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glNamedBufferDataEXT (GLuint, GLsizeiptr, const GLvoid *, GLenum); -GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint, GLintptr, GLsizeiptr, const GLvoid *); -GLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint, GLenum); -GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint); -GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint, GLenum, GLvoid* *); -GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint, GLintptr, GLsizeiptr, GLvoid *); -GLAPI void APIENTRY glTextureBufferEXT (GLuint, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glMultiTexBufferEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint, GLenum, GLint *); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint, GLenum); -GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint, GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint, GLenum); -GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum, GLenum); -GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint, GLenum); -GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint, GLsizei, const GLenum *); -GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint, GLenum); -GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint, GLsizei, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint, GLsizei, GLsizei, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint, GLenum, GLuint, GLint); -GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint, GLenum, GLuint, GLint, GLenum); -GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint, GLenum, GLuint); -GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum, GLenum, GLuint); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid* *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, GLvoid *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, GLvoid *img); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); +GLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI GLvoid* APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, GLvoid* *params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); @@ -8437,6 +10523,9 @@ typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); @@ -8463,6 +10552,23 @@ typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint frameb typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); #endif #ifndef GL_EXT_vertex_array_bgra @@ -8476,9 +10582,9 @@ typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenu #ifndef GL_NV_explicit_multisample #define GL_NV_explicit_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMultisamplefvNV (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint, GLbitfield); -GLAPI void APIENTRY glTexRenderbufferNV (GLenum, GLuint); +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); @@ -8488,13 +10594,13 @@ typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint rende #ifndef GL_NV_transform_feedback2 #define GL_NV_transform_feedback2 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum, GLuint); -GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint); +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); GLAPI void APIENTRY glPauseTransformFeedbackNV (void); GLAPI void APIENTRY glResumeTransformFeedbackNV (void); -GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum, GLuint); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); @@ -8505,11 +10611,516 @@ typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); #endif +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo 1 +#endif + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif + +#ifndef GL_AMD_vertex_shader_tesselator +#define GL_AMD_vertex_shader_tesselator 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#endif + +#ifndef GL_EXT_provoking_vertex +#define GL_EXT_provoking_vertex 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#endif + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#endif + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const GLvoid *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid* *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* *params); +#endif + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 +#endif + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_APPLE_vertex_program_evaluators 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#endif + +#ifndef GL_APPLE_object_purgeable +#define GL_APPLE_object_purgeable 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif + +#ifndef GL_APPLE_row_bytes +#define GL_APPLE_row_bytes 1 +#endif + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#endif + +#ifndef GL_NV_video_capture +#define GL_NV_video_capture 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#endif + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif + +#ifndef GL_NV_shader_buffer_load +#define GL_NV_shader_buffer_load 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_NV_vertex_buffer_unified_memory 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#endif + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#endif + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#endif + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +#endif + +#ifndef GL_NV_gpu_program5 +#define GL_NV_gpu_program5 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#endif + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#endif + +#ifndef GL_NV_tessellation_program5 +#define GL_NV_tessellation_program5 1 +#endif + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#endif + +#ifndef GL_AMD_name_gen_delete +#define GL_AMD_name_gen_delete 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#endif + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif + #ifdef __cplusplus } #endif #endif -/* *INDENT-ON* */ #endif /* NO_SDL_GLEXT */ + +#endif /* !__IPHONEOS__ */ + +#endif /* _SDL_opengl_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_opengles.h b/Externals/SDL2-2.0.1/include/SDL_opengles.h new file mode 100644 index 0000000000..00e60f5c17 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_opengles.h @@ -0,0 +1,38 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_opengles.h + * + * This is a simple file to encapsulate the OpenGL ES 1.X API headers. + */ + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif diff --git a/Externals/SDL2-2.0.1/include/SDL_opengles2.h b/Externals/SDL2-2.0.1/include/SDL_opengles2.h new file mode 100644 index 0000000000..7697626f4a --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_opengles2.h @@ -0,0 +1,38 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_opengles.h + * + * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. + */ + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif diff --git a/Externals/SDL/Include_1.3/SDL_pixels.h b/Externals/SDL2-2.0.1/include/SDL_pixels.h similarity index 53% rename from Externals/SDL/Include_1.3/SDL_pixels.h rename to Externals/SDL2-2.0.1/include/SDL_pixels.h index f4523fa8e6..99fcd9aac1 100644 --- a/Externals/SDL/Include_1.3/SDL_pixels.h +++ b/Externals/SDL2-2.0.1/include/SDL_pixels.h @@ -1,29 +1,28 @@ /* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ /** - * \file SDL_pixels.h + * \file SDL_pixels.h * - * Header for the enumerated pixel format definitions + * Header for the enumerated pixel format definitions. */ #ifndef _SDL_pixels_h @@ -32,17 +31,22 @@ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus -/* *INDENT-OFF* */ extern "C" { -/* *INDENT-ON* */ #endif -/* Transparency definitions: These define alpha as the opacity of a surface */ +/** + * \name Transparency definitions + * + * These define alpha as the opacity of a surface. + */ +/* @{ */ #define SDL_ALPHA_OPAQUE 255 #define SDL_ALPHA_TRANSPARENT 0 +/* @} */ +/** Pixel type. */ enum -{ /* Pixel type */ +{ SDL_PIXELTYPE_UNKNOWN, SDL_PIXELTYPE_INDEX1, SDL_PIXELTYPE_INDEX4, @@ -57,14 +61,17 @@ enum SDL_PIXELTYPE_ARRAYF32 }; +/** Bitmap pixel order, high bit -> low bit. */ enum -{ /* bitmap pixel order, high bit -> low bit */ +{ SDL_BITMAPORDER_NONE, SDL_BITMAPORDER_4321, SDL_BITMAPORDER_1234 }; + +/** Packed component order, high bit -> low bit. */ enum -{ /* packed component order, high bit -> low bit */ +{ SDL_PACKEDORDER_NONE, SDL_PACKEDORDER_XRGB, SDL_PACKEDORDER_RGBX, @@ -75,8 +82,10 @@ enum SDL_PACKEDORDER_ABGR, SDL_PACKEDORDER_BGRA }; + +/** Array component order, low byte -> high byte. */ enum -{ /* array component order, low byte -> high byte */ +{ SDL_ARRAYORDER_NONE, SDL_ARRAYORDER_RGB, SDL_ARRAYORDER_RGBA, @@ -86,8 +95,9 @@ enum SDL_ARRAYORDER_ABGR }; +/** Packed component layout. */ enum -{ /* Packed component layout */ +{ SDL_PACKEDLAYOUT_NONE, SDL_PACKEDLAYOUT_332, SDL_PACKEDLAYOUT_4444, @@ -99,42 +109,56 @@ enum SDL_PACKEDLAYOUT_1010102 }; -#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) \ - ((A) | ((B) << 8) | ((C) << 16) | ((D) << 24)) +#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) #define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ - ((1 << 31) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ + ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ ((bits) << 8) | ((bytes) << 0)) -#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) -#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) -#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) -#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) -#define SDL_BYTESPERPIXEL(X) (((X) >> 0) & 0xFF) +#define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) +#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) +#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) +#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) +#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) +#define SDL_BYTESPERPIXEL(X) \ + (SDL_ISPIXELFORMAT_FOURCC(X) ? \ + ((((X) == SDL_PIXELFORMAT_YUY2) || \ + ((X) == SDL_PIXELFORMAT_UYVY) || \ + ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) #define SDL_ISPIXELFORMAT_INDEXED(format) \ - ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ - (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8)) + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) +#define SDL_ISPIXELFORMAT_ALPHA(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) + +/* The flag is set to 1 because 0x1? is not in the printable ASCII range */ #define SDL_ISPIXELFORMAT_FOURCC(format) \ - ((format) && !((format) & 0x80000000)) + ((format) && (SDL_PIXELFLAG(format) != 1)) +/* Note: If you modify this list, update SDL_GetPixelFormatName() */ enum { SDL_PIXELFORMAT_UNKNOWN, SDL_PIXELFORMAT_INDEX1LSB = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, - 1, 0), - SDL_PIXELFORMAT_INDEX1MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, 1, 0), + SDL_PIXELFORMAT_INDEX1MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, + 1, 0), SDL_PIXELFORMAT_INDEX4LSB = - SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, - 2, 0), - SDL_PIXELFORMAT_INDEX4MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, - 2, 0), + 4, 0), + SDL_PIXELFORMAT_INDEX4MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, + 4, 0), SDL_PIXELFORMAT_INDEX8 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), SDL_PIXELFORMAT_RGB332 = @@ -152,15 +176,33 @@ enum SDL_PIXELFORMAT_ARGB4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_RGBA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ABGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_BGRA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_4444, 16, 2), SDL_PIXELFORMAT_ARGB1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_RGBA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_5551, 16, 2), SDL_PIXELFORMAT_ABGR1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_BGRA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_5551, 16, 2), SDL_PIXELFORMAT_RGB565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_BGR565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_565, 16, 2), SDL_PIXELFORMAT_RGB24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, 24, 3), @@ -170,9 +212,15 @@ enum SDL_PIXELFORMAT_RGB888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_RGBX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, + SDL_PACKEDLAYOUT_8888, 24, 4), SDL_PIXELFORMAT_BGR888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_BGRX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, + SDL_PACKEDLAYOUT_8888, 24, 4), SDL_PIXELFORMAT_ARGB8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_8888, 32, 4), @@ -189,15 +237,15 @@ enum SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_2101010, 32, 4), - SDL_PIXELFORMAT_YV12 = /* Planar mode: Y + V + U (3 planes) */ + SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), - SDL_PIXELFORMAT_IYUV = /* Planar mode: Y + U + V (3 planes) */ + SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), - SDL_PIXELFORMAT_YUY2 = /* Packed mode: Y0+U0+Y1+V0 (1 plane) */ + SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), - SDL_PIXELFORMAT_UYVY = /* Packed mode: U0+Y0+V0+Y1 (1 plane) */ + SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), - SDL_PIXELFORMAT_YVYU = /* Packed mode: Y0+V0+Y1+U0 (1 plane) */ + SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U') }; @@ -206,35 +254,32 @@ typedef struct SDL_Color Uint8 r; Uint8 g; Uint8 b; - Uint8 unused; + Uint8 a; } SDL_Color; #define SDL_Colour SDL_Color -typedef struct SDL_Palette SDL_Palette; -typedef int (*SDL_PaletteChangedFunc) (void *userdata, SDL_Palette * palette); - -typedef struct SDL_PaletteWatch -{ - SDL_PaletteChangedFunc callback; - void *userdata; - struct SDL_PaletteWatch *next; -} SDL_PaletteWatch; - -struct SDL_Palette +typedef struct SDL_Palette { int ncolors; SDL_Color *colors; - + Uint32 version; int refcount; - SDL_PaletteWatch *watch; -}; +} SDL_Palette; -/* Everything in the pixel format structure is read-only */ +/** + * \note Everything in the pixel format structure is read-only. + */ typedef struct SDL_PixelFormat { + Uint32 format; SDL_Palette *palette; Uint8 BitsPerPixel; Uint8 BytesPerPixel; + Uint8 padding[2]; + Uint32 Rmask; + Uint32 Gmask; + Uint32 Bmask; + Uint32 Amask; Uint8 Rloss; Uint8 Gloss; Uint8 Bloss; @@ -243,20 +288,21 @@ typedef struct SDL_PixelFormat Uint8 Gshift; Uint8 Bshift; Uint8 Ashift; - Uint32 Rmask; - Uint32 Gmask; - Uint32 Bmask; - Uint32 Amask; + int refcount; + struct SDL_PixelFormat *next; } SDL_PixelFormat; /** - * \fn SDL_bool SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, Uint32 * Rmask, Uint32 * Gmask, Uint32 * Bmask, Uint32 * Amask) + * \brief Get the human readable name of a pixel format + */ +extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); + +/** + * \brief Convert one of the enumerated pixel formats to a bpp and RGBA masks. * - * \brief Convert one of the enumerated pixel formats to a bpp and RGBA masks. + * \return SDL_TRUE, or SDL_FALSE if the conversion wasn't possible. * - * \return SDL_TRUE, or SDL_FALSE if the conversion wasn't possible. - * - * \sa SDL_MasksToPixelFormatEnum() + * \sa SDL_MasksToPixelFormatEnum() */ extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, @@ -266,13 +312,12 @@ extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, Uint32 * Amask); /** - * \fn Uint32 SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask) + * \brief Convert a bpp and RGBA masks to an enumerated pixel format. * - * \brief Convert a bpp and RGBA masks to an enumerated pixel format. + * \return The pixel format, or ::SDL_PIXELFORMAT_UNKNOWN if the conversion + * wasn't possible. * - * \return The pixel format, or SDL_PixelFormat_Unknown if the conversion wasn't possible. - * - * \sa SDL_PixelFormatEnumToMasks() + * \sa SDL_PixelFormatEnumToMasks() */ extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, @@ -281,118 +326,99 @@ extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, Uint32 Amask); /** - * \fn SDL_Palette *SDL_AllocPalette(int ncolors) + * \brief Create an SDL_PixelFormat structure from a pixel format enum. + */ +extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); + +/** + * \brief Free an SDL_PixelFormat structure. + */ +extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); + +/** + * \brief Create a palette structure with the specified number of color + * entries. * - * \brief Create a palette structure with the specified number of color entries. + * \return A new palette, or NULL if there wasn't enough memory. * - * \return A new palette, or NULL if there wasn't enough memory + * \note The palette entries are initialized to white. * - * \note The palette entries are initialized to white. - * - * \sa SDL_FreePalette() + * \sa SDL_FreePalette() */ extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); /** - * \fn int SDL_AddPaletteWatch(SDL_Palette *palette, SDL_PaletteChangedFunc callback, void *userdata) - * - * \brief Add a callback function which is called when the palette changes. - * - * \sa SDL_DelPaletteWatch() + * \brief Set the palette for a pixel format structure. */ -extern DECLSPEC int SDLCALL SDL_AddPaletteWatch(SDL_Palette * palette, - SDL_PaletteChangedFunc - callback, void *userdata); +extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, + SDL_Palette *palette); /** - * \fn void SDL_DelPaletteWatch(SDL_Palette *palette, SDL_PaletteChangedFunc callback, void *userdata) + * \brief Set a range of colors in a palette. * - * \brief Remove a callback function previously added with SDL_AddPaletteWatch() + * \param palette The palette to modify. + * \param colors An array of colors to copy into the palette. + * \param firstcolor The index of the first palette entry to modify. + * \param ncolors The number of entries to modify. * - * \sa SDL_AddPaletteWatch() - */ -extern DECLSPEC void SDLCALL SDL_DelPaletteWatch(SDL_Palette * palette, - SDL_PaletteChangedFunc - callback, void *userdata); - -/** - * \fn int SDL_SetPaletteColors(SDL_Palette *palette, const SDL_Colors *colors, int firstcolor, int numcolors) - * - * \brief Set a range of colors in a palette. - * - * \param palette The palette to modify - * \param colors An array of colors to copy into the palette - * \param firstcolor The index of the first palette entry to modify - * \param ncolors The number of entries to modify - * - * \return 0 on success, or -1 if not all of the colors could be set + * \return 0 on success, or -1 if not all of the colors could be set. */ extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, const SDL_Color * colors, int firstcolor, int ncolors); /** - * \fn void SDL_FreePalette(SDL_Palette *palette) + * \brief Free a palette created with SDL_AllocPalette(). * - * \brief Free a palette created with SDL_AllocPalette() - * - * \sa SDL_AllocPalette() + * \sa SDL_AllocPalette() */ extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); /** - * \fn Uint32 SDL_MapRGB(const SDL_PixelFormat *format, - * Uint8 r, Uint8 g, Uint8 b) + * \brief Maps an RGB triple to an opaque pixel value for a given pixel format. * - * \brief Maps an RGB triple to an opaque pixel value for a given pixel format - * - * \sa SDL_MapRGBA + * \sa SDL_MapRGBA */ extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, Uint8 r, Uint8 g, Uint8 b); /** - * \fn Uint32 SDL_MapRGBA(const SDL_PixelFormat *fmt, - * Uint8 r, Uint8 g, Uint8 b, Uint8 a) + * \brief Maps an RGBA quadruple to a pixel value for a given pixel format. * - * \brief Maps an RGBA quadruple to a pixel value for a given pixel format - * - * \sa SDL_MapRGB + * \sa SDL_MapRGB */ extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, Uint8 r, Uint8 g, Uint8 b, Uint8 a); /** - * \fn void SDL_GetRGB(Uint32 pixel, const SDL_PixelFormat * format, - * Uint8 * r, Uint8 * g, Uint8 * b) + * \brief Get the RGB components from a pixel of the specified format. * - * \brief Maps a pixel value into the RGB components for a given pixel format - * - * \sa SDL_GetRGBA + * \sa SDL_GetRGBA */ extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, const SDL_PixelFormat * format, Uint8 * r, Uint8 * g, Uint8 * b); /** - * \fn void SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormat * format, - * Uint8 * r, Uint8 * g, Uint8 * b, Uint8 * a) + * \brief Get the RGBA components from a pixel of the specified format. * - * \brief Maps a pixel value into the RGBA components for a given pixel format - * - * \sa SDL_GetRGB + * \sa SDL_GetRGB */ extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormat * format, Uint8 * r, Uint8 * g, Uint8 * b, Uint8 * a); +/** + * \brief Calculate a 256 entry gamma ramp for a gamma value. + */ +extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); + + /* Ends C function definitions when using C++ */ #ifdef __cplusplus -/* *INDENT-OFF* */ } -/* *INDENT-ON* */ #endif #include "close_code.h" diff --git a/Externals/SDL2-2.0.1/include/SDL_platform.h b/Externals/SDL2-2.0.1/include/SDL_platform.h new file mode 100644 index 0000000000..a40c41e265 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_platform.h @@ -0,0 +1,155 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_platform.h + * + * Try to get a standard set of platform defines. + */ + +#ifndef _SDL_platform_h +#define _SDL_platform_h + +#if defined(_AIX) +#undef __AIX__ +#define __AIX__ 1 +#endif +#if defined(__BEOS__) +#undef __BEOS__ +#define __BEOS__ 1 +#endif +#if defined(__HAIKU__) +#undef __HAIKU__ +#define __HAIKU__ 1 +#endif +#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) +#undef __BSDI__ +#define __BSDI__ 1 +#endif +#if defined(_arch_dreamcast) +#undef __DREAMCAST__ +#define __DREAMCAST__ 1 +#endif +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) +#undef __FREEBSD__ +#define __FREEBSD__ 1 +#endif +#if defined(hpux) || defined(__hpux) || defined(__hpux__) +#undef __HPUX__ +#define __HPUX__ 1 +#endif +#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) +#undef __IRIX__ +#define __IRIX__ 1 +#endif +#if defined(linux) || defined(__linux) || defined(__linux__) +#undef __LINUX__ +#define __LINUX__ 1 +#endif +#if defined(ANDROID) +#undef __ANDROID__ +#undef __LINUX__ /* do we need to do this? */ +#define __ANDROID__ 1 +#endif + +#if defined(__APPLE__) +/* lets us know what version of Mac OS X we're compiling on */ +#include "AvailabilityMacros.h" +#include "TargetConditionals.h" +#if TARGET_OS_IPHONE +/* if compiling for iPhone */ +#undef __IPHONEOS__ +#define __IPHONEOS__ 1 +#undef __MACOSX__ +#else +/* if not compiling for iPhone */ +#undef __MACOSX__ +#define __MACOSX__ 1 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050 +# error SDL for Mac OS X only supports deploying on 10.5 and above. +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1050 */ +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 +# error SDL for Mac OS X must be built with a 10.6 SDK or above. +#endif /* MAC_OS_X_VERSION_MAX_ALLOWED < 1060 */ +#endif /* TARGET_OS_IPHONE */ +#endif /* defined(__APPLE__) */ + +#if defined(__NetBSD__) +#undef __NETBSD__ +#define __NETBSD__ 1 +#endif +#if defined(__OpenBSD__) +#undef __OPENBSD__ +#define __OPENBSD__ 1 +#endif +#if defined(__OS2__) +#undef __OS2__ +#define __OS2__ 1 +#endif +#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) +#undef __OSF__ +#define __OSF__ 1 +#endif +#if defined(__QNXNTO__) +#undef __QNXNTO__ +#define __QNXNTO__ 1 +#endif +#if defined(riscos) || defined(__riscos) || defined(__riscos__) +#undef __RISCOS__ +#define __RISCOS__ 1 +#endif +#if defined(__SVR4) +#undef __SOLARIS__ +#define __SOLARIS__ 1 +#endif +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) +#undef __WINDOWS__ +#define __WINDOWS__ 1 +#endif +#if defined(__WINDOWS__) +#undef __WIN32__ +#define __WIN32__ 1 +#endif +#if defined(__PSP__) +#undef __PSP__ +#define __PSP__ 1 +#endif + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Gets the name of the platform. + */ +extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_platform_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_power.h b/Externals/SDL2-2.0.1/include/SDL_power.h new file mode 100644 index 0000000000..4f70c5bb16 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_power.h @@ -0,0 +1,75 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_power_h +#define _SDL_power_h + +/** + * \file SDL_power.h + * + * Header for the SDL power management routines. + */ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The basic state for the system's power supply. + */ +typedef enum +{ + SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ + SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ + SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ + SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ + SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ +} SDL_PowerState; + + +/** + * \brief Get the current power supply details. + * + * \param secs Seconds of battery life left. You can pass a NULL here if + * you don't care. Will return -1 if we can't determine a + * value, or we're not running on a battery. + * + * \param pct Percentage of battery life left, between 0 and 100. You can + * pass a NULL here if you don't care. Will return -1 if we + * can't determine a value, or we're not running on a battery. + * + * \return The state of the battery (if any). + */ +extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_power_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_quit.h b/Externals/SDL2-2.0.1/include/SDL_quit.h new file mode 100644 index 0000000000..485e42db04 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_quit.h @@ -0,0 +1,58 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_quit.h + * + * Include file for SDL quit event handling. + */ + +#ifndef _SDL_quit_h +#define _SDL_quit_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +/** + * \file SDL_quit.h + * + * An ::SDL_QUIT event is generated when the user tries to close the application + * window. If it is ignored or filtered out, the window will remain open. + * If it is not ignored or filtered, it is queued normally and the window + * is allowed to close. When the window is closed, screen updates will + * complete, but have no effect. + * + * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) + * and SIGTERM (system termination request), if handlers do not already + * exist, that generate ::SDL_QUIT events as well. There is no way + * to determine the cause of an ::SDL_QUIT event, but setting a signal + * handler in your application will override the default generation of + * quit events for that signal. + * + * \sa SDL_Quit() + */ + +/* There are no functions directly affecting the quit event */ + +#define SDL_QuitRequested() \ + (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) + +#endif /* _SDL_quit_h */ diff --git a/Externals/SDL2-2.0.1/include/SDL_rect.h b/Externals/SDL2-2.0.1/include/SDL_rect.h new file mode 100644 index 0000000000..7132e1b440 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_rect.h @@ -0,0 +1,138 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_rect.h + * + * Header file for SDL_rect definition and management functions. + */ + +#ifndef _SDL_rect_h +#define _SDL_rect_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_pixels.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The structure that defines a point + * + * \sa SDL_EnclosePoints + */ +typedef struct SDL_Point +{ + int x; + int y; +} SDL_Point; + +/** + * \brief A rectangle, with the origin at the upper left. + * + * \sa SDL_RectEmpty + * \sa SDL_RectEquals + * \sa SDL_HasIntersection + * \sa SDL_IntersectRect + * \sa SDL_UnionRect + * \sa SDL_EnclosePoints + */ +typedef struct SDL_Rect +{ + int x, y; + int w, h; +} SDL_Rect; + +/** + * \brief Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) +{ + return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * \brief Returns true if the two rectangles are equal. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) +{ + return (a && b && (a->x == b->x) && (a->y == b->y) && + (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * \brief Determine whether two rectangles intersect. + * + * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, + const SDL_Rect * B); + +/** + * \brief Calculate the intersection of two rectangles. + * + * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * \brief Calculate the union of two rectangles. + */ +extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * \brief Calculate a minimal rectangle enclosing a set of points + * + * \return SDL_TRUE if any points were within the clipping rect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, + int count, + const SDL_Rect * clip, + SDL_Rect * result); + +/** + * \brief Calculate the intersection of a rectangle and line segment. + * + * \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * + rect, int *X1, + int *Y1, int *X2, + int *Y2); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_rect_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_render.h b/Externals/SDL2-2.0.1/include/SDL_render.h new file mode 100644 index 0000000000..a765dc79f0 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_render.h @@ -0,0 +1,870 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_render.h + * + * Header file for SDL 2D rendering functions. + * + * This API supports the following features: + * * single pixel points + * * single pixel lines + * * filled rectangles + * * texture images + * + * The primitives may be drawn in opaque, blended, or additive modes. + * + * The texture images may be drawn in opaque, blended, or additive modes. + * They can have an additional color tint or alpha modulation applied to + * them, and may also be stretched with linear interpolation. + * + * This API is designed to accelerate simple 2D operations. You may + * want more functionality such as polygons and particle effects and + * in that case you should use SDL's OpenGL/Direct3D support or one + * of the many good 3D engines. + * + * These functions must be called from the main thread. + * See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995 + */ + +#ifndef _SDL_render_h +#define _SDL_render_h + +#include "SDL_stdinc.h" +#include "SDL_rect.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Flags used when creating a rendering context + */ +typedef enum +{ + SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ + SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware + acceleration */ + SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized + with the refresh rate */ + SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports + rendering to texture */ +} SDL_RendererFlags; + +/** + * \brief Information on the capabilities of a render driver or context. + */ +typedef struct SDL_RendererInfo +{ + const char *name; /**< The name of the renderer */ + Uint32 flags; /**< Supported ::SDL_RendererFlags */ + Uint32 num_texture_formats; /**< The number of available texture formats */ + Uint32 texture_formats[16]; /**< The available texture formats */ + int max_texture_width; /**< The maximimum texture width */ + int max_texture_height; /**< The maximimum texture height */ +} SDL_RendererInfo; + +/** + * \brief The access pattern allowed for a texture. + */ +typedef enum +{ + SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ + SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ + SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ +} SDL_TextureAccess; + +/** + * \brief The texture channel modulation used in SDL_RenderCopy(). + */ +typedef enum +{ + SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ + SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ + SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ +} SDL_TextureModulate; + +/** + * \brief Flip constants for SDL_RenderCopyEx + */ +typedef enum +{ + SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ + SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ + SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ +} SDL_RendererFlip; + +/** + * \brief A structure representing rendering state + */ +struct SDL_Renderer; +typedef struct SDL_Renderer SDL_Renderer; + +/** + * \brief An efficient driver-specific representation of pixel data + */ +struct SDL_Texture; +typedef struct SDL_Texture SDL_Texture; + + +/* Function prototypes */ + +/** + * \brief Get the number of 2D rendering drivers available for the current + * display. + * + * A render driver is a set of code that handles rendering and texture + * management on a particular display. Normally there is only one, but + * some drivers may have several available with different capabilities. + * + * \sa SDL_GetRenderDriverInfo() + * \sa SDL_CreateRenderer() + */ +extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); + +/** + * \brief Get information about a specific 2D rendering driver for the current + * display. + * + * \param index The index of the driver to query information about. + * \param info A pointer to an SDL_RendererInfo struct to be filled with + * information on the rendering driver. + * + * \return 0 on success, -1 if the index was out of range. + * + * \sa SDL_CreateRenderer() + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, + SDL_RendererInfo * info); + +/** + * \brief Create a window and default renderer + * + * \param width The width of the window + * \param height The height of the window + * \param window_flags The flags used to create the window + * \param window A pointer filled with the window, or NULL on error + * \param renderer A pointer filled with the renderer, or NULL on error + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( + int width, int height, Uint32 window_flags, + SDL_Window **window, SDL_Renderer **renderer); + + +/** + * \brief Create a 2D rendering context for a window. + * + * \param window The window where rendering is displayed. + * \param index The index of the rendering driver to initialize, or -1 to + * initialize the first one supporting the requested flags. + * \param flags ::SDL_RendererFlags. + * + * \return A valid rendering context or NULL if there was an error. + * + * \sa SDL_CreateSoftwareRenderer() + * \sa SDL_GetRendererInfo() + * \sa SDL_DestroyRenderer() + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, + int index, Uint32 flags); + +/** + * \brief Create a 2D software rendering context for a surface. + * + * \param surface The surface where rendering is done. + * + * \return A valid rendering context or NULL if there was an error. + * + * \sa SDL_CreateRenderer() + * \sa SDL_DestroyRenderer() + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); + +/** + * \brief Get the renderer associated with a window. + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); + +/** + * \brief Get information about a rendering context. + */ +extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, + SDL_RendererInfo * info); + +/** + * \brief Get the output size of a rendering context. + */ +extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, + int *w, int *h); + +/** + * \brief Create a texture for a rendering context. + * + * \param renderer The renderer. + * \param format The format of the texture. + * \param access One of the enumerated values in ::SDL_TextureAccess. + * \param w The width of the texture in pixels. + * \param h The height of the texture in pixels. + * + * \return The created texture is returned, or 0 if no rendering context was + * active, the format was unsupported, or the width or height were out + * of range. + * + * \sa SDL_QueryTexture() + * \sa SDL_UpdateTexture() + * \sa SDL_DestroyTexture() + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, + Uint32 format, + int access, int w, + int h); + +/** + * \brief Create a texture from an existing surface. + * + * \param renderer The renderer. + * \param surface The surface containing pixel data used to fill the texture. + * + * \return The created texture is returned, or 0 on error. + * + * \note The surface is not modified or freed by this function. + * + * \sa SDL_QueryTexture() + * \sa SDL_DestroyTexture() + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); + +/** + * \brief Query the attributes of a texture + * + * \param texture A texture to be queried. + * \param format A pointer filled in with the raw format of the texture. The + * actual format may differ, but pixel transfers will use this + * format. + * \param access A pointer filled in with the actual access to the texture. + * \param w A pointer filled in with the width of the texture in pixels. + * \param h A pointer filled in with the height of the texture in pixels. + * + * \return 0 on success, or -1 if the texture is not valid. + */ +extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, + Uint32 * format, int *access, + int *w, int *h); + +/** + * \brief Set an additional color value used in render copy operations. + * + * \param texture The texture to update. + * \param r The red color value multiplied into copy operations. + * \param g The green color value multiplied into copy operations. + * \param b The blue color value multiplied into copy operations. + * + * \return 0 on success, or -1 if the texture is not valid or color modulation + * is not supported. + * + * \sa SDL_GetTextureColorMod() + */ +extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * \brief Get the additional color value used in render copy operations. + * + * \param texture The texture to query. + * \param r A pointer filled in with the current red color value. + * \param g A pointer filled in with the current green color value. + * \param b A pointer filled in with the current blue color value. + * + * \return 0 on success, or -1 if the texture is not valid. + * + * \sa SDL_SetTextureColorMod() + */ +extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * \brief Set an additional alpha value used in render copy operations. + * + * \param texture The texture to update. + * \param alpha The alpha value multiplied into copy operations. + * + * \return 0 on success, or -1 if the texture is not valid or alpha modulation + * is not supported. + * + * \sa SDL_GetTextureAlphaMod() + */ +extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, + Uint8 alpha); + +/** + * \brief Get the additional alpha value used in render copy operations. + * + * \param texture The texture to query. + * \param alpha A pointer filled in with the current alpha value. + * + * \return 0 on success, or -1 if the texture is not valid. + * + * \sa SDL_SetTextureAlphaMod() + */ +extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, + Uint8 * alpha); + +/** + * \brief Set the blend mode used for texture copy operations. + * + * \param texture The texture to update. + * \param blendMode ::SDL_BlendMode to use for texture blending. + * + * \return 0 on success, or -1 if the texture is not valid or the blend mode is + * not supported. + * + * \note If the blend mode is not supported, the closest supported mode is + * chosen. + * + * \sa SDL_GetTextureBlendMode() + */ +extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode blendMode); + +/** + * \brief Get the blend mode used for texture copy operations. + * + * \param texture The texture to query. + * \param blendMode A pointer filled in with the current blend mode. + * + * \return 0 on success, or -1 if the texture is not valid. + * + * \sa SDL_SetTextureBlendMode() + */ +extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode *blendMode); + +/** + * \brief Update the given texture rectangle with new pixel data. + * + * \param texture The texture to update + * \param rect A pointer to the rectangle of pixels to update, or NULL to + * update the entire texture. + * \param pixels The raw pixel data. + * \param pitch The number of bytes between rows of pixel data. + * + * \return 0 on success, or -1 if the texture is not valid. + * + * \note This is a fairly slow function. + */ +extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const void *pixels, int pitch); + +/** + * \brief Update a rectangle within a planar YV12 or IYUV texture with new pixel data. + * + * \param texture The texture to update + * \param rect A pointer to the rectangle of pixels to update, or NULL to + * update the entire texture. + * \param Yplane The raw pixel data for the Y plane. + * \param Ypitch The number of bytes between rows of pixel data for the Y plane. + * \param Uplane The raw pixel data for the U plane. + * \param Upitch The number of bytes between rows of pixel data for the U plane. + * \param Vplane The raw pixel data for the V plane. + * \param Vpitch The number of bytes between rows of pixel data for the V plane. + * + * \return 0 on success, or -1 if the texture is not valid. + * + * \note You can use SDL_UpdateTexture() as long as your pixel data is + * a contiguous block of Y and U/V planes in the proper order, but + * this function is available if your pixel data is not contiguous. + */ +extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *Uplane, int Upitch, + const Uint8 *Vplane, int Vpitch); + +/** + * \brief Lock a portion of the texture for write-only pixel access. + * + * \param texture The texture to lock for access, which was created with + * ::SDL_TEXTUREACCESS_STREAMING. + * \param rect A pointer to the rectangle to lock for access. If the rect + * is NULL, the entire texture will be locked. + * \param pixels This is filled in with a pointer to the locked pixels, + * appropriately offset by the locked area. + * \param pitch This is filled in with the pitch of the locked pixels. + * + * \return 0 on success, or -1 if the texture is not valid or was not created with ::SDL_TEXTUREACCESS_STREAMING. + * + * \sa SDL_UnlockTexture() + */ +extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, + const SDL_Rect * rect, + void **pixels, int *pitch); + +/** + * \brief Unlock a texture, uploading the changes to video memory, if needed. + * + * \sa SDL_LockTexture() + */ +extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); + +/** + * \brief Determines whether a window supports the use of render targets + * + * \param renderer The renderer that will be checked + * + * \return SDL_TRUE if supported, SDL_FALSE if not. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); + +/** + * \brief Set a texture as the current rendering target. + * + * \param renderer The renderer. + * \param texture The targeted texture, which must be created with the SDL_TEXTUREACCESS_TARGET flag, or NULL for the default render target + * + * \return 0 on success, or -1 on error + * + * \sa SDL_GetRenderTarget() + */ +extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, + SDL_Texture *texture); + +/** + * \brief Get the current render target or NULL for the default render target. + * + * \return The current render target + * + * \sa SDL_SetRenderTarget() + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); + +/** + * \brief Set device independent resolution for rendering + * + * \param renderer The renderer for which resolution should be set. + * \param w The width of the logical resolution + * \param h The height of the logical resolution + * + * This function uses the viewport and scaling functionality to allow a fixed logical + * resolution for rendering, regardless of the actual output resolution. If the actual + * output resolution doesn't have the same aspect ratio the output rendering will be + * centered within the output display. + * + * If the output display is a window, mouse events in the window will be filtered + * and scaled so they seem to arrive within the logical resolution. + * + * \note If this function results in scaling or subpixel drawing by the + * rendering backend, it will be handled using the appropriate + * quality hints. + * + * \sa SDL_RenderGetLogicalSize() + * \sa SDL_RenderSetScale() + * \sa SDL_RenderSetViewport() + */ +extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); + +/** + * \brief Get device independent resolution for rendering + * + * \param renderer The renderer from which resolution should be queried. + * \param w A pointer filled with the width of the logical resolution + * \param h A pointer filled with the height of the logical resolution + * + * \sa SDL_RenderSetLogicalSize() + */ +extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); + +/** + * \brief Set the drawing area for rendering on the current target. + * + * \param renderer The renderer for which the drawing area should be set. + * \param rect The rectangle representing the drawing area, or NULL to set the viewport to the entire target. + * + * The x,y of the viewport rect represents the origin for rendering. + * + * \return 0 on success, or -1 on error + * + * \note If the window associated with the renderer is resized, the viewport is automatically reset. + * + * \sa SDL_RenderGetViewport() + * \sa SDL_RenderSetLogicalSize() + */ +extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * \brief Get the drawing area for the current target. + * + * \sa SDL_RenderSetViewport() + */ +extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * \brief Set the clip rectangle for the current target. + * + * \param renderer The renderer for which clip rectangle should be set. + * \param rect A pointer to the rectangle to set as the clip rectangle, or + * NULL to disable clipping. + * + * \return 0 on success, or -1 on error + * + * \sa SDL_RenderGetClipRect() + */ +extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * \brief Get the clip rectangle for the current target. + * + * \param renderer The renderer from which clip rectangle should be queried. + * \param rect A pointer filled in with the current clip rectangle, or + * an empty rectangle if clipping is disabled. + * + * \sa SDL_RenderSetClipRect() + */ +extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * \brief Set the drawing scale for rendering on the current target. + * + * \param renderer The renderer for which the drawing scale should be set. + * \param scaleX The horizontal scaling factor + * \param scaleY The vertical scaling factor + * + * The drawing coordinates are scaled by the x/y scaling factors + * before they are used by the renderer. This allows resolution + * independent drawing with a single coordinate system. + * + * \note If this results in scaling or subpixel drawing by the + * rendering backend, it will be handled using the appropriate + * quality hints. For best results use integer scaling factors. + * + * \sa SDL_RenderGetScale() + * \sa SDL_RenderSetLogicalSize() + */ +extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, + float scaleX, float scaleY); + +/** + * \brief Get the drawing scale for the current target. + * + * \param renderer The renderer from which drawing scale should be queried. + * \param scaleX A pointer filled in with the horizontal scaling factor + * \param scaleY A pointer filled in with the vertical scaling factor + * + * \sa SDL_RenderSetScale() + */ +extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, + float *scaleX, float *scaleY); + +/** + * \brief Set the color used for drawing operations (Rect, Line and Clear). + * + * \param renderer The renderer for which drawing color should be set. + * \param r The red value used to draw on the rendering target. + * \param g The green value used to draw on the rendering target. + * \param b The blue value used to draw on the rendering target. + * \param a The alpha value used to draw on the rendering target, usually + * ::SDL_ALPHA_OPAQUE (255). + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDL_SetRenderDrawColor(SDL_Renderer * renderer, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * \brief Get the color used for drawing operations (Rect, Line and Clear). + * + * \param renderer The renderer from which drawing color should be queried. + * \param r A pointer to the red value used to draw on the rendering target. + * \param g A pointer to the green value used to draw on the rendering target. + * \param b A pointer to the blue value used to draw on the rendering target. + * \param a A pointer to the alpha value used to draw on the rendering target, + * usually ::SDL_ALPHA_OPAQUE (255). + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDL_GetRenderDrawColor(SDL_Renderer * renderer, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * \brief Set the blend mode used for drawing operations (Fill and Line). + * + * \param renderer The renderer for which blend mode should be set. + * \param blendMode ::SDL_BlendMode to use for blending. + * + * \return 0 on success, or -1 on error + * + * \note If the blend mode is not supported, the closest supported mode is + * chosen. + * + * \sa SDL_GetRenderDrawBlendMode() + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode blendMode); + +/** + * \brief Get the blend mode used for drawing operations. + * + * \param renderer The renderer from which blend mode should be queried. + * \param blendMode A pointer filled in with the current blend mode. + * + * \return 0 on success, or -1 on error + * + * \sa SDL_SetRenderDrawBlendMode() + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode *blendMode); + +/** + * \brief Clear the current rendering target with the drawing color + * + * This function clears the entire rendering target, ignoring the viewport. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); + +/** + * \brief Draw a point on the current rendering target. + * + * \param renderer The renderer which should draw a point. + * \param x The x coordinate of the point. + * \param y The y coordinate of the point. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, + int x, int y); + +/** + * \brief Draw multiple points on the current rendering target. + * + * \param renderer The renderer which should draw multiple points. + * \param points The points to draw + * \param count The number of points to draw + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * \brief Draw a line on the current rendering target. + * + * \param renderer The renderer which should draw a line. + * \param x1 The x coordinate of the start point. + * \param y1 The y coordinate of the start point. + * \param x2 The x coordinate of the end point. + * \param y2 The y coordinate of the end point. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, + int x1, int y1, int x2, int y2); + +/** + * \brief Draw a series of connected lines on the current rendering target. + * + * \param renderer The renderer which should draw multiple lines. + * \param points The points along the lines + * \param count The number of points, drawing count-1 lines + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * \brief Draw a rectangle on the current rendering target. + * + * \param renderer The renderer which should draw a rectangle. + * \param rect A pointer to the destination rectangle, or NULL to outline the entire rendering target. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * \brief Draw some number of rectangles on the current rendering target. + * + * \param renderer The renderer which should draw multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * \brief Fill a rectangle on the current rendering target with the drawing color. + * + * \param renderer The renderer which should fill a rectangle. + * \param rect A pointer to the destination rectangle, or NULL for the entire + * rendering target. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * \brief Fill some number of rectangles on the current rendering target with the drawing color. + * + * \param renderer The renderer which should fill multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * \brief Copy a portion of the texture to the current rendering target. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect); + +/** + * \brief Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \param angle An angle in degrees that indicates the rotation that will be applied to dstrect + * \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2) + * \param flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture + * + * \return 0 on success, or -1 on error + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect, + const double angle, + const SDL_Point *center, + const SDL_RendererFlip flip); + +/** + * \brief Read pixels from the current rendering target. + * + * \param renderer The renderer from which pixels should be read. + * \param rect A pointer to the rectangle to read, or NULL for the entire + * render target. + * \param format The desired format of the pixel data, or 0 to use the format + * of the rendering target + * \param pixels A pointer to be filled in with the pixel data + * \param pitch The pitch of the pixels parameter. + * + * \return 0 on success, or -1 if pixel reading is not supported. + * + * \warning This is a very slow operation, and should not be used frequently. + */ +extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, + const SDL_Rect * rect, + Uint32 format, + void *pixels, int pitch); + +/** + * \brief Update the screen with rendering performed. + */ +extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); + +/** + * \brief Destroy the specified texture. + * + * \sa SDL_CreateTexture() + * \sa SDL_CreateTextureFromSurface() + */ +extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); + +/** + * \brief Destroy the rendering context for a window and free associated + * textures. + * + * \sa SDL_CreateRenderer() + */ +extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); + + +/** + * \brief Bind the texture to the current OpenGL/ES/ES2 context for use with + * OpenGL instructions. + * + * \param texture The SDL texture to bind + * \param texw A pointer to a float that will be filled with the texture width + * \param texh A pointer to a float that will be filled with the texture height + * + * \return 0 on success, or -1 if the operation is not supported + */ +extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); + +/** + * \brief Unbind a texture from the current OpenGL/ES/ES2 context. + * + * \param texture The SDL texture to unbind + * + * \return 0 on success, or -1 if the operation is not supported + */ +extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_render_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_revision.h b/Externals/SDL2-2.0.1/include/SDL_revision.h new file mode 100644 index 0000000000..fe3a9fc8c0 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_revision.h @@ -0,0 +1,2 @@ +#define SDL_REVISION "hg-7890:c031abe0b287" +#define SDL_REVISION_NUMBER 7890 diff --git a/Externals/SDL2-2.0.1/include/SDL_rwops.h b/Externals/SDL2-2.0.1/include/SDL_rwops.h new file mode 100644 index 0000000000..d257442382 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_rwops.h @@ -0,0 +1,232 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_rwops.h + * + * This file provides a general interface for SDL to read and write + * data streams. It can easily be extended to files, memory, etc. + */ + +#ifndef _SDL_rwops_h +#define _SDL_rwops_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* RWops Types */ +#define SDL_RWOPS_UNKNOWN 0 /* Unknown stream type */ +#define SDL_RWOPS_WINFILE 1 /* Win32 file */ +#define SDL_RWOPS_STDFILE 2 /* Stdio file */ +#define SDL_RWOPS_JNIFILE 3 /* Android asset */ +#define SDL_RWOPS_MEMORY 4 /* Memory stream */ +#define SDL_RWOPS_MEMORY_RO 5 /* Read-Only memory stream */ + +/** + * This is the read/write operation structure -- very basic. + */ +typedef struct SDL_RWops +{ + /** + * Return the size of the file in this rwops, or -1 if unknown + */ + Sint64 (SDLCALL * size) (struct SDL_RWops * context); + + /** + * Seek to \c offset relative to \c whence, one of stdio's whence values: + * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + * + * \return the final offset in the data stream, or -1 on error. + */ + Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, + int whence); + + /** + * Read up to \c maxnum objects each of size \c size from the data + * stream to the area pointed at by \c ptr. + * + * \return the number of objects read, or 0 at error or end of file. + */ + size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, + size_t size, size_t maxnum); + + /** + * Write exactly \c num objects each of size \c size from the area + * pointed at by \c ptr to data stream. + * + * \return the number of objects written, or 0 at error or end of file. + */ + size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, + size_t size, size_t num); + + /** + * Close and free an allocated SDL_RWops structure. + * + * \return 0 if successful or -1 on write error when flushing data. + */ + int (SDLCALL * close) (struct SDL_RWops * context); + + Uint32 type; + union + { +#if defined(ANDROID) + struct + { + void *fileNameRef; + void *inputStreamRef; + void *readableByteChannelRef; + void *readMethod; + void *assetFileDescriptorRef; + long position; + long size; + long offset; + int fd; + } androidio; +#elif defined(__WIN32__) + struct + { + SDL_bool append; + void *h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } windowsio; +#endif + +#ifdef HAVE_STDIO_H + struct + { + SDL_bool autoclose; + FILE *fp; + } stdio; +#endif + struct + { + Uint8 *base; + Uint8 *here; + Uint8 *stop; + } mem; + struct + { + void *data1; + void *data2; + } unknown; + } hidden; + +} SDL_RWops; + + +/** + * \name RWFrom functions + * + * Functions to create SDL_RWops structures from various data streams. + */ +/* @{ */ + +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, + const char *mode); + +#ifdef HAVE_STDIO_H +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, + SDL_bool autoclose); +#else +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, + SDL_bool autoclose); +#endif + +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, + int size); + +/* @} *//* RWFrom functions */ + + +extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); +extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); + +#define RW_SEEK_SET 0 /**< Seek from the beginning of data */ +#define RW_SEEK_CUR 1 /**< Seek relative to current read point */ +#define RW_SEEK_END 2 /**< Seek relative to the end of data */ + +/** + * \name Read/write macros + * + * Macros to easily read and write from an SDL_RWops structure. + */ +/* @{ */ +#define SDL_RWsize(ctx) (ctx)->size(ctx) +#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) +#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) +#define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) +#define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) +#define SDL_RWclose(ctx) (ctx)->close(ctx) +/* @} *//* Read/write macros */ + + +/** + * \name Read endian functions + * + * Read an item of the specified endianness and return in native format. + */ +/* @{ */ +extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); +extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); +extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); +extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); +extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); +extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); +extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); +/* @} *//* Read endian functions */ + +/** + * \name Write endian functions + * + * Write an item of native format to the specified endianness. + */ +/* @{ */ +extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); +extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); +extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); +extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); +extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); +extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); +extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); +/* @} *//* Write endian functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_rwops_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL/Include_1.3/SDL_scancode.h b/Externals/SDL2-2.0.1/include/SDL_scancode.h similarity index 56% rename from Externals/SDL/Include_1.3/SDL_scancode.h rename to Externals/SDL2-2.0.1/include/SDL_scancode.h index 8cbfa08b93..00b47a3b80 100644 --- a/Externals/SDL/Include_1.3/SDL_scancode.h +++ b/Externals/SDL2-2.0.1/include/SDL_scancode.h @@ -1,27 +1,28 @@ /* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ /** - * \file SDL_scancode.h + * \file SDL_scancode.h + * + * Defines keyboard scancodes. */ #ifndef _SDL_scancode_h @@ -30,22 +31,25 @@ #include "SDL_stdinc.h" /** - * \enum SDL_scancode + * \brief The SDL keyboard scancode representation. * - * \brief The SDL keyboard scancode representation. + * Values of this type are used to represent keyboard keys, among other places + * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the + * SDL_Event structure. * - * Values of this type are used to represent keyboard keys, among other places - * in the \link SDL_keysym::scancode key.keysym.scancode \endlink field of the - * SDL_Event structure. - * - * The values in this enumeration are based on the USB usage page standard: - * http://www.usb.org/developers/devclass_docs/Hut1_12.pdf + * The values in this enumeration are based on the USB usage page standard: + * http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf */ typedef enum { SDL_SCANCODE_UNKNOWN = 0, - /* These values are from usage page 0x07 (USB keyboard page) */ + /** + * \name Usage page 0x07 + * + * These values are from usage page 0x07 (USB keyboard page). + */ + /* @{ */ SDL_SCANCODE_A = 4, SDL_SCANCODE_B = 5, @@ -95,11 +99,51 @@ typedef enum SDL_SCANCODE_EQUALS = 46, SDL_SCANCODE_LEFTBRACKET = 47, SDL_SCANCODE_RIGHTBRACKET = 48, - SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return key on ISO keyboards and at the right end of the QWERTY row on ANSI keyboards. Produces REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US layout, REVERSE SOLIDUS and VERTICAL LINE in a UK Mac layout, NUMBER SIGN and TILDE in a UK Windows layout, DOLLAR SIGN and POUND SIGN in a Swiss German layout, NUMBER SIGN and APOSTROPHE in a German layout, GRAVE ACCENT and POUND SIGN in a French Mac layout, and ASTERISK and MICRO SIGN in a French Windows layout. */ - SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code instead of 49 for the same key, but all OSes I've seen treat the two codes identically. So, as an implementor, unless your keyboard generates both of those codes and your OS treats them differently, you should generate SDL_SCANCODE_BACKSLASH instead of this code. As a user, you should not rely on this code because SDL will never generate it with most (all?) keyboards. */ + SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return + * key on ISO keyboards and at the right end + * of the QWERTY row on ANSI keyboards. + * Produces REVERSE SOLIDUS (backslash) and + * VERTICAL LINE in a US layout, REVERSE + * SOLIDUS and VERTICAL LINE in a UK Mac + * layout, NUMBER SIGN and TILDE in a UK + * Windows layout, DOLLAR SIGN and POUND SIGN + * in a Swiss German layout, NUMBER SIGN and + * APOSTROPHE in a German layout, GRAVE + * ACCENT and POUND SIGN in a French Mac + * layout, and ASTERISK and MICRO SIGN in a + * French Windows layout. + */ + SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code + * instead of 49 for the same key, but all + * OSes I've seen treat the two codes + * identically. So, as an implementor, unless + * your keyboard generates both of those + * codes and your OS treats them differently, + * you should generate SDL_SCANCODE_BACKSLASH + * instead of this code. As a user, you + * should not rely on this code because SDL + * will never generate it with most (all?) + * keyboards. + */ SDL_SCANCODE_SEMICOLON = 51, SDL_SCANCODE_APOSTROPHE = 52, - SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI and ISO keyboards). Produces GRAVE ACCENT and TILDE in a US Windows layout and in US and UK Mac layouts on ANSI keyboards, GRAVE ACCENT and NOT SIGN in a UK Windows layout, SECTION SIGN and PLUS-MINUS SIGN in US and UK Mac layouts on ISO keyboards, SECTION SIGN and DEGREE SIGN in a Swiss German layout (Mac: only on ISO keyboards), CIRCUMFLEX ACCENT and DEGREE SIGN in a German layout (Mac: only on ISO keyboards), SUPERSCRIPT TWO and TILDE in a French Windows layout, COMMERCIAL AT and NUMBER SIGN in a French Mac layout on ISO keyboards, and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German, German, or French Mac layout on ANSI keyboards. */ + SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI + * and ISO keyboards). Produces GRAVE ACCENT and + * TILDE in a US Windows layout and in US and UK + * Mac layouts on ANSI keyboards, GRAVE ACCENT + * and NOT SIGN in a UK Windows layout, SECTION + * SIGN and PLUS-MINUS SIGN in US and UK Mac + * layouts on ISO keyboards, SECTION SIGN and + * DEGREE SIGN in a Swiss German layout (Mac: + * only on ISO keyboards), CIRCUMFLEX ACCENT and + * DEGREE SIGN in a German layout (Mac: only on + * ISO keyboards), SUPERSCRIPT TWO and TILDE in a + * French Windows layout, COMMERCIAL AT and + * NUMBER SIGN in a French Mac layout on ISO + * keyboards, and LESS-THAN SIGN and GREATER-THAN + * SIGN in a Swiss German, German, or French Mac + * layout on ANSI keyboards. + */ SDL_SCANCODE_COMMA = 54, SDL_SCANCODE_PERIOD = 55, SDL_SCANCODE_SLASH = 56, @@ -122,7 +166,8 @@ typedef enum SDL_SCANCODE_PRINTSCREEN = 70, SDL_SCANCODE_SCROLLLOCK = 71, SDL_SCANCODE_PAUSE = 72, - SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but does send code 73, not 117) */ + SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but + does send code 73, not 117) */ SDL_SCANCODE_HOME = 74, SDL_SCANCODE_PAGEUP = 75, SDL_SCANCODE_DELETE = 76, @@ -133,7 +178,8 @@ typedef enum SDL_SCANCODE_DOWN = 81, SDL_SCANCODE_UP = 82, - SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards */ + SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards + */ SDL_SCANCODE_KP_DIVIDE = 84, SDL_SCANCODE_KP_MULTIPLY = 85, SDL_SCANCODE_KP_MINUS = 86, @@ -151,9 +197,20 @@ typedef enum SDL_SCANCODE_KP_0 = 98, SDL_SCANCODE_KP_PERIOD = 99, - SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO keyboards have over ANSI ones, located between left shift and Y. Produces GRAVE ACCENT and TILDE in a US or UK Mac layout, REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US or UK Windows layout, and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German, German, or French layout. */ + SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO + * keyboards have over ANSI ones, + * located between left shift and Y. + * Produces GRAVE ACCENT and TILDE in a + * US or UK Mac layout, REVERSE SOLIDUS + * (backslash) and VERTICAL LINE in a + * US or UK Windows layout, and + * LESS-THAN SIGN and GREATER-THAN SIGN + * in a Swiss German, German, or French + * layout. */ SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ - SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, not a physical key - but some Mac keyboards do have a power key. */ + SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, + * not a physical key - but some Mac keyboards + * do have a power key. */ SDL_SCANCODE_KP_EQUALS = 103, SDL_SCANCODE_F13 = 104, SDL_SCANCODE_F14 = 105, @@ -172,7 +229,7 @@ typedef enum SDL_SCANCODE_MENU = 118, SDL_SCANCODE_SELECT = 119, SDL_SCANCODE_STOP = 120, - SDL_SCANCODE_AGAIN = 121, /*!< redo */ + SDL_SCANCODE_AGAIN = 121, /**< redo */ SDL_SCANCODE_UNDO = 122, SDL_SCANCODE_CUT = 123, SDL_SCANCODE_COPY = 124, @@ -188,7 +245,8 @@ typedef enum SDL_SCANCODE_KP_COMMA = 133, SDL_SCANCODE_KP_EQUALSAS400 = 134, - SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see footnotes in USB doc */ + SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see + footnotes in USB doc */ SDL_SCANCODE_INTERNATIONAL2 = 136, SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ SDL_SCANCODE_INTERNATIONAL4 = 138, @@ -276,9 +334,19 @@ typedef enum SDL_SCANCODE_RALT = 230, /**< alt gr, option */ SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ - SDL_SCANCODE_MODE = 257, /* I'm not sure if this is really not covered by any of the above, but since there's a special KMOD_MODE for it I'm adding it here */ + SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered + * by any of the above, but since there's a + * special KMOD_MODE for it I'm adding it here + */ - /* These values are mapped from usage page 0x0C (USB consumer page) */ + /* @} *//* Usage page 0x07 */ + + /** + * \name Usage page 0x0C + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ SDL_SCANCODE_AUDIONEXT = 258, SDL_SCANCODE_AUDIOPREV = 259, @@ -298,21 +366,35 @@ typedef enum SDL_SCANCODE_AC_REFRESH = 273, SDL_SCANCODE_AC_BOOKMARKS = 274, - /* These are values that Christian Walther added (for mac keyboard?) */ + /* @} *//* Usage page 0x0C */ + + /** + * \name Walther keys + * + * These are values that Christian Walther added (for mac keyboard?). + */ + /* @{ */ SDL_SCANCODE_BRIGHTNESSDOWN = 275, SDL_SCANCODE_BRIGHTNESSUP = 276, - SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display switch, video mode switch */ + SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display + switch, video mode switch */ SDL_SCANCODE_KBDILLUMTOGGLE = 278, SDL_SCANCODE_KBDILLUMDOWN = 279, SDL_SCANCODE_KBDILLUMUP = 280, SDL_SCANCODE_EJECT = 281, SDL_SCANCODE_SLEEP = 282, - /* Add any other keys here */ + SDL_SCANCODE_APP1 = 283, + SDL_SCANCODE_APP2 = 284, - SDL_NUM_SCANCODES = 512 /**< (not a key, just marks the number of scancodes for array bounds) */ -} SDL_scancode; + /* @} *//* Walther keys */ + + /* Add any other keys here. */ + + SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes + for array bounds */ +} SDL_Scancode; #endif /* _SDL_scancode_h */ diff --git a/Externals/SDL2-2.0.1/include/SDL_shape.h b/Externals/SDL2-2.0.1/include/SDL_shape.h new file mode 100644 index 0000000000..63f850c942 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_shape.h @@ -0,0 +1,143 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_shape_h +#define _SDL_shape_h + +#include "SDL_stdinc.h" +#include "SDL_pixels.h" +#include "SDL_rect.h" +#include "SDL_surface.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** \file SDL_shape.h + * + * Header file for the shaped window API. + */ + +#define SDL_NONSHAPEABLE_WINDOW -1 +#define SDL_INVALID_SHAPE_ARGUMENT -2 +#define SDL_WINDOW_LACKS_SHAPE -3 + +/** + * \brief Create a window that can be shaped with the specified position, dimensions, and flags. + * + * \param title The title of the window, in UTF-8 encoding. + * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param w The width of the window. + * \param h The height of the window. + * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with any of the following: + * ::SDL_WINDOW_OPENGL, ::SDL_WINDOW_INPUT_GRABBED, + * ::SDL_WINDOW_HIDDEN, ::SDL_WINDOW_RESIZABLE, + * ::SDL_WINDOW_MAXIMIZED, ::SDL_WINDOW_MINIMIZED, + * ::SDL_WINDOW_BORDERLESS is always set, and ::SDL_WINDOW_FULLSCREEN is always unset. + * + * \return The window created, or NULL if window creation failed. + * + * \sa SDL_DestroyWindow() + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); + +/** + * \brief Return whether the given window is a shaped window. + * + * \param window The window to query for being shaped. + * + * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if the window is unshaped or NULL. + * \sa SDL_CreateShapedWindow + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); + +/** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ +typedef enum { + /** \brief The default mode, a binarized alpha cutoff of 1. */ + ShapeModeDefault, + /** \brief A binarized alpha cutoff with a given integer value. */ + ShapeModeBinarizeAlpha, + /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ + ShapeModeReverseBinarizeAlpha, + /** \brief A color key is applied. */ + ShapeModeColorKey +} WindowShapeMode; + +#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) + +/** \brief A union containing parameters for shaped windows. */ +typedef union { + /** \brief a cutoff alpha value for binarization of the window shape's alpha channel. */ + Uint8 binarizationCutoff; + SDL_Color colorKey; +} SDL_WindowShapeParams; + +/** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ +typedef struct SDL_WindowShapeMode { + /** \brief The mode of these window-shape parameters. */ + WindowShapeMode mode; + /** \brief Window-shape parameters. */ + SDL_WindowShapeParams parameters; +} SDL_WindowShapeMode; + +/** + * \brief Set the shape and parameters of a shaped window. + * + * \param window The shaped window whose parameters should be set. + * \param shape A surface encoding the desired shape for the window. + * \param shape_mode The parameters to set for the shaped window. + * + * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on invalid an invalid shape argument, or SDL_NONSHAPEABLE_WINDOW + * if the SDL_Window* given does not reference a valid shaped window. + * + * \sa SDL_WindowShapeMode + * \sa SDL_GetShapedWindowMode. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); + +/** + * \brief Get the shape parameters of a shaped window. + * + * \param window The shaped window whose parameters should be retrieved. + * \param shape_mode An empty shape-mode structure to fill, or NULL to check whether the window has a shape. + * + * \return 0 if the window has a shape and, provided shape_mode was not NULL, shape_mode has been filled with the mode + * data, SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped window, or SDL_WINDOW_LACKS_SHAPE if + * the SDL_Window* given is a shapeable window currently lacking a shape. + * + * \sa SDL_WindowShapeMode + * \sa SDL_SetWindowShape + */ +extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_shape_h */ diff --git a/Externals/SDL2-2.0.1/include/SDL_stdinc.h b/Externals/SDL2-2.0.1/include/SDL_stdinc.h new file mode 100644 index 0000000000..8f17d5519a --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_stdinc.h @@ -0,0 +1,392 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_stdinc.h + * + * This is a general header that includes C language support. + */ + +#ifndef _SDL_stdinc_h +#define _SDL_stdinc_h + +#include "SDL_config.h" + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#if defined(STDC_HEADERS) +# include +# include +# include +#else +# if defined(HAVE_STDLIB_H) +# include +# elif defined(HAVE_MALLOC_H) +# include +# endif +# if defined(HAVE_STDDEF_H) +# include +# endif +# if defined(HAVE_STDARG_H) +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#if defined(HAVE_INTTYPES_H) +# include +#elif defined(HAVE_STDINT_H) +# include +#endif +#ifdef HAVE_CTYPE_H +# include +#endif +#ifdef HAVE_MATH_H +# include +#endif +#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) +# include +#endif + +/** + * The number of elements in an array. + */ +#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) +#define SDL_TABLESIZE(table) SDL_arraysize(table) + +/** + * \name Cast operators + * + * Use proper C++ casts when compiled as C++ to be compatible with the option + * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). + */ +/* @{ */ +#ifdef __cplusplus +#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) +#define SDL_static_cast(type, expression) static_cast(expression) +#define SDL_const_cast(type, expression) const_cast(expression) +#else +#define SDL_reinterpret_cast(type, expression) ((type)(expression)) +#define SDL_static_cast(type, expression) ((type)(expression)) +#define SDL_const_cast(type, expression) ((type)(expression)) +#endif +/* @} *//* Cast operators */ + +/* Define a four character code as a Uint32 */ +#define SDL_FOURCC(A, B, C, D) \ + ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) + +/** + * \name Basic data types + */ +/* @{ */ + +typedef enum +{ + SDL_FALSE = 0, + SDL_TRUE = 1 +} SDL_bool; + +/** + * \brief A signed 8-bit integer type. + */ +typedef int8_t Sint8; +/** + * \brief An unsigned 8-bit integer type. + */ +typedef uint8_t Uint8; +/** + * \brief A signed 16-bit integer type. + */ +typedef int16_t Sint16; +/** + * \brief An unsigned 16-bit integer type. + */ +typedef uint16_t Uint16; +/** + * \brief A signed 32-bit integer type. + */ +typedef int32_t Sint32; +/** + * \brief An unsigned 32-bit integer type. + */ +typedef uint32_t Uint32; + +/** + * \brief A signed 64-bit integer type. + */ +typedef int64_t Sint64; +/** + * \brief An unsigned 64-bit integer type. + */ +typedef uint64_t Uint64; + +/* @} *//* Basic data types */ + + +#define SDL_COMPILE_TIME_ASSERT(name, x) \ + typedef int SDL_dummy_ ## name[(x) * 2 - 1] +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); +SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); +SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); +SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); +SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); +SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); +SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); +SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +/* Check to make sure enums are the size of ints, for structure packing. + For both Watcom C/C++ and Borland C/C++ the compiler option that makes + enums having the size of an int must be enabled. + This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). +*/ + +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +#if !defined(__ANDROID__) + /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ +typedef enum +{ + DUMMY_ENUM_VALUE +} SDL_DUMMY_ENUM; + +SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); +#endif +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(HAVE_ALLOCA) && !defined(alloca) +# if defined(HAVE_ALLOCA_H) +# include +# elif defined(__GNUC__) +# define alloca __builtin_alloca +# elif defined(_MSC_VER) +# include +# define alloca _alloca +# elif defined(__WATCOMC__) +# include +# elif defined(__BORLANDC__) +# include +# elif defined(__DMC__) +# include +# elif defined(__AIX__) +#pragma alloca +# elif defined(__MRC__) +void *alloca(unsigned); +# else +char *alloca(); +# endif +#endif +#ifdef HAVE_ALLOCA +#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) +#define SDL_stack_free(data) +#else +#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) +#define SDL_stack_free(data) SDL_free(data) +#endif + +extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); +extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); +extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); +extern DECLSPEC void SDLCALL SDL_free(void *mem); + +extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); +extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); + +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); + +extern DECLSPEC int SDLCALL SDL_abs(int x); + +/* !!! FIXME: these have side effects. You probably shouldn't use them. */ +/* !!! FIXME: Maybe we do forceinline functions of SDL_mini, SDL_minf, etc? */ +#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) +#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) + +extern DECLSPEC int SDLCALL SDL_isdigit(int x); +extern DECLSPEC int SDLCALL SDL_isspace(int x); +extern DECLSPEC int SDLCALL SDL_toupper(int x); +extern DECLSPEC int SDLCALL SDL_tolower(int x); + +extern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len); + +#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) +#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) + +/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ +SDL_FORCE_INLINE void SDL_memset4(void *dst, int val, size_t dwords) +{ +#if defined(__GNUC__) && defined(i386) + int u0, u1, u2; + __asm__ __volatile__ ( + "cld \n\t" + "rep ; stosl \n\t" + : "=&D" (u0), "=&a" (u1), "=&c" (u2) + : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) + : "memory" + ); +#else + size_t _n = (dwords + 3) / 4; + Uint32 *_p = SDL_static_cast(Uint32 *, dst); + Uint32 _val = (val); + if (dwords == 0) + return; + switch (dwords % 4) + { + case 0: do { *_p++ = _val; + case 3: *_p++ = _val; + case 2: *_p++ = _val; + case 1: *_p++ = _val; + } while ( --_n ); + } +#endif +} + + +extern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); + +SDL_FORCE_INLINE void *SDL_memcpy4(void *dst, const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + +extern DECLSPEC void *SDLCALL SDL_memmove(void *dst, const void *src, size_t len); +extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen); + +extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); +extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); +extern DECLSPEC char *SDLCALL SDL_strrev(char *str); +extern DECLSPEC char *SDLCALL SDL_strupr(char *str); +extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); +extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); + +extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); + +extern DECLSPEC int SDLCALL SDL_atoi(const char *str); +extern DECLSPEC double SDLCALL SDL_atof(const char *str); +extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); +extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); +extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); +extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); +extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); + +extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); + +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); +extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); +extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); + +#ifndef HAVE_M_PI +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 /* pi */ +#endif +#endif + +extern DECLSPEC double SDLCALL SDL_atan(double x); +extern DECLSPEC double SDLCALL SDL_atan2(double x, double y); +extern DECLSPEC double SDLCALL SDL_ceil(double x); +extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); +extern DECLSPEC double SDLCALL SDL_cos(double x); +extern DECLSPEC float SDLCALL SDL_cosf(float x); +extern DECLSPEC double SDLCALL SDL_fabs(double x); +extern DECLSPEC double SDLCALL SDL_floor(double x); +extern DECLSPEC double SDLCALL SDL_log(double x); +extern DECLSPEC double SDLCALL SDL_pow(double x, double y); +extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); +extern DECLSPEC double SDLCALL SDL_sin(double x); +extern DECLSPEC float SDLCALL SDL_sinf(float x); +extern DECLSPEC double SDLCALL SDL_sqrt(double x); + +/* The SDL implementation of iconv() returns these error codes */ +#define SDL_ICONV_ERROR (size_t)-1 +#define SDL_ICONV_E2BIG (size_t)-2 +#define SDL_ICONV_EILSEQ (size_t)-3 +#define SDL_ICONV_EINVAL (size_t)-4 + +/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ +typedef struct _SDL_iconv_t *SDL_iconv_t; +extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, + const char *fromcode); +extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); +extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, + size_t * inbytesleft, char **outbuf, + size_t * outbytesleft); +/** + * This function converts a string between encodings in one pass, returning a + * string that must be freed with SDL_free() or NULL on error. + */ +extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, + const char *fromcode, + const char *inbuf, + size_t inbytesleft); +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_stdinc_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_surface.h b/Externals/SDL2-2.0.1/include/SDL_surface.h new file mode 100644 index 0000000000..e18153a694 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_surface.h @@ -0,0 +1,503 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_surface.h + * + * Header file for ::SDL_Surface definition and management functions. + */ + +#ifndef _SDL_surface_h +#define _SDL_surface_h + +#include "SDL_stdinc.h" +#include "SDL_pixels.h" +#include "SDL_rect.h" +#include "SDL_blendmode.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Surface flags + * + * These are the currently supported flags for the ::SDL_Surface. + * + * \internal + * Used internally (read-only). + */ +/* @{ */ +#define SDL_SWSURFACE 0 /**< Just here for compatibility */ +#define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ +#define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ +#define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ +/* @} *//* Surface flags */ + +/** + * Evaluates to true if the surface needs to be locked before access. + */ +#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) + +/** + * \brief A collection of pixels used in software blitting. + * + * \note This structure should be treated as read-only, except for \c pixels, + * which, if not NULL, contains the raw pixel data for the surface. + */ +typedef struct SDL_Surface +{ + Uint32 flags; /**< Read-only */ + SDL_PixelFormat *format; /**< Read-only */ + int w, h; /**< Read-only */ + int pitch; /**< Read-only */ + void *pixels; /**< Read-write */ + + /** Application data associated with the surface */ + void *userdata; /**< Read-write */ + + /** information needed for surfaces requiring locks */ + int locked; /**< Read-only */ + void *lock_data; /**< Read-only */ + + /** clipping information */ + SDL_Rect clip_rect; /**< Read-only */ + + /** info for fast blit mapping to other surfaces */ + struct SDL_BlitMap *map; /**< Private */ + + /** Reference count -- used when freeing surface */ + int refcount; /**< Read-mostly */ +} SDL_Surface; + +/** + * \brief The type of function used for surface blitting functions. + */ +typedef int (*SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, + struct SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Allocate and free an RGB surface. + * + * If the depth is 4 or 8 bits, an empty palette is allocated for the surface. + * If the depth is greater than 8 bits, the pixel format is set using the + * flags '[RGB]mask'. + * + * If the function runs out of memory, it will return NULL. + * + * \param flags The \c flags are obsolete and should be set to 0. + * \param width The width in pixels of the surface to create. + * \param height The height in pixels of the surface to create. + * \param depth The depth in bits of the surface to create. + * \param Rmask The red mask of the surface to create. + * \param Gmask The green mask of the surface to create. + * \param Bmask The blue mask of the surface to create. + * \param Amask The alpha mask of the surface to create. + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface + (Uint32 flags, int width, int height, int depth, + Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, + int width, + int height, + int depth, + int pitch, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); +extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); + +/** + * \brief Set the palette used by a surface. + * + * \return 0, or -1 if the surface format doesn't use a palette. + * + * \note A single palette can be shared with many surfaces. + */ +extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, + SDL_Palette * palette); + +/** + * \brief Sets up a surface for directly accessing the pixels. + * + * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write + * to and read from \c surface->pixels, using the pixel format stored in + * \c surface->format. Once you are done accessing the surface, you should + * use SDL_UnlockSurface() to release it. + * + * Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates + * to 0, then you can read and write to the surface at any time, and the + * pixel format of the surface will not change. + * + * No operating system or library calls should be made between lock/unlock + * pairs, as critical system locks may be held during this time. + * + * SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked. + * + * \sa SDL_UnlockSurface() + */ +extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); +/** \sa SDL_LockSurface() */ +extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); + +/** + * Load a surface from a seekable SDL data stream (memory or file). + * + * If \c freesrc is non-zero, the stream will be closed after being read. + * + * The new surface should be freed with SDL_FreeSurface(). + * + * \return the new surface, or NULL if there was an error. + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, + int freesrc); + +/** + * Load a surface from a file. + * + * Convenience macro. + */ +#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Save a surface to a seekable SDL data stream (memory or file). + * + * If \c freedst is non-zero, the stream will be closed after being written. + * + * \return 0 if successful or -1 if there was an error. + */ +extern DECLSPEC int SDLCALL SDL_SaveBMP_RW + (SDL_Surface * surface, SDL_RWops * dst, int freedst); + +/** + * Save a surface to a file. + * + * Convenience macro. + */ +#define SDL_SaveBMP(surface, file) \ + SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) + +/** + * \brief Sets the RLE acceleration hint for a surface. + * + * \return 0 on success, or -1 if the surface is not valid + * + * \note If RLE is enabled, colorkey and alpha blending blits are much faster, + * but the surface must be locked before directly accessing the pixels. + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, + int flag); + +/** + * \brief Sets the color key (transparent pixel) in a blittable surface. + * + * \param surface The surface to update + * \param flag Non-zero to enable colorkey and 0 to disable colorkey + * \param key The transparent pixel in the native surface format + * + * \return 0 on success, or -1 if the surface is not valid + * + * You can pass SDL_RLEACCEL to enable RLE accelerated blits. + */ +extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, + int flag, Uint32 key); + +/** + * \brief Gets the color key (transparent pixel) in a blittable surface. + * + * \param surface The surface to update + * \param key A pointer filled in with the transparent pixel in the native + * surface format + * + * \return 0 on success, or -1 if the surface is not valid or colorkey is not + * enabled. + */ +extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, + Uint32 * key); + +/** + * \brief Set an additional color value used in blit operations. + * + * \param surface The surface to update. + * \param r The red color value multiplied into blit operations. + * \param g The green color value multiplied into blit operations. + * \param b The blue color value multiplied into blit operations. + * + * \return 0 on success, or -1 if the surface is not valid. + * + * \sa SDL_GetSurfaceColorMod() + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * \brief Get the additional color value used in blit operations. + * + * \param surface The surface to query. + * \param r A pointer filled in with the current red color value. + * \param g A pointer filled in with the current green color value. + * \param b A pointer filled in with the current blue color value. + * + * \return 0 on success, or -1 if the surface is not valid. + * + * \sa SDL_SetSurfaceColorMod() + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * \brief Set an additional alpha value used in blit operations. + * + * \param surface The surface to update. + * \param alpha The alpha value multiplied into blit operations. + * + * \return 0 on success, or -1 if the surface is not valid. + * + * \sa SDL_GetSurfaceAlphaMod() + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 alpha); + +/** + * \brief Get the additional alpha value used in blit operations. + * + * \param surface The surface to query. + * \param alpha A pointer filled in with the current alpha value. + * + * \return 0 on success, or -1 if the surface is not valid. + * + * \sa SDL_SetSurfaceAlphaMod() + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 * alpha); + +/** + * \brief Set the blend mode used for blit operations. + * + * \param surface The surface to update. + * \param blendMode ::SDL_BlendMode to use for blit blending. + * + * \return 0 on success, or -1 if the parameters are not valid. + * + * \sa SDL_GetSurfaceBlendMode() + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode blendMode); + +/** + * \brief Get the blend mode used for blit operations. + * + * \param surface The surface to query. + * \param blendMode A pointer filled in with the current blend mode. + * + * \return 0 on success, or -1 if the surface is not valid. + * + * \sa SDL_SetSurfaceBlendMode() + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode *blendMode); + +/** + * Sets the clipping rectangle for the destination surface in a blit. + * + * If the clip rectangle is NULL, clipping will be disabled. + * + * If the clip rectangle doesn't intersect the surface, the function will + * return SDL_FALSE and blits will be completely clipped. Otherwise the + * function returns SDL_TRUE and blits to the surface will be clipped to + * the intersection of the surface area and the clipping rectangle. + * + * Note that blits are automatically clipped to the edges of the source + * and destination surfaces. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, + const SDL_Rect * rect); + +/** + * Gets the clipping rectangle for the destination surface in a blit. + * + * \c rect must be a pointer to a valid rectangle which will be filled + * with the correct values. + */ +extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, + SDL_Rect * rect); + +/** + * Creates a new surface of the specified format, and then copies and maps + * the given surface to it so the blit of the converted surface will be as + * fast as possible. If this function fails, it returns NULL. + * + * The \c flags parameter is passed to SDL_CreateRGBSurface() and has those + * semantics. You can also pass ::SDL_RLEACCEL in the flags parameter and + * SDL will try to RLE accelerate colorkey and alpha blits in the resulting + * surface. + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface + (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat + (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); + +/** + * \brief Copy a block of pixels of one format to another format + * + * \return 0 on success, or -1 if there was an error + */ +extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Performs a fast fill of the given rectangle with \c color. + * + * If \c rect is NULL, the whole surface will be filled with \c color. + * + * The color should be a pixel of the format used by the surface, and + * can be generated by the SDL_MapRGB() function. + * + * \return 0 on success, or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_FillRect + (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); +extern DECLSPEC int SDLCALL SDL_FillRects + (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); + +/** + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \return If the blit is successful, it returns 0, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + */ +#define SDL_BlitSurface SDL_UpperBlit + +/** + * This is the public blit function, SDL_BlitSurface(), and it performs + * rectangle validation and clipping before passing it to SDL_LowerBlit() + */ +extern DECLSPEC int SDLCALL SDL_UpperBlit + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * This is a semi-private blit function and it performs low-level surface + * blitting only. + */ +extern DECLSPEC int SDLCALL SDL_LowerBlit + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * \brief Perform a fast, low quality, stretch blit between two surfaces of the + * same pixel format. + * + * \note This function uses a static buffer, and is not thread-safe. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + +#define SDL_BlitScaled SDL_UpperBlitScaled + +/** + * This is the public scaled blit function, SDL_BlitScaled(), and it performs + * rectangle validation and clipping before passing it to SDL_LowerBlitScaled() + */ +extern DECLSPEC int SDLCALL SDL_UpperBlitScaled + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * This is a semi-private blit function and it performs low-level surface + * scaled blitting only. + */ +extern DECLSPEC int SDLCALL SDL_LowerBlitScaled + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_surface_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_system.h b/Externals/SDL2-2.0.1/include/SDL_system.h new file mode 100644 index 0000000000..9af2a4c2ce --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_system.h @@ -0,0 +1,121 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_system.h + * + * Include file for platform specific SDL API functions + */ + +#ifndef _SDL_system_h +#define _SDL_system_h + +#include "SDL_stdinc.h" +#include "SDL_keyboard.h" +#include "SDL_render.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* Platform specific functions for Windows */ +#ifdef __WIN32__ + +/* Returns the D3D9 adapter index that matches the specified display index. + This adapter index can be passed to IDirect3D9::CreateDevice and controls + on which monitor a full screen application will appear. +*/ +extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); + +/* Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer. + Once you are done using the device, you should release it to avoid a resource leak. + */ +typedef struct IDirect3DDevice9 IDirect3DDevice9; +extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); + +#endif /* __WIN32__ */ + + +/* Platform specific functions for iOS */ +#if defined(__IPHONEOS__) && __IPHONEOS__ + +extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); +extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); + +#endif /* __IPHONEOS__ */ + + +/* Platform specific functions for Android */ +#if defined(__ANDROID__) && __ANDROID__ + +/* Get the JNI environment for the current thread + This returns JNIEnv*, but the prototype is void* so we don't need jni.h + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); + +/* Get the SDL Activity object for the application + This returns jobject, but the prototype is void* so we don't need jni.h + The jobject returned by SDL_AndroidGetActivity is a local reference. + It is the caller's responsibility to properly release it + (using env->Push/PopLocalFrame or manually with env->DeleteLocalRef) + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(); + +/* See the official Android developer guide for more information: + http://developer.android.com/guide/topics/data/data-storage.html +*/ +#define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 +#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 + +/* Get the path used for internal storage for this application. + This path is unique to your application and cannot be written to + by other applications. + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(); + +/* Get the current state of external storage, a bitmask of these values: + SDL_ANDROID_EXTERNAL_STORAGE_READ + SDL_ANDROID_EXTERNAL_STORAGE_WRITE + If external storage is currently unavailable, this will return 0. +*/ +extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(); + +/* Get the path used for external storage for this application. + This path is unique to your application, but is public and can be + written to by other applications. + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(); + +#endif /* __ANDROID__ */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_system_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_syswm.h b/Externals/SDL2-2.0.1/include/SDL_syswm.h new file mode 100644 index 0000000000..5e4454f86e --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_syswm.h @@ -0,0 +1,237 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_syswm.h + * + * Include file for SDL custom system window manager hooks. + */ + +#ifndef _SDL_syswm_h +#define _SDL_syswm_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" +#include "SDL_version.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_syswm.h + * + * Your application has access to a special type of event ::SDL_SYSWMEVENT, + * which contains window-manager specific information and arrives whenever + * an unhandled window event occurs. This event is ignored by default, but + * you can enable it with SDL_EventState(). + */ +#ifdef SDL_PROTOTYPES_ONLY +struct SDL_SysWMinfo; +#else + +#if defined(SDL_VIDEO_DRIVER_WINDOWS) +#define WIN32_LEAN_AND_MEAN +#include +#endif + +/* This is the structure for custom window manager events */ +#if defined(SDL_VIDEO_DRIVER_X11) +#if defined(__APPLE__) && defined(__MACH__) +/* conflicts with Quickdraw.h */ +#define Cursor X11Cursor +#endif + +#include +#include + +#if defined(__APPLE__) && defined(__MACH__) +/* matches the re-define above */ +#undef Cursor +#endif + +#endif /* defined(SDL_VIDEO_DRIVER_X11) */ + +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_COCOA) +#ifdef __OBJC__ +#include +#else +typedef struct _NSWindow NSWindow; +#endif +#endif + +#if defined(SDL_VIDEO_DRIVER_UIKIT) +#ifdef __OBJC__ +#include +#else +typedef struct _UIWindow UIWindow; +#endif +#endif + +/** + * These are the various supported windowing subsystems + */ +typedef enum +{ + SDL_SYSWM_UNKNOWN, + SDL_SYSWM_WINDOWS, + SDL_SYSWM_X11, + SDL_SYSWM_DIRECTFB, + SDL_SYSWM_COCOA, + SDL_SYSWM_UIKIT, +} SDL_SYSWM_TYPE; + +/** + * The custom event structure. + */ +struct SDL_SysWMmsg +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct { + HWND hwnd; /**< The window for the message */ + UINT msg; /**< The type of message */ + WPARAM wParam; /**< WORD message parameter */ + LPARAM lParam; /**< LONG message parameter */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct { + XEvent event; + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct { + DFBEvent event; + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + /* No Cocoa window events yet */ + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { + /* No UIKit window events yet */ + } uikit; +#endif + /* Can't have an empty union */ + int dummy; + } msg; +}; + +/** + * The custom window manager information structure. + * + * When this structure is returned, it holds information about which + * low level system it is using, and will be one of SDL_SYSWM_TYPE. + */ +struct SDL_SysWMinfo +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct + { + HWND window; /**< The window handle */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct + { + Display *display; /**< The X11 display */ + Window window; /**< The X11 window */ + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct + { + IDirectFB *dfb; /**< The directfb main interface */ + IDirectFBWindow *window; /**< The directfb window handle */ + IDirectFBSurface *surface; /**< The directfb client surface */ + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + NSWindow *window; /* The Cocoa window */ + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { + UIWindow *window; /* The UIKit window */ + } uikit; +#endif + /* Can't have an empty union */ + int dummy; + } info; +}; + +#endif /* SDL_PROTOTYPES_ONLY */ + +typedef struct SDL_SysWMinfo SDL_SysWMinfo; + +/* Function prototypes */ +/** + * \brief This function allows access to driver-dependent window information. + * + * \param window The window about which information is being requested + * \param info This structure must be initialized with the SDL version, and is + * then filled in with information about the given window. + * + * \return SDL_TRUE if the function is implemented and the version member of + * the \c info struct is valid, SDL_FALSE otherwise. + * + * You typically use this function like this: + * \code + * SDL_SysWMinfo info; + * SDL_VERSION(&info.version); + * if ( SDL_GetWindowWMInfo(window, &info) ) { ... } + * \endcode + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, + SDL_SysWMinfo * info); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_syswm_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test.h b/Externals/SDL2-2.0.1/include/SDL_test.h new file mode 100644 index 0000000000..7e0de08948 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test.h @@ -0,0 +1,68 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +#ifndef _SDL_test_h +#define _SDL_test_h + +#include "SDL.h" +#include "SDL_test_common.h" +#include "SDL_test_font.h" +#include "SDL_test_random.h" +#include "SDL_test_fuzzer.h" +#include "SDL_test_crc32.h" +#include "SDL_test_md5.h" +#include "SDL_test_log.h" +#include "SDL_test_assert.h" +#include "SDL_test_harness.h" +#include "SDL_test_images.h" +#include "SDL_test_compare.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Global definitions */ + +/* + * Note: Maximum size of SDLTest log message is less than SDLs limit + * to ensure we can fit additional information such as the timestamp. + */ +#define SDLTEST_MAX_LOGMESSAGE_LENGTH 3584 + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_assert.h b/Externals/SDL2-2.0.1/include/SDL_test_assert.h new file mode 100644 index 0000000000..beba16f5ed --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_assert.h @@ -0,0 +1,105 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_assert.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + * + * Assert API for test code and test cases + * + */ + +#ifndef _SDL_test_assert_h +#define _SDL_test_assert_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Fails the assert. + */ +#define ASSERT_FAIL 0 + +/** + * \brief Passes the assert. + */ +#define ASSERT_PASS 1 + +/** + * \brief Assert that logs and break execution flow on failures. + * + * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). + * \param assertDescription Message to log with the assert describing it. + */ +void SDLTest_Assert(int assertCondition, const char *assertDescription, ...); + +/** + * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. + * + * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). + * \param assertDescription Message to log with the assert describing it. + * + * \returns Returns the assertCondition so it can be used to externally to break execution flow if desired. + */ +int SDLTest_AssertCheck(int assertCondition, const char *assertDescription, ...); + +/** + * \brief Explicitely pass without checking an assertion condition. Updates assertion counter. + * + * \param assertDescription Message to log with the assert describing it. + */ +void SDLTest_AssertPass(const char *assertDescription, ...); + +/** + * \brief Resets the assert summary counters to zero. + */ +void SDLTest_ResetAssertSummary(); + +/** + * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. + */ +void SDLTest_LogAssertSummary(); + + +/** + * \brief Converts the current assert summary state to a test result. + * + * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT + */ +int SDLTest_AssertSummaryToTestResult(); + +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_assert_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_common.h b/Externals/SDL2-2.0.1/include/SDL_test_common.h new file mode 100644 index 0000000000..57f31146e5 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_common.h @@ -0,0 +1,187 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_common.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* Ported from original test\common.h file. */ + +#ifndef _SDL_test_common_h +#define _SDL_test_common_h + +#include "SDL.h" + +#if defined(__PSP__) +#define DEFAULT_WINDOW_WIDTH 480 +#define DEFAULT_WINDOW_HEIGHT 272 +#else +#define DEFAULT_WINDOW_WIDTH 640 +#define DEFAULT_WINDOW_HEIGHT 480 +#endif + +#define VERBOSE_VIDEO 0x00000001 +#define VERBOSE_MODES 0x00000002 +#define VERBOSE_RENDER 0x00000004 +#define VERBOSE_EVENT 0x00000008 +#define VERBOSE_AUDIO 0x00000010 + +typedef struct +{ + /* SDL init flags */ + char **argv; + Uint32 flags; + Uint32 verbose; + + /* Video info */ + const char *videodriver; + int display; + const char *window_title; + const char *window_icon; + Uint32 window_flags; + int window_x; + int window_y; + int window_w; + int window_h; + int window_minW; + int window_minH; + int window_maxW; + int window_maxH; + int logical_w; + int logical_h; + float scale; + int depth; + int refresh_rate; + int num_windows; + SDL_Window **windows; + + /* Renderer info */ + const char *renderdriver; + Uint32 render_flags; + SDL_bool skip_renderer; + SDL_Renderer **renderers; + + /* Audio info */ + const char *audiodriver; + SDL_AudioSpec audiospec; + + /* GL settings */ + int gl_red_size; + int gl_green_size; + int gl_blue_size; + int gl_alpha_size; + int gl_buffer_size; + int gl_depth_size; + int gl_stencil_size; + int gl_double_buffer; + int gl_accum_red_size; + int gl_accum_green_size; + int gl_accum_blue_size; + int gl_accum_alpha_size; + int gl_stereo; + int gl_multisamplebuffers; + int gl_multisamplesamples; + int gl_retained_backing; + int gl_accelerated; + int gl_major_version; + int gl_minor_version; + int gl_debug; + int gl_profile_mask; +} SDLTest_CommonState; + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/** + * \brief Parse command line parameters and create common state. + * + * \param argv Array of command line parameters + * \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO) + * + * \returns Returns a newly allocated common state object. + */ +SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); + +/** + * \brief Process one common argument. + * + * \param state The common state describing the test window to create. + * \param index The index of the argument to process in argv[]. + * + * \returns The number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error. + */ +int SDLTest_CommonArg(SDLTest_CommonState * state, int index); + +/** + * \brief Returns common usage information + * + * \param state The common state describing the test window to create. + * + * \returns String with usage information + */ +const char *SDLTest_CommonUsage(SDLTest_CommonState * state); + +/** + * \brief Open test window. + * + * \param state The common state describing the test window to create. + * + * \returns True if initialization succeeded, false otherwise + */ +SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); + +/** + * \brief Common event handler for test windows. + * + * \param state The common state used to create test window. + * \param event The event to handle. + * \param done Flag indicating we are done. + * + */ +void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done); + +/** + * \brief Close test window. + * + * \param state The common state used to create test window. + * + */ +void SDLTest_CommonQuit(SDLTest_CommonState * state); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_common_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_compare.h b/Externals/SDL2-2.0.1/include/SDL_test_compare.h new file mode 100644 index 0000000000..98ca8ce81e --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_compare.h @@ -0,0 +1,69 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_compare.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Defines comparison functions (i.e. for surfaces). + +*/ + +#ifndef _SDL_test_compare_h +#define _SDL_test_compare_h + +#include "SDL.h" + +#include "SDL_test_images.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Compares a surface and with reference image data for equality + * + * \param surface Surface used in comparison + * \param referenceSurface Test Surface used in comparison + * \param allowable_error Allowable difference (squared) in blending accuracy. + * + * \returns 0 if comparison succeeded, >0 (=number of pixels where comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. + */ +int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_compare_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_crc32.h b/Externals/SDL2-2.0.1/include/SDL_test_crc32.h new file mode 100644 index 0000000000..f0a84a48c2 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_crc32.h @@ -0,0 +1,124 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_crc32.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Implements CRC32 calculations (default output is Perl String::CRC32 compatible). + +*/ + +#ifndef _SDL_test_crc32_h +#define _SDL_test_crc32_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* ------------ Definitions --------- */ + +/* Definition shared by all CRC routines */ + +#ifndef CrcUint32 + #define CrcUint32 unsigned int +#endif +#ifndef CrcUint8 + #define CrcUint8 unsigned char +#endif + +#ifdef ORIGINAL_METHOD + #define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */ +#else + #define CRC32_POLY 0xEDB88320 /* Perl String::CRC32 compatible */ +#endif + +/** + * Data structure for CRC32 (checksum) computation + */ + typedef struct { + CrcUint32 crc32_table[256]; /* CRC table */ + } SDLTest_Crc32Context; + +/* ---------- Function Prototypes ------------- */ + +/** + * /brief Initialize the CRC context + * + * Note: The function initializes the crc table required for all crc calculations. + * + * /param crcContext pointer to context variable + * + * /returns 0 for OK, -1 on error + * + */ + int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); + + +/** + * /brief calculate a crc32 from a data block + * + * /param crcContext pointer to context variable + * /param inBuf input buffer to checksum + * /param inLen length of input buffer + * /param crc32 pointer to Uint32 to store the final CRC into + * + * /returns 0 for OK, -1 on error + * + */ +int SDLTest_crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); + +/* Same routine broken down into three steps */ +int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); +int SDLTest_Crc32CalcEnd(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); +int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); + + +/** + * /brief clean up CRC context + * + * /param crcContext pointer to context variable + * + * /returns 0 for OK, -1 on error + * +*/ + +int SDLTest_Crc32Done(SDLTest_Crc32Context * crcContext); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_crc32_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_font.h b/Externals/SDL2-2.0.1/include/SDL_test_font.h new file mode 100644 index 0000000000..aa9286b4aa --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_font.h @@ -0,0 +1,62 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_font.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +#ifndef _SDL_test_font_h +#define _SDL_test_font_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/** + * \brief Draw a string in the currently set font. + * + * \param renderer The renderer to draw on. + * \param x The X coordinate of the upper left corner of the string. + * \param y The Y coordinate of the upper left corner of the string. + * \param s The string to draw. + * + * \returns Returns 0 on success, -1 on failure. + */ +int SDLTest_DrawString(SDL_Renderer * renderer, int x, int y, const char *s); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_font_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_fuzzer.h b/Externals/SDL2-2.0.1/include/SDL_test_fuzzer.h new file mode 100644 index 0000000000..a528ddc5e2 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_fuzzer.h @@ -0,0 +1,384 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_fuzzer.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Data generators for fuzzing test data in a reproducible way. + +*/ + +#ifndef _SDL_test_fuzzer_h +#define _SDL_test_fuzzer_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* + Based on GSOC code by Markus Kauppila +*/ + + +/** + * \file + * Note: The fuzzer implementation uses a static instance of random context + * internally which makes it thread-UNsafe. + */ + +/** + * Initializes the fuzzer for a test + * + * /param execKey Execution "Key" that initializes the random number generator uniquely for the test. + * + */ +void SDLTest_FuzzerInit(Uint64 execKey); + + +/** + * Returns a random Uint8 + * + * \returns Generated integer + */ +Uint8 SDLTest_RandomUint8(); + +/** + * Returns a random Sint8 + * + * \returns Generated signed integer + */ +Sint8 SDLTest_RandomSint8(); + + +/** + * Returns a random Uint16 + * + * \returns Generated integer + */ +Uint16 SDLTest_RandomUint16(); + +/** + * Returns a random Sint16 + * + * \returns Generated signed integer + */ +Sint16 SDLTest_RandomSint16(); + + +/** + * Returns a random integer + * + * \returns Generated integer + */ +Sint32 SDLTest_RandomSint32(); + + +/** + * Returns a random positive integer + * + * \returns Generated integer + */ +Uint32 SDLTest_RandomUint32(); + +/** + * Returns random Uint64. + * + * \returns Generated integer + */ +Uint64 SDLTest_RandomUint64(); + + +/** + * Returns random Sint64. + * + * \returns Generated signed integer + */ +Sint64 SDLTest_RandomSint64(); + +/** + * \returns random float in range [0.0 - 1.0[ + */ +float SDLTest_RandomUnitFloat(); + +/** + * \returns random double in range [0.0 - 1.0[ + */ +double SDLTest_RandomUnitDouble(); + +/** + * \returns random float. + * + */ +float SDLTest_RandomFloat(); + +/** + * \returns random double. + * + */ +double SDLTest_RandomDouble(); + +/** + * Returns a random boundary value for Uint8 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint8BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint8BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint8BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint8BoundaryValue(0, 255, SDL_FALSE) returns 0 (error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or 0 with error set + */ +Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); + +/** + * Returns a random boundary value for Uint16 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint16BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint16BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint16BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint16BoundaryValue(0, 0xFFFF, SDL_FALSE) returns 0 (error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or 0 with error set + */ +Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); + +/** + * Returns a random boundary value for Uint32 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint32BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint32BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint32BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint32BoundaryValue(0, 0xFFFFFFFF, SDL_FALSE) returns 0 (with error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or 0 with error set + */ +Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); + +/** + * Returns a random boundary value for Uint64 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint64BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint64BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint64BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint64BoundaryValue(0, 0xFFFFFFFFFFFFFFFF, SDL_FALSE) returns 0 (with error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or 0 with error set + */ +Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); + +/** + * Returns a random boundary value for Sint8 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint8BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint8BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint8BoundaryValue(SINT8_MIN, 99, SDL_FALSE) returns 100 + * RandomSint8BoundaryValue(SINT8_MIN, SINT8_MAX, SDL_FALSE) returns SINT8_MIN (== error value) with error set + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or SINT8_MIN with error set + */ +Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); + + +/** + * Returns a random boundary value for Sint16 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint16BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint16BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint16BoundaryValue(SINT16_MIN, 99, SDL_FALSE) returns 100 + * RandomSint16BoundaryValue(SINT16_MIN, SINT16_MAX, SDL_FALSE) returns SINT16_MIN (== error value) with error set + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or SINT16_MIN with error set + */ +Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); + +/** + * Returns a random boundary value for Sint32 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint32BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint32BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint32BoundaryValue(SINT32_MIN, 99, SDL_FALSE) returns 100 + * RandomSint32BoundaryValue(SINT32_MIN, SINT32_MAX, SDL_FALSE) returns SINT32_MIN (== error value) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or SINT32_MIN with error set + */ +Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); + +/** + * Returns a random boundary value for Sint64 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint64BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint64BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint64BoundaryValue(SINT64_MIN, 99, SDL_FALSE) returns 100 + * RandomSint64BoundaryValue(SINT64_MIN, SINT64_MAX, SDL_FALSE) returns SINT64_MIN (== error value) and error set + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns Random boundary value for the given range and domain or SINT64_MIN with error set + */ +Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); + + +/** + * Returns integer in range [min, max] (inclusive). + * Min and max values can be negative values. + * If Max in smaller tham min, then the values are swapped. + * Min and max are the same value, that value will be returned. + * + * \param min Minimum inclusive value of returned random number + * \param max Maximum inclusive value of returned random number + * + * \returns Generated random integer in range + */ +Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); + + +/** + * Generates random null-terminated string. The minimum length for + * the string is 1 character, maximum length for the string is 255 + * characters and it can contain ASCII characters from 32 to 126. + * + * Note: Returned string needs to be deallocated. + * + * \returns Newly allocated random string; or NULL if length was invalid or string could not be allocated. + */ +char * SDLTest_RandomAsciiString(); + + +/** + * Generates random null-terminated string. The maximum length for + * the string is defined by the maxLength parameter. + * String can contain ASCII characters from 32 to 126. + * + * Note: Returned string needs to be deallocated. + * + * \param maxLength The maximum length of the generated string. + * + * \returns Newly allocated random string; or NULL if maxLength was invalid or string could not be allocated. + */ +char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); + + +/** + * Generates random null-terminated string. The length for + * the string is defined by the size parameter. + * String can contain ASCII characters from 32 to 126. + * + * Note: Returned string needs to be deallocated. + * + * \param size The length of the generated string + * + * \returns Newly allocated random string; or NULL if size was invalid or string could not be allocated. + */ +char * SDLTest_RandomAsciiStringOfSize(int size); + +/** + * Returns the invocation count for the fuzzer since last ...FuzzerInit. + */ +int SDLTest_GetFuzzerInvocationCount(); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_fuzzer_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_harness.h b/Externals/SDL2-2.0.1/include/SDL_test_harness.h new file mode 100644 index 0000000000..935038e904 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_harness.h @@ -0,0 +1,123 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_harness.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + Defines types for test case definitions and the test execution harness API. + + Based on original GSOC code by Markus Kauppila +*/ + +#ifndef _SDL_test_harness_h +#define _SDL_test_harness_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* ! Definitions for test case structures */ +#define TEST_ENABLED 1 +#define TEST_DISABLED 0 + +/* ! Definition of all the possible test return values of the test case method */ +#define TEST_ABORTED -1 +#define TEST_STARTED 0 +#define TEST_COMPLETED 1 +#define TEST_SKIPPED 2 + +/* ! Definition of all the possible test results for the harness */ +#define TEST_RESULT_PASSED 0 +#define TEST_RESULT_FAILED 1 +#define TEST_RESULT_NO_ASSERT 2 +#define TEST_RESULT_SKIPPED 3 +#define TEST_RESULT_SETUP_FAILURE 4 + +/* !< Function pointer to a test case setup function (run before every test) */ +typedef void (*SDLTest_TestCaseSetUpFp)(void *arg); + +/* !< Function pointer to a test case function */ +typedef int (*SDLTest_TestCaseFp)(void *arg); + +/* !< Function pointer to a test case teardown function (run after every test) */ +typedef void (*SDLTest_TestCaseTearDownFp)(void *arg); + +/** + * Holds information about a single test case. + */ +typedef struct SDLTest_TestCaseReference { + /* !< Func2Stress */ + SDLTest_TestCaseFp testCase; + /* !< Short name (or function name) "Func2Stress" */ + char *name; + /* !< Long name or full description "This test pushes func2() to the limit." */ + char *description; + /* !< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */ + int enabled; +} SDLTest_TestCaseReference; + +/** + * Holds information about a test suite (multiple test cases). + */ +typedef struct SDLTest_TestSuiteReference { + /* !< "PlatformSuite" */ + char *name; + /* !< The function that is run before each test. NULL skips. */ + SDLTest_TestCaseSetUpFp testSetUp; + /* !< The test cases that are run as part of the suite. Last item should be NULL. */ + const SDLTest_TestCaseReference **testCases; + /* !< The function that is run after each test. NULL skips. */ + SDLTest_TestCaseTearDownFp testTearDown; +} SDLTest_TestSuiteReference; + + +/** + * \brief Execute a test suite using the given run seed and execution key. + * + * \param testSuites Suites containing the test case. + * \param userRunSeed Custom run seed provided by user, or NULL to autogenerate one. + * \param userExecKey Custom execution key provided by user, or 0 to autogenerate one. + * \param filter Filter specification. NULL disables. Case sensitive. + * \param testIterations Number of iterations to run each test case. + * + * \returns Test run result; 0 when all tests passed, 1 if any tests failed. + */ +int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *userRunSeed, Uint64 userExecKey, const char *filter, int testIterations); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_harness_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_images.h b/Externals/SDL2-2.0.1/include/SDL_test_images.h new file mode 100644 index 0000000000..21cf39ff7f --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_images.h @@ -0,0 +1,78 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_images.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Defines some images for tests. + +*/ + +#ifndef _SDL_test_images_h +#define _SDL_test_images_h + +#include "SDL.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + *Type for test images. + */ +typedef struct SDLTest_SurfaceImage_s { + int width; + int height; + unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ + const char *pixel_data; +} SDLTest_SurfaceImage_t; + +/* Test images */ +SDL_Surface *SDLTest_ImageBlit(); +SDL_Surface *SDLTest_ImageBlitColor(); +SDL_Surface *SDLTest_ImageBlitAlpha(); +SDL_Surface *SDLTest_ImageBlitBlendAdd(); +SDL_Surface *SDLTest_ImageBlitBlend(); +SDL_Surface *SDLTest_ImageBlitBlendMod(); +SDL_Surface *SDLTest_ImageBlitBlendNone(); +SDL_Surface *SDLTest_ImageBlitBlendAll(); +SDL_Surface *SDLTest_ImageFace(); +SDL_Surface *SDLTest_ImagePrimitives(); +SDL_Surface *SDLTest_ImagePrimitivesBlend(); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_images_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_log.h b/Externals/SDL2-2.0.1/include/SDL_test_log.h new file mode 100644 index 0000000000..a581d2e754 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_log.h @@ -0,0 +1,67 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_log.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + * + * Wrapper to log in the TEST category + * + */ + +#ifndef _SDL_test_log_h +#define _SDL_test_log_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Prints given message with a timestamp in the TEST category and INFO priority. + * + * \param fmt Message to be logged + */ +void SDLTest_Log(const char *fmt, ...); + +/** + * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. + * + * \param fmt Message to be logged + */ +void SDLTest_LogError(const char *fmt, ...); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_log_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_md5.h b/Externals/SDL2-2.0.1/include/SDL_test_md5.h new file mode 100644 index 0000000000..b0d4b7b041 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_md5.h @@ -0,0 +1,129 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_md5.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + *********************************************************************** + ** Header file for implementation of MD5 ** + ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** + ** Revised (for MD5): RLR 4/27/91 ** + ** -- G modified to have y&~z instead of y&z ** + ** -- FF, GG, HH modified to add in last register done ** + ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** + ** -- distinct additive constant for each step ** + ** -- round 4 added, working mod 7 ** + *********************************************************************** +*/ + +/* + *********************************************************************** + ** Message-digest routines: ** + ** To form the message digest for a message M ** + ** (1) Initialize a context buffer mdContext using MD5Init ** + ** (2) Call MD5Update on mdContext and M ** + ** (3) Call MD5Final on mdContext ** + ** The message digest is now in mdContext->digest[0...15] ** + *********************************************************************** +*/ + +#ifndef _SDL_test_md5_h +#define _SDL_test_md5_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------ Definitions --------- */ + +/* typedef a 32-bit type */ + typedef unsigned long int MD5UINT4; + +/* Data structure for MD5 (Message-Digest) computation */ + typedef struct { + MD5UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ + MD5UINT4 buf[4]; /* scratch buffer */ + unsigned char in[64]; /* input buffer */ + unsigned char digest[16]; /* actual digest after Md5Final call */ + } SDLTest_Md5Context; + +/* ---------- Function Prototypes ------------- */ + +/** + * /brief initialize the context + * + * /param mdContext pointer to context variable + * + * Note: The function initializes the message-digest context + * mdContext. Call before each new use of the context - + * all fields are set to zero. + */ + void SDLTest_Md5Init(SDLTest_Md5Context * mdContext); + + +/** + * /brief update digest from variable length data + * + * /param mdContext pointer to context variable + * /param inBuf pointer to data array/string + * /param inLen length of data array/string + * + * Note: The function updates the message-digest context to account + * for the presence of each of the characters inBuf[0..inLen-1] + * in the message whose digest is being computed. +*/ + + void SDLTest_Md5Update(SDLTest_Md5Context * mdContext, unsigned char *inBuf, + unsigned int inLen); + + +/* + * /brief complete digest computation + * + * /param mdContext pointer to context variable + * + * Note: The function terminates the message-digest computation and + * ends with the desired message digest in mdContext.digest[0..15]. + * Always call before using the digest[] variable. +*/ + + void SDLTest_Md5Final(SDLTest_Md5Context * mdContext); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_md5_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_test_random.h b/Externals/SDL2-2.0.1/include/SDL_test_random.h new file mode 100644 index 0000000000..ce6192c257 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_test_random.h @@ -0,0 +1,115 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_test_random.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + A "32-bit Multiply with carry random number generator. Very fast. + Includes a list of recommended multipliers. + + multiply-with-carry generator: x(n) = a*x(n-1) + carry mod 2^32. + period: (a*2^31)-1 + +*/ + +#ifndef _SDL_test_random_h +#define _SDL_test_random_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* --- Definitions */ + +/* + * Macros that return a random number in a specific format. + */ +#define SDLTest_RandomInt(c) ((int)SDLTest_Random(c)) + +/* + * Context structure for the random number generator state. + */ + typedef struct { + unsigned int a; + unsigned int x; + unsigned int c; + unsigned int ah; + unsigned int al; + } SDLTest_RandomContext; + + +/* --- Function prototypes */ + +/** + * \brief Initialize random number generator with two integers. + * + * Note: The random sequence of numbers returned by ...Random() is the + * same for the same two integers and has a period of 2^31. + * + * \param rndContext pointer to context structure + * \param xi integer that defines the random sequence + * \param ci integer that defines the random sequence + * + */ + void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi, + unsigned int ci); + +/** + * \brief Initialize random number generator based on current system time. + * + * \param rndContext pointer to context structure + * + */ + void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext); + + +/** + * \brief Initialize random number generator based on current system time. + * + * Note: ...RandomInit() or ...RandomInitTime() must have been called + * before using this function. + * + * \param rndContext pointer to context structure + * + * \returns A random number (32bit unsigned integer) + * + */ + unsigned int SDLTest_Random(SDLTest_RandomContext *rndContext); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_test_random_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_thread.h b/Externals/SDL2-2.0.1/include/SDL_thread.h new file mode 100644 index 0000000000..f248c3d69c --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_thread.h @@ -0,0 +1,242 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_thread_h +#define _SDL_thread_h + +/** + * \file SDL_thread.h + * + * Header for the SDL thread management routines. + */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +/* Thread synchronization primitives */ +#include "SDL_atomic.h" +#include "SDL_mutex.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The SDL thread structure, defined in SDL_thread.c */ +struct SDL_Thread; +typedef struct SDL_Thread SDL_Thread; + +/* The SDL thread ID */ +typedef unsigned long SDL_threadID; + +/* Thread local storage ID, 0 is the invalid ID */ +typedef unsigned int SDL_TLSID; + +/** + * The SDL thread priority. + * + * \note On many systems you require special privileges to set high priority. + */ +typedef enum { + SDL_THREAD_PRIORITY_LOW, + SDL_THREAD_PRIORITY_NORMAL, + SDL_THREAD_PRIORITY_HIGH +} SDL_ThreadPriority; + +/** + * The function passed to SDL_CreateThread(). + * It is passed a void* user context parameter and returns an int. + */ +typedef int (SDLCALL * SDL_ThreadFunction) (void *data); + +#if defined(__WIN32__) && !defined(HAVE_LIBC) +/** + * \file SDL_thread.h + * + * We compile SDL into a DLL. This means, that it's the DLL which + * creates a new thread for the calling process with the SDL_CreateThread() + * API. There is a problem with this, that only the RTL of the SDL.DLL will + * be initialized for those threads, and not the RTL of the calling + * application! + * + * To solve this, we make a little hack here. + * + * We'll always use the caller's _beginthread() and _endthread() APIs to + * start a new thread. This way, if it's the SDL.DLL which uses this API, + * then the RTL of SDL.DLL will be used to create the new thread, and if it's + * the application, then the RTL of the application will be used. + * + * So, in short: + * Always use the _beginthread() and _endthread() of the calling runtime + * library! + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD +#include /* This has _beginthread() and _endthread() defined! */ + +typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, + unsigned (__stdcall * + func) (void + *), + void *arg, unsigned, + unsigned *threadID); +typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); + +/** + * Create a thread. + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +/** + * Create a thread. + */ +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) + +#else + +/** + * Create a thread. + * + * Thread naming is a little complicated: Most systems have very small + * limits for the string length (BeOS has 32 bytes, Linux currently has 16, + * Visual C++ 6.0 has nine!), and possibly other arbitrary rules. You'll + * have to see what happens with your system's debugger. The name should be + * UTF-8 (but using the naming limits of C identifiers is a better bet). + * There are no requirements for thread naming conventions, so long as the + * string is null-terminated UTF-8, but these guidelines are helpful in + * choosing a name: + * + * http://stackoverflow.com/questions/149932/naming-conventions-for-threads + * + * If a system imposes requirements, SDL will try to munge the string for + * it (truncate, etc), but the original string contents will be available + * from SDL_GetThreadName(). + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); + +#endif + +/** + * Get the thread name, as it was specified in SDL_CreateThread(). + * This function returns a pointer to a UTF-8 string that names the + * specified thread, or NULL if it doesn't have a name. This is internal + * memory, not to be free()'d by the caller, and remains valid until the + * specified thread is cleaned up by SDL_WaitThread(). + */ +extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); + +/** + * Get the thread identifier for the current thread. + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); + +/** + * Get the thread identifier for the specified thread. + * + * Equivalent to SDL_ThreadID() if the specified thread is NULL. + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); + +/** + * Set the priority for the current thread + */ +extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); + +/** + * Wait for a thread to finish. + * + * The return code for the thread function is placed in the area + * pointed to by \c status, if \c status is not NULL. + */ +extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); + +/** + * \brief Create an identifier that is globally visible to all threads but refers to data that is thread-specific. + * + * \return The newly created thread local storage identifier, or 0 on error + * + * \code + * static SDL_SpinLock tls_lock; + * static SDL_TLSID thread_local_storage; + * + * void SetMyThreadData(void *value) + * { + * if (!thread_local_storage) { + * SDL_AtomicLock(&tls_lock); + * if (!thread_local_storage) { + * thread_local_storage = SDL_TLSCreate(); + * } + * SDL_AtomicUnLock(&tls_lock); + * } + * SDL_TLSSet(thread_local_storage, value); + * } + * + * void *GetMyThreadData(void) + * { + * return SDL_TLSGet(thread_local_storage); + * } + * \endcode + * + * \sa SDL_TLSGet() + * \sa SDL_TLSSet() + */ +extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); + +/** + * \brief Get the value associated with a thread local storage ID for the current thread. + * + * \param id The thread local storage ID + * + * \return The value associated with the ID for the current thread, or NULL if no value has been set. + * + * \sa SDL_TLSCreate() + * \sa SDL_TLSSet() + */ +extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); + +/** + * \brief Set the value associated with a thread local storage ID for the current thread. + * + * \param id The thread local storage ID + * \param value The value to associate with the ID for the current thread + * \param destructor A function called when the thread exits, to free the value. + * + * \return 0 on success, -1 on error + * + * \sa SDL_TLSCreate() + * \sa SDL_TLSGet() + */ +extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (*destructor)(void*)); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_thread_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_timer.h b/Externals/SDL2-2.0.1/include/SDL_timer.h new file mode 100644 index 0000000000..28ab415b40 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_timer.h @@ -0,0 +1,115 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_timer_h +#define _SDL_timer_h + +/** + * \file SDL_timer.h + * + * Header for the SDL time management routines. + */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Get the number of milliseconds since the SDL library initialization. + * + * \note This value wraps if the program runs for more than ~49 days. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); + +/** + * \brief Compare SDL ticks values, and return true if A has passed B + * + * e.g. if you want to wait 100 ms, you could do this: + * Uint32 timeout = SDL_GetTicks() + 100; + * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { + * ... do work until timeout has elapsed + * } + */ +#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) + +/** + * \brief Get the current value of the high resolution counter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); + +/** + * \brief Get the count per second of the high resolution counter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); + +/** + * \brief Wait a specified number of milliseconds before returning. + */ +extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); + +/** + * Function prototype for the timer callback function. + * + * The callback function is passed the current timer interval and returns + * the next timer interval. If the returned value is the same as the one + * passed in, the periodic alarm continues, otherwise a new alarm is + * scheduled. If the callback returns 0, the periodic alarm is cancelled. + */ +typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); + +/** + * Definition of the timer ID type. + */ +typedef int SDL_TimerID; + +/** + * \brief Add a new timer to the pool of timers already running. + * + * \return A timer ID, or NULL when an error occurs. + */ +extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, + SDL_TimerCallback callback, + void *param); + +/** + * \brief Remove a timer knowing its ID. + * + * \return A boolean value indicating success or failure. + * + * \warning It is not safe to remove a timer multiple times. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_timer_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_touch.h b/Externals/SDL2-2.0.1/include/SDL_touch.h new file mode 100644 index 0000000000..9e6d7c65fb --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_touch.h @@ -0,0 +1,86 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_touch.h + * + * Include file for SDL touch event handling. + */ + +#ifndef _SDL_touch_h +#define _SDL_touch_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_TouchID; +typedef Sint64 SDL_FingerID; + +typedef struct SDL_Finger +{ + SDL_FingerID id; + float x; + float y; + float pressure; +} SDL_Finger; + +/* Used as the device ID for mouse events simulated with touch input */ +#define SDL_TOUCH_MOUSEID ((Uint32)-1) + + +/* Function prototypes */ + +/** + * \brief Get the number of registered touch devices. + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); + +/** + * \brief Get the touch ID with the given index, or 0 if the index is invalid. + */ +extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); + +/** + * \brief Get the number of active fingers for a given touch device. + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); + +/** + * \brief Get the finger object of the given touch, with the given index. + */ +extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_touch_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_types.h b/Externals/SDL2-2.0.1/include/SDL_types.h new file mode 100644 index 0000000000..bb485cdb0e --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_types.h @@ -0,0 +1,29 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_types.h + * + * \deprecated + */ + +/* DEPRECATED */ +#include "SDL_stdinc.h" diff --git a/Externals/SDL2-2.0.1/include/SDL_version.h b/Externals/SDL2-2.0.1/include/SDL_version.h new file mode 100644 index 0000000000..dc52c85c0a --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_version.h @@ -0,0 +1,162 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_version.h + * + * This header defines the current SDL version. + */ + +#ifndef _SDL_version_h +#define _SDL_version_h + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Information the version of SDL in use. + * + * Represents the library's version as three levels: major revision + * (increments with massive changes, additions, and enhancements), + * minor revision (increments with backwards-compatible changes to the + * major revision), and patchlevel (increments with fixes to the minor + * revision). + * + * \sa SDL_VERSION + * \sa SDL_GetVersion + */ +typedef struct SDL_version +{ + Uint8 major; /**< major version */ + Uint8 minor; /**< minor version */ + Uint8 patch; /**< update version */ +} SDL_version; + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_MAJOR_VERSION 2 +#define SDL_MINOR_VERSION 0 +#define SDL_PATCHLEVEL 1 + +/** + * \brief Macro to determine SDL version program was compiled against. + * + * This macro fills in a SDL_version structure with the version of the + * library you compiled against. This is determined by what header the + * compiler uses. Note that if you dynamically linked the library, you might + * have a slightly newer or older version at runtime. That version can be + * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), + * is not a macro. + * + * \param x A pointer to a SDL_version struct to initialize. + * + * \sa SDL_version + * \sa SDL_GetVersion + */ +#define SDL_VERSION(x) \ +{ \ + (x)->major = SDL_MAJOR_VERSION; \ + (x)->minor = SDL_MINOR_VERSION; \ + (x)->patch = SDL_PATCHLEVEL; \ +} + +/** + * This macro turns the version numbers into a numeric value: + * \verbatim + (1,2,3) -> (1203) + \endverbatim + * + * This assumes that there will never be more than 100 patchlevels. + */ +#define SDL_VERSIONNUM(X, Y, Z) \ + ((X)*1000 + (Y)*100 + (Z)) + +/** + * This is the version number macro for the current SDL version. + */ +#define SDL_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) + +/** + * This macro will evaluate to true if compiled with SDL at least X.Y.Z. + */ +#define SDL_VERSION_ATLEAST(X, Y, Z) \ + (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) + +/** + * \brief Get the version of SDL that is linked against your program. + * + * If you are linking to SDL dynamically, then it is possible that the + * current version will be different than the version you compiled against. + * This function returns the current version, while SDL_VERSION() is a + * macro that tells you what version you compiled with. + * + * \code + * SDL_version compiled; + * SDL_version linked; + * + * SDL_VERSION(&compiled); + * SDL_GetVersion(&linked); + * printf("We compiled against SDL version %d.%d.%d ...\n", + * compiled.major, compiled.minor, compiled.patch); + * printf("But we linked against SDL version %d.%d.%d.\n", + * linked.major, linked.minor, linked.patch); + * \endcode + * + * This function may be called safely at any time, even before SDL_Init(). + * + * \sa SDL_VERSION + */ +extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); + +/** + * \brief Get the code revision of SDL that is linked against your program. + * + * Returns an arbitrary string (a hash value) uniquely identifying the + * exact revision of the SDL library in use, and is only useful in comparing + * against other revisions. It is NOT an incrementing number. + */ +extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); + +/** + * \brief Get the revision number of SDL that is linked against your program. + * + * Returns a number uniquely identifying the exact revision of the SDL + * library in use. It is an incrementing number based on commits to + * hg.libsdl.org. + */ +extern DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_version_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/SDL_video.h b/Externals/SDL2-2.0.1/include/SDL_video.h new file mode 100644 index 0000000000..4a53f9b340 --- /dev/null +++ b/Externals/SDL2-2.0.1/include/SDL_video.h @@ -0,0 +1,974 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_video.h + * + * Header file for SDL video functions. + */ + +#ifndef _SDL_video_h +#define _SDL_video_h + +#include "SDL_stdinc.h" +#include "SDL_pixels.h" +#include "SDL_rect.h" +#include "SDL_surface.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The structure that defines a display mode + * + * \sa SDL_GetNumDisplayModes() + * \sa SDL_GetDisplayMode() + * \sa SDL_GetDesktopDisplayMode() + * \sa SDL_GetCurrentDisplayMode() + * \sa SDL_GetClosestDisplayMode() + * \sa SDL_SetWindowDisplayMode() + * \sa SDL_GetWindowDisplayMode() + */ +typedef struct +{ + Uint32 format; /**< pixel format */ + int w; /**< width */ + int h; /**< height */ + int refresh_rate; /**< refresh rate (or zero for unspecified) */ + void *driverdata; /**< driver-specific data, initialize to 0 */ +} SDL_DisplayMode; + +/** + * \brief The type used to identify a window + * + * \sa SDL_CreateWindow() + * \sa SDL_CreateWindowFrom() + * \sa SDL_DestroyWindow() + * \sa SDL_GetWindowData() + * \sa SDL_GetWindowFlags() + * \sa SDL_GetWindowGrab() + * \sa SDL_GetWindowPosition() + * \sa SDL_GetWindowSize() + * \sa SDL_GetWindowTitle() + * \sa SDL_HideWindow() + * \sa SDL_MaximizeWindow() + * \sa SDL_MinimizeWindow() + * \sa SDL_RaiseWindow() + * \sa SDL_RestoreWindow() + * \sa SDL_SetWindowData() + * \sa SDL_SetWindowFullscreen() + * \sa SDL_SetWindowGrab() + * \sa SDL_SetWindowIcon() + * \sa SDL_SetWindowPosition() + * \sa SDL_SetWindowSize() + * \sa SDL_SetWindowBordered() + * \sa SDL_SetWindowTitle() + * \sa SDL_ShowWindow() + */ +typedef struct SDL_Window SDL_Window; + +/** + * \brief The flags on a window + * + * \sa SDL_GetWindowFlags() + */ +typedef enum +{ + SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ + SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ + SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ + SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ + SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ + SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ + SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ + SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ + SDL_WINDOW_INPUT_GRABBED = 0x00000100, /**< window has grabbed input focus */ + SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ + SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ + SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), + SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000 /**< window should be created in high-DPI mode if supported */ +} SDL_WindowFlags; + +/** + * \brief Used to indicate that you don't care what the window position is. + */ +#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000 +#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) +#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) +#define SDL_WINDOWPOS_ISUNDEFINED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) + +/** + * \brief Used to indicate that the window position should be centered. + */ +#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000 +#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) +#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) +#define SDL_WINDOWPOS_ISCENTERED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) + +/** + * \brief Event subtype for window events + */ +typedef enum +{ + SDL_WINDOWEVENT_NONE, /**< Never used */ + SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ + SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ + SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be + redrawn */ + SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 + */ + SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ + SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as a result of an API call or through the system or user changing the window size. */ + SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ + SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ + SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size + and position */ + SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ + SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ + SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ + SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ + SDL_WINDOWEVENT_CLOSE /**< The window manager requests that the + window be closed */ +} SDL_WindowEventID; + +/** + * \brief An opaque handle to an OpenGL context. + */ +typedef void *SDL_GLContext; + +/** + * \brief OpenGL configuration attributes + */ +typedef enum +{ + SDL_GL_RED_SIZE, + SDL_GL_GREEN_SIZE, + SDL_GL_BLUE_SIZE, + SDL_GL_ALPHA_SIZE, + SDL_GL_BUFFER_SIZE, + SDL_GL_DOUBLEBUFFER, + SDL_GL_DEPTH_SIZE, + SDL_GL_STENCIL_SIZE, + SDL_GL_ACCUM_RED_SIZE, + SDL_GL_ACCUM_GREEN_SIZE, + SDL_GL_ACCUM_BLUE_SIZE, + SDL_GL_ACCUM_ALPHA_SIZE, + SDL_GL_STEREO, + SDL_GL_MULTISAMPLEBUFFERS, + SDL_GL_MULTISAMPLESAMPLES, + SDL_GL_ACCELERATED_VISUAL, + SDL_GL_RETAINED_BACKING, + SDL_GL_CONTEXT_MAJOR_VERSION, + SDL_GL_CONTEXT_MINOR_VERSION, + SDL_GL_CONTEXT_EGL, + SDL_GL_CONTEXT_FLAGS, + SDL_GL_CONTEXT_PROFILE_MASK, + SDL_GL_SHARE_WITH_CURRENT_CONTEXT, + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE +} SDL_GLattr; + +typedef enum +{ + SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, + SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, + SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /* GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ +} SDL_GLprofile; + +typedef enum +{ + SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, + SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, + SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, + SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 +} SDL_GLcontextFlag; + + +/* Function prototypes */ + +/** + * \brief Get the number of video drivers compiled into SDL + * + * \sa SDL_GetVideoDriver() + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); + +/** + * \brief Get the name of a built in video driver. + * + * \note The video drivers are presented in the order in which they are + * normally checked during initialization. + * + * \sa SDL_GetNumVideoDrivers() + */ +extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); + +/** + * \brief Initialize the video subsystem, optionally specifying a video driver. + * + * \param driver_name Initialize a specific driver by name, or NULL for the + * default video driver. + * + * \return 0 on success, -1 on error + * + * This function initializes the video subsystem; setting up a connection + * to the window manager, etc, and determines the available display modes + * and pixel formats, but does not initialize a window or graphics mode. + * + * \sa SDL_VideoQuit() + */ +extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); + +/** + * \brief Shuts down the video subsystem. + * + * This function closes all windows, and restores the original video mode. + * + * \sa SDL_VideoInit() + */ +extern DECLSPEC void SDLCALL SDL_VideoQuit(void); + +/** + * \brief Returns the name of the currently initialized video driver. + * + * \return The name of the current video driver or NULL if no driver + * has been initialized + * + * \sa SDL_GetNumVideoDrivers() + * \sa SDL_GetVideoDriver() + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); + +/** + * \brief Returns the number of available video displays. + * + * \sa SDL_GetDisplayBounds() + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); + +/** + * \brief Get the name of a display in UTF-8 encoding + * + * \return The name of a display, or NULL for an invalid display index. + * + * \sa SDL_GetNumVideoDisplays() + */ +extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); + +/** + * \brief Get the desktop area represented by a display, with the primary + * display located at 0,0 + * + * \return 0 on success, or -1 if the index is out of range. + * + * \sa SDL_GetNumVideoDisplays() + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); + +/** + * \brief Returns the number of available display modes. + * + * \sa SDL_GetDisplayMode() + */ +extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); + +/** + * \brief Fill in information about a specific display mode. + * + * \note The display modes are sorted in this priority: + * \li bits per pixel -> more colors to fewer colors + * \li width -> largest to smallest + * \li height -> largest to smallest + * \li refresh rate -> highest to lowest + * + * \sa SDL_GetNumDisplayModes() + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, + SDL_DisplayMode * mode); + +/** + * \brief Fill in information about the desktop display mode. + */ +extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); + +/** + * \brief Fill in information about the current display mode. + */ +extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); + + +/** + * \brief Get the closest match to the requested display mode. + * + * \param displayIndex The index of display from which mode should be queried. + * \param mode The desired display mode + * \param closest A pointer to a display mode to be filled in with the closest + * match of the available display modes. + * + * \return The passed in value \c closest, or NULL if no matching video mode + * was available. + * + * The available display modes are scanned, and \c closest is filled in with the + * closest mode matching the requested mode and returned. The mode format and + * refresh_rate default to the desktop mode if they are 0. The modes are + * scanned with size being first priority, format being second priority, and + * finally checking the refresh_rate. If all the available modes are too + * small, then NULL is returned. + * + * \sa SDL_GetNumDisplayModes() + * \sa SDL_GetDisplayMode() + */ +extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); + +/** + * \brief Get the display index associated with a window. + * + * \return the display index of the display containing the center of the + * window, or -1 on error. + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); + +/** + * \brief Set the display mode used when a fullscreen window is visible. + * + * By default the window's dimensions and the desktop format and refresh rate + * are used. + * + * \param window The window for which the display mode should be set. + * \param mode The mode to use, or NULL for the default mode. + * + * \return 0 on success, or -1 if setting the display mode failed. + * + * \sa SDL_GetWindowDisplayMode() + * \sa SDL_SetWindowFullscreen() + */ +extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, + const SDL_DisplayMode + * mode); + +/** + * \brief Fill in information about the display mode used when a fullscreen + * window is visible. + * + * \sa SDL_SetWindowDisplayMode() + * \sa SDL_SetWindowFullscreen() + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, + SDL_DisplayMode * mode); + +/** + * \brief Get the pixel format associated with the window. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); + +/** + * \brief Create a window with the specified position, dimensions, and flags. + * + * \param title The title of the window, in UTF-8 encoding. + * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param w The width of the window. + * \param h The height of the window. + * \param flags The flags for the window, a mask of any of the following: + * ::SDL_WINDOW_FULLSCREEN, ::SDL_WINDOW_OPENGL, + * ::SDL_WINDOW_HIDDEN, ::SDL_WINDOW_BORDERLESS, + * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, + * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_INPUT_GRABBED, + * ::SDL_WINDOW_ALLOW_HIGHDPI. + * + * \return The id of the window created, or zero if window creation failed. + * + * \sa SDL_DestroyWindow() + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, + int x, int y, int w, + int h, Uint32 flags); + +/** + * \brief Create an SDL window from an existing native window. + * + * \param data A pointer to driver-dependent window creation data + * + * \return The id of the window created, or zero if window creation failed. + * + * \sa SDL_DestroyWindow() + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); + +/** + * \brief Get the numeric ID of a window, for logging purposes. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); + +/** + * \brief Get a window from a stored ID, or NULL if it doesn't exist. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); + +/** + * \brief Get the window flags. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); + +/** + * \brief Set the title of a window, in UTF-8 format. + * + * \sa SDL_GetWindowTitle() + */ +extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, + const char *title); + +/** + * \brief Get the title of a window, in UTF-8 format. + * + * \sa SDL_SetWindowTitle() + */ +extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); + +/** + * \brief Set the icon for a window. + * + * \param window The window for which the icon should be set. + * \param icon The icon for the window. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, + SDL_Surface * icon); + +/** + * \brief Associate an arbitrary named pointer with a window. + * + * \param window The window to associate with the pointer. + * \param name The name of the pointer. + * \param userdata The associated pointer. + * + * \return The previous value associated with 'name' + * + * \note The name is case-sensitive. + * + * \sa SDL_GetWindowData() + */ +extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, + const char *name, + void *userdata); + +/** + * \brief Retrieve the data pointer associated with a window. + * + * \param window The window to query. + * \param name The name of the pointer. + * + * \return The value associated with 'name' + * + * \sa SDL_SetWindowData() + */ +extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, + const char *name); + +/** + * \brief Set the position of a window. + * + * \param window The window to reposition. + * \param x The x coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or + ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or + ::SDL_WINDOWPOS_UNDEFINED. + * + * \note The window coordinate origin is the upper left of the display. + * + * \sa SDL_GetWindowPosition() + */ +extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, + int x, int y); + +/** + * \brief Get the position of a window. + * + * \param window The window to query. + * \param x Pointer to variable for storing the x position, may be NULL + * \param y Pointer to variable for storing the y position, may be NULL + * + * \sa SDL_SetWindowPosition() + */ +extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, + int *x, int *y); + +/** + * \brief Set the size of a window's client area. + * + * \param window The window to resize. + * \param w The width of the window, must be >0 + * \param h The height of the window, must be >0 + * + * \note You can't change the size of a fullscreen window, it automatically + * matches the size of the display mode. + * + * \sa SDL_GetWindowSize() + */ +extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, + int h); + +/** + * \brief Get the size of a window's client area. + * + * \param window The window to query. + * \param w Pointer to variable for storing the width, may be NULL + * \param h Pointer to variable for storing the height, may be NULL + * + * \sa SDL_SetWindowSize() + */ +extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, + int *h); + +/** + * \brief Set the minimum size of a window's client area. + * + * \param window The window to set a new minimum size. + * \param min_w The minimum width of the window, must be >0 + * \param min_h The minimum height of the window, must be >0 + * + * \note You can't change the minimum size of a fullscreen window, it + * automatically matches the size of the display mode. + * + * \sa SDL_GetWindowMinimumSize() + * \sa SDL_SetWindowMaximumSize() + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, + int min_w, int min_h); + +/** + * \brief Get the minimum size of a window's client area. + * + * \param window The window to query. + * \param w Pointer to variable for storing the minimum width, may be NULL + * \param h Pointer to variable for storing the minimum height, may be NULL + * + * \sa SDL_GetWindowMaximumSize() + * \sa SDL_SetWindowMinimumSize() + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, + int *w, int *h); + +/** + * \brief Set the maximum size of a window's client area. + * + * \param window The window to set a new maximum size. + * \param max_w The maximum width of the window, must be >0 + * \param max_h The maximum height of the window, must be >0 + * + * \note You can't change the maximum size of a fullscreen window, it + * automatically matches the size of the display mode. + * + * \sa SDL_GetWindowMaximumSize() + * \sa SDL_SetWindowMinimumSize() + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, + int max_w, int max_h); + +/** + * \brief Get the maximum size of a window's client area. + * + * \param window The window to query. + * \param w Pointer to variable for storing the maximum width, may be NULL + * \param h Pointer to variable for storing the maximum height, may be NULL + * + * \sa SDL_GetWindowMinimumSize() + * \sa SDL_SetWindowMaximumSize() + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, + int *w, int *h); + +/** + * \brief Set the border state of a window. + * + * This will add or remove the window's SDL_WINDOW_BORDERLESS flag and + * add or remove the border from the actual window. This is a no-op if the + * window's border already matches the requested state. + * + * \param window The window of which to change the border state. + * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border. + * + * \note You can't change the border state of a fullscreen window. + * + * \sa SDL_GetWindowFlags() + */ +extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, + SDL_bool bordered); + +/** + * \brief Show a window. + * + * \sa SDL_HideWindow() + */ +extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); + +/** + * \brief Hide a window. + * + * \sa SDL_ShowWindow() + */ +extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); + +/** + * \brief Raise a window above other windows and set the input focus. + */ +extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); + +/** + * \brief Make a window as large as possible. + * + * \sa SDL_RestoreWindow() + */ +extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); + +/** + * \brief Minimize a window to an iconic representation. + * + * \sa SDL_RestoreWindow() + */ +extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); + +/** + * \brief Restore the size and position of a minimized or maximized window. + * + * \sa SDL_MaximizeWindow() + * \sa SDL_MinimizeWindow() + */ +extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); + +/** + * \brief Set a window's fullscreen state. + * + * \return 0 on success, or -1 if setting the display mode failed. + * + * \sa SDL_SetWindowDisplayMode() + * \sa SDL_GetWindowDisplayMode() + */ +extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, + Uint32 flags); + +/** + * \brief Get the SDL surface associated with the window. + * + * \return The window's framebuffer surface, or NULL on error. + * + * A new surface will be created with the optimal format for the window, + * if necessary. This surface will be freed when the window is destroyed. + * + * \note You may not combine this with 3D or the rendering API on this window. + * + * \sa SDL_UpdateWindowSurface() + * \sa SDL_UpdateWindowSurfaceRects() + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); + +/** + * \brief Copy the window surface to the screen. + * + * \return 0 on success, or -1 on error. + * + * \sa SDL_GetWindowSurface() + * \sa SDL_UpdateWindowSurfaceRects() + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); + +/** + * \brief Copy a number of rectangles on the window surface to the screen. + * + * \return 0 on success, or -1 on error. + * + * \sa SDL_GetWindowSurface() + * \sa SDL_UpdateWindowSurfaceRect() + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, + const SDL_Rect * rects, + int numrects); + +/** + * \brief Set a window's input grab mode. + * + * \param window The window for which the input grab mode should be set. + * \param grabbed This is SDL_TRUE to grab input, and SDL_FALSE to release input. + * + * \sa SDL_GetWindowGrab() + */ +extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * \brief Get a window's input grab mode. + * + * \return This returns SDL_TRUE if input is grabbed, and SDL_FALSE otherwise. + * + * \sa SDL_SetWindowGrab() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); + +/** + * \brief Set the brightness (gamma correction) for a window. + * + * \return 0 on success, or -1 if setting the brightness isn't supported. + * + * \sa SDL_GetWindowBrightness() + * \sa SDL_SetWindowGammaRamp() + */ +extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); + +/** + * \brief Get the brightness (gamma correction) for a window. + * + * \return The last brightness value passed to SDL_SetWindowBrightness() + * + * \sa SDL_SetWindowBrightness() + */ +extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); + +/** + * \brief Set the gamma ramp for a window. + * + * \param window The window for which the gamma ramp should be set. + * \param red The translation table for the red channel, or NULL. + * \param green The translation table for the green channel, or NULL. + * \param blue The translation table for the blue channel, or NULL. + * + * \return 0 on success, or -1 if gamma ramps are unsupported. + * + * Set the gamma translation table for the red, green, and blue channels + * of the video hardware. Each table is an array of 256 16-bit quantities, + * representing a mapping between the input and output for that channel. + * The input is the index into the array, and the output is the 16-bit + * gamma value at that index, scaled to the output color precision. + * + * \sa SDL_GetWindowGammaRamp() + */ +extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, + const Uint16 * red, + const Uint16 * green, + const Uint16 * blue); + +/** + * \brief Get the gamma ramp for a window. + * + * \param window The window from which the gamma ramp should be queried. + * \param red A pointer to a 256 element array of 16-bit quantities to hold + * the translation table for the red channel, or NULL. + * \param green A pointer to a 256 element array of 16-bit quantities to hold + * the translation table for the green channel, or NULL. + * \param blue A pointer to a 256 element array of 16-bit quantities to hold + * the translation table for the blue channel, or NULL. + * + * \return 0 on success, or -1 if gamma ramps are unsupported. + * + * \sa SDL_SetWindowGammaRamp() + */ +extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, + Uint16 * red, + Uint16 * green, + Uint16 * blue); + +/** + * \brief Destroy a window. + */ +extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); + + +/** + * \brief Returns whether the screensaver is currently enabled (default on). + * + * \sa SDL_EnableScreenSaver() + * \sa SDL_DisableScreenSaver() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); + +/** + * \brief Allow the screen to be blanked by a screensaver + * + * \sa SDL_IsScreenSaverEnabled() + * \sa SDL_DisableScreenSaver() + */ +extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); + +/** + * \brief Prevent the screen from being blanked by a screensaver + * + * \sa SDL_IsScreenSaverEnabled() + * \sa SDL_EnableScreenSaver() + */ +extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); + + +/** + * \name OpenGL support functions + */ +/* @{ */ + +/** + * \brief Dynamically load an OpenGL library. + * + * \param path The platform dependent OpenGL library name, or NULL to open the + * default OpenGL library. + * + * \return 0 on success, or -1 if the library couldn't be loaded. + * + * This should be done after initializing the video driver, but before + * creating any OpenGL windows. If no OpenGL library is loaded, the default + * library will be loaded upon creation of the first OpenGL window. + * + * \note If you do this, you need to retrieve all of the GL functions used in + * your program from the dynamic library using SDL_GL_GetProcAddress(). + * + * \sa SDL_GL_GetProcAddress() + * \sa SDL_GL_UnloadLibrary() + */ +extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); + +/** + * \brief Get the address of an OpenGL function. + */ +extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); + +/** + * \brief Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). + * + * \sa SDL_GL_LoadLibrary() + */ +extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); + +/** + * \brief Return true if an OpenGL extension is supported for the current + * context. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char + *extension); + +/** + * \brief Set an OpenGL window attribute before window creation. + */ +extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); + +/** + * \brief Get the actual value for an attribute from the current context. + */ +extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); + +/** + * \brief Create an OpenGL context for use with an OpenGL window, and make it + * current. + * + * \sa SDL_GL_DeleteContext() + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * + window); + +/** + * \brief Set up an OpenGL context for rendering into an OpenGL window. + * + * \note The context must have been created with a compatible window. + */ +extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, + SDL_GLContext context); + +/** + * \brief Get the currently active OpenGL window. + */ +extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); + +/** + * \brief Get the currently active OpenGL context. + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); + +/** + * \brief Get the size of a window's underlying drawable (for use with glViewport). + * + * \param window Window from which the drawable size should be queried + * \param w Pointer to variable for storing the width, may be NULL + * \param h Pointer to variable for storing the height, may be NULL + * + * This may differ from SDL_GetWindowSize if we're rendering to a high-DPI + * drawable, i.e. the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a + * platform with high-DPI support (Apple calls this "Retina"), and not disabled + * by the SDL_HINT_VIDEO_HIGHDPI_DISABLED hint. + * + * \sa SDL_GetWindowSize() + * \sa SDL_CreateWindow() + */ +extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, + int *h); + +/** + * \brief Set the swap interval for the current OpenGL context. + * + * \param interval 0 for immediate updates, 1 for updates synchronized with the + * vertical retrace. If the system supports it, you may + * specify -1 to allow late swaps to happen immediately + * instead of waiting for the next retrace. + * + * \return 0 on success, or -1 if setting the swap interval is not supported. + * + * \sa SDL_GL_GetSwapInterval() + */ +extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); + +/** + * \brief Get the swap interval for the current OpenGL context. + * + * \return 0 if there is no vertical retrace synchronization, 1 if the buffer + * swap is synchronized with the vertical retrace, and -1 if late + * swaps happen immediately instead of waiting for the next retrace. + * If the system can't determine the swap interval, or there isn't a + * valid current context, this will return 0 as a safe default. + * + * \sa SDL_GL_SetSwapInterval() + */ +extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); + +/** + * \brief Swap the OpenGL buffers for a window, if double-buffering is + * supported. + */ +extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); + +/** + * \brief Delete an OpenGL context. + * + * \sa SDL_GL_CreateContext() + */ +extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); + +/* @} *//* OpenGL support functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_video_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Externals/SDL2-2.0.1/include/begin_code.h b/Externals/SDL2-2.0.1/include/begin_code.h new file mode 100644 index 0000000000..968a540a4d --- /dev/null +++ b/Externals/SDL2-2.0.1/include/begin_code.h @@ -0,0 +1,140 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file begin_code.h + * + * This file sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) + */ + +/* This shouldn't be nested -- included it around code only. */ +#ifdef _begin_code_h +#error Nested inclusion of begin_code.h +#endif +#define _begin_code_h + +#ifndef SDL_DEPRECATED +# if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ +# define SDL_DEPRECATED __attribute__((deprecated)) +# else +# define SDL_DEPRECATED +# endif +#endif + +/* Some compilers use a special export keyword */ +#ifndef DECLSPEC +# if defined(__WIN32__) +# ifdef __BORLANDC__ +# ifdef BUILD_SDL +# define DECLSPEC +# else +# define DECLSPEC __declspec(dllimport) +# endif +# else +# define DECLSPEC __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && __GNUC__ >= 4 +# define DECLSPEC __attribute__ ((visibility("default"))) +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# endif +#endif + +/* By default SDL uses the C calling convention */ +#ifndef SDLCALL +#if defined(__WIN32__) && !defined(__GNUC__) +#define SDLCALL __cdecl +#else +#define SDLCALL +#endif +#endif /* SDLCALL */ + +/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ +#ifdef __SYMBIAN32__ +#undef DECLSPEC +#define DECLSPEC +#endif /* __SYMBIAN32__ */ + +/* Force structure packing at 4 byte alignment. + This is necessary if the header is included in code which has structure + packing set to an alternate value, say for loading structures from disk. + The packing is reset to the previous value in close_code.h + */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef _MSC_VER +#pragma warning(disable: 4103) +#endif +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#ifdef _M_X64 +/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ +#pragma pack(push,8) +#else +#pragma pack(push,4) +#endif +#endif /* Compiler needs structure packing set */ + +#ifndef SDL_INLINE +#if defined(__GNUC__) +#define SDL_INLINE __inline__ +#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ + defined(__DMC__) || defined(__SC__) || \ + defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__DECC) +#define SDL_INLINE __inline +#ifndef __inline__ +#define __inline__ __inline +#endif +#else +#define SDL_INLINE inline +#ifndef __inline__ +#define __inline__ inline +#endif +#endif +#endif /* SDL_INLINE not defined */ + +#ifndef SDL_FORCE_INLINE +#if defined(_MSC_VER) +#define SDL_FORCE_INLINE __forceinline +#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#else +#define SDL_FORCE_INLINE static SDL_INLINE +#endif +#endif /* SDL_FORCE_INLINE not defined */ + +/* Apparently this is needed by several Windows compilers */ +#if !defined(__MACH__) +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif /* NULL */ +#endif /* ! Mac OS X - breaks precompiled headers */ diff --git a/Externals/SDL2-2.0.1/include/close_code.h b/Externals/SDL2-2.0.1/include/close_code.h new file mode 100644 index 0000000000..4901482d5c --- /dev/null +++ b/Externals/SDL2-2.0.1/include/close_code.h @@ -0,0 +1,37 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file close_code.h + * + * This file reverses the effects of begin_code.h and should be included + * after you finish any function and structure declarations in your headers + */ + +#undef _begin_code_h + +/* Reset structure packing at previous byte alignment */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__WATCOMC__) || defined(__BORLANDC__) +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#pragma pack(pop) +#endif /* Compiler needs structure packing set */ diff --git a/Externals/SDL2-2.0.1/lib/Win32/SDL2.dll b/Externals/SDL2-2.0.1/lib/Win32/SDL2.dll new file mode 100644 index 0000000000..c86aba1c52 Binary files /dev/null and b/Externals/SDL2-2.0.1/lib/Win32/SDL2.dll differ diff --git a/Externals/SDL2-2.0.1/lib/Win32/SDL2.lib b/Externals/SDL2-2.0.1/lib/Win32/SDL2.lib new file mode 100644 index 0000000000..cc099800b2 Binary files /dev/null and b/Externals/SDL2-2.0.1/lib/Win32/SDL2.lib differ diff --git a/Externals/SDL2-2.0.1/lib/x64/SDL2.dll b/Externals/SDL2-2.0.1/lib/x64/SDL2.dll new file mode 100644 index 0000000000..1a156df58c Binary files /dev/null and b/Externals/SDL2-2.0.1/lib/x64/SDL2.dll differ diff --git a/Externals/SDL2-2.0.1/lib/x64/SDL2.lib b/Externals/SDL2-2.0.1/lib/x64/SDL2.lib new file mode 100644 index 0000000000..abeab3bc8a Binary files /dev/null and b/Externals/SDL2-2.0.1/lib/x64/SDL2.lib differ diff --git a/Externals/SFML/build/vc2010/SFML_Network.vcxproj b/Externals/SFML/build/vc2010/SFML_Network.vcxproj index aeb2df601f..c67b8c323f 100644 --- a/Externals/SFML/build/vc2010/SFML_Network.vcxproj +++ b/Externals/SFML/build/vc2010/SFML_Network.vcxproj @@ -1,14 +1,6 @@  - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -28,142 +20,27 @@ {93D73454-2512-424E-9CDA-4BB357FE13DD} - SFML_Network - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - false - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\..\include;%(AdditionalIncludeDirectories) - - - true - - - - - ..\..\include;%(AdditionalIncludeDirectories) - - - true - - - - - ..\..\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\..\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\..\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\..\include;%(AdditionalIncludeDirectories) - - - true - true - true - - diff --git a/Externals/SOIL/SOIL.vcxproj b/Externals/SOIL/SOIL.vcxproj index 33f75bbaf9..9c4bb491da 100644 --- a/Externals/SOIL/SOIL.vcxproj +++ b/Externals/SOIL/SOIL.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,113 +19,31 @@ - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181} - SOIL + {B441CC62-877E-4B3F-93E0-0DE80544F705} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - false - - - StaticLibrary - false - Unicode - - - StaticLibrary - - - Unicode - - - StaticLibrary - - - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - true - - - - - - true - true - true - - - - - - true - true - true - - + + + @@ -148,9 +58,6 @@ - - - diff --git a/Externals/libjpeg/jconfig.h b/Externals/libjpeg/jconfig.h deleted file mode 100644 index 679404da4e..0000000000 --- a/Externals/libjpeg/jconfig.h +++ /dev/null @@ -1,45 +0,0 @@ -/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */ -/* see jconfig.txt for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS /* we presume a 32-bit flat memory model */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -/* Define "boolean" as unsigned char, not int, per Windows custom */ -#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ -typedef unsigned char boolean; -#endif -#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ - - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE /* optional */ -#define USE_SETMODE /* Microsoft has setmode() */ -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Externals/libjpeg/jmorecfg.h b/Externals/libjpeg/jmorecfg.h deleted file mode 100644 index 928d052c83..0000000000 --- a/Externals/libjpeg/jmorecfg.h +++ /dev/null @@ -1,371 +0,0 @@ -/* - * jmorecfg.h - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2009 by Guido Vollbeding. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains additional configuration options that customize the - * JPEG software for special applications or support machine-dependent - * optimizations. Most users will not need to touch this file. - */ - - -/* - * Define BITS_IN_JSAMPLE as either - * 8 for 8-bit sample values (the usual setting) - * 12 for 12-bit sample values - * Only 8 and 12 are legal data precisions for lossy JPEG according to the - * JPEG standard, and the IJG code does not support anything else! - * We do not support run-time selection of data precision, sorry. - */ - -#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ - - -/* - * Maximum number of components (color channels) allowed in JPEG image. - * To meet the letter of the JPEG spec, set this to 255. However, darn - * few applications need more than 4 channels (maybe 5 for CMYK + alpha - * mask). We recommend 10 as a reasonable compromise; use 4 if you are - * really short on memory. (Each allowed component costs a hundred or so - * bytes of storage, whether actually used in an image or not.) - */ - -#define MAX_COMPONENTS 10 /* maximum number of image components */ - - -/* - * Basic data types. - * You may need to change these if you have a machine with unusual data - * type sizes; for example, "char" not 8 bits, "short" not 16 bits, - * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, - * but it had better be at least 16. - */ - -/* Representation of a single sample (pixel element value). - * We frequently allocate large arrays of these, so it's important to keep - * them small. But if you have memory to burn and access to char or short - * arrays is very slow on your hardware, you might want to change these. - */ - -#if BITS_IN_JSAMPLE == 8 -/* JSAMPLE should be the smallest type that will hold the values 0..255. - * You can use a signed char by having GETJSAMPLE mask it with 0xFF. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JSAMPLE; -#ifdef CHAR_IS_UNSIGNED -#define GETJSAMPLE(value) ((int) (value)) -#else -#define GETJSAMPLE(value) ((int) (value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - -#define MAXJSAMPLE 255 -#define CENTERJSAMPLE 128 - -#endif /* BITS_IN_JSAMPLE == 8 */ - - -#if BITS_IN_JSAMPLE == 12 -/* JSAMPLE should be the smallest type that will hold the values 0..4095. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 4095 -#define CENTERJSAMPLE 2048 - -#endif /* BITS_IN_JSAMPLE == 12 */ - - -/* Representation of a DCT frequency coefficient. - * This should be a signed value of at least 16 bits; "short" is usually OK. - * Again, we allocate large arrays of these, but you can change to int - * if you have memory to burn and "short" is really slow. - */ - -typedef short JCOEF; - - -/* Compressed datastreams are represented as arrays of JOCTET. - * These must be EXACTLY 8 bits wide, at least once they are written to - * external storage. Note that when using the stdio data source/destination - * managers, this is also the data type passed to fread/fwrite. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JOCTET; -#define GETJOCTET(value) (value) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JOCTET; -#ifdef CHAR_IS_UNSIGNED -#define GETJOCTET(value) (value) -#else -#define GETJOCTET(value) ((value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - - -/* These typedefs are used for various table entries and so forth. - * They must be at least as wide as specified; but making them too big - * won't cost a huge amount of memory, so we don't provide special - * extraction code like we did for JSAMPLE. (In other words, these - * typedefs live at a different point on the speed/space tradeoff curve.) - */ - -/* UINT8 must hold at least the values 0..255. */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char UINT8; -#else /* not HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char UINT8; -#else /* not CHAR_IS_UNSIGNED */ -typedef short UINT8; -#endif /* CHAR_IS_UNSIGNED */ -#endif /* HAVE_UNSIGNED_CHAR */ - -/* UINT16 must hold at least the values 0..65535. */ - -#ifdef HAVE_UNSIGNED_SHORT -typedef unsigned short UINT16; -#else /* not HAVE_UNSIGNED_SHORT */ -typedef unsigned int UINT16; -#endif /* HAVE_UNSIGNED_SHORT */ - -/* INT16 must hold at least the values -32768..32767. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ -typedef short INT16; -#endif - -/* INT32 must hold at least signed 32-bit values. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ -#ifndef _BASETSD_H_ /* Microsoft defines it in basetsd.h */ -#ifndef _BASETSD_H /* MinGW is slightly different */ -#ifndef QGLOBAL_H /* Qt defines it in qglobal.h */ -typedef long INT32; -#endif -#endif -#endif -#endif - -/* Datatype used for image dimensions. The JPEG standard only supports - * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore - * "unsigned int" is sufficient on all machines. However, if you need to - * handle larger images and you don't mind deviating from the spec, you - * can change this datatype. - */ - -typedef unsigned int JDIMENSION; - -#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ - - -/* These macros are used in all function definitions and extern declarations. - * You could modify them if you need to change function linkage conventions; - * in particular, you'll need to do that to make the library a Windows DLL. - * Another application is to make all functions global for use with debuggers - * or code profilers that require it. - */ - -/* a function called through method pointers: */ -#define METHODDEF(type) static type -/* a function used only in its module: */ -#define LOCAL(type) static type -/* a function referenced thru EXTERNs: */ -#define GLOBAL(type) type -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern type - - -/* This macro is used to declare a "method", that is, a function pointer. - * We want to supply prototype parameters if the compiler can cope. - * Note that the arglist parameter must be parenthesized! - * Again, you can customize this if you need special linkage keywords. - */ - -#ifdef HAVE_PROTOTYPES -#define JMETHOD(type,methodname,arglist) type (*methodname) arglist -#else -#define JMETHOD(type,methodname,arglist) type (*methodname) () -#endif - - -/* Here is the pseudo-keyword for declaring pointers that must be "far" - * on 80x86 machines. Most of the specialized coding for 80x86 is handled - * by just saying "FAR *" where such a pointer is needed. In a few places - * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. - */ - -#ifndef FAR -#ifdef NEED_FAR_POINTERS -#define FAR far -#else -#define FAR -#endif -#endif - - -/* - * On a few systems, type boolean and/or its values FALSE, TRUE may appear - * in standard header files. Or you may have conflicts with application- - * specific header files that you want to include together with these files. - * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. - */ - -#ifndef HAVE_BOOLEAN -typedef int boolean; -#endif -#ifndef FALSE /* in case these macros already exist */ -#define FALSE 0 /* values of boolean */ -#endif -#ifndef TRUE -#define TRUE 1 -#endif - - -/* - * The remaining options affect code selection within the JPEG library, - * but they don't need to be visible to most applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. - */ - -#ifdef JPEG_INTERNALS -#define JPEG_INTERNAL_OPTIONS -#endif - -#ifdef JPEG_INTERNAL_OPTIONS - - -/* - * These defines indicate whether to include various optional functions. - * Undefining some of these symbols will produce a smaller but less capable - * library. Note that you can leave certain source files out of the - * compilation/linking process if you've #undef'd the corresponding symbols. - * (You may HAVE to do that if your compiler doesn't like null source files.) - */ - -/* Capability options common to encoder and decoder: */ - -#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ -#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ -#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ - -/* Encoder capability options: */ - -#define C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define DCT_SCALING_SUPPORTED /* Input rescaling via DCT? (Requires DCT_ISLOW)*/ -#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ -/* Note: if you selected 12-bit data precision, it is dangerous to turn off - * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit - * precision, so jchuff.c normally uses entropy optimization to compute - * usable tables for higher precision. If you don't want to do optimization, - * you'll have to supply different default Huffman tables. - * The exact same statements apply for progressive JPEG: the default tables - * don't work for progressive mode. (This may get fixed, however.) - */ -#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ - -/* Decoder capability options: */ - -#define D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ -#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ -#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ -#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ -#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ -#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ -#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ - -/* more capability options later, no doubt */ - - -/* - * Ordering of RGB data in scanlines passed to or from the application. - * If your application wants to deal with data in the order B,G,R, just - * change these macros. You can also deal with formats such as R,G,B,X - * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing - * the offsets will also change the order in which colormap data is organized. - * RESTRICTIONS: - * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. - * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not - * useful if you are using JPEG color spaces other than YCbCr or grayscale. - * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE - * is not 3 (they don't understand about dummy color components!). So you - * can't use color quantization if you change that value. - */ - -#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ -#define RGB_GREEN 1 /* Offset of Green */ -#define RGB_BLUE 2 /* Offset of Blue */ -#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ - - -/* Definitions for speed-related optimizations. */ - - -/* If your compiler supports inline functions, define INLINE - * as the inline keyword; otherwise define it as empty. - */ - -#ifndef INLINE -#ifdef __GNUC__ /* for instance, GNU C knows about inline */ -#define INLINE __inline__ -#endif -#ifndef INLINE -#define INLINE /* default is to define it as empty */ -#endif -#endif - - -/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying - * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER - * as short on such a machine. MULTIPLIER must be at least 16 bits wide. - */ - -#ifndef MULTIPLIER -#define MULTIPLIER int /* type for fastest integer multiply */ -#endif - - -/* FAST_FLOAT should be either float or double, whichever is done faster - * by your compiler. (Note that this type is only used in the floating point - * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) - * Typically, float is faster in ANSI C compilers, while double is faster in - * pre-ANSI compilers (because they insist on converting to double anyway). - * The code below therefore chooses float if we have ANSI-style prototypes. - */ - -#ifndef FAST_FLOAT -#ifdef HAVE_PROTOTYPES -#define FAST_FLOAT float -#else -#define FAST_FLOAT double -#endif -#endif - -#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/Externals/libjpeg/jpeglib.h b/Externals/libjpeg/jpeglib.h deleted file mode 100644 index 1eb1fac033..0000000000 --- a/Externals/libjpeg/jpeglib.h +++ /dev/null @@ -1,1160 +0,0 @@ -/* - * jpeglib.h - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2002-2010 by Guido Vollbeding. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the application interface for the JPEG library. - * Most applications using the library need only include this file, - * and perhaps jerror.h if they want to know the exact error codes. - */ - -#ifndef JPEGLIB_H -#define JPEGLIB_H - -/* - * First we include the configuration files that record how this - * installation of the JPEG library is set up. jconfig.h can be - * generated automatically for many systems. jmorecfg.h contains - * manual configuration options that most people need not worry about. - */ - -#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ -#include "jconfig.h" /* widely used configuration options */ -#endif -#include "jmorecfg.h" /* seldom changed options */ - - -#ifdef __cplusplus -#ifndef DONT_USE_EXTERN_C -extern "C" { -#endif -#endif - -/* Version IDs for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 80". - */ - -#define JPEG_LIB_VERSION 80 /* Compatibility version 8.0 */ -#define JPEG_LIB_VERSION_MAJOR 8 -#define JPEG_LIB_VERSION_MINOR 3 - - -/* Various constants determining the sizes of things. - * All of these are specified by the JPEG standard, so don't change them - * if you want to be compatible. - */ - -#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ -#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ -#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ -#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ -#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ -#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ -#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ -/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; - * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. - * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU - * to handle it. We even let you do this from the jconfig.h file. However, - * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe - * sometimes emits noncompliant files doesn't mean you should too. - */ -#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ -#ifndef D_MAX_BLOCKS_IN_MCU -#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ -#endif - - -/* Data structures for images (arrays of samples and of DCT coefficients). - * On 80x86 machines, the image arrays are too big for near pointers, - * but the pointer arrays can fit in near memory. - */ - -typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ -typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ -typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ - -typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ -typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ -typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ -typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ - -typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ - - -/* Types for JPEG compression parameters and working tables. */ - - -/* DCT coefficient quantization tables. */ - -typedef struct { - /* This array gives the coefficient quantizers in natural array order - * (not the zigzag order in which they are stored in a JPEG DQT marker). - * CAUTION: IJG versions prior to v6a kept this array in zigzag order. - */ - UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JQUANT_TBL; - - -/* Huffman coding tables. */ - -typedef struct { - /* These two fields directly represent the contents of a JPEG DHT marker */ - UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ - /* length k bits; bits[0] is unused */ - UINT8 huffval[256]; /* The symbols, in order of incr code length */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JHUFF_TBL; - - -/* Basic info about one component (color channel). */ - -typedef struct { - /* These values are fixed over the whole image. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOF marker. */ - int component_id; /* identifier for this component (0..255) */ - int component_index; /* its index in SOF or cinfo->comp_info[] */ - int h_samp_factor; /* horizontal sampling factor (1..4) */ - int v_samp_factor; /* vertical sampling factor (1..4) */ - int quant_tbl_no; /* quantization table selector (0..3) */ - /* These values may vary between scans. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOS marker. */ - /* The decompressor output side may not use these variables. */ - int dc_tbl_no; /* DC entropy table selector (0..3) */ - int ac_tbl_no; /* AC entropy table selector (0..3) */ - - /* Remaining fields should be treated as private by applications. */ - - /* These values are computed during compression or decompression startup: */ - /* Component's size in DCT blocks. - * Any dummy blocks added to complete an MCU are not counted; therefore - * these values do not depend on whether a scan is interleaved or not. - */ - JDIMENSION width_in_blocks; - JDIMENSION height_in_blocks; - /* Size of a DCT block in samples, - * reflecting any scaling we choose to apply during the DCT step. - * Values from 1 to 16 are supported. - * Note that different components may receive different DCT scalings. - */ - int DCT_h_scaled_size; - int DCT_v_scaled_size; - /* The downsampled dimensions are the component's actual, unpadded number - * of samples at the main buffer (preprocessing/compression interface); - * DCT scaling is included, so - * downsampled_width = ceil(image_width * Hi/Hmax * DCT_h_scaled_size/DCTSIZE) - * and similarly for height. - */ - JDIMENSION downsampled_width; /* actual width in samples */ - JDIMENSION downsampled_height; /* actual height in samples */ - /* This flag is used only for decompression. In cases where some of the - * components will be ignored (eg grayscale output from YCbCr image), - * we can skip most computations for the unused components. - */ - boolean component_needed; /* do we need the value of this component? */ - - /* These values are computed before starting a scan of the component. */ - /* The decompressor output side may not use these variables. */ - int MCU_width; /* number of blocks per MCU, horizontally */ - int MCU_height; /* number of blocks per MCU, vertically */ - int MCU_blocks; /* MCU_width * MCU_height */ - int MCU_sample_width; /* MCU width in samples: MCU_width * DCT_h_scaled_size */ - int last_col_width; /* # of non-dummy blocks across in last MCU */ - int last_row_height; /* # of non-dummy blocks down in last MCU */ - - /* Saved quantization table for component; NULL if none yet saved. - * See jdinput.c comments about the need for this information. - * This field is currently used only for decompression. - */ - JQUANT_TBL * quant_table; - - /* Private per-component storage for DCT or IDCT subsystem. */ - void * dct_table; -} jpeg_component_info; - - -/* The script for encoding a multiple-scan file is an array of these: */ - -typedef struct { - int comps_in_scan; /* number of components encoded in this scan */ - int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ - int Ss, Se; /* progressive JPEG spectral selection parms */ - int Ah, Al; /* progressive JPEG successive approx. parms */ -} jpeg_scan_info; - -/* The decompressor can save APPn and COM markers in a list of these: */ - -typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; - -struct jpeg_marker_struct { - jpeg_saved_marker_ptr next; /* next in list, or NULL */ - UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ - unsigned int original_length; /* # bytes of data in the file */ - unsigned int data_length; /* # bytes of data saved at data[] */ - JOCTET FAR * data; /* the data contained in the marker */ - /* the marker length word is not counted in data_length or original_length */ -}; - -/* Known color spaces. */ - -typedef enum { - JCS_UNKNOWN, /* error/unspecified */ - JCS_GRAYSCALE, /* monochrome */ - JCS_RGB, /* red/green/blue */ - JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ - JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK /* Y/Cb/Cr/K */ -} J_COLOR_SPACE; - -/* DCT/IDCT algorithm options. */ - -typedef enum { - JDCT_ISLOW, /* slow but accurate integer algorithm */ - JDCT_IFAST, /* faster, less accurate integer method */ - JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ -} J_DCT_METHOD; - -#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ -#define JDCT_DEFAULT JDCT_ISLOW -#endif -#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ -#define JDCT_FASTEST JDCT_IFAST -#endif - -/* Dithering options for decompression. */ - -typedef enum { - JDITHER_NONE, /* no dithering */ - JDITHER_ORDERED, /* simple ordered dither */ - JDITHER_FS /* Floyd-Steinberg error diffusion dither */ -} J_DITHER_MODE; - - -/* Common fields between JPEG compression and decompression master structs. */ - -#define jpeg_common_fields \ - struct jpeg_error_mgr * err; /* Error handler module */\ - struct jpeg_memory_mgr * mem; /* Memory manager module */\ - struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ - void * client_data; /* Available for use by application */\ - boolean is_decompressor; /* So common code can tell which is which */\ - int global_state /* For checking call sequence validity */ - -/* Routines that are to be used by both halves of the library are declared - * to receive a pointer to this structure. There are no actual instances of - * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. - */ -struct jpeg_common_struct { - jpeg_common_fields; /* Fields common to both master struct types */ - /* Additional fields follow in an actual jpeg_compress_struct or - * jpeg_decompress_struct. All three structs must agree on these - * initial fields! (This would be a lot cleaner in C++.) - */ -}; - -typedef struct jpeg_common_struct * j_common_ptr; -typedef struct jpeg_compress_struct * j_compress_ptr; -typedef struct jpeg_decompress_struct * j_decompress_ptr; - - -/* Master record for a compression instance */ - -struct jpeg_compress_struct { - jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ - - /* Destination for compressed data */ - struct jpeg_destination_mgr * dest; - - /* Description of source image --- these fields must be filled in by - * outer application before starting compression. in_color_space must - * be correct before you can even call jpeg_set_defaults(). - */ - - JDIMENSION image_width; /* input image width */ - JDIMENSION image_height; /* input image height */ - int input_components; /* # of color components in input image */ - J_COLOR_SPACE in_color_space; /* colorspace of input image */ - - double input_gamma; /* image gamma of input image */ - - /* Compression parameters --- these fields must be set before calling - * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to - * initialize everything to reasonable defaults, then changing anything - * the application specifically wants to change. That way you won't get - * burnt when new parameters are added. Also note that there are several - * helper routines to simplify changing parameters. - */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - JDIMENSION jpeg_width; /* scaled JPEG image width */ - JDIMENSION jpeg_height; /* scaled JPEG image height */ - /* Dimensions of actual JPEG image that will be written to file, - * derived from input dimensions by scaling factors above. - * These fields are computed by jpeg_start_compress(). - * You can also use jpeg_calc_jpeg_dimensions() to determine these values - * in advance of calling jpeg_start_compress(). - */ - - int data_precision; /* bits of precision in image data */ - - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - int q_scale_factor[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined, - * and corresponding scale factors (percentage, initialized 100). - */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - int num_scans; /* # of entries in scan_info array */ - const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ - /* The default value of scan_info is NULL, which causes a single-scan - * sequential JPEG file to be emitted. To create a multi-scan file, - * set num_scans and scan_info to point to an array of scan definitions. - */ - - boolean raw_data_in; /* TRUE=caller supplies downsampled data */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */ - int smoothing_factor; /* 1..100, or 0 for no input smoothing */ - J_DCT_METHOD dct_method; /* DCT algorithm selector */ - - /* The restart interval can be specified in absolute MCUs by setting - * restart_interval, or in MCU rows by setting restart_in_rows - * (in which case the correct restart_interval will be figured - * for each scan). - */ - unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ - int restart_in_rows; /* if > 0, MCU rows per restart interval */ - - /* Parameters controlling emission of special markers. */ - - boolean write_JFIF_header; /* should a JFIF marker be written? */ - UINT8 JFIF_major_version; /* What to write for the JFIF version number */ - UINT8 JFIF_minor_version; - /* These three values are not used by the JPEG code, merely copied */ - /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ - /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ - /* ratio is defined by X_density/Y_density even when density_unit=0. */ - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean write_Adobe_marker; /* should an Adobe marker be written? */ - - /* State variable: index of next scanline to be written to - * jpeg_write_scanlines(). Application may use this to control its - * processing loop, e.g., "while (next_scanline < image_height)". - */ - - JDIMENSION next_scanline; /* 0 .. image_height-1 */ - - /* Remaining fields are known throughout compressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during compression startup - */ - boolean progressive_mode; /* TRUE if scan script uses progressive mode */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ - int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ - /* The coefficient controller receives data in units of MCU rows as defined - * for fully interleaved scans (whether the JPEG file is interleaved or not). - * There are v_samp_factor * DCTSIZE sample rows of each component in an - * "iMCU" (interleaved MCU) row. - */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[C_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - int block_size; /* the basic DCT block size: 1..16 */ - const int * natural_order; /* natural-order position array */ - int lim_Se; /* min( Se, DCTSIZE2-1 ) */ - - /* - * Links to compression subobjects (methods and private variables of modules) - */ - struct jpeg_comp_master * master; - struct jpeg_c_main_controller * main; - struct jpeg_c_prep_controller * prep; - struct jpeg_c_coef_controller * coef; - struct jpeg_marker_writer * marker; - struct jpeg_color_converter * cconvert; - struct jpeg_downsampler * downsample; - struct jpeg_forward_dct * fdct; - struct jpeg_entropy_encoder * entropy; - jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ - int script_space_size; -}; - - -/* Master record for a decompression instance */ - -struct jpeg_decompress_struct { - jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ - - /* Source of compressed data */ - struct jpeg_source_mgr * src; - - /* Basic description of image --- filled in by jpeg_read_header(). */ - /* Application may inspect these values to decide how to process image. */ - - JDIMENSION image_width; /* nominal image width (from SOF marker) */ - JDIMENSION image_height; /* nominal image height */ - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - /* Decompression processing parameters --- these fields must be set before - * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes - * them to default values. - */ - - J_COLOR_SPACE out_color_space; /* colorspace for output */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - double output_gamma; /* image gamma wanted in output */ - - boolean buffered_image; /* TRUE=multiple output passes */ - boolean raw_data_out; /* TRUE=downsampled data wanted */ - - J_DCT_METHOD dct_method; /* IDCT algorithm selector */ - boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ - boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ - - boolean quantize_colors; /* TRUE=colormapped output wanted */ - /* the following are ignored if not quantize_colors: */ - J_DITHER_MODE dither_mode; /* type of color dithering to use */ - boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ - int desired_number_of_colors; /* max # colors to use in created colormap */ - /* these are significant only in buffered-image mode: */ - boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ - boolean enable_external_quant;/* enable future use of external colormap */ - boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ - - /* Description of actual output image that will be returned to application. - * These fields are computed by jpeg_start_decompress(). - * You can also use jpeg_calc_output_dimensions() to determine these values - * in advance of calling jpeg_start_decompress(). - */ - - JDIMENSION output_width; /* scaled image width */ - JDIMENSION output_height; /* scaled image height */ - int out_color_components; /* # of color components in out_color_space */ - int output_components; /* # of color components returned */ - /* output_components is 1 (a colormap index) when quantizing colors; - * otherwise it equals out_color_components. - */ - int rec_outbuf_height; /* min recommended height of scanline buffer */ - /* If the buffer passed to jpeg_read_scanlines() is less than this many rows - * high, space and time will be wasted due to unnecessary data copying. - * Usually rec_outbuf_height will be 1 or 2, at most 4. - */ - - /* When quantizing colors, the output colormap is described by these fields. - * The application can supply a colormap by setting colormap non-NULL before - * calling jpeg_start_decompress; otherwise a colormap is created during - * jpeg_start_decompress or jpeg_start_output. - * The map has out_color_components rows and actual_number_of_colors columns. - */ - int actual_number_of_colors; /* number of entries in use */ - JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ - - /* State variables: these variables indicate the progress of decompression. - * The application may examine these but must not modify them. - */ - - /* Row index of next scanline to be read from jpeg_read_scanlines(). - * Application may use this to control its processing loop, e.g., - * "while (output_scanline < output_height)". - */ - JDIMENSION output_scanline; /* 0 .. output_height-1 */ - - /* Current input scan number and number of iMCU rows completed in scan. - * These indicate the progress of the decompressor input side. - */ - int input_scan_number; /* Number of SOS markers seen so far */ - JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ - - /* The "output scan number" is the notional scan being displayed by the - * output side. The decompressor will not allow output scan/row number - * to get ahead of input scan/row, but it can fall arbitrarily far behind. - */ - int output_scan_number; /* Nominal scan number being displayed */ - JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ - - /* Current progression status. coef_bits[c][i] indicates the precision - * with which component c's DCT coefficient i (in zigzag order) is known. - * It is -1 when no data has yet been received, otherwise it is the point - * transform (shift) value for the most recent scan of the coefficient - * (thus, 0 at completion of the progression). - * This pointer is NULL when reading a non-progressive file. - */ - int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ - - /* Internal JPEG parameters --- the application usually need not look at - * these fields. Note that the decompressor output side may not use - * any parameters that can change between scans. - */ - - /* Quantization and Huffman tables are carried forward across input - * datastreams when processing abbreviated JPEG datastreams. - */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - /* These parameters are never carried across datastreams, since they - * are given in SOF/SOS markers or defined to be reset by SOI. - */ - - int data_precision; /* bits of precision in image data */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - boolean is_baseline; /* TRUE if Baseline SOF0 encountered */ - boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ - - /* These fields record data obtained from optional markers recognized by - * the JPEG library. - */ - boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ - /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ - UINT8 JFIF_major_version; /* JFIF version number */ - UINT8 JFIF_minor_version; - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ - UINT8 Adobe_transform; /* Color transform code from Adobe marker */ - - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - - /* Aside from the specific data retained from APPn markers known to the - * library, the uninterpreted contents of any or all APPn and COM markers - * can be saved in a list for examination by the application. - */ - jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ - - /* Remaining fields are known throughout decompressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during decompression startup - */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ - int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ - /* The coefficient controller's input and output progress is measured in - * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows - * in fully interleaved JPEG scans, but are used whether the scan is - * interleaved or not. We define an iMCU row as v_samp_factor DCT block - * rows of each component. Therefore, the IDCT output contains - * v_samp_factor*DCT_v_scaled_size sample rows of a component per iMCU row. - */ - - JSAMPLE * sample_range_limit; /* table for fast range-limiting */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - * Note that the decompressor output side must not use these fields. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[D_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - /* These fields are derived from Se of first SOS marker. - */ - int block_size; /* the basic DCT block size: 1..16 */ - const int * natural_order; /* natural-order position array for entropy decode */ - int lim_Se; /* min( Se, DCTSIZE2-1 ) for entropy decode */ - - /* This field is shared between entropy decoder and marker parser. - * It is either zero or the code of a JPEG marker that has been - * read from the data source, but has not yet been processed. - */ - int unread_marker; - - /* - * Links to decompression subobjects (methods, private variables of modules) - */ - struct jpeg_decomp_master * master; - struct jpeg_d_main_controller * main; - struct jpeg_d_coef_controller * coef; - struct jpeg_d_post_controller * post; - struct jpeg_input_controller * inputctl; - struct jpeg_marker_reader * marker; - struct jpeg_entropy_decoder * entropy; - struct jpeg_inverse_dct * idct; - struct jpeg_upsampler * upsample; - struct jpeg_color_deconverter * cconvert; - struct jpeg_color_quantizer * cquantize; -}; - - -/* "Object" declarations for JPEG modules that may be supplied or called - * directly by the surrounding application. - * As with all objects in the JPEG library, these structs only define the - * publicly visible methods and state variables of a module. Additional - * private fields may exist after the public ones. - */ - - -/* Error handler object */ - -struct jpeg_error_mgr { - /* Error exit handler: does not return to caller */ - JMETHOD(void, error_exit, (j_common_ptr cinfo)); - /* Conditionally emit a trace or warning message */ - JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); - /* Routine that actually outputs a trace or error message */ - JMETHOD(void, output_message, (j_common_ptr cinfo)); - /* Format a message string for the most recent JPEG error or message */ - JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); -#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ - /* Reset error state variables at start of a new image */ - JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); - - /* The message ID code and any parameters are saved here. - * A message can have one string parameter or up to 8 int parameters. - */ - int msg_code; -#define JMSG_STR_PARM_MAX 80 - union { - int i[8]; - char s[JMSG_STR_PARM_MAX]; - } msg_parm; - - /* Standard state variables for error facility */ - - int trace_level; /* max msg_level that will be displayed */ - - /* For recoverable corrupt-data errors, we emit a warning message, - * but keep going unless emit_message chooses to abort. emit_message - * should count warnings in num_warnings. The surrounding application - * can check for bad data by seeing if num_warnings is nonzero at the - * end of processing. - */ - long num_warnings; /* number of corrupt-data warnings */ - - /* These fields point to the table(s) of error message strings. - * An application can change the table pointer to switch to a different - * message list (typically, to change the language in which errors are - * reported). Some applications may wish to add additional error codes - * that will be handled by the JPEG library error mechanism; the second - * table pointer is used for this purpose. - * - * First table includes all errors generated by JPEG library itself. - * Error code 0 is reserved for a "no such error string" message. - */ - const char * const * jpeg_message_table; /* Library errors */ - int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ - /* Second table can be added by application (see cjpeg/djpeg for example). - * It contains strings numbered first_addon_message..last_addon_message. - */ - const char * const * addon_message_table; /* Non-library errors */ - int first_addon_message; /* code for first string in addon table */ - int last_addon_message; /* code for last string in addon table */ -}; - - -/* Progress monitor object */ - -struct jpeg_progress_mgr { - JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); - - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -}; - - -/* Data destination object for compression */ - -struct jpeg_destination_mgr { - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - - JMETHOD(void, init_destination, (j_compress_ptr cinfo)); - JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); - JMETHOD(void, term_destination, (j_compress_ptr cinfo)); -}; - - -/* Data source object for decompression */ - -struct jpeg_source_mgr { - const JOCTET * next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - - JMETHOD(void, init_source, (j_decompress_ptr cinfo)); - JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); - JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); - JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); - JMETHOD(void, term_source, (j_decompress_ptr cinfo)); -}; - - -/* Memory manager object. - * Allocates "small" objects (a few K total), "large" objects (tens of K), - * and "really big" objects (virtual arrays with backing store if needed). - * The memory manager does not allow individual objects to be freed; rather, - * each created object is assigned to a pool, and whole pools can be freed - * at once. This is faster and more convenient than remembering exactly what - * to free, especially where malloc()/free() are not too speedy. - * NB: alloc routines never return NULL. They exit to error_exit if not - * successful. - */ - -#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ -#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ -#define JPOOL_NUMPOOLS 2 - -typedef struct jvirt_sarray_control * jvirt_sarray_ptr; -typedef struct jvirt_barray_control * jvirt_barray_ptr; - - -struct jpeg_memory_mgr { - /* Method pointers */ - JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, - JDIMENSION numrows)); - JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, - JDIMENSION numrows)); - JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION samplesperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION blocksperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); - JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, - jvirt_sarray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, - jvirt_barray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); - JMETHOD(void, self_destruct, (j_common_ptr cinfo)); - - /* Limit on memory allocation for this JPEG object. (Note that this is - * merely advisory, not a guaranteed maximum; it only affects the space - * used for virtual-array buffers.) May be changed by outer application - * after creating the JPEG object. - */ - long max_memory_to_use; - - /* Maximum allocation request accepted by alloc_large. */ - long max_alloc_chunk; -}; - - -/* Routine signature for application-supplied marker processing methods. - * Need not pass marker code since it is stored in cinfo->unread_marker. - */ -typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); - - -/* Declarations for routines called by application. - * The JPP macro hides prototype parameters from compilers that can't cope. - * Note JPP requires double parentheses. - */ - -#ifdef HAVE_PROTOTYPES -#define JPP(arglist) arglist -#else -#define JPP(arglist) () -#endif - - -/* Short forms of external names for systems with brain-damaged linkers. - * We shorten external names to be unique in the first six letters, which - * is good enough for all known systems. - * (If your compiler itself needs names to be unique in less than 15 - * characters, you are out of luck. Get a better compiler.) - */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_std_error jStdError -#define jpeg_CreateCompress jCreaCompress -#define jpeg_CreateDecompress jCreaDecompress -#define jpeg_destroy_compress jDestCompress -#define jpeg_destroy_decompress jDestDecompress -#define jpeg_stdio_dest jStdDest -#define jpeg_stdio_src jStdSrc -#define jpeg_mem_dest jMemDest -#define jpeg_mem_src jMemSrc -#define jpeg_set_defaults jSetDefaults -#define jpeg_set_colorspace jSetColorspace -#define jpeg_default_colorspace jDefColorspace -#define jpeg_set_quality jSetQuality -#define jpeg_set_linear_quality jSetLQuality -#define jpeg_default_qtables jDefQTables -#define jpeg_add_quant_table jAddQuantTable -#define jpeg_quality_scaling jQualityScaling -#define jpeg_simple_progression jSimProgress -#define jpeg_suppress_tables jSuppressTables -#define jpeg_alloc_quant_table jAlcQTable -#define jpeg_alloc_huff_table jAlcHTable -#define jpeg_start_compress jStrtCompress -#define jpeg_write_scanlines jWrtScanlines -#define jpeg_finish_compress jFinCompress -#define jpeg_calc_jpeg_dimensions jCjpegDimensions -#define jpeg_write_raw_data jWrtRawData -#define jpeg_write_marker jWrtMarker -#define jpeg_write_m_header jWrtMHeader -#define jpeg_write_m_byte jWrtMByte -#define jpeg_write_tables jWrtTables -#define jpeg_read_header jReadHeader -#define jpeg_start_decompress jStrtDecompress -#define jpeg_read_scanlines jReadScanlines -#define jpeg_finish_decompress jFinDecompress -#define jpeg_read_raw_data jReadRawData -#define jpeg_has_multiple_scans jHasMultScn -#define jpeg_start_output jStrtOutput -#define jpeg_finish_output jFinOutput -#define jpeg_input_complete jInComplete -#define jpeg_new_colormap jNewCMap -#define jpeg_consume_input jConsumeInput -#define jpeg_core_output_dimensions jCoreDimensions -#define jpeg_calc_output_dimensions jCalcDimensions -#define jpeg_save_markers jSaveMarkers -#define jpeg_set_marker_processor jSetMarker -#define jpeg_read_coefficients jReadCoefs -#define jpeg_write_coefficients jWrtCoefs -#define jpeg_copy_critical_parameters jCopyCrit -#define jpeg_abort_compress jAbrtCompress -#define jpeg_abort_decompress jAbrtDecompress -#define jpeg_abort jAbort -#define jpeg_destroy jDestroy -#define jpeg_resync_to_restart jResyncRestart -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Default error-management setup */ -EXTERN(struct jpeg_error_mgr *) jpeg_std_error - JPP((struct jpeg_error_mgr * err)); - -/* Initialization of JPEG compression objects. - * jpeg_create_compress() and jpeg_create_decompress() are the exported - * names that applications should call. These expand to calls on - * jpeg_CreateCompress and jpeg_CreateDecompress with additional information - * passed for version mismatch checking. - * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. - */ -#define jpeg_create_compress(cinfo) \ - jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_compress_struct)) -#define jpeg_create_decompress(cinfo) \ - jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_decompress_struct)) -EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, - int version, size_t structsize)); -EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, - int version, size_t structsize)); -/* Destruction of JPEG compression objects */ -EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); - -/* Standard data source and destination managers: stdio streams. */ -/* Caller is responsible for opening the file before and closing after. */ -EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); -EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); - -/* Data source and destination managers: memory buffers. */ -EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo, - unsigned char ** outbuffer, - unsigned long * outsize)); -EXTERN(void) jpeg_mem_src JPP((j_decompress_ptr cinfo, - unsigned char * inbuffer, - unsigned long insize)); - -/* Default parameter setup for compression */ -EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); -/* Compression parameter setup aids */ -EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, - J_COLOR_SPACE colorspace)); -EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, - boolean force_baseline)); -EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, - int scale_factor, - boolean force_baseline)); -EXTERN(void) jpeg_default_qtables JPP((j_compress_ptr cinfo, - boolean force_baseline)); -EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, - boolean force_baseline)); -EXTERN(int) jpeg_quality_scaling JPP((int quality)); -EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, - boolean suppress)); -EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); -EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); - -/* Main entry points for compression */ -EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, - boolean write_all_tables)); -EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION num_lines)); -EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); - -/* Precalculate JPEG dimensions for current compression parameters. */ -EXTERN(void) jpeg_calc_jpeg_dimensions JPP((j_compress_ptr cinfo)); - -/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION num_lines)); - -/* Write a special marker. See libjpeg.txt concerning safe usage. */ -EXTERN(void) jpeg_write_marker - JPP((j_compress_ptr cinfo, int marker, - const JOCTET * dataptr, unsigned int datalen)); -/* Same, but piecemeal. */ -EXTERN(void) jpeg_write_m_header - JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); -EXTERN(void) jpeg_write_m_byte - JPP((j_compress_ptr cinfo, int val)); - -/* Alternate compression function: just write an abbreviated table file */ -EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); - -/* Decompression startup: read start of JPEG datastream to see what's there */ -EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, - boolean require_image)); -/* Return value is one of: */ -#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ -#define JPEG_HEADER_OK 1 /* Found valid image datastream */ -#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ -/* If you pass require_image = TRUE (normal case), you need not check for - * a TABLES_ONLY return code; an abbreviated file will cause an error exit. - * JPEG_SUSPENDED is only possible if you use a data source module that can - * give a suspension return (the stdio source module doesn't). - */ - -/* Main entry points for decompression */ -EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); -EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION max_lines)); -EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); - -/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION max_lines)); - -/* Additional entry points for buffered-image mode. */ -EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, - int scan_number)); -EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); -EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); -/* Return value is one of: */ -/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ -#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ -#define JPEG_REACHED_EOI 2 /* Reached end of image */ -#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ -#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ - -/* Precalculate output dimensions for current decompression parameters. */ -EXTERN(void) jpeg_core_output_dimensions JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); - -/* Control saving of COM and APPn markers into marker_list. */ -EXTERN(void) jpeg_save_markers - JPP((j_decompress_ptr cinfo, int marker_code, - unsigned int length_limit)); - -/* Install a special processing method for COM or APPn markers. */ -EXTERN(void) jpeg_set_marker_processor - JPP((j_decompress_ptr cinfo, int marker_code, - jpeg_marker_parser_method routine)); - -/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ -EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, - jvirt_barray_ptr * coef_arrays)); -EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, - j_compress_ptr dstinfo)); - -/* If you choose to abort compression or decompression before completing - * jpeg_finish_(de)compress, then you need to clean up to release memory, - * temporary files, etc. You can just call jpeg_destroy_(de)compress - * if you're done with the JPEG object, but if you want to clean it up and - * reuse it, call this: - */ -EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); - -/* Generic versions of jpeg_abort and jpeg_destroy that work on either - * flavor of JPEG object. These may be more convenient in some places. - */ -EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); -EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); - -/* Default restart-marker-resync procedure for use by data source modules */ -EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, - int desired)); - - -/* These marker codes are exported since applications and data source modules - * are likely to want to use them. - */ - -#define JPEG_RST0 0xD0 /* RST0 marker code */ -#define JPEG_EOI 0xD9 /* EOI marker code */ -#define JPEG_APP0 0xE0 /* APP0 marker code */ -#define JPEG_COM 0xFE /* COM marker code */ - - -/* If we have a brain-damaged compiler that emits warnings (or worse, errors) - * for structure definitions that are never filled in, keep it quiet by - * supplying dummy definitions for the various substructures. - */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -struct jpeg_comp_master { long dummy; }; -struct jpeg_c_main_controller { long dummy; }; -struct jpeg_c_prep_controller { long dummy; }; -struct jpeg_c_coef_controller { long dummy; }; -struct jpeg_marker_writer { long dummy; }; -struct jpeg_color_converter { long dummy; }; -struct jpeg_downsampler { long dummy; }; -struct jpeg_forward_dct { long dummy; }; -struct jpeg_entropy_encoder { long dummy; }; -struct jpeg_decomp_master { long dummy; }; -struct jpeg_d_main_controller { long dummy; }; -struct jpeg_d_coef_controller { long dummy; }; -struct jpeg_d_post_controller { long dummy; }; -struct jpeg_input_controller { long dummy; }; -struct jpeg_marker_reader { long dummy; }; -struct jpeg_entropy_decoder { long dummy; }; -struct jpeg_inverse_dct { long dummy; }; -struct jpeg_upsampler { long dummy; }; -struct jpeg_color_deconverter { long dummy; }; -struct jpeg_color_quantizer { long dummy; }; -#endif /* JPEG_INTERNALS */ -#endif /* INCOMPLETE_TYPES_BROKEN */ - - -/* - * The JPEG library modules define JPEG_INTERNALS before including this file. - * The internal structure declarations are read only when that is true. - * Applications using the library should not include jpegint.h, but may wish - * to include jerror.h. - */ - -#ifdef JPEG_INTERNALS -#include "jpegint.h" /* fetch private declarations */ -#include "jerror.h" /* fetch error codes too */ -#endif - -#ifdef __cplusplus -#ifndef DONT_USE_EXTERN_C -} -#endif -#endif - -#endif /* JPEGLIB_H */ diff --git a/Externals/libjpeg/libjpeg.lib b/Externals/libjpeg/libjpeg.lib deleted file mode 100644 index a75d080166..0000000000 Binary files a/Externals/libjpeg/libjpeg.lib and /dev/null differ diff --git a/Externals/libjpeg/libjpeg64.lib b/Externals/libjpeg/libjpeg64.lib deleted file mode 100644 index 9211ddea4a..0000000000 Binary files a/Externals/libjpeg/libjpeg64.lib and /dev/null differ diff --git a/Externals/libpng/png/png.vcxproj b/Externals/libpng/png/png.vcxproj index e272b07452..9065fabf93 100644 --- a/Externals/libpng/png/png.vcxproj +++ b/Externals/libpng/png/png.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -26,12 +18,36 @@ x64 + + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C} + + + + StaticLibrary + v120 + Unicode + + + true + + + false + + + + + + + + + - + + @@ -40,7 +56,9 @@ + + @@ -55,153 +73,11 @@ - - {01573C36-AC6E-49F6-94BA-572517EB9740} - Win32Proj - png - - - - StaticLibrary - true - Unicode - - - StaticLibrary - true - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disabled - ..\..\zlib;%(AdditionalIncludeDirectories) - - - Windows - true - - - - - Disabled - ..\..\zlib;%(AdditionalIncludeDirectories) - - - Windows - true - - - - - MaxSpeed - true - true - ..\..\zlib;%(AdditionalIncludeDirectories) - - - Windows - true - true - true - - - - - MaxSpeed - true - true - ..\..\zlib;%(AdditionalIncludeDirectories) - - - Windows - true - true - true - - - - - MaxSpeed - true - true - ..\..\zlib;%(AdditionalIncludeDirectories) - - - Windows - true - true - true - - - - - MaxSpeed - true - true - ..\..\zlib;%(AdditionalIncludeDirectories) - - - Windows - true - true - true - - + + + {ff213b23-2c26-4214-9f88-85271e557e87} + + diff --git a/Externals/libpng/png/png.vcxproj.filters b/Externals/libpng/png/png.vcxproj.filters deleted file mode 100644 index 5bccb29842..0000000000 --- a/Externals/libpng/png/png.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Externals/libusbx/msvc/errno.h b/Externals/libusbx/msvc/errno.h deleted file mode 100644 index 07d15e3d44..0000000000 --- a/Externals/libusbx/msvc/errno.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * errno.h - * This file has no copyright assigned and is placed in the Public Domain. - * This file is a part of the mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER within the package. - * - * Error numbers and access to error reporting. - * - */ - -#ifndef _ERRNO_H_ -#define _ERRNO_H_ - -#include - -/* - * Error numbers. - * TODO: Can't be sure of some of these assignments, I guessed from the - * names given by strerror and the defines in the Cygnus errno.h. A lot - * of the names from the Cygnus errno.h are not represented, and a few - * of the descriptions returned by strerror do not obviously match - * their error naming. - */ -#define EPERM 1 /* Operation not permitted */ -#define ENOFILE 2 /* No such file or directory */ -#define ENOENT 2 -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted function call */ -#define EIO 5 /* Input/output error */ -#define ENXIO 6 /* No such device or address */ -#define E2BIG 7 /* Arg list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file descriptor */ -#define ECHILD 10 /* No child processes */ -#define EAGAIN 11 /* Resource temporarily unavailable */ -#define ENOMEM 12 /* Not enough space */ -#define EACCES 13 /* Permission denied */ -#define EFAULT 14 /* Bad address */ -/* 15 - Unknown Error */ -#define EBUSY 16 /* strerror reports "Resource device" */ -#define EEXIST 17 /* File exists */ -#define EXDEV 18 /* Improper link (cross-device link?) */ -#define ENODEV 19 /* No such device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* Too many open files in system */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Inappropriate I/O control operation */ -/* 26 - Unknown Error */ -#define EFBIG 27 /* File too large */ -#define ENOSPC 28 /* No space left on device */ -#define ESPIPE 29 /* Invalid seek (seek on a pipe?) */ -#define EROFS 30 /* Read-only file system */ -#define EMLINK 31 /* Too many links */ -#define EPIPE 32 /* Broken pipe */ -#define EDOM 33 /* Domain error (math functions) */ -#define ERANGE 34 /* Result too large (possibly too small) */ -/* 35 - Unknown Error */ -#define EDEADLOCK 36 /* Resource deadlock avoided (non-Cyg) */ -#define EDEADLK 36 -#if 0 -/* 37 - Unknown Error */ -#define ENAMETOOLONG 38 /* Filename too long (91 in Cyg?) */ -#define ENOLCK 39 /* No locks available (46 in Cyg?) */ -#define ENOSYS 40 /* Function not implemented (88 in Cyg?) */ -#define ENOTEMPTY 41 /* Directory not empty (90 in Cyg?) */ -#define EILSEQ 42 /* Illegal byte sequence */ -#endif - -/* - * NOTE: ENAMETOOLONG and ENOTEMPTY conflict with definitions in the - * sockets.h header provided with windows32api-0.1.2. - * You should go and put an #if 0 ... #endif around the whole block - * of errors (look at the comment above them). - */ - -#ifndef RC_INVOKED - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Definitions of errno. For _doserrno, sys_nerr and * sys_errlist, see - * stdlib.h. - */ -#if defined(_UWIN) || defined(_WIN32_WCE) -#undef errno -extern int errno; -#else -_CRTIMP int* __cdecl _errno(void); -#define errno (*_errno()) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* Not RC_INVOKED */ - -#endif /* Not _ERRNO_H_ */ \ No newline at end of file diff --git a/Externals/libusbx/msvc/inttypes.h b/Externals/libusbx/msvc/inttypes.h deleted file mode 100644 index 289bb50b4d..0000000000 --- a/Externals/libusbx/msvc/inttypes.h +++ /dev/null @@ -1,295 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file was original part of the w64 mingw-runtime package. - */ - -/* - * THIS SOFTWARE IS NOT COPYRIGHTED - * - * Modified for libusb/MSVC: Pete Batard - * - * This source code is offered for use in the public domain. You may - * use, modify or distribute it freely. - * - * This code is distributed in the hope that it will be useful but - * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY - * DISCLAIMED. This includes but is not limited to warranties of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Date: 2010-04-02 - */ - -#ifndef _MSC_VER -#error This header should only be used with Microsoft compilers -#endif - -/* 7.8 Format conversion of integer types */ - -#ifndef _INTTYPES_H_ -#define _INTTYPES_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - intmax_t quot; - intmax_t rem; - } imaxdiv_t; - - -/* 7.8.1 Macros for format specifiers - * - * MS runtime does not yet understand C9x standard "ll" - * length specifier. It appears to treat "ll" as "l". - * The non-standard I64 length specifier causes warning in GCC, - * but understood by MS runtime functions. - */ - -/* fprintf macros for signed types */ -#define PRId8 "d" -#define PRId16 "d" -#define PRId32 "d" -#define PRId64 "I64d" - -#define PRIdLEAST8 "d" -#define PRIdLEAST16 "d" -#define PRIdLEAST32 "d" -#define PRIdLEAST64 "I64d" - -#define PRIdFAST8 "d" -#define PRIdFAST16 "d" -#define PRIdFAST32 "d" -#define PRIdFAST64 "I64d" - -#define PRIdMAX "I64d" - -#define PRIi8 "i" -#define PRIi16 "i" -#define PRIi32 "i" -#define PRIi64 "I64i" - -#define PRIiLEAST8 "i" -#define PRIiLEAST16 "i" -#define PRIiLEAST32 "i" -#define PRIiLEAST64 "I64i" - -#define PRIiFAST8 "i" -#define PRIiFAST16 "i" -#define PRIiFAST32 "i" -#define PRIiFAST64 "I64i" - -#define PRIiMAX "I64i" - -#define PRIo8 "o" -#define PRIo16 "o" -#define PRIo32 "o" -#define PRIo64 "I64o" - -#define PRIoLEAST8 "o" -#define PRIoLEAST16 "o" -#define PRIoLEAST32 "o" -#define PRIoLEAST64 "I64o" - -#define PRIoFAST8 "o" -#define PRIoFAST16 "o" -#define PRIoFAST32 "o" -#define PRIoFAST64 "I64o" - -#define PRIoMAX "I64o" - -/* fprintf macros for unsigned types */ -#define PRIu8 "u" -#define PRIu16 "u" -#define PRIu32 "u" -#define PRIu64 "I64u" - - -#define PRIuLEAST8 "u" -#define PRIuLEAST16 "u" -#define PRIuLEAST32 "u" -#define PRIuLEAST64 "I64u" - -#define PRIuFAST8 "u" -#define PRIuFAST16 "u" -#define PRIuFAST32 "u" -#define PRIuFAST64 "I64u" - -#define PRIuMAX "I64u" - -#define PRIx8 "x" -#define PRIx16 "x" -#define PRIx32 "x" -#define PRIx64 "I64x" - -#define PRIxLEAST8 "x" -#define PRIxLEAST16 "x" -#define PRIxLEAST32 "x" -#define PRIxLEAST64 "I64x" - -#define PRIxFAST8 "x" -#define PRIxFAST16 "x" -#define PRIxFAST32 "x" -#define PRIxFAST64 "I64x" - -#define PRIxMAX "I64x" - -#define PRIX8 "X" -#define PRIX16 "X" -#define PRIX32 "X" -#define PRIX64 "I64X" - -#define PRIXLEAST8 "X" -#define PRIXLEAST16 "X" -#define PRIXLEAST32 "X" -#define PRIXLEAST64 "I64X" - -#define PRIXFAST8 "X" -#define PRIXFAST16 "X" -#define PRIXFAST32 "X" -#define PRIXFAST64 "I64X" - -#define PRIXMAX "I64X" - -/* - * fscanf macros for signed int types - * NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t - * (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have - * no length identifiers - */ - -#define SCNd16 "hd" -#define SCNd32 "d" -#define SCNd64 "I64d" - -#define SCNdLEAST16 "hd" -#define SCNdLEAST32 "d" -#define SCNdLEAST64 "I64d" - -#define SCNdFAST16 "hd" -#define SCNdFAST32 "d" -#define SCNdFAST64 "I64d" - -#define SCNdMAX "I64d" - -#define SCNi16 "hi" -#define SCNi32 "i" -#define SCNi64 "I64i" - -#define SCNiLEAST16 "hi" -#define SCNiLEAST32 "i" -#define SCNiLEAST64 "I64i" - -#define SCNiFAST16 "hi" -#define SCNiFAST32 "i" -#define SCNiFAST64 "I64i" - -#define SCNiMAX "I64i" - -#define SCNo16 "ho" -#define SCNo32 "o" -#define SCNo64 "I64o" - -#define SCNoLEAST16 "ho" -#define SCNoLEAST32 "o" -#define SCNoLEAST64 "I64o" - -#define SCNoFAST16 "ho" -#define SCNoFAST32 "o" -#define SCNoFAST64 "I64o" - -#define SCNoMAX "I64o" - -#define SCNx16 "hx" -#define SCNx32 "x" -#define SCNx64 "I64x" - -#define SCNxLEAST16 "hx" -#define SCNxLEAST32 "x" -#define SCNxLEAST64 "I64x" - -#define SCNxFAST16 "hx" -#define SCNxFAST32 "x" -#define SCNxFAST64 "I64x" - -#define SCNxMAX "I64x" - -/* fscanf macros for unsigned int types */ - -#define SCNu16 "hu" -#define SCNu32 "u" -#define SCNu64 "I64u" - -#define SCNuLEAST16 "hu" -#define SCNuLEAST32 "u" -#define SCNuLEAST64 "I64u" - -#define SCNuFAST16 "hu" -#define SCNuFAST32 "u" -#define SCNuFAST64 "I64u" - -#define SCNuMAX "I64u" - -#ifdef _WIN64 -#define PRIdPTR "I64d" -#define PRIiPTR "I64i" -#define PRIoPTR "I64o" -#define PRIuPTR "I64u" -#define PRIxPTR "I64x" -#define PRIXPTR "I64X" -#define SCNdPTR "I64d" -#define SCNiPTR "I64i" -#define SCNoPTR "I64o" -#define SCNxPTR "I64x" -#define SCNuPTR "I64u" -#else -#define PRIdPTR "d" -#define PRIiPTR "i" -#define PRIoPTR "o" -#define PRIuPTR "u" -#define PRIxPTR "x" -#define PRIXPTR "X" -#define SCNdPTR "d" -#define SCNiPTR "i" -#define SCNoPTR "o" -#define SCNxPTR "x" - #define SCNuPTR "u" -#endif - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -/* - * no length modifier for char types prior to C9x - * MS runtime scanf appears to treat "hh" as "h" - */ - -/* signed char */ -#define SCNd8 "hhd" -#define SCNdLEAST8 "hhd" -#define SCNdFAST8 "hhd" - -#define SCNi8 "hhi" -#define SCNiLEAST8 "hhi" -#define SCNiFAST8 "hhi" - -#define SCNo8 "hho" -#define SCNoLEAST8 "hho" -#define SCNoFAST8 "hho" - -#define SCNx8 "hhx" -#define SCNxLEAST8 "hhx" -#define SCNxFAST8 "hhx" - -/* unsigned char */ -#define SCNu8 "hhu" -#define SCNuLEAST8 "hhu" -#define SCNuFAST8 "hhu" -#endif /* __STDC_VERSION__ >= 199901 */ - - -#ifdef __cplusplus -} -#endif - -#endif /* ndef _INTTYPES_H */ diff --git a/Externals/libusbx/msvc/libusb_static_2005.vcproj b/Externals/libusbx/msvc/libusb_static_2005.vcproj deleted file mode 100644 index f7b8e45904..0000000000 --- a/Externals/libusbx/msvc/libusb_static_2005.vcproj +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Externals/libusbx/msvc/libusb_static_2010.vcxproj b/Externals/libusbx/msvc/libusb_static_2010.vcxproj deleted file mode 100644 index 73e5cbdb1d..0000000000 --- a/Externals/libusbx/msvc/libusb_static_2010.vcxproj +++ /dev/null @@ -1,213 +0,0 @@ - - - - - DebugFast - Win32 - - - DebugFast - x64 - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - libusb - {349EE8F9-7D25-4909-AAF5-FF3FADE72187} - libusb - - - - StaticLibrary - Unicode - true - - - StaticLibrary - Unicode - - - StaticLibrary - Unicode - - - StaticLibrary - Unicode - true - - - StaticLibrary - Unicode - - - StaticLibrary - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - libusb-1.0 - libusb-1.0 - libusb-1.0 - libusb-1.0 - libusb-1.0 - libusb-1.0 - $(SolutionDir)$(Platform)\$(Configuration)\ - $(SolutionDir)$(Platform)\$(Configuration)\ - $(SolutionDir)$(Platform)\$(Configuration)\ - $(SolutionDir)$(Platform)\$(Configuration)\ - $(SolutionDir)$(Platform)\$(Configuration)\ - $(SolutionDir)$(Platform)\$(Configuration)\ - - - - Disabled - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - Level4 - ProgramDatabase - - - $(OutDir)libusb-1.0.lib - - - - - Disabled - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - Level4 - ProgramDatabase - - - $(OutDir)libusb-1.0.lib - - - - - X64 - - - Disabled - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - Level4 - ProgramDatabase - - - $(OutDir)libusb-1.0.lib - - - - - X64 - - - Disabled - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - Level4 - ProgramDatabase - - - $(OutDir)libusb-1.0.lib - - - - - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - Level4 - - - $(OutDir)libusb-1.0.lib - - - - - X64 - - - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - Level4 - - - $(OutDir)libusb-1.0.lib - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Externals/libusbx/msvc/libusb_static_2012.vcxproj b/Externals/libusbx/msvc/libusb_static_2012.vcxproj deleted file mode 100644 index 844446c7fd..0000000000 --- a/Externals/libusbx/msvc/libusb_static_2012.vcxproj +++ /dev/null @@ -1,156 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - libusb-1.0 (static) - {349EE8F9-7D25-4909-AAF5-FF3FADE72187} - libusb - - - - StaticLibrary - Unicode - true - - - StaticLibrary - Unicode - - - StaticLibrary - Unicode - true - - - StaticLibrary - Unicode - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ - $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ - libusb-1.0 - libusb-1.0 - libusb-1.0 - libusb-1.0 - - - - Disabled - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - Level4 - ProgramDatabase - - - $(OutDir)libusb-1.0.lib - - - - - X64 - - - Disabled - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - Level4 - ProgramDatabase - - - $(OutDir)libusb-1.0.lib - - - - - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - Level4 - - - $(OutDir)libusb-1.0.lib - - - - - X64 - - - .;..\libusb;%(AdditionalIncludeDirectories) - _WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - Level4 - - - $(OutDir)libusb-1.0.lib - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Externals/libusbx/msvc/libusb_static_2012.vcxproj.filters b/Externals/libusbx/msvc/libusb_static_2012.vcxproj.filters deleted file mode 100644 index 5cd8060659..0000000000 --- a/Externals/libusbx/msvc/libusb_static_2012.vcxproj.filters +++ /dev/null @@ -1,74 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - \ No newline at end of file diff --git a/Externals/libusbx/msvc/libusb_static_2013.vcxproj b/Externals/libusbx/msvc/libusb_static_2013.vcxproj new file mode 100644 index 0000000000..b3a79c645c --- /dev/null +++ b/Externals/libusbx/msvc/libusb_static_2013.vcxproj @@ -0,0 +1,76 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {349EE8F9-7D25-4909-AAF5-FF3FADE72187} + libusb-1.0 + + + + StaticLibrary + v120 + Unicode + + + true + + + false + + + + + + + + + + + + .;..\libusb;%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Externals/libusbx/msvc/libusb_static_2010.vcxproj.filters b/Externals/libusbx/msvc/libusb_static_2013.vcxproj.filters similarity index 100% rename from Externals/libusbx/msvc/libusb_static_2010.vcxproj.filters rename to Externals/libusbx/msvc/libusb_static_2013.vcxproj.filters diff --git a/Externals/libusbx/msvc/stdint.h b/Externals/libusbx/msvc/stdint.h deleted file mode 100644 index 00988d9bba..0000000000 --- a/Externals/libusbx/msvc/stdint.h +++ /dev/null @@ -1,256 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file was originally part of the w64 mingw-runtime package. - */ - -/* ISO C9x 7.18 Integer types - * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794) - * - * THIS SOFTWARE IS NOT COPYRIGHTED - * - * Contributor: Danny Smith - * Modified for libusb/MSVC: Pete Batard - * - * This source code is offered for use in the public domain. You may - * use, modify or distribute it freely. - * - * This code is distributed in the hope that it will be useful but - * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY - * DISCLAIMED. This includes but is not limited to warranties of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Date: 2010-04-02 - */ - -#ifndef _MSC_VER -#error This header should only be used with Microsoft compilers -#endif - -#ifndef _STDINT_H -#define _STDINT_H - -#ifndef _INTPTR_T_DEFINED -#define _INTPTR_T_DEFINED -#ifndef __intptr_t_defined -#define __intptr_t_defined -#undef intptr_t -#ifdef _WIN64 - typedef __int64 intptr_t; -#else - typedef int intptr_t; -#endif /* _WIN64 */ -#endif /* __intptr_t_defined */ -#endif /* _INTPTR_T_DEFINED */ - -#ifndef _UINTPTR_T_DEFINED -#define _UINTPTR_T_DEFINED -#ifndef __uintptr_t_defined -#define __uintptr_t_defined -#undef uintptr_t -#ifdef _WIN64 - typedef unsigned __int64 uintptr_t; -#else - typedef unsigned int uintptr_t; -#endif /* _WIN64 */ -#endif /* __uintptr_t_defined */ -#endif /* _UINTPTR_T_DEFINED */ - -#ifndef _PTRDIFF_T_DEFINED -#define _PTRDIFF_T_DEFINED -#ifndef _PTRDIFF_T_ -#define _PTRDIFF_T_ -#undef ptrdiff_t -#ifdef _WIN64 - typedef __int64 ptrdiff_t; -#else - typedef int ptrdiff_t; -#endif /* _WIN64 */ -#endif /* _PTRDIFF_T_ */ -#endif /* _PTRDIFF_T_DEFINED */ - -#ifndef _WCHAR_T_DEFINED -#define _WCHAR_T_DEFINED -#ifndef __cplusplus - typedef unsigned short wchar_t; -#endif /* C++ */ -#endif /* _WCHAR_T_DEFINED */ - -#ifndef _WCTYPE_T_DEFINED -#define _WCTYPE_T_DEFINED -#ifndef _WINT_T -#define _WINT_T - typedef unsigned short wint_t; - typedef unsigned short wctype_t; -#endif /* _WINT_T */ -#endif /* _WCTYPE_T_DEFINED */ - -/* 7.18.1.1 Exact-width integer types */ -typedef __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -/* 7.18.1.2 Minimum-width integer types */ -typedef signed char int_least8_t; -typedef unsigned char uint_least8_t; -typedef short int_least16_t; -typedef unsigned short uint_least16_t; -typedef int int_least32_t; -typedef unsigned uint_least32_t; -typedef __int64 int_least64_t; -typedef unsigned __int64 uint_least64_t; - -/* 7.18.1.3 Fastest minimum-width integer types - * Not actually guaranteed to be fastest for all purposes - * Here we use the exact-width types for 8 and 16-bit ints. - */ -typedef __int8 int_fast8_t; -typedef unsigned __int8 uint_fast8_t; -typedef __int16 int_fast16_t; -typedef unsigned __int16 uint_fast16_t; -typedef __int32 int_fast32_t; -typedef unsigned __int32 uint_fast32_t; -typedef __int64 int_fast64_t; -typedef unsigned __int64 uint_fast64_t; - -/* 7.18.1.5 Greatest-width integer types */ -typedef __int64 intmax_t; -typedef unsigned __int64 uintmax_t; - -/* 7.18.2 Limits of specified-width integer types */ - -/* 7.18.2.1 Limits of exact-width integer types */ -#define INT8_MIN (-128) -#define INT16_MIN (-32768) -#define INT32_MIN (-2147483647 - 1) -#define INT64_MIN (-9223372036854775807LL - 1) - -#define INT8_MAX 127 -#define INT16_MAX 32767 -#define INT32_MAX 2147483647 -#define INT64_MAX 9223372036854775807LL - -#define UINT8_MAX 255 -#define UINT16_MAX 65535 -#define UINT32_MAX 0xffffffffU /* 4294967295U */ -#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */ - -/* 7.18.2.2 Limits of minimum-width integer types */ -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST64_MIN INT64_MIN - -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MAX INT64_MAX - -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -/* 7.18.2.3 Limits of fastest minimum-width integer types */ -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST64_MIN INT64_MIN - -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MAX INT64_MAX - -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -/* 7.18.2.4 Limits of integer types capable of holding - object pointers */ -#ifdef _WIN64 -#define INTPTR_MIN INT64_MIN -#define INTPTR_MAX INT64_MAX -#define UINTPTR_MAX UINT64_MAX -#else -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#endif - -/* 7.18.2.5 Limits of greatest-width integer types */ -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -/* 7.18.3 Limits of other integer types */ -#ifdef _WIN64 -#define PTRDIFF_MIN INT64_MIN -#define PTRDIFF_MAX INT64_MAX -#else -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#endif - -#define SIG_ATOMIC_MIN INT32_MIN -#define SIG_ATOMIC_MAX INT32_MAX - -#ifndef SIZE_MAX -#ifdef _WIN64 -#define SIZE_MAX UINT64_MAX -#else -#define SIZE_MAX UINT32_MAX -#endif -#endif - -#ifndef WCHAR_MIN /* also in wchar.h */ -#define WCHAR_MIN 0U -#define WCHAR_MAX 0xffffU -#endif - -/* - * wint_t is unsigned short for compatibility with MS runtime - */ -#define WINT_MIN 0U -#define WINT_MAX 0xffffU - - -/* 7.18.4 Macros for integer constants */ - -/* 7.18.4.1 Macros for minimum-width integer constants - - Accoding to Douglas Gwyn : - "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC - 9899:1999 as initially published, the expansion was required - to be an integer constant of precisely matching type, which - is impossible to accomplish for the shorter types on most - platforms, because C99 provides no standard way to designate - an integer constant with width less than that of type int. - TC1 changed this to require just an integer constant - *expression* with *promoted* type." - - The trick used here is from Clive D W Feather. -*/ - -#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val)) -#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val)) -#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val)) -/* The 'trick' doesn't work in C89 for long long because, without - suffix, (val) will be evaluated as int, not intmax_t */ -#define INT64_C(val) val##i64 - -#define UINT8_C(val) (val) -#define UINT16_C(val) (val) -#define UINT32_C(val) (val##i32) -#define UINT64_C(val) val##ui64 - -/* 7.18.4.2 Macros for greatest-width integer constants */ -#define INTMAX_C(val) val##i64 -#define UINTMAX_C(val) val##ui64 - -#endif diff --git a/Externals/miniupnpc/miniupnpc.vcxproj b/Externals/miniupnpc/miniupnpc.vcxproj index db92cd61f9..b2b8d568e8 100644 --- a/Externals/miniupnpc/miniupnpc.vcxproj +++ b/Externals/miniupnpc/miniupnpc.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -19,112 +19,28 @@ - {A680190D-0764-485B-9CF3-A82C5EDD5715} - miniupnpc + {31643FDB-1BB8-4965-9DE7-000FC88D35AE} - + StaticLibrary + v120 + Unicode + + true - MultiByte - - StaticLibrary - true - MultiByte - - - StaticLibrary + false - true - MultiByte - - - StaticLibrary - false - true - MultiByte - + - - - - - - - - - - - - - - - - - - - - - - - Level3 - Disabled - _WIN32_WINNT=0x0501;STATICLIB;DEBUG - - - true - ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies) - - - - - Level3 - Disabled - _WIN32_WINNT=0x0501;STATICLIB;DEBUG - - - true - ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies) - - - - - Level3 - MaxSpeed - true - true - _WIN32_WINNT=0x0501;STATICLIB - - - true - true - true - ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies) - - - - - Level3 - MaxSpeed - true - true - _WIN32_WINNT=0x0501;STATICLIB - - - true - true - true - ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies) - - @@ -158,6 +74,17 @@ + + + + + + + + + + + diff --git a/Externals/miniupnpc/miniupnpc.vcxproj.filters b/Externals/miniupnpc/miniupnpc.vcxproj.filters deleted file mode 100644 index 1b4bfa312a..0000000000 --- a/Externals/miniupnpc/miniupnpc.vcxproj.filters +++ /dev/null @@ -1,108 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/Externals/msvcrt/Win32/msvcp120.dll b/Externals/msvcrt/Win32/msvcp120.dll new file mode 100644 index 0000000000..a237d2d778 Binary files /dev/null and b/Externals/msvcrt/Win32/msvcp120.dll differ diff --git a/Externals/msvcrt/Win32/msvcr120.dll b/Externals/msvcrt/Win32/msvcr120.dll new file mode 100644 index 0000000000..8c36149a65 Binary files /dev/null and b/Externals/msvcrt/Win32/msvcr120.dll differ diff --git a/Externals/msvcrt/Win32/vcomp100.dll b/Externals/msvcrt/Win32/vcomp100.dll deleted file mode 100644 index 579e4381ff..0000000000 Binary files a/Externals/msvcrt/Win32/vcomp100.dll and /dev/null differ diff --git a/Externals/msvcrt/Win32/vcomp120.dll b/Externals/msvcrt/Win32/vcomp120.dll new file mode 100644 index 0000000000..727a120287 Binary files /dev/null and b/Externals/msvcrt/Win32/vcomp120.dll differ diff --git a/Externals/msvcrt/x64/msvcp120.dll b/Externals/msvcrt/x64/msvcp120.dll new file mode 100644 index 0000000000..4ea1efa734 Binary files /dev/null and b/Externals/msvcrt/x64/msvcp120.dll differ diff --git a/Externals/msvcrt/x64/msvcr120.dll b/Externals/msvcrt/x64/msvcr120.dll new file mode 100644 index 0000000000..d711c92232 Binary files /dev/null and b/Externals/msvcrt/x64/msvcr120.dll differ diff --git a/Externals/msvcrt/x64/vcomp100.dll b/Externals/msvcrt/x64/vcomp100.dll deleted file mode 100644 index 15ab393e85..0000000000 Binary files a/Externals/msvcrt/x64/vcomp100.dll and /dev/null differ diff --git a/Externals/msvcrt/x64/vcomp120.dll b/Externals/msvcrt/x64/vcomp120.dll new file mode 100644 index 0000000000..34e1fb09dc Binary files /dev/null and b/Externals/msvcrt/x64/vcomp120.dll differ diff --git a/Externals/polarssl/visualc/PolarSSL.vcxproj b/Externals/polarssl/visualc/PolarSSL.vcxproj new file mode 100644 index 0000000000..26eed64a3a --- /dev/null +++ b/Externals/polarssl/visualc/PolarSSL.vcxproj @@ -0,0 +1,97 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {BDB6578B-0691-4E80-A46C-DF21639FD3B8} + + + + StaticLibrary + v120 + Unicode + + + true + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Externals/portaudio/Win32/Debug/portaudio.lib b/Externals/portaudio/Win32/Debug/portaudio.lib deleted file mode 100644 index 058b3c404c..0000000000 Binary files a/Externals/portaudio/Win32/Debug/portaudio.lib and /dev/null differ diff --git a/Externals/portaudio/Win32/Debug/portaudio.pdb b/Externals/portaudio/Win32/Debug/portaudio.pdb deleted file mode 100644 index c9269f2c5d..0000000000 Binary files a/Externals/portaudio/Win32/Debug/portaudio.pdb and /dev/null differ diff --git a/Externals/portaudio/Win32/DebugFast/portaudio.lib b/Externals/portaudio/Win32/DebugFast/portaudio.lib deleted file mode 100644 index 30874d6f05..0000000000 Binary files a/Externals/portaudio/Win32/DebugFast/portaudio.lib and /dev/null differ diff --git a/Externals/portaudio/Win32/DebugFast/portaudio.pdb b/Externals/portaudio/Win32/DebugFast/portaudio.pdb deleted file mode 100644 index 12415be92d..0000000000 Binary files a/Externals/portaudio/Win32/DebugFast/portaudio.pdb and /dev/null differ diff --git a/Externals/portaudio/Win32/Release/portaudio.lib b/Externals/portaudio/Win32/Release/portaudio.lib deleted file mode 100644 index 30874d6f05..0000000000 Binary files a/Externals/portaudio/Win32/Release/portaudio.lib and /dev/null differ diff --git a/Externals/portaudio/Win32/Release/portaudio.pdb b/Externals/portaudio/Win32/Release/portaudio.pdb deleted file mode 100644 index 12415be92d..0000000000 Binary files a/Externals/portaudio/Win32/Release/portaudio.pdb and /dev/null differ diff --git a/Externals/portaudio/build/dolphin-notes.txt b/Externals/portaudio/build/dolphin-notes.txt new file mode 100644 index 0000000000..b6d3707a69 --- /dev/null +++ b/Externals/portaudio/build/dolphin-notes.txt @@ -0,0 +1,6 @@ +This directory contains the Visual Studio project files which are used to build portaudio. +* portaudio's files were very old and messy +* Makes it easier to update portaudio in the future +* Uses dolphin's VSProps, so we know it's properly compatible + +See full portaudio distribution for instructions about building and using portaudio. diff --git a/Externals/portaudio/build/portaudio.vcxproj b/Externals/portaudio/build/portaudio.vcxproj new file mode 100644 index 0000000000..823ce889f1 --- /dev/null +++ b/Externals/portaudio/build/portaudio.vcxproj @@ -0,0 +1,87 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {0A18A071-125E-442F-AFF7-A3F68ABECF99} + + + + StaticLibrary + v120 + Unicode + + + true + + + false + + + + + + + + + + + + ..\src\common;..\include;.\;..\src\os\win;%(AdditionalIncludeDirectories) + PA_WDMKS_NO_KSGUID_LIB;PA_USE_ASIO=0;PA_USE_DS=0;PA_USE_WMME=1;PA_USE_WASAPI=1;PA_USE_WDMKS=0;PA_ENABLE_DEBUG_OUTPUT;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Externals/portaudio/build/portaudio.vcxproj.filters b/Externals/portaudio/build/portaudio.vcxproj.filters new file mode 100644 index 0000000000..1774a1ea02 --- /dev/null +++ b/Externals/portaudio/build/portaudio.vcxproj.filters @@ -0,0 +1,125 @@ + + + + + {69112e69-92e4-40c1-aa5b-e4c4780ade42} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {ddf0cf9b-f2df-4549-a447-8d7c4c2128d7} + + + {219121eb-0c81-4948-a94c-6802cf152776} + + + {17688226-7728-4556-83a7-8e85b561ccca} + + + {520ee766-8582-402e-a935-bdbcaa0d44de} + + + {3891bf2e-9681-4394-be07-88e0a3fd2a68} + + + {16791044-a8a5-4f21-b032-08245e52777a} + + + {bde5e4fb-71f2-4cdf-8879-5370d0e12697} + + + {f1e8b583-742d-46a2-ac7f-060aabdc3a2c} + + + {d8832c7e-2dd0-48e7-8227-23b0d04c1879} + h;hpp;hxx;hm;inl + + + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\common + + + Source Files\hostapi\dsound + + + Source Files\hostapi\dsound + + + Source Files\hostapi\wmme + + + Source Files\hostapi\wasapi + + + Source Files\hostapi\wdmks + + + Source Files\os\win + + + Source Files\os\win + + + Source Files\os\win + + + Source Files\os\win + + + Source Files\os\win + + + Source Files\os\win + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Externals/portaudio/src/SConscript b/Externals/portaudio/src/SConscript new file mode 100644 index 0000000000..5cc915216d --- /dev/null +++ b/Externals/portaudio/src/SConscript @@ -0,0 +1,220 @@ +import os.path, copy, sys + +def checkSymbol(conf, header, library=None, symbol=None, autoAdd=True, critical=False, pkgName=None): + """ Check for symbol in library, optionally look only for header. + @param conf: Configure instance. + @param header: The header file where the symbol is declared. + @param library: The library in which the symbol exists, if None it is taken to be the standard C library. + @param symbol: The symbol to look for, if None only the header will be looked up. + @param autoAdd: Automatically link with this library if check is positive. + @param critical: Raise on error? + @param pkgName: Optional name of pkg-config entry for library, to determine build parameters. + @return: True/False + """ + origEnv = conf.env.Copy() # Copy unmodified environment so we can restore it upon error + env = conf.env + if library is None: + library = "c" # Standard library + autoAdd = False + + if pkgName is not None: + origLibs = copy.copy(env.get("LIBS", None)) + + try: env.ParseConfig("pkg-config --silence-errors %s --cflags --libs" % pkgName) + except: pass + else: + # I see no other way of checking that the parsing succeeded, if it did add no more linking parameters + if env.get("LIBS", None) != origLibs: + autoAdd = False + + try: + if not conf.CheckCHeader(header, include_quotes="<>"): + raise ConfigurationError("missing header %s" % header) + if symbol is not None and not conf.CheckLib(library, symbol, language="C", autoadd=autoAdd): + raise ConfigurationError("missing symbol %s in library %s" % (symbol, library)) + except ConfigurationError: + conf.env = origEnv + if not critical: + return False + raise + + return True + +import SCons.Errors + +# Import common variables + +# Could use '#' to refer to top-level SConstruct directory, but looks like env.SConsignFile doesn't interpret this at least :( +sconsDir = os.path.abspath(os.path.join("build", "scons")) + +try: + Import("Platform", "Posix", "ConfigurationError", "ApiVer") +except SCons.Errors.UserError: + # The common objects must be exported first + SConscript(os.path.join(sconsDir, "SConscript_common")) + Import("Platform", "Posix", "ConfigurationError", "ApiVer") + +Import("env") + +# This will be manipulated +env = env.Copy() + +# We operate with a set of needed libraries and optional libraries, the latter stemming from host API implementations. +# For libraries of both types we record a set of values that is used to look for the library in question, during +# configuration. If the corresponding library for a host API implementation isn't found, the implementation is left out. +neededLibs = [] +optionalImpls = {} +if Platform in Posix: + env.Append(CPPPATH=os.path.join("os", "unix")) + neededLibs += [("pthread", "pthread.h", "pthread_create"), ("m", "math.h", "sin")] + if env["useALSA"]: + optionalImpls["ALSA"] = ("asound", "alsa/asoundlib.h", "snd_pcm_open") + if env["useJACK"]: + optionalImpls["JACK"] = ("jack", "jack/jack.h", "jack_client_new") + if env["useOSS"]: + # TODO: It looks like the prefix for soundcard.h depends on the platform + optionalImpls["OSS"] = ("oss", "sys/soundcard.h", None) + if Platform == 'netbsd': + optionalImpls["OSS"] = ("ossaudio", "sys/soundcard.h", "_oss_ioctl") + if env["useASIHPI"]: + optionalImpls["ASIHPI"] = ("hpi", "asihpi/hpi.h", "HPI_SubSysCreate") + if env["useCOREAUDIO"]: + optionalImpls["COREAUDIO"] = ("CoreAudio", "CoreAudio/CoreAudio.h", None) +else: + raise ConfigurationError("unknown platform %s" % Platform) + +if Platform == "darwin": + env.Append(LINKFLAGS="-framework CoreFoundation -framework CoreServices -framework CoreAudio -framework AudioToolBox -framework AudioUnit") +elif Platform == "cygwin": + env.Append(LIBS=["winmm"]) +elif Platform == "irix": + neededLibs += [("audio", "dmedia/audio.h", "alOpenPort"), ("dmedia", "dmedia/dmedia.h", "dmGetUST")] + env.Append(CPPDEFINES=["PA_USE_SGI"]) + +def CheckCTypeSize(context, tp): + """ Check size of C type. + @param context: A configuration context. + @param tp: The type to check. + @return: Size of type, in bytes. + """ + context.Message("Checking the size of C type %s..." % tp) + ret = context.TryRun(""" +#include + +int main() { + printf("%%d", sizeof(%s)); + return 0; +} +""" % tp, ".c") + if not ret[0]: + context.Result(" Couldn't obtain size of type %s!" % tp) + return None + + assert ret[1] + sz = int(ret[1]) + context.Result("%d" % sz) + return sz + +""" +if sys.byteorder == "little": + env.Append(CPPDEFINES=["PA_LITTLE_ENDIAN"]) +elif sys.byteorder == "big": + env.Append(CPPDEFINES=["PA_BIG_ENDIAN"]) +else: + raise ConfigurationError("unknown byte order: %s" % sys.byteorder) +""" +if env["enableDebugOutput"]: + env.Append(CPPDEFINES=["PA_ENABLE_DEBUG_OUTPUT"]) + +# Start configuration + +# Use an absolute path for conf_dir, otherwise it gets created both relative to current directory and build directory +conf = env.Configure(log_file=os.path.join(sconsDir, "sconf.log"), custom_tests={"CheckCTypeSize": CheckCTypeSize}, + conf_dir=os.path.join(sconsDir, ".sconf_temp")) +conf.env.Append(CPPDEFINES=["SIZEOF_SHORT=%d" % conf.CheckCTypeSize("short")]) +conf.env.Append(CPPDEFINES=["SIZEOF_INT=%d" % conf.CheckCTypeSize("int")]) +conf.env.Append(CPPDEFINES=["SIZEOF_LONG=%d" % conf.CheckCTypeSize("long")]) +if checkSymbol(conf, "time.h", "rt", "clock_gettime"): + conf.env.Append(CPPDEFINES=["HAVE_CLOCK_GETTIME"]) +if checkSymbol(conf, "time.h", symbol="nanosleep"): + conf.env.Append(CPPDEFINES=["HAVE_NANOSLEEP"]) +if conf.CheckCHeader("sys/soundcard.h"): + conf.env.Append(CPPDEFINES=["HAVE_SYS_SOUNDCARD_H"]) +if conf.CheckCHeader("linux/soundcard.h"): + conf.env.Append(CPPDEFINES=["HAVE_LINUX_SOUNDCARD_H"]) +if conf.CheckCHeader("machine/soundcard.h"): + conf.env.Append(CPPDEFINES=["HAVE_MACHINE_SOUNDCARD_H"]) + +# Look for needed libraries and link with them +for lib, hdr, sym in neededLibs: + checkSymbol(conf, hdr, lib, sym, critical=True) +# Look for host API libraries, if a library isn't found disable corresponding host API implementation. +for name, val in optionalImpls.items(): + lib, hdr, sym = val + if checkSymbol(conf, hdr, lib, sym, critical=False, pkgName=name.lower()): + conf.env.Append(CPPDEFINES=["PA_USE_%s=1" % name.upper()]) + else: + del optionalImpls[name] + +# Configuration finished +env = conf.Finish() + +# PA infrastructure +CommonSources = [os.path.join("common", f) for f in "pa_allocation.c pa_converters.c pa_cpuload.c pa_dither.c pa_front.c \ + pa_process.c pa_stream.c pa_trace.c pa_debugprint.c pa_ringbuffer.c".split()] +CommonSources.append(os.path.join("hostapi", "skeleton", "pa_hostapi_skeleton.c")) + +# Host APIs implementations +ImplSources = [] +if Platform in Posix: + ImplSources += [os.path.join("os", "unix", f) for f in "pa_unix_hostapis.c pa_unix_util.c".split()] + +if "ALSA" in optionalImpls: + ImplSources.append(os.path.join("hostapi", "alsa", "pa_linux_alsa.c")) +if "JACK" in optionalImpls: + ImplSources.append(os.path.join("hostapi", "jack", "pa_jack.c")) +if "OSS" in optionalImpls: + ImplSources.append(os.path.join("hostapi", "oss", "pa_unix_oss.c")) +if "ASIHPI" in optionalImpls: + ImplSources.append(os.path.join("hostapi", "asihpi", "pa_linux_asihpi.c")) +if "COREAUDIO" in optionalImpls: + ImplSources.append([os.path.join("hostapi", "coreaudio", f) for f in """ + pa_mac_core.c pa_mac_core_blocking.c pa_mac_core_utilities.c + """.split()]) + + +sources = CommonSources + ImplSources + +sharedLibEnv = env.Copy() +if Platform in Posix: + # Add soname to library, this is so a reference is made to the versioned library in programs linking against libportaudio.so + if Platform != 'darwin': + sharedLibEnv.AppendUnique(SHLINKFLAGS="-Wl,-soname=libportaudio.so.%d" % int(ApiVer.split(".")[0])) +sharedLib = sharedLibEnv.SharedLibrary(target="portaudio", source=sources) + +staticLib = env.StaticLibrary(target="portaudio", source=sources) + +if Platform in Posix: + prefix = env["prefix"] + includeDir = os.path.join(prefix, "include") + libDir = os.path.join(prefix, "lib") + +testNames = ["patest_sine", "paqa_devs", "paqa_errs", "patest1", "patest_buffer", "patest_callbackstop", "patest_clip", \ + "patest_dither", "patest_hang", "patest_in_overflow", "patest_latency", "patest_leftright", "patest_longsine", \ + "patest_many", "patest_maxsines", "patest_multi_sine", "patest_out_underflow", "patest_pink", "patest_prime", \ + "patest_read_record", "patest_record", "patest_ringmix", "patest_saw", "patest_sine8", "patest_sine", \ + "patest_sine_time", "patest_start_stop", "patest_stop", "patest_sync", "patest_toomanysines", \ + "patest_underflow", "patest_wire", "patest_write_sine", "pa_devs", "pa_fuzz", "pa_minlat", \ + "patest_sine_channelmaps",] + +# The test directory ("bin") should be in the top-level PA directory +tests = [env.Program(target=os.path.join("#", "bin", name), source=[os.path.join("#", "test", name + ".c"), + staticLib]) for name in testNames] + +# Detect host APIs +hostApis = [] +for cppdef in env["CPPDEFINES"]: + if cppdef.startswith("PA_USE_"): + hostApis.append(cppdef[7:-2]) + +Return("sources", "sharedLib", "staticLib", "tests", "env", "hostApis") diff --git a/Externals/portaudio/src/common/pa_allocation.c b/Externals/portaudio/src/common/pa_allocation.c new file mode 100644 index 0000000000..c78c2cf7e2 --- /dev/null +++ b/Externals/portaudio/src/common/pa_allocation.c @@ -0,0 +1,243 @@ +/* + * $Id: pa_allocation.c 1097 2006-08-26 08:27:53Z rossb $ + * Portable Audio I/O Library allocation group implementation + * memory allocation group for tracking allocation groups + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Allocation Group implementation. +*/ + + +#include "pa_allocation.h" +#include "pa_util.h" + + +/* + Maintain 3 singly linked lists... + linkBlocks: the buffers used to allocate the links + spareLinks: links available for use in the allocations list + allocations: the buffers currently allocated using PaUtil_ContextAllocateMemory() + + Link block size is doubled every time new links are allocated. +*/ + + +#define PA_INITIAL_LINK_COUNT_ 16 + +struct PaUtilAllocationGroupLink +{ + struct PaUtilAllocationGroupLink *next; + void *buffer; +}; + +/* + Allocate a block of links. The first link will have it's buffer member + pointing to the block, and it's next member set to . The remaining + links will have NULL buffer members, and each link will point to + the next link except the last, which will point to +*/ +static struct PaUtilAllocationGroupLink *AllocateLinks( long count, + struct PaUtilAllocationGroupLink *nextBlock, + struct PaUtilAllocationGroupLink *nextSpare ) +{ + struct PaUtilAllocationGroupLink *result; + int i; + + result = (struct PaUtilAllocationGroupLink *)PaUtil_AllocateMemory( + sizeof(struct PaUtilAllocationGroupLink) * count ); + if( result ) + { + /* the block link */ + result[0].buffer = result; + result[0].next = nextBlock; + + /* the spare links */ + for( i=1; ilinkCount = PA_INITIAL_LINK_COUNT_; + result->linkBlocks = &links[0]; + result->spareLinks = &links[1]; + result->allocations = 0; + } + else + { + PaUtil_FreeMemory( links ); + } + } + + return result; +} + + +void PaUtil_DestroyAllocationGroup( PaUtilAllocationGroup* group ) +{ + struct PaUtilAllocationGroupLink *current = group->linkBlocks; + struct PaUtilAllocationGroupLink *next; + + while( current ) + { + next = current->next; + PaUtil_FreeMemory( current->buffer ); + current = next; + } + + PaUtil_FreeMemory( group ); +} + + +void* PaUtil_GroupAllocateMemory( PaUtilAllocationGroup* group, long size ) +{ + struct PaUtilAllocationGroupLink *links, *link; + void *result = 0; + + /* allocate more links if necessary */ + if( !group->spareLinks ) + { + /* double the link count on each block allocation */ + links = AllocateLinks( group->linkCount, group->linkBlocks, group->spareLinks ); + if( links ) + { + group->linkCount += group->linkCount; + group->linkBlocks = &links[0]; + group->spareLinks = &links[1]; + } + } + + if( group->spareLinks ) + { + result = PaUtil_AllocateMemory( size ); + if( result ) + { + link = group->spareLinks; + group->spareLinks = link->next; + + link->buffer = result; + link->next = group->allocations; + + group->allocations = link; + } + } + + return result; +} + + +void PaUtil_GroupFreeMemory( PaUtilAllocationGroup* group, void *buffer ) +{ + struct PaUtilAllocationGroupLink *current = group->allocations; + struct PaUtilAllocationGroupLink *previous = 0; + + if( buffer == 0 ) + return; + + /* find the right link and remove it */ + while( current ) + { + if( current->buffer == buffer ) + { + if( previous ) + { + previous->next = current->next; + } + else + { + group->allocations = current->next; + } + + current->buffer = 0; + current->next = group->spareLinks; + group->spareLinks = current; + + break; + } + + previous = current; + current = current->next; + } + + PaUtil_FreeMemory( buffer ); /* free the memory whether we found it in the list or not */ +} + + +void PaUtil_FreeAllAllocations( PaUtilAllocationGroup* group ) +{ + struct PaUtilAllocationGroupLink *current = group->allocations; + struct PaUtilAllocationGroupLink *previous = 0; + + /* free all buffers in the allocations list */ + while( current ) + { + PaUtil_FreeMemory( current->buffer ); + current->buffer = 0; + + previous = current; + current = current->next; + } + + /* link the former allocations list onto the front of the spareLinks list */ + if( previous ) + { + previous->next = group->spareLinks; + group->spareLinks = group->allocations; + group->allocations = 0; + } +} + diff --git a/Externals/portaudio/src/common/pa_allocation.h b/Externals/portaudio/src/common/pa_allocation.h new file mode 100644 index 0000000000..811dd72e0e --- /dev/null +++ b/Externals/portaudio/src/common/pa_allocation.h @@ -0,0 +1,104 @@ +#ifndef PA_ALLOCATION_H +#define PA_ALLOCATION_H +/* + * $Id: pa_allocation.h 1339 2008-02-15 07:50:33Z rossb $ + * Portable Audio I/O Library allocation context header + * memory allocation context for tracking allocation groups + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Allocation Group prototypes. An Allocation Group makes it easy to + allocate multiple blocks of memory and free them all at once. + + An allocation group is useful for keeping track of multiple blocks + of memory which are allocated at the same time (such as during initialization) + and need to be deallocated at the same time. The allocation group maintains + a list of allocated blocks, and can free all allocations at once. This + can be usefull for cleaning up after a partially initialized object fails. + + The allocation group implementation is built on top of the lower + level allocation functions defined in pa_util.h +*/ + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +typedef struct +{ + long linkCount; + struct PaUtilAllocationGroupLink *linkBlocks; + struct PaUtilAllocationGroupLink *spareLinks; + struct PaUtilAllocationGroupLink *allocations; +}PaUtilAllocationGroup; + + + +/** Create an allocation group. +*/ +PaUtilAllocationGroup* PaUtil_CreateAllocationGroup( void ); + +/** Destroy an allocation group, but not the memory allocated through the group. +*/ +void PaUtil_DestroyAllocationGroup( PaUtilAllocationGroup* group ); + +/** Allocate a block of memory though an allocation group. +*/ +void* PaUtil_GroupAllocateMemory( PaUtilAllocationGroup* group, long size ); + +/** Free a block of memory that was previously allocated though an allocation + group. Calling this function is a relatively time consuming operation. + Under normal circumstances clients should call PaUtil_FreeAllAllocations to + free all allocated blocks simultaneously. + @see PaUtil_FreeAllAllocations +*/ +void PaUtil_GroupFreeMemory( PaUtilAllocationGroup* group, void *buffer ); + +/** Free all blocks of memory which have been allocated through the allocation + group. This function doesn't destroy the group itself. +*/ +void PaUtil_FreeAllAllocations( PaUtilAllocationGroup* group ); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_ALLOCATION_H */ diff --git a/Externals/portaudio/src/common/pa_converters.c b/Externals/portaudio/src/common/pa_converters.c new file mode 100644 index 0000000000..ef65b68a5c --- /dev/null +++ b/Externals/portaudio/src/common/pa_converters.c @@ -0,0 +1,1983 @@ +/* + * $Id: pa_converters.c 1748 2011-09-01 22:08:32Z philburk $ + * Portable Audio I/O Library sample conversion mechanism + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Phil Burk, Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Conversion function implementations. + + If the C9x function lrintf() is available, define PA_USE_C99_LRINTF to use it + + @todo Consider whether functions which dither but don't clip should exist, + V18 automatically enabled clipping whenever dithering was selected. Perhaps + we should do the same. + see: "require clipping for dithering sample conversion functions?" + http://www.portaudio.com/trac/ticket/112 + + @todo implement the converters marked IMPLEMENT ME: Int32_To_Int24_Dither, + Int32_To_UInt8_Dither, Int24_To_Int16_Dither, Int24_To_Int8_Dither, + Int24_To_UInt8_Dither, Int16_To_Int8_Dither, Int16_To_UInt8_Dither + see: "some conversion functions are not implemented in pa_converters.c" + http://www.portaudio.com/trac/ticket/35 + + @todo review the converters marked REVIEW: Float32_To_Int32, + Float32_To_Int32_Dither, Float32_To_Int32_Clip, Float32_To_Int32_DitherClip, + Int32_To_Int16_Dither, Int32_To_Int8_Dither, Int16_To_Int32 +*/ + + +#include "pa_converters.h" +#include "pa_dither.h" +#include "pa_endianness.h" +#include "pa_types.h" + + +PaSampleFormat PaUtil_SelectClosestAvailableFormat( + PaSampleFormat availableFormats, PaSampleFormat format ) +{ + PaSampleFormat result; + + format &= ~paNonInterleaved; + availableFormats &= ~paNonInterleaved; + + if( (format & availableFormats) == 0 ) + { + /* NOTE: this code depends on the sample format constants being in + descending order of quality - ie best quality is 0 + FIXME: should write an assert which checks that all of the + known constants conform to that requirement. + */ + + if( format != 0x01 ) + { + /* scan for better formats */ + result = format; + do + { + result >>= 1; + } + while( (result & availableFormats) == 0 && result != 0 ); + } + else + { + result = 0; + } + + if( result == 0 ){ + /* scan for worse formats */ + result = format; + do + { + result <<= 1; + } + while( (result & availableFormats) == 0 && result != paCustomFormat ); + + if( (result & availableFormats) == 0 ) + result = paSampleFormatNotSupported; + } + + }else{ + result = format; + } + + return result; +} + +/* -------------------------------------------------------------------------- */ + +#define PA_SELECT_FORMAT_( format, float32, int32, int24, int16, int8, uint8 ) \ + switch( format & ~paNonInterleaved ){ \ + case paFloat32: \ + float32 \ + case paInt32: \ + int32 \ + case paInt24: \ + int24 \ + case paInt16: \ + int16 \ + case paInt8: \ + int8 \ + case paUInt8: \ + uint8 \ + default: return 0; \ + } + +/* -------------------------------------------------------------------------- */ + +#define PA_SELECT_CONVERTER_DITHER_CLIP_( flags, source, destination ) \ + if( flags & paClipOff ){ /* no clip */ \ + if( flags & paDitherOff ){ /* no dither */ \ + return paConverters. source ## _To_ ## destination; \ + }else{ /* dither */ \ + return paConverters. source ## _To_ ## destination ## _Dither; \ + } \ + }else{ /* clip */ \ + if( flags & paDitherOff ){ /* no dither */ \ + return paConverters. source ## _To_ ## destination ## _Clip; \ + }else{ /* dither */ \ + return paConverters. source ## _To_ ## destination ## _DitherClip; \ + } \ + } + +/* -------------------------------------------------------------------------- */ + +#define PA_SELECT_CONVERTER_DITHER_( flags, source, destination ) \ + if( flags & paDitherOff ){ /* no dither */ \ + return paConverters. source ## _To_ ## destination; \ + }else{ /* dither */ \ + return paConverters. source ## _To_ ## destination ## _Dither; \ + } + +/* -------------------------------------------------------------------------- */ + +#define PA_USE_CONVERTER_( source, destination )\ + return paConverters. source ## _To_ ## destination; + +/* -------------------------------------------------------------------------- */ + +#define PA_UNITY_CONVERSION_( wordlength )\ + return paConverters. Copy_ ## wordlength ## _To_ ## wordlength; + +/* -------------------------------------------------------------------------- */ + +PaUtilConverter* PaUtil_SelectConverter( PaSampleFormat sourceFormat, + PaSampleFormat destinationFormat, PaStreamFlags flags ) +{ + PA_SELECT_FORMAT_( sourceFormat, + /* paFloat32: */ + PA_SELECT_FORMAT_( destinationFormat, + /* paFloat32: */ PA_UNITY_CONVERSION_( 32 ), + /* paInt32: */ PA_SELECT_CONVERTER_DITHER_CLIP_( flags, Float32, Int32 ), + /* paInt24: */ PA_SELECT_CONVERTER_DITHER_CLIP_( flags, Float32, Int24 ), + /* paInt16: */ PA_SELECT_CONVERTER_DITHER_CLIP_( flags, Float32, Int16 ), + /* paInt8: */ PA_SELECT_CONVERTER_DITHER_CLIP_( flags, Float32, Int8 ), + /* paUInt8: */ PA_SELECT_CONVERTER_DITHER_CLIP_( flags, Float32, UInt8 ) + ), + /* paInt32: */ + PA_SELECT_FORMAT_( destinationFormat, + /* paFloat32: */ PA_USE_CONVERTER_( Int32, Float32 ), + /* paInt32: */ PA_UNITY_CONVERSION_( 32 ), + /* paInt24: */ PA_SELECT_CONVERTER_DITHER_( flags, Int32, Int24 ), + /* paInt16: */ PA_SELECT_CONVERTER_DITHER_( flags, Int32, Int16 ), + /* paInt8: */ PA_SELECT_CONVERTER_DITHER_( flags, Int32, Int8 ), + /* paUInt8: */ PA_SELECT_CONVERTER_DITHER_( flags, Int32, UInt8 ) + ), + /* paInt24: */ + PA_SELECT_FORMAT_( destinationFormat, + /* paFloat32: */ PA_USE_CONVERTER_( Int24, Float32 ), + /* paInt32: */ PA_USE_CONVERTER_( Int24, Int32 ), + /* paInt24: */ PA_UNITY_CONVERSION_( 24 ), + /* paInt16: */ PA_SELECT_CONVERTER_DITHER_( flags, Int24, Int16 ), + /* paInt8: */ PA_SELECT_CONVERTER_DITHER_( flags, Int24, Int8 ), + /* paUInt8: */ PA_SELECT_CONVERTER_DITHER_( flags, Int24, UInt8 ) + ), + /* paInt16: */ + PA_SELECT_FORMAT_( destinationFormat, + /* paFloat32: */ PA_USE_CONVERTER_( Int16, Float32 ), + /* paInt32: */ PA_USE_CONVERTER_( Int16, Int32 ), + /* paInt24: */ PA_USE_CONVERTER_( Int16, Int24 ), + /* paInt16: */ PA_UNITY_CONVERSION_( 16 ), + /* paInt8: */ PA_SELECT_CONVERTER_DITHER_( flags, Int16, Int8 ), + /* paUInt8: */ PA_SELECT_CONVERTER_DITHER_( flags, Int16, UInt8 ) + ), + /* paInt8: */ + PA_SELECT_FORMAT_( destinationFormat, + /* paFloat32: */ PA_USE_CONVERTER_( Int8, Float32 ), + /* paInt32: */ PA_USE_CONVERTER_( Int8, Int32 ), + /* paInt24: */ PA_USE_CONVERTER_( Int8, Int24 ), + /* paInt16: */ PA_USE_CONVERTER_( Int8, Int16 ), + /* paInt8: */ PA_UNITY_CONVERSION_( 8 ), + /* paUInt8: */ PA_USE_CONVERTER_( Int8, UInt8 ) + ), + /* paUInt8: */ + PA_SELECT_FORMAT_( destinationFormat, + /* paFloat32: */ PA_USE_CONVERTER_( UInt8, Float32 ), + /* paInt32: */ PA_USE_CONVERTER_( UInt8, Int32 ), + /* paInt24: */ PA_USE_CONVERTER_( UInt8, Int24 ), + /* paInt16: */ PA_USE_CONVERTER_( UInt8, Int16 ), + /* paInt8: */ PA_USE_CONVERTER_( UInt8, Int8 ), + /* paUInt8: */ PA_UNITY_CONVERSION_( 8 ) + ) + ) +} + +/* -------------------------------------------------------------------------- */ + +#ifdef PA_NO_STANDARD_CONVERTERS + +/* -------------------------------------------------------------------------- */ + +PaUtilConverterTable paConverters = { + 0, /* PaUtilConverter *Float32_To_Int32; */ + 0, /* PaUtilConverter *Float32_To_Int32_Dither; */ + 0, /* PaUtilConverter *Float32_To_Int32_Clip; */ + 0, /* PaUtilConverter *Float32_To_Int32_DitherClip; */ + + 0, /* PaUtilConverter *Float32_To_Int24; */ + 0, /* PaUtilConverter *Float32_To_Int24_Dither; */ + 0, /* PaUtilConverter *Float32_To_Int24_Clip; */ + 0, /* PaUtilConverter *Float32_To_Int24_DitherClip; */ + + 0, /* PaUtilConverter *Float32_To_Int16; */ + 0, /* PaUtilConverter *Float32_To_Int16_Dither; */ + 0, /* PaUtilConverter *Float32_To_Int16_Clip; */ + 0, /* PaUtilConverter *Float32_To_Int16_DitherClip; */ + + 0, /* PaUtilConverter *Float32_To_Int8; */ + 0, /* PaUtilConverter *Float32_To_Int8_Dither; */ + 0, /* PaUtilConverter *Float32_To_Int8_Clip; */ + 0, /* PaUtilConverter *Float32_To_Int8_DitherClip; */ + + 0, /* PaUtilConverter *Float32_To_UInt8; */ + 0, /* PaUtilConverter *Float32_To_UInt8_Dither; */ + 0, /* PaUtilConverter *Float32_To_UInt8_Clip; */ + 0, /* PaUtilConverter *Float32_To_UInt8_DitherClip; */ + + 0, /* PaUtilConverter *Int32_To_Float32; */ + 0, /* PaUtilConverter *Int32_To_Int24; */ + 0, /* PaUtilConverter *Int32_To_Int24_Dither; */ + 0, /* PaUtilConverter *Int32_To_Int16; */ + 0, /* PaUtilConverter *Int32_To_Int16_Dither; */ + 0, /* PaUtilConverter *Int32_To_Int8; */ + 0, /* PaUtilConverter *Int32_To_Int8_Dither; */ + 0, /* PaUtilConverter *Int32_To_UInt8; */ + 0, /* PaUtilConverter *Int32_To_UInt8_Dither; */ + + 0, /* PaUtilConverter *Int24_To_Float32; */ + 0, /* PaUtilConverter *Int24_To_Int32; */ + 0, /* PaUtilConverter *Int24_To_Int16; */ + 0, /* PaUtilConverter *Int24_To_Int16_Dither; */ + 0, /* PaUtilConverter *Int24_To_Int8; */ + 0, /* PaUtilConverter *Int24_To_Int8_Dither; */ + 0, /* PaUtilConverter *Int24_To_UInt8; */ + 0, /* PaUtilConverter *Int24_To_UInt8_Dither; */ + + 0, /* PaUtilConverter *Int16_To_Float32; */ + 0, /* PaUtilConverter *Int16_To_Int32; */ + 0, /* PaUtilConverter *Int16_To_Int24; */ + 0, /* PaUtilConverter *Int16_To_Int8; */ + 0, /* PaUtilConverter *Int16_To_Int8_Dither; */ + 0, /* PaUtilConverter *Int16_To_UInt8; */ + 0, /* PaUtilConverter *Int16_To_UInt8_Dither; */ + + 0, /* PaUtilConverter *Int8_To_Float32; */ + 0, /* PaUtilConverter *Int8_To_Int32; */ + 0, /* PaUtilConverter *Int8_To_Int24 */ + 0, /* PaUtilConverter *Int8_To_Int16; */ + 0, /* PaUtilConverter *Int8_To_UInt8; */ + + 0, /* PaUtilConverter *UInt8_To_Float32; */ + 0, /* PaUtilConverter *UInt8_To_Int32; */ + 0, /* PaUtilConverter *UInt8_To_Int24; */ + 0, /* PaUtilConverter *UInt8_To_Int16; */ + 0, /* PaUtilConverter *UInt8_To_Int8; */ + + 0, /* PaUtilConverter *Copy_8_To_8; */ + 0, /* PaUtilConverter *Copy_16_To_16; */ + 0, /* PaUtilConverter *Copy_24_To_24; */ + 0 /* PaUtilConverter *Copy_32_To_32; */ +}; + +/* -------------------------------------------------------------------------- */ + +#else /* PA_NO_STANDARD_CONVERTERS is not defined */ + +/* -------------------------------------------------------------------------- */ + +#define PA_CLIP_( val, min, max )\ + { val = ((val) < (min)) ? (min) : (((val) > (max)) ? (max) : (val)); } + + +static const float const_1_div_128_ = 1.0f / 128.0f; /* 8 bit multiplier */ + +static const float const_1_div_32768_ = 1.0f / 32768.f; /* 16 bit multiplier */ + +static const double const_1_div_2147483648_ = 1.0 / 2147483648.0; /* 32 bit multiplier */ + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt32 *dest = (PaInt32*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* REVIEW */ +#ifdef PA_USE_C99_LRINTF + float scaled = *src * 0x7FFFFFFF; + *dest = lrintf(scaled-0.5f); +#else + double scaled = *src * 0x7FFFFFFF; + *dest = (PaInt32) scaled; +#endif + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int32_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt32 *dest = (PaInt32*)destinationBuffer; + + while( count-- ) + { + /* REVIEW */ +#ifdef PA_USE_C99_LRINTF + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = ((float)*src * (2147483646.0f)) + dither; + *dest = lrintf(dithered - 0.5f); +#else + double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + double dithered = ((double)*src * (2147483646.0)) + dither; + *dest = (PaInt32) dithered; +#endif + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int32_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt32 *dest = (PaInt32*)destinationBuffer; + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* REVIEW */ +#ifdef PA_USE_C99_LRINTF + float scaled = *src * 0x7FFFFFFF; + PA_CLIP_( scaled, -2147483648.f, 2147483647.f ); + *dest = lrintf(scaled-0.5f); +#else + double scaled = *src * 0x7FFFFFFF; + PA_CLIP_( scaled, -2147483648., 2147483647. ); + *dest = (PaInt32) scaled; +#endif + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int32_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt32 *dest = (PaInt32*)destinationBuffer; + + while( count-- ) + { + /* REVIEW */ +#ifdef PA_USE_C99_LRINTF + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = ((float)*src * (2147483646.0f)) + dither; + PA_CLIP_( dithered, -2147483648.f, 2147483647.f ); + *dest = lrintf(dithered-0.5f); +#else + double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + double dithered = ((double)*src * (2147483646.0)) + dither; + PA_CLIP_( dithered, -2147483648., 2147483647. ); + *dest = (PaInt32) dithered; +#endif + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int24( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + PaInt32 temp; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* convert to 32 bit and drop the low 8 bits */ + double scaled = (double)(*src) * 2147483647.0; + temp = (PaInt32) scaled; + +#if defined(PA_LITTLE_ENDIAN) + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 24); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (unsigned char)(temp >> 24); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 8); +#endif + + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int24_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + PaInt32 temp; + + while( count-- ) + { + /* convert to 32 bit and drop the low 8 bits */ + + double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + double dithered = ((double)*src * (2147483646.0)) + dither; + + temp = (PaInt32) dithered; + +#if defined(PA_LITTLE_ENDIAN) + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 24); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (unsigned char)(temp >> 24); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 8); +#endif + + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int24_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + PaInt32 temp; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* convert to 32 bit and drop the low 8 bits */ + double scaled = *src * 0x7FFFFFFF; + PA_CLIP_( scaled, -2147483648., 2147483647. ); + temp = (PaInt32) scaled; + +#if defined(PA_LITTLE_ENDIAN) + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 24); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (unsigned char)(temp >> 24); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 8); +#endif + + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int24_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + PaInt32 temp; + + while( count-- ) + { + /* convert to 32 bit and drop the low 8 bits */ + + double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + double dithered = ((double)*src * (2147483646.0)) + dither; + PA_CLIP_( dithered, -2147483648., 2147483647. ); + + temp = (PaInt32) dithered; + +#if defined(PA_LITTLE_ENDIAN) + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 24); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (unsigned char)(temp >> 24); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 8); +#endif + + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int16( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { +#ifdef PA_USE_C99_LRINTF + float tempf = (*src * (32767.0f)) ; + *dest = lrintf(tempf-0.5f); +#else + short samp = (short) (*src * (32767.0f)); + *dest = samp; +#endif + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int16_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + + while( count-- ) + { + + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = (*src * (32766.0f)) + dither; + +#ifdef PA_USE_C99_LRINTF + *dest = lrintf(dithered-0.5f); +#else + *dest = (PaInt16) dithered; +#endif + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int16_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { +#ifdef PA_USE_C99_LRINTF + long samp = lrintf((*src * (32767.0f)) -0.5f); +#else + long samp = (PaInt32) (*src * (32767.0f)); +#endif + PA_CLIP_( samp, -0x8000, 0x7FFF ); + *dest = (PaInt16) samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int16_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = (*src * (32766.0f)) + dither; + PaInt32 samp = (PaInt32) dithered; + PA_CLIP_( samp, -0x8000, 0x7FFF ); +#ifdef PA_USE_C99_LRINTF + *dest = lrintf(samp-0.5f); +#else + *dest = (PaInt16) samp; +#endif + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + signed char samp = (signed char) (*src * (127.0f)); + *dest = samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + + while( count-- ) + { + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = (*src * (126.0f)) + dither; + PaInt32 samp = (PaInt32) dithered; + *dest = (signed char) samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int8_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + PaInt32 samp = (PaInt32)(*src * (127.0f)); + PA_CLIP_( samp, -0x80, 0x7F ); + *dest = (signed char) samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int8_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = (*src * (126.0f)) + dither; + PaInt32 samp = (PaInt32) dithered; + PA_CLIP_( samp, -0x80, 0x7F ); + *dest = (signed char) samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_UInt8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + unsigned char samp = (unsigned char)(128 + ((unsigned char) (*src * (127.0f)))); + *dest = samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_UInt8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + + while( count-- ) + { + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = (*src * (126.0f)) + dither; + PaInt32 samp = (PaInt32) dithered; + *dest = (unsigned char) (128 + samp); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_UInt8_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + PaInt32 samp = 128 + (PaInt32)(*src * (127.0f)); + PA_CLIP_( samp, 0x0000, 0x00FF ); + *dest = (unsigned char) samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_UInt8_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + /* use smaller scaler to prevent overflow when we add the dither */ + float dithered = (*src * (126.0f)) + dither; + PaInt32 samp = 128 + (PaInt32) dithered; + PA_CLIP_( samp, 0x0000, 0x00FF ); + *dest = (unsigned char) samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_Float32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + float *dest = (float*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + *dest = (float) ((double)*src * const_1_div_2147483648_); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_Int24( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* REVIEW */ +#if defined(PA_LITTLE_ENDIAN) + dest[0] = (unsigned char)(*src >> 8); + dest[1] = (unsigned char)(*src >> 16); + dest[2] = (unsigned char)(*src >> 24); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (unsigned char)(*src >> 24); + dest[1] = (unsigned char)(*src >> 16); + dest[2] = (unsigned char)(*src >> 8); +#endif + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_Int24_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + (void) destinationBuffer; /* unused parameters */ + (void) destinationStride; /* unused parameters */ + (void) sourceBuffer; /* unused parameters */ + (void) sourceStride; /* unused parameters */ + (void) count; /* unused parameters */ + (void) ditherGenerator; /* unused parameters */ + /* IMPLEMENT ME */ +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_Int16( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + *dest = (PaInt16) ((*src) >> 16); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_Int16_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + PaInt32 dither; + + while( count-- ) + { + /* REVIEW */ + dither = PaUtil_Generate16BitTriangularDither( ditherGenerator ); + *dest = (PaInt16) ((((*src)>>1) + dither) >> 15); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_Int8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + *dest = (signed char) ((*src) >> 24); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_Int8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + PaInt32 dither; + + while( count-- ) + { + /* REVIEW */ + dither = PaUtil_Generate16BitTriangularDither( ditherGenerator ); + *dest = (signed char) ((((*src)>>1) + dither) >> 23); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_UInt8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (unsigned char)(((*src) >> 24) + 128); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int32_To_UInt8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt32 *src = (PaInt32*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* IMPLEMENT ME */ + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_Float32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + float *dest = (float*)destinationBuffer; + PaInt32 temp; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + temp = (((PaInt32)src[0]) << 8); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 24); +#elif defined(PA_BIG_ENDIAN) + temp = (((PaInt32)src[0]) << 24); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 8); +#endif + + *dest = (float) ((double)temp * const_1_div_2147483648_); + + src += sourceStride * 3; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_Int32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + PaInt32 *dest = (PaInt32*) destinationBuffer; + PaInt32 temp; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + temp = (((PaInt32)src[0]) << 8); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 24); +#elif defined(PA_BIG_ENDIAN) + temp = (((PaInt32)src[0]) << 24); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 8); +#endif + + *dest = temp; + + src += sourceStride * 3; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_Int16( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + + PaInt16 temp; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + /* src[0] is discarded */ + temp = (((PaInt16)src[1])); + temp = temp | (PaInt16)(((PaInt16)src[2]) << 8); +#elif defined(PA_BIG_ENDIAN) + /* src[2] is discarded */ + temp = (PaInt16)(((PaInt16)src[0]) << 8); + temp = temp | (((PaInt16)src[1])); +#endif + + *dest = temp; + + src += sourceStride * 3; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_Int16_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + + PaInt32 temp, dither; + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + temp = (((PaInt32)src[0]) << 8); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 24); +#elif defined(PA_BIG_ENDIAN) + temp = (((PaInt32)src[0]) << 24); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 8); +#endif + + /* REVIEW */ + dither = PaUtil_Generate16BitTriangularDither( ditherGenerator ); + *dest = (PaInt16) (((temp >> 1) + dither) >> 15); + + src += sourceStride * 3; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_Int8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + /* src[0] is discarded */ + /* src[1] is discarded */ + *dest = src[2]; +#elif defined(PA_BIG_ENDIAN) + /* src[2] is discarded */ + /* src[1] is discarded */ + *dest = src[0]; +#endif + + src += sourceStride * 3; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_Int8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + + PaInt32 temp, dither; + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + temp = (((PaInt32)src[0]) << 8); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 24); +#elif defined(PA_BIG_ENDIAN) + temp = (((PaInt32)src[0]) << 24); + temp = temp | (((PaInt32)src[1]) << 16); + temp = temp | (((PaInt32)src[2]) << 8); +#endif + + /* REVIEW */ + dither = PaUtil_Generate16BitTriangularDither( ditherGenerator ); + *dest = (signed char) (((temp >> 1) + dither) >> 23); + + src += sourceStride * 3; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_UInt8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + /* src[0] is discarded */ + /* src[1] is discarded */ + *dest = (unsigned char)(src[2] + 128); +#elif defined(PA_BIG_ENDIAN) + *dest = (unsigned char)(src[0] + 128); + /* src[1] is discarded */ + /* src[2] is discarded */ +#endif + + src += sourceStride * 3; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int24_To_UInt8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + (void) destinationBuffer; /* unused parameters */ + (void) destinationStride; /* unused parameters */ + (void) sourceBuffer; /* unused parameters */ + (void) sourceStride; /* unused parameters */ + (void) count; /* unused parameters */ + (void) ditherGenerator; /* unused parameters */ + /* IMPLEMENT ME */ +} + +/* -------------------------------------------------------------------------- */ + +static void Int16_To_Float32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt16 *src = (PaInt16*)sourceBuffer; + float *dest = (float*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + float samp = *src * const_1_div_32768_; /* FIXME: i'm concerned about this being asymetrical with float->int16 -rb */ + *dest = samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int16_To_Int32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt16 *src = (PaInt16*)sourceBuffer; + PaInt32 *dest = (PaInt32*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* REVIEW: we should consider something like + (*src << 16) | (*src & 0xFFFF) + */ + + *dest = *src << 16; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int16_To_Int24( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt16 *src = (PaInt16*) sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + PaInt16 temp; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + temp = *src; + +#if defined(PA_LITTLE_ENDIAN) + dest[0] = 0; + dest[1] = (unsigned char)(temp); + dest[2] = (unsigned char)(temp >> 8); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp); + dest[2] = 0; +#endif + + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int16_To_Int8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt16 *src = (PaInt16*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (signed char)((*src) >> 8); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int16_To_Int8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt16 *src = (PaInt16*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* IMPLEMENT ME */ + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int16_To_UInt8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt16 *src = (PaInt16*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (unsigned char)(((*src) >> 8) + 128); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int16_To_UInt8_Dither( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaInt16 *src = (PaInt16*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + /* IMPLEMENT ME */ + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int8_To_Float32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + signed char *src = (signed char*)sourceBuffer; + float *dest = (float*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + float samp = *src * const_1_div_128_; + *dest = samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int8_To_Int32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + signed char *src = (signed char*)sourceBuffer; + PaInt32 *dest = (PaInt32*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (*src) << 24; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int8_To_Int24( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + signed char *src = (signed char*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + dest[0] = 0; + dest[1] = 0; + dest[2] = (*src); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (*src); + dest[1] = 0; + dest[2] = 0; +#endif + + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int8_To_Int16( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + signed char *src = (signed char*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (PaInt16)((*src) << 8); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Int8_To_UInt8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + signed char *src = (signed char*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (unsigned char)(*src + 128); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void UInt8_To_Float32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + float *dest = (float*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + float samp = (*src - 128) * const_1_div_128_; + *dest = samp; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void UInt8_To_Int32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + PaInt32 *dest = (PaInt32*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (*src - 128) << 24; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void UInt8_To_Int24( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + (void) ditherGenerator; /* unused parameters */ + + while( count-- ) + { + +#if defined(PA_LITTLE_ENDIAN) + dest[0] = 0; + dest[1] = 0; + dest[2] = (unsigned char)(*src - 128); +#elif defined(PA_BIG_ENDIAN) + dest[0] = (unsigned char)(*src - 128); + dest[1] = 0; + dest[2] = 0; +#endif + + src += sourceStride; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void UInt8_To_Int16( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + PaInt16 *dest = (PaInt16*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (PaInt16)((*src - 128) << 8); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void UInt8_To_Int8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + signed char *dest = (signed char*)destinationBuffer; + (void)ditherGenerator; /* unused parameter */ + + while( count-- ) + { + (*dest) = (signed char)(*src - 128); + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Copy_8_To_8( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + *dest = *src; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Copy_16_To_16( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaUint16 *src = (PaUint16 *)sourceBuffer; + PaUint16 *dest = (PaUint16 *)destinationBuffer; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + *dest = *src; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Copy_24_To_24( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + unsigned char *src = (unsigned char*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + + src += sourceStride * 3; + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Copy_32_To_32( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + PaUint32 *dest = (PaUint32 *)destinationBuffer; + PaUint32 *src = (PaUint32 *)sourceBuffer; + + (void) ditherGenerator; /* unused parameter */ + + while( count-- ) + { + *dest = *src; + + src += sourceStride; + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +PaUtilConverterTable paConverters = { + Float32_To_Int32, /* PaUtilConverter *Float32_To_Int32; */ + Float32_To_Int32_Dither, /* PaUtilConverter *Float32_To_Int32_Dither; */ + Float32_To_Int32_Clip, /* PaUtilConverter *Float32_To_Int32_Clip; */ + Float32_To_Int32_DitherClip, /* PaUtilConverter *Float32_To_Int32_DitherClip; */ + + Float32_To_Int24, /* PaUtilConverter *Float32_To_Int24; */ + Float32_To_Int24_Dither, /* PaUtilConverter *Float32_To_Int24_Dither; */ + Float32_To_Int24_Clip, /* PaUtilConverter *Float32_To_Int24_Clip; */ + Float32_To_Int24_DitherClip, /* PaUtilConverter *Float32_To_Int24_DitherClip; */ + + Float32_To_Int16, /* PaUtilConverter *Float32_To_Int16; */ + Float32_To_Int16_Dither, /* PaUtilConverter *Float32_To_Int16_Dither; */ + Float32_To_Int16_Clip, /* PaUtilConverter *Float32_To_Int16_Clip; */ + Float32_To_Int16_DitherClip, /* PaUtilConverter *Float32_To_Int16_DitherClip; */ + + Float32_To_Int8, /* PaUtilConverter *Float32_To_Int8; */ + Float32_To_Int8_Dither, /* PaUtilConverter *Float32_To_Int8_Dither; */ + Float32_To_Int8_Clip, /* PaUtilConverter *Float32_To_Int8_Clip; */ + Float32_To_Int8_DitherClip, /* PaUtilConverter *Float32_To_Int8_DitherClip; */ + + Float32_To_UInt8, /* PaUtilConverter *Float32_To_UInt8; */ + Float32_To_UInt8_Dither, /* PaUtilConverter *Float32_To_UInt8_Dither; */ + Float32_To_UInt8_Clip, /* PaUtilConverter *Float32_To_UInt8_Clip; */ + Float32_To_UInt8_DitherClip, /* PaUtilConverter *Float32_To_UInt8_DitherClip; */ + + Int32_To_Float32, /* PaUtilConverter *Int32_To_Float32; */ + Int32_To_Int24, /* PaUtilConverter *Int32_To_Int24; */ + Int32_To_Int24_Dither, /* PaUtilConverter *Int32_To_Int24_Dither; */ + Int32_To_Int16, /* PaUtilConverter *Int32_To_Int16; */ + Int32_To_Int16_Dither, /* PaUtilConverter *Int32_To_Int16_Dither; */ + Int32_To_Int8, /* PaUtilConverter *Int32_To_Int8; */ + Int32_To_Int8_Dither, /* PaUtilConverter *Int32_To_Int8_Dither; */ + Int32_To_UInt8, /* PaUtilConverter *Int32_To_UInt8; */ + Int32_To_UInt8_Dither, /* PaUtilConverter *Int32_To_UInt8_Dither; */ + + Int24_To_Float32, /* PaUtilConverter *Int24_To_Float32; */ + Int24_To_Int32, /* PaUtilConverter *Int24_To_Int32; */ + Int24_To_Int16, /* PaUtilConverter *Int24_To_Int16; */ + Int24_To_Int16_Dither, /* PaUtilConverter *Int24_To_Int16_Dither; */ + Int24_To_Int8, /* PaUtilConverter *Int24_To_Int8; */ + Int24_To_Int8_Dither, /* PaUtilConverter *Int24_To_Int8_Dither; */ + Int24_To_UInt8, /* PaUtilConverter *Int24_To_UInt8; */ + Int24_To_UInt8_Dither, /* PaUtilConverter *Int24_To_UInt8_Dither; */ + + Int16_To_Float32, /* PaUtilConverter *Int16_To_Float32; */ + Int16_To_Int32, /* PaUtilConverter *Int16_To_Int32; */ + Int16_To_Int24, /* PaUtilConverter *Int16_To_Int24; */ + Int16_To_Int8, /* PaUtilConverter *Int16_To_Int8; */ + Int16_To_Int8_Dither, /* PaUtilConverter *Int16_To_Int8_Dither; */ + Int16_To_UInt8, /* PaUtilConverter *Int16_To_UInt8; */ + Int16_To_UInt8_Dither, /* PaUtilConverter *Int16_To_UInt8_Dither; */ + + Int8_To_Float32, /* PaUtilConverter *Int8_To_Float32; */ + Int8_To_Int32, /* PaUtilConverter *Int8_To_Int32; */ + Int8_To_Int24, /* PaUtilConverter *Int8_To_Int24 */ + Int8_To_Int16, /* PaUtilConverter *Int8_To_Int16; */ + Int8_To_UInt8, /* PaUtilConverter *Int8_To_UInt8; */ + + UInt8_To_Float32, /* PaUtilConverter *UInt8_To_Float32; */ + UInt8_To_Int32, /* PaUtilConverter *UInt8_To_Int32; */ + UInt8_To_Int24, /* PaUtilConverter *UInt8_To_Int24; */ + UInt8_To_Int16, /* PaUtilConverter *UInt8_To_Int16; */ + UInt8_To_Int8, /* PaUtilConverter *UInt8_To_Int8; */ + + Copy_8_To_8, /* PaUtilConverter *Copy_8_To_8; */ + Copy_16_To_16, /* PaUtilConverter *Copy_16_To_16; */ + Copy_24_To_24, /* PaUtilConverter *Copy_24_To_24; */ + Copy_32_To_32 /* PaUtilConverter *Copy_32_To_32; */ +}; + +/* -------------------------------------------------------------------------- */ + +#endif /* PA_NO_STANDARD_CONVERTERS */ + +/* -------------------------------------------------------------------------- */ + +PaUtilZeroer* PaUtil_SelectZeroer( PaSampleFormat destinationFormat ) +{ + switch( destinationFormat & ~paNonInterleaved ){ + case paFloat32: + return paZeroers.Zero32; + case paInt32: + return paZeroers.Zero32; + case paInt24: + return paZeroers.Zero24; + case paInt16: + return paZeroers.Zero16; + case paInt8: + return paZeroers.Zero8; + case paUInt8: + return paZeroers.ZeroU8; + default: return 0; + } +} + +/* -------------------------------------------------------------------------- */ + +#ifdef PA_NO_STANDARD_ZEROERS + +/* -------------------------------------------------------------------------- */ + +PaUtilZeroerTable paZeroers = { + 0, /* PaUtilZeroer *ZeroU8; */ + 0, /* PaUtilZeroer *Zero8; */ + 0, /* PaUtilZeroer *Zero16; */ + 0, /* PaUtilZeroer *Zero24; */ + 0, /* PaUtilZeroer *Zero32; */ +}; + +/* -------------------------------------------------------------------------- */ + +#else /* PA_NO_STANDARD_ZEROERS is not defined */ + +/* -------------------------------------------------------------------------- */ + +static void ZeroU8( void *destinationBuffer, signed int destinationStride, + unsigned int count ) +{ + unsigned char *dest = (unsigned char*)destinationBuffer; + + while( count-- ) + { + *dest = 128; + + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Zero8( void *destinationBuffer, signed int destinationStride, + unsigned int count ) +{ + unsigned char *dest = (unsigned char*)destinationBuffer; + + while( count-- ) + { + *dest = 0; + + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Zero16( void *destinationBuffer, signed int destinationStride, + unsigned int count ) +{ + PaUint16 *dest = (PaUint16 *)destinationBuffer; + + while( count-- ) + { + *dest = 0; + + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Zero24( void *destinationBuffer, signed int destinationStride, + unsigned int count ) +{ + unsigned char *dest = (unsigned char*)destinationBuffer; + + while( count-- ) + { + dest[0] = 0; + dest[1] = 0; + dest[2] = 0; + + dest += destinationStride * 3; + } +} + +/* -------------------------------------------------------------------------- */ + +static void Zero32( void *destinationBuffer, signed int destinationStride, + unsigned int count ) +{ + PaUint32 *dest = (PaUint32 *)destinationBuffer; + + while( count-- ) + { + *dest = 0; + + dest += destinationStride; + } +} + +/* -------------------------------------------------------------------------- */ + +PaUtilZeroerTable paZeroers = { + ZeroU8, /* PaUtilZeroer *ZeroU8; */ + Zero8, /* PaUtilZeroer *Zero8; */ + Zero16, /* PaUtilZeroer *Zero16; */ + Zero24, /* PaUtilZeroer *Zero24; */ + Zero32, /* PaUtilZeroer *Zero32; */ +}; + +/* -------------------------------------------------------------------------- */ + +#endif /* PA_NO_STANDARD_ZEROERS */ diff --git a/Externals/portaudio/src/common/pa_converters.h b/Externals/portaudio/src/common/pa_converters.h new file mode 100644 index 0000000000..7ddfcaa3c2 --- /dev/null +++ b/Externals/portaudio/src/common/pa_converters.h @@ -0,0 +1,263 @@ +#ifndef PA_CONVERTERS_H +#define PA_CONVERTERS_H +/* + * $Id: pa_converters.h 1097 2006-08-26 08:27:53Z rossb $ + * Portable Audio I/O Library sample conversion mechanism + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Phil Burk, Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Conversion functions used to convert buffers of samples from one + format to another. +*/ + + +#include "portaudio.h" /* for PaSampleFormat */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +struct PaUtilTriangularDitherGenerator; + + +/** Choose an available sample format which is most appropriate for + representing the requested format. If the requested format is not available + higher quality formats are considered before lower quality formates. + @param availableFormats A variable containing the logical OR of all available + formats. + @param format The desired format. + @return The most appropriate available format for representing the requested + format. +*/ +PaSampleFormat PaUtil_SelectClosestAvailableFormat( + PaSampleFormat availableFormats, PaSampleFormat format ); + + +/* high level conversions functions for use by implementations */ + + +/** The generic sample converter prototype. Sample converters convert count + samples from sourceBuffer to destinationBuffer. The actual type of the data + pointed to by these parameters varys for different converter functions. + @param destinationBuffer A pointer to the first sample of the destination. + @param destinationStride An offset between successive destination samples + expressed in samples (not bytes.) It may be negative. + @param sourceBuffer A pointer to the first sample of the source. + @param sourceStride An offset between successive source samples + expressed in samples (not bytes.) It may be negative. + @param count The number of samples to convert. + @param ditherState State information used to calculate dither. Converters + that do not perform dithering will ignore this parameter, in which case + NULL or invalid dither state may be passed. +*/ +typedef void PaUtilConverter( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ); + + +/** Find a sample converter function for the given source and destinations + formats and flags (clip and dither.) + @return + A pointer to a PaUtilConverter which will perform the requested + conversion, or NULL if the given format conversion is not supported. + For conversions where clipping or dithering is not necessary, the + clip and dither flags are ignored and a non-clipping or dithering + version is returned. + If the source and destination formats are the same, a function which + copies data of the appropriate size will be returned. +*/ +PaUtilConverter* PaUtil_SelectConverter( PaSampleFormat sourceFormat, + PaSampleFormat destinationFormat, PaStreamFlags flags ); + + +/** The generic buffer zeroer prototype. Buffer zeroers copy count zeros to + destinationBuffer. The actual type of the data pointed to varys for + different zeroer functions. + @param destinationBuffer A pointer to the first sample of the destination. + @param destinationStride An offset between successive destination samples + expressed in samples (not bytes.) It may be negative. + @param count The number of samples to zero. +*/ +typedef void PaUtilZeroer( + void *destinationBuffer, signed int destinationStride, unsigned int count ); + + +/** Find a buffer zeroer function for the given destination format. + @return + A pointer to a PaUtilZeroer which will perform the requested + zeroing. +*/ +PaUtilZeroer* PaUtil_SelectZeroer( PaSampleFormat destinationFormat ); + +/*----------------------------------------------------------------------------*/ +/* low level functions and data structures which may be used for + substituting conversion functions */ + + +/** The type used to store all sample conversion functions. + @see paConverters; +*/ +typedef struct{ + PaUtilConverter *Float32_To_Int32; + PaUtilConverter *Float32_To_Int32_Dither; + PaUtilConverter *Float32_To_Int32_Clip; + PaUtilConverter *Float32_To_Int32_DitherClip; + + PaUtilConverter *Float32_To_Int24; + PaUtilConverter *Float32_To_Int24_Dither; + PaUtilConverter *Float32_To_Int24_Clip; + PaUtilConverter *Float32_To_Int24_DitherClip; + + PaUtilConverter *Float32_To_Int16; + PaUtilConverter *Float32_To_Int16_Dither; + PaUtilConverter *Float32_To_Int16_Clip; + PaUtilConverter *Float32_To_Int16_DitherClip; + + PaUtilConverter *Float32_To_Int8; + PaUtilConverter *Float32_To_Int8_Dither; + PaUtilConverter *Float32_To_Int8_Clip; + PaUtilConverter *Float32_To_Int8_DitherClip; + + PaUtilConverter *Float32_To_UInt8; + PaUtilConverter *Float32_To_UInt8_Dither; + PaUtilConverter *Float32_To_UInt8_Clip; + PaUtilConverter *Float32_To_UInt8_DitherClip; + + PaUtilConverter *Int32_To_Float32; + PaUtilConverter *Int32_To_Int24; + PaUtilConverter *Int32_To_Int24_Dither; + PaUtilConverter *Int32_To_Int16; + PaUtilConverter *Int32_To_Int16_Dither; + PaUtilConverter *Int32_To_Int8; + PaUtilConverter *Int32_To_Int8_Dither; + PaUtilConverter *Int32_To_UInt8; + PaUtilConverter *Int32_To_UInt8_Dither; + + PaUtilConverter *Int24_To_Float32; + PaUtilConverter *Int24_To_Int32; + PaUtilConverter *Int24_To_Int16; + PaUtilConverter *Int24_To_Int16_Dither; + PaUtilConverter *Int24_To_Int8; + PaUtilConverter *Int24_To_Int8_Dither; + PaUtilConverter *Int24_To_UInt8; + PaUtilConverter *Int24_To_UInt8_Dither; + + PaUtilConverter *Int16_To_Float32; + PaUtilConverter *Int16_To_Int32; + PaUtilConverter *Int16_To_Int24; + PaUtilConverter *Int16_To_Int8; + PaUtilConverter *Int16_To_Int8_Dither; + PaUtilConverter *Int16_To_UInt8; + PaUtilConverter *Int16_To_UInt8_Dither; + + PaUtilConverter *Int8_To_Float32; + PaUtilConverter *Int8_To_Int32; + PaUtilConverter *Int8_To_Int24; + PaUtilConverter *Int8_To_Int16; + PaUtilConverter *Int8_To_UInt8; + + PaUtilConverter *UInt8_To_Float32; + PaUtilConverter *UInt8_To_Int32; + PaUtilConverter *UInt8_To_Int24; + PaUtilConverter *UInt8_To_Int16; + PaUtilConverter *UInt8_To_Int8; + + PaUtilConverter *Copy_8_To_8; /* copy without any conversion */ + PaUtilConverter *Copy_16_To_16; /* copy without any conversion */ + PaUtilConverter *Copy_24_To_24; /* copy without any conversion */ + PaUtilConverter *Copy_32_To_32; /* copy without any conversion */ +} PaUtilConverterTable; + + +/** A table of pointers to all required converter functions. + PaUtil_SelectConverter() uses this table to lookup the appropriate + conversion functions. The fields of this structure are initialized + with default conversion functions. Fields may be NULL, indicating that + no conversion function is available. User code may substitue optimised + conversion functions by assigning different function pointers to + these fields. + + @note + If the PA_NO_STANDARD_CONVERTERS preprocessor variable is defined, + PortAudio's standard converters will not be compiled, and all fields + of this structure will be initialized to NULL. In such cases, users + should supply their own conversion functions if the require PortAudio + to open a stream that requires sample conversion. + + @see PaUtilConverterTable, PaUtilConverter, PaUtil_SelectConverter +*/ +extern PaUtilConverterTable paConverters; + + +/** The type used to store all buffer zeroing functions. + @see paZeroers; +*/ +typedef struct{ + PaUtilZeroer *ZeroU8; /* unsigned 8 bit, zero == 128 */ + PaUtilZeroer *Zero8; + PaUtilZeroer *Zero16; + PaUtilZeroer *Zero24; + PaUtilZeroer *Zero32; +} PaUtilZeroerTable; + + +/** A table of pointers to all required zeroer functions. + PaUtil_SelectZeroer() uses this table to lookup the appropriate + conversion functions. The fields of this structure are initialized + with default conversion functions. User code may substitue optimised + conversion functions by assigning different function pointers to + these fields. + + @note + If the PA_NO_STANDARD_ZEROERS preprocessor variable is defined, + PortAudio's standard zeroers will not be compiled, and all fields + of this structure will be initialized to NULL. In such cases, users + should supply their own zeroing functions for the sample sizes which + they intend to use. + + @see PaUtilZeroerTable, PaUtilZeroer, PaUtil_SelectZeroer +*/ +extern PaUtilZeroerTable paZeroers; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_CONVERTERS_H */ diff --git a/Externals/portaudio/src/common/pa_cpuload.c b/Externals/portaudio/src/common/pa_cpuload.c new file mode 100644 index 0000000000..4465a50b62 --- /dev/null +++ b/Externals/portaudio/src/common/pa_cpuload.c @@ -0,0 +1,105 @@ +/* + * $Id: pa_cpuload.c 1577 2011-02-01 13:03:45Z rossb $ + * Portable Audio I/O Library CPU Load measurement functions + * Portable CPU load measurement facility. + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 2002 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Functions to assist in measuring the CPU utilization of a callback + stream. Used to implement the Pa_GetStreamCpuLoad() function. + + @todo Dynamically calculate the coefficients used to smooth the CPU Load + Measurements over time to provide a uniform characterisation of CPU Load + independent of rate at which PaUtil_BeginCpuLoadMeasurement / + PaUtil_EndCpuLoadMeasurement are called. see http://www.portaudio.com/trac/ticket/113 +*/ + + +#include "pa_cpuload.h" + +#include + +#include "pa_util.h" /* for PaUtil_GetTime() */ + + +void PaUtil_InitializeCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer, double sampleRate ) +{ + assert( sampleRate > 0 ); + + measurer->samplingPeriod = 1. / sampleRate; + measurer->averageLoad = 0.; +} + +void PaUtil_ResetCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer ) +{ + measurer->averageLoad = 0.; +} + +void PaUtil_BeginCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer ) +{ + measurer->measurementStartTime = PaUtil_GetTime(); +} + + +void PaUtil_EndCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer, unsigned long framesProcessed ) +{ + double measurementEndTime, secondsFor100Percent, measuredLoad; + + if( framesProcessed > 0 ){ + measurementEndTime = PaUtil_GetTime(); + + assert( framesProcessed > 0 ); + secondsFor100Percent = framesProcessed * measurer->samplingPeriod; + + measuredLoad = (measurementEndTime - measurer->measurementStartTime) / secondsFor100Percent; + + /* Low pass filter the calculated CPU load to reduce jitter using a simple IIR low pass filter. */ + /** FIXME @todo these coefficients shouldn't be hardwired see: http://www.portaudio.com/trac/ticket/113 */ +#define LOWPASS_COEFFICIENT_0 (0.9) +#define LOWPASS_COEFFICIENT_1 (0.99999 - LOWPASS_COEFFICIENT_0) + + measurer->averageLoad = (LOWPASS_COEFFICIENT_0 * measurer->averageLoad) + + (LOWPASS_COEFFICIENT_1 * measuredLoad); + } +} + + +double PaUtil_GetCpuLoad( PaUtilCpuLoadMeasurer* measurer ) +{ + return measurer->averageLoad; +} diff --git a/Externals/portaudio/src/common/pa_cpuload.h b/Externals/portaudio/src/common/pa_cpuload.h new file mode 100644 index 0000000000..4a594430b8 --- /dev/null +++ b/Externals/portaudio/src/common/pa_cpuload.h @@ -0,0 +1,72 @@ +#ifndef PA_CPULOAD_H +#define PA_CPULOAD_H +/* + * $Id: pa_cpuload.h 1097 2006-08-26 08:27:53Z rossb $ + * Portable Audio I/O Library CPU Load measurement functions + * Portable CPU load measurement facility. + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 2002 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Functions to assist in measuring the CPU utilization of a callback + stream. Used to implement the Pa_GetStreamCpuLoad() function. +*/ + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +typedef struct { + double samplingPeriod; + double measurementStartTime; + double averageLoad; +} PaUtilCpuLoadMeasurer; /**< @todo need better name than measurer */ + +void PaUtil_InitializeCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer, double sampleRate ); +void PaUtil_BeginCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer ); +void PaUtil_EndCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer, unsigned long framesProcessed ); +void PaUtil_ResetCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer ); +double PaUtil_GetCpuLoad( PaUtilCpuLoadMeasurer* measurer ); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_CPULOAD_H */ diff --git a/Externals/portaudio/src/common/pa_debugprint.c b/Externals/portaudio/src/common/pa_debugprint.c new file mode 100644 index 0000000000..f34d4bbf98 --- /dev/null +++ b/Externals/portaudio/src/common/pa_debugprint.c @@ -0,0 +1,123 @@ +/* + * $Id: pa_log.c $ + * Portable Audio I/O Library Multi-Host API front end + * Validate function parameters and manage multiple host APIs. + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2006 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Implements log function. + + PaUtil_SetLogPrintFunction can be user called to replace the provided + DefaultLogPrint function, which writes to stderr. + One can NOT pass var_args across compiler/dll boundaries as it is not + "byte code/abi portable". So the technique used here is to allocate a local + a static array, write in it, then callback the user with a pointer to its + start. +*/ + +#include +#include + +#include "pa_debugprint.h" + +// for OutputDebugStringA +#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT) + #define WIN32_LEAN_AND_MEAN // exclude rare headers + #include "windows.h" +#endif + +// User callback +static PaUtilLogCallback userCB = NULL; + +// Sets user callback +void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb) +{ + userCB = cb; +} + +/* + If your platform doesnt have vsnprintf, you are stuck with a + VERY dangerous alternative, vsprintf (with no n) +*/ +#if _MSC_VER + /* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully). + According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC. + */ + #define VSNPRINTF _vsnprintf +#else + #define VSNPRINTF vsnprintf +#endif + +#define PA_LOG_BUF_SIZE 2048 + +void PaUtil_DebugPrint( const char *format, ... ) +{ + // Optional logging into Output console of Visual Studio +#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT) + { + char buf[PA_LOG_BUF_SIZE]; + va_list ap; + va_start(ap, format); + VSNPRINTF(buf, sizeof(buf), format, ap); + buf[sizeof(buf)-1] = 0; + OutputDebugStringA(buf); + va_end(ap); + } +#endif + + // Output to User-Callback + if (userCB != NULL) + { + char strdump[PA_LOG_BUF_SIZE]; + va_list ap; + va_start(ap, format); + VSNPRINTF(strdump, sizeof(strdump), format, ap); + strdump[sizeof(strdump)-1] = 0; + userCB(strdump); + va_end(ap); + } + else + // Standard output to stderr + { + va_list ap; + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + fflush(stderr); + } +} diff --git a/Externals/portaudio/src/common/pa_debugprint.h b/Externals/portaudio/src/common/pa_debugprint.h new file mode 100644 index 0000000000..5fba7667dc --- /dev/null +++ b/Externals/portaudio/src/common/pa_debugprint.h @@ -0,0 +1,149 @@ +#ifndef PA_LOG_H +#define PA_LOG_H +/* + * Log file redirector function + * Copyright (c) 1999-2006 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src +*/ + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + + +void PaUtil_DebugPrint( const char *format, ... ); + + +/* + The basic format for log messages is described below. If you need to + add any log messages, please follow this format. + + Function entry (void function): + + "FunctionName called.\n" + + Function entry (non void function): + + "FunctionName called:\n" + "\tParam1Type param1: param1Value\n" + "\tParam2Type param2: param2Value\n" (etc...) + + + Function exit (no return value): + + "FunctionName returned.\n" + + Function exit (simple return value): + + "FunctionName returned:\n" + "\tReturnType: returnValue\n" + + If the return type is an error code, the error text is displayed in () + + If the return type is not an error code, but has taken a special value + because an error occurred, then the reason for the error is shown in [] + + If the return type is a struct ptr, the struct is dumped. + + See the code below for examples +*/ + +/** PA_DEBUG() provides a simple debug message printing facility. The macro + passes it's argument to a printf-like function called PaUtil_DebugPrint() + which prints to stderr and always flushes the stream after printing. + Because preprocessor macros cannot directly accept variable length argument + lists, calls to the macro must include an additional set of parenthesis, eg: + PA_DEBUG(("errorno: %d", 1001 )); +*/ + + +#ifdef PA_ENABLE_DEBUG_OUTPUT +#define PA_DEBUG(x) PaUtil_DebugPrint x ; +#else +#define PA_DEBUG(x) +#endif + + +#ifdef PA_LOG_API_CALLS +#define PA_LOGAPI(x) PaUtil_DebugPrint x + +#define PA_LOGAPI_ENTER(functionName) PaUtil_DebugPrint( functionName " called.\n" ) + +#define PA_LOGAPI_ENTER_PARAMS(functionName) PaUtil_DebugPrint( functionName " called:\n" ) + +#define PA_LOGAPI_EXIT(functionName) PaUtil_DebugPrint( functionName " returned.\n" ) + +#define PA_LOGAPI_EXIT_PAERROR( functionName, result ) \ + PaUtil_DebugPrint( functionName " returned:\n" ); \ + PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) ) + +#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result ) \ + PaUtil_DebugPrint( functionName " returned:\n" ); \ + PaUtil_DebugPrint("\t" resultFormatString "\n", result ) + +#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result ) \ + PaUtil_DebugPrint( functionName " returned:\n" ); \ + if( result > 0 ) \ + PaUtil_DebugPrint("\t" positiveResultFormatString "\n", result ); \ + else \ + PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) ) +#else +#define PA_LOGAPI(x) +#define PA_LOGAPI_ENTER(functionName) +#define PA_LOGAPI_ENTER_PARAMS(functionName) +#define PA_LOGAPI_EXIT(functionName) +#define PA_LOGAPI_EXIT_PAERROR( functionName, result ) +#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result ) +#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result ) +#endif + + +typedef void (*PaUtilLogCallback ) (const char *log); + +/** + Install user provided log function +*/ +void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb); + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_LOG_H */ diff --git a/Externals/portaudio/src/common/pa_dither.c b/Externals/portaudio/src/common/pa_dither.c new file mode 100644 index 0000000000..7a1b13125b --- /dev/null +++ b/Externals/portaudio/src/common/pa_dither.c @@ -0,0 +1,218 @@ +/* + * $Id: pa_dither.c 1418 2009-10-12 21:00:53Z philburk $ + * Portable Audio I/O Library triangular dither generator + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Phil Burk, Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Functions for generating dither noise +*/ + +#include "pa_types.h" +#include "pa_dither.h" + + +/* Note that the linear congruential algorithm requires 32 bit integers + * because it uses arithmetic overflow. So use PaUint32 instead of + * unsigned long so it will work on 64 bit systems. + */ + +#define PA_DITHER_BITS_ (15) + + +void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *state ) +{ + state->previous = 0; + state->randSeed1 = 22222; + state->randSeed2 = 5555555; +} + + +PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state ) +{ + PaInt32 current, highPass; + + /* Generate two random numbers. */ + state->randSeed1 = (state->randSeed1 * 196314165) + 907633515; + state->randSeed2 = (state->randSeed2 * 196314165) + 907633515; + + /* Generate triangular distribution about 0. + * Shift before adding to prevent overflow which would skew the distribution. + * Also shift an extra bit for the high pass filter. + */ +#define DITHER_SHIFT_ ((sizeof(PaInt32)*8 - PA_DITHER_BITS_) + 1) + + current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) + + (((PaInt32)state->randSeed2)>>DITHER_SHIFT_); + + /* High pass filter to reduce audibility. */ + highPass = current - state->previous; + state->previous = current; + return highPass; +} + + +/* Multiply by PA_FLOAT_DITHER_SCALE_ to get a float between -2.0 and +1.99999 */ +#define PA_FLOAT_DITHER_SCALE_ (1.0f / ((1<randSeed1 = (state->randSeed1 * 196314165) + 907633515; + state->randSeed2 = (state->randSeed2 * 196314165) + 907633515; + + /* Generate triangular distribution about 0. + * Shift before adding to prevent overflow which would skew the distribution. + * Also shift an extra bit for the high pass filter. + */ + current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) + + (((PaInt32)state->randSeed2)>>DITHER_SHIFT_); + + /* High pass filter to reduce audibility. */ + highPass = current - state->previous; + state->previous = current; + return ((float)highPass) * const_float_dither_scale_; +} + + +/* +The following alternate dither algorithms (from musicdsp.org) could be +considered +*/ + +/*Noise shaped dither (March 2000) +------------------- + +This is a simple implementation of highpass triangular-PDF dither with +2nd-order noise shaping, for use when truncating floating point audio +data to fixed point. + +The noise shaping lowers the noise floor by 11dB below 5kHz (@ 44100Hz +sample rate) compared to triangular-PDF dither. The code below assumes +input data is in the range +1 to -1 and doesn't check for overloads! + +To save time when generating dither for multiple channels you can do +things like this: r3=(r1 & 0x7F)<<8; instead of calling rand() again. + + + + int r1, r2; //rectangular-PDF random numbers + float s1, s2; //error feedback buffers + float s = 0.5f; //set to 0.0f for no noise shaping + float w = pow(2.0,bits-1); //word length (usually bits=16) + float wi= 1.0f/w; + float d = wi / RAND_MAX; //dither amplitude (2 lsb) + float o = wi * 0.5f; //remove dc offset + float in, tmp; + int out; + + +//for each sample... + + r2=r1; //can make HP-TRI dither by + r1=rand(); //subtracting previous rand() + + in += s * (s1 + s1 - s2); //error feedback + tmp = in + o + d * (float)(r1 - r2); //dc offset and dither + + out = (int)(w * tmp); //truncate downwards + if(tmp<0.0f) out--; //this is faster than floor() + + s2 = s1; + s1 = in - wi * (float)out; //error + + + +-- +paul.kellett@maxim.abel.co.uk +http://www.maxim.abel.co.uk +*/ + + +/* +16-to-8-bit first-order dither + +Type : First order error feedforward dithering code +References : Posted by Jon Watte + +Notes : +This is about as simple a dithering algorithm as you can implement, but it's +likely to sound better than just truncating to N bits. + +Note that you might not want to carry forward the full difference for infinity. +It's probably likely that the worst performance hit comes from the saturation +conditionals, which can be avoided with appropriate instructions on many DSPs +and integer SIMD type instructions, or CMOV. + +Last, if sound quality is paramount (such as when going from > 16 bits to 16 +bits) you probably want to use a higher-order dither function found elsewhere +on this site. + + +Code : +// This code will down-convert and dither a 16-bit signed short +// mono signal into an 8-bit unsigned char signal, using a first +// order forward-feeding error term dither. + +#define uchar unsigned char + +void dither_one_channel_16_to_8( short * input, uchar * output, int count, int * memory ) +{ + int m = *memory; + while( count-- > 0 ) { + int i = *input++; + i += m; + int j = i + 32768 - 128; + uchar o; + if( j < 0 ) { + o = 0; + } + else if( j > 65535 ) { + o = 255; + } + else { + o = (uchar)((j>>8)&0xff); + } + m = ((j-32768+128)-i); + *output++ = o; + } + *memory = m; +} +*/ diff --git a/Externals/portaudio/src/common/pa_dither.h b/Externals/portaudio/src/common/pa_dither.h new file mode 100644 index 0000000000..a5131b27fa --- /dev/null +++ b/Externals/portaudio/src/common/pa_dither.h @@ -0,0 +1,106 @@ +#ifndef PA_DITHER_H +#define PA_DITHER_H +/* + * $Id: pa_dither.h 1418 2009-10-12 21:00:53Z philburk $ + * Portable Audio I/O Library triangular dither generator + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Phil Burk, Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Functions for generating dither noise +*/ + +#include "pa_types.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* Note that the linear congruential algorithm requires 32 bit integers + * because it uses arithmetic overflow. So use PaUint32 instead of + * unsigned long so it will work on 64 bit systems. + */ + +/** @brief State needed to generate a dither signal */ +typedef struct PaUtilTriangularDitherGenerator{ + PaUint32 previous; + PaUint32 randSeed1; + PaUint32 randSeed2; +} PaUtilTriangularDitherGenerator; + + +/** @brief Initialize dither state */ +void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *ditherState ); + + +/** + @brief Calculate 2 LSB dither signal with a triangular distribution. + Ranged for adding to a 1 bit right-shifted 32 bit integer + prior to >>15. eg: +
+    signed long in = *
+    signed long dither = PaUtil_Generate16BitTriangularDither( ditherState );
+    signed short out = (signed short)(((in>>1) + dither) >> 15);
+
+ @return + A signed 32-bit integer with a range of +32767 to -32768 +*/ +PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState ); + + +/** + @brief Calculate 2 LSB dither signal with a triangular distribution. + Ranged for adding to a pre-scaled float. +
+    float in = *
+    float dither = PaUtil_GenerateFloatTriangularDither( ditherState );
+    // use smaller scaler to prevent overflow when we add the dither
+    signed short out = (signed short)(in*(32766.0f) + dither );
+
+ @return + A float with a range of -2.0 to +1.99999. +*/ +float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *ditherState ); + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_DITHER_H */ diff --git a/Externals/portaudio/src/common/pa_endianness.h b/Externals/portaudio/src/common/pa_endianness.h new file mode 100644 index 0000000000..84e904ca7b --- /dev/null +++ b/Externals/portaudio/src/common/pa_endianness.h @@ -0,0 +1,145 @@ +#ifndef PA_ENDIANNESS_H +#define PA_ENDIANNESS_H +/* + * $Id: pa_endianness.h 1324 2008-01-27 02:03:30Z bjornroche $ + * Portable Audio I/O Library current platform endianness macros + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Phil Burk, Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Configure endianness symbols for the target processor. + + Arrange for either the PA_LITTLE_ENDIAN or PA_BIG_ENDIAN preprocessor symbols + to be defined. The one that is defined reflects the endianness of the target + platform and may be used to implement conditional compilation of byte-order + dependent code. + + If either PA_LITTLE_ENDIAN or PA_BIG_ENDIAN is defined already, then no attempt + is made to override that setting. This may be useful if you have a better way + of determining the platform's endianness. The autoconf mechanism uses this for + example. + + A PA_VALIDATE_ENDIANNESS macro is provided to compare the compile time + and runtime endiannes and raise an assertion if they don't match. +*/ + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* If this is an apple, we need to do detect endianness this way */ +#if defined(__APPLE__) + /* we need to do some endian detection that is sensitive to harware arch */ + #if defined(__LITTLE_ENDIAN__) + #if !defined( PA_LITTLE_ENDIAN ) + #define PA_LITTLE_ENDIAN + #endif + #if defined( PA_BIG_ENDIAN ) + #undef PA_BIG_ENDIAN + #endif + #else + #if !defined( PA_BIG_ENDIAN ) + #define PA_BIG_ENDIAN + #endif + #if defined( PA_LITTLE_ENDIAN ) + #undef PA_LITTLE_ENDIAN + #endif + #endif +#else + /* this is not an apple, so first check the existing defines, and, failing that, + detect well-known architechtures. */ + + #if defined(PA_LITTLE_ENDIAN) || defined(PA_BIG_ENDIAN) + /* endianness define has been set externally, such as by autoconf */ + + #if defined(PA_LITTLE_ENDIAN) && defined(PA_BIG_ENDIAN) + #error both PA_LITTLE_ENDIAN and PA_BIG_ENDIAN have been defined externally to pa_endianness.h - only one endianness at a time please + #endif + + #else + /* endianness define has not been set externally */ + + /* set PA_LITTLE_ENDIAN or PA_BIG_ENDIAN by testing well known platform specific defines */ + + #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(LITTLE_ENDIAN) || defined(__i386) || defined(_M_IX86) || defined(__x86_64__) + #define PA_LITTLE_ENDIAN /* win32, assume intel byte order */ + #else + #define PA_BIG_ENDIAN + #endif + #endif + + #if !defined(PA_LITTLE_ENDIAN) && !defined(PA_BIG_ENDIAN) + /* + If the following error is raised, you either need to modify the code above + to automatically determine the endianness from other symbols defined on your + platform, or define either PA_LITTLE_ENDIAN or PA_BIG_ENDIAN externally. + */ + #error pa_endianness.h was unable to automatically determine the endianness of the target platform + #endif + +#endif + + +/* PA_VALIDATE_ENDIANNESS compares the compile time and runtime endianness, + and raises an assertion if they don't match. must be included in + the context in which this macro is used. +*/ +#if defined(NDEBUG) + #define PA_VALIDATE_ENDIANNESS +#else + #if defined(PA_LITTLE_ENDIAN) + #define PA_VALIDATE_ENDIANNESS \ + { \ + const long nativeOne = 1; \ + assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 1 ); \ + } + #elif defined(PA_BIG_ENDIAN) + #define PA_VALIDATE_ENDIANNESS \ + { \ + const long nativeOne = 1; \ + assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 0 ); \ + } + #endif +#endif + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_ENDIANNESS_H */ diff --git a/Externals/portaudio/src/common/pa_front.c b/Externals/portaudio/src/common/pa_front.c new file mode 100644 index 0000000000..957d1eac47 --- /dev/null +++ b/Externals/portaudio/src/common/pa_front.c @@ -0,0 +1,1770 @@ +/* + * $Id: pa_front.c 1730 2011-08-18 03:43:51Z rossb $ + * Portable Audio I/O Library Multi-Host API front end + * Validate function parameters and manage multiple host APIs. + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Implements PortAudio API functions defined in portaudio.h, checks + some errors, delegates platform-specific behavior to host API implementations. + + Implements the functions defined in the PortAudio API (portaudio.h), + validates some parameters and checks for state inconsistencies before + forwarding API requests to specific Host API implementations (via the + interface declared in pa_hostapi.h), and Streams (via the interface + declared in pa_stream.h). + + This file manages initialization and termination of Host API + implementations via initializer functions stored in the paHostApiInitializers + global array (usually defined in an os-specific pa_[os]_hostapis.c file). + + This file maintains a list of all open streams and closes them at Pa_Terminate(). + + Some utility functions declared in pa_util.h are implemented in this file. + + All PortAudio API functions can be conditionally compiled with logging code. + To compile with logging, define the PA_LOG_API_CALLS precompiler symbol. +*/ + + +#include +#include +#include +#include /* needed by PA_VALIDATE_ENDIANNESS */ + +#include "portaudio.h" +#include "pa_util.h" +#include "pa_endianness.h" +#include "pa_types.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_trace.h" /* still usefull?*/ +#include "pa_debugprint.h" + + +#define PA_VERSION_ 1899 +#define PA_VERSION_TEXT_ "PortAudio V19-devel (built " __DATE__ " " __TIME__ ")" + + + + +int Pa_GetVersion( void ) +{ + return PA_VERSION_; +} + + +const char* Pa_GetVersionText( void ) +{ + return PA_VERSION_TEXT_; +} + + + +#define PA_LAST_HOST_ERROR_TEXT_LENGTH_ 1024 + +static char lastHostErrorText_[ PA_LAST_HOST_ERROR_TEXT_LENGTH_ + 1 ] = {0}; + +static PaHostErrorInfo lastHostErrorInfo_ = { (PaHostApiTypeId)-1, 0, lastHostErrorText_ }; + + +void PaUtil_SetLastHostErrorInfo( PaHostApiTypeId hostApiType, long errorCode, + const char *errorText ) +{ + lastHostErrorInfo_.hostApiType = hostApiType; + lastHostErrorInfo_.errorCode = errorCode; + + strncpy( lastHostErrorText_, errorText, PA_LAST_HOST_ERROR_TEXT_LENGTH_ ); +} + + + +static PaUtilHostApiRepresentation **hostApis_ = 0; +static int hostApisCount_ = 0; +static int defaultHostApiIndex_ = 0; +static int initializationCount_ = 0; +static int deviceCount_ = 0; + +PaUtilStreamRepresentation *firstOpenStream_ = NULL; + + +#define PA_IS_INITIALISED_ (initializationCount_ != 0) + + +static int CountHostApiInitializers( void ) +{ + int result = 0; + + while( paHostApiInitializers[ result ] != 0 ) + ++result; + return result; +} + + +static void TerminateHostApis( void ) +{ + /* terminate in reverse order from initialization */ + PA_DEBUG(("TerminateHostApis in \n")); + + while( hostApisCount_ > 0 ) + { + --hostApisCount_; + hostApis_[hostApisCount_]->Terminate( hostApis_[hostApisCount_] ); + } + hostApisCount_ = 0; + defaultHostApiIndex_ = 0; + deviceCount_ = 0; + + if( hostApis_ != 0 ) + PaUtil_FreeMemory( hostApis_ ); + hostApis_ = 0; + + PA_DEBUG(("TerminateHostApis out\n")); +} + + +static PaError InitializeHostApis( void ) +{ + PaError result = paNoError; + int i, initializerCount, baseDeviceIndex; + + initializerCount = CountHostApiInitializers(); + + hostApis_ = (PaUtilHostApiRepresentation**)PaUtil_AllocateMemory( + sizeof(PaUtilHostApiRepresentation*) * initializerCount ); + if( !hostApis_ ) + { + result = paInsufficientMemory; + goto error; + } + + hostApisCount_ = 0; + defaultHostApiIndex_ = -1; /* indicates that we haven't determined the default host API yet */ + deviceCount_ = 0; + baseDeviceIndex = 0; + + for( i=0; i< initializerCount; ++i ) + { + hostApis_[hostApisCount_] = NULL; + + PA_DEBUG(( "before paHostApiInitializers[%d].\n",i)); + + result = paHostApiInitializers[i]( &hostApis_[hostApisCount_], hostApisCount_ ); + if( result != paNoError ) + goto error; + + PA_DEBUG(( "after paHostApiInitializers[%d].\n",i)); + + if( hostApis_[hostApisCount_] ) + { + PaUtilHostApiRepresentation* hostApi = hostApis_[hostApisCount_]; + assert( hostApi->info.defaultInputDevice < hostApi->info.deviceCount ); + assert( hostApi->info.defaultOutputDevice < hostApi->info.deviceCount ); + + /* the first successfully initialized host API with a default input *or* + output device is used as the default host API. + */ + if( (defaultHostApiIndex_ == -1) && + ( hostApi->info.defaultInputDevice != paNoDevice + || hostApi->info.defaultOutputDevice != paNoDevice ) ) + { + defaultHostApiIndex_ = hostApisCount_; + } + + hostApi->privatePaFrontInfo.baseDeviceIndex = baseDeviceIndex; + + if( hostApi->info.defaultInputDevice != paNoDevice ) + hostApi->info.defaultInputDevice += baseDeviceIndex; + + if( hostApi->info.defaultOutputDevice != paNoDevice ) + hostApi->info.defaultOutputDevice += baseDeviceIndex; + + baseDeviceIndex += hostApi->info.deviceCount; + deviceCount_ += hostApi->info.deviceCount; + + ++hostApisCount_; + } + } + + /* if no host APIs have devices, the default host API is the first initialized host API */ + if( defaultHostApiIndex_ == -1 ) + defaultHostApiIndex_ = 0; + + return result; + +error: + TerminateHostApis(); + return result; +} + + +/* + FindHostApi() finds the index of the host api to which + belongs and returns it. if is + non-null, the host specific device index is returned in it. + returns -1 if is out of range. + +*/ +static int FindHostApi( PaDeviceIndex device, int *hostSpecificDeviceIndex ) +{ + int i=0; + + if( !PA_IS_INITIALISED_ ) + return -1; + + if( device < 0 ) + return -1; + + while( i < hostApisCount_ + && device >= hostApis_[i]->info.deviceCount ) + { + + device -= hostApis_[i]->info.deviceCount; + ++i; + } + + if( i >= hostApisCount_ ) + return -1; + + if( hostSpecificDeviceIndex ) + *hostSpecificDeviceIndex = device; + + return i; +} + + +static void AddOpenStream( PaStream* stream ) +{ + ((PaUtilStreamRepresentation*)stream)->nextOpenStream = firstOpenStream_; + firstOpenStream_ = (PaUtilStreamRepresentation*)stream; +} + + +static void RemoveOpenStream( PaStream* stream ) +{ + PaUtilStreamRepresentation *previous = NULL; + PaUtilStreamRepresentation *current = firstOpenStream_; + + while( current != NULL ) + { + if( ((PaStream*)current) == stream ) + { + if( previous == NULL ) + { + firstOpenStream_ = current->nextOpenStream; + } + else + { + previous->nextOpenStream = current->nextOpenStream; + } + return; + } + else + { + previous = current; + current = current->nextOpenStream; + } + } +} + + +static void CloseOpenStreams( void ) +{ + /* we call Pa_CloseStream() here to ensure that the same destruction + logic is used for automatically closed streams */ + + while( firstOpenStream_ != NULL ) + Pa_CloseStream( firstOpenStream_ ); +} + + +PaError Pa_Initialize( void ) +{ + PaError result; + + PA_LOGAPI_ENTER( "Pa_Initialize" ); + + if( PA_IS_INITIALISED_ ) + { + ++initializationCount_; + result = paNoError; + } + else + { + PA_VALIDATE_TYPE_SIZES; + PA_VALIDATE_ENDIANNESS; + + PaUtil_InitializeClock(); + PaUtil_ResetTraceMessages(); + + result = InitializeHostApis(); + if( result == paNoError ) + ++initializationCount_; + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_Initialize", result ); + + return result; +} + + +PaError Pa_Terminate( void ) +{ + PaError result; + + PA_LOGAPI_ENTER( "Pa_Terminate" ); + + if( PA_IS_INITIALISED_ ) + { + if( --initializationCount_ == 0 ) + { + CloseOpenStreams(); + + TerminateHostApis(); + + PaUtil_DumpTraceMessages(); + } + result = paNoError; + } + else + { + result= paNotInitialized; + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_Terminate", result ); + + return result; +} + + +const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ) +{ + return &lastHostErrorInfo_; +} + + +const char *Pa_GetErrorText( PaError errorCode ) +{ + const char *result; + + switch( errorCode ) + { + case paNoError: result = "Success"; break; + case paNotInitialized: result = "PortAudio not initialized"; break; + /** @todo could catenate the last host error text to result in the case of paUnanticipatedHostError. see: http://www.portaudio.com/trac/ticket/114 */ + case paUnanticipatedHostError: result = "Unanticipated host error"; break; + case paInvalidChannelCount: result = "Invalid number of channels"; break; + case paInvalidSampleRate: result = "Invalid sample rate"; break; + case paInvalidDevice: result = "Invalid device"; break; + case paInvalidFlag: result = "Invalid flag"; break; + case paSampleFormatNotSupported: result = "Sample format not supported"; break; + case paBadIODeviceCombination: result = "Illegal combination of I/O devices"; break; + case paInsufficientMemory: result = "Insufficient memory"; break; + case paBufferTooBig: result = "Buffer too big"; break; + case paBufferTooSmall: result = "Buffer too small"; break; + case paNullCallback: result = "No callback routine specified"; break; + case paBadStreamPtr: result = "Invalid stream pointer"; break; + case paTimedOut: result = "Wait timed out"; break; + case paInternalError: result = "Internal PortAudio error"; break; + case paDeviceUnavailable: result = "Device unavailable"; break; + case paIncompatibleHostApiSpecificStreamInfo: result = "Incompatible host API specific stream info"; break; + case paStreamIsStopped: result = "Stream is stopped"; break; + case paStreamIsNotStopped: result = "Stream is not stopped"; break; + case paInputOverflowed: result = "Input overflowed"; break; + case paOutputUnderflowed: result = "Output underflowed"; break; + case paHostApiNotFound: result = "Host API not found"; break; + case paInvalidHostApi: result = "Invalid host API"; break; + case paCanNotReadFromACallbackStream: result = "Can't read from a callback stream"; break; + case paCanNotWriteToACallbackStream: result = "Can't write to a callback stream"; break; + case paCanNotReadFromAnOutputOnlyStream: result = "Can't read from an output only stream"; break; + case paCanNotWriteToAnInputOnlyStream: result = "Can't write to an input only stream"; break; + case paIncompatibleStreamHostApi: result = "Incompatible stream host API"; break; + case paBadBufferPtr: result = "Bad buffer pointer"; break; + default: + if( errorCode > 0 ) + result = "Invalid error code (value greater than zero)"; + else + result = "Invalid error code"; + break; + } + return result; +} + + +PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ) +{ + PaHostApiIndex result; + int i; + + PA_LOGAPI_ENTER_PARAMS( "Pa_HostApiTypeIdToHostApiIndex" ); + PA_LOGAPI(("\tPaHostApiTypeId type: %d\n", type )); + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + } + else + { + result = paHostApiNotFound; + + for( i=0; i < hostApisCount_; ++i ) + { + if( hostApis_[i]->info.type == type ) + { + result = i; + break; + } + } + } + + PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( "Pa_HostApiTypeIdToHostApiIndex", "PaHostApiIndex: %d", result ); + + return result; +} + + +PaError PaUtil_GetHostApiRepresentation( struct PaUtilHostApiRepresentation **hostApi, + PaHostApiTypeId type ) +{ + PaError result; + int i; + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + } + else + { + result = paHostApiNotFound; + + for( i=0; i < hostApisCount_; ++i ) + { + if( hostApis_[i]->info.type == type ) + { + *hostApi = hostApis_[i]; + result = paNoError; + break; + } + } + } + + return result; +} + + +PaError PaUtil_DeviceIndexToHostApiDeviceIndex( + PaDeviceIndex *hostApiDevice, PaDeviceIndex device, struct PaUtilHostApiRepresentation *hostApi ) +{ + PaError result; + PaDeviceIndex x; + + x = device - hostApi->privatePaFrontInfo.baseDeviceIndex; + + if( x < 0 || x >= hostApi->info.deviceCount ) + { + result = paInvalidDevice; + } + else + { + *hostApiDevice = x; + result = paNoError; + } + + return result; +} + + +PaHostApiIndex Pa_GetHostApiCount( void ) +{ + int result; + + PA_LOGAPI_ENTER( "Pa_GetHostApiCount" ); + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + } + else + { + result = hostApisCount_; + } + + PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( "Pa_GetHostApiCount", "PaHostApiIndex: %d", result ); + + return result; +} + + +PaHostApiIndex Pa_GetDefaultHostApi( void ) +{ + int result; + + PA_LOGAPI_ENTER( "Pa_GetDefaultHostApi" ); + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + } + else + { + result = defaultHostApiIndex_; + + /* internal consistency check: make sure that the default host api + index is within range */ + + if( result < 0 || result >= hostApisCount_ ) + { + result = paInternalError; + } + } + + PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( "Pa_GetDefaultHostApi", "PaHostApiIndex: %d", result ); + + return result; +} + + +const PaHostApiInfo* Pa_GetHostApiInfo( PaHostApiIndex hostApi ) +{ + PaHostApiInfo *info; + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetHostApiInfo" ); + PA_LOGAPI(("\tPaHostApiIndex hostApi: %d\n", hostApi )); + + if( !PA_IS_INITIALISED_ ) + { + info = NULL; + + PA_LOGAPI(("Pa_GetHostApiInfo returned:\n" )); + PA_LOGAPI(("\tPaHostApiInfo*: NULL [ PortAudio not initialized ]\n" )); + + } + else if( hostApi < 0 || hostApi >= hostApisCount_ ) + { + info = NULL; + + PA_LOGAPI(("Pa_GetHostApiInfo returned:\n" )); + PA_LOGAPI(("\tPaHostApiInfo*: NULL [ hostApi out of range ]\n" )); + + } + else + { + info = &hostApis_[hostApi]->info; + + PA_LOGAPI(("Pa_GetHostApiInfo returned:\n" )); + PA_LOGAPI(("\tPaHostApiInfo*: 0x%p\n", info )); + PA_LOGAPI(("\t{\n" )); + PA_LOGAPI(("\t\tint structVersion: %d\n", info->structVersion )); + PA_LOGAPI(("\t\tPaHostApiTypeId type: %d\n", info->type )); + PA_LOGAPI(("\t\tconst char *name: %s\n", info->name )); + PA_LOGAPI(("\t}\n" )); + + } + + return info; +} + + +PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, int hostApiDeviceIndex ) +{ + PaDeviceIndex result; + + PA_LOGAPI_ENTER_PARAMS( "Pa_HostApiDeviceIndexToPaDeviceIndex" ); + PA_LOGAPI(("\tPaHostApiIndex hostApi: %d\n", hostApi )); + PA_LOGAPI(("\tint hostApiDeviceIndex: %d\n", hostApiDeviceIndex )); + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + } + else + { + if( hostApi < 0 || hostApi >= hostApisCount_ ) + { + result = paInvalidHostApi; + } + else + { + if( hostApiDeviceIndex < 0 || + hostApiDeviceIndex >= hostApis_[hostApi]->info.deviceCount ) + { + result = paInvalidDevice; + } + else + { + result = hostApis_[hostApi]->privatePaFrontInfo.baseDeviceIndex + hostApiDeviceIndex; + } + } + } + + PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( "Pa_HostApiDeviceIndexToPaDeviceIndex", "PaDeviceIndex: %d", result ); + + return result; +} + + +PaDeviceIndex Pa_GetDeviceCount( void ) +{ + PaDeviceIndex result; + + PA_LOGAPI_ENTER( "Pa_GetDeviceCount" ); + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + } + else + { + result = deviceCount_; + } + + PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( "Pa_GetDeviceCount", "PaDeviceIndex: %d", result ); + + return result; +} + + +PaDeviceIndex Pa_GetDefaultInputDevice( void ) +{ + PaHostApiIndex hostApi; + PaDeviceIndex result; + + PA_LOGAPI_ENTER( "Pa_GetDefaultInputDevice" ); + + hostApi = Pa_GetDefaultHostApi(); + if( hostApi < 0 ) + { + result = paNoDevice; + } + else + { + result = hostApis_[hostApi]->info.defaultInputDevice; + } + + PA_LOGAPI_EXIT_T( "Pa_GetDefaultInputDevice", "PaDeviceIndex: %d", result ); + + return result; +} + + +PaDeviceIndex Pa_GetDefaultOutputDevice( void ) +{ + PaHostApiIndex hostApi; + PaDeviceIndex result; + + PA_LOGAPI_ENTER( "Pa_GetDefaultOutputDevice" ); + + hostApi = Pa_GetDefaultHostApi(); + if( hostApi < 0 ) + { + result = paNoDevice; + } + else + { + result = hostApis_[hostApi]->info.defaultOutputDevice; + } + + PA_LOGAPI_EXIT_T( "Pa_GetDefaultOutputDevice", "PaDeviceIndex: %d", result ); + + return result; +} + + +const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ) +{ + int hostSpecificDeviceIndex; + int hostApiIndex = FindHostApi( device, &hostSpecificDeviceIndex ); + PaDeviceInfo *result; + + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetDeviceInfo" ); + PA_LOGAPI(("\tPaDeviceIndex device: %d\n", device )); + + if( hostApiIndex < 0 ) + { + result = NULL; + + PA_LOGAPI(("Pa_GetDeviceInfo returned:\n" )); + PA_LOGAPI(("\tPaDeviceInfo* NULL [ invalid device index ]\n" )); + + } + else + { + result = hostApis_[hostApiIndex]->deviceInfos[ hostSpecificDeviceIndex ]; + + PA_LOGAPI(("Pa_GetDeviceInfo returned:\n" )); + PA_LOGAPI(("\tPaDeviceInfo*: 0x%p:\n", result )); + PA_LOGAPI(("\t{\n" )); + + PA_LOGAPI(("\t\tint structVersion: %d\n", result->structVersion )); + PA_LOGAPI(("\t\tconst char *name: %s\n", result->name )); + PA_LOGAPI(("\t\tPaHostApiIndex hostApi: %d\n", result->hostApi )); + PA_LOGAPI(("\t\tint maxInputChannels: %d\n", result->maxInputChannels )); + PA_LOGAPI(("\t\tint maxOutputChannels: %d\n", result->maxOutputChannels )); + PA_LOGAPI(("\t}\n" )); + + } + + return result; +} + + +/* + SampleFormatIsValid() returns 1 if sampleFormat is a sample format + defined in portaudio.h, or 0 otherwise. +*/ +static int SampleFormatIsValid( PaSampleFormat format ) +{ + switch( format & ~paNonInterleaved ) + { + case paFloat32: return 1; + case paInt16: return 1; + case paInt32: return 1; + case paInt24: return 1; + case paInt8: return 1; + case paUInt8: return 1; + case paCustomFormat: return 1; + default: return 0; + } +} + +/* + NOTE: make sure this validation list is kept syncronised with the one in + pa_hostapi.h + + ValidateOpenStreamParameters() checks that parameters to Pa_OpenStream() + conform to the expected values as described below. This function is + also designed to be used with the proposed Pa_IsFormatSupported() function. + + There are basically two types of validation that could be performed: + Generic conformance validation, and device capability mismatch + validation. This function performs only generic conformance validation. + Validation that would require knowledge of device capabilities is + not performed because of potentially complex relationships between + combinations of parameters - for example, even if the sampleRate + seems ok, it might not be for a duplex stream - we have no way of + checking this in an API-neutral way, so we don't try. + + On success the function returns PaNoError and fills in hostApi, + hostApiInputDeviceID, and hostApiOutputDeviceID fields. On failure + the function returns an error code indicating the first encountered + parameter error. + + + If ValidateOpenStreamParameters() returns paNoError, the following + assertions are guaranteed to be true. + + - at least one of inputParameters & outputParmeters is valid (not NULL) + + - if inputParameters & outputParameters are both valid, that + inputParameters->device & outputParameters->device both use the same host api + + PaDeviceIndex inputParameters->device + - is within range (0 to Pa_GetDeviceCount-1) Or: + - is paUseHostApiSpecificDeviceSpecification and + inputParameters->hostApiSpecificStreamInfo is non-NULL and refers + to a valid host api + + int inputParameters->channelCount + - if inputParameters->device is not paUseHostApiSpecificDeviceSpecification, channelCount is > 0 + - upper bound is NOT validated against device capabilities + + PaSampleFormat inputParameters->sampleFormat + - is one of the sample formats defined in portaudio.h + + void *inputParameters->hostApiSpecificStreamInfo + - if supplied its hostApi field matches the input device's host Api + + PaDeviceIndex outputParmeters->device + - is within range (0 to Pa_GetDeviceCount-1) + + int outputParmeters->channelCount + - if inputDevice is valid, channelCount is > 0 + - upper bound is NOT validated against device capabilities + + PaSampleFormat outputParmeters->sampleFormat + - is one of the sample formats defined in portaudio.h + + void *outputParmeters->hostApiSpecificStreamInfo + - if supplied its hostApi field matches the output device's host Api + + double sampleRate + - is not an 'absurd' rate (less than 1000. or greater than 200000.) + - sampleRate is NOT validated against device capabilities + + PaStreamFlags streamFlags + - unused platform neutral flags are zero + - paNeverDropInput is only used for full-duplex callback streams with + variable buffer size (paFramesPerBufferUnspecified) +*/ +static PaError ValidateOpenStreamParameters( + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + PaUtilHostApiRepresentation **hostApi, + PaDeviceIndex *hostApiInputDevice, + PaDeviceIndex *hostApiOutputDevice ) +{ + int inputHostApiIndex = -1, /* Surpress uninitialised var warnings: compiler does */ + outputHostApiIndex = -1; /* not see that if inputParameters and outputParame- */ + /* ters are both nonzero, these indices are set. */ + + if( (inputParameters == NULL) && (outputParameters == NULL) ) + { + return paInvalidDevice; /** @todo should be a new error code "invalid device parameters" or something */ + } + else + { + if( inputParameters == NULL ) + { + *hostApiInputDevice = paNoDevice; + } + else if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + { + if( inputParameters->hostApiSpecificStreamInfo ) + { + inputHostApiIndex = Pa_HostApiTypeIdToHostApiIndex( + ((PaUtilHostApiSpecificStreamInfoHeader*)inputParameters->hostApiSpecificStreamInfo)->hostApiType ); + + if( inputHostApiIndex != -1 ) + { + *hostApiInputDevice = paUseHostApiSpecificDeviceSpecification; + *hostApi = hostApis_[inputHostApiIndex]; + } + else + { + return paInvalidDevice; + } + } + else + { + return paInvalidDevice; + } + } + else + { + if( inputParameters->device < 0 || inputParameters->device >= deviceCount_ ) + return paInvalidDevice; + + inputHostApiIndex = FindHostApi( inputParameters->device, hostApiInputDevice ); + if( inputHostApiIndex < 0 ) + return paInternalError; + + *hostApi = hostApis_[inputHostApiIndex]; + + if( inputParameters->channelCount <= 0 ) + return paInvalidChannelCount; + + if( !SampleFormatIsValid( inputParameters->sampleFormat ) ) + return paSampleFormatNotSupported; + + if( inputParameters->hostApiSpecificStreamInfo != NULL ) + { + if( ((PaUtilHostApiSpecificStreamInfoHeader*)inputParameters->hostApiSpecificStreamInfo)->hostApiType + != (*hostApi)->info.type ) + return paIncompatibleHostApiSpecificStreamInfo; + } + } + + if( outputParameters == NULL ) + { + *hostApiOutputDevice = paNoDevice; + } + else if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + { + if( outputParameters->hostApiSpecificStreamInfo ) + { + outputHostApiIndex = Pa_HostApiTypeIdToHostApiIndex( + ((PaUtilHostApiSpecificStreamInfoHeader*)outputParameters->hostApiSpecificStreamInfo)->hostApiType ); + + if( outputHostApiIndex != -1 ) + { + *hostApiOutputDevice = paUseHostApiSpecificDeviceSpecification; + *hostApi = hostApis_[outputHostApiIndex]; + } + else + { + return paInvalidDevice; + } + } + else + { + return paInvalidDevice; + } + } + else + { + if( outputParameters->device < 0 || outputParameters->device >= deviceCount_ ) + return paInvalidDevice; + + outputHostApiIndex = FindHostApi( outputParameters->device, hostApiOutputDevice ); + if( outputHostApiIndex < 0 ) + return paInternalError; + + *hostApi = hostApis_[outputHostApiIndex]; + + if( outputParameters->channelCount <= 0 ) + return paInvalidChannelCount; + + if( !SampleFormatIsValid( outputParameters->sampleFormat ) ) + return paSampleFormatNotSupported; + + if( outputParameters->hostApiSpecificStreamInfo != NULL ) + { + if( ((PaUtilHostApiSpecificStreamInfoHeader*)outputParameters->hostApiSpecificStreamInfo)->hostApiType + != (*hostApi)->info.type ) + return paIncompatibleHostApiSpecificStreamInfo; + } + } + + if( (inputParameters != NULL) && (outputParameters != NULL) ) + { + /* ensure that both devices use the same API */ + if( inputHostApiIndex != outputHostApiIndex ) + return paBadIODeviceCombination; + } + } + + + /* Check for absurd sample rates. */ + if( (sampleRate < 1000.0) || (sampleRate > 200000.0) ) + return paInvalidSampleRate; + + if( ((streamFlags & ~paPlatformSpecificFlags) & ~(paClipOff | paDitherOff | paNeverDropInput | paPrimeOutputBuffersUsingStreamCallback ) ) != 0 ) + return paInvalidFlag; + + if( streamFlags & paNeverDropInput ) + { + /* must be a callback stream */ + if( !streamCallback ) + return paInvalidFlag; + + /* must be a full duplex stream */ + if( (inputParameters == NULL) || (outputParameters == NULL) ) + return paInvalidFlag; + + /* must use paFramesPerBufferUnspecified */ + if( framesPerBuffer != paFramesPerBufferUnspecified ) + return paInvalidFlag; + } + + return paNoError; +} + + +PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + PaError result; + PaUtilHostApiRepresentation *hostApi = 0; + PaDeviceIndex hostApiInputDevice = paNoDevice, hostApiOutputDevice = paNoDevice; + PaStreamParameters hostApiInputParameters, hostApiOutputParameters; + PaStreamParameters *hostApiInputParametersPtr, *hostApiOutputParametersPtr; + + +#ifdef PA_LOG_API_CALLS + PA_LOGAPI_ENTER_PARAMS( "Pa_IsFormatSupported" ); + + if( inputParameters == NULL ){ + PA_LOGAPI(("\tPaStreamParameters *inputParameters: NULL\n" )); + }else{ + PA_LOGAPI(("\tPaStreamParameters *inputParameters: 0x%p\n", inputParameters )); + PA_LOGAPI(("\tPaDeviceIndex inputParameters->device: %d\n", inputParameters->device )); + PA_LOGAPI(("\tint inputParameters->channelCount: %d\n", inputParameters->channelCount )); + PA_LOGAPI(("\tPaSampleFormat inputParameters->sampleFormat: %d\n", inputParameters->sampleFormat )); + PA_LOGAPI(("\tPaTime inputParameters->suggestedLatency: %f\n", inputParameters->suggestedLatency )); + PA_LOGAPI(("\tvoid *inputParameters->hostApiSpecificStreamInfo: 0x%p\n", inputParameters->hostApiSpecificStreamInfo )); + } + + if( outputParameters == NULL ){ + PA_LOGAPI(("\tPaStreamParameters *outputParameters: NULL\n" )); + }else{ + PA_LOGAPI(("\tPaStreamParameters *outputParameters: 0x%p\n", outputParameters )); + PA_LOGAPI(("\tPaDeviceIndex outputParameters->device: %d\n", outputParameters->device )); + PA_LOGAPI(("\tint outputParameters->channelCount: %d\n", outputParameters->channelCount )); + PA_LOGAPI(("\tPaSampleFormat outputParameters->sampleFormat: %d\n", outputParameters->sampleFormat )); + PA_LOGAPI(("\tPaTime outputParameters->suggestedLatency: %f\n", outputParameters->suggestedLatency )); + PA_LOGAPI(("\tvoid *outputParameters->hostApiSpecificStreamInfo: 0x%p\n", outputParameters->hostApiSpecificStreamInfo )); + } + + PA_LOGAPI(("\tdouble sampleRate: %g\n", sampleRate )); +#endif + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + + PA_LOGAPI_EXIT_PAERROR( "Pa_IsFormatSupported", result ); + return result; + } + + result = ValidateOpenStreamParameters( inputParameters, + outputParameters, + sampleRate, 0, paNoFlag, 0, + &hostApi, + &hostApiInputDevice, + &hostApiOutputDevice ); + if( result != paNoError ) + { + PA_LOGAPI_EXIT_PAERROR( "Pa_IsFormatSupported", result ); + return result; + } + + + if( inputParameters ) + { + hostApiInputParameters.device = hostApiInputDevice; + hostApiInputParameters.channelCount = inputParameters->channelCount; + hostApiInputParameters.sampleFormat = inputParameters->sampleFormat; + hostApiInputParameters.suggestedLatency = inputParameters->suggestedLatency; + hostApiInputParameters.hostApiSpecificStreamInfo = inputParameters->hostApiSpecificStreamInfo; + hostApiInputParametersPtr = &hostApiInputParameters; + } + else + { + hostApiInputParametersPtr = NULL; + } + + if( outputParameters ) + { + hostApiOutputParameters.device = hostApiOutputDevice; + hostApiOutputParameters.channelCount = outputParameters->channelCount; + hostApiOutputParameters.sampleFormat = outputParameters->sampleFormat; + hostApiOutputParameters.suggestedLatency = outputParameters->suggestedLatency; + hostApiOutputParameters.hostApiSpecificStreamInfo = outputParameters->hostApiSpecificStreamInfo; + hostApiOutputParametersPtr = &hostApiOutputParameters; + } + else + { + hostApiOutputParametersPtr = NULL; + } + + result = hostApi->IsFormatSupported( hostApi, + hostApiInputParametersPtr, hostApiOutputParametersPtr, + sampleRate ); + +#ifdef PA_LOG_API_CALLS + PA_LOGAPI(("Pa_OpenStream returned:\n" )); + if( result == paFormatIsSupported ) + PA_LOGAPI(("\tPaError: 0 [ paFormatIsSupported ]\n" )); + else + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); +#endif + + return result; +} + + +PaError Pa_OpenStream( PaStream** stream, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result; + PaUtilHostApiRepresentation *hostApi = 0; + PaDeviceIndex hostApiInputDevice = paNoDevice, hostApiOutputDevice = paNoDevice; + PaStreamParameters hostApiInputParameters, hostApiOutputParameters; + PaStreamParameters *hostApiInputParametersPtr, *hostApiOutputParametersPtr; + + +#ifdef PA_LOG_API_CALLS + PA_LOGAPI_ENTER_PARAMS( "Pa_OpenStream" ); + PA_LOGAPI(("\tPaStream** stream: 0x%p\n", stream )); + + if( inputParameters == NULL ){ + PA_LOGAPI(("\tPaStreamParameters *inputParameters: NULL\n" )); + }else{ + PA_LOGAPI(("\tPaStreamParameters *inputParameters: 0x%p\n", inputParameters )); + PA_LOGAPI(("\tPaDeviceIndex inputParameters->device: %d\n", inputParameters->device )); + PA_LOGAPI(("\tint inputParameters->channelCount: %d\n", inputParameters->channelCount )); + PA_LOGAPI(("\tPaSampleFormat inputParameters->sampleFormat: %d\n", inputParameters->sampleFormat )); + PA_LOGAPI(("\tPaTime inputParameters->suggestedLatency: %f\n", inputParameters->suggestedLatency )); + PA_LOGAPI(("\tvoid *inputParameters->hostApiSpecificStreamInfo: 0x%p\n", inputParameters->hostApiSpecificStreamInfo )); + } + + if( outputParameters == NULL ){ + PA_LOGAPI(("\tPaStreamParameters *outputParameters: NULL\n" )); + }else{ + PA_LOGAPI(("\tPaStreamParameters *outputParameters: 0x%p\n", outputParameters )); + PA_LOGAPI(("\tPaDeviceIndex outputParameters->device: %d\n", outputParameters->device )); + PA_LOGAPI(("\tint outputParameters->channelCount: %d\n", outputParameters->channelCount )); + PA_LOGAPI(("\tPaSampleFormat outputParameters->sampleFormat: %d\n", outputParameters->sampleFormat )); + PA_LOGAPI(("\tPaTime outputParameters->suggestedLatency: %f\n", outputParameters->suggestedLatency )); + PA_LOGAPI(("\tvoid *outputParameters->hostApiSpecificStreamInfo: 0x%p\n", outputParameters->hostApiSpecificStreamInfo )); + } + + PA_LOGAPI(("\tdouble sampleRate: %g\n", sampleRate )); + PA_LOGAPI(("\tunsigned long framesPerBuffer: %d\n", framesPerBuffer )); + PA_LOGAPI(("\tPaStreamFlags streamFlags: 0x%x\n", streamFlags )); + PA_LOGAPI(("\tPaStreamCallback *streamCallback: 0x%p\n", streamCallback )); + PA_LOGAPI(("\tvoid *userData: 0x%p\n", userData )); +#endif + + if( !PA_IS_INITIALISED_ ) + { + result = paNotInitialized; + + PA_LOGAPI(("Pa_OpenStream returned:\n" )); + PA_LOGAPI(("\t*(PaStream** stream): undefined\n" )); + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); + return result; + } + + /* Check for parameter errors. + NOTE: make sure this validation list is kept syncronised with the one + in pa_hostapi.h + */ + + if( stream == NULL ) + { + result = paBadStreamPtr; + + PA_LOGAPI(("Pa_OpenStream returned:\n" )); + PA_LOGAPI(("\t*(PaStream** stream): undefined\n" )); + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); + return result; + } + + result = ValidateOpenStreamParameters( inputParameters, + outputParameters, + sampleRate, framesPerBuffer, + streamFlags, streamCallback, + &hostApi, + &hostApiInputDevice, + &hostApiOutputDevice ); + if( result != paNoError ) + { + PA_LOGAPI(("Pa_OpenStream returned:\n" )); + PA_LOGAPI(("\t*(PaStream** stream): undefined\n" )); + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); + return result; + } + + + if( inputParameters ) + { + hostApiInputParameters.device = hostApiInputDevice; + hostApiInputParameters.channelCount = inputParameters->channelCount; + hostApiInputParameters.sampleFormat = inputParameters->sampleFormat; + hostApiInputParameters.suggestedLatency = inputParameters->suggestedLatency; + hostApiInputParameters.hostApiSpecificStreamInfo = inputParameters->hostApiSpecificStreamInfo; + hostApiInputParametersPtr = &hostApiInputParameters; + } + else + { + hostApiInputParametersPtr = NULL; + } + + if( outputParameters ) + { + hostApiOutputParameters.device = hostApiOutputDevice; + hostApiOutputParameters.channelCount = outputParameters->channelCount; + hostApiOutputParameters.sampleFormat = outputParameters->sampleFormat; + hostApiOutputParameters.suggestedLatency = outputParameters->suggestedLatency; + hostApiOutputParameters.hostApiSpecificStreamInfo = outputParameters->hostApiSpecificStreamInfo; + hostApiOutputParametersPtr = &hostApiOutputParameters; + } + else + { + hostApiOutputParametersPtr = NULL; + } + + result = hostApi->OpenStream( hostApi, stream, + hostApiInputParametersPtr, hostApiOutputParametersPtr, + sampleRate, framesPerBuffer, streamFlags, streamCallback, userData ); + + if( result == paNoError ) + AddOpenStream( *stream ); + + + PA_LOGAPI(("Pa_OpenStream returned:\n" )); + PA_LOGAPI(("\t*(PaStream** stream): 0x%p\n", *stream )); + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); + + return result; +} + + +PaError Pa_OpenDefaultStream( PaStream** stream, + int inputChannelCount, + int outputChannelCount, + PaSampleFormat sampleFormat, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result; + PaStreamParameters hostApiInputParameters, hostApiOutputParameters; + PaStreamParameters *hostApiInputParametersPtr, *hostApiOutputParametersPtr; + + PA_LOGAPI_ENTER_PARAMS( "Pa_OpenDefaultStream" ); + PA_LOGAPI(("\tPaStream** stream: 0x%p\n", stream )); + PA_LOGAPI(("\tint inputChannelCount: %d\n", inputChannelCount )); + PA_LOGAPI(("\tint outputChannelCount: %d\n", outputChannelCount )); + PA_LOGAPI(("\tPaSampleFormat sampleFormat: %d\n", sampleFormat )); + PA_LOGAPI(("\tdouble sampleRate: %g\n", sampleRate )); + PA_LOGAPI(("\tunsigned long framesPerBuffer: %d\n", framesPerBuffer )); + PA_LOGAPI(("\tPaStreamCallback *streamCallback: 0x%p\n", streamCallback )); + PA_LOGAPI(("\tvoid *userData: 0x%p\n", userData )); + + + if( inputChannelCount > 0 ) + { + hostApiInputParameters.device = Pa_GetDefaultInputDevice(); + if( hostApiInputParameters.device == paNoDevice ) + return paDeviceUnavailable; + + hostApiInputParameters.channelCount = inputChannelCount; + hostApiInputParameters.sampleFormat = sampleFormat; + /* defaultHighInputLatency is used below instead of + defaultLowInputLatency because it is more important for the default + stream to work reliably than it is for it to work with the lowest + latency. + */ + hostApiInputParameters.suggestedLatency = + Pa_GetDeviceInfo( hostApiInputParameters.device )->defaultHighInputLatency; + hostApiInputParameters.hostApiSpecificStreamInfo = NULL; + hostApiInputParametersPtr = &hostApiInputParameters; + } + else + { + hostApiInputParametersPtr = NULL; + } + + if( outputChannelCount > 0 ) + { + hostApiOutputParameters.device = Pa_GetDefaultOutputDevice(); + if( hostApiOutputParameters.device == paNoDevice ) + return paDeviceUnavailable; + + hostApiOutputParameters.channelCount = outputChannelCount; + hostApiOutputParameters.sampleFormat = sampleFormat; + /* defaultHighOutputLatency is used below instead of + defaultLowOutputLatency because it is more important for the default + stream to work reliably than it is for it to work with the lowest + latency. + */ + hostApiOutputParameters.suggestedLatency = + Pa_GetDeviceInfo( hostApiOutputParameters.device )->defaultHighOutputLatency; + hostApiOutputParameters.hostApiSpecificStreamInfo = NULL; + hostApiOutputParametersPtr = &hostApiOutputParameters; + } + else + { + hostApiOutputParametersPtr = NULL; + } + + + result = Pa_OpenStream( + stream, hostApiInputParametersPtr, hostApiOutputParametersPtr, + sampleRate, framesPerBuffer, paNoFlag, streamCallback, userData ); + + PA_LOGAPI(("Pa_OpenDefaultStream returned:\n" )); + PA_LOGAPI(("\t*(PaStream** stream): 0x%p", *stream )); + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); + + return result; +} + + +PaError PaUtil_ValidateStreamPointer( PaStream* stream ) +{ + if( !PA_IS_INITIALISED_ ) return paNotInitialized; + + if( stream == NULL ) return paBadStreamPtr; + + if( ((PaUtilStreamRepresentation*)stream)->magic != PA_STREAM_MAGIC ) + return paBadStreamPtr; + + return paNoError; +} + + +PaError Pa_CloseStream( PaStream* stream ) +{ + PaUtilStreamInterface *interface; + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_CloseStream" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + /* always remove the open stream from our list, even if this function + eventually returns an error. Otherwise CloseOpenStreams() will + get stuck in an infinite loop */ + RemoveOpenStream( stream ); /* be sure to call this _before_ closing the stream */ + + if( result == paNoError ) + { + interface = PA_STREAM_INTERFACE(stream); + + /* abort the stream if it isn't stopped */ + result = interface->IsStopped( stream ); + if( result == 1 ) + result = paNoError; + else if( result == 0 ) + result = interface->Abort( stream ); + + if( result == paNoError ) /** @todo REVIEW: shouldn't we close anyway? see: http://www.portaudio.com/trac/ticket/115 */ + result = interface->Close( stream ); + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_CloseStream", result ); + + return result; +} + + +PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_SetStreamFinishedCallback" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + PA_LOGAPI(("\tPaStreamFinishedCallback* streamFinishedCallback: 0x%p\n", streamFinishedCallback )); + + if( result == paNoError ) + { + result = PA_STREAM_INTERFACE(stream)->IsStopped( stream ); + if( result == 0 ) + { + result = paStreamIsNotStopped ; + } + if( result == 1 ) + { + PA_STREAM_REP( stream )->streamFinishedCallback = streamFinishedCallback; + result = paNoError; + } + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_SetStreamFinishedCallback", result ); + + return result; + +} + + +PaError Pa_StartStream( PaStream *stream ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_StartStream" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( result == paNoError ) + { + result = PA_STREAM_INTERFACE(stream)->IsStopped( stream ); + if( result == 0 ) + { + result = paStreamIsNotStopped ; + } + else if( result == 1 ) + { + result = PA_STREAM_INTERFACE(stream)->Start( stream ); + } + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_StartStream", result ); + + return result; +} + + +PaError Pa_StopStream( PaStream *stream ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_StopStream" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( result == paNoError ) + { + result = PA_STREAM_INTERFACE(stream)->IsStopped( stream ); + if( result == 0 ) + { + result = PA_STREAM_INTERFACE(stream)->Stop( stream ); + } + else if( result == 1 ) + { + result = paStreamIsStopped; + } + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_StopStream", result ); + + return result; +} + + +PaError Pa_AbortStream( PaStream *stream ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_AbortStream" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( result == paNoError ) + { + result = PA_STREAM_INTERFACE(stream)->IsStopped( stream ); + if( result == 0 ) + { + result = PA_STREAM_INTERFACE(stream)->Abort( stream ); + } + else if( result == 1 ) + { + result = paStreamIsStopped; + } + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_AbortStream", result ); + + return result; +} + + +PaError Pa_IsStreamStopped( PaStream *stream ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_IsStreamStopped" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( result == paNoError ) + result = PA_STREAM_INTERFACE(stream)->IsStopped( stream ); + + PA_LOGAPI_EXIT_PAERROR( "Pa_IsStreamStopped", result ); + + return result; +} + + +PaError Pa_IsStreamActive( PaStream *stream ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_IsStreamActive" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( result == paNoError ) + result = PA_STREAM_INTERFACE(stream)->IsActive( stream ); + + + PA_LOGAPI_EXIT_PAERROR( "Pa_IsStreamActive", result ); + + return result; +} + + +const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ) +{ + PaError error = PaUtil_ValidateStreamPointer( stream ); + const PaStreamInfo *result; + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetStreamInfo" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( error != paNoError ) + { + result = 0; + + PA_LOGAPI(("Pa_GetStreamInfo returned:\n" )); + PA_LOGAPI(("\tconst PaStreamInfo*: 0 [PaError error:%d ( %s )]\n", error, Pa_GetErrorText( error ) )); + + } + else + { + result = &PA_STREAM_REP( stream )->streamInfo; + + PA_LOGAPI(("Pa_GetStreamInfo returned:\n" )); + PA_LOGAPI(("\tconst PaStreamInfo*: 0x%p:\n", result )); + PA_LOGAPI(("\t{" )); + + PA_LOGAPI(("\t\tint structVersion: %d\n", result->structVersion )); + PA_LOGAPI(("\t\tPaTime inputLatency: %f\n", result->inputLatency )); + PA_LOGAPI(("\t\tPaTime outputLatency: %f\n", result->outputLatency )); + PA_LOGAPI(("\t\tdouble sampleRate: %f\n", result->sampleRate )); + PA_LOGAPI(("\t}\n" )); + + } + + return result; +} + + +PaTime Pa_GetStreamTime( PaStream *stream ) +{ + PaError error = PaUtil_ValidateStreamPointer( stream ); + PaTime result; + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetStreamTime" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( error != paNoError ) + { + result = 0; + + PA_LOGAPI(("Pa_GetStreamTime returned:\n" )); + PA_LOGAPI(("\tPaTime: 0 [PaError error:%d ( %s )]\n", result, error, Pa_GetErrorText( error ) )); + + } + else + { + result = PA_STREAM_INTERFACE(stream)->GetTime( stream ); + + PA_LOGAPI(("Pa_GetStreamTime returned:\n" )); + PA_LOGAPI(("\tPaTime: %g\n", result )); + + } + + return result; +} + + +double Pa_GetStreamCpuLoad( PaStream* stream ) +{ + PaError error = PaUtil_ValidateStreamPointer( stream ); + double result; + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetStreamCpuLoad" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( error != paNoError ) + { + + result = 0.0; + + PA_LOGAPI(("Pa_GetStreamCpuLoad returned:\n" )); + PA_LOGAPI(("\tdouble: 0.0 [PaError error: %d ( %s )]\n", error, Pa_GetErrorText( error ) )); + + } + else + { + result = PA_STREAM_INTERFACE(stream)->GetCpuLoad( stream ); + + PA_LOGAPI(("Pa_GetStreamCpuLoad returned:\n" )); + PA_LOGAPI(("\tdouble: %g\n", result )); + + } + + return result; +} + + +PaError Pa_ReadStream( PaStream* stream, + void *buffer, + unsigned long frames ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_ReadStream" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( result == paNoError ) + { + if( frames == 0 ) + { + /* @todo Should we not allow the implementation to signal any overflow condition? see: http://www.portaudio.com/trac/ticket/116*/ + result = paNoError; + } + else if( buffer == 0 ) + { + result = paBadBufferPtr; + } + else + { + result = PA_STREAM_INTERFACE(stream)->IsStopped( stream ); + if( result == 0 ) + { + result = PA_STREAM_INTERFACE(stream)->Read( stream, buffer, frames ); + } + else if( result == 1 ) + { + result = paStreamIsStopped; + } + } + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_ReadStream", result ); + + return result; +} + + +PaError Pa_WriteStream( PaStream* stream, + const void *buffer, + unsigned long frames ) +{ + PaError result = PaUtil_ValidateStreamPointer( stream ); + + PA_LOGAPI_ENTER_PARAMS( "Pa_WriteStream" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( result == paNoError ) + { + if( frames == 0 ) + { + /* @todo Should we not allow the implementation to signal any underflow condition? see: http://www.portaudio.com/trac/ticket/116*/ + result = paNoError; + } + else if( buffer == 0 ) + { + result = paBadBufferPtr; + } + else + { + result = PA_STREAM_INTERFACE(stream)->IsStopped( stream ); + if( result == 0 ) + { + result = PA_STREAM_INTERFACE(stream)->Write( stream, buffer, frames ); + } + else if( result == 1 ) + { + result = paStreamIsStopped; + } + } + } + + PA_LOGAPI_EXIT_PAERROR( "Pa_WriteStream", result ); + + return result; +} + +signed long Pa_GetStreamReadAvailable( PaStream* stream ) +{ + PaError error = PaUtil_ValidateStreamPointer( stream ); + signed long result; + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetStreamReadAvailable" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( error != paNoError ) + { + result = 0; + + PA_LOGAPI(("Pa_GetStreamReadAvailable returned:\n" )); + PA_LOGAPI(("\tunsigned long: 0 [ PaError error: %d ( %s ) ]\n", error, Pa_GetErrorText( error ) )); + + } + else + { + result = PA_STREAM_INTERFACE(stream)->GetReadAvailable( stream ); + + PA_LOGAPI(("Pa_GetStreamReadAvailable returned:\n" )); + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); + + } + + return result; +} + + +signed long Pa_GetStreamWriteAvailable( PaStream* stream ) +{ + PaError error = PaUtil_ValidateStreamPointer( stream ); + signed long result; + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetStreamWriteAvailable" ); + PA_LOGAPI(("\tPaStream* stream: 0x%p\n", stream )); + + if( error != paNoError ) + { + result = 0; + + PA_LOGAPI(("Pa_GetStreamWriteAvailable returned:\n" )); + PA_LOGAPI(("\tunsigned long: 0 [ PaError error: %d ( %s ) ]\n", error, Pa_GetErrorText( error ) )); + + } + else + { + result = PA_STREAM_INTERFACE(stream)->GetWriteAvailable( stream ); + + PA_LOGAPI(("Pa_GetStreamWriteAvailable returned:\n" )); + PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); + + } + + return result; +} + + +PaError Pa_GetSampleSize( PaSampleFormat format ) +{ + int result; + + PA_LOGAPI_ENTER_PARAMS( "Pa_GetSampleSize" ); + PA_LOGAPI(("\tPaSampleFormat format: %d\n", format )); + + switch( format & ~paNonInterleaved ) + { + + case paUInt8: + case paInt8: + result = 1; + break; + + case paInt16: + result = 2; + break; + + case paInt24: + result = 3; + break; + + case paFloat32: + case paInt32: + result = 4; + break; + + default: + result = paSampleFormatNotSupported; + break; + } + + PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( "Pa_GetSampleSize", "int: %d", result ); + + return (PaError) result; +} + diff --git a/Externals/portaudio/src/common/pa_hostapi.h b/Externals/portaudio/src/common/pa_hostapi.h new file mode 100644 index 0000000000..1437f629dc --- /dev/null +++ b/Externals/portaudio/src/common/pa_hostapi.h @@ -0,0 +1,362 @@ +#ifndef PA_HOSTAPI_H +#define PA_HOSTAPI_H +/* + * $Id: pa_hostapi.h 1740 2011-08-25 07:17:48Z philburk $ + * Portable Audio I/O Library + * host api representation + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Interfaces and representation structures used by pa_front.c + to manage and communicate with host API implementations. +*/ + +#include "portaudio.h" + +/** +The PA_NO_* host API macros are now deprecated in favor of PA_USE_* macros. +PA_USE_* indicates whether a particular host API will be initialized by PortAudio. +An undefined or 0 value indicates that the host API will not be used. A value of 1 +indicates that the host API will be used. PA_USE_* macros should be left undefined +or defined to either 0 or 1. + +The code below ensures that PA_USE_* macros are always defined and have value +0 or 1. Undefined symbols are defaulted to 0. Symbols that are neither 0 nor 1 +are defaulted to 1. +*/ + +#ifndef PA_USE_SKELETON +#define PA_USE_SKELETON 0 +#elif (PA_USE_SKELETON != 0) && (PA_USE_SKELETON != 1) +#undef PA_USE_SKELETON +#define PA_USE_SKELETON 1 +#endif + +#if defined(PA_NO_ASIO) || defined(PA_NO_DS) || defined(PA_NO_WMME) || defined(PA_NO_WASAPI) || defined(PA_NO_WDMKS) +#error "Portaudio: PA_NO_ is no longer supported, please remove definition and use PA_USE_ instead" +#endif + +#ifndef PA_USE_ASIO +#define PA_USE_ASIO 0 +#elif (PA_USE_ASIO != 0) && (PA_USE_ASIO != 1) +#undef PA_USE_ASIO +#define PA_USE_ASIO 1 +#endif + +#ifndef PA_USE_DS +#define PA_USE_DS 0 +#elif (PA_USE_DS != 0) && (PA_USE_DS != 1) +#undef PA_USE_DS +#define PA_USE_DS 1 +#endif + +#ifndef PA_USE_WMME +#define PA_USE_WMME 0 +#elif (PA_USE_WMME != 0) && (PA_USE_WMME != 1) +#undef PA_USE_WMME +#define PA_USE_WMME 1 +#endif + +#ifndef PA_USE_WASAPI +#define PA_USE_WASAPI 0 +#elif (PA_USE_WASAPI != 0) && (PA_USE_WASAPI != 1) +#undef PA_USE_WASAPI +#define PA_USE_WASAPI 1 +#endif + +#ifndef PA_USE_WDMKS +#define PA_USE_WDMKS 0 +#elif (PA_USE_WDMKS != 0) && (PA_USE_WDMKS != 1) +#undef PA_USE_WDMKS +#define PA_USE_WDMKS 1 +#endif + +/* Set default values for Unix based APIs. */ +#if defined(PA_NO_OSS) || defined(PA_NO_ALSA) || defined(PA_NO_JACK) || defined(PA_NO_COREAUDIO) || defined(PA_NO_SGI) || defined(PA_NO_ASIHPI) +#error "Portaudio: PA_NO_ is no longer supported, please remove definition and use PA_USE_ instead" +#endif + +#ifndef PA_USE_OSS +#define PA_USE_OSS 0 +#elif (PA_USE_OSS != 0) && (PA_USE_OSS != 1) +#undef PA_USE_OSS +#define PA_USE_OSS 1 +#endif + +#ifndef PA_USE_ALSA +#define PA_USE_ALSA 0 +#elif (PA_USE_ALSA != 0) && (PA_USE_ALSA != 1) +#undef PA_USE_ALSA +#define PA_USE_ALSA 1 +#endif + +#ifndef PA_USE_JACK +#define PA_USE_JACK 0 +#elif (PA_USE_JACK != 0) && (PA_USE_JACK != 1) +#undef PA_USE_JACK +#define PA_USE_JACK 1 +#endif + +#ifndef PA_USE_SGI +#define PA_USE_SGI 0 +#elif (PA_USE_SGI != 0) && (PA_USE_SGI != 1) +#undef PA_USE_SGI +#define PA_USE_SGI 1 +#endif + +#ifndef PA_USE_COREAUDIO +#define PA_USE_COREAUDIO 0 +#elif (PA_USE_COREAUDIO != 0) && (PA_USE_COREAUDIO != 1) +#undef PA_USE_COREAUDIO +#define PA_USE_COREAUDIO 1 +#endif + +#ifndef PA_USE_ASIHPI +#define PA_USE_ASIHPI 0 +#elif (PA_USE_ASIHPI != 0) && (PA_USE_ASIHPI != 1) +#undef PA_USE_ASIHPI +#define PA_USE_ASIHPI 1 +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** **FOR THE USE OF pa_front.c ONLY** + Do NOT use fields in this structure, they my change at any time. + Use functions defined in pa_util.h if you think you need functionality + which can be derived from here. +*/ +typedef struct PaUtilPrivatePaFrontHostApiInfo { + + + unsigned long baseDeviceIndex; +}PaUtilPrivatePaFrontHostApiInfo; + + +/** The common header for all data structures whose pointers are passed through + the hostApiSpecificStreamInfo field of the PaStreamParameters structure. + Note that in order to keep the public PortAudio interface clean, this structure + is not used explicitly when declaring hostApiSpecificStreamInfo data structures. + However, some code in pa_front depends on the first 3 members being equivalent + with this structure. + @see PaStreamParameters +*/ +typedef struct PaUtilHostApiSpecificStreamInfoHeader +{ + unsigned long size; /**< size of whole structure including this header */ + PaHostApiTypeId hostApiType; /**< host API for which this data is intended */ + unsigned long version; /**< structure version */ +} PaUtilHostApiSpecificStreamInfoHeader; + + + +/** A structure representing the interface to a host API. Contains both + concrete data and pointers to functions which implement the interface. +*/ +typedef struct PaUtilHostApiRepresentation { + PaUtilPrivatePaFrontHostApiInfo privatePaFrontInfo; + + /** The host api implementation should populate the info field. In the + case of info.defaultInputDevice and info.defaultOutputDevice the + values stored should be 0 based indices within the host api's own + device index range (0 to deviceCount). These values will be converted + to global device indices by pa_front after PaUtilHostApiInitializer() + returns. + */ + PaHostApiInfo info; + + PaDeviceInfo** deviceInfos; + + /** + (*Terminate)() is guaranteed to be called with a valid + parameter, which was previously returned from the same implementation's + initializer. + */ + void (*Terminate)( struct PaUtilHostApiRepresentation *hostApi ); + + /** + The inputParameters and outputParameters pointers should not be saved + as they will not remain valid after OpenStream is called. + + + The following guarantees are made about parameters to (*OpenStream)(): + + [NOTE: the following list up to *END PA FRONT VALIDATIONS* should be + kept in sync with the one for ValidateOpenStreamParameters and + Pa_OpenStream in pa_front.c] + + PaHostApiRepresentation *hostApi + - is valid for this implementation + + PaStream** stream + - is non-null + + - at least one of inputParameters & outputParmeters is valid (not NULL) + + - if inputParameters & outputParmeters are both valid, that + inputParameters->device & outputParmeters->device both use the same host api + + PaDeviceIndex inputParameters->device + - is within range (0 to Pa_CountDevices-1) Or: + - is paUseHostApiSpecificDeviceSpecification and + inputParameters->hostApiSpecificStreamInfo is non-NULL and refers + to a valid host api + + int inputParameters->numChannels + - if inputParameters->device is not paUseHostApiSpecificDeviceSpecification, numInputChannels is > 0 + - upper bound is NOT validated against device capabilities + + PaSampleFormat inputParameters->sampleFormat + - is one of the sample formats defined in portaudio.h + + void *inputParameters->hostApiSpecificStreamInfo + - if supplied its hostApi field matches the input device's host Api + + PaDeviceIndex outputParmeters->device + - is within range (0 to Pa_CountDevices-1) + + int outputParmeters->numChannels + - if inputDevice is valid, numInputChannels is > 0 + - upper bound is NOT validated against device capabilities + + PaSampleFormat outputParmeters->sampleFormat + - is one of the sample formats defined in portaudio.h + + void *outputParmeters->hostApiSpecificStreamInfo + - if supplied its hostApi field matches the output device's host Api + + double sampleRate + - is not an 'absurd' rate (less than 1000. or greater than 200000.) + - sampleRate is NOT validated against device capabilities + + PaStreamFlags streamFlags + - unused platform neutral flags are zero + - paNeverDropInput is only used for full-duplex callback streams + with variable buffer size (paFramesPerBufferUnspecified) + + [*END PA FRONT VALIDATIONS*] + + + The following validations MUST be performed by (*OpenStream)(): + + - check that input device can support numInputChannels + + - check that input device can support inputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - if inputStreamInfo is supplied, validate its contents, + or return an error if no inputStreamInfo is expected + + - check that output device can support numOutputChannels + + - check that output device can support outputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - if outputStreamInfo is supplied, validate its contents, + or return an error if no outputStreamInfo is expected + + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported + + - check that the device supports sampleRate + + - alter sampleRate to a close allowable rate if necessary + + - validate inputLatency and outputLatency + + - validate any platform specific flags, if flags are supplied they + must be valid. + */ + PaError (*OpenStream)( struct PaUtilHostApiRepresentation *hostApi, + PaStream** stream, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerCallback, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); + + + PaError (*IsFormatSupported)( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +} PaUtilHostApiRepresentation; + + +/** Prototype for the initialization function which must be implemented by every + host API. + + This function should only return an error other than paNoError if it encounters + an unexpected and fatal error (memory allocation error for example). In general, + there may be conditions under which it returns a NULL interface pointer and also + returns paNoError. For example, if the ASIO implementation detects that ASIO is + not installed, it should return a NULL interface, and paNoError. + + @see paHostApiInitializers +*/ +typedef PaError PaUtilHostApiInitializer( PaUtilHostApiRepresentation**, PaHostApiIndex ); + + +/** paHostApiInitializers is a NULL-terminated array of host API initialization + functions. These functions are called by pa_front.c to initialize the host APIs + when the client calls Pa_Initialize(). + + The initialization functions are invoked in order. + + The first successfully initialized host API that has a default input *or* output + device is used as the default PortAudio host API. This is based on the logic that + there is only one default host API, and it must contain the default input and output + devices (if defined). + + There is a platform specific file that defines paHostApiInitializers for that + platform, pa_win/pa_win_hostapis.c contains the Win32 definitions for example. +*/ +extern PaUtilHostApiInitializer *paHostApiInitializers[]; + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_HOSTAPI_H */ diff --git a/Externals/portaudio/src/common/pa_memorybarrier.h b/Externals/portaudio/src/common/pa_memorybarrier.h new file mode 100644 index 0000000000..2879ce33ad --- /dev/null +++ b/Externals/portaudio/src/common/pa_memorybarrier.h @@ -0,0 +1,128 @@ +/* + * $Id: pa_memorybarrier.h 1240 2007-07-17 13:05:07Z bjornroche $ + * Portable Audio I/O Library + * Memory barrier utilities + * + * Author: Bjorn Roche, XO Audio, LLC + * + * This program uses the PortAudio Portable Audio Library. + * For more information see: http://www.portaudio.com + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file pa_memorybarrier.h + @ingroup common_src +*/ + +/**************** + * Some memory barrier primitives based on the system. + * right now only OS X, FreeBSD, and Linux are supported. In addition to providing + * memory barriers, these functions should ensure that data cached in registers + * is written out to cache where it can be snooped by other CPUs. (ie, the volatile + * keyword should not be required) + * + * the primitives that must be defined are: + * + * PaUtil_FullMemoryBarrier() + * PaUtil_ReadMemoryBarrier() + * PaUtil_WriteMemoryBarrier() + * + ****************/ + +#if defined(__APPLE__) +# include + /* Here are the memory barrier functions. Mac OS X only provides + full memory barriers, so the three types of barriers are the same, + however, these barriers are superior to compiler-based ones. */ +# define PaUtil_FullMemoryBarrier() OSMemoryBarrier() +# define PaUtil_ReadMemoryBarrier() OSMemoryBarrier() +# define PaUtil_WriteMemoryBarrier() OSMemoryBarrier() +#elif defined(__GNUC__) + /* GCC >= 4.1 has built-in intrinsics. We'll use those */ +# if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) +# define PaUtil_FullMemoryBarrier() __sync_synchronize() +# define PaUtil_ReadMemoryBarrier() __sync_synchronize() +# define PaUtil_WriteMemoryBarrier() __sync_synchronize() + /* as a fallback, GCC understands volatile asm and "memory" to mean it + * should not reorder memory read/writes */ + /* Note that it is not clear that any compiler actually defines __PPC__, + * it can probably removed safely. */ +# elif defined( __ppc__ ) || defined( __powerpc__) || defined( __PPC__ ) +# define PaUtil_FullMemoryBarrier() asm volatile("sync":::"memory") +# define PaUtil_ReadMemoryBarrier() asm volatile("sync":::"memory") +# define PaUtil_WriteMemoryBarrier() asm volatile("sync":::"memory") +# elif defined( __i386__ ) || defined( __i486__ ) || defined( __i586__ ) || \ + defined( __i686__ ) || defined( __x86_64__ ) +# define PaUtil_FullMemoryBarrier() asm volatile("mfence":::"memory") +# define PaUtil_ReadMemoryBarrier() asm volatile("lfence":::"memory") +# define PaUtil_WriteMemoryBarrier() asm volatile("sfence":::"memory") +# else +# ifdef ALLOW_SMP_DANGERS +# warning Memory barriers not defined on this system or system unknown +# warning For SMP safety, you should fix this. +# define PaUtil_FullMemoryBarrier() +# define PaUtil_ReadMemoryBarrier() +# define PaUtil_WriteMemoryBarrier() +# else +# error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed. +# endif +# endif +#elif (_MSC_VER >= 1400) && !defined(_WIN32_WCE) +# include +# pragma intrinsic(_ReadWriteBarrier) +# pragma intrinsic(_ReadBarrier) +# pragma intrinsic(_WriteBarrier) +/* note that MSVC intrinsics _ReadWriteBarrier(), _ReadBarrier(), _WriteBarrier() are just compiler barriers *not* memory barriers */ +# define PaUtil_FullMemoryBarrier() _ReadWriteBarrier() +# define PaUtil_ReadMemoryBarrier() _ReadBarrier() +# define PaUtil_WriteMemoryBarrier() _WriteBarrier() +#elif defined(_WIN32_WCE) +# define PaUtil_FullMemoryBarrier() +# define PaUtil_ReadMemoryBarrier() +# define PaUtil_WriteMemoryBarrier() +#elif defined(_MSC_VER) || defined(__BORLANDC__) +# define PaUtil_FullMemoryBarrier() _asm { lock add [esp], 0 } +# define PaUtil_ReadMemoryBarrier() _asm { lock add [esp], 0 } +# define PaUtil_WriteMemoryBarrier() _asm { lock add [esp], 0 } +#else +# ifdef ALLOW_SMP_DANGERS +# warning Memory barriers not defined on this system or system unknown +# warning For SMP safety, you should fix this. +# define PaUtil_FullMemoryBarrier() +# define PaUtil_ReadMemoryBarrier() +# define PaUtil_WriteMemoryBarrier() +# else +# error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed. +# endif +#endif diff --git a/Externals/portaudio/src/common/pa_process.c b/Externals/portaudio/src/common/pa_process.c new file mode 100644 index 0000000000..383f9cafa5 --- /dev/null +++ b/Externals/portaudio/src/common/pa_process.c @@ -0,0 +1,1827 @@ +/* + * $Id: pa_process.c 1706 2011-07-21 18:44:58Z philburk $ + * Portable Audio I/O Library + * streamCallback <-> host buffer processing adapter + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Buffer Processor implementation. +*/ + + +#include +#include /* memset() */ + +#include "pa_process.h" +#include "pa_util.h" + + +#define PA_FRAMES_PER_TEMP_BUFFER_WHEN_HOST_BUFFER_SIZE_IS_UNKNOWN_ 1024 + +#define PA_MIN_( a, b ) ( ((a)<(b)) ? (a) : (b) ) + + +/* greatest common divisor - PGCD in French */ +static unsigned long GCD( unsigned long a, unsigned long b ) +{ + return (b==0) ? a : GCD( b, a%b); +} + +/* least common multiple - PPCM in French */ +static unsigned long LCM( unsigned long a, unsigned long b ) +{ + return (a*b) / GCD(a,b); +} + +#define PA_MAX_( a, b ) (((a) > (b)) ? (a) : (b)) + +static unsigned long CalculateFrameShift( unsigned long M, unsigned long N ) +{ + unsigned long result = 0; + unsigned long i; + unsigned long lcm; + + assert( M > 0 ); + assert( N > 0 ); + + lcm = LCM( M, N ); + for( i = M; i < lcm; i += M ) + result = PA_MAX_( result, i % N ); + + return result; +} + + +PaError PaUtil_InitializeBufferProcessor( PaUtilBufferProcessor* bp, + int inputChannelCount, PaSampleFormat userInputSampleFormat, + PaSampleFormat hostInputSampleFormat, + int outputChannelCount, PaSampleFormat userOutputSampleFormat, + PaSampleFormat hostOutputSampleFormat, + double sampleRate, + PaStreamFlags streamFlags, + unsigned long framesPerUserBuffer, + unsigned long framesPerHostBuffer, + PaUtilHostBufferSizeMode hostBufferSizeMode, + PaStreamCallback *streamCallback, void *userData ) +{ + PaError result = paNoError; + PaError bytesPerSample; + unsigned long tempInputBufferSize, tempOutputBufferSize; + PaStreamFlags tempInputStreamFlags; + + if( streamFlags & paNeverDropInput ) + { + /* paNeverDropInput is only valid for full-duplex callback streams, with an unspecified number of frames per buffer. */ + if( !streamCallback || !(inputChannelCount > 0 && outputChannelCount > 0) || + framesPerUserBuffer != paFramesPerBufferUnspecified ) + return paInvalidFlag; + } + + /* initialize buffer ptrs to zero so they can be freed if necessary in error */ + bp->tempInputBuffer = 0; + bp->tempInputBufferPtrs = 0; + bp->tempOutputBuffer = 0; + bp->tempOutputBufferPtrs = 0; + + bp->framesPerUserBuffer = framesPerUserBuffer; + bp->framesPerHostBuffer = framesPerHostBuffer; + + bp->inputChannelCount = inputChannelCount; + bp->outputChannelCount = outputChannelCount; + + bp->hostBufferSizeMode = hostBufferSizeMode; + + bp->hostInputChannels[0] = bp->hostInputChannels[1] = 0; + bp->hostOutputChannels[0] = bp->hostOutputChannels[1] = 0; + + if( framesPerUserBuffer == 0 ) /* streamCallback will accept any buffer size */ + { + bp->useNonAdaptingProcess = 1; + bp->initialFramesInTempInputBuffer = 0; + bp->initialFramesInTempOutputBuffer = 0; + + if( hostBufferSizeMode == paUtilFixedHostBufferSize + || hostBufferSizeMode == paUtilBoundedHostBufferSize ) + { + bp->framesPerTempBuffer = framesPerHostBuffer; + } + else /* unknown host buffer size */ + { + bp->framesPerTempBuffer = PA_FRAMES_PER_TEMP_BUFFER_WHEN_HOST_BUFFER_SIZE_IS_UNKNOWN_; + } + } + else + { + bp->framesPerTempBuffer = framesPerUserBuffer; + + if( hostBufferSizeMode == paUtilFixedHostBufferSize + && framesPerHostBuffer % framesPerUserBuffer == 0 ) + { + bp->useNonAdaptingProcess = 1; + bp->initialFramesInTempInputBuffer = 0; + bp->initialFramesInTempOutputBuffer = 0; + } + else + { + bp->useNonAdaptingProcess = 0; + + if( inputChannelCount > 0 && outputChannelCount > 0 ) + { + /* full duplex */ + if( hostBufferSizeMode == paUtilFixedHostBufferSize ) + { + unsigned long frameShift = + CalculateFrameShift( framesPerHostBuffer, framesPerUserBuffer ); + + if( framesPerUserBuffer > framesPerHostBuffer ) + { + bp->initialFramesInTempInputBuffer = frameShift; + bp->initialFramesInTempOutputBuffer = 0; + } + else + { + bp->initialFramesInTempInputBuffer = 0; + bp->initialFramesInTempOutputBuffer = frameShift; + } + } + else /* variable host buffer size, add framesPerUserBuffer latency */ + { + bp->initialFramesInTempInputBuffer = 0; + bp->initialFramesInTempOutputBuffer = framesPerUserBuffer; + } + } + else + { + /* half duplex */ + bp->initialFramesInTempInputBuffer = 0; + bp->initialFramesInTempOutputBuffer = 0; + } + } + } + + + bp->framesInTempInputBuffer = bp->initialFramesInTempInputBuffer; + bp->framesInTempOutputBuffer = bp->initialFramesInTempOutputBuffer; + + + if( inputChannelCount > 0 ) + { + bytesPerSample = Pa_GetSampleSize( hostInputSampleFormat ); + if( bytesPerSample > 0 ) + { + bp->bytesPerHostInputSample = bytesPerSample; + } + else + { + result = bytesPerSample; + goto error; + } + + bytesPerSample = Pa_GetSampleSize( userInputSampleFormat ); + if( bytesPerSample > 0 ) + { + bp->bytesPerUserInputSample = bytesPerSample; + } + else + { + result = bytesPerSample; + goto error; + } + + /* Under the assumption that no ADC in existence delivers better than 24bits resolution, + we disable dithering when host input format is paInt32 and user format is paInt24, + since the host samples will just be padded with zeros anyway. */ + + tempInputStreamFlags = streamFlags; + if( !(tempInputStreamFlags & paDitherOff) /* dither is on */ + && (hostInputSampleFormat & paInt32) /* host input format is int32 */ + && (userInputSampleFormat & paInt24) /* user requested format is int24 */ ){ + + tempInputStreamFlags = tempInputStreamFlags | paDitherOff; + } + + bp->inputConverter = + PaUtil_SelectConverter( hostInputSampleFormat, userInputSampleFormat, tempInputStreamFlags ); + + bp->inputZeroer = PaUtil_SelectZeroer( hostInputSampleFormat ); + + bp->userInputIsInterleaved = (userInputSampleFormat & paNonInterleaved)?0:1; + + bp->hostInputIsInterleaved = (hostInputSampleFormat & paNonInterleaved)?0:1; + + bp->userInputSampleFormatIsEqualToHost = ((userInputSampleFormat & ~paNonInterleaved) == (hostInputSampleFormat & ~paNonInterleaved)); + + tempInputBufferSize = + bp->framesPerTempBuffer * bp->bytesPerUserInputSample * inputChannelCount; + + bp->tempInputBuffer = PaUtil_AllocateMemory( tempInputBufferSize ); + if( bp->tempInputBuffer == 0 ) + { + result = paInsufficientMemory; + goto error; + } + + if( bp->framesInTempInputBuffer > 0 ) + memset( bp->tempInputBuffer, 0, tempInputBufferSize ); + + if( userInputSampleFormat & paNonInterleaved ) + { + bp->tempInputBufferPtrs = + (void **)PaUtil_AllocateMemory( sizeof(void*)*inputChannelCount ); + if( bp->tempInputBufferPtrs == 0 ) + { + result = paInsufficientMemory; + goto error; + } + } + + bp->hostInputChannels[0] = (PaUtilChannelDescriptor*) + PaUtil_AllocateMemory( sizeof(PaUtilChannelDescriptor) * inputChannelCount * 2); + if( bp->hostInputChannels[0] == 0 ) + { + result = paInsufficientMemory; + goto error; + } + + bp->hostInputChannels[1] = &bp->hostInputChannels[0][inputChannelCount]; + } + + if( outputChannelCount > 0 ) + { + bytesPerSample = Pa_GetSampleSize( hostOutputSampleFormat ); + if( bytesPerSample > 0 ) + { + bp->bytesPerHostOutputSample = bytesPerSample; + } + else + { + result = bytesPerSample; + goto error; + } + + bytesPerSample = Pa_GetSampleSize( userOutputSampleFormat ); + if( bytesPerSample > 0 ) + { + bp->bytesPerUserOutputSample = bytesPerSample; + } + else + { + result = bytesPerSample; + goto error; + } + + bp->outputConverter = + PaUtil_SelectConverter( userOutputSampleFormat, hostOutputSampleFormat, streamFlags ); + + bp->outputZeroer = PaUtil_SelectZeroer( hostOutputSampleFormat ); + + bp->userOutputIsInterleaved = (userOutputSampleFormat & paNonInterleaved)?0:1; + + bp->hostOutputIsInterleaved = (hostOutputSampleFormat & paNonInterleaved)?0:1; + + bp->userOutputSampleFormatIsEqualToHost = ((userOutputSampleFormat & ~paNonInterleaved) == (hostOutputSampleFormat & ~paNonInterleaved)); + + tempOutputBufferSize = + bp->framesPerTempBuffer * bp->bytesPerUserOutputSample * outputChannelCount; + + bp->tempOutputBuffer = PaUtil_AllocateMemory( tempOutputBufferSize ); + if( bp->tempOutputBuffer == 0 ) + { + result = paInsufficientMemory; + goto error; + } + + if( bp->framesInTempOutputBuffer > 0 ) + memset( bp->tempOutputBuffer, 0, tempOutputBufferSize ); + + if( userOutputSampleFormat & paNonInterleaved ) + { + bp->tempOutputBufferPtrs = + (void **)PaUtil_AllocateMemory( sizeof(void*)*outputChannelCount ); + if( bp->tempOutputBufferPtrs == 0 ) + { + result = paInsufficientMemory; + goto error; + } + } + + bp->hostOutputChannels[0] = (PaUtilChannelDescriptor*) + PaUtil_AllocateMemory( sizeof(PaUtilChannelDescriptor)*outputChannelCount * 2 ); + if( bp->hostOutputChannels[0] == 0 ) + { + result = paInsufficientMemory; + goto error; + } + + bp->hostOutputChannels[1] = &bp->hostOutputChannels[0][outputChannelCount]; + } + + PaUtil_InitializeTriangularDitherState( &bp->ditherGenerator ); + + bp->samplePeriod = 1. / sampleRate; + + bp->streamCallback = streamCallback; + bp->userData = userData; + + return result; + +error: + if( bp->tempInputBuffer ) + PaUtil_FreeMemory( bp->tempInputBuffer ); + + if( bp->tempInputBufferPtrs ) + PaUtil_FreeMemory( bp->tempInputBufferPtrs ); + + if( bp->hostInputChannels[0] ) + PaUtil_FreeMemory( bp->hostInputChannels[0] ); + + if( bp->tempOutputBuffer ) + PaUtil_FreeMemory( bp->tempOutputBuffer ); + + if( bp->tempOutputBufferPtrs ) + PaUtil_FreeMemory( bp->tempOutputBufferPtrs ); + + if( bp->hostOutputChannels[0] ) + PaUtil_FreeMemory( bp->hostOutputChannels[0] ); + + return result; +} + + +void PaUtil_TerminateBufferProcessor( PaUtilBufferProcessor* bp ) +{ + if( bp->tempInputBuffer ) + PaUtil_FreeMemory( bp->tempInputBuffer ); + + if( bp->tempInputBufferPtrs ) + PaUtil_FreeMemory( bp->tempInputBufferPtrs ); + + if( bp->hostInputChannels[0] ) + PaUtil_FreeMemory( bp->hostInputChannels[0] ); + + if( bp->tempOutputBuffer ) + PaUtil_FreeMemory( bp->tempOutputBuffer ); + + if( bp->tempOutputBufferPtrs ) + PaUtil_FreeMemory( bp->tempOutputBufferPtrs ); + + if( bp->hostOutputChannels[0] ) + PaUtil_FreeMemory( bp->hostOutputChannels[0] ); +} + + +void PaUtil_ResetBufferProcessor( PaUtilBufferProcessor* bp ) +{ + unsigned long tempInputBufferSize, tempOutputBufferSize; + + bp->framesInTempInputBuffer = bp->initialFramesInTempInputBuffer; + bp->framesInTempOutputBuffer = bp->initialFramesInTempOutputBuffer; + + if( bp->framesInTempInputBuffer > 0 ) + { + tempInputBufferSize = + bp->framesPerTempBuffer * bp->bytesPerUserInputSample * bp->inputChannelCount; + memset( bp->tempInputBuffer, 0, tempInputBufferSize ); + } + + if( bp->framesInTempOutputBuffer > 0 ) + { + tempOutputBufferSize = + bp->framesPerTempBuffer * bp->bytesPerUserOutputSample * bp->outputChannelCount; + memset( bp->tempOutputBuffer, 0, tempOutputBufferSize ); + } +} + + +unsigned long PaUtil_GetBufferProcessorInputLatencyFrames( PaUtilBufferProcessor* bp ) +{ + return bp->initialFramesInTempInputBuffer; +} + + +unsigned long PaUtil_GetBufferProcessorOutputLatencyFrames( PaUtilBufferProcessor* bp ) +{ + return bp->initialFramesInTempOutputBuffer; +} + + +void PaUtil_SetInputFrameCount( PaUtilBufferProcessor* bp, + unsigned long frameCount ) +{ + if( frameCount == 0 ) + bp->hostInputFrameCount[0] = bp->framesPerHostBuffer; + else + bp->hostInputFrameCount[0] = frameCount; +} + + +void PaUtil_SetNoInput( PaUtilBufferProcessor* bp ) +{ + assert( bp->inputChannelCount > 0 ); + + bp->hostInputChannels[0][0].data = 0; +} + + +void PaUtil_SetInputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data, unsigned int stride ) +{ + assert( channel < bp->inputChannelCount ); + + bp->hostInputChannels[0][channel].data = data; + bp->hostInputChannels[0][channel].stride = stride; +} + + +void PaUtil_SetInterleavedInputChannels( PaUtilBufferProcessor* bp, + unsigned int firstChannel, void *data, unsigned int channelCount ) +{ + unsigned int i; + unsigned int channel = firstChannel; + unsigned char *p = (unsigned char*)data; + + if( channelCount == 0 ) + channelCount = bp->inputChannelCount; + + assert( firstChannel < bp->inputChannelCount ); + assert( firstChannel + channelCount <= bp->inputChannelCount ); + assert( bp->hostInputIsInterleaved ); + + for( i=0; i< channelCount; ++i ) + { + bp->hostInputChannels[0][channel+i].data = p; + p += bp->bytesPerHostInputSample; + bp->hostInputChannels[0][channel+i].stride = channelCount; + } +} + + +void PaUtil_SetNonInterleavedInputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data ) +{ + assert( channel < bp->inputChannelCount ); + assert( !bp->hostInputIsInterleaved ); + + bp->hostInputChannels[0][channel].data = data; + bp->hostInputChannels[0][channel].stride = 1; +} + + +void PaUtil_Set2ndInputFrameCount( PaUtilBufferProcessor* bp, + unsigned long frameCount ) +{ + bp->hostInputFrameCount[1] = frameCount; +} + + +void PaUtil_Set2ndInputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data, unsigned int stride ) +{ + assert( channel < bp->inputChannelCount ); + + bp->hostInputChannels[1][channel].data = data; + bp->hostInputChannels[1][channel].stride = stride; +} + + +void PaUtil_Set2ndInterleavedInputChannels( PaUtilBufferProcessor* bp, + unsigned int firstChannel, void *data, unsigned int channelCount ) +{ + unsigned int i; + unsigned int channel = firstChannel; + unsigned char *p = (unsigned char*)data; + + if( channelCount == 0 ) + channelCount = bp->inputChannelCount; + + assert( firstChannel < bp->inputChannelCount ); + assert( firstChannel + channelCount <= bp->inputChannelCount ); + assert( bp->hostInputIsInterleaved ); + + for( i=0; i< channelCount; ++i ) + { + bp->hostInputChannels[1][channel+i].data = p; + p += bp->bytesPerHostInputSample; + bp->hostInputChannels[1][channel+i].stride = channelCount; + } +} + + +void PaUtil_Set2ndNonInterleavedInputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data ) +{ + assert( channel < bp->inputChannelCount ); + assert( !bp->hostInputIsInterleaved ); + + bp->hostInputChannels[1][channel].data = data; + bp->hostInputChannels[1][channel].stride = 1; +} + + +void PaUtil_SetOutputFrameCount( PaUtilBufferProcessor* bp, + unsigned long frameCount ) +{ + if( frameCount == 0 ) + bp->hostOutputFrameCount[0] = bp->framesPerHostBuffer; + else + bp->hostOutputFrameCount[0] = frameCount; +} + + +void PaUtil_SetNoOutput( PaUtilBufferProcessor* bp ) +{ + assert( bp->outputChannelCount > 0 ); + + bp->hostOutputChannels[0][0].data = 0; + + /* note that only NonAdaptingProcess is able to deal with no output at this stage. not implemented for AdaptingProcess */ +} + + +void PaUtil_SetOutputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data, unsigned int stride ) +{ + assert( channel < bp->outputChannelCount ); + assert( data != NULL ); + + bp->hostOutputChannels[0][channel].data = data; + bp->hostOutputChannels[0][channel].stride = stride; +} + + +void PaUtil_SetInterleavedOutputChannels( PaUtilBufferProcessor* bp, + unsigned int firstChannel, void *data, unsigned int channelCount ) +{ + unsigned int i; + unsigned int channel = firstChannel; + unsigned char *p = (unsigned char*)data; + + if( channelCount == 0 ) + channelCount = bp->outputChannelCount; + + assert( firstChannel < bp->outputChannelCount ); + assert( firstChannel + channelCount <= bp->outputChannelCount ); + assert( bp->hostOutputIsInterleaved ); + + for( i=0; i< channelCount; ++i ) + { + PaUtil_SetOutputChannel( bp, channel + i, p, channelCount ); + p += bp->bytesPerHostOutputSample; + } +} + + +void PaUtil_SetNonInterleavedOutputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data ) +{ + assert( channel < bp->outputChannelCount ); + assert( !bp->hostOutputIsInterleaved ); + + PaUtil_SetOutputChannel( bp, channel, data, 1 ); +} + + +void PaUtil_Set2ndOutputFrameCount( PaUtilBufferProcessor* bp, + unsigned long frameCount ) +{ + bp->hostOutputFrameCount[1] = frameCount; +} + + +void PaUtil_Set2ndOutputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data, unsigned int stride ) +{ + assert( channel < bp->outputChannelCount ); + assert( data != NULL ); + + bp->hostOutputChannels[1][channel].data = data; + bp->hostOutputChannels[1][channel].stride = stride; +} + + +void PaUtil_Set2ndInterleavedOutputChannels( PaUtilBufferProcessor* bp, + unsigned int firstChannel, void *data, unsigned int channelCount ) +{ + unsigned int i; + unsigned int channel = firstChannel; + unsigned char *p = (unsigned char*)data; + + if( channelCount == 0 ) + channelCount = bp->outputChannelCount; + + assert( firstChannel < bp->outputChannelCount ); + assert( firstChannel + channelCount <= bp->outputChannelCount ); + assert( bp->hostOutputIsInterleaved ); + + for( i=0; i< channelCount; ++i ) + { + PaUtil_Set2ndOutputChannel( bp, channel + i, p, channelCount ); + p += bp->bytesPerHostOutputSample; + } +} + + +void PaUtil_Set2ndNonInterleavedOutputChannel( PaUtilBufferProcessor* bp, + unsigned int channel, void *data ) +{ + assert( channel < bp->outputChannelCount ); + assert( !bp->hostOutputIsInterleaved ); + + PaUtil_Set2ndOutputChannel( bp, channel, data, 1 ); +} + + +void PaUtil_BeginBufferProcessing( PaUtilBufferProcessor* bp, + PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags callbackStatusFlags ) +{ + bp->timeInfo = timeInfo; + + /* the first streamCallback will be called to process samples which are + currently in the input buffer before the ones starting at the timeInfo time */ + + bp->timeInfo->inputBufferAdcTime -= bp->framesInTempInputBuffer * bp->samplePeriod; + + /* We just pass through timeInfo->currentTime provided by the caller. This is + not strictly conformant to the word of the spec, since the buffer processor + might call the callback multiple times, and we never refresh currentTime. */ + + /* the first streamCallback will be called to generate samples which will be + outputted after the frames currently in the output buffer have been + outputted. */ + bp->timeInfo->outputBufferDacTime += bp->framesInTempOutputBuffer * bp->samplePeriod; + + bp->callbackStatusFlags = callbackStatusFlags; + + bp->hostInputFrameCount[1] = 0; + bp->hostOutputFrameCount[1] = 0; +} + + +/* + NonAdaptingProcess() is a simple buffer copying adaptor that can handle + both full and half duplex copies. It processes framesToProcess frames, + broken into blocks bp->framesPerTempBuffer long. + This routine can be used when the streamCallback doesn't care what length + the buffers are, or when framesToProcess is an integer multiple of + bp->framesPerTempBuffer, in which case streamCallback will always be called + with bp->framesPerTempBuffer samples. +*/ +static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp, + int *streamCallbackResult, + PaUtilChannelDescriptor *hostInputChannels, + PaUtilChannelDescriptor *hostOutputChannels, + unsigned long framesToProcess ) +{ + void *userInput, *userOutput; + unsigned char *srcBytePtr, *destBytePtr; + unsigned int srcSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int srcChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int destSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int destChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int i; + unsigned long frameCount; + unsigned long framesToGo = framesToProcess; + unsigned long framesProcessed = 0; + int skipOutputConvert = 0; + int skipInputConvert = 0; + + + if( *streamCallbackResult == paContinue ) + { + do + { + frameCount = PA_MIN_( bp->framesPerTempBuffer, framesToGo ); + + /* configure user input buffer and convert input data (host -> user) */ + if( bp->inputChannelCount == 0 ) + { + /* no input */ + userInput = 0; + } + else /* there are input channels */ + { + + destBytePtr = (unsigned char *)bp->tempInputBuffer; + + if( bp->userInputIsInterleaved ) + { + destSampleStrideSamples = bp->inputChannelCount; + destChannelStrideBytes = bp->bytesPerUserInputSample; + + /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved */ + if( bp->userInputSampleFormatIsEqualToHost && bp->hostInputIsInterleaved && bp->hostInputChannels[0][0].data) + { + userInput = hostInputChannels[0].data; + destBytePtr = (unsigned char *)hostInputChannels[0].data; + skipInputConvert = 1; + } + else + { + userInput = bp->tempInputBuffer; + } + } + else /* user input is not interleaved */ + { + destSampleStrideSamples = 1; + destChannelStrideBytes = frameCount * bp->bytesPerUserInputSample; + + /* setup non-interleaved ptrs */ + if( bp->userInputSampleFormatIsEqualToHost && !bp->hostInputIsInterleaved && bp->hostInputChannels[0][0].data ) + { + for( i=0; iinputChannelCount; ++i ) + { + bp->tempInputBufferPtrs[i] = hostInputChannels[i].data; + } + skipInputConvert = 1; + } + else + { + for( i=0; iinputChannelCount; ++i ) + { + bp->tempInputBufferPtrs[i] = ((unsigned char*)bp->tempInputBuffer) + + i * bp->bytesPerUserInputSample * frameCount; + } + } + + userInput = bp->tempInputBufferPtrs; + } + + if( !bp->hostInputChannels[0][0].data ) + { + /* no input was supplied (see PaUtil_SetNoInput), so + zero the input buffer */ + + for( i=0; iinputChannelCount; ++i ) + { + bp->inputZeroer( destBytePtr, destSampleStrideSamples, frameCount ); + destBytePtr += destChannelStrideBytes; /* skip to next destination channel */ + } + } + else + { + if( skipInputConvert ) + { + for( i=0; iinputChannelCount; ++i ) + { + /* advance src ptr for next iteration */ + hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) + + frameCount * hostInputChannels[i].stride * bp->bytesPerHostInputSample; + } + } + else + { + for( i=0; iinputChannelCount; ++i ) + { + bp->inputConverter( destBytePtr, destSampleStrideSamples, + hostInputChannels[i].data, + hostInputChannels[i].stride, + frameCount, &bp->ditherGenerator ); + + destBytePtr += destChannelStrideBytes; /* skip to next destination channel */ + + /* advance src ptr for next iteration */ + hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) + + frameCount * hostInputChannels[i].stride * bp->bytesPerHostInputSample; + } + } + } + } + + /* configure user output buffer */ + if( bp->outputChannelCount == 0 ) + { + /* no output */ + userOutput = 0; + } + else /* there are output channels */ + { + if( bp->userOutputIsInterleaved ) + { + /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved */ + if( bp->userOutputSampleFormatIsEqualToHost && bp->hostOutputIsInterleaved ) + { + userOutput = hostOutputChannels[0].data; + skipOutputConvert = 1; + } + else + { + userOutput = bp->tempOutputBuffer; + } + } + else /* user output is not interleaved */ + { + if( bp->userOutputSampleFormatIsEqualToHost && !bp->hostOutputIsInterleaved ) + { + for( i=0; ioutputChannelCount; ++i ) + { + bp->tempOutputBufferPtrs[i] = hostOutputChannels[i].data; + } + skipOutputConvert = 1; + } + else + { + for( i=0; ioutputChannelCount; ++i ) + { + bp->tempOutputBufferPtrs[i] = ((unsigned char*)bp->tempOutputBuffer) + + i * bp->bytesPerUserOutputSample * frameCount; + } + } + + userOutput = bp->tempOutputBufferPtrs; + } + } + + *streamCallbackResult = bp->streamCallback( userInput, userOutput, + frameCount, bp->timeInfo, bp->callbackStatusFlags, bp->userData ); + + if( *streamCallbackResult == paAbort ) + { + /* callback returned paAbort, don't advance framesProcessed + and framesToGo, they will be handled below */ + } + else + { + bp->timeInfo->inputBufferAdcTime += frameCount * bp->samplePeriod; + bp->timeInfo->outputBufferDacTime += frameCount * bp->samplePeriod; + + /* convert output data (user -> host) */ + + if( bp->outputChannelCount != 0 && bp->hostOutputChannels[0][0].data ) + { + if( skipOutputConvert ) + { + for( i=0; ioutputChannelCount; ++i ) + { + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + } + else + { + + srcBytePtr = (unsigned char *)bp->tempOutputBuffer; + + if( bp->userOutputIsInterleaved ) + { + srcSampleStrideSamples = bp->outputChannelCount; + srcChannelStrideBytes = bp->bytesPerUserOutputSample; + } + else /* user output is not interleaved */ + { + srcSampleStrideSamples = 1; + srcChannelStrideBytes = frameCount * bp->bytesPerUserOutputSample; + } + + for( i=0; ioutputChannelCount; ++i ) + { + bp->outputConverter( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + srcBytePtr, srcSampleStrideSamples, + frameCount, &bp->ditherGenerator ); + + srcBytePtr += srcChannelStrideBytes; /* skip to next source channel */ + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + } + } + + framesProcessed += frameCount; + + framesToGo -= frameCount; + } + } + while( framesToGo > 0 && *streamCallbackResult == paContinue ); + } + + if( framesToGo > 0 ) + { + /* zero any remaining frames output. There will only be remaining frames + if the callback has returned paComplete or paAbort */ + + frameCount = framesToGo; + + if( bp->outputChannelCount != 0 && bp->hostOutputChannels[0][0].data ) + { + for( i=0; ioutputChannelCount; ++i ) + { + bp->outputZeroer( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + frameCount ); + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + } + + framesProcessed += frameCount; + } + + return framesProcessed; +} + + +/* + AdaptingInputOnlyProcess() is a half duplex input buffer processor. It + converts data from the input buffers into the temporary input buffer, + when the temporary input buffer is full, it calls the streamCallback. +*/ +static unsigned long AdaptingInputOnlyProcess( PaUtilBufferProcessor *bp, + int *streamCallbackResult, + PaUtilChannelDescriptor *hostInputChannels, + unsigned long framesToProcess ) +{ + void *userInput, *userOutput; + unsigned char *destBytePtr; + unsigned int destSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int destChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int i; + unsigned long frameCount; + unsigned long framesToGo = framesToProcess; + unsigned long framesProcessed = 0; + + userOutput = 0; + + do + { + frameCount = ( bp->framesInTempInputBuffer + framesToGo > bp->framesPerUserBuffer ) + ? ( bp->framesPerUserBuffer - bp->framesInTempInputBuffer ) + : framesToGo; + + /* convert frameCount samples into temp buffer */ + + if( bp->userInputIsInterleaved ) + { + destBytePtr = ((unsigned char*)bp->tempInputBuffer) + + bp->bytesPerUserInputSample * bp->inputChannelCount * + bp->framesInTempInputBuffer; + + destSampleStrideSamples = bp->inputChannelCount; + destChannelStrideBytes = bp->bytesPerUserInputSample; + + userInput = bp->tempInputBuffer; + } + else /* user input is not interleaved */ + { + destBytePtr = ((unsigned char*)bp->tempInputBuffer) + + bp->bytesPerUserInputSample * bp->framesInTempInputBuffer; + + destSampleStrideSamples = 1; + destChannelStrideBytes = bp->framesPerUserBuffer * bp->bytesPerUserInputSample; + + /* setup non-interleaved ptrs */ + for( i=0; iinputChannelCount; ++i ) + { + bp->tempInputBufferPtrs[i] = ((unsigned char*)bp->tempInputBuffer) + + i * bp->bytesPerUserInputSample * bp->framesPerUserBuffer; + } + + userInput = bp->tempInputBufferPtrs; + } + + for( i=0; iinputChannelCount; ++i ) + { + bp->inputConverter( destBytePtr, destSampleStrideSamples, + hostInputChannels[i].data, + hostInputChannels[i].stride, + frameCount, &bp->ditherGenerator ); + + destBytePtr += destChannelStrideBytes; /* skip to next destination channel */ + + /* advance src ptr for next iteration */ + hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) + + frameCount * hostInputChannels[i].stride * bp->bytesPerHostInputSample; + } + + bp->framesInTempInputBuffer += frameCount; + + if( bp->framesInTempInputBuffer == bp->framesPerUserBuffer ) + { + /** + @todo (non-critical optimisation) + The conditional below implements the continue/complete/abort mechanism + simply by continuing on iterating through the input buffer, but not + passing the data to the callback. With care, the outer loop could be + terminated earlier, thus some unneeded conversion cycles would be + saved. + */ + if( *streamCallbackResult == paContinue ) + { + bp->timeInfo->outputBufferDacTime = 0; + + *streamCallbackResult = bp->streamCallback( userInput, userOutput, + bp->framesPerUserBuffer, bp->timeInfo, + bp->callbackStatusFlags, bp->userData ); + + bp->timeInfo->inputBufferAdcTime += bp->framesPerUserBuffer * bp->samplePeriod; + } + + bp->framesInTempInputBuffer = 0; + } + + framesProcessed += frameCount; + + framesToGo -= frameCount; + }while( framesToGo > 0 ); + + return framesProcessed; +} + + +/* + AdaptingOutputOnlyProcess() is a half duplex output buffer processor. + It converts data from the temporary output buffer, to the output buffers, + when the temporary output buffer is empty, it calls the streamCallback. +*/ +static unsigned long AdaptingOutputOnlyProcess( PaUtilBufferProcessor *bp, + int *streamCallbackResult, + PaUtilChannelDescriptor *hostOutputChannels, + unsigned long framesToProcess ) +{ + void *userInput, *userOutput; + unsigned char *srcBytePtr; + unsigned int srcSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int srcChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int i; + unsigned long frameCount; + unsigned long framesToGo = framesToProcess; + unsigned long framesProcessed = 0; + + do + { + if( bp->framesInTempOutputBuffer == 0 && *streamCallbackResult == paContinue ) + { + userInput = 0; + + /* setup userOutput */ + if( bp->userOutputIsInterleaved ) + { + userOutput = bp->tempOutputBuffer; + } + else /* user output is not interleaved */ + { + for( i = 0; i < bp->outputChannelCount; ++i ) + { + bp->tempOutputBufferPtrs[i] = ((unsigned char*)bp->tempOutputBuffer) + + i * bp->framesPerUserBuffer * bp->bytesPerUserOutputSample; + } + + userOutput = bp->tempOutputBufferPtrs; + } + + bp->timeInfo->inputBufferAdcTime = 0; + + *streamCallbackResult = bp->streamCallback( userInput, userOutput, + bp->framesPerUserBuffer, bp->timeInfo, + bp->callbackStatusFlags, bp->userData ); + + if( *streamCallbackResult == paAbort ) + { + /* if the callback returned paAbort, we disregard its output */ + } + else + { + bp->timeInfo->outputBufferDacTime += bp->framesPerUserBuffer * bp->samplePeriod; + + bp->framesInTempOutputBuffer = bp->framesPerUserBuffer; + } + } + + if( bp->framesInTempOutputBuffer > 0 ) + { + /* convert frameCount frames from user buffer to host buffer */ + + frameCount = PA_MIN_( bp->framesInTempOutputBuffer, framesToGo ); + + if( bp->userOutputIsInterleaved ) + { + srcBytePtr = ((unsigned char*)bp->tempOutputBuffer) + + bp->bytesPerUserOutputSample * bp->outputChannelCount * + (bp->framesPerUserBuffer - bp->framesInTempOutputBuffer); + + srcSampleStrideSamples = bp->outputChannelCount; + srcChannelStrideBytes = bp->bytesPerUserOutputSample; + } + else /* user output is not interleaved */ + { + srcBytePtr = ((unsigned char*)bp->tempOutputBuffer) + + bp->bytesPerUserOutputSample * + (bp->framesPerUserBuffer - bp->framesInTempOutputBuffer); + + srcSampleStrideSamples = 1; + srcChannelStrideBytes = bp->framesPerUserBuffer * bp->bytesPerUserOutputSample; + } + + for( i=0; ioutputChannelCount; ++i ) + { + bp->outputConverter( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + srcBytePtr, srcSampleStrideSamples, + frameCount, &bp->ditherGenerator ); + + srcBytePtr += srcChannelStrideBytes; /* skip to next source channel */ + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + + bp->framesInTempOutputBuffer -= frameCount; + } + else + { + /* no more user data is available because the callback has returned + paComplete or paAbort. Fill the remainder of the host buffer + with zeros. + */ + + frameCount = framesToGo; + + for( i=0; ioutputChannelCount; ++i ) + { + bp->outputZeroer( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + frameCount ); + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + } + + framesProcessed += frameCount; + + framesToGo -= frameCount; + + }while( framesToGo > 0 ); + + return framesProcessed; +} + +/* CopyTempOutputBuffersToHostOutputBuffers is called from AdaptingProcess to copy frames from + tempOutputBuffer to hostOutputChannels. This includes data conversion + and interleaving. +*/ +static void CopyTempOutputBuffersToHostOutputBuffers( PaUtilBufferProcessor *bp) +{ + unsigned long maxFramesToCopy; + PaUtilChannelDescriptor *hostOutputChannels; + unsigned int frameCount; + unsigned char *srcBytePtr; + unsigned int srcSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int srcChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int i; + + /* copy frames from user to host output buffers */ + while( bp->framesInTempOutputBuffer > 0 && + ((bp->hostOutputFrameCount[0] + bp->hostOutputFrameCount[1]) > 0) ) + { + maxFramesToCopy = bp->framesInTempOutputBuffer; + + /* select the output buffer set (1st or 2nd) */ + if( bp->hostOutputFrameCount[0] > 0 ) + { + hostOutputChannels = bp->hostOutputChannels[0]; + frameCount = PA_MIN_( bp->hostOutputFrameCount[0], maxFramesToCopy ); + } + else + { + hostOutputChannels = bp->hostOutputChannels[1]; + frameCount = PA_MIN_( bp->hostOutputFrameCount[1], maxFramesToCopy ); + } + + if( bp->userOutputIsInterleaved ) + { + srcBytePtr = ((unsigned char*)bp->tempOutputBuffer) + + bp->bytesPerUserOutputSample * bp->outputChannelCount * + (bp->framesPerUserBuffer - bp->framesInTempOutputBuffer); + + srcSampleStrideSamples = bp->outputChannelCount; + srcChannelStrideBytes = bp->bytesPerUserOutputSample; + } + else /* user output is not interleaved */ + { + srcBytePtr = ((unsigned char*)bp->tempOutputBuffer) + + bp->bytesPerUserOutputSample * + (bp->framesPerUserBuffer - bp->framesInTempOutputBuffer); + + srcSampleStrideSamples = 1; + srcChannelStrideBytes = bp->framesPerUserBuffer * bp->bytesPerUserOutputSample; + } + + for( i=0; ioutputChannelCount; ++i ) + { + assert( hostOutputChannels[i].data != NULL ); + bp->outputConverter( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + srcBytePtr, srcSampleStrideSamples, + frameCount, &bp->ditherGenerator ); + + srcBytePtr += srcChannelStrideBytes; /* skip to next source channel */ + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + frameCount * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + + if( bp->hostOutputFrameCount[0] > 0 ) + bp->hostOutputFrameCount[0] -= frameCount; + else + bp->hostOutputFrameCount[1] -= frameCount; + + bp->framesInTempOutputBuffer -= frameCount; + } +} + +/* + AdaptingProcess is a full duplex adapting buffer processor. It converts + data from the temporary output buffer into the host output buffers, then + from the host input buffers into the temporary input buffers. Calling the + streamCallback when necessary. + When processPartialUserBuffers is 0, all available input data will be + consumed and all available output space will be filled. When + processPartialUserBuffers is non-zero, as many full user buffers + as possible will be processed, but partial buffers will not be consumed. +*/ +static unsigned long AdaptingProcess( PaUtilBufferProcessor *bp, + int *streamCallbackResult, int processPartialUserBuffers ) +{ + void *userInput, *userOutput; + unsigned long framesProcessed = 0; + unsigned long framesAvailable; + unsigned long endProcessingMinFrameCount; + unsigned long maxFramesToCopy; + PaUtilChannelDescriptor *hostInputChannels, *hostOutputChannels; + unsigned int frameCount; + unsigned char *destBytePtr; + unsigned int destSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int destChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int i, j; + + + framesAvailable = bp->hostInputFrameCount[0] + bp->hostInputFrameCount[1];/* this is assumed to be the same as the output buffer's frame count */ + + if( processPartialUserBuffers ) + endProcessingMinFrameCount = 0; + else + endProcessingMinFrameCount = (bp->framesPerUserBuffer - 1); + + /* Fill host output with remaining frames in user output (tempOutputBuffer) */ + CopyTempOutputBuffersToHostOutputBuffers( bp ); + + while( framesAvailable > endProcessingMinFrameCount ) + { + + if( bp->framesInTempOutputBuffer == 0 && *streamCallbackResult != paContinue ) + { + /* the callback will not be called any more, so zero what remains + of the host output buffers */ + + for( i=0; i<2; ++i ) + { + frameCount = bp->hostOutputFrameCount[i]; + if( frameCount > 0 ) + { + hostOutputChannels = bp->hostOutputChannels[i]; + + for( j=0; joutputChannelCount; ++j ) + { + bp->outputZeroer( hostOutputChannels[j].data, + hostOutputChannels[j].stride, + frameCount ); + + /* advance dest ptr for next iteration */ + hostOutputChannels[j].data = ((unsigned char*)hostOutputChannels[j].data) + + frameCount * hostOutputChannels[j].stride * bp->bytesPerHostOutputSample; + } + bp->hostOutputFrameCount[i] = 0; + } + } + } + + + /* copy frames from host to user input buffers */ + while( bp->framesInTempInputBuffer < bp->framesPerUserBuffer && + ((bp->hostInputFrameCount[0] + bp->hostInputFrameCount[1]) > 0) ) + { + maxFramesToCopy = bp->framesPerUserBuffer - bp->framesInTempInputBuffer; + + /* select the input buffer set (1st or 2nd) */ + if( bp->hostInputFrameCount[0] > 0 ) + { + hostInputChannels = bp->hostInputChannels[0]; + frameCount = PA_MIN_( bp->hostInputFrameCount[0], maxFramesToCopy ); + } + else + { + hostInputChannels = bp->hostInputChannels[1]; + frameCount = PA_MIN_( bp->hostInputFrameCount[1], maxFramesToCopy ); + } + + /* configure conversion destination pointers */ + if( bp->userInputIsInterleaved ) + { + destBytePtr = ((unsigned char*)bp->tempInputBuffer) + + bp->bytesPerUserInputSample * bp->inputChannelCount * + bp->framesInTempInputBuffer; + + destSampleStrideSamples = bp->inputChannelCount; + destChannelStrideBytes = bp->bytesPerUserInputSample; + } + else /* user input is not interleaved */ + { + destBytePtr = ((unsigned char*)bp->tempInputBuffer) + + bp->bytesPerUserInputSample * bp->framesInTempInputBuffer; + + destSampleStrideSamples = 1; + destChannelStrideBytes = bp->framesPerUserBuffer * bp->bytesPerUserInputSample; + } + + for( i=0; iinputChannelCount; ++i ) + { + bp->inputConverter( destBytePtr, destSampleStrideSamples, + hostInputChannels[i].data, + hostInputChannels[i].stride, + frameCount, &bp->ditherGenerator ); + + destBytePtr += destChannelStrideBytes; /* skip to next destination channel */ + + /* advance src ptr for next iteration */ + hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) + + frameCount * hostInputChannels[i].stride * bp->bytesPerHostInputSample; + } + + if( bp->hostInputFrameCount[0] > 0 ) + bp->hostInputFrameCount[0] -= frameCount; + else + bp->hostInputFrameCount[1] -= frameCount; + + bp->framesInTempInputBuffer += frameCount; + + /* update framesAvailable and framesProcessed based on input consumed + unless something is very wrong this will also correspond to the + amount of output generated */ + framesAvailable -= frameCount; + framesProcessed += frameCount; + } + + /* call streamCallback */ + if( bp->framesInTempInputBuffer == bp->framesPerUserBuffer && + bp->framesInTempOutputBuffer == 0 ) + { + if( *streamCallbackResult == paContinue ) + { + /* setup userInput */ + if( bp->userInputIsInterleaved ) + { + userInput = bp->tempInputBuffer; + } + else /* user input is not interleaved */ + { + for( i = 0; i < bp->inputChannelCount; ++i ) + { + bp->tempInputBufferPtrs[i] = ((unsigned char*)bp->tempInputBuffer) + + i * bp->framesPerUserBuffer * bp->bytesPerUserInputSample; + } + + userInput = bp->tempInputBufferPtrs; + } + + /* setup userOutput */ + if( bp->userOutputIsInterleaved ) + { + userOutput = bp->tempOutputBuffer; + } + else /* user output is not interleaved */ + { + for( i = 0; i < bp->outputChannelCount; ++i ) + { + bp->tempOutputBufferPtrs[i] = ((unsigned char*)bp->tempOutputBuffer) + + i * bp->framesPerUserBuffer * bp->bytesPerUserOutputSample; + } + + userOutput = bp->tempOutputBufferPtrs; + } + + /* call streamCallback */ + + *streamCallbackResult = bp->streamCallback( userInput, userOutput, + bp->framesPerUserBuffer, bp->timeInfo, + bp->callbackStatusFlags, bp->userData ); + + bp->timeInfo->inputBufferAdcTime += bp->framesPerUserBuffer * bp->samplePeriod; + bp->timeInfo->outputBufferDacTime += bp->framesPerUserBuffer * bp->samplePeriod; + + bp->framesInTempInputBuffer = 0; + + if( *streamCallbackResult == paAbort ) + bp->framesInTempOutputBuffer = 0; + else + bp->framesInTempOutputBuffer = bp->framesPerUserBuffer; + } + else + { + /* paComplete or paAbort has already been called. */ + + bp->framesInTempInputBuffer = 0; + } + } + + /* copy frames from user (tempOutputBuffer) to host output buffers (hostOutputChannels) + Means to process the user output provided by the callback. Has to be called after + each callback. */ + CopyTempOutputBuffersToHostOutputBuffers( bp ); + + } + + return framesProcessed; +} + + +unsigned long PaUtil_EndBufferProcessing( PaUtilBufferProcessor* bp, int *streamCallbackResult ) +{ + unsigned long framesToProcess, framesToGo; + unsigned long framesProcessed = 0; + + if( bp->inputChannelCount != 0 && bp->outputChannelCount != 0 + && bp->hostInputChannels[0][0].data /* input was supplied (see PaUtil_SetNoInput) */ + && bp->hostOutputChannels[0][0].data /* output was supplied (see PaUtil_SetNoOutput) */ ) + { + assert( (bp->hostInputFrameCount[0] + bp->hostInputFrameCount[1]) == + (bp->hostOutputFrameCount[0] + bp->hostOutputFrameCount[1]) ); + } + + assert( *streamCallbackResult == paContinue + || *streamCallbackResult == paComplete + || *streamCallbackResult == paAbort ); /* don't forget to pass in a valid callback result value */ + + if( bp->useNonAdaptingProcess ) + { + if( bp->inputChannelCount != 0 && bp->outputChannelCount != 0 ) + { + /* full duplex non-adapting process, splice buffers if they are + different lengths */ + + framesToGo = bp->hostOutputFrameCount[0] + bp->hostOutputFrameCount[1]; /* relies on assert above for input/output equivalence */ + + do{ + unsigned long noInputInputFrameCount; + unsigned long *hostInputFrameCount; + PaUtilChannelDescriptor *hostInputChannels; + unsigned long noOutputOutputFrameCount; + unsigned long *hostOutputFrameCount; + PaUtilChannelDescriptor *hostOutputChannels; + unsigned long framesProcessedThisIteration; + + if( !bp->hostInputChannels[0][0].data ) + { + /* no input was supplied (see PaUtil_SetNoInput) + NonAdaptingProcess knows how to deal with this + */ + noInputInputFrameCount = framesToGo; + hostInputFrameCount = &noInputInputFrameCount; + hostInputChannels = 0; + } + else if( bp->hostInputFrameCount[0] != 0 ) + { + hostInputFrameCount = &bp->hostInputFrameCount[0]; + hostInputChannels = bp->hostInputChannels[0]; + } + else + { + hostInputFrameCount = &bp->hostInputFrameCount[1]; + hostInputChannels = bp->hostInputChannels[1]; + } + + if( !bp->hostOutputChannels[0][0].data ) + { + /* no output was supplied (see PaUtil_SetNoOutput) + NonAdaptingProcess knows how to deal with this + */ + noOutputOutputFrameCount = framesToGo; + hostOutputFrameCount = &noOutputOutputFrameCount; + hostOutputChannels = 0; + } + if( bp->hostOutputFrameCount[0] != 0 ) + { + hostOutputFrameCount = &bp->hostOutputFrameCount[0]; + hostOutputChannels = bp->hostOutputChannels[0]; + } + else + { + hostOutputFrameCount = &bp->hostOutputFrameCount[1]; + hostOutputChannels = bp->hostOutputChannels[1]; + } + + framesToProcess = PA_MIN_( *hostInputFrameCount, + *hostOutputFrameCount ); + + assert( framesToProcess != 0 ); + + framesProcessedThisIteration = NonAdaptingProcess( bp, streamCallbackResult, + hostInputChannels, hostOutputChannels, + framesToProcess ); + + *hostInputFrameCount -= framesProcessedThisIteration; + *hostOutputFrameCount -= framesProcessedThisIteration; + + framesProcessed += framesProcessedThisIteration; + framesToGo -= framesProcessedThisIteration; + + }while( framesToGo > 0 ); + } + else + { + /* half duplex non-adapting process, just process 1st and 2nd buffer */ + /* process first buffer */ + + framesToProcess = (bp->inputChannelCount != 0) + ? bp->hostInputFrameCount[0] + : bp->hostOutputFrameCount[0]; + + framesProcessed = NonAdaptingProcess( bp, streamCallbackResult, + bp->hostInputChannels[0], bp->hostOutputChannels[0], + framesToProcess ); + + /* process second buffer if provided */ + + framesToProcess = (bp->inputChannelCount != 0) + ? bp->hostInputFrameCount[1] + : bp->hostOutputFrameCount[1]; + if( framesToProcess > 0 ) + { + framesProcessed += NonAdaptingProcess( bp, streamCallbackResult, + bp->hostInputChannels[1], bp->hostOutputChannels[1], + framesToProcess ); + } + } + } + else /* block adaption necessary*/ + { + + if( bp->inputChannelCount != 0 && bp->outputChannelCount != 0 ) + { + /* full duplex */ + + if( bp->hostBufferSizeMode == paUtilVariableHostBufferSizePartialUsageAllowed ) + { + framesProcessed = AdaptingProcess( bp, streamCallbackResult, + 0 /* dont process partial user buffers */ ); + } + else + { + framesProcessed = AdaptingProcess( bp, streamCallbackResult, + 1 /* process partial user buffers */ ); + } + } + else if( bp->inputChannelCount != 0 ) + { + /* input only */ + framesToProcess = bp->hostInputFrameCount[0]; + + framesProcessed = AdaptingInputOnlyProcess( bp, streamCallbackResult, + bp->hostInputChannels[0], framesToProcess ); + + framesToProcess = bp->hostInputFrameCount[1]; + if( framesToProcess > 0 ) + { + framesProcessed += AdaptingInputOnlyProcess( bp, streamCallbackResult, + bp->hostInputChannels[1], framesToProcess ); + } + } + else + { + /* output only */ + framesToProcess = bp->hostOutputFrameCount[0]; + + framesProcessed = AdaptingOutputOnlyProcess( bp, streamCallbackResult, + bp->hostOutputChannels[0], framesToProcess ); + + framesToProcess = bp->hostOutputFrameCount[1]; + if( framesToProcess > 0 ) + { + framesProcessed += AdaptingOutputOnlyProcess( bp, streamCallbackResult, + bp->hostOutputChannels[1], framesToProcess ); + } + } + } + + return framesProcessed; +} + + +int PaUtil_IsBufferProcessorOutputEmpty( PaUtilBufferProcessor* bp ) +{ + return (bp->framesInTempOutputBuffer) ? 0 : 1; +} + + +unsigned long PaUtil_CopyInput( PaUtilBufferProcessor* bp, + void **buffer, unsigned long frameCount ) +{ + PaUtilChannelDescriptor *hostInputChannels; + unsigned int framesToCopy; + unsigned char *destBytePtr; + void **nonInterleavedDestPtrs; + unsigned int destSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int destChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int i; + + hostInputChannels = bp->hostInputChannels[0]; + framesToCopy = PA_MIN_( bp->hostInputFrameCount[0], frameCount ); + + if( bp->userInputIsInterleaved ) + { + destBytePtr = (unsigned char*)*buffer; + + destSampleStrideSamples = bp->inputChannelCount; + destChannelStrideBytes = bp->bytesPerUserInputSample; + + for( i=0; iinputChannelCount; ++i ) + { + bp->inputConverter( destBytePtr, destSampleStrideSamples, + hostInputChannels[i].data, + hostInputChannels[i].stride, + framesToCopy, &bp->ditherGenerator ); + + destBytePtr += destChannelStrideBytes; /* skip to next source channel */ + + /* advance dest ptr for next iteration */ + hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) + + framesToCopy * hostInputChannels[i].stride * bp->bytesPerHostInputSample; + } + + /* advance callers dest pointer (buffer) */ + *buffer = ((unsigned char *)*buffer) + + framesToCopy * bp->inputChannelCount * bp->bytesPerUserInputSample; + } + else + { + /* user input is not interleaved */ + + nonInterleavedDestPtrs = (void**)*buffer; + + destSampleStrideSamples = 1; + + for( i=0; iinputChannelCount; ++i ) + { + destBytePtr = (unsigned char*)nonInterleavedDestPtrs[i]; + + bp->inputConverter( destBytePtr, destSampleStrideSamples, + hostInputChannels[i].data, + hostInputChannels[i].stride, + framesToCopy, &bp->ditherGenerator ); + + /* advance callers dest pointer (nonInterleavedDestPtrs[i]) */ + destBytePtr += bp->bytesPerUserInputSample * framesToCopy; + nonInterleavedDestPtrs[i] = destBytePtr; + + /* advance dest ptr for next iteration */ + hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) + + framesToCopy * hostInputChannels[i].stride * bp->bytesPerHostInputSample; + } + } + + bp->hostInputFrameCount[0] -= framesToCopy; + + return framesToCopy; +} + +unsigned long PaUtil_CopyOutput( PaUtilBufferProcessor* bp, + const void ** buffer, unsigned long frameCount ) +{ + PaUtilChannelDescriptor *hostOutputChannels; + unsigned int framesToCopy; + unsigned char *srcBytePtr; + void **nonInterleavedSrcPtrs; + unsigned int srcSampleStrideSamples; /* stride from one sample to the next within a channel, in samples */ + unsigned int srcChannelStrideBytes; /* stride from one channel to the next, in bytes */ + unsigned int i; + + hostOutputChannels = bp->hostOutputChannels[0]; + framesToCopy = PA_MIN_( bp->hostOutputFrameCount[0], frameCount ); + + if( bp->userOutputIsInterleaved ) + { + srcBytePtr = (unsigned char*)*buffer; + + srcSampleStrideSamples = bp->outputChannelCount; + srcChannelStrideBytes = bp->bytesPerUserOutputSample; + + for( i=0; ioutputChannelCount; ++i ) + { + bp->outputConverter( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + srcBytePtr, srcSampleStrideSamples, + framesToCopy, &bp->ditherGenerator ); + + srcBytePtr += srcChannelStrideBytes; /* skip to next source channel */ + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + framesToCopy * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + + /* advance callers source pointer (buffer) */ + *buffer = ((unsigned char *)*buffer) + + framesToCopy * bp->outputChannelCount * bp->bytesPerUserOutputSample; + + } + else + { + /* user output is not interleaved */ + + nonInterleavedSrcPtrs = (void**)*buffer; + + srcSampleStrideSamples = 1; + + for( i=0; ioutputChannelCount; ++i ) + { + srcBytePtr = (unsigned char*)nonInterleavedSrcPtrs[i]; + + bp->outputConverter( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + srcBytePtr, srcSampleStrideSamples, + framesToCopy, &bp->ditherGenerator ); + + + /* advance callers source pointer (nonInterleavedSrcPtrs[i]) */ + srcBytePtr += bp->bytesPerUserOutputSample * framesToCopy; + nonInterleavedSrcPtrs[i] = srcBytePtr; + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + framesToCopy * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + } + + bp->hostOutputFrameCount[0] += framesToCopy; + + return framesToCopy; +} + + +unsigned long PaUtil_ZeroOutput( PaUtilBufferProcessor* bp, unsigned long frameCount ) +{ + PaUtilChannelDescriptor *hostOutputChannels; + unsigned int framesToZero; + unsigned int i; + + hostOutputChannels = bp->hostOutputChannels[0]; + framesToZero = PA_MIN_( bp->hostOutputFrameCount[0], frameCount ); + + for( i=0; ioutputChannelCount; ++i ) + { + bp->outputZeroer( hostOutputChannels[i].data, + hostOutputChannels[i].stride, + framesToZero ); + + + /* advance dest ptr for next iteration */ + hostOutputChannels[i].data = ((unsigned char*)hostOutputChannels[i].data) + + framesToZero * hostOutputChannels[i].stride * bp->bytesPerHostOutputSample; + } + + bp->hostOutputFrameCount[0] += framesToZero; + + return framesToZero; +} diff --git a/Externals/portaudio/src/common/pa_process.h b/Externals/portaudio/src/common/pa_process.h new file mode 100644 index 0000000000..4d5f56ad63 --- /dev/null +++ b/Externals/portaudio/src/common/pa_process.h @@ -0,0 +1,754 @@ +#ifndef PA_PROCESS_H +#define PA_PROCESS_H +/* + * $Id: pa_process.h 1668 2011-05-02 17:07:11Z rossb $ + * Portable Audio I/O Library callback buffer processing adapters + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Phil Burk, Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Buffer Processor prototypes. A Buffer Processor performs buffer length + adaption, coordinates sample format conversion, and interleaves/deinterleaves + channels. + +

Overview

+ + The "Buffer Processor" (PaUtilBufferProcessor) manages conversion of audio + data from host buffers to user buffers and back again. Where required, the + buffer processor takes care of converting between host and user sample formats, + interleaving and deinterleaving multichannel buffers, and adapting between host + and user buffers with different lengths. The buffer processor may be used with + full and half duplex streams, for both callback streams and blocking read/write + streams. + + One of the important capabilities provided by the buffer processor is + the ability to adapt between user and host buffer sizes of different lengths + with minimum latency. Although this task is relatively easy to perform when + the host buffer size is an integer multiple of the user buffer size, the + problem is more complicated when this is not the case - especially for + full-duplex callback streams. Where necessary the adaption is implemented by + internally buffering some input and/or output data. The buffer adation + algorithm used by the buffer processor was originally implemented by + Stephan Letz for the ASIO version of PortAudio, and is described in his + Callback_adaption_.pdf which is included in the distribution. + + The buffer processor performs sample conversion using the functions provided + by pa_converters.c. + + The following sections provide an overview of how to use the buffer processor. + Interested readers are advised to consult the host API implementations for + examples of buffer processor usage. + + +

Initialization, resetting and termination

+ + When a stream is opened, the buffer processor should be initialized using + PaUtil_InitializeBufferProcessor. This function initializes internal state + and allocates temporary buffers as neccesary according to the supplied + configuration parameters. Some of the parameters correspond to those requested + by the user in their call to Pa_OpenStream(), others reflect the requirements + of the host API implementation - they indicate host buffer sizes, formats, + and the type of buffering which the Host API uses. The buffer processor should + be initialized for callback streams and blocking read/write streams. + + Call PaUtil_ResetBufferProcessor to clear any sample data which is present + in the buffer processor before starting to use it (for example when + Pa_StartStream is called). + + When the buffer processor is no longer used call + PaUtil_TerminateBufferProcessor. + + +

Using the buffer processor for a callback stream

+ + The buffer processor's role in a callback stream is to take host input buffers + process them with the stream callback, and fill host output buffers. For a + full duplex stream, the buffer processor handles input and output simultaneously + due to the requirements of the minimum-latency buffer adation algorithm. + + When a host buffer becomes available, the implementation should call + the buffer processor to process the buffer. The buffer processor calls the + stream callback to consume and/or produce audio data as necessary. The buffer + processor will convert sample formats, interleave/deinterleave channels, + and slice or chunk the data to the appropriate buffer lengths according to + the requirements of the stream callback and the host API. + + To process a host buffer (or a pair of host buffers for a full-duplex stream) + use the following calling sequence: + + -# Call PaUtil_BeginBufferProcessing + -# For a stream which takes input: + - Call PaUtil_SetInputFrameCount with the number of frames in the host input + buffer. + - Call one of the following functions one or more times to tell the + buffer processor about the host input buffer(s): PaUtil_SetInputChannel, + PaUtil_SetInterleavedInputChannels, PaUtil_SetNonInterleavedInputChannel. + Which function you call will depend on whether the host buffer(s) are + interleaved or not. + - If the available host data is split accross two buffers (for example a + data range at the end of a circular buffer and another range at the + beginning of the circular buffer), also call + PaUtil_Set2ndInputFrameCount, PaUtil_Set2ndInputChannel, + PaUtil_Set2ndInterleavedInputChannels, + PaUtil_Set2ndNonInterleavedInputChannel as necessary to tell the buffer + processor about the second buffer. + -# For a stream which generates output: + - Call PaUtil_SetOutputFrameCount with the number of frames in the host + output buffer. + - Call one of the following functions one or more times to tell the + buffer processor about the host output buffer(s): PaUtil_SetOutputChannel, + PaUtil_SetInterleavedOutputChannels, PaUtil_SetNonInterleavedOutputChannel. + Which function you call will depend on whether the host buffer(s) are + interleaved or not. + - If the available host output buffer space is split accross two buffers + (for example a data range at the end of a circular buffer and another + range at the beginning of the circular buffer), call + PaUtil_Set2ndOutputFrameCount, PaUtil_Set2ndOutputChannel, + PaUtil_Set2ndInterleavedOutputChannels, + PaUtil_Set2ndNonInterleavedOutputChannel as necessary to tell the buffer + processor about the second buffer. + -# Call PaUtil_EndBufferProcessing, this function performs the actual data + conversion and processing. + + +

Using the buffer processor for a blocking read/write stream

+ + Blocking read/write streams use the buffer processor to convert and copy user + output data to a host buffer, and to convert and copy host input data to + the user's buffer. The buffer processor does not perform any buffer adaption. + When using the buffer processor in a blocking read/write stream the input and + output conversion are performed separately by the PaUtil_CopyInput and + PaUtil_CopyOutput functions. + + To copy data from a host input buffer to the buffer(s) which the user supplies + to Pa_ReadStream, use the following calling sequence. + + - Repeat the following three steps until the user buffer(s) have been filled + with samples from the host input buffers: + -# Call PaUtil_SetInputFrameCount with the number of frames in the host + input buffer. + -# Call one of the following functions one or more times to tell the + buffer processor about the host input buffer(s): PaUtil_SetInputChannel, + PaUtil_SetInterleavedInputChannels, PaUtil_SetNonInterleavedInputChannel. + Which function you call will depend on whether the host buffer(s) are + interleaved or not. + -# Call PaUtil_CopyInput with the user buffer pointer (or a copy of the + array of buffer pointers for a non-interleaved stream) passed to + Pa_ReadStream, along with the number of frames in the user buffer(s). + Be careful to pass a copy of the user buffer pointers to + PaUtil_CopyInput because PaUtil_CopyInput advances the pointers to + the start of the next region to copy. + - PaUtil_CopyInput will not copy more data than is available in the + host buffer(s), so the above steps need to be repeated until the user + buffer(s) are full. + + + To copy data to the host output buffer from the user buffers(s) supplied + to Pa_WriteStream use the following calling sequence. + + - Repeat the following three steps until all frames from the user buffer(s) + have been copied to the host API: + -# Call PaUtil_SetOutputFrameCount with the number of frames in the host + output buffer. + -# Call one of the following functions one or more times to tell the + buffer processor about the host output buffer(s): PaUtil_SetOutputChannel, + PaUtil_SetInterleavedOutputChannels, PaUtil_SetNonInterleavedOutputChannel. + Which function you call will depend on whether the host buffer(s) are + interleaved or not. + -# Call PaUtil_CopyOutput with the user buffer pointer (or a copy of the + array of buffer pointers for a non-interleaved stream) passed to + Pa_WriteStream, along with the number of frames in the user buffer(s). + Be careful to pass a copy of the user buffer pointers to + PaUtil_CopyOutput because PaUtil_CopyOutput advances the pointers to + the start of the next region to copy. + - PaUtil_CopyOutput will not copy more data than fits in the host buffer(s), + so the above steps need to be repeated until all user data is copied. +*/ + + +#include "portaudio.h" +#include "pa_converters.h" +#include "pa_dither.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** @brief Mode flag passed to PaUtil_InitializeBufferProcessor indicating the type + of buffering that the host API uses. + + The mode used depends on whether the host API or the implementation manages + the buffers, and how these buffers are used (scatter gather, circular buffer). +*/ +typedef enum { +/** The host buffer size is a fixed known size. */ + paUtilFixedHostBufferSize, + +/** The host buffer size may vary, but has a known maximum size. */ + paUtilBoundedHostBufferSize, + +/** Nothing is known about the host buffer size. */ + paUtilUnknownHostBufferSize, + +/** The host buffer size varies, and the client does not require the buffer + processor to consume all of the input and fill all of the output buffer. This + is useful when the implementation has access to the host API's circular buffer + and only needs to consume/fill some of it, not necessarily all of it, with each + call to the buffer processor. This is the only mode where + PaUtil_EndBufferProcessing() may not consume the whole buffer. +*/ + paUtilVariableHostBufferSizePartialUsageAllowed +}PaUtilHostBufferSizeMode; + + +/** @brief An auxilliary data structure used internally by the buffer processor + to represent host input and output buffers. */ +typedef struct PaUtilChannelDescriptor{ + void *data; + unsigned int stride; /**< stride in samples, not bytes */ +}PaUtilChannelDescriptor; + + +/** @brief The main buffer processor data structure. + + Allocate one of these, initialize it with PaUtil_InitializeBufferProcessor + and terminate it with PaUtil_TerminateBufferProcessor. +*/ +typedef struct { + unsigned long framesPerUserBuffer; + unsigned long framesPerHostBuffer; + + PaUtilHostBufferSizeMode hostBufferSizeMode; + int useNonAdaptingProcess; + int userOutputSampleFormatIsEqualToHost; + int userInputSampleFormatIsEqualToHost; + unsigned long framesPerTempBuffer; + + unsigned int inputChannelCount; + unsigned int bytesPerHostInputSample; + unsigned int bytesPerUserInputSample; + int userInputIsInterleaved; + PaUtilConverter *inputConverter; + PaUtilZeroer *inputZeroer; + + unsigned int outputChannelCount; + unsigned int bytesPerHostOutputSample; + unsigned int bytesPerUserOutputSample; + int userOutputIsInterleaved; + PaUtilConverter *outputConverter; + PaUtilZeroer *outputZeroer; + + unsigned long initialFramesInTempInputBuffer; + unsigned long initialFramesInTempOutputBuffer; + + void *tempInputBuffer; /**< used for slips, block adaption, and conversion. */ + void **tempInputBufferPtrs; /**< storage for non-interleaved buffer pointers, NULL for interleaved user input */ + unsigned long framesInTempInputBuffer; /**< frames remaining in input buffer from previous adaption iteration */ + + void *tempOutputBuffer; /**< used for slips, block adaption, and conversion. */ + void **tempOutputBufferPtrs; /**< storage for non-interleaved buffer pointers, NULL for interleaved user output */ + unsigned long framesInTempOutputBuffer; /**< frames remaining in input buffer from previous adaption iteration */ + + PaStreamCallbackTimeInfo *timeInfo; + + PaStreamCallbackFlags callbackStatusFlags; + + int hostInputIsInterleaved; + unsigned long hostInputFrameCount[2]; + PaUtilChannelDescriptor *hostInputChannels[2]; /**< pointers to arrays of channel descriptors. + pointers are NULL for half-duplex output processing. + hostInputChannels[i].data is NULL when the caller + calls PaUtil_SetNoInput() + */ + int hostOutputIsInterleaved; + unsigned long hostOutputFrameCount[2]; + PaUtilChannelDescriptor *hostOutputChannels[2]; /**< pointers to arrays of channel descriptors. + pointers are NULL for half-duplex input processing. + hostOutputChannels[i].data is NULL when the caller + calls PaUtil_SetNoOutput() + */ + + PaUtilTriangularDitherGenerator ditherGenerator; + + double samplePeriod; + + PaStreamCallback *streamCallback; + void *userData; +} PaUtilBufferProcessor; + + +/** @name Initialization, termination, resetting and info */ +/*@{*/ + +/** Initialize a buffer processor's representation stored in a + PaUtilBufferProcessor structure. Be sure to call + PaUtil_TerminateBufferProcessor after finishing with a buffer processor. + + @param bufferProcessor The buffer processor structure to initialize. + + @param inputChannelCount The number of input channels as passed to + Pa_OpenStream or 0 for an output-only stream. + + @param userInputSampleFormat Format of user input samples, as passed to + Pa_OpenStream. This parameter is ignored for ouput-only streams. + + @param hostInputSampleFormat Format of host input samples. This parameter is + ignored for output-only streams. See note about host buffer interleave below. + + @param outputChannelCount The number of output channels as passed to + Pa_OpenStream or 0 for an input-only stream. + + @param userOutputSampleFormat Format of user output samples, as passed to + Pa_OpenStream. This parameter is ignored for input-only streams. + + @param hostOutputSampleFormat Format of host output samples. This parameter is + ignored for input-only streams. See note about host buffer interleave below. + + @param sampleRate Sample rate of the stream. The more accurate this is the + better - it is used for updating time stamps when adapting buffers. + + @param streamFlags Stream flags as passed to Pa_OpenStream, this parameter is + used for selecting special sample conversion options such as clipping and + dithering. + + @param framesPerUserBuffer Number of frames per user buffer, as requested + by the framesPerBuffer parameter to Pa_OpenStream. This parameter may be + zero to indicate that the user will accept any (and varying) buffer sizes. + + @param framesPerHostBuffer Specifies the number of frames per host buffer + for the fixed buffer size mode, and the maximum number of frames + per host buffer for the bounded host buffer size mode. It is ignored for + the other modes. + + @param hostBufferSizeMode A mode flag indicating the size variability of + host buffers that will be passed to the buffer processor. See + PaUtilHostBufferSizeMode for further details. + + @param streamCallback The user stream callback passed to Pa_OpenStream. + + @param userData The user data field passed to Pa_OpenStream. + + @note The interleave flag is ignored for host buffer formats. Host + interleave is determined by the use of different SetInput and SetOutput + functions. + + @return An error code indicating whether the initialization was successful. + If the error code is not PaNoError, the buffer processor was not initialized + and should not be used. + + @see Pa_OpenStream, PaUtilHostBufferSizeMode, PaUtil_TerminateBufferProcessor +*/ +PaError PaUtil_InitializeBufferProcessor( PaUtilBufferProcessor* bufferProcessor, + int inputChannelCount, PaSampleFormat userInputSampleFormat, + PaSampleFormat hostInputSampleFormat, + int outputChannelCount, PaSampleFormat userOutputSampleFormat, + PaSampleFormat hostOutputSampleFormat, + double sampleRate, + PaStreamFlags streamFlags, + unsigned long framesPerUserBuffer, /* 0 indicates don't care */ + unsigned long framesPerHostBuffer, + PaUtilHostBufferSizeMode hostBufferSizeMode, + PaStreamCallback *streamCallback, void *userData ); + + +/** Terminate a buffer processor's representation. Deallocates any temporary + buffers allocated by PaUtil_InitializeBufferProcessor. + + @param bufferProcessor The buffer processor structure to terminate. + + @see PaUtil_InitializeBufferProcessor. +*/ +void PaUtil_TerminateBufferProcessor( PaUtilBufferProcessor* bufferProcessor ); + + +/** Clear any internally buffered data. If you call + PaUtil_InitializeBufferProcessor in your OpenStream routine, make sure you + call PaUtil_ResetBufferProcessor in your StartStream call. + + @param bufferProcessor The buffer processor to reset. +*/ +void PaUtil_ResetBufferProcessor( PaUtilBufferProcessor* bufferProcessor ); + + +/** Retrieve the input latency of a buffer processor, in frames. + + @param bufferProcessor The buffer processor examine. + + @return The input latency introduced by the buffer processor, in frames. + + @see PaUtil_GetBufferProcessorOutputLatencyFrames +*/ +unsigned long PaUtil_GetBufferProcessorInputLatencyFrames( PaUtilBufferProcessor* bufferProcessor ); + +/** Retrieve the output latency of a buffer processor, in frames. + + @param bufferProcessor The buffer processor examine. + + @return The output latency introduced by the buffer processor, in frames. + + @see PaUtil_GetBufferProcessorInputLatencyFrames +*/ +unsigned long PaUtil_GetBufferProcessorOutputLatencyFrames( PaUtilBufferProcessor* bufferProcessor ); + +/*@}*/ + + +/** @name Host buffer pointer configuration + + Functions to set host input and output buffers, used by both callback streams + and blocking read/write streams. +*/ +/*@{*/ + + +/** Set the number of frames in the input host buffer(s) specified by the + PaUtil_Set*InputChannel functions. + + @param bufferProcessor The buffer processor. + + @param frameCount The number of host input frames. A 0 frameCount indicates to + use the framesPerHostBuffer value passed to PaUtil_InitializeBufferProcessor. + + @see PaUtil_SetNoInput, PaUtil_SetInputChannel, + PaUtil_SetInterleavedInputChannels, PaUtil_SetNonInterleavedInputChannel +*/ +void PaUtil_SetInputFrameCount( PaUtilBufferProcessor* bufferProcessor, + unsigned long frameCount ); + + +/** Indicate that no input is avalable. This function should be used when + priming the output of a full-duplex stream opened with the + paPrimeOutputBuffersUsingStreamCallback flag. Note that it is not necessary + to call this or any othe PaUtil_Set*Input* functions for ouput-only streams. + + @param bufferProcessor The buffer processor. +*/ +void PaUtil_SetNoInput( PaUtilBufferProcessor* bufferProcessor ); + + +/** Provide the buffer processor with a pointer to a host input channel. + + @param bufferProcessor The buffer processor. + @param channel The channel number. + @param data The buffer. + @param stride The stride from one sample to the next, in samples. For + interleaved host buffers, the stride will usually be the same as the number of + channels in the buffer. +*/ +void PaUtil_SetInputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data, unsigned int stride ); + + +/** Provide the buffer processor with a pointer to an number of interleaved + host input channels. + + @param bufferProcessor The buffer processor. + @param firstChannel The first channel number. + @param data The buffer. + @param channelCount The number of interleaved channels in the buffer. If + channelCount is zero, the number of channels specified to + PaUtil_InitializeBufferProcessor will be used. +*/ +void PaUtil_SetInterleavedInputChannels( PaUtilBufferProcessor* bufferProcessor, + unsigned int firstChannel, void *data, unsigned int channelCount ); + + +/** Provide the buffer processor with a pointer to one non-interleaved host + output channel. + + @param bufferProcessor The buffer processor. + @param channel The channel number. + @param data The buffer. +*/ +void PaUtil_SetNonInterleavedInputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data ); + + +/** Use for the second buffer half when the input buffer is split in two halves. + @see PaUtil_SetInputFrameCount +*/ +void PaUtil_Set2ndInputFrameCount( PaUtilBufferProcessor* bufferProcessor, + unsigned long frameCount ); + +/** Use for the second buffer half when the input buffer is split in two halves. + @see PaUtil_SetInputChannel +*/ +void PaUtil_Set2ndInputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data, unsigned int stride ); + +/** Use for the second buffer half when the input buffer is split in two halves. + @see PaUtil_SetInterleavedInputChannels +*/ +void PaUtil_Set2ndInterleavedInputChannels( PaUtilBufferProcessor* bufferProcessor, + unsigned int firstChannel, void *data, unsigned int channelCount ); + +/** Use for the second buffer half when the input buffer is split in two halves. + @see PaUtil_SetNonInterleavedInputChannel +*/ +void PaUtil_Set2ndNonInterleavedInputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data ); + + +/** Set the number of frames in the output host buffer(s) specified by the + PaUtil_Set*OutputChannel functions. + + @param bufferProcessor The buffer processor. + + @param frameCount The number of host output frames. A 0 frameCount indicates to + use the framesPerHostBuffer value passed to PaUtil_InitializeBufferProcessor. + + @see PaUtil_SetOutputChannel, PaUtil_SetInterleavedOutputChannels, + PaUtil_SetNonInterleavedOutputChannel +*/ +void PaUtil_SetOutputFrameCount( PaUtilBufferProcessor* bufferProcessor, + unsigned long frameCount ); + + +/** Indicate that the output will be discarded. This function should be used + when implementing the paNeverDropInput mode for full duplex streams. + + @param bufferProcessor The buffer processor. +*/ +void PaUtil_SetNoOutput( PaUtilBufferProcessor* bufferProcessor ); + + +/** Provide the buffer processor with a pointer to a host output channel. + + @param bufferProcessor The buffer processor. + @param channel The channel number. + @param data The buffer. + @param stride The stride from one sample to the next, in samples. For + interleaved host buffers, the stride will usually be the same as the number of + channels in the buffer. +*/ +void PaUtil_SetOutputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data, unsigned int stride ); + + +/** Provide the buffer processor with a pointer to a number of interleaved + host output channels. + + @param bufferProcessor The buffer processor. + @param firstChannel The first channel number. + @param data The buffer. + @param channelCount The number of interleaved channels in the buffer. If + channelCount is zero, the number of channels specified to + PaUtil_InitializeBufferProcessor will be used. +*/ +void PaUtil_SetInterleavedOutputChannels( PaUtilBufferProcessor* bufferProcessor, + unsigned int firstChannel, void *data, unsigned int channelCount ); + + +/** Provide the buffer processor with a pointer to one non-interleaved host + output channel. + + @param bufferProcessor The buffer processor. + @param channel The channel number. + @param data The buffer. +*/ +void PaUtil_SetNonInterleavedOutputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data ); + + +/** Use for the second buffer half when the output buffer is split in two halves. + @see PaUtil_SetOutputFrameCount +*/ +void PaUtil_Set2ndOutputFrameCount( PaUtilBufferProcessor* bufferProcessor, + unsigned long frameCount ); + +/** Use for the second buffer half when the output buffer is split in two halves. + @see PaUtil_SetOutputChannel +*/ +void PaUtil_Set2ndOutputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data, unsigned int stride ); + +/** Use for the second buffer half when the output buffer is split in two halves. + @see PaUtil_SetInterleavedOutputChannels +*/ +void PaUtil_Set2ndInterleavedOutputChannels( PaUtilBufferProcessor* bufferProcessor, + unsigned int firstChannel, void *data, unsigned int channelCount ); + +/** Use for the second buffer half when the output buffer is split in two halves. + @see PaUtil_SetNonInterleavedOutputChannel +*/ +void PaUtil_Set2ndNonInterleavedOutputChannel( PaUtilBufferProcessor* bufferProcessor, + unsigned int channel, void *data ); + +/*@}*/ + + +/** @name Buffer processing functions for callback streams +*/ +/*@{*/ + +/** Commence processing a host buffer (or a pair of host buffers in the + full-duplex case) for a callback stream. + + @param bufferProcessor The buffer processor. + + @param timeInfo Timing information for the first sample of the host + buffer(s). This information may be adjusted when buffer adaption is being + performed. + + @param callbackStatusFlags Flags indicating whether underruns and overruns + have occurred since the last time the buffer processor was called. +*/ +void PaUtil_BeginBufferProcessing( PaUtilBufferProcessor* bufferProcessor, + PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags callbackStatusFlags ); + + +/** Finish processing a host buffer (or a pair of host buffers in the + full-duplex case) for a callback stream. + + @param bufferProcessor The buffer processor. + + @param callbackResult On input, indicates a previous callback result, and on + exit, the result of the user stream callback, if it is called. + On entry callbackResult should contain one of { paContinue, paComplete, or + paAbort}. If paComplete is passed, the stream callback will not be called + but any audio that was generated by previous stream callbacks will be copied + to the output buffer(s). You can check whether the buffer processor's internal + buffer is empty by calling PaUtil_IsBufferProcessorOutputEmpty. + + If the stream callback is called its result is stored in *callbackResult. If + the stream callback returns paComplete or paAbort, all output buffers will be + full of valid data - some of which may be zeros to acount for data that + wasn't generated by the terminating callback. + + @return The number of frames processed. This usually corresponds to the + number of frames specified by the PaUtil_Set*FrameCount functions, exept in + the paUtilVariableHostBufferSizePartialUsageAllowed buffer size mode when a + smaller value may be returned. +*/ +unsigned long PaUtil_EndBufferProcessing( PaUtilBufferProcessor* bufferProcessor, + int *callbackResult ); + + +/** Determine whether any callback generated output remains in the bufffer + processor's internal buffers. This method may be used to determine when to + continue calling PaUtil_EndBufferProcessing() after the callback has returned + a callbackResult of paComplete. + + @param bufferProcessor The buffer processor. + + @return Returns non-zero when callback generated output remains in the internal + buffer and zero (0) when there internal buffer contains no callback generated + data. +*/ +int PaUtil_IsBufferProcessorOutputEmpty( PaUtilBufferProcessor* bufferProcessor ); + +/*@}*/ + + +/** @name Buffer processing functions for blocking read/write streams +*/ +/*@{*/ + +/** Copy samples from host input channels set up by the PaUtil_Set*InputChannels + functions to a user supplied buffer. This function is intended for use with + blocking read/write streams. Copies the minimum of the number of + user frames (specified by the frameCount parameter) and the number of available + host frames (specified in a previous call to SetInputFrameCount()). + + @param bufferProcessor The buffer processor. + + @param buffer A pointer to the user buffer pointer, or a pointer to a pointer + to an array of user buffer pointers for a non-interleaved stream. It is + important that this parameter points to a copy of the user buffer pointers, + not to the actual user buffer pointers, because this function updates the + pointers before returning. + + @param frameCount The number of frames of data in the buffer(s) pointed to by + the buffer parameter. + + @return The number of frames copied. The buffer pointer(s) pointed to by the + buffer parameter are advanced to point to the frame(s) following the last one + filled. +*/ +unsigned long PaUtil_CopyInput( PaUtilBufferProcessor* bufferProcessor, + void **buffer, unsigned long frameCount ); + + +/* Copy samples from a user supplied buffer to host output channels set up by + the PaUtil_Set*OutputChannels functions. This function is intended for use with + blocking read/write streams. Copies the minimum of the number of + user frames (specified by the frameCount parameter) and the number of + host frames (specified in a previous call to SetOutputFrameCount()). + + @param bufferProcessor The buffer processor. + + @param buffer A pointer to the user buffer pointer, or a pointer to a pointer + to an array of user buffer pointers for a non-interleaved stream. It is + important that this parameter points to a copy of the user buffer pointers, + not to the actual user buffer pointers, because this function updates the + pointers before returning. + + @param frameCount The number of frames of data in the buffer(s) pointed to by + the buffer parameter. + + @return The number of frames copied. The buffer pointer(s) pointed to by the + buffer parameter are advanced to point to the frame(s) following the last one + copied. +*/ +unsigned long PaUtil_CopyOutput( PaUtilBufferProcessor* bufferProcessor, + const void ** buffer, unsigned long frameCount ); + + +/* Zero samples in host output channels set up by the PaUtil_Set*OutputChannels + functions. This function is useful for flushing streams. + Zeros the minimum of frameCount and the number of host frames specified in a + previous call to SetOutputFrameCount(). + + @param bufferProcessor The buffer processor. + + @param frameCount The maximum number of frames to zero. + + @return The number of frames zeroed. +*/ +unsigned long PaUtil_ZeroOutput( PaUtilBufferProcessor* bufferProcessor, + unsigned long frameCount ); + + +/*@}*/ + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_PROCESS_H */ diff --git a/Externals/portaudio/src/common/pa_ringbuffer.c b/Externals/portaudio/src/common/pa_ringbuffer.c new file mode 100644 index 0000000000..19c91497ce --- /dev/null +++ b/Externals/portaudio/src/common/pa_ringbuffer.c @@ -0,0 +1,237 @@ +/* + * $Id: pa_ringbuffer.c 1738 2011-08-18 11:47:28Z rossb $ + * Portable Audio I/O Library + * Ring Buffer utility. + * + * Author: Phil Burk, http://www.softsynth.com + * modified for SMP safety on Mac OS X by Bjorn Roche + * modified for SMP safety on Linux by Leland Lucius + * also, allowed for const where possible + * modified for multiple-byte-sized data elements by Sven Fischer + * + * Note that this is safe only for a single-thread reader and a + * single-thread writer. + * + * This program uses the PortAudio Portable Audio Library. + * For more information see: http://www.portaudio.com + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup common_src +*/ + +#include +#include +#include +#include "pa_ringbuffer.h" +#include +#include "pa_memorybarrier.h" + +/*************************************************************************** + * Initialize FIFO. + * elementCount must be power of 2, returns -1 if not. + */ +ring_buffer_size_t PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementSizeBytes, ring_buffer_size_t elementCount, void *dataPtr ) +{ + if( ((elementCount-1) & elementCount) != 0) return -1; /* Not Power of two. */ + rbuf->bufferSize = elementCount; + rbuf->buffer = (char *)dataPtr; + PaUtil_FlushRingBuffer( rbuf ); + rbuf->bigMask = (elementCount*2)-1; + rbuf->smallMask = (elementCount)-1; + rbuf->elementSizeBytes = elementSizeBytes; + return 0; +} + +/*************************************************************************** +** Return number of elements available for reading. */ +ring_buffer_size_t PaUtil_GetRingBufferReadAvailable( const PaUtilRingBuffer *rbuf ) +{ + return ( (rbuf->writeIndex - rbuf->readIndex) & rbuf->bigMask ); +} +/*************************************************************************** +** Return number of elements available for writing. */ +ring_buffer_size_t PaUtil_GetRingBufferWriteAvailable( const PaUtilRingBuffer *rbuf ) +{ + return ( rbuf->bufferSize - PaUtil_GetRingBufferReadAvailable(rbuf)); +} + +/*************************************************************************** +** Clear buffer. Should only be called when buffer is NOT being read or written. */ +void PaUtil_FlushRingBuffer( PaUtilRingBuffer *rbuf ) +{ + rbuf->writeIndex = rbuf->readIndex = 0; +} + +/*************************************************************************** +** Get address of region(s) to which we can write data. +** If the region is contiguous, size2 will be zero. +** If non-contiguous, size2 will be the size of second region. +** Returns room available to be written or elementCount, whichever is smaller. +*/ +ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount, + void **dataPtr1, ring_buffer_size_t *sizePtr1, + void **dataPtr2, ring_buffer_size_t *sizePtr2 ) +{ + ring_buffer_size_t index; + ring_buffer_size_t available = PaUtil_GetRingBufferWriteAvailable( rbuf ); + if( elementCount > available ) elementCount = available; + /* Check to see if write is not contiguous. */ + index = rbuf->writeIndex & rbuf->smallMask; + if( (index + elementCount) > rbuf->bufferSize ) + { + /* Write data in two blocks that wrap the buffer. */ + ring_buffer_size_t firstHalf = rbuf->bufferSize - index; + *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes]; + *sizePtr1 = firstHalf; + *dataPtr2 = &rbuf->buffer[0]; + *sizePtr2 = elementCount - firstHalf; + } + else + { + *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes]; + *sizePtr1 = elementCount; + *dataPtr2 = NULL; + *sizePtr2 = 0; + } + + if( available ) + PaUtil_FullMemoryBarrier(); /* (write-after-read) => full barrier */ + + return elementCount; +} + + +/*************************************************************************** +*/ +ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount ) +{ + /* ensure that previous writes are seen before we update the write index + (write after write) + */ + PaUtil_WriteMemoryBarrier(); + return rbuf->writeIndex = (rbuf->writeIndex + elementCount) & rbuf->bigMask; +} + +/*************************************************************************** +** Get address of region(s) from which we can read data. +** If the region is contiguous, size2 will be zero. +** If non-contiguous, size2 will be the size of second region. +** Returns room available to be read or elementCount, whichever is smaller. +*/ +ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount, + void **dataPtr1, ring_buffer_size_t *sizePtr1, + void **dataPtr2, ring_buffer_size_t *sizePtr2 ) +{ + ring_buffer_size_t index; + ring_buffer_size_t available = PaUtil_GetRingBufferReadAvailable( rbuf ); /* doesn't use memory barrier */ + if( elementCount > available ) elementCount = available; + /* Check to see if read is not contiguous. */ + index = rbuf->readIndex & rbuf->smallMask; + if( (index + elementCount) > rbuf->bufferSize ) + { + /* Write data in two blocks that wrap the buffer. */ + ring_buffer_size_t firstHalf = rbuf->bufferSize - index; + *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes]; + *sizePtr1 = firstHalf; + *dataPtr2 = &rbuf->buffer[0]; + *sizePtr2 = elementCount - firstHalf; + } + else + { + *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes]; + *sizePtr1 = elementCount; + *dataPtr2 = NULL; + *sizePtr2 = 0; + } + + if( available ) + PaUtil_ReadMemoryBarrier(); /* (read-after-read) => read barrier */ + + return elementCount; +} +/*************************************************************************** +*/ +ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount ) +{ + /* ensure that previous reads (copies out of the ring buffer) are always completed before updating (writing) the read index. + (write-after-read) => full barrier + */ + PaUtil_FullMemoryBarrier(); + return rbuf->readIndex = (rbuf->readIndex + elementCount) & rbuf->bigMask; +} + +/*************************************************************************** +** Return elements written. */ +ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount ) +{ + ring_buffer_size_t size1, size2, numWritten; + void *data1, *data2; + numWritten = PaUtil_GetRingBufferWriteRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 ); + if( size2 > 0 ) + { + + memcpy( data1, data, size1*rbuf->elementSizeBytes ); + data = ((char *)data) + size1*rbuf->elementSizeBytes; + memcpy( data2, data, size2*rbuf->elementSizeBytes ); + } + else + { + memcpy( data1, data, size1*rbuf->elementSizeBytes ); + } + PaUtil_AdvanceRingBufferWriteIndex( rbuf, numWritten ); + return numWritten; +} + +/*************************************************************************** +** Return elements read. */ +ring_buffer_size_t PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, ring_buffer_size_t elementCount ) +{ + ring_buffer_size_t size1, size2, numRead; + void *data1, *data2; + numRead = PaUtil_GetRingBufferReadRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 ); + if( size2 > 0 ) + { + memcpy( data, data1, size1*rbuf->elementSizeBytes ); + data = ((char *)data) + size1*rbuf->elementSizeBytes; + memcpy( data, data2, size2*rbuf->elementSizeBytes ); + } + else + { + memcpy( data, data1, size1*rbuf->elementSizeBytes ); + } + PaUtil_AdvanceRingBufferReadIndex( rbuf, numRead ); + return numRead; +} diff --git a/Externals/portaudio/src/common/pa_ringbuffer.h b/Externals/portaudio/src/common/pa_ringbuffer.h new file mode 100644 index 0000000000..51577f0707 --- /dev/null +++ b/Externals/portaudio/src/common/pa_ringbuffer.h @@ -0,0 +1,233 @@ +#ifndef PA_RINGBUFFER_H +#define PA_RINGBUFFER_H +/* + * $Id: pa_ringbuffer.h 1734 2011-08-18 11:19:36Z rossb $ + * Portable Audio I/O Library + * Ring Buffer utility. + * + * Author: Phil Burk, http://www.softsynth.com + * modified for SMP safety on OS X by Bjorn Roche. + * also allowed for const where possible. + * modified for multiple-byte-sized data elements by Sven Fischer + * + * Note that this is safe only for a single-thread reader + * and a single-thread writer. + * + * This program is distributed with the PortAudio Portable Audio Library. + * For more information see: http://www.portaudio.com + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + @brief Single-reader single-writer lock-free ring buffer + + PaUtilRingBuffer is a ring buffer used to transport samples between + different execution contexts (threads, OS callbacks, interrupt handlers) + without requiring the use of any locks. This only works when there is + a single reader and a single writer (ie. one thread or callback writes + to the ring buffer, another thread or callback reads from it). + + The PaUtilRingBuffer structure manages a ring buffer containing N + elements, where N must be a power of two. An element may be any size + (specified in bytes). + + The memory area used to store the buffer elements must be allocated by + the client prior to calling PaUtil_InitializeRingBuffer() and must outlive + the use of the ring buffer. +*/ + +#if defined(__APPLE__) +#include +typedef int32_t ring_buffer_size_t; +#elif defined( __GNUC__ ) +typedef long ring_buffer_size_t; +#elif (_MSC_VER >= 1400) +typedef long ring_buffer_size_t; +#elif defined(_MSC_VER) || defined(__BORLANDC__) +typedef long ring_buffer_size_t; +#else +typedef long ring_buffer_size_t; +#endif + + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +typedef struct PaUtilRingBuffer +{ + ring_buffer_size_t bufferSize; /**< Number of elements in FIFO. Power of 2. Set by PaUtil_InitRingBuffer. */ + volatile ring_buffer_size_t writeIndex; /**< Index of next writable element. Set by PaUtil_AdvanceRingBufferWriteIndex. */ + volatile ring_buffer_size_t readIndex; /**< Index of next readable element. Set by PaUtil_AdvanceRingBufferReadIndex. */ + ring_buffer_size_t bigMask; /**< Used for wrapping indices with extra bit to distinguish full/empty. */ + ring_buffer_size_t smallMask; /**< Used for fitting indices to buffer. */ + ring_buffer_size_t elementSizeBytes; /**< Number of bytes per element. */ + char *buffer; /**< Pointer to the buffer containing the actual data. */ +}PaUtilRingBuffer; + +/** Initialize Ring Buffer to empty state ready to have elements written to it. + + @param rbuf The ring buffer. + + @param elementSizeBytes The size of a single data element in bytes. + + @param elementCount The number of elements in the buffer (must be a power of 2). + + @param dataPtr A pointer to a previously allocated area where the data + will be maintained. It must be elementCount*elementSizeBytes long. + + @return -1 if elementCount is not a power of 2, otherwise 0. +*/ +ring_buffer_size_t PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementSizeBytes, ring_buffer_size_t elementCount, void *dataPtr ); + +/** Reset buffer to empty. Should only be called when buffer is NOT being read or written. + + @param rbuf The ring buffer. +*/ +void PaUtil_FlushRingBuffer( PaUtilRingBuffer *rbuf ); + +/** Retrieve the number of elements available in the ring buffer for writing. + + @param rbuf The ring buffer. + + @return The number of elements available for writing. +*/ +ring_buffer_size_t PaUtil_GetRingBufferWriteAvailable( const PaUtilRingBuffer *rbuf ); + +/** Retrieve the number of elements available in the ring buffer for reading. + + @param rbuf The ring buffer. + + @return The number of elements available for reading. +*/ +ring_buffer_size_t PaUtil_GetRingBufferReadAvailable( const PaUtilRingBuffer *rbuf ); + +/** Write data to the ring buffer. + + @param rbuf The ring buffer. + + @param data The address of new data to write to the buffer. + + @param elementCount The number of elements to be written. + + @return The number of elements written. +*/ +ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount ); + +/** Read data from the ring buffer. + + @param rbuf The ring buffer. + + @param data The address where the data should be stored. + + @param elementCount The number of elements to be read. + + @return The number of elements read. +*/ +ring_buffer_size_t PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, ring_buffer_size_t elementCount ); + +/** Get address of region(s) to which we can write data. + + @param rbuf The ring buffer. + + @param elementCount The number of elements desired. + + @param dataPtr1 The address where the first (or only) region pointer will be + stored. + + @param sizePtr1 The address where the first (or only) region length will be + stored. + + @param dataPtr2 The address where the second region pointer will be stored if + the first region is too small to satisfy elementCount. + + @param sizePtr2 The address where the second region length will be stored if + the first region is too small to satisfy elementCount. + + @return The room available to be written or elementCount, whichever is smaller. +*/ +ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount, + void **dataPtr1, ring_buffer_size_t *sizePtr1, + void **dataPtr2, ring_buffer_size_t *sizePtr2 ); + +/** Advance the write index to the next location to be written. + + @param rbuf The ring buffer. + + @param elementCount The number of elements to advance. + + @return The new position. +*/ +ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount ); + +/** Get address of region(s) from which we can read data. + + @param rbuf The ring buffer. + + @param elementCount The number of elements desired. + + @param dataPtr1 The address where the first (or only) region pointer will be + stored. + + @param sizePtr1 The address where the first (or only) region length will be + stored. + + @param dataPtr2 The address where the second region pointer will be stored if + the first region is too small to satisfy elementCount. + + @param sizePtr2 The address where the second region length will be stored if + the first region is too small to satisfy elementCount. + + @return The number of elements available for reading. +*/ +ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount, + void **dataPtr1, ring_buffer_size_t *sizePtr1, + void **dataPtr2, ring_buffer_size_t *sizePtr2 ); + +/** Advance the read index to the next location to be read. + + @param rbuf The ring buffer. + + @param elementCount The number of elements to advance. + + @return The new position. +*/ +ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_RINGBUFFER_H */ diff --git a/Externals/portaudio/src/common/pa_stream.c b/Externals/portaudio/src/common/pa_stream.c new file mode 100644 index 0000000000..ea91821f8d --- /dev/null +++ b/Externals/portaudio/src/common/pa_stream.c @@ -0,0 +1,150 @@ +/* + * $Id: pa_stream.c 1339 2008-02-15 07:50:33Z rossb $ + * Portable Audio I/O Library + * stream interface + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 2008 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Stream interfaces, representation structures and helper functions + used to interface between pa_front.c host API implementations. +*/ + + +#include "pa_stream.h" + + +void PaUtil_InitializeStreamInterface( PaUtilStreamInterface *streamInterface, + PaError (*Close)( PaStream* ), + PaError (*Start)( PaStream* ), + PaError (*Stop)( PaStream* ), + PaError (*Abort)( PaStream* ), + PaError (*IsStopped)( PaStream* ), + PaError (*IsActive)( PaStream* ), + PaTime (*GetTime)( PaStream* ), + double (*GetCpuLoad)( PaStream* ), + PaError (*Read)( PaStream*, void *, unsigned long ), + PaError (*Write)( PaStream*, const void *, unsigned long ), + signed long (*GetReadAvailable)( PaStream* ), + signed long (*GetWriteAvailable)( PaStream* ) ) +{ + streamInterface->Close = Close; + streamInterface->Start = Start; + streamInterface->Stop = Stop; + streamInterface->Abort = Abort; + streamInterface->IsStopped = IsStopped; + streamInterface->IsActive = IsActive; + streamInterface->GetTime = GetTime; + streamInterface->GetCpuLoad = GetCpuLoad; + streamInterface->Read = Read; + streamInterface->Write = Write; + streamInterface->GetReadAvailable = GetReadAvailable; + streamInterface->GetWriteAvailable = GetWriteAvailable; +} + + +void PaUtil_InitializeStreamRepresentation( PaUtilStreamRepresentation *streamRepresentation, + PaUtilStreamInterface *streamInterface, + PaStreamCallback *streamCallback, + void *userData ) +{ + streamRepresentation->magic = PA_STREAM_MAGIC; + streamRepresentation->nextOpenStream = 0; + streamRepresentation->streamInterface = streamInterface; + streamRepresentation->streamCallback = streamCallback; + streamRepresentation->streamFinishedCallback = 0; + + streamRepresentation->userData = userData; + + streamRepresentation->streamInfo.inputLatency = 0.; + streamRepresentation->streamInfo.outputLatency = 0.; + streamRepresentation->streamInfo.sampleRate = 0.; +} + + +void PaUtil_TerminateStreamRepresentation( PaUtilStreamRepresentation *streamRepresentation ) +{ + streamRepresentation->magic = 0; +} + + +PaError PaUtil_DummyRead( PaStream* stream, + void *buffer, + unsigned long frames ) +{ + (void)stream; /* unused parameter */ + (void)buffer; /* unused parameter */ + (void)frames; /* unused parameter */ + + return paCanNotReadFromACallbackStream; +} + + +PaError PaUtil_DummyWrite( PaStream* stream, + const void *buffer, + unsigned long frames ) +{ + (void)stream; /* unused parameter */ + (void)buffer; /* unused parameter */ + (void)frames; /* unused parameter */ + + return paCanNotWriteToACallbackStream; +} + + +signed long PaUtil_DummyGetReadAvailable( PaStream* stream ) +{ + (void)stream; /* unused parameter */ + + return paCanNotReadFromACallbackStream; +} + + +signed long PaUtil_DummyGetWriteAvailable( PaStream* stream ) +{ + (void)stream; /* unused parameter */ + + return paCanNotWriteToACallbackStream; +} + + +double PaUtil_DummyGetCpuLoad( PaStream* stream ) +{ + (void)stream; /* unused parameter */ + + return 0.0; +} diff --git a/Externals/portaudio/src/common/pa_stream.h b/Externals/portaudio/src/common/pa_stream.h new file mode 100644 index 0000000000..8d707b79cf --- /dev/null +++ b/Externals/portaudio/src/common/pa_stream.h @@ -0,0 +1,205 @@ +#ifndef PA_STREAM_H +#define PA_STREAM_H +/* + * $Id: pa_stream.h 1339 2008-02-15 07:50:33Z rossb $ + * Portable Audio I/O Library + * stream interface + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Stream interfaces, representation structures and helper functions + used to interface between pa_front.c host API implementations. +*/ + + +#include "portaudio.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +#define PA_STREAM_MAGIC (0x18273645) + + +/** A structure representing an (abstract) interface to a host API. Contains + pointers to functions which implement the interface. + + All PaStreamInterface functions are guaranteed to be called with a non-null, + valid stream parameter. +*/ +typedef struct { + PaError (*Close)( PaStream* stream ); + PaError (*Start)( PaStream *stream ); + PaError (*Stop)( PaStream *stream ); + PaError (*Abort)( PaStream *stream ); + PaError (*IsStopped)( PaStream *stream ); + PaError (*IsActive)( PaStream *stream ); + PaTime (*GetTime)( PaStream *stream ); + double (*GetCpuLoad)( PaStream* stream ); + PaError (*Read)( PaStream* stream, void *buffer, unsigned long frames ); + PaError (*Write)( PaStream* stream, const void *buffer, unsigned long frames ); + signed long (*GetReadAvailable)( PaStream* stream ); + signed long (*GetWriteAvailable)( PaStream* stream ); +} PaUtilStreamInterface; + + +/** Initialize the fields of a PaUtilStreamInterface structure. +*/ +void PaUtil_InitializeStreamInterface( PaUtilStreamInterface *streamInterface, + PaError (*Close)( PaStream* ), + PaError (*Start)( PaStream* ), + PaError (*Stop)( PaStream* ), + PaError (*Abort)( PaStream* ), + PaError (*IsStopped)( PaStream* ), + PaError (*IsActive)( PaStream* ), + PaTime (*GetTime)( PaStream* ), + double (*GetCpuLoad)( PaStream* ), + PaError (*Read)( PaStream* stream, void *buffer, unsigned long frames ), + PaError (*Write)( PaStream* stream, const void *buffer, unsigned long frames ), + signed long (*GetReadAvailable)( PaStream* stream ), + signed long (*GetWriteAvailable)( PaStream* stream ) ); + + +/** Dummy Read function for use in interfaces to a callback based streams. + Pass to the Read parameter of PaUtil_InitializeStreamInterface. + @return An error code indicating that the function has no effect + because the stream is a callback stream. +*/ +PaError PaUtil_DummyRead( PaStream* stream, + void *buffer, + unsigned long frames ); + + +/** Dummy Write function for use in an interfaces to callback based streams. + Pass to the Write parameter of PaUtil_InitializeStreamInterface. + @return An error code indicating that the function has no effect + because the stream is a callback stream. +*/ +PaError PaUtil_DummyWrite( PaStream* stream, + const void *buffer, + unsigned long frames ); + + +/** Dummy GetReadAvailable function for use in interfaces to callback based + streams. Pass to the GetReadAvailable parameter of PaUtil_InitializeStreamInterface. + @return An error code indicating that the function has no effect + because the stream is a callback stream. +*/ +signed long PaUtil_DummyGetReadAvailable( PaStream* stream ); + + +/** Dummy GetWriteAvailable function for use in interfaces to callback based + streams. Pass to the GetWriteAvailable parameter of PaUtil_InitializeStreamInterface. + @return An error code indicating that the function has no effect + because the stream is a callback stream. +*/ +signed long PaUtil_DummyGetWriteAvailable( PaStream* stream ); + + + +/** Dummy GetCpuLoad function for use in an interface to a read/write stream. + Pass to the GetCpuLoad parameter of PaUtil_InitializeStreamInterface. + @return Returns 0. +*/ +double PaUtil_DummyGetCpuLoad( PaStream* stream ); + + +/** Non host specific data for a stream. This data is used by pa_front to + forward to the appropriate functions in the streamInterface structure. +*/ +typedef struct PaUtilStreamRepresentation { + unsigned long magic; /**< set to PA_STREAM_MAGIC */ + struct PaUtilStreamRepresentation *nextOpenStream; /**< field used by multi-api code */ + PaUtilStreamInterface *streamInterface; + PaStreamCallback *streamCallback; + PaStreamFinishedCallback *streamFinishedCallback; + void *userData; + PaStreamInfo streamInfo; +} PaUtilStreamRepresentation; + + +/** Initialize a PaUtilStreamRepresentation structure. + + @see PaUtil_InitializeStreamRepresentation +*/ +void PaUtil_InitializeStreamRepresentation( + PaUtilStreamRepresentation *streamRepresentation, + PaUtilStreamInterface *streamInterface, + PaStreamCallback *streamCallback, + void *userData ); + + +/** Clean up a PaUtilStreamRepresentation structure previously initialized + by a call to PaUtil_InitializeStreamRepresentation. + + @see PaUtil_InitializeStreamRepresentation +*/ +void PaUtil_TerminateStreamRepresentation( PaUtilStreamRepresentation *streamRepresentation ); + + +/** Check that the stream pointer is valid. + + @return Returns paNoError if the stream pointer appears to be OK, otherwise + returns an error indicating the cause of failure. +*/ +PaError PaUtil_ValidateStreamPointer( PaStream *stream ); + + +/** Cast an opaque stream pointer into a pointer to a PaUtilStreamRepresentation. + + @see PaUtilStreamRepresentation +*/ +#define PA_STREAM_REP( stream )\ + ((PaUtilStreamRepresentation*) (stream) ) + + +/** Cast an opaque stream pointer into a pointer to a PaUtilStreamInterface. + + @see PaUtilStreamRepresentation, PaUtilStreamInterface +*/ +#define PA_STREAM_INTERFACE( stream )\ + PA_STREAM_REP( (stream) )->streamInterface + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_STREAM_H */ diff --git a/Externals/portaudio/src/common/pa_trace.c b/Externals/portaudio/src/common/pa_trace.c new file mode 100644 index 0000000000..24305003f7 --- /dev/null +++ b/Externals/portaudio/src/common/pa_trace.c @@ -0,0 +1,97 @@ +/* + * $Id: pa_trace.c 1339 2008-02-15 07:50:33Z rossb $ + * Portable Audio I/O Library Trace Facility + * Store trace information in real-time for later printing. + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2000 Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Real-time safe event trace logging facility for debugging. +*/ + + +#include +#include +#include +#include "pa_trace.h" + +#if PA_TRACE_REALTIME_EVENTS + +static char *traceTextArray[PA_MAX_TRACE_RECORDS]; +static int traceIntArray[PA_MAX_TRACE_RECORDS]; +static int traceIndex = 0; +static int traceBlock = 0; + +/*********************************************************************/ +void PaUtil_ResetTraceMessages() +{ + traceIndex = 0; +} + +/*********************************************************************/ +void PaUtil_DumpTraceMessages() +{ + int i; + int messageCount = (traceIndex < PA_MAX_TRACE_RECORDS) ? traceIndex : PA_MAX_TRACE_RECORDS; + + printf("DumpTraceMessages: traceIndex = %d\n", traceIndex ); + for( i=0; i must be included in the + context in which this macro is used. +*/ +#define PA_VALIDATE_TYPE_SIZES \ + { \ + assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaUint16 ) == 2 ); \ + assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaInt16 ) == 2 ); \ + assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaUint32 ) == 4 ); \ + assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaInt32 ) == 4 ); \ + } + + +#endif /* PA_TYPES_H */ diff --git a/Externals/portaudio/src/common/pa_util.h b/Externals/portaudio/src/common/pa_util.h new file mode 100644 index 0000000000..c454ea771d --- /dev/null +++ b/Externals/portaudio/src/common/pa_util.h @@ -0,0 +1,159 @@ +#ifndef PA_UTIL_H +#define PA_UTIL_H +/* + * $Id: pa_util.h 1584 2011-02-02 18:58:17Z rossb $ + * Portable Audio I/O Library implementation utilities header + * common implementation utilities and interfaces + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Prototypes for utility functions used by PortAudio implementations. + + Some functions declared here are defined in pa_front.c while others + are implemented separately for each platform. +*/ + + +#include "portaudio.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +struct PaUtilHostApiRepresentation; + + +/** Retrieve a specific host API representation. This function can be used + by implementations to retrieve a pointer to their representation in + host api specific extension functions which aren't passed a rep pointer + by pa_front.c. + + @param hostApi A pointer to a host API represenation pointer. Apon success + this will receive the requested representation pointer. + + @param type A valid host API type identifier. + + @returns An error code. If the result is PaNoError then a pointer to the + requested host API representation will be stored in *hostApi. If the host API + specified by type is not found, this function returns paHostApiNotFound. +*/ +PaError PaUtil_GetHostApiRepresentation( struct PaUtilHostApiRepresentation **hostApi, + PaHostApiTypeId type ); + + +/** Convert a PortAudio device index into a host API specific device index. + @param hostApiDevice Pointer to a device index, on success this will recieve the + converted device index value. + @param device The PortAudio device index to convert. + @param hostApi The host api which the index should be converted for. + + @returns On success returns PaNoError and places the converted index in the + hostApiDevice parameter. +*/ +PaError PaUtil_DeviceIndexToHostApiDeviceIndex( + PaDeviceIndex *hostApiDevice, PaDeviceIndex device, + struct PaUtilHostApiRepresentation *hostApi ); + + +/** Set the host error information returned by Pa_GetLastHostErrorInfo. This + function and the paUnanticipatedHostError error code should be used as a + last resort. Implementors should use existing PA error codes where possible, + or nominate new ones. Note that at it is always better to use + PaUtil_SetLastHostErrorInfo() and paUnanticipatedHostError than to return an + ambiguous or inaccurate PaError code. + + @param hostApiType The host API which encountered the error (ie of the caller) + + @param errorCode The error code returned by the native API function. + + @param errorText A string describing the error. PaUtil_SetLastHostErrorInfo + makes a copy of the string, so it is not necessary for the pointer to remain + valid after the call to PaUtil_SetLastHostErrorInfo() returns. + +*/ +void PaUtil_SetLastHostErrorInfo( PaHostApiTypeId hostApiType, long errorCode, + const char *errorText ); + + + +/* the following functions are implemented in a platform platform specific + .c file +*/ + +/** Allocate size bytes, guaranteed to be aligned to a FIXME byte boundary */ +void *PaUtil_AllocateMemory( long size ); + + +/** Realease block if non-NULL. block may be NULL */ +void PaUtil_FreeMemory( void *block ); + + +/** Return the number of currently allocated blocks. This function can be + used for detecting memory leaks. + + @note Allocations will only be tracked if PA_TRACK_MEMORY is #defined. If + it isn't, this function will always return 0. +*/ +int PaUtil_CountCurrentlyAllocatedBlocks( void ); + + +/** Initialize the clock used by PaUtil_GetTime(). Call this before calling + PaUtil_GetTime. + + @see PaUtil_GetTime +*/ +void PaUtil_InitializeClock( void ); + + +/** Return the system time in seconds. Used to implement CPU load functions + + @see PaUtil_InitializeClock +*/ +double PaUtil_GetTime( void ); + + +/* void Pa_Sleep( long msec ); must also be implemented in per-platform .c file */ + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_UTIL_H */ diff --git a/Externals/portaudio/src/hostapi/alsa/pa_linux_alsa.c b/Externals/portaudio/src/hostapi/alsa/pa_linux_alsa.c new file mode 100644 index 0000000000..97c2ebcfce --- /dev/null +++ b/Externals/portaudio/src/hostapi/alsa/pa_linux_alsa.c @@ -0,0 +1,4552 @@ +/* + * $Id: pa_linux_alsa.c 1691 2011-05-26 20:19:19Z aknudsen $ + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * ALSA implementation by Joshua Haberman and Arve Knudsen + * + * Copyright (c) 2002 Joshua Haberman + * Copyright (c) 2005-2009 Arve Knudsen + * Copyright (c) 2008 Kevin Kofler + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#define ALSA_PCM_NEW_HW_PARAMS_API +#define ALSA_PCM_NEW_SW_PARAMS_API +#include +#undef ALSA_PCM_NEW_HW_PARAMS_API +#undef ALSA_PCM_NEW_SW_PARAMS_API + +#include +#include /* strlen() */ +#include +#include +#include +#include +#include +#include +#include /* For sig_atomic_t */ +#ifdef PA_ALSA_DYNAMIC + #include /* For dlXXX functions */ +#endif + +#include "portaudio.h" +#include "pa_util.h" +#include "pa_unix_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "pa_endianness.h" +#include "pa_debugprint.h" + +#include "pa_linux_alsa.h" + +#ifndef SND_PCM_TSTAMP_ENABLE +#define SND_PCM_TSTAMP_ENABLE SND_PCM_TSTAMP_MMAP +#endif + +/* Defines Alsa function types and pointers to these functions. */ +#define _PA_DEFINE_FUNC(x) typedef typeof(x) x##_ft; static x##_ft *alsa_##x = 0 + +/* Alloca helper. */ +#define __alsa_snd_alloca(ptr,type) do { size_t __alsa_alloca_size = alsa_##type##_sizeof(); (*ptr) = (type##_t *) alloca(__alsa_alloca_size); memset(*ptr, 0, __alsa_alloca_size); } while (0) + +_PA_DEFINE_FUNC(snd_pcm_open); +_PA_DEFINE_FUNC(snd_pcm_close); +_PA_DEFINE_FUNC(snd_pcm_nonblock); +_PA_DEFINE_FUNC(snd_pcm_frames_to_bytes); +_PA_DEFINE_FUNC(snd_pcm_prepare); +_PA_DEFINE_FUNC(snd_pcm_start); +_PA_DEFINE_FUNC(snd_pcm_resume); +_PA_DEFINE_FUNC(snd_pcm_wait); +_PA_DEFINE_FUNC(snd_pcm_state); +_PA_DEFINE_FUNC(snd_pcm_avail_update); +_PA_DEFINE_FUNC(snd_pcm_areas_silence); +_PA_DEFINE_FUNC(snd_pcm_mmap_begin); +_PA_DEFINE_FUNC(snd_pcm_mmap_commit); +_PA_DEFINE_FUNC(snd_pcm_readi); +_PA_DEFINE_FUNC(snd_pcm_readn); +_PA_DEFINE_FUNC(snd_pcm_writei); +_PA_DEFINE_FUNC(snd_pcm_writen); +_PA_DEFINE_FUNC(snd_pcm_drain); +_PA_DEFINE_FUNC(snd_pcm_recover); +_PA_DEFINE_FUNC(snd_pcm_drop); +_PA_DEFINE_FUNC(snd_pcm_area_copy); +_PA_DEFINE_FUNC(snd_pcm_poll_descriptors); +_PA_DEFINE_FUNC(snd_pcm_poll_descriptors_count); +_PA_DEFINE_FUNC(snd_pcm_poll_descriptors_revents); +_PA_DEFINE_FUNC(snd_pcm_format_size); +_PA_DEFINE_FUNC(snd_pcm_link); +_PA_DEFINE_FUNC(snd_pcm_delay); + +_PA_DEFINE_FUNC(snd_pcm_hw_params_sizeof); +_PA_DEFINE_FUNC(snd_pcm_hw_params_malloc); +_PA_DEFINE_FUNC(snd_pcm_hw_params_free); +_PA_DEFINE_FUNC(snd_pcm_hw_params_any); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_access); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_format); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_channels); +//_PA_DEFINE_FUNC(snd_pcm_hw_params_set_periods_near); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_rate_near); //!!! +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_rate); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_rate_resample); +//_PA_DEFINE_FUNC(snd_pcm_hw_params_set_buffer_time_near); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_buffer_size); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_buffer_size_near); //!!! +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_buffer_size_min); +//_PA_DEFINE_FUNC(snd_pcm_hw_params_set_period_time_near); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_period_size_near); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_periods_integer); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_periods_min); + +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_buffer_size); +//_PA_DEFINE_FUNC(snd_pcm_hw_params_get_period_size); +//_PA_DEFINE_FUNC(snd_pcm_hw_params_get_access); +//_PA_DEFINE_FUNC(snd_pcm_hw_params_get_periods); +//_PA_DEFINE_FUNC(snd_pcm_hw_params_get_rate); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_channels_min); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_channels_max); + +_PA_DEFINE_FUNC(snd_pcm_hw_params_test_period_size); +_PA_DEFINE_FUNC(snd_pcm_hw_params_test_format); +_PA_DEFINE_FUNC(snd_pcm_hw_params_test_access); +_PA_DEFINE_FUNC(snd_pcm_hw_params_dump); +_PA_DEFINE_FUNC(snd_pcm_hw_params); + +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_periods_min); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_periods_max); +_PA_DEFINE_FUNC(snd_pcm_hw_params_set_period_size); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_period_size_min); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_period_size_max); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_buffer_size_max); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_rate_min); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_rate_max); +_PA_DEFINE_FUNC(snd_pcm_hw_params_get_rate_numden); +#define alsa_snd_pcm_hw_params_alloca(ptr) __alsa_snd_alloca(ptr, snd_pcm_hw_params) + +_PA_DEFINE_FUNC(snd_pcm_sw_params_sizeof); +_PA_DEFINE_FUNC(snd_pcm_sw_params_malloc); +_PA_DEFINE_FUNC(snd_pcm_sw_params_current); +_PA_DEFINE_FUNC(snd_pcm_sw_params_set_avail_min); +_PA_DEFINE_FUNC(snd_pcm_sw_params); +_PA_DEFINE_FUNC(snd_pcm_sw_params_free); +_PA_DEFINE_FUNC(snd_pcm_sw_params_set_start_threshold); +_PA_DEFINE_FUNC(snd_pcm_sw_params_set_stop_threshold); +_PA_DEFINE_FUNC(snd_pcm_sw_params_get_boundary); +_PA_DEFINE_FUNC(snd_pcm_sw_params_set_silence_threshold); +_PA_DEFINE_FUNC(snd_pcm_sw_params_set_silence_size); +_PA_DEFINE_FUNC(snd_pcm_sw_params_set_xfer_align); +_PA_DEFINE_FUNC(snd_pcm_sw_params_set_tstamp_mode); +#define alsa_snd_pcm_sw_params_alloca(ptr) __alsa_snd_alloca(ptr, snd_pcm_sw_params) + +_PA_DEFINE_FUNC(snd_pcm_info); +_PA_DEFINE_FUNC(snd_pcm_info_sizeof); +_PA_DEFINE_FUNC(snd_pcm_info_malloc); +_PA_DEFINE_FUNC(snd_pcm_info_free); +_PA_DEFINE_FUNC(snd_pcm_info_set_device); +_PA_DEFINE_FUNC(snd_pcm_info_set_subdevice); +_PA_DEFINE_FUNC(snd_pcm_info_set_stream); +_PA_DEFINE_FUNC(snd_pcm_info_get_name); +_PA_DEFINE_FUNC(snd_pcm_info_get_card); +#define alsa_snd_pcm_info_alloca(ptr) __alsa_snd_alloca(ptr, snd_pcm_info) + +_PA_DEFINE_FUNC(snd_ctl_pcm_next_device); +_PA_DEFINE_FUNC(snd_ctl_pcm_info); +_PA_DEFINE_FUNC(snd_ctl_open); +_PA_DEFINE_FUNC(snd_ctl_close); +_PA_DEFINE_FUNC(snd_ctl_card_info_malloc); +_PA_DEFINE_FUNC(snd_ctl_card_info_free); +_PA_DEFINE_FUNC(snd_ctl_card_info); +_PA_DEFINE_FUNC(snd_ctl_card_info_sizeof); +_PA_DEFINE_FUNC(snd_ctl_card_info_get_name); +#define alsa_snd_ctl_card_info_alloca(ptr) __alsa_snd_alloca(ptr, snd_ctl_card_info) + +_PA_DEFINE_FUNC(snd_config); +_PA_DEFINE_FUNC(snd_config_update); +_PA_DEFINE_FUNC(snd_config_search); +_PA_DEFINE_FUNC(snd_config_iterator_entry); +_PA_DEFINE_FUNC(snd_config_iterator_first); +_PA_DEFINE_FUNC(snd_config_iterator_end); +_PA_DEFINE_FUNC(snd_config_iterator_next); +_PA_DEFINE_FUNC(snd_config_get_string); +_PA_DEFINE_FUNC(snd_config_get_id); +_PA_DEFINE_FUNC(snd_config_update_free_global); + +_PA_DEFINE_FUNC(snd_pcm_status); +_PA_DEFINE_FUNC(snd_pcm_status_sizeof); +_PA_DEFINE_FUNC(snd_pcm_status_get_tstamp); +_PA_DEFINE_FUNC(snd_pcm_status_get_state); +_PA_DEFINE_FUNC(snd_pcm_status_get_trigger_tstamp); +_PA_DEFINE_FUNC(snd_pcm_status_get_delay); +#define alsa_snd_pcm_status_alloca(ptr) __alsa_snd_alloca(ptr, snd_pcm_status) + +_PA_DEFINE_FUNC(snd_card_next); +_PA_DEFINE_FUNC(snd_strerror); +_PA_DEFINE_FUNC(snd_output_stdio_attach); + +#define alsa_snd_config_for_each(pos, next, node)\ + for (pos = alsa_snd_config_iterator_first(node),\ + next = alsa_snd_config_iterator_next(pos);\ + pos != alsa_snd_config_iterator_end(node); pos = next, next = alsa_snd_config_iterator_next(pos)) + +#undef _PA_DEFINE_FUNC + +/* Redefine 'PA_ALSA_PATHNAME' to a different Alsa library name if desired. */ +#ifndef PA_ALSA_PATHNAME + #define PA_ALSA_PATHNAME "libasound.so" +#endif +static const char *g_AlsaLibName = PA_ALSA_PATHNAME; + +/* Handle to dynamically loaded library. */ +static void *g_AlsaLib = NULL; + +#ifdef PA_ALSA_DYNAMIC + +#define _PA_LOCAL_IMPL(x) __pa_local_##x + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_set_rate_near) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir) +{ + int ret; + + if ((ret = alsa_snd_pcm_hw_params_set_rate(pcm, params, (*val), (*dir))) < 0) + return ret; + + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_set_buffer_size_near) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val) +{ + int ret; + + if ((ret = alsa_snd_pcm_hw_params_set_buffer_size(pcm, params, (*val))) < 0) + return ret; + + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_set_period_size_near) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir) +{ + int ret; + + if ((ret = alsa_snd_pcm_hw_params_set_period_size(pcm, params, (*val), (*dir))) < 0) + return ret; + + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_channels_min) (const snd_pcm_hw_params_t *params, unsigned int *val) +{ + (*val) = 1; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_channels_max) (const snd_pcm_hw_params_t *params, unsigned int *val) +{ + (*val) = 2; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_periods_min) (const snd_pcm_hw_params_t *params, unsigned int *val, int *dir) +{ + (*val) = 2; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_periods_max) (const snd_pcm_hw_params_t *params, unsigned int *val, int *dir) +{ + (*val) = 8; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_period_size_min) (const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir) +{ + (*frames) = 64; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_period_size_max) (const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir) +{ + (*frames) = 512; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_buffer_size_max) (const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val) +{ + int ret; + int dir = 0; + snd_pcm_uframes_t pmax = 0; + unsigned int pcnt = 0; + + if ((ret = _PA_LOCAL_IMPL(snd_pcm_hw_params_get_period_size_max)(params, &pmax, &dir)) < 0) + return ret; + if ((ret = _PA_LOCAL_IMPL(snd_pcm_hw_params_get_periods_max)(params, &pcnt, &dir)) < 0) + return ret; + + (*val) = pmax * pcnt; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_rate_min) (const snd_pcm_hw_params_t *params, unsigned int *val, int *dir) +{ + (*val) = 44100; + return 0; +} + +int _PA_LOCAL_IMPL(snd_pcm_hw_params_get_rate_max) (const snd_pcm_hw_params_t *params, unsigned int *val, int *dir) +{ + (*val) = 44100; + return 0; +} + +#endif // PA_ALSA_DYNAMIC + +/* Trying to load Alsa library dynamically if 'PA_ALSA_DYNAMIC' is defined, othervise + will link during compilation. +*/ +static int PaAlsa_LoadLibrary() +{ +#ifdef PA_ALSA_DYNAMIC + + PA_DEBUG(( "%s: loading ALSA library file - %s\n", __FUNCTION__, g_AlsaLibName )); + + dlerror(); + g_AlsaLib = dlopen(g_AlsaLibName, (RTLD_NOW|RTLD_GLOBAL)); + if (g_AlsaLib == NULL) + { + PA_DEBUG(( "%s: failed dlopen() ALSA library file - %s, error: %s\n", __FUNCTION__, g_AlsaLibName, dlerror() )); + return 0; + } + + PA_DEBUG(( "%s: loading ALSA API\n", __FUNCTION__ )); + + #define _PA_LOAD_FUNC(x) do { \ + alsa_##x = dlsym(g_AlsaLib, #x); \ + if (alsa_##x == NULL) { \ + PA_DEBUG(( "%s: symbol [%s] not found in - %s, error: %s\n", __FUNCTION__, #x, g_AlsaLibName, dlerror() )); }\ + } while(0) + +#else + + #define _PA_LOAD_FUNC(x) alsa_##x = &x + +#endif + +_PA_LOAD_FUNC(snd_pcm_open); +_PA_LOAD_FUNC(snd_pcm_close); +_PA_LOAD_FUNC(snd_pcm_nonblock); +_PA_LOAD_FUNC(snd_pcm_frames_to_bytes); +_PA_LOAD_FUNC(snd_pcm_prepare); +_PA_LOAD_FUNC(snd_pcm_start); +_PA_LOAD_FUNC(snd_pcm_resume); +_PA_LOAD_FUNC(snd_pcm_wait); +_PA_LOAD_FUNC(snd_pcm_state); +_PA_LOAD_FUNC(snd_pcm_avail_update); +_PA_LOAD_FUNC(snd_pcm_areas_silence); +_PA_LOAD_FUNC(snd_pcm_mmap_begin); +_PA_LOAD_FUNC(snd_pcm_mmap_commit); +_PA_LOAD_FUNC(snd_pcm_readi); +_PA_LOAD_FUNC(snd_pcm_readn); +_PA_LOAD_FUNC(snd_pcm_writei); +_PA_LOAD_FUNC(snd_pcm_writen); +_PA_LOAD_FUNC(snd_pcm_drain); +_PA_LOAD_FUNC(snd_pcm_recover); +_PA_LOAD_FUNC(snd_pcm_drop); +_PA_LOAD_FUNC(snd_pcm_area_copy); +_PA_LOAD_FUNC(snd_pcm_poll_descriptors); +_PA_LOAD_FUNC(snd_pcm_poll_descriptors_count); +_PA_LOAD_FUNC(snd_pcm_poll_descriptors_revents); +_PA_LOAD_FUNC(snd_pcm_format_size); +_PA_LOAD_FUNC(snd_pcm_link); +_PA_LOAD_FUNC(snd_pcm_delay); + +_PA_LOAD_FUNC(snd_pcm_hw_params_sizeof); +_PA_LOAD_FUNC(snd_pcm_hw_params_malloc); +_PA_LOAD_FUNC(snd_pcm_hw_params_free); +_PA_LOAD_FUNC(snd_pcm_hw_params_any); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_access); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_format); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_channels); +//_PA_LOAD_FUNC(snd_pcm_hw_params_set_periods_near); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_rate_near); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_rate); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_rate_resample); +//_PA_LOAD_FUNC(snd_pcm_hw_params_set_buffer_time_near); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_buffer_size); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_buffer_size_near); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_buffer_size_min); +//_PA_LOAD_FUNC(snd_pcm_hw_params_set_period_time_near); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_period_size_near); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_periods_integer); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_periods_min); + +_PA_LOAD_FUNC(snd_pcm_hw_params_get_buffer_size); +//_PA_LOAD_FUNC(snd_pcm_hw_params_get_period_size); +//_PA_LOAD_FUNC(snd_pcm_hw_params_get_access); +//_PA_LOAD_FUNC(snd_pcm_hw_params_get_periods); +//_PA_LOAD_FUNC(snd_pcm_hw_params_get_rate); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_channels_min); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_channels_max); + +_PA_LOAD_FUNC(snd_pcm_hw_params_test_period_size); +_PA_LOAD_FUNC(snd_pcm_hw_params_test_format); +_PA_LOAD_FUNC(snd_pcm_hw_params_test_access); +_PA_LOAD_FUNC(snd_pcm_hw_params_dump); +_PA_LOAD_FUNC(snd_pcm_hw_params); + +_PA_LOAD_FUNC(snd_pcm_hw_params_get_periods_min); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_periods_max); +_PA_LOAD_FUNC(snd_pcm_hw_params_set_period_size); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_period_size_min); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_period_size_max); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_buffer_size_max); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_rate_min); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_rate_max); +_PA_LOAD_FUNC(snd_pcm_hw_params_get_rate_numden); + +_PA_LOAD_FUNC(snd_pcm_sw_params_sizeof); +_PA_LOAD_FUNC(snd_pcm_sw_params_malloc); +_PA_LOAD_FUNC(snd_pcm_sw_params_current); +_PA_LOAD_FUNC(snd_pcm_sw_params_set_avail_min); +_PA_LOAD_FUNC(snd_pcm_sw_params); +_PA_LOAD_FUNC(snd_pcm_sw_params_free); +_PA_LOAD_FUNC(snd_pcm_sw_params_set_start_threshold); +_PA_LOAD_FUNC(snd_pcm_sw_params_set_stop_threshold); +_PA_LOAD_FUNC(snd_pcm_sw_params_get_boundary); +_PA_LOAD_FUNC(snd_pcm_sw_params_set_silence_threshold); +_PA_LOAD_FUNC(snd_pcm_sw_params_set_silence_size); +_PA_LOAD_FUNC(snd_pcm_sw_params_set_xfer_align); +_PA_LOAD_FUNC(snd_pcm_sw_params_set_tstamp_mode); + +_PA_LOAD_FUNC(snd_pcm_info); +_PA_LOAD_FUNC(snd_pcm_info_sizeof); +_PA_LOAD_FUNC(snd_pcm_info_malloc); +_PA_LOAD_FUNC(snd_pcm_info_free); +_PA_LOAD_FUNC(snd_pcm_info_set_device); +_PA_LOAD_FUNC(snd_pcm_info_set_subdevice); +_PA_LOAD_FUNC(snd_pcm_info_set_stream); +_PA_LOAD_FUNC(snd_pcm_info_get_name); +_PA_LOAD_FUNC(snd_pcm_info_get_card); + +_PA_LOAD_FUNC(snd_ctl_pcm_next_device); +_PA_LOAD_FUNC(snd_ctl_pcm_info); +_PA_LOAD_FUNC(snd_ctl_open); +_PA_LOAD_FUNC(snd_ctl_close); +_PA_LOAD_FUNC(snd_ctl_card_info_malloc); +_PA_LOAD_FUNC(snd_ctl_card_info_free); +_PA_LOAD_FUNC(snd_ctl_card_info); +_PA_LOAD_FUNC(snd_ctl_card_info_sizeof); +_PA_LOAD_FUNC(snd_ctl_card_info_get_name); + +_PA_LOAD_FUNC(snd_config); +_PA_LOAD_FUNC(snd_config_update); +_PA_LOAD_FUNC(snd_config_search); +_PA_LOAD_FUNC(snd_config_iterator_entry); +_PA_LOAD_FUNC(snd_config_iterator_first); +_PA_LOAD_FUNC(snd_config_iterator_end); +_PA_LOAD_FUNC(snd_config_iterator_next); +_PA_LOAD_FUNC(snd_config_get_string); +_PA_LOAD_FUNC(snd_config_get_id); +_PA_LOAD_FUNC(snd_config_update_free_global); + +_PA_LOAD_FUNC(snd_pcm_status); +_PA_LOAD_FUNC(snd_pcm_status_sizeof); +_PA_LOAD_FUNC(snd_pcm_status_get_tstamp); +_PA_LOAD_FUNC(snd_pcm_status_get_state); +_PA_LOAD_FUNC(snd_pcm_status_get_trigger_tstamp); +_PA_LOAD_FUNC(snd_pcm_status_get_delay); + +_PA_LOAD_FUNC(snd_card_next); +_PA_LOAD_FUNC(snd_strerror); +_PA_LOAD_FUNC(snd_output_stdio_attach); +#undef _PA_LOAD_FUNC + +#ifdef PA_ALSA_DYNAMIC + PA_DEBUG(( "%s: loaded ALSA API - ok\n", __FUNCTION__ )); + +#define _PA_VALIDATE_LOAD_REPLACEMENT(x)\ + do {\ + if (alsa_##x == NULL)\ + {\ + alsa_##x = &_PA_LOCAL_IMPL(x);\ + PA_DEBUG(( "%s: replacing [%s] with local implementation\n", __FUNCTION__, #x ));\ + }\ + } while (0) + + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_set_rate_near); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_set_buffer_size_near); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_set_period_size_near); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_channels_min); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_channels_max); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_periods_min); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_periods_max); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_period_size_min); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_period_size_max); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_buffer_size_max); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_rate_min); + _PA_VALIDATE_LOAD_REPLACEMENT(snd_pcm_hw_params_get_rate_max); + +#undef _PA_LOCAL_IMPL +#undef _PA_VALIDATE_LOAD_REPLACEMENT + +#endif // PA_ALSA_DYNAMIC + + return 1; +} + +void PaAlsa_SetLibraryPathName( const char *pathName ) +{ +#ifdef PA_ALSA_DYNAMIC + g_AlsaLibName = pathName; +#else + (void)pathName; +#endif +} + +/* Close handle to Alsa library. */ +static void PaAlsa_CloseLibrary() +{ +#ifdef PA_ALSA_DYNAMIC + dlclose(g_AlsaLib); + g_AlsaLib = NULL; +#endif +} + +/* Check return value of ALSA function, and map it to PaError */ +#define ENSURE_(expr, code) \ + do { \ + int __pa_unsure_error_id;\ + if( UNLIKELY( (__pa_unsure_error_id = (expr)) < 0 ) ) \ + { \ + /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \ + if( (code) == paUnanticipatedHostError && pthread_equal( pthread_self(), paUnixMainThread) ) \ + { \ + PaUtil_SetLastHostErrorInfo( paALSA, __pa_unsure_error_id, alsa_snd_strerror( __pa_unsure_error_id ) ); \ + } \ + PaUtil_DebugPrint( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" ); \ + if( (code) == paUnanticipatedHostError ) \ + PA_DEBUG(( "Host error description: %s\n", alsa_snd_strerror( __pa_unsure_error_id ) )); \ + result = (code); \ + goto error; \ + } \ + } while (0) + +#define ASSERT_CALL_(expr, success) \ + do {\ + int __pa_assert_error_id;\ + __pa_assert_error_id = (expr);\ + assert( success == __pa_assert_error_id );\ + } while (0) + +static int numPeriods_ = 4; +static int busyRetries_ = 100; + +int PaAlsa_SetNumPeriods( int numPeriods ) +{ + numPeriods_ = numPeriods; + return paNoError; +} + +typedef enum +{ + StreamDirection_In, + StreamDirection_Out +} StreamDirection; + +typedef struct +{ + PaSampleFormat hostSampleFormat; + unsigned long framesPerBuffer; + int numUserChannels, numHostChannels; + int userInterleaved, hostInterleaved; + int canMmap; + void *nonMmapBuffer; + unsigned int nonMmapBufferSize; + PaDeviceIndex device; /* Keep the device index */ + + snd_pcm_t *pcm; + snd_pcm_uframes_t bufferSize; + snd_pcm_format_t nativeFormat; + unsigned int nfds; + int ready; /* Marked ready from poll */ + void **userBuffers; + snd_pcm_uframes_t offset; + StreamDirection streamDir; + + snd_pcm_channel_area_t *channelAreas; /* Needed for channel adaption */ +} PaAlsaStreamComponent; + +/* Implementation specific stream structure */ +typedef struct PaAlsaStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + PaUnixThread thread; + + unsigned long framesPerUserBuffer, maxFramesPerHostBuffer; + + int primeBuffers; + int callbackMode; /* bool: are we running in callback mode? */ + int pcmsSynced; /* Have we successfully synced pcms */ + int rtSched; + + /* the callback thread uses these to poll the sound device(s), waiting + * for data to be ready/available */ + struct pollfd* pfds; + int pollTimeout; + + /* Used in communication between threads */ + volatile sig_atomic_t callback_finished; /* bool: are we in the "callback finished" state? */ + volatile sig_atomic_t callbackAbort; /* Drop frames? */ + volatile sig_atomic_t isActive; /* Is stream in active state? (Between StartStream and StopStream || !paContinue) */ + PaUnixMutex stateMtx; /* Used to synchronize access to stream state */ + + int neverDropInput; + + PaTime underrun; + PaTime overrun; + + PaAlsaStreamComponent capture, playback; +} +PaAlsaStream; + +/* PaAlsaHostApiRepresentation - host api datastructure specific to this implementation */ + +typedef struct PaAlsaHostApiRepresentation +{ + PaUtilHostApiRepresentation baseHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + PaHostApiIndex hostApiIndex; +} +PaAlsaHostApiRepresentation; + +typedef struct PaAlsaDeviceInfo +{ + PaDeviceInfo baseDeviceInfo; + char *alsaName; + int isPlug; + int minInputChannels; + int minOutputChannels; +} +PaAlsaDeviceInfo; + +/* prototypes for functions declared in this file */ + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *callback, + void *userData ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError BuildDeviceList( PaAlsaHostApiRepresentation *hostApi ); +static int SetApproximateSampleRate( snd_pcm_t *pcm, snd_pcm_hw_params_t *hwParams, double sampleRate ); +static int GetExactSampleRate( snd_pcm_hw_params_t *hwParams, double *sampleRate ); + +/* Callback prototypes */ +static void *CallbackThreadFunc( void *userData ); + +/* Blocking prototypes */ +static signed long GetStreamReadAvailable( PaStream* s ); +static signed long GetStreamWriteAvailable( PaStream* s ); +static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); + + +static const PaAlsaDeviceInfo *GetDeviceInfo( const PaUtilHostApiRepresentation *hostApi, int device ) +{ + return (const PaAlsaDeviceInfo *)hostApi->deviceInfos[device]; +} + +/** Uncommented because AlsaErrorHandler is unused for anything good yet. If AlsaErrorHandler is + to be used, do not forget to register this callback in PaAlsa_Initialize, and unregister in Terminate. +*/ +/*static void AlsaErrorHandler(const char *file, int line, const char *function, int err, const char *fmt, ...) +{ +}*/ + +PaError PaAlsa_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + PaAlsaHostApiRepresentation *alsaHostApi = NULL; + + /* Try loading Alsa library. */ + if (!PaAlsa_LoadLibrary()) + return paHostApiNotFound; + + PA_UNLESS( alsaHostApi = (PaAlsaHostApiRepresentation*) PaUtil_AllocateMemory( + sizeof(PaAlsaHostApiRepresentation) ), paInsufficientMemory ); + PA_UNLESS( alsaHostApi->allocations = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); + alsaHostApi->hostApiIndex = hostApiIndex; + + *hostApi = (PaUtilHostApiRepresentation*)alsaHostApi; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paALSA; + (*hostApi)->info.name = "ALSA"; + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + /** If AlsaErrorHandler is to be used, do not forget to unregister callback pointer in + Terminate function. + */ + /*ENSURE_( snd_lib_error_set_handler(AlsaErrorHandler), paUnanticipatedHostError );*/ + + PA_ENSURE( BuildDeviceList( alsaHostApi ) ); + + PaUtil_InitializeStreamInterface( &alsaHostApi->callbackStreamInterface, + CloseStream, StartStream, + StopStream, AbortStream, + IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, + PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &alsaHostApi->blockingStreamInterface, + CloseStream, StartStream, + StopStream, AbortStream, + IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, + GetStreamReadAvailable, + GetStreamWriteAvailable ); + + PA_ENSURE( PaUnixThreading_Initialize() ); + + return result; + +error: + if( alsaHostApi ) + { + if( alsaHostApi->allocations ) + { + PaUtil_FreeAllAllocations( alsaHostApi->allocations ); + PaUtil_DestroyAllocationGroup( alsaHostApi->allocations ); + } + + PaUtil_FreeMemory( alsaHostApi ); + } + + return result; +} + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaAlsaHostApiRepresentation *alsaHostApi = (PaAlsaHostApiRepresentation*)hostApi; + + assert( hostApi ); + + /** See AlsaErrorHandler and PaAlsa_Initialize for details. + */ + /*snd_lib_error_set_handler(NULL);*/ + + if( alsaHostApi->allocations ) + { + PaUtil_FreeAllAllocations( alsaHostApi->allocations ); + PaUtil_DestroyAllocationGroup( alsaHostApi->allocations ); + } + + PaUtil_FreeMemory( alsaHostApi ); + alsa_snd_config_update_free_global(); + + /* Close Alsa library. */ + PaAlsa_CloseLibrary(); +} + +/** Determine max channels and default latencies. + * + * This function provides functionality to grope an opened (might be opened for capture or playback) pcm device for + * traits like max channels, suitable default latencies and default sample rate. Upon error, max channels is set to zero, + * and a suitable result returned. The device is closed before returning. + */ +static PaError GropeDevice( snd_pcm_t* pcm, int isPlug, StreamDirection mode, int openBlocking, + PaAlsaDeviceInfo* devInfo ) +{ + PaError result = paNoError; + snd_pcm_hw_params_t *hwParams; + snd_pcm_uframes_t lowLatency = 512, highLatency = 2048; + unsigned int minChans, maxChans; + int* minChannels, * maxChannels; + double * defaultLowLatency, * defaultHighLatency, * defaultSampleRate = + &devInfo->baseDeviceInfo.defaultSampleRate; + double defaultSr = *defaultSampleRate; + + assert( pcm ); + + PA_DEBUG(( "%s: collecting info ..\n", __FUNCTION__ )); + + if( StreamDirection_In == mode ) + { + minChannels = &devInfo->minInputChannels; + maxChannels = &devInfo->baseDeviceInfo.maxInputChannels; + defaultLowLatency = &devInfo->baseDeviceInfo.defaultLowInputLatency; + defaultHighLatency = &devInfo->baseDeviceInfo.defaultHighInputLatency; + } + else + { + minChannels = &devInfo->minOutputChannels; + maxChannels = &devInfo->baseDeviceInfo.maxOutputChannels; + defaultLowLatency = &devInfo->baseDeviceInfo.defaultLowOutputLatency; + defaultHighLatency = &devInfo->baseDeviceInfo.defaultHighOutputLatency; + } + + ENSURE_( alsa_snd_pcm_nonblock( pcm, 0 ), paUnanticipatedHostError ); + + alsa_snd_pcm_hw_params_alloca( &hwParams ); + alsa_snd_pcm_hw_params_any( pcm, hwParams ); + + if( defaultSr >= 0 ) + { + /* Could be that the device opened in one mode supports samplerates that the other mode wont have, + * so try again .. */ + if( SetApproximateSampleRate( pcm, hwParams, defaultSr ) < 0 ) + { + defaultSr = -1.; + PA_DEBUG(( "%s: Original default samplerate failed, trying again ..\n", __FUNCTION__ )); + } + } + + if( defaultSr < 0. ) /* Default sample rate not set */ + { + unsigned int sampleRate = 44100; /* Will contain approximate rate returned by alsa-lib */ + if( alsa_snd_pcm_hw_params_set_rate_near( pcm, hwParams, &sampleRate, NULL ) < 0) + { + result = paUnanticipatedHostError; + goto error; + } + ENSURE_( GetExactSampleRate( hwParams, &defaultSr ), paUnanticipatedHostError ); + } + + ENSURE_( alsa_snd_pcm_hw_params_get_channels_min( hwParams, &minChans ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_hw_params_get_channels_max( hwParams, &maxChans ), paUnanticipatedHostError ); + assert( maxChans <= INT_MAX ); + assert( maxChans > 0 ); /* Weird linking issue could cause wrong version of ALSA symbols to be called, + resulting in zeroed values */ + + /* XXX: Limit to sensible number (ALSA plugins accept a crazy amount of channels)? */ + if( isPlug && maxChans > 128 ) + { + maxChans = 128; + PA_DEBUG(( "%s: Limiting number of plugin channels to %u\n", __FUNCTION__, maxChans )); + } + + /* TWEAKME: + * + * Giving values for default min and max latency is not + * straightforward. Here are our objectives: + * + * * for low latency, we want to give the lowest value + * that will work reliably. This varies based on the + * sound card, kernel, CPU, etc. I think it is better + * to give sub-optimal latency than to give a number + * too low and cause dropouts. My conservative + * estimate at this point is to base it on 4096-sample + * latency at 44.1 kHz, which gives a latency of 23ms. + * * for high latency we want to give a large enough + * value that dropouts are basically impossible. This + * doesn't really require as much tweaking, since + * providing too large a number will just cause us to + * select the nearest setting that will work at stream + * config time. + */ + ENSURE_( alsa_snd_pcm_hw_params_set_buffer_size_near( pcm, hwParams, &lowLatency ), paUnanticipatedHostError ); + + /* Have to reset hwParams, to set new buffer size */ + ENSURE_( alsa_snd_pcm_hw_params_any( pcm, hwParams ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_hw_params_set_buffer_size_near( pcm, hwParams, &highLatency ), paUnanticipatedHostError ); + + *minChannels = (int)minChans; + *maxChannels = (int)maxChans; + *defaultSampleRate = defaultSr; + *defaultLowLatency = (double) lowLatency / *defaultSampleRate; + *defaultHighLatency = (double) highLatency / *defaultSampleRate; + +end: + alsa_snd_pcm_close( pcm ); + return result; + +error: + goto end; +} + +/* Initialize device info with invalid values (maxInputChannels and maxOutputChannels are set to zero since these indicate + * wether input/output is available) */ +static void InitializeDeviceInfo( PaDeviceInfo *deviceInfo ) +{ + deviceInfo->structVersion = -1; + deviceInfo->name = NULL; + deviceInfo->hostApi = -1; + deviceInfo->maxInputChannels = 0; + deviceInfo->maxOutputChannels = 0; + deviceInfo->defaultLowInputLatency = -1.; + deviceInfo->defaultLowOutputLatency = -1.; + deviceInfo->defaultHighInputLatency = -1.; + deviceInfo->defaultHighOutputLatency = -1.; + deviceInfo->defaultSampleRate = -1.; +} + +/* Helper struct */ +typedef struct +{ + char *alsaName; + char *name; + int isPlug; + int hasPlayback; + int hasCapture; +} HwDevInfo; + + +HwDevInfo predefinedNames[] = { + { "center_lfe", NULL, 0, 1, 0 }, +/* { "default", NULL, 0, 1, 0 }, */ +/* { "dmix", NULL, 0, 1, 0 }, */ +/* { "dpl", NULL, 0, 1, 0 }, */ +/* { "dsnoop", NULL, 0, 1, 0 }, */ + { "front", NULL, 0, 1, 0 }, + { "iec958", NULL, 0, 1, 0 }, +/* { "modem", NULL, 0, 1, 0 }, */ + { "rear", NULL, 0, 1, 0 }, + { "side", NULL, 0, 1, 0 }, +/* { "spdif", NULL, 0, 0, 0 }, */ + { "surround40", NULL, 0, 1, 0 }, + { "surround41", NULL, 0, 1, 0 }, + { "surround50", NULL, 0, 1, 0 }, + { "surround51", NULL, 0, 1, 0 }, + { "surround71", NULL, 0, 1, 0 }, + + { "AndroidPlayback_Earpiece_normal", NULL, 0, 1, 0 }, + { "AndroidPlayback_Speaker_normal", NULL, 0, 1, 0 }, + { "AndroidPlayback_Bluetooth_normal", NULL, 0, 1, 0 }, + { "AndroidPlayback_Headset_normal", NULL, 0, 1, 0 }, + { "AndroidPlayback_Speaker_Headset_normal", NULL, 0, 1, 0 }, + { "AndroidPlayback_Bluetooth-A2DP_normal", NULL, 0, 1, 0 }, + { "AndroidPlayback_ExtraDockSpeaker_normal", NULL, 0, 1, 0 }, + { "AndroidPlayback_TvOut_normal", NULL, 0, 1, 0 }, + + { "AndroidRecord_Microphone", NULL, 0, 0, 1 }, + { "AndroidRecord_Earpiece_normal", NULL, 0, 0, 1 }, + { "AndroidRecord_Speaker_normal", NULL, 0, 0, 1 }, + { "AndroidRecord_Headset_normal", NULL, 0, 0, 1 }, + { "AndroidRecord_Bluetooth_normal", NULL, 0, 0, 1 }, + { "AndroidRecord_Speaker_Headset_normal", NULL, 0, 0, 1 }, + + { NULL, NULL, 0, 1, 0 } +}; + +static const HwDevInfo *FindDeviceName( const char *name ) +{ + int i; + + for( i = 0; predefinedNames[i].alsaName; i++ ) + { + if( strcmp( name, predefinedNames[i].alsaName ) == 0 ) + { + return &predefinedNames[i]; + } + } + + return NULL; +} + +static PaError PaAlsa_StrDup( PaAlsaHostApiRepresentation *alsaApi, + char **dst, + const char *src) +{ + PaError result = paNoError; + int len = strlen( src ) + 1; + + /* PA_DEBUG(("PaStrDup %s %d\n", src, len)); */ + + PA_UNLESS( *dst = (char *)PaUtil_GroupAllocateMemory( alsaApi->allocations, len ), + paInsufficientMemory ); + strncpy( *dst, src, len ); + +error: + return result; +} + +/* Disregard some standard plugins + */ +static int IgnorePlugin( const char *pluginId ) +{ + static const char *ignoredPlugins[] = {"hw", "plughw", "plug", "dsnoop", "tee", + "file", "null", "shm", "cards", "rate_convert", NULL}; + int i = 0; + while( ignoredPlugins[i] ) + { + if( !strcmp( pluginId, ignoredPlugins[i] ) ) + { + return 1; + } + ++i; + } + + return 0; +} + +/** Open PCM device. + * + * Wrapper around alsa_snd_pcm_open which may repeatedly retry opening a device if it is busy, for + * a certain time. This is because dmix may temporarily hold on to a device after it (dmix) + * has been opened and closed. + * @param mode: Open mode (e.g., SND_PCM_BLOCKING). + * @param waitOnBusy: Retry opening busy device for up to one second? + **/ +static int OpenPcm( snd_pcm_t **pcmp, const char *name, snd_pcm_stream_t stream, int mode, int waitOnBusy ) +{ + int tries = 0, maxTries = waitOnBusy ? busyRetries_ : 0; + int ret = alsa_snd_pcm_open( pcmp, name, stream, mode ); + for( tries = 0; tries < maxTries && -EBUSY == ret; ++tries ) + { + Pa_Sleep( 10 ); + ret = alsa_snd_pcm_open( pcmp, name, stream, mode ); + if( -EBUSY != ret ) + { + PA_DEBUG(( "%s: Successfully opened initially busy device after %d tries\n", + __FUNCTION__, tries )); + } + } + if( -EBUSY == ret ) + { + PA_DEBUG(( "%s: Failed to open busy device '%s'\n", __FUNCTION__, name )); + } + else + { + if (ret < 0) + PA_DEBUG(( "%s: Opened device '%s' ptr[%p] - result: [%d:%s]\n", __FUNCTION__, name, *pcmp, ret, alsa_snd_strerror(ret) )); + } + + return ret; +} + +static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* deviceName, int blocking, + PaAlsaDeviceInfo* devInfo, int* devIdx ) +{ + PaError result = 0; + PaDeviceInfo *baseDeviceInfo = &devInfo->baseDeviceInfo; + snd_pcm_t *pcm = NULL; + PaUtilHostApiRepresentation *baseApi = &alsaApi->baseHostApiRep; + + PA_DEBUG(( "%s: filling device info for: %s\n", __FUNCTION__, deviceName->name )); + + /* Zero fields */ + InitializeDeviceInfo( baseDeviceInfo ); + + /* to determine device capabilities, we must open the device and query the + * hardware parameter configuration space */ + + /* Query capture */ + if( deviceName->hasCapture && + OpenPcm( &pcm, deviceName->alsaName, SND_PCM_STREAM_CAPTURE, blocking, 0 ) + >= 0 ) + { + if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_In, blocking, devInfo ) != paNoError ) + { + /* Error */ + PA_DEBUG(("%s: Failed groping %s for capture\n", __FUNCTION__, deviceName->alsaName)); + goto end; + } + } + + /* Query playback */ + if( deviceName->hasPlayback && + OpenPcm( &pcm, deviceName->alsaName, SND_PCM_STREAM_PLAYBACK, blocking, 0 ) + >= 0 ) + { + if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_Out, blocking, devInfo ) != paNoError ) + { + /* Error */ + PA_DEBUG(("%s: Failed groping %s for playback\n", __FUNCTION__, deviceName->alsaName)); + goto end; + } + } + + baseDeviceInfo->structVersion = 2; + baseDeviceInfo->hostApi = alsaApi->hostApiIndex; + baseDeviceInfo->name = deviceName->name; + devInfo->alsaName = deviceName->alsaName; + devInfo->isPlug = deviceName->isPlug; + + /* A: Storing pointer to PaAlsaDeviceInfo object as pointer to PaDeviceInfo object. + * Should now be safe to add device info, unless the device supports neither capture nor playback + */ + if( baseDeviceInfo->maxInputChannels > 0 || baseDeviceInfo->maxOutputChannels > 0 ) + { + /* Make device default if there isn't already one or it is the ALSA "default" device */ + if( (baseApi->info.defaultInputDevice == paNoDevice || !strcmp(deviceName->alsaName, + "default" )) && baseDeviceInfo->maxInputChannels > 0 ) + { + baseApi->info.defaultInputDevice = *devIdx; + PA_DEBUG(("Default input device: %s\n", deviceName->name)); + } + if( (baseApi->info.defaultOutputDevice == paNoDevice || !strcmp(deviceName->alsaName, + "default" )) && baseDeviceInfo->maxOutputChannels > 0 ) + { + baseApi->info.defaultOutputDevice = *devIdx; + PA_DEBUG(("Default output device: %s\n", deviceName->name)); + } + PA_DEBUG(("%s: Adding device %s: %d\n", __FUNCTION__, deviceName->name, *devIdx)); + baseApi->deviceInfos[*devIdx] = (PaDeviceInfo *) devInfo; + (*devIdx) += 1; + } + else + { + PA_DEBUG(( "%s: skipped device: %s, all channels - 0\n", __FUNCTION__, deviceName->name )); + } + +end: + return result; +} + +/* Build PaDeviceInfo list, ignore devices for which we cannot determine capabilities (possibly busy, sigh) */ +static PaError BuildDeviceList( PaAlsaHostApiRepresentation *alsaApi ) +{ + PaUtilHostApiRepresentation *baseApi = &alsaApi->baseHostApiRep; + PaAlsaDeviceInfo *deviceInfoArray; + int cardIdx = -1, devIdx = 0; + snd_ctl_card_info_t *cardInfo; + PaError result = paNoError; + size_t numDeviceNames = 0, maxDeviceNames = 1, i; + HwDevInfo *hwDevInfos = NULL; + snd_config_t *topNode = NULL; + snd_pcm_info_t *pcmInfo; + int res; + int blocking = SND_PCM_NONBLOCK; + char alsaCardName[50]; +#ifdef PA_ENABLE_DEBUG_OUTPUT + PaTime startTime = PaUtil_GetTime(); +#endif + + if( getenv( "PA_ALSA_INITIALIZE_BLOCK" ) && atoi( getenv( "PA_ALSA_INITIALIZE_BLOCK" ) ) ) + blocking = 0; + + /* These two will be set to the first working input and output device, respectively */ + baseApi->info.defaultInputDevice = paNoDevice; + baseApi->info.defaultOutputDevice = paNoDevice; + + /* Gather info about hw devices + + * alsa_snd_card_next() modifies the integer passed to it to be: + * the index of the first card if the parameter is -1 + * the index of the next card if the parameter is the index of a card + * -1 if there are no more cards + * + * The function itself returns 0 if it succeeded. */ + cardIdx = -1; + alsa_snd_ctl_card_info_alloca( &cardInfo ); + alsa_snd_pcm_info_alloca( &pcmInfo ); + while( alsa_snd_card_next( &cardIdx ) == 0 && cardIdx >= 0 ) + { + char *cardName; + int devIdx = -1; + snd_ctl_t *ctl; + char buf[50]; + + snprintf( alsaCardName, sizeof (alsaCardName), "hw:%d", cardIdx ); + + /* Acquire name of card */ + if( alsa_snd_ctl_open( &ctl, alsaCardName, 0 ) < 0 ) + { + /* Unable to open card :( */ + PA_DEBUG(( "%s: Unable to open device %s\n", __FUNCTION__, alsaCardName )); + continue; + } + alsa_snd_ctl_card_info( ctl, cardInfo ); + + PA_ENSURE( PaAlsa_StrDup( alsaApi, &cardName, alsa_snd_ctl_card_info_get_name( cardInfo )) ); + + while( alsa_snd_ctl_pcm_next_device( ctl, &devIdx ) == 0 && devIdx >= 0 ) + { + char *alsaDeviceName, *deviceName; + size_t len; + int hasPlayback = 0, hasCapture = 0; + snprintf( buf, sizeof (buf), "hw:%d,%d", cardIdx, devIdx ); + + /* Obtain info about this particular device */ + alsa_snd_pcm_info_set_device( pcmInfo, devIdx ); + alsa_snd_pcm_info_set_subdevice( pcmInfo, 0 ); + alsa_snd_pcm_info_set_stream( pcmInfo, SND_PCM_STREAM_CAPTURE ); + if( alsa_snd_ctl_pcm_info( ctl, pcmInfo ) >= 0 ) + { + hasCapture = 1; + } + + alsa_snd_pcm_info_set_stream( pcmInfo, SND_PCM_STREAM_PLAYBACK ); + if( alsa_snd_ctl_pcm_info( ctl, pcmInfo ) >= 0 ) + { + hasPlayback = 1; + } + + if( !hasPlayback && !hasCapture ) + { + /* Error */ + continue; + } + + /* The length of the string written by snprintf plus terminating 0 */ + len = snprintf( NULL, 0, "%s: %s (%s)", cardName, alsa_snd_pcm_info_get_name( pcmInfo ), buf ) + 1; + PA_UNLESS( deviceName = (char *)PaUtil_GroupAllocateMemory( alsaApi->allocations, len ), + paInsufficientMemory ); + snprintf( deviceName, len, "%s: %s (%s)", cardName, + alsa_snd_pcm_info_get_name( pcmInfo ), buf ); + + ++numDeviceNames; + if( !hwDevInfos || numDeviceNames > maxDeviceNames ) + { + maxDeviceNames *= 2; + PA_UNLESS( hwDevInfos = (HwDevInfo *) realloc( hwDevInfos, maxDeviceNames * sizeof (HwDevInfo) ), + paInsufficientMemory ); + } + + PA_ENSURE( PaAlsa_StrDup( alsaApi, &alsaDeviceName, buf ) ); + + hwDevInfos[ numDeviceNames - 1 ].alsaName = alsaDeviceName; + hwDevInfos[ numDeviceNames - 1 ].name = deviceName; + hwDevInfos[ numDeviceNames - 1 ].isPlug = 0; + hwDevInfos[ numDeviceNames - 1 ].hasPlayback = hasPlayback; + hwDevInfos[ numDeviceNames - 1 ].hasCapture = hasCapture; + } + alsa_snd_ctl_close( ctl ); + } + + /* Iterate over plugin devices */ + + if( NULL == (*alsa_snd_config) ) + { + /* alsa_snd_config_update is called implicitly by some functions, if this hasn't happened snd_config will be NULL (bleh) */ + ENSURE_( alsa_snd_config_update(), paUnanticipatedHostError ); + PA_DEBUG(( "Updating snd_config\n" )); + } + assert( *alsa_snd_config ); + if( (res = alsa_snd_config_search( *alsa_snd_config, "pcm", &topNode )) >= 0 ) + { + snd_config_iterator_t i, next; + + alsa_snd_config_for_each( i, next, topNode ) + { + const char *tpStr = "unknown", *idStr = NULL; + int err = 0; + + char *alsaDeviceName, *deviceName; + const HwDevInfo *predefined = NULL; + snd_config_t *n = alsa_snd_config_iterator_entry( i ), * tp = NULL;; + + if( (err = alsa_snd_config_search( n, "type", &tp )) < 0 ) + { + if( -ENOENT != err ) + { + ENSURE_(err, paUnanticipatedHostError); + } + } + else + { + ENSURE_( alsa_snd_config_get_string( tp, &tpStr ), paUnanticipatedHostError ); + } + ENSURE_( alsa_snd_config_get_id( n, &idStr ), paUnanticipatedHostError ); + if( IgnorePlugin( idStr ) ) + { + PA_DEBUG(( "%s: Ignoring ALSA plugin device [%s] of type [%s]\n", __FUNCTION__, idStr, tpStr )); + continue; + } + PA_DEBUG(( "%s: Found plugin [%s] of type [%s]\n", __FUNCTION__, idStr, tpStr )); + + PA_UNLESS( alsaDeviceName = (char*)PaUtil_GroupAllocateMemory( alsaApi->allocations, + strlen(idStr) + 6 ), paInsufficientMemory ); + strcpy( alsaDeviceName, idStr ); + PA_UNLESS( deviceName = (char*)PaUtil_GroupAllocateMemory( alsaApi->allocations, + strlen(idStr) + 1 ), paInsufficientMemory ); + strcpy( deviceName, idStr ); + + ++numDeviceNames; + if( !hwDevInfos || numDeviceNames > maxDeviceNames ) + { + maxDeviceNames *= 2; + PA_UNLESS( hwDevInfos = (HwDevInfo *) realloc( hwDevInfos, maxDeviceNames * sizeof (HwDevInfo) ), + paInsufficientMemory ); + } + + predefined = FindDeviceName( alsaDeviceName ); + + hwDevInfos[numDeviceNames - 1].alsaName = alsaDeviceName; + hwDevInfos[numDeviceNames - 1].name = deviceName; + hwDevInfos[numDeviceNames - 1].isPlug = 1; + + if( predefined ) + { + hwDevInfos[numDeviceNames - 1].hasPlayback = predefined->hasPlayback; + hwDevInfos[numDeviceNames - 1].hasCapture = predefined->hasCapture; + } + else + { + hwDevInfos[numDeviceNames - 1].hasPlayback = 1; + hwDevInfos[numDeviceNames - 1].hasCapture = 1; + } + } + } + else + PA_DEBUG(( "%s: Iterating over ALSA plugins failed: %s\n", __FUNCTION__, alsa_snd_strerror( res ) )); + + /* allocate deviceInfo memory based on the number of devices */ + PA_UNLESS( baseApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + alsaApi->allocations, sizeof(PaDeviceInfo*) * (numDeviceNames) ), paInsufficientMemory ); + + /* allocate all device info structs in a contiguous block */ + PA_UNLESS( deviceInfoArray = (PaAlsaDeviceInfo*)PaUtil_GroupAllocateMemory( + alsaApi->allocations, sizeof(PaAlsaDeviceInfo) * numDeviceNames ), paInsufficientMemory ); + + /* Loop over list of cards, filling in info. If a device is deemed unavailable (can't get name), + * it's ignored. + * + * Note that we do this in two stages. This is a workaround owing to the fact that the 'dmix' + * plugin may cause the underlying hardware device to be busy for a short while even after it + * (dmix) is closed. The 'default' plugin may also point to the dmix plugin, so the same goes + * for this. + */ + PA_DEBUG(( "%s: filling device info for %d devices\n", __FUNCTION__, numDeviceNames )); + for( i = 0, devIdx = 0; i < numDeviceNames; ++i ) + { + PaAlsaDeviceInfo* devInfo = &deviceInfoArray[i]; + HwDevInfo* hwInfo = &hwDevInfos[i]; + if( !strcmp( hwInfo->name, "dmix" ) || !strcmp( hwInfo->name, "default" ) ) + { + continue; + } + + PA_ENSURE( FillInDevInfo( alsaApi, hwInfo, blocking, devInfo, &devIdx ) ); + } + assert( devIdx < numDeviceNames ); + /* Now inspect 'dmix' and 'default' plugins */ + for( i = 0; i < numDeviceNames; ++i ) + { + PaAlsaDeviceInfo* devInfo = &deviceInfoArray[i]; + HwDevInfo* hwInfo = &hwDevInfos[i]; + if( strcmp( hwInfo->name, "dmix" ) && strcmp( hwInfo->name, "default" ) ) + { + continue; + } + + PA_ENSURE( FillInDevInfo( alsaApi, hwInfo, blocking, devInfo, + &devIdx ) ); + } + free( hwDevInfos ); + + baseApi->info.deviceCount = devIdx; /* Number of successfully queried devices */ + +#ifdef PA_ENABLE_DEBUG_OUTPUT + PA_DEBUG(( "%s: Building device list took %f seconds\n", __FUNCTION__, PaUtil_GetTime() - startTime )); +#endif + +end: + return result; + +error: + /* No particular action */ + goto end; +} + +/* Check against known device capabilities */ +static PaError ValidateParameters( const PaStreamParameters *parameters, PaUtilHostApiRepresentation *hostApi, StreamDirection mode ) +{ + PaError result = paNoError; + int maxChans; + const PaAlsaDeviceInfo *deviceInfo = NULL; + assert( parameters ); + + if( parameters->device != paUseHostApiSpecificDeviceSpecification ) + { + assert( parameters->device < hostApi->info.deviceCount ); + PA_UNLESS( parameters->hostApiSpecificStreamInfo == NULL, paBadIODeviceCombination ); + deviceInfo = GetDeviceInfo( hostApi, parameters->device ); + } + else + { + const PaAlsaStreamInfo *streamInfo = parameters->hostApiSpecificStreamInfo; + + PA_UNLESS( parameters->device == paUseHostApiSpecificDeviceSpecification, paInvalidDevice ); + PA_UNLESS( streamInfo->size == sizeof (PaAlsaStreamInfo) && streamInfo->version == 1, + paIncompatibleHostApiSpecificStreamInfo ); + PA_UNLESS( streamInfo->deviceString != NULL, paInvalidDevice ); + + /* Skip further checking */ + return paNoError; + } + + assert( deviceInfo ); + assert( parameters->hostApiSpecificStreamInfo == NULL ); + maxChans = (StreamDirection_In == mode ? deviceInfo->baseDeviceInfo.maxInputChannels : + deviceInfo->baseDeviceInfo.maxOutputChannels); + PA_UNLESS( parameters->channelCount <= maxChans, paInvalidChannelCount ); + +error: + return result; +} + +/* Given an open stream, what sample formats are available? */ +static PaSampleFormat GetAvailableFormats( snd_pcm_t *pcm ) +{ + PaSampleFormat available = 0; + snd_pcm_hw_params_t *hwParams; + alsa_snd_pcm_hw_params_alloca( &hwParams ); + + alsa_snd_pcm_hw_params_any( pcm, hwParams ); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_FLOAT ) >= 0) + available |= paFloat32; + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S32 ) >= 0) + available |= paInt32; + +#ifdef PA_LITTLE_ENDIAN + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S24_3LE ) >= 0) + available |= paInt24; +#elif defined PA_BIG_ENDIAN + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S24_3BE ) >= 0) + available |= paInt24; +#endif + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S16 ) >= 0) + available |= paInt16; + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U8 ) >= 0) + available |= paUInt8; + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S8 ) >= 0) + available |= paInt8; + + return available; +} + +/* Output to console all formats supported by device */ +static void LogAllAvailableFormats( snd_pcm_t *pcm ) +{ + PaSampleFormat available = 0; + snd_pcm_hw_params_t *hwParams; + alsa_snd_pcm_hw_params_alloca( &hwParams ); + + alsa_snd_pcm_hw_params_any( pcm, hwParams ); + + PA_DEBUG(( " --- Supported Formats ---\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S8 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S8\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U8 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U8\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S16_LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S16_LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S16_BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S16_BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U16_LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U16_LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U16_BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U16_BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S24_LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S24_LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S24_BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S24_BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U24_LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U24_LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U24_BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U24_BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_FLOAT_LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_FLOAT_LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_FLOAT_BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_FLOAT_BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_FLOAT64_LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_FLOAT64_LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_FLOAT64_BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_FLOAT64_BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_IEC958_SUBFRAME_LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_IEC958_SUBFRAME_LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_IEC958_SUBFRAME_BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_IEC958_SUBFRAME_BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_MU_LAW ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_MU_LAW\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_A_LAW ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_A_LAW\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_IMA_ADPCM ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_IMA_ADPCM\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_MPEG ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_MPEG\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_GSM ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_GSM\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_SPECIAL ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_SPECIAL\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S24_3LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S24_3LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S24_3BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S24_3BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U24_3LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U24_3LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U24_3BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U24_3BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S20_3LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S20_3LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S20_3BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S20_3BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U20_3LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U20_3LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U20_3BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U20_3BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S18_3LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S18_3LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S18_3BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S18_3BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U18_3LE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U18_3LE\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U18_3BE ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U18_3BE\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S16 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S16\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U16 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U16\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S24 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S24\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U24 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U24\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_S32 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_S32\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_U32 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_U32\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_FLOAT ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_FLOAT\n" )); + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_FLOAT64 ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_FLOAT64\n" )); + + if( alsa_snd_pcm_hw_params_test_format( pcm, hwParams, SND_PCM_FORMAT_IEC958_SUBFRAME ) >= 0) + PA_DEBUG(( "SND_PCM_FORMAT_IEC958_SUBFRAME\n" )); + + PA_DEBUG(( " -------------------------\n" )); +} + +static snd_pcm_format_t Pa2AlsaFormat( PaSampleFormat paFormat ) +{ + switch( paFormat ) + { + case paFloat32: + return SND_PCM_FORMAT_FLOAT; + + case paInt16: + return SND_PCM_FORMAT_S16; + + case paInt24: +#ifdef PA_LITTLE_ENDIAN + return SND_PCM_FORMAT_S24_3LE; +#elif defined PA_BIG_ENDIAN + return SND_PCM_FORMAT_S24_3BE; +#endif + + case paInt32: + return SND_PCM_FORMAT_S32; + + case paInt8: + return SND_PCM_FORMAT_S8; + + case paUInt8: + return SND_PCM_FORMAT_U8; + + default: + return SND_PCM_FORMAT_UNKNOWN; + } +} + +/** Open an ALSA pcm handle. + * + * The device to be open can be specified in a custom PaAlsaStreamInfo struct, or it will be a device number. In case of a + * device number, it maybe specified through an env variable (PA_ALSA_PLUGHW) that we should open the corresponding plugin + * device. + */ +static PaError AlsaOpen( const PaUtilHostApiRepresentation *hostApi, const PaStreamParameters *params, StreamDirection + streamDir, snd_pcm_t **pcm ) +{ + PaError result = paNoError; + int ret; + char dnameArray[50]; + const char* deviceName = dnameArray; + const PaAlsaDeviceInfo *deviceInfo = NULL; + PaAlsaStreamInfo *streamInfo = (PaAlsaStreamInfo *)params->hostApiSpecificStreamInfo; + + if( !streamInfo ) + { + int usePlug = 0; + deviceInfo = GetDeviceInfo( hostApi, params->device ); + + /* If device name starts with hw: and PA_ALSA_PLUGHW is 1, we open the plughw device instead */ + if( !strncmp( "hw:", deviceInfo->alsaName, 3 ) && getenv( "PA_ALSA_PLUGHW" ) ) + usePlug = atoi( getenv( "PA_ALSA_PLUGHW" ) ); + if( usePlug ) + snprintf( dnameArray, 50, "plug%s", deviceInfo->alsaName ); + else + deviceName = deviceInfo->alsaName; + } + else + deviceName = streamInfo->deviceString; + + PA_DEBUG(( "%s: Opening device %s\n", __FUNCTION__, deviceName )); + if( (ret = OpenPcm( pcm, deviceName, streamDir == StreamDirection_In ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK, + SND_PCM_NONBLOCK, 1 )) < 0 ) + { + /* Not to be closed */ + *pcm = NULL; + ENSURE_( ret, -EBUSY == ret ? paDeviceUnavailable : paBadIODeviceCombination ); + } + ENSURE_( alsa_snd_pcm_nonblock( *pcm, 0 ), paUnanticipatedHostError ); + +end: + return result; + +error: + goto end; +} + +static PaError TestParameters( const PaUtilHostApiRepresentation *hostApi, const PaStreamParameters *parameters, + double sampleRate, StreamDirection streamDir ) +{ + PaError result = paNoError; + snd_pcm_t *pcm = NULL; + PaSampleFormat availableFormats; + /* We are able to adapt to a number of channels less than what the device supports */ + unsigned int numHostChannels; + PaSampleFormat hostFormat; + snd_pcm_hw_params_t *hwParams; + alsa_snd_pcm_hw_params_alloca( &hwParams ); + + if( !parameters->hostApiSpecificStreamInfo ) + { + const PaAlsaDeviceInfo *devInfo = GetDeviceInfo( hostApi, parameters->device ); + numHostChannels = PA_MAX( parameters->channelCount, StreamDirection_In == streamDir ? + devInfo->minInputChannels : devInfo->minOutputChannels ); + } + else + numHostChannels = parameters->channelCount; + + PA_ENSURE( AlsaOpen( hostApi, parameters, streamDir, &pcm ) ); + + alsa_snd_pcm_hw_params_any( pcm, hwParams ); + + if( SetApproximateSampleRate( pcm, hwParams, sampleRate ) < 0 ) + { + result = paInvalidSampleRate; + goto error; + } + + if( alsa_snd_pcm_hw_params_set_channels( pcm, hwParams, numHostChannels ) < 0 ) + { + result = paInvalidChannelCount; + goto error; + } + + /* See if we can find a best possible match */ + availableFormats = GetAvailableFormats( pcm ); + PA_ENSURE( hostFormat = PaUtil_SelectClosestAvailableFormat( availableFormats, parameters->sampleFormat ) ); + + /* Some specific hardware (reported: Audio8 DJ) can fail with assertion during this step. */ + ENSURE_( alsa_snd_pcm_hw_params_set_format( pcm, hwParams, Pa2AlsaFormat( hostFormat ) ), paUnanticipatedHostError ); + + { + /* It happens that this call fails because the device is busy */ + int ret = 0; + if( (ret = alsa_snd_pcm_hw_params( pcm, hwParams )) < 0) + { + if( -EINVAL == ret ) + { + /* Don't know what to return here */ + result = paBadIODeviceCombination; + goto error; + } + else if( -EBUSY == ret ) + { + result = paDeviceUnavailable; + PA_DEBUG(( "%s: Device is busy\n", __FUNCTION__ )); + } + else + { + result = paUnanticipatedHostError; + } + + ENSURE_( ret, result ); + } + } + +end: + if( pcm ) + { + alsa_snd_pcm_close( pcm ); + } + return result; + +error: + goto end; +} + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + int inputChannelCount = 0, outputChannelCount = 0; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaError result = paFormatIsSupported; + + if( inputParameters ) + { + PA_ENSURE( ValidateParameters( inputParameters, hostApi, StreamDirection_In ) ); + + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + } + + if( outputParameters ) + { + PA_ENSURE( ValidateParameters( outputParameters, hostApi, StreamDirection_Out ) ); + + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + } + + if( inputChannelCount ) + { + if( (result = TestParameters( hostApi, inputParameters, sampleRate, StreamDirection_In )) + != paNoError ) + goto error; + } + if ( outputChannelCount ) + { + if( (result = TestParameters( hostApi, outputParameters, sampleRate, StreamDirection_Out )) + != paNoError ) + goto error; + } + + return paFormatIsSupported; + +error: + return result; +} + +static PaError PaAlsaStreamComponent_Initialize( PaAlsaStreamComponent *self, PaAlsaHostApiRepresentation *alsaApi, + const PaStreamParameters *params, StreamDirection streamDir, int callbackMode ) +{ + PaError result = paNoError; + PaSampleFormat userSampleFormat = params->sampleFormat, hostSampleFormat = paNoError; + assert( params->channelCount > 0 ); + + /* Make sure things have an initial value */ + memset( self, 0, sizeof (PaAlsaStreamComponent) ); + + if( NULL == params->hostApiSpecificStreamInfo ) + { + const PaAlsaDeviceInfo *devInfo = GetDeviceInfo( &alsaApi->baseHostApiRep, params->device ); + self->numHostChannels = PA_MAX( params->channelCount, StreamDirection_In == streamDir ? devInfo->minInputChannels + : devInfo->minOutputChannels ); + } + else + { + /* We're blissfully unaware of the minimum channelCount */ + self->numHostChannels = params->channelCount; + } + + self->device = params->device; + + PA_ENSURE( AlsaOpen( &alsaApi->baseHostApiRep, params, streamDir, &self->pcm ) ); + self->nfds = alsa_snd_pcm_poll_descriptors_count( self->pcm ); + + PA_ENSURE( hostSampleFormat = PaUtil_SelectClosestAvailableFormat( GetAvailableFormats( self->pcm ), userSampleFormat ) ); + + self->hostSampleFormat = hostSampleFormat; + self->nativeFormat = Pa2AlsaFormat( hostSampleFormat ); + self->hostInterleaved = self->userInterleaved = !(userSampleFormat & paNonInterleaved); + self->numUserChannels = params->channelCount; + self->streamDir = streamDir; + self->canMmap = 0; + self->nonMmapBuffer = NULL; + self->nonMmapBufferSize = 0; + + if( !callbackMode && !self->userInterleaved ) + { + /* Pre-allocate non-interleaved user provided buffers */ + PA_UNLESS( self->userBuffers = PaUtil_AllocateMemory( sizeof (void *) * self->numUserChannels ), + paInsufficientMemory ); + } + +error: + + /* Log all available formats. */ + if ( hostSampleFormat == paSampleFormatNotSupported ) + { + LogAllAvailableFormats( self->pcm ); + PA_DEBUG(( "%s: Please provide the log output to PortAudio developers, your hardware does not have any sample format implemented yet.\n", __FUNCTION__ )); + } + + return result; +} + +static void PaAlsaStreamComponent_Terminate( PaAlsaStreamComponent *self ) +{ + alsa_snd_pcm_close( self->pcm ); + if( self->userBuffers ) + PaUtil_FreeMemory( self->userBuffers ); +} + +/* +static int nearbyint_(float value) { + if( value - (int)value > .5 ) + return (int)ceil( value ); + return (int)floor( value ); +} +*/ + +/** Initiate configuration, preparing for determining a period size suitable for both capture and playback components. + * + */ +static PaError PaAlsaStreamComponent_InitialConfigure( PaAlsaStreamComponent *self, const PaStreamParameters *params, + int primeBuffers, snd_pcm_hw_params_t *hwParams, double *sampleRate ) +{ + /* Configuration consists of setting all of ALSA's parameters. + * These parameters come in two flavors: hardware parameters + * and software paramters. Hardware parameters will affect + * the way the device is initialized, software parameters + * affect the way ALSA interacts with me, the user-level client. + */ + + PaError result = paNoError; + snd_pcm_access_t accessMode, alternateAccessMode; + int dir = 0; + snd_pcm_t *pcm = self->pcm; + double sr = *sampleRate; + unsigned int minPeriods = 2; + + /* self->framesPerBuffer = framesPerHostBuffer; */ + + /* ... fill up the configuration space with all possibile + * combinations of parameters this device will accept */ + ENSURE_( alsa_snd_pcm_hw_params_any( pcm, hwParams ), paUnanticipatedHostError ); + + ENSURE_( alsa_snd_pcm_hw_params_set_periods_integer( pcm, hwParams ), paUnanticipatedHostError ); + /* I think there should be at least 2 periods (even though ALSA doesn't appear to enforce this) */ + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_set_periods_min( pcm, hwParams, &minPeriods, &dir ), paUnanticipatedHostError ); + + if( self->userInterleaved ) + { + accessMode = SND_PCM_ACCESS_MMAP_INTERLEAVED; + alternateAccessMode = SND_PCM_ACCESS_MMAP_NONINTERLEAVED; + + /* test if MMAP supported */ + self->canMmap = alsa_snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 || + alsa_snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0; + + PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_INTERLEAVED: %s\n", __FUNCTION__, (alsa_snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 ? "YES" : "NO"))); + PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_NONINTERLEAVED: %s\n", __FUNCTION__, (alsa_snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0 ? "YES" : "NO"))); + + if (!self->canMmap) + { + accessMode = SND_PCM_ACCESS_RW_INTERLEAVED; + alternateAccessMode = SND_PCM_ACCESS_RW_NONINTERLEAVED; + } + } + else + { + accessMode = SND_PCM_ACCESS_MMAP_NONINTERLEAVED; + alternateAccessMode = SND_PCM_ACCESS_MMAP_INTERLEAVED; + + /* test if MMAP supported */ + self->canMmap = alsa_snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 || + alsa_snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0; + + PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_NONINTERLEAVED: %s\n", __FUNCTION__, (alsa_snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 ? "YES" : "NO"))); + PA_DEBUG(("%s: device MMAP SND_PCM_ACCESS_MMAP_INTERLEAVED: %s\n", __FUNCTION__, (alsa_snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0 ? "YES" : "NO"))); + + if (!self->canMmap) + { + accessMode = SND_PCM_ACCESS_RW_NONINTERLEAVED; + alternateAccessMode = SND_PCM_ACCESS_RW_INTERLEAVED; + } + } + + PA_DEBUG(("%s: device can MMAP: %s\n", __FUNCTION__, (self->canMmap ? "YES" : "NO"))); + + /* If requested access mode fails, try alternate mode */ + if( alsa_snd_pcm_hw_params_set_access( pcm, hwParams, accessMode ) < 0 ) + { + int err = 0; + if( (err = alsa_snd_pcm_hw_params_set_access( pcm, hwParams, alternateAccessMode )) < 0) + { + result = paUnanticipatedHostError; + PaUtil_SetLastHostErrorInfo( paALSA, err, alsa_snd_strerror( err ) ); + goto error; + } + /* Flip mode */ + self->hostInterleaved = !self->userInterleaved; + } + + /* Some specific hardware (reported: Audio8 DJ) can fail with assertion during this step. */ + ENSURE_( alsa_snd_pcm_hw_params_set_format( pcm, hwParams, self->nativeFormat ), paUnanticipatedHostError ); + + ENSURE_( SetApproximateSampleRate( pcm, hwParams, sr ), paInvalidSampleRate ); + ENSURE_( GetExactSampleRate( hwParams, &sr ), paUnanticipatedHostError ); + /* reject if there's no sample rate within 1% of the one requested */ + if( (fabs( *sampleRate - sr ) / *sampleRate) > 0.01 ) + { + PA_DEBUG(("%s: Wanted %f, closest sample rate was %d\n", __FUNCTION__, sampleRate, sr )); + PA_ENSURE( paInvalidSampleRate ); + } + + ENSURE_( alsa_snd_pcm_hw_params_set_channels( pcm, hwParams, self->numHostChannels ), paInvalidChannelCount ); + + *sampleRate = sr; + +end: + return result; + +error: + /* No particular action */ + goto end; +} + +/** Finish the configuration of the component's ALSA device. + * + * As part of this method, the component's bufferSize attribute will be set. + * @param latency: The latency for this component. + */ +static PaError PaAlsaStreamComponent_FinishConfigure( PaAlsaStreamComponent *self, snd_pcm_hw_params_t* hwParams, + const PaStreamParameters *params, int primeBuffers, double sampleRate, PaTime* latency ) +{ + PaError result = paNoError; + snd_pcm_sw_params_t* swParams; + snd_pcm_uframes_t bufSz = 0; + *latency = -1.; + + alsa_snd_pcm_sw_params_alloca( &swParams ); + + bufSz = params->suggestedLatency * sampleRate; + ENSURE_( alsa_snd_pcm_hw_params_set_buffer_size_near( self->pcm, hwParams, &bufSz ), paUnanticipatedHostError ); + + /* Set the parameters! */ + { + int r = alsa_snd_pcm_hw_params( self->pcm, hwParams ); +#ifdef PA_ENABLE_DEBUG_OUTPUT + if( r < 0 ) + { + snd_output_t *output = NULL; + alsa_snd_output_stdio_attach( &output, stderr, 0 ); + alsa_snd_pcm_hw_params_dump( hwParams, output ); + } +#endif + ENSURE_(r, paUnanticipatedHostError ); + } + if (alsa_snd_pcm_hw_params_get_buffer_size != NULL) + { + ENSURE_( alsa_snd_pcm_hw_params_get_buffer_size( hwParams, &self->bufferSize ), paUnanticipatedHostError ); + } + else + { + self->bufferSize = bufSz; + } + + /* Latency in seconds */ + *latency = self->bufferSize / sampleRate; + + /* Now software parameters... */ + ENSURE_( alsa_snd_pcm_sw_params_current( self->pcm, swParams ), paUnanticipatedHostError ); + + ENSURE_( alsa_snd_pcm_sw_params_set_start_threshold( self->pcm, swParams, self->framesPerBuffer ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_sw_params_set_stop_threshold( self->pcm, swParams, self->bufferSize ), paUnanticipatedHostError ); + + /* Silence buffer in the case of underrun */ + if( !primeBuffers ) /* XXX: Make sense? */ + { + snd_pcm_uframes_t boundary; + ENSURE_( alsa_snd_pcm_sw_params_get_boundary( swParams, &boundary ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_sw_params_set_silence_threshold( self->pcm, swParams, 0 ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_sw_params_set_silence_size( self->pcm, swParams, boundary ), paUnanticipatedHostError ); + } + + ENSURE_( alsa_snd_pcm_sw_params_set_avail_min( self->pcm, swParams, self->framesPerBuffer ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_sw_params_set_xfer_align( self->pcm, swParams, 1 ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_sw_params_set_tstamp_mode( self->pcm, swParams, SND_PCM_TSTAMP_ENABLE ), paUnanticipatedHostError ); + + /* Set the parameters! */ + ENSURE_( alsa_snd_pcm_sw_params( self->pcm, swParams ), paUnanticipatedHostError ); + +error: + return result; +} + +static PaError PaAlsaStream_Initialize( PaAlsaStream *self, PaAlsaHostApiRepresentation *alsaApi, const PaStreamParameters *inParams, + const PaStreamParameters *outParams, double sampleRate, unsigned long framesPerUserBuffer, PaStreamCallback callback, + PaStreamFlags streamFlags, void *userData ) +{ + PaError result = paNoError; + assert( self ); + + memset( self, 0, sizeof (PaAlsaStream) ); + + if( NULL != callback ) + { + PaUtil_InitializeStreamRepresentation( &self->streamRepresentation, + &alsaApi->callbackStreamInterface, + callback, userData ); + self->callbackMode = 1; + } + else + { + PaUtil_InitializeStreamRepresentation( &self->streamRepresentation, + &alsaApi->blockingStreamInterface, + NULL, userData ); + } + + self->framesPerUserBuffer = framesPerUserBuffer; + self->neverDropInput = streamFlags & paNeverDropInput; + /* XXX: Ignore paPrimeOutputBuffersUsingStreamCallback untill buffer priming is fully supported in pa_process.c */ + /* + if( outParams & streamFlags & paPrimeOutputBuffersUsingStreamCallback ) + self->primeBuffers = 1; + */ + memset( &self->capture, 0, sizeof (PaAlsaStreamComponent) ); + memset( &self->playback, 0, sizeof (PaAlsaStreamComponent) ); + if( inParams ) + { + PA_ENSURE( PaAlsaStreamComponent_Initialize( &self->capture, alsaApi, inParams, StreamDirection_In, NULL != callback ) ); + } + if( outParams ) + { + PA_ENSURE( PaAlsaStreamComponent_Initialize( &self->playback, alsaApi, outParams, StreamDirection_Out, NULL != callback ) ); + } + + assert( self->capture.nfds || self->playback.nfds ); + + PA_UNLESS( self->pfds = (struct pollfd*)PaUtil_AllocateMemory( (self->capture.nfds + + self->playback.nfds) * sizeof (struct pollfd) ), paInsufficientMemory ); + + PaUtil_InitializeCpuLoadMeasurer( &self->cpuLoadMeasurer, sampleRate ); + ASSERT_CALL_( PaUnixMutex_Initialize( &self->stateMtx ), paNoError ); + +error: + return result; +} + +/** Free resources associated with stream, and eventually stream itself. + * + * Frees allocated memory, and terminates individual StreamComponents. + */ +static void PaAlsaStream_Terminate( PaAlsaStream *self ) +{ + assert( self ); + + if( self->capture.pcm ) + { + PaAlsaStreamComponent_Terminate( &self->capture ); + } + if( self->playback.pcm ) + { + PaAlsaStreamComponent_Terminate( &self->playback ); + } + + PaUtil_FreeMemory( self->pfds ); + ASSERT_CALL_( PaUnixMutex_Terminate( &self->stateMtx ), paNoError ); + + PaUtil_FreeMemory( self ); +} + +/** Calculate polling timeout + * + * @param frames Time to wait + * @return Polling timeout in milliseconds + */ +static int CalculatePollTimeout( const PaAlsaStream *stream, unsigned long frames ) +{ + assert( stream->streamRepresentation.streamInfo.sampleRate > 0.0 ); + /* Period in msecs, rounded up */ + return (int)ceil( 1000 * frames / stream->streamRepresentation.streamInfo.sampleRate ); +} + +/** Align value in backward direction. + * + * @param v: Value to align. + * @param align: Alignment. + */ +static unsigned long PaAlsa_AlignBackward(unsigned long v, unsigned long align) +{ + return ((v - (align ? v % align : 0))); +} + +/** Align value in forward direction. + * + * @param v: Value to align. + * @param align: Alignment. + */ +static unsigned long PaAlsa_AlignForward(unsigned long v, unsigned long align) +{ + unsigned long remainder = (align ? (v % align) : 0); + return (remainder != 0 ? v + (align - remainder) : v); +} + +/** Get size of host buffer maintained from the number of user frames, sample rate and suggested latency. Minimum double buffering + * is maintained to allow 100% CPU usage inside user callback. + * + * @param userFramesPerBuffer: User buffer size in number of frames. + * @param suggestedLatency: User provided desired latency. + * @param sampleRate: Sample rate. + */ +static unsigned long PaAlsa_GetFramesPerHostBuffer(unsigned long userFramesPerBuffer, PaTime suggestedLatency, double sampleRate) +{ + unsigned long frames = userFramesPerBuffer + PA_MAX( userFramesPerBuffer, (unsigned long)(suggestedLatency * sampleRate) ); + return frames; +} + +/** Determine size per host buffer. + * + * During this method call, the component's framesPerBuffer attribute gets computed, and the corresponding period size + * gets configured for the device. + * @param accurate: If the configured period size is non-integer, this will be set to 0. + */ +static PaError PaAlsaStreamComponent_DetermineFramesPerBuffer( PaAlsaStreamComponent* self, const PaStreamParameters* params, + unsigned long framesPerUserBuffer, double sampleRate, snd_pcm_hw_params_t* hwParams, int* accurate ) +{ + PaError result = paNoError; + unsigned long bufferSize, framesPerHostBuffer; + int dir = 0; + + /* Calculate host buffer size */ + bufferSize = PaAlsa_GetFramesPerHostBuffer(framesPerUserBuffer, params->suggestedLatency, sampleRate); + + /* Log */ + PA_DEBUG(( "%s: user-buffer (frames) = %lu\n", __FUNCTION__, framesPerUserBuffer )); + PA_DEBUG(( "%s: user-buffer (sec) = %f\n", __FUNCTION__, (double)(framesPerUserBuffer / sampleRate) )); + PA_DEBUG(( "%s: suggested latency (sec) = %f\n", __FUNCTION__, params->suggestedLatency )); + PA_DEBUG(( "%s: suggested host buffer (frames) = %lu\n", __FUNCTION__, bufferSize )); + PA_DEBUG(( "%s: suggested host buffer (sec) = %f\n", __FUNCTION__, (double)(bufferSize / sampleRate) )); + +#ifdef PA_ALSA_USE_OBSOLETE_HOST_BUFFER_CALC + + if( framesPerUserBuffer != paFramesPerBufferUnspecified ) + { + /* Preferably the host buffer size should be a multiple of the user buffer size */ + + if( bufferSize > framesPerUserBuffer ) + { + snd_pcm_uframes_t remainder = bufferSize % framesPerUserBuffer; + if( remainder > framesPerUserBuffer / 2. ) + bufferSize += framesPerUserBuffer - remainder; + else + bufferSize -= remainder; + + assert( bufferSize % framesPerUserBuffer == 0 ); + } + else if( framesPerUserBuffer % bufferSize != 0 ) + { + /* Find a good compromise between user specified latency and buffer size */ + if( bufferSize > framesPerUserBuffer * .75 ) + { + bufferSize = framesPerUserBuffer; + } + else + { + snd_pcm_uframes_t newSz = framesPerUserBuffer; + while( newSz / 2 >= bufferSize ) + { + if( framesPerUserBuffer % (newSz / 2) != 0 ) + { + /* No use dividing any further */ + break; + } + newSz /= 2; + } + bufferSize = newSz; + } + + assert( framesPerUserBuffer % bufferSize == 0 ); + } + } + +#endif + + { + unsigned numPeriods = numPeriods_, maxPeriods = 0, minPeriods = numPeriods_; + + /* It may be that the device only supports 2 periods for instance */ + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_get_periods_min( hwParams, &minPeriods, &dir ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_hw_params_get_periods_max( hwParams, &maxPeriods, &dir ), paUnanticipatedHostError ); + assert( maxPeriods > 1 ); + + /* Clamp to min/max */ + numPeriods = PA_MIN(maxPeriods, PA_MAX(minPeriods, numPeriods)); + + PA_DEBUG(( "%s: periods min = %lu, max = %lu, req = %lu \n", __FUNCTION__, minPeriods, maxPeriods, numPeriods )); + +#ifndef PA_ALSA_USE_OBSOLETE_HOST_BUFFER_CALC + + /* Calculate period size */ + framesPerHostBuffer = (bufferSize / numPeriods); + + /* Align & test size */ + if( framesPerUserBuffer != paFramesPerBufferUnspecified ) + { + /* Align to user buffer size */ + framesPerHostBuffer = PaAlsa_AlignForward(framesPerHostBuffer, framesPerUserBuffer); + + /* Test (borrowed from older implementation) */ + if( framesPerHostBuffer < framesPerUserBuffer ) + { + assert( framesPerUserBuffer % framesPerHostBuffer == 0 ); + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer, 0 ) < 0 ) + { + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer * 2, 0 ) == 0 ) + framesPerHostBuffer *= 2; + else + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer / 2, 0 ) == 0 ) + framesPerHostBuffer /= 2; + } + } + else + { + assert( framesPerHostBuffer % framesPerUserBuffer == 0 ); + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer, 0 ) < 0 ) + { + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer + framesPerUserBuffer, 0 ) == 0 ) + framesPerHostBuffer += framesPerUserBuffer; + else + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer - framesPerUserBuffer, 0 ) == 0 ) + framesPerHostBuffer -= framesPerUserBuffer; + } + } + } +#endif + +#ifdef PA_ALSA_USE_OBSOLETE_HOST_BUFFER_CALC + + if( framesPerUserBuffer != paFramesPerBufferUnspecified ) + { + /* Try to get a power-of-two of the user buffer size. */ + framesPerHostBuffer = framesPerUserBuffer; + if( framesPerHostBuffer < bufferSize ) + { + while( bufferSize / framesPerHostBuffer > numPeriods ) + { + framesPerHostBuffer *= 2; + } + /* One extra period is preferrable to one less (should be more robust) */ + if( bufferSize / framesPerHostBuffer < numPeriods ) + { + framesPerHostBuffer /= 2; + } + } + else + { + while( bufferSize / framesPerHostBuffer < numPeriods ) + { + if( framesPerUserBuffer % (framesPerHostBuffer / 2) != 0 ) + { + /* Can't be divided any further */ + break; + } + framesPerHostBuffer /= 2; + } + } + + if( framesPerHostBuffer < framesPerUserBuffer ) + { + assert( framesPerUserBuffer % framesPerHostBuffer == 0 ); + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer, 0 ) < 0 ) + { + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer * 2, 0 ) == 0 ) + framesPerHostBuffer *= 2; + else if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer / 2, 0 ) == 0 ) + framesPerHostBuffer /= 2; + } + } + else + { + assert( framesPerHostBuffer % framesPerUserBuffer == 0 ); + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer, 0 ) < 0 ) + { + if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer + framesPerUserBuffer, 0 ) == 0 ) + framesPerHostBuffer += framesPerUserBuffer; + else if( alsa_snd_pcm_hw_params_test_period_size( self->pcm, hwParams, framesPerHostBuffer - framesPerUserBuffer, 0 ) == 0 ) + framesPerHostBuffer -= framesPerUserBuffer; + } + } + } + else + { + framesPerHostBuffer = bufferSize / numPeriods; + } + + /* non-mmap mode needs a reasonably-sized buffer or it'll stutter */ + if( !self->canMmap && framesPerHostBuffer < 2048 ) + framesPerHostBuffer = 2048; +#endif + PA_DEBUG(( "%s: suggested host buffer period = %lu \n", __FUNCTION__, framesPerHostBuffer )); + } + + { + /* Get min/max period sizes and adjust our chosen */ + snd_pcm_uframes_t min = 0, max = 0, minmax_diff; + ENSURE_( alsa_snd_pcm_hw_params_get_period_size_min( hwParams, &min, NULL ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_hw_params_get_period_size_max( hwParams, &max, NULL ), paUnanticipatedHostError ); + minmax_diff = max - min; + + if( framesPerHostBuffer < min ) + { + PA_DEBUG(( "%s: The determined period size (%lu) is less than minimum (%lu)\n", __FUNCTION__, framesPerHostBuffer, min )); + framesPerHostBuffer = ((minmax_diff == 2) ? min + 1 : min); + } + else + if( framesPerHostBuffer > max ) + { + PA_DEBUG(( "%s: The determined period size (%lu) is greater than maximum (%lu)\n", __FUNCTION__, framesPerHostBuffer, max )); + framesPerHostBuffer = ((minmax_diff == 2) ? max - 1 : max); + } + + PA_DEBUG(( "%s: device period minimum = %lu\n", __FUNCTION__, min )); + PA_DEBUG(( "%s: device period maximum = %lu\n", __FUNCTION__, max )); + PA_DEBUG(( "%s: host buffer period = %lu\n", __FUNCTION__, framesPerHostBuffer )); + PA_DEBUG(( "%s: host buffer period latency = %f\n", __FUNCTION__, (double)(framesPerHostBuffer / sampleRate) )); + + /* Try setting period size */ + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_set_period_size_near( self->pcm, hwParams, &framesPerHostBuffer, &dir ), paUnanticipatedHostError ); + if( dir != 0 ) + { + PA_DEBUG(( "%s: The configured period size is non-integer.\n", __FUNCTION__, dir )); + *accurate = 0; + } + } + + /* Set result */ + self->framesPerBuffer = framesPerHostBuffer; + +error: + return result; +} + +/* We need to determine how many frames per host buffer (period) to use. Our + * goals are to provide the best possible performance, but also to + * honor the requested latency settings as closely as we can. Therefore this + * decision is based on: + * + * - the period sizes that playback and/or capture support. The + * host buffer size has to be one of these. + * - the number of periods that playback and/or capture support. + * + * We want to make period_size*(num_periods-1) to be as close as possible + * to latency*rate for both playback and capture. + * + * This method will determine suitable period sizes for capture and playback handles, and report the maximum number of + * frames per host buffer. The latter is relevant, in case we should be so unfortunate that the period size differs + * between capture and playback. If this should happen, the stream's hostBufferSizeMode attribute will be set to + * paUtilBoundedHostBufferSize, because the best we can do is limit the size of individual host buffers to the upper + * bound. The size of host buffers scheduled for processing should only matter if the user has specified a buffer size, + * but when he/she does we must strive for an optimal configuration. By default we'll opt for a fixed host buffer size, + * which should be fine if the period size is the same for capture and playback. In general, if there is a specified user + * buffer size, this method tries it best to determine a period size which is a multiple of the user buffer size. + * + * The framesPerBuffer attributes of the individual capture and playback components of the stream are set to corresponding + * values determined here. Since these should be reported as + * + * This is one of those blocks of code that will just take a lot of + * refinement to be any good. + * + * In the full-duplex case it is possible that the routine was unable + * to find a number of frames per buffer acceptable to both devices + * TODO: Implement an algorithm to find the value closest to acceptance + * by both devices, to minimize difference between period sizes? + * + * @param determinedFramesPerHostBuffer: The determined host buffer size. + */ +static PaError PaAlsaStream_DetermineFramesPerBuffer( PaAlsaStream* self, double sampleRate, const PaStreamParameters* inputParameters, + const PaStreamParameters* outputParameters, unsigned long framesPerUserBuffer, snd_pcm_hw_params_t* hwParamsCapture, + snd_pcm_hw_params_t* hwParamsPlayback, PaUtilHostBufferSizeMode* hostBufferSizeMode ) +{ + PaError result = paNoError; + unsigned long framesPerHostBuffer = 0; + int dir = 0; + int accurate = 1; + unsigned numPeriods = numPeriods_; + + if( self->capture.pcm && self->playback.pcm ) + { + if( framesPerUserBuffer == paFramesPerBufferUnspecified ) + { + /* Come up with a common desired latency */ + snd_pcm_uframes_t desiredBufSz, e, minPeriodSize, maxPeriodSize, optimalPeriodSize, periodSize, + minCapture, minPlayback, maxCapture, maxPlayback; + + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_get_period_size_min( hwParamsCapture, &minCapture, &dir ), paUnanticipatedHostError ); + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_get_period_size_min( hwParamsPlayback, &minPlayback, &dir ), paUnanticipatedHostError ); + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_get_period_size_max( hwParamsCapture, &maxCapture, &dir ), paUnanticipatedHostError ); + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_get_period_size_max( hwParamsPlayback, &maxPlayback, &dir ), paUnanticipatedHostError ); + minPeriodSize = PA_MAX( minPlayback, minCapture ); + maxPeriodSize = PA_MIN( maxPlayback, maxCapture ); + PA_UNLESS( minPeriodSize <= maxPeriodSize, paBadIODeviceCombination ); + + desiredBufSz = (snd_pcm_uframes_t)(PA_MIN( outputParameters->suggestedLatency, inputParameters->suggestedLatency ) + * sampleRate); + /* Clamp desiredBufSz */ + { + snd_pcm_uframes_t maxBufferSize; + snd_pcm_uframes_t maxBufferSizeCapture, maxBufferSizePlayback; + ENSURE_( alsa_snd_pcm_hw_params_get_buffer_size_max( hwParamsCapture, &maxBufferSizeCapture ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_hw_params_get_buffer_size_max( hwParamsPlayback, &maxBufferSizePlayback ), paUnanticipatedHostError ); + maxBufferSize = PA_MIN( maxBufferSizeCapture, maxBufferSizePlayback ); + + desiredBufSz = PA_MIN( desiredBufSz, maxBufferSize ); + } + + /* Find the closest power of 2 */ + e = ilogb( minPeriodSize ); + if( minPeriodSize & (minPeriodSize - 1) ) + e += 1; + periodSize = (snd_pcm_uframes_t)pow( 2, e ); + + while( periodSize <= maxPeriodSize ) + { + if( alsa_snd_pcm_hw_params_test_period_size( self->playback.pcm, hwParamsPlayback, periodSize, 0 ) >= 0 && + alsa_snd_pcm_hw_params_test_period_size( self->capture.pcm, hwParamsCapture, periodSize, 0 ) >= 0 ) + { + /* OK! */ + break; + } + + periodSize *= 2; + } + + optimalPeriodSize = PA_MAX( desiredBufSz / numPeriods, minPeriodSize ); + optimalPeriodSize = PA_MIN( optimalPeriodSize, maxPeriodSize ); + + /* Find the closest power of 2 */ + e = ilogb( optimalPeriodSize ); + if( optimalPeriodSize & (optimalPeriodSize - 1) ) + e += 1; + optimalPeriodSize = (snd_pcm_uframes_t)pow( 2, e ); + + while( optimalPeriodSize >= periodSize ) + { + if( alsa_snd_pcm_hw_params_test_period_size( self->capture.pcm, hwParamsCapture, optimalPeriodSize, 0 ) + >= 0 && alsa_snd_pcm_hw_params_test_period_size( self->playback.pcm, hwParamsPlayback, + optimalPeriodSize, 0 ) >= 0 ) + { + break; + } + optimalPeriodSize /= 2; + } + + if( optimalPeriodSize > periodSize ) + periodSize = optimalPeriodSize; + + if( periodSize <= maxPeriodSize ) + { + /* Looks good, the periodSize _should_ be acceptable by both devices */ + ENSURE_( alsa_snd_pcm_hw_params_set_period_size( self->capture.pcm, hwParamsCapture, periodSize, 0 ), + paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_hw_params_set_period_size( self->playback.pcm, hwParamsPlayback, periodSize, 0 ), + paUnanticipatedHostError ); + self->capture.framesPerBuffer = self->playback.framesPerBuffer = periodSize; + framesPerHostBuffer = periodSize; + } + else + { + /* Unable to find a common period size, oh well */ + optimalPeriodSize = PA_MAX( desiredBufSz / numPeriods, minPeriodSize ); + optimalPeriodSize = PA_MIN( optimalPeriodSize, maxPeriodSize ); + + self->capture.framesPerBuffer = optimalPeriodSize; + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_set_period_size_near( self->capture.pcm, hwParamsCapture, &self->capture.framesPerBuffer, &dir ), + paUnanticipatedHostError ); + self->playback.framesPerBuffer = optimalPeriodSize; + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_set_period_size_near( self->playback.pcm, hwParamsPlayback, &self->playback.framesPerBuffer, &dir ), + paUnanticipatedHostError ); + framesPerHostBuffer = PA_MAX( self->capture.framesPerBuffer, self->playback.framesPerBuffer ); + *hostBufferSizeMode = paUtilBoundedHostBufferSize; + } + } + else + { + /* We choose the simple route and determine a suitable number of frames per buffer for one component of + * the stream, then we hope that this will work for the other component too (it should!). + */ + + unsigned maxPeriods = 0; + PaAlsaStreamComponent* first = &self->capture, * second = &self->playback; + const PaStreamParameters* firstStreamParams = inputParameters; + snd_pcm_hw_params_t* firstHwParams = hwParamsCapture, * secondHwParams = hwParamsPlayback; + + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_get_periods_max( hwParamsPlayback, &maxPeriods, &dir ), paUnanticipatedHostError ); + if( maxPeriods < numPeriods ) + { + /* The playback component is trickier to get right, try that first */ + first = &self->playback; + second = &self->capture; + firstStreamParams = outputParameters; + firstHwParams = hwParamsPlayback; + secondHwParams = hwParamsCapture; + } + + PA_ENSURE( PaAlsaStreamComponent_DetermineFramesPerBuffer( first, firstStreamParams, framesPerUserBuffer, + sampleRate, firstHwParams, &accurate ) ); + + second->framesPerBuffer = first->framesPerBuffer; + dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_set_period_size_near( second->pcm, secondHwParams, &second->framesPerBuffer, &dir ), + paUnanticipatedHostError ); + if( self->capture.framesPerBuffer == self->playback.framesPerBuffer ) + { + framesPerHostBuffer = self->capture.framesPerBuffer; + } + else + { + framesPerHostBuffer = PA_MAX( self->capture.framesPerBuffer, self->playback.framesPerBuffer ); + *hostBufferSizeMode = paUtilBoundedHostBufferSize; + } + } + } + else /* half-duplex is a slightly simpler case */ + { + if( self->capture.pcm ) + { + PA_ENSURE( PaAlsaStreamComponent_DetermineFramesPerBuffer( &self->capture, inputParameters, framesPerUserBuffer, + sampleRate, hwParamsCapture, &accurate) ); + framesPerHostBuffer = self->capture.framesPerBuffer; + } + else + { + assert( self->playback.pcm ); + PA_ENSURE( PaAlsaStreamComponent_DetermineFramesPerBuffer( &self->playback, outputParameters, framesPerUserBuffer, + sampleRate, hwParamsPlayback, &accurate ) ); + framesPerHostBuffer = self->playback.framesPerBuffer; + } + } + + PA_UNLESS( framesPerHostBuffer != 0, paInternalError ); + self->maxFramesPerHostBuffer = framesPerHostBuffer; + + if( !self->playback.canMmap || !accurate ) + { + /* Don't know the exact size per host buffer */ + *hostBufferSizeMode = paUtilBoundedHostBufferSize; + /* Raise upper bound */ + if( !accurate ) + ++self->maxFramesPerHostBuffer; + } + +error: + return result; +} + +/** Set up ALSA stream parameters. + * + */ +static PaError PaAlsaStream_Configure( PaAlsaStream *self, const PaStreamParameters *inParams, const PaStreamParameters* + outParams, double sampleRate, unsigned long framesPerUserBuffer, double* inputLatency, double* outputLatency, + PaUtilHostBufferSizeMode* hostBufferSizeMode ) +{ + PaError result = paNoError; + double realSr = sampleRate; + snd_pcm_hw_params_t* hwParamsCapture, * hwParamsPlayback; + + alsa_snd_pcm_hw_params_alloca( &hwParamsCapture ); + alsa_snd_pcm_hw_params_alloca( &hwParamsPlayback ); + + if( self->capture.pcm ) + PA_ENSURE( PaAlsaStreamComponent_InitialConfigure( &self->capture, inParams, self->primeBuffers, hwParamsCapture, + &realSr ) ); + if( self->playback.pcm ) + PA_ENSURE( PaAlsaStreamComponent_InitialConfigure( &self->playback, outParams, self->primeBuffers, hwParamsPlayback, + &realSr ) ); + + PA_ENSURE( PaAlsaStream_DetermineFramesPerBuffer( self, realSr, inParams, outParams, framesPerUserBuffer, + hwParamsCapture, hwParamsPlayback, hostBufferSizeMode ) ); + + if( self->capture.pcm ) + { + assert( self->capture.framesPerBuffer != 0 ); + PA_ENSURE( PaAlsaStreamComponent_FinishConfigure( &self->capture, hwParamsCapture, inParams, self->primeBuffers, realSr, + inputLatency ) ); + PA_DEBUG(( "%s: Capture period size: %lu, latency: %f\n", __FUNCTION__, self->capture.framesPerBuffer, *inputLatency )); + } + if( self->playback.pcm ) + { + assert( self->playback.framesPerBuffer != 0 ); + PA_ENSURE( PaAlsaStreamComponent_FinishConfigure( &self->playback, hwParamsPlayback, outParams, self->primeBuffers, realSr, + outputLatency ) ); + PA_DEBUG(( "%s: Playback period size: %lu, latency: %f\n", __FUNCTION__, self->playback.framesPerBuffer, *outputLatency )); + } + + /* Should be exact now */ + self->streamRepresentation.streamInfo.sampleRate = realSr; + + /* this will cause the two streams to automatically start/stop/prepare in sync. + * We only need to execute these operations on one of the pair. + * A: We don't want to do this on a blocking stream. + */ + if( self->callbackMode && self->capture.pcm && self->playback.pcm ) + { + int err = alsa_snd_pcm_link( self->capture.pcm, self->playback.pcm ); + if( err == 0 ) + self->pcmsSynced = 1; + else + PA_DEBUG(( "%s: Unable to sync pcms: %s\n", __FUNCTION__, alsa_snd_strerror( err ) )); + } + + { + unsigned long minFramesPerHostBuffer = PA_MIN( self->capture.pcm ? self->capture.framesPerBuffer : ULONG_MAX, + self->playback.pcm ? self->playback.framesPerBuffer : ULONG_MAX ); + self->pollTimeout = CalculatePollTimeout( self, minFramesPerHostBuffer ); /* Period in msecs, rounded up */ + + /* Time before watchdog unthrottles realtime thread == 1/4 of period time in msecs */ + /* self->threading.throttledSleepTime = (unsigned long) (minFramesPerHostBuffer / sampleRate / 4 * 1000); */ + } + + if( self->callbackMode ) + { + /* If the user expects a certain number of frames per callback we will either have to rely on block adaption + * (framesPerHostBuffer is not an integer multiple of framesPerBuffer) or we can simply align the number + * of host buffer frames with what the user specified */ + if( self->framesPerUserBuffer != paFramesPerBufferUnspecified ) + { + /* self->alignFrames = 1; */ + + /* Unless the ratio between number of host and user buffer frames is an integer we will have to rely + * on block adaption */ + /* + if( framesPerHostBuffer % framesPerBuffer != 0 || (self->capture.pcm && self->playback.pcm && + self->capture.framesPerBuffer != self->playback.framesPerBuffer) ) + self->useBlockAdaption = 1; + else + self->alignFrames = 1; + */ + } + } + +error: + return result; +} + +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback* callback, + void *userData ) +{ + PaError result = paNoError; + PaAlsaHostApiRepresentation *alsaHostApi = (PaAlsaHostApiRepresentation*)hostApi; + PaAlsaStream *stream = NULL; + PaSampleFormat hostInputSampleFormat = 0, hostOutputSampleFormat = 0; + PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0; + int numInputChannels = 0, numOutputChannels = 0; + PaTime inputLatency, outputLatency; + /* Operate with fixed host buffer size by default, since other modes will invariably lead to block adaption */ + /* XXX: Use Bounded by default? Output tends to get stuttery with Fixed ... */ + PaUtilHostBufferSizeMode hostBufferSizeMode = paUtilFixedHostBufferSize; + + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; + + if( inputParameters ) + { + PA_ENSURE( ValidateParameters( inputParameters, hostApi, StreamDirection_In ) ); + + numInputChannels = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + } + if( outputParameters ) + { + PA_ENSURE( ValidateParameters( outputParameters, hostApi, StreamDirection_Out ) ); + + numOutputChannels = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + } + + /* XXX: Why do we support this anyway? */ + if( framesPerBuffer == paFramesPerBufferUnspecified && getenv( "PA_ALSA_PERIODSIZE" ) != NULL ) + { + PA_DEBUG(( "%s: Getting framesPerBuffer from environment\n", __FUNCTION__ )); + framesPerBuffer = atoi( getenv("PA_ALSA_PERIODSIZE") ); + } + + PA_UNLESS( stream = (PaAlsaStream*)PaUtil_AllocateMemory( sizeof(PaAlsaStream) ), paInsufficientMemory ); + PA_ENSURE( PaAlsaStream_Initialize( stream, alsaHostApi, inputParameters, outputParameters, sampleRate, + framesPerBuffer, callback, streamFlags, userData ) ); + + PA_ENSURE( PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer, + &inputLatency, &outputLatency, &hostBufferSizeMode ) ); + hostInputSampleFormat = stream->capture.hostSampleFormat | (!stream->capture.hostInterleaved ? paNonInterleaved : 0); + hostOutputSampleFormat = stream->playback.hostSampleFormat | (!stream->playback.hostInterleaved ? paNonInterleaved : 0); + + PA_ENSURE( PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + numInputChannels, inputSampleFormat, hostInputSampleFormat, + numOutputChannels, outputSampleFormat, hostOutputSampleFormat, + sampleRate, streamFlags, framesPerBuffer, stream->maxFramesPerHostBuffer, + hostBufferSizeMode, callback, userData ) ); + + /* Ok, buffer processor is initialized, now we can deduce it's latency */ + if( numInputChannels > 0 ) + stream->streamRepresentation.streamInfo.inputLatency = inputLatency + (PaTime)( + PaUtil_GetBufferProcessorInputLatencyFrames( &stream->bufferProcessor ) / sampleRate); + if( numOutputChannels > 0 ) + stream->streamRepresentation.streamInfo.outputLatency = outputLatency + (PaTime)( + PaUtil_GetBufferProcessorOutputLatencyFrames( &stream->bufferProcessor ) / sampleRate); + + PA_DEBUG(( "%s: Stream: framesPerBuffer = %lu, maxFramesPerHostBuffer = %lu, latency = i(%f)/o(%f), \n", __FUNCTION__, framesPerBuffer, stream->maxFramesPerHostBuffer, stream->streamRepresentation.streamInfo.inputLatency, stream->streamRepresentation.streamInfo.outputLatency)); + + *s = (PaStream*)stream; + + return result; + +error: + if( stream ) + { + PA_DEBUG(( "%s: Stream in error, terminating\n", __FUNCTION__ )); + PaAlsaStream_Terminate( stream ); + } + + return result; +} + +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaAlsaStream *stream = (PaAlsaStream*)s; + + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + + PaAlsaStream_Terminate( stream ); + + return result; +} + +static void SilenceBuffer( PaAlsaStream *stream ) +{ + const snd_pcm_channel_area_t *areas; + snd_pcm_uframes_t frames = (snd_pcm_uframes_t)alsa_snd_pcm_avail_update( stream->playback.pcm ), offset; + + alsa_snd_pcm_mmap_begin( stream->playback.pcm, &areas, &offset, &frames ); + alsa_snd_pcm_areas_silence( areas, offset, stream->playback.numHostChannels, frames, stream->playback.nativeFormat ); + alsa_snd_pcm_mmap_commit( stream->playback.pcm, offset, frames ); +} + +/** Start/prepare pcm(s) for streaming. + * + * Depending on wether the stream is in callback or blocking mode, we will respectively start or simply + * prepare the playback pcm. If the buffer has _not_ been primed, we will in callback mode prepare and + * silence the buffer before starting playback. In blocking mode we simply prepare, as the playback will + * be started automatically as the user writes to output. + * + * The capture pcm, however, will simply be prepared and started. + */ +static PaError AlsaStart( PaAlsaStream *stream, int priming ) +{ + PaError result = paNoError; + + if( stream->playback.pcm ) + { + if( stream->callbackMode ) + { + if( !priming ) + { + /* Buffer isn't primed, so prepare and silence */ + ENSURE_( alsa_snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError ); + if( stream->playback.canMmap ) + SilenceBuffer( stream ); + } + if( stream->playback.canMmap ) + ENSURE_( alsa_snd_pcm_start( stream->playback.pcm ), paUnanticipatedHostError ); + } + else + ENSURE_( alsa_snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError ); + } + if( stream->capture.pcm && !stream->pcmsSynced ) + { + ENSURE_( alsa_snd_pcm_prepare( stream->capture.pcm ), paUnanticipatedHostError ); + /* For a blocking stream we want to start capture as well, since nothing will happen otherwise */ + ENSURE_( alsa_snd_pcm_start( stream->capture.pcm ), paUnanticipatedHostError ); + } + +end: + return result; +error: + goto end; +} + +/** Utility function for determining if pcms are in running state. + * + */ +#if 0 +static int IsRunning( PaAlsaStream *stream ) +{ + int result = 0; + + PA_ENSURE( PaUnixMutex_Lock( &stream->stateMtx ) ); + if( stream->capture.pcm ) + { + snd_pcm_state_t capture_state = alsa_snd_pcm_state( stream->capture.pcm ); + + if( capture_state == SND_PCM_STATE_RUNNING || capture_state == SND_PCM_STATE_XRUN + || capture_state == SND_PCM_STATE_DRAINING ) + { + result = 1; + goto end; + } + } + + if( stream->playback.pcm ) + { + snd_pcm_state_t playback_state = alsa_snd_pcm_state( stream->playback.pcm ); + + if( playback_state == SND_PCM_STATE_RUNNING || playback_state == SND_PCM_STATE_XRUN + || playback_state == SND_PCM_STATE_DRAINING ) + { + result = 1; + goto end; + } + } + +end: + ASSERT_CALL_( PaUnixMutex_Unlock( &stream->stateMtx ), paNoError ); + return result; +error: + goto error; +} +#endif + +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaAlsaStream* stream = (PaAlsaStream*)s; + int streamStarted = 0; /* So we can know wether we need to take the stream down */ + + /* Ready the processor */ + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + + /* Set now, so we can test for activity further down */ + stream->isActive = 1; + + if( stream->callbackMode ) + { + PA_ENSURE( PaUnixThread_New( &stream->thread, &CallbackThreadFunc, stream, 1., stream->rtSched ) ); + } + else + { + PA_ENSURE( AlsaStart( stream, 0 ) ); + streamStarted = 1; + } + +end: + return result; +error: + if( streamStarted ) + { + AbortStream( stream ); + } + stream->isActive = 0; + + goto end; +} + +/** Stop PCM handle, either softly or abruptly. + */ +static PaError AlsaStop( PaAlsaStream *stream, int abort ) +{ + PaError result = paNoError; + /* XXX: alsa_snd_pcm_drain tends to lock up, avoid it until we find out more */ + abort = 1; + /* + if( stream->capture.pcm && !strcmp( Pa_GetDeviceInfo( stream->capture.device )->name, + "dmix" ) ) + { + abort = 1; + } + else if( stream->playback.pcm && !strcmp( Pa_GetDeviceInfo( stream->playback.device )->name, + "dmix" ) ) + { + abort = 1; + } + */ + + if( abort ) + { + if( stream->playback.pcm ) + { + ENSURE_( alsa_snd_pcm_drop( stream->playback.pcm ), paUnanticipatedHostError ); + } + if( stream->capture.pcm && !stream->pcmsSynced ) + { + ENSURE_( alsa_snd_pcm_drop( stream->capture.pcm ), paUnanticipatedHostError ); + } + + PA_DEBUG(( "%s: Dropped frames\n", __FUNCTION__ )); + } + else + { + if( stream->playback.pcm ) + { + ENSURE_( alsa_snd_pcm_nonblock( stream->playback.pcm, 0 ), paUnanticipatedHostError ); + if( alsa_snd_pcm_drain( stream->playback.pcm ) < 0 ) + { + PA_DEBUG(( "%s: Draining playback handle failed!\n", __FUNCTION__ )); + } + } + if( stream->capture.pcm && !stream->pcmsSynced ) + { + /* We don't need to retrieve any remaining frames */ + if( alsa_snd_pcm_drain( stream->capture.pcm ) < 0 ) + { + PA_DEBUG(( "%s: Draining capture handle failed!\n", __FUNCTION__ )); + } + } + } + +end: + return result; +error: + goto end; +} + +/** Stop or abort stream. + * + * If a stream is in callback mode we will have to inspect wether the background thread has + * finished, or we will have to take it out. In either case we join the thread before + * returning. In blocking mode, we simply tell ALSA to stop abruptly (abort) or finish + * buffers (drain) + * + * Stream will be considered inactive (!PaAlsaStream::isActive) after a call to this function + */ +static PaError RealStop( PaAlsaStream *stream, int abort ) +{ + PaError result = paNoError; + + /* First deal with the callback thread, cancelling and/or joining + * it if necessary + */ + if( stream->callbackMode ) + { + PaError threadRes; + stream->callbackAbort = abort; + + if( !abort ) + { + PA_DEBUG(( "Stopping callback\n" )); + } + PA_ENSURE( PaUnixThread_Terminate( &stream->thread, !abort, &threadRes ) ); + if( threadRes != paNoError ) + { + PA_DEBUG(( "Callback thread returned: %d\n", threadRes )); + } +#if 0 + if( watchdogRes != paNoError ) + PA_DEBUG(( "Watchdog thread returned: %d\n", watchdogRes )); +#endif + + stream->callback_finished = 0; + } + else + { + PA_ENSURE( AlsaStop( stream, abort ) ); + } + + stream->isActive = 0; + +end: + return result; + +error: + goto end; +} + +static PaError StopStream( PaStream *s ) +{ + return RealStop( (PaAlsaStream *) s, 0 ); +} + +static PaError AbortStream( PaStream *s ) +{ + return RealStop( (PaAlsaStream * ) s, 1 ); +} + +/** The stream is considered stopped before StartStream, or AFTER a call to Abort/StopStream (callback + * returning !paContinue is not considered) + * + */ +static PaError IsStreamStopped( PaStream *s ) +{ + PaAlsaStream *stream = (PaAlsaStream *)s; + + /* callback_finished indicates we need to join callback thread (ie. in Abort/StopStream) */ + return !IsStreamActive( s ) && !stream->callback_finished; +} + +static PaError IsStreamActive( PaStream *s ) +{ + PaAlsaStream *stream = (PaAlsaStream*)s; + return stream->isActive; +} + +static PaTime GetStreamTime( PaStream *s ) +{ + PaAlsaStream *stream = (PaAlsaStream*)s; + + snd_timestamp_t timestamp; + snd_pcm_status_t* status; + alsa_snd_pcm_status_alloca( &status ); + + /* TODO: what if we have both? does it really matter? */ + + /* TODO: if running in callback mode, this will mean + * libasound routines are being called from multiple threads. + * need to verify that libasound is thread-safe. */ + + if( stream->capture.pcm ) + { + alsa_snd_pcm_status( stream->capture.pcm, status ); + } + else if( stream->playback.pcm ) + { + alsa_snd_pcm_status( stream->playback.pcm, status ); + } + + alsa_snd_pcm_status_get_tstamp( status, ×tamp ); + return timestamp.tv_sec + (PaTime)timestamp.tv_usec / 1e6; +} + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaAlsaStream *stream = (PaAlsaStream*)s; + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + +static int SetApproximateSampleRate( snd_pcm_t *pcm, snd_pcm_hw_params_t *hwParams, double sampleRate ) +{ + PaError result = paNoError; + unsigned long approx = (unsigned long) sampleRate; + int dir = 0; + double fraction = sampleRate - approx; + + assert( pcm && hwParams ); + + if( fraction > 0.0 ) + { + if( fraction > 0.5 ) + { + ++approx; + dir = -1; + } + else + dir = 1; + } + + if( alsa_snd_pcm_hw_params_set_rate( pcm, hwParams, approx, dir ) < 0) + result = paInvalidSampleRate; + +end: + + return result; + +error: + + /* Log */ + { + unsigned int _min = 0, _max = 0; int _dir = 0; + ENSURE_( alsa_snd_pcm_hw_params_get_rate_min( hwParams, &_min, &_dir ), paUnanticipatedHostError ); + ENSURE_( alsa_snd_pcm_hw_params_get_rate_max( hwParams, &_max, &_dir ), paUnanticipatedHostError ); + PA_DEBUG(( "%s: SR min = %d, max = %d, req = %lu\n", __FUNCTION__, _min, _max, approx )); + } + + goto end; +} + +/* Return exact sample rate in param sampleRate */ +static int GetExactSampleRate( snd_pcm_hw_params_t *hwParams, double *sampleRate ) +{ + unsigned int num, den; + int err; + + assert( hwParams ); + + err = alsa_snd_pcm_hw_params_get_rate_numden( hwParams, &num, &den ); + *sampleRate = (double) num / den; + + return err; +} + +/* Utility functions for blocking/callback interfaces */ + +/* Atomic restart of stream (we don't want the intermediate state visible) */ +static PaError AlsaRestart( PaAlsaStream *stream ) +{ + PaError result = paNoError; + + PA_ENSURE( PaUnixMutex_Lock( &stream->stateMtx ) ); + PA_ENSURE( AlsaStop( stream, 0 ) ); + PA_ENSURE( AlsaStart( stream, 0 ) ); + + PA_DEBUG(( "%s: Restarted audio\n", __FUNCTION__ )); + +error: + PA_ENSURE( PaUnixMutex_Unlock( &stream->stateMtx ) ); + + return result; +} + +/** Recover from xrun state. + * + */ +static PaError PaAlsaStream_HandleXrun( PaAlsaStream *self ) +{ + PaError result = paNoError; + snd_pcm_status_t *st; + PaTime now = PaUtil_GetTime(); + snd_timestamp_t t; + int restartAlsa = 0; /* do not restart Alsa by default */ + + alsa_snd_pcm_status_alloca( &st ); + + if( self->playback.pcm ) + { + alsa_snd_pcm_status( self->playback.pcm, st ); + if( alsa_snd_pcm_status_get_state( st ) == SND_PCM_STATE_XRUN ) + { + alsa_snd_pcm_status_get_trigger_tstamp( st, &t ); + self->underrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000); + + if (!self->playback.canMmap) + { + if (alsa_snd_pcm_recover( self->playback.pcm, -EPIPE, 0 ) < 0) + { + PA_DEBUG(( "%s: [playback] non-MMAP-PCM failed recovering from XRUN, will restart Alsa\n", __FUNCTION__ )); + ++ restartAlsa; /* did not manage to recover */ + } + } + else + ++ restartAlsa; /* always restart MMAPed device */ + } + } + if( self->capture.pcm ) + { + alsa_snd_pcm_status( self->capture.pcm, st ); + if( alsa_snd_pcm_status_get_state( st ) == SND_PCM_STATE_XRUN ) + { + alsa_snd_pcm_status_get_trigger_tstamp( st, &t ); + self->overrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000); + + if (!self->capture.canMmap) + { + if (alsa_snd_pcm_recover( self->capture.pcm, -EPIPE, 0 ) < 0) + { + PA_DEBUG(( "%s: [capture] non-MMAP-PCM failed recovering from XRUN, will restart Alsa\n", __FUNCTION__ )); + ++ restartAlsa; /* did not manage to recover */ + } + } + else + ++ restartAlsa; /* always restart MMAPed device */ + } + } + + if( restartAlsa ) + { + PA_DEBUG(( "%s: restarting Alsa to recover from XRUN\n", __FUNCTION__ )); + PA_ENSURE( AlsaRestart( self ) ); + } + +end: + return result; +error: + goto end; +} + +/** Decide if we should continue polling for specified direction, eventually adjust the poll timeout. + * + */ +static PaError ContinuePoll( const PaAlsaStream *stream, StreamDirection streamDir, int *pollTimeout, int *continuePoll ) +{ + PaError result = paNoError; + snd_pcm_sframes_t delay, margin; + int err; + const PaAlsaStreamComponent *component = NULL, *otherComponent = NULL; + + *continuePoll = 1; + + if( StreamDirection_In == streamDir ) + { + component = &stream->capture; + otherComponent = &stream->playback; + } + else + { + component = &stream->playback; + otherComponent = &stream->capture; + } + + /* ALSA docs say that negative delay should indicate xrun, but in my experience alsa_snd_pcm_delay returns -EPIPE */ + if( (err = alsa_snd_pcm_delay( otherComponent->pcm, &delay )) < 0 ) + { + if( err == -EPIPE ) + { + /* Xrun */ + *continuePoll = 0; + goto error; + } + + ENSURE_( err, paUnanticipatedHostError ); + } + + if( StreamDirection_Out == streamDir ) + { + /* Number of eligible frames before capture overrun */ + delay = otherComponent->bufferSize - delay; + } + margin = delay - otherComponent->framesPerBuffer / 2; + + if( margin < 0 ) + { + PA_DEBUG(( "%s: Stopping poll for %s\n", __FUNCTION__, StreamDirection_In == streamDir ? "capture" : "playback" )); + *continuePoll = 0; + } + else if( margin < otherComponent->framesPerBuffer ) + { + *pollTimeout = CalculatePollTimeout( stream, margin ); + PA_DEBUG(( "%s: Trying to poll again for %s frames, pollTimeout: %d\n", + __FUNCTION__, StreamDirection_In == streamDir ? "capture" : "playback", *pollTimeout )); + } + +error: + return result; +} + +/* Callback interface */ + +static void OnExit( void *data ) +{ + PaAlsaStream *stream = (PaAlsaStream *) data; + + assert( data ); + + PaUtil_ResetCpuLoadMeasurer( &stream->cpuLoadMeasurer ); + + stream->callback_finished = 1; /* Let the outside world know stream was stopped in callback */ + PA_DEBUG(( "%s: Stopping ALSA handles\n", __FUNCTION__ )); + AlsaStop( stream, stream->callbackAbort ); + + PA_DEBUG(( "%s: Stoppage\n", __FUNCTION__ )); + + /* Eventually notify user all buffers have played */ + if( stream->streamRepresentation.streamFinishedCallback ) + { + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } + stream->isActive = 0; +} + +static void CalculateTimeInfo( PaAlsaStream *stream, PaStreamCallbackTimeInfo *timeInfo ) +{ + snd_pcm_status_t *capture_status, *playback_status; + snd_timestamp_t capture_timestamp, playback_timestamp; + PaTime capture_time = 0., playback_time = 0.; + + alsa_snd_pcm_status_alloca( &capture_status ); + alsa_snd_pcm_status_alloca( &playback_status ); + + if( stream->capture.pcm ) + { + snd_pcm_sframes_t capture_delay; + + alsa_snd_pcm_status( stream->capture.pcm, capture_status ); + alsa_snd_pcm_status_get_tstamp( capture_status, &capture_timestamp ); + + capture_time = capture_timestamp.tv_sec + + ((PaTime)capture_timestamp.tv_usec / 1000000.0); + timeInfo->currentTime = capture_time; + + capture_delay = alsa_snd_pcm_status_get_delay( capture_status ); + timeInfo->inputBufferAdcTime = timeInfo->currentTime - + (PaTime)capture_delay / stream->streamRepresentation.streamInfo.sampleRate; + } + if( stream->playback.pcm ) + { + snd_pcm_sframes_t playback_delay; + + alsa_snd_pcm_status( stream->playback.pcm, playback_status ); + alsa_snd_pcm_status_get_tstamp( playback_status, &playback_timestamp ); + + playback_time = playback_timestamp.tv_sec + + ((PaTime)playback_timestamp.tv_usec / 1000000.0); + + if( stream->capture.pcm ) /* Full duplex */ + { + /* Hmm, we have both a playback and a capture timestamp. + * Hopefully they are the same... */ + if( fabs( capture_time - playback_time ) > 0.01 ) + PA_DEBUG(("Capture time and playback time differ by %f\n", fabs(capture_time-playback_time))); + } + else + timeInfo->currentTime = playback_time; + + playback_delay = alsa_snd_pcm_status_get_delay( playback_status ); + timeInfo->outputBufferDacTime = timeInfo->currentTime + + (PaTime)playback_delay / stream->streamRepresentation.streamInfo.sampleRate; + } +} + +/** Called after buffer processing is finished. + * + * A number of mmapped frames is committed, it is possible that an xrun has occurred in the meantime. + * + * @param numFrames The number of frames that has been processed + * @param xrun Return whether an xrun has occurred + */ +static PaError PaAlsaStreamComponent_EndProcessing( PaAlsaStreamComponent *self, unsigned long numFrames, int *xrun ) +{ + PaError result = paNoError; + int res = 0; + + /* @concern FullDuplex It is possible that only one direction is marked ready after polling, and processed + * afterwards + */ + if( !self->ready ) + goto end; + + if( !self->canMmap && StreamDirection_Out == self->streamDir ) + { + /* Play sound */ + if( self->hostInterleaved ) + res = alsa_snd_pcm_writei( self->pcm, self->nonMmapBuffer, numFrames ); + else + { + void *bufs[self->numHostChannels]; + int bufsize = alsa_snd_pcm_format_size( self->nativeFormat, self->framesPerBuffer + 1 ); + unsigned char *buffer = self->nonMmapBuffer; + int i; + for( i = 0; i < self->numHostChannels; ++i ) + { + bufs[i] = buffer; + buffer += bufsize; + } + res = alsa_snd_pcm_writen( self->pcm, bufs, numFrames ); + } + } + + if( self->canMmap ) + res = alsa_snd_pcm_mmap_commit( self->pcm, self->offset, numFrames ); + else + { + /* using realloc for optimisation + free( self->nonMmapBuffer ); + self->nonMmapBuffer = NULL; + */ + } + + if( res == -EPIPE || res == -ESTRPIPE ) + { + *xrun = 1; + } + else + { + ENSURE_( res, paUnanticipatedHostError ); + } + +end: +error: + return result; +} + +/* Extract buffer from channel area */ +static unsigned char *ExtractAddress( const snd_pcm_channel_area_t *area, snd_pcm_uframes_t offset ) +{ + return (unsigned char *) area->addr + (area->first + offset * area->step) / 8; +} + +/** Do necessary adaption between user and host channels. + * + @concern ChannelAdaption Adapting between user and host channels can involve silencing unused channels and + duplicating mono information if host outputs come in pairs. + */ +static PaError PaAlsaStreamComponent_DoChannelAdaption( PaAlsaStreamComponent *self, PaUtilBufferProcessor *bp, int numFrames ) +{ + PaError result = paNoError; + unsigned char *p; + int i; + int unusedChans = self->numHostChannels - self->numUserChannels; + unsigned char *src, *dst; + int convertMono = (self->numHostChannels % 2) == 0 && (self->numUserChannels % 2) != 0; + + assert( StreamDirection_Out == self->streamDir ); + + if( self->hostInterleaved ) + { + int swidth = alsa_snd_pcm_format_size( self->nativeFormat, 1 ); + unsigned char *buffer = self->canMmap ? ExtractAddress( self->channelAreas, self->offset ) : self->nonMmapBuffer; + + /* Start after the last user channel */ + p = buffer + self->numUserChannels * swidth; + + if( convertMono ) + { + /* Convert the last user channel into stereo pair */ + src = buffer + (self->numUserChannels - 1) * swidth; + for( i = 0; i < numFrames; ++i ) + { + dst = src + swidth; + memcpy( dst, src, swidth ); + src += self->numHostChannels * swidth; + } + + /* Don't touch the channel we just wrote to */ + p += swidth; + --unusedChans; + } + + if( unusedChans > 0 ) + { + /* Silence unused output channels */ + for( i = 0; i < numFrames; ++i ) + { + memset( p, 0, swidth * unusedChans ); + p += self->numHostChannels * swidth; + } + } + } + else + { + /* We extract the last user channel */ + if( convertMono ) + { + ENSURE_( alsa_snd_pcm_area_copy( self->channelAreas + self->numUserChannels, self->offset, self->channelAreas + + (self->numUserChannels - 1), self->offset, numFrames, self->nativeFormat ), paUnanticipatedHostError ); + --unusedChans; + } + if( unusedChans > 0 ) + { + alsa_snd_pcm_areas_silence( self->channelAreas + (self->numHostChannels - unusedChans), self->offset, unusedChans, numFrames, + self->nativeFormat ); + } + } + +error: + return result; +} + +static PaError PaAlsaStream_EndProcessing( PaAlsaStream *self, unsigned long numFrames, int *xrunOccurred ) +{ + PaError result = paNoError; + int xrun = 0; + + if( self->capture.pcm ) + { + PA_ENSURE( PaAlsaStreamComponent_EndProcessing( &self->capture, numFrames, &xrun ) ); + } + if( self->playback.pcm ) + { + if( self->playback.numHostChannels > self->playback.numUserChannels ) + { + PA_ENSURE( PaAlsaStreamComponent_DoChannelAdaption( &self->playback, &self->bufferProcessor, numFrames ) ); + } + PA_ENSURE( PaAlsaStreamComponent_EndProcessing( &self->playback, numFrames, &xrun ) ); + } + +error: + *xrunOccurred = xrun; + return result; +} + +/** Update the number of available frames. + * + */ +static PaError PaAlsaStreamComponent_GetAvailableFrames( PaAlsaStreamComponent *self, unsigned long *numFrames, int *xrunOccurred ) +{ + PaError result = paNoError; + snd_pcm_sframes_t framesAvail = alsa_snd_pcm_avail_update( self->pcm ); + *xrunOccurred = 0; + + if( -EPIPE == framesAvail ) + { + *xrunOccurred = 1; + framesAvail = 0; + } + else + { + ENSURE_( framesAvail, paUnanticipatedHostError ); + } + + *numFrames = framesAvail; + +error: + return result; +} + +/** Fill in pollfd objects. + */ +static PaError PaAlsaStreamComponent_BeginPolling( PaAlsaStreamComponent* self, struct pollfd* pfds ) +{ + PaError result = paNoError; + int ret = alsa_snd_pcm_poll_descriptors( self->pcm, pfds, self->nfds ); + (void)ret; /* Prevent unused variable warning if asserts are turned off */ + assert( ret == self->nfds ); + + self->ready = 0; + + return result; +} + +/** Examine results from poll(). + * + * @param pfds pollfds to inspect + * @param shouldPoll Should we continue to poll + * @param xrun Has an xrun occurred + */ +static PaError PaAlsaStreamComponent_EndPolling( PaAlsaStreamComponent* self, struct pollfd* pfds, int* shouldPoll, int* xrun ) +{ + PaError result = paNoError; + unsigned short revents; + + ENSURE_( alsa_snd_pcm_poll_descriptors_revents( self->pcm, pfds, self->nfds, &revents ), paUnanticipatedHostError ); + if( revents != 0 ) + { + if( revents & POLLERR ) + { + *xrun = 1; + } + else + if( revents & POLLHUP ) + { + *xrun = 1; + PA_DEBUG(( "%s: revents has POLLHUP, processing as XRUN\n", __FUNCTION__ )); + } + else + self->ready = 1; + + *shouldPoll = 0; + } + +error: + return result; +} + +/** Return the number of available frames for this stream. + * + * @concern FullDuplex The minimum available for the two directions is calculated, it might be desirable to ignore + * one direction however (not marked ready from poll), so this is controlled by queryCapture and queryPlayback. + * + * @param queryCapture Check available for capture + * @param queryPlayback Check available for playback + * @param available The returned number of frames + * @param xrunOccurred Return whether an xrun has occurred + */ +static PaError PaAlsaStream_GetAvailableFrames( PaAlsaStream *self, int queryCapture, int queryPlayback, unsigned long + *available, int *xrunOccurred ) +{ + PaError result = paNoError; + unsigned long captureFrames, playbackFrames; + *xrunOccurred = 0; + + assert( queryCapture || queryPlayback ); + + if( queryCapture ) + { + assert( self->capture.pcm ); + PA_ENSURE( PaAlsaStreamComponent_GetAvailableFrames( &self->capture, &captureFrames, xrunOccurred ) ); + if( *xrunOccurred ) + { + goto end; + } + } + if( queryPlayback ) + { + assert( self->playback.pcm ); + PA_ENSURE( PaAlsaStreamComponent_GetAvailableFrames( &self->playback, &playbackFrames, xrunOccurred ) ); + if( *xrunOccurred ) + { + goto end; + } + } + + if( queryCapture && queryPlayback ) + { + *available = PA_MIN( captureFrames, playbackFrames ); + /*PA_DEBUG(("capture: %lu, playback: %lu, combined: %lu\n", captureFrames, playbackFrames, *available));*/ + } + else if( queryCapture ) + { + *available = captureFrames; + } + else + { + *available = playbackFrames; + } + +end: +error: + return result; +} + +/** Wait for and report available buffer space from ALSA. + * + * Unless ALSA reports a minimum of frames available for I/O, we poll the ALSA filedescriptors for more. + * Both of these operations can uncover xrun conditions. + * + * @concern Xruns Both polling and querying available frames can report an xrun condition. + * + * @param framesAvail Return the number of available frames + * @param xrunOccurred Return whether an xrun has occurred + */ +static PaError PaAlsaStream_WaitForFrames( PaAlsaStream *self, unsigned long *framesAvail, int *xrunOccurred ) +{ + PaError result = paNoError; + int pollPlayback = self->playback.pcm != NULL, pollCapture = self->capture.pcm != NULL; + int pollTimeout = self->pollTimeout; + int xrun = 0, timeouts = 0; + int pollResults; + + assert( self ); + assert( framesAvail ); + + if( !self->callbackMode ) + { + /* In blocking mode we will only wait if necessary */ + PA_ENSURE( PaAlsaStream_GetAvailableFrames( self, self->capture.pcm != NULL, self->playback.pcm != NULL, + framesAvail, &xrun ) ); + if( xrun ) + { + goto end; + } + + if( *framesAvail > 0 ) + { + /* Mark pcms ready from poll */ + if( self->capture.pcm ) + self->capture.ready = 1; + if( self->playback.pcm ) + self->playback.ready = 1; + + goto end; + } + } + + while( pollPlayback || pollCapture ) + { + int totalFds = 0; + struct pollfd *capturePfds = NULL, *playbackPfds = NULL; + +#ifdef PTHREAD_CANCELED + pthread_testcancel(); +#endif + if( pollCapture ) + { + capturePfds = self->pfds; + PA_ENSURE( PaAlsaStreamComponent_BeginPolling( &self->capture, capturePfds ) ); + totalFds += self->capture.nfds; + } + if( pollPlayback ) + { + playbackPfds = self->pfds + (self->capture.pcm ? self->capture.nfds : 0); + PA_ENSURE( PaAlsaStreamComponent_BeginPolling( &self->playback, playbackPfds ) ); + totalFds += self->playback.nfds; + } + + pollResults = poll( self->pfds, totalFds, pollTimeout ); + + if( pollResults < 0 ) + { + /* XXX: Depend on preprocessor condition? */ + if( errno == EINTR ) + { + /* gdb */ + Pa_Sleep( 1 ); /* avoid hot loop */ + continue; + } + + /* TODO: Add macro for checking system calls */ + PA_ENSURE( paInternalError ); + } + else + if (pollResults == 0) + { + + /* Suspended, paused or failed device can provide 0 poll results. To avoid deadloop in such situation + * we simply run counter 'timeouts' which detects 0 poll result and accumulates. As soon as 2048 timouts (around 2 seconds) + * are achieved we simply fail function with paTimedOut to notify waiting methods that device is not capable + * of providing audio data anymore and needs some corresponding recovery action. + * Note that 'timeouts' is reset to 0 if poll() managed to return non 0 results. + */ + + /*PA_DEBUG(( "%s: poll == 0 results, timed out, %d times left\n", __FUNCTION__, 2048 - timeouts ));*/ + + ++ timeouts; + if (timeouts > 1) /* sometimes device times out, but normally once, so we do not sleep any time */ + { + Pa_Sleep( 1 ); /* avoid hot loop */ + } + /* not else ! */ + if (timeouts >= 2048) /* audio device not working, shall return error to notify waiters */ + { + *framesAvail = 0; /* no frames available for processing */ + xrun = 1; /* try recovering device */ + + PA_DEBUG(( "%s: poll timed out\n", __FUNCTION__, timeouts )); + goto end;/*PA_ENSURE( paTimedOut );*/ + } + } + else + if (pollResults > 0) + { + /* reset timouts counter */ + timeouts = 0; + + /* check the return status of our pfds */ + if( pollCapture ) + { + PA_ENSURE( PaAlsaStreamComponent_EndPolling( &self->capture, capturePfds, &pollCapture, &xrun ) ); + } + if( pollPlayback ) + { + PA_ENSURE( PaAlsaStreamComponent_EndPolling( &self->playback, playbackPfds, &pollPlayback, &xrun ) ); + } + if( xrun ) + { + break; + } + } + + /* @concern FullDuplex If only one of two pcms is ready we may want to compromise between the two. + * If there is less than half a period's worth of samples left of frames in the other pcm's buffer we will + * stop polling. + */ + if( self->capture.pcm && self->playback.pcm ) + { + if( pollCapture && !pollPlayback ) + { + PA_ENSURE( ContinuePoll( self, StreamDirection_In, &pollTimeout, &pollCapture ) ); + } + else if( pollPlayback && !pollCapture ) + { + PA_ENSURE( ContinuePoll( self, StreamDirection_Out, &pollTimeout, &pollPlayback ) ); + } + } + } + + if( !xrun ) + { + /* Get the number of available frames for the pcms that are marked ready. + * @concern FullDuplex If only one direction is marked ready (from poll), the number of frames available for + * the other direction is returned. Output is normally preferred over capture however, so capture frames may be + * discarded to avoid overrun unless paNeverDropInput is specified. + */ + int captureReady = self->capture.pcm ? self->capture.ready : 0, + playbackReady = self->playback.pcm ? self->playback.ready : 0; + PA_ENSURE( PaAlsaStream_GetAvailableFrames( self, captureReady, playbackReady, framesAvail, &xrun ) ); + + if( self->capture.pcm && self->playback.pcm ) + { + if( !self->playback.ready && !self->neverDropInput ) + { + /* Drop input, a period's worth */ + assert( self->capture.ready ); + PaAlsaStreamComponent_EndProcessing( &self->capture, PA_MIN( self->capture.framesPerBuffer, + *framesAvail ), &xrun ); + *framesAvail = 0; + self->capture.ready = 0; + } + } + else if( self->capture.pcm ) + assert( self->capture.ready ); + else + assert( self->playback.ready ); + } + +end: +error: + if( xrun ) + { + /* Recover from the xrun state */ + PA_ENSURE( PaAlsaStream_HandleXrun( self ) ); + *framesAvail = 0; + } + else + { + if( 0 != *framesAvail ) + { + /* If we're reporting frames eligible for processing, one of the handles better be ready */ + PA_UNLESS( self->capture.ready || self->playback.ready, paInternalError ); + } + } + *xrunOccurred = xrun; + + return result; +} + +/** Register per-channel ALSA buffer information with buffer processor. + * + * Mmapped buffer space is acquired from ALSA, and registered with the buffer processor. Differences between the + * number of host and user channels is taken into account. + * + * @param numFrames On entrance the number of requested frames, on exit the number of contiguously accessible frames. + */ +static PaError PaAlsaStreamComponent_RegisterChannels( PaAlsaStreamComponent* self, PaUtilBufferProcessor* bp, + unsigned long* numFrames, int* xrun ) +{ + PaError result = paNoError; + const snd_pcm_channel_area_t *areas, *area; + void (*setChannel)(PaUtilBufferProcessor *, unsigned int, void *, unsigned int) = + StreamDirection_In == self->streamDir ? PaUtil_SetInputChannel : PaUtil_SetOutputChannel; + unsigned char *buffer, *p; + int i; + unsigned long framesAvail; + + /* This _must_ be called before mmap_begin */ + PA_ENSURE( PaAlsaStreamComponent_GetAvailableFrames( self, &framesAvail, xrun ) ); + if( *xrun ) + { + *numFrames = 0; + goto end; + } + + if( self->canMmap ) + { + ENSURE_( alsa_snd_pcm_mmap_begin( self->pcm, &areas, &self->offset, numFrames ), paUnanticipatedHostError ); + /* @concern ChannelAdaption Buffer address is recorded so we can do some channel adaption later */ + self->channelAreas = (snd_pcm_channel_area_t *)areas; + } + else + { + unsigned int bufferSize = self->numHostChannels * alsa_snd_pcm_format_size( self->nativeFormat, *numFrames ); + if (bufferSize > self->nonMmapBufferSize) + { + self->nonMmapBuffer = realloc(self->nonMmapBuffer, (self->nonMmapBufferSize = bufferSize)); + if (!self->nonMmapBuffer) + { + result = paInsufficientMemory; + goto error; + } + } + } + + if( self->hostInterleaved ) + { + int swidth = alsa_snd_pcm_format_size( self->nativeFormat, 1 ); + + p = buffer = self->canMmap ? ExtractAddress( areas, self->offset ) : self->nonMmapBuffer; + for( i = 0; i < self->numUserChannels; ++i ) + { + /* We're setting the channels up to userChannels, but the stride will be hostChannels samples */ + setChannel( bp, i, p, self->numHostChannels ); + p += swidth; + } + } + else + { + if( self->canMmap ) + { + for( i = 0; i < self->numUserChannels; ++i ) + { + area = areas + i; + buffer = ExtractAddress( area, self->offset ); + setChannel( bp, i, buffer, 1 ); + } + } + else + { + unsigned int buf_per_ch_size = self->nonMmapBufferSize / self->numHostChannels; + buffer = self->nonMmapBuffer; + for( i = 0; i < self->numUserChannels; ++i ) + { + setChannel( bp, i, buffer, 1 ); + buffer += buf_per_ch_size; + } + } + } + + if( !self->canMmap && StreamDirection_In == self->streamDir ) + { + /* Read sound */ + int res; + if( self->hostInterleaved ) + res = alsa_snd_pcm_readi( self->pcm, self->nonMmapBuffer, *numFrames ); + else + { + void *bufs[self->numHostChannels]; + unsigned int buf_per_ch_size = self->nonMmapBufferSize / self->numHostChannels; + unsigned char *buffer = self->nonMmapBuffer; + int i; + for( i = 0; i < self->numHostChannels; ++i ) + { + bufs[i] = buffer; + buffer += buf_per_ch_size; + } + res = alsa_snd_pcm_readn( self->pcm, bufs, *numFrames ); + } + if( res == -EPIPE || res == -ESTRPIPE ) + { + *xrun = 1; + *numFrames = 0; + } + } + +end: +error: + return result; +} + +/** Initiate buffer processing. + * + * ALSA buffers are registered with the PA buffer processor and the buffer size (in frames) set. + * + * @concern FullDuplex If both directions are being processed, the minimum amount of frames for the two directions is + * calculated. + * + * @param numFrames On entrance the number of available frames, on exit the number of received frames + * @param xrunOccurred Return whether an xrun has occurred + */ +static PaError PaAlsaStream_SetUpBuffers( PaAlsaStream* self, unsigned long* numFrames, int* xrunOccurred ) +{ + PaError result = paNoError; + unsigned long captureFrames = ULONG_MAX, playbackFrames = ULONG_MAX, commonFrames = 0; + int xrun = 0; + + if( *xrunOccurred ) + { + *numFrames = 0; + return result; + } + /* If we got here at least one of the pcm's should be marked ready */ + PA_UNLESS( self->capture.ready || self->playback.ready, paInternalError ); + + /* Extract per-channel ALSA buffer pointers and register them with the buffer processor. + * It is possible that a direction is not marked ready however, because it is out of sync with the other. + */ + if( self->capture.pcm && self->capture.ready ) + { + captureFrames = *numFrames; + PA_ENSURE( PaAlsaStreamComponent_RegisterChannels( &self->capture, &self->bufferProcessor, &captureFrames, + &xrun ) ); + } + if( self->playback.pcm && self->playback.ready ) + { + playbackFrames = *numFrames; + PA_ENSURE( PaAlsaStreamComponent_RegisterChannels( &self->playback, &self->bufferProcessor, &playbackFrames, + &xrun ) ); + } + if( xrun ) + { + /* Nothing more to do */ + assert( 0 == commonFrames ); + goto end; + } + + commonFrames = PA_MIN( captureFrames, playbackFrames ); + /* assert( commonFrames <= *numFrames ); */ + if( commonFrames > *numFrames ) + { + /* Hmmm ... how come there are more frames available than we requested!? Blah. */ + PA_DEBUG(( "%s: Common available frames are reported to be more than number requested: %lu, %lu, callbackMode: %d\n", __FUNCTION__, + commonFrames, *numFrames, self->callbackMode )); + if( self->capture.pcm ) + { + PA_DEBUG(( "%s: captureFrames: %lu, capture.ready: %d\n", __FUNCTION__, captureFrames, self->capture.ready )); + } + if( self->playback.pcm ) + { + PA_DEBUG(( "%s: playbackFrames: %lu, playback.ready: %d\n", __FUNCTION__, playbackFrames, self->playback.ready )); + } + + commonFrames = 0; + goto end; + } + + /* Inform PortAudio of the number of frames we got. + * @concern FullDuplex We might be experiencing underflow in either end; if its an input underflow, we go on + * with output. If its output underflow however, depending on the paNeverDropInput flag, we may want to simply + * discard the excess input or call the callback with paOutputOverflow flagged. + */ + if( self->capture.pcm ) + { + if( self->capture.ready ) + { + PaUtil_SetInputFrameCount( &self->bufferProcessor, commonFrames ); + } + else + { + /* We have input underflow */ + PaUtil_SetNoInput( &self->bufferProcessor ); + } + } + if( self->playback.pcm ) + { + if( self->playback.ready ) + { + PaUtil_SetOutputFrameCount( &self->bufferProcessor, commonFrames ); + } + else + { + /* We have output underflow, but keeping input data (paNeverDropInput) */ + assert( self->neverDropInput ); + assert( self->capture.pcm != NULL ); + PA_DEBUG(( "%s: Setting output buffers to NULL\n", __FUNCTION__ )); + PaUtil_SetNoOutput( &self->bufferProcessor ); + } + } + +end: + *numFrames = commonFrames; +error: + if( xrun ) + { + PA_ENSURE( PaAlsaStream_HandleXrun( self ) ); + *numFrames = 0; + } + *xrunOccurred = xrun; + + return result; +} + +/** Callback thread's function. + * + * Roughly, the workflow can be described in the following way: The number of available frames that can be processed + * directly is obtained from ALSA, we then request as much directly accessible memory as possible within this amount + * from ALSA. The buffer memory is registered with the PA buffer processor and processing is carried out with + * PaUtil_EndBufferProcessing. Finally, the number of processed frames is reported to ALSA. The processing can + * happen in several iterations untill we have consumed the known number of available frames (or an xrun is detected). + */ +static void *CallbackThreadFunc( void *userData ) +{ + PaError result = paNoError; + PaAlsaStream *stream = (PaAlsaStream*) userData; + PaStreamCallbackTimeInfo timeInfo = {0, 0, 0}; + snd_pcm_sframes_t startThreshold = 0; + int callbackResult = paContinue; + PaStreamCallbackFlags cbFlags = 0; /* We might want to keep state across iterations */ + int streamStarted = 0; + + assert( stream ); + + /* Execute OnExit when exiting */ + pthread_cleanup_push( &OnExit, stream ); + + /* Not implemented */ + assert( !stream->primeBuffers ); + + /* @concern StreamStart If the output is being primed the output pcm needs to be prepared, otherwise the + * stream is started immediately. The latter involves signaling the waiting main thread. + */ + if( stream->primeBuffers ) + { + snd_pcm_sframes_t avail; + + if( stream->playback.pcm ) + ENSURE_( alsa_snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError ); + if( stream->capture.pcm && !stream->pcmsSynced ) + ENSURE_( alsa_snd_pcm_prepare( stream->capture.pcm ), paUnanticipatedHostError ); + + /* We can't be certain that the whole ring buffer is available for priming, but there should be + * at least one period */ + avail = alsa_snd_pcm_avail_update( stream->playback.pcm ); + startThreshold = avail - (avail % stream->playback.framesPerBuffer); + assert( startThreshold >= stream->playback.framesPerBuffer ); + } + else + { + PA_ENSURE( PaUnixThread_PrepareNotify( &stream->thread ) ); + /* Buffer will be zeroed */ + PA_ENSURE( AlsaStart( stream, 0 ) ); + PA_ENSURE( PaUnixThread_NotifyParent( &stream->thread ) ); + + streamStarted = 1; + } + + while( 1 ) + { + unsigned long framesAvail, framesGot; + int xrun = 0; + +#ifdef PTHREAD_CANCELED + pthread_testcancel(); +#endif + + /* @concern StreamStop if the main thread has requested a stop and the stream has not been effectively + * stopped we signal this condition by modifying callbackResult (we'll want to flush buffered output). + */ + if( PaUnixThread_StopRequested( &stream->thread ) && paContinue == callbackResult ) + { + PA_DEBUG(( "Setting callbackResult to paComplete\n" )); + callbackResult = paComplete; + } + + if( paContinue != callbackResult ) + { + stream->callbackAbort = (paAbort == callbackResult); + if( stream->callbackAbort || + /** @concern BlockAdaption: Go on if adaption buffers are empty */ + PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) + { + goto end; + } + + PA_DEBUG(( "%s: Flushing buffer processor\n", __FUNCTION__ )); + /* There is still buffered output that needs to be processed */ + } + + /* Wait for data to become available, this comes down to polling the ALSA file descriptors untill we have + * a number of available frames. + */ + PA_ENSURE( PaAlsaStream_WaitForFrames( stream, &framesAvail, &xrun ) ); + if( xrun ) + { + assert( 0 == framesAvail ); + continue; + + /* XXX: Report xruns to the user? A situation is conceivable where the callback is never invoked due + * to constant xruns, it might be desirable to notify the user of this. + */ + } + + /* Consume buffer space. Once we have a number of frames available for consumption we must retrieve the + * mmapped buffers from ALSA, this is contiguously accessible memory however, so we may receive smaller + * portions at a time than is available as a whole. Therefore we should be prepared to process several + * chunks successively. The buffers are passed to the PA buffer processor. + */ + while( framesAvail > 0 ) + { + xrun = 0; + +#ifdef PTHREAD_CANCELED + pthread_testcancel(); +#endif + + /** @concern Xruns Under/overflows are to be reported to the callback */ + if( stream->underrun > 0.0 ) + { + cbFlags |= paOutputUnderflow; + stream->underrun = 0.0; + } + if( stream->overrun > 0.0 ) + { + cbFlags |= paInputOverflow; + stream->overrun = 0.0; + } + if( stream->capture.pcm && stream->playback.pcm ) + { + /** @concern FullDuplex It's possible that only one direction is being processed to avoid an + * under- or overflow, this should be reported correspondingly */ + if( !stream->capture.ready ) + { + cbFlags |= paInputUnderflow; + PA_DEBUG(( "%s: Input underflow\n", __FUNCTION__ )); + } + else if( !stream->playback.ready ) + { + cbFlags |= paOutputOverflow; + PA_DEBUG(( "%s: Output overflow\n", __FUNCTION__ )); + } + } + +#if 0 + CallbackUpdate( &stream->threading ); +#endif + CalculateTimeInfo( stream, &timeInfo ); + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, cbFlags ); + cbFlags = 0; + + /* CPU load measurement should include processing activivity external to the stream callback */ + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + framesGot = framesAvail; + if( paUtilFixedHostBufferSize == stream->bufferProcessor.hostBufferSizeMode ) + { + /* We've committed to a fixed host buffer size, stick to that */ + framesGot = framesGot >= stream->maxFramesPerHostBuffer ? stream->maxFramesPerHostBuffer : 0; + } + else + { + /* We've committed to an upper bound on the size of host buffers */ + assert( paUtilBoundedHostBufferSize == stream->bufferProcessor.hostBufferSizeMode ); + framesGot = PA_MIN( framesGot, stream->maxFramesPerHostBuffer ); + } + PA_ENSURE( PaAlsaStream_SetUpBuffers( stream, &framesGot, &xrun ) ); + /* Check the host buffer size against the buffer processor configuration */ + framesAvail -= framesGot; + + if( framesGot > 0 ) + { + assert( !xrun ); + PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult ); + PA_ENSURE( PaAlsaStream_EndProcessing( stream, framesGot, &xrun ) ); + } + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesGot ); + + if( 0 == framesGot ) + { + /* Go back to polling for more frames */ + break; + + } + + if( paContinue != callbackResult ) + break; + } + } + +end: + ; /* Hack to fix "label at end of compound statement" error caused by pthread_cleanup_pop(1) macro. */ + /* Match pthread_cleanup_push */ + pthread_cleanup_pop( 1 ); + + PA_DEBUG(( "%s: Thread %d exiting\n ", __FUNCTION__, pthread_self() )); + PaUnixThreading_EXIT( result ); + +error: + PA_DEBUG(( "%s: Thread %d is canceled due to error %d\n ", __FUNCTION__, pthread_self(), result )); + goto end; +} + +/* Blocking interface */ + +static PaError ReadStream( PaStream* s, void *buffer, unsigned long frames ) +{ + PaError result = paNoError; + PaAlsaStream *stream = (PaAlsaStream*)s; + unsigned long framesGot, framesAvail; + void *userBuffer; + snd_pcm_t *save = stream->playback.pcm; + + assert( stream ); + + PA_UNLESS( stream->capture.pcm, paCanNotReadFromAnOutputOnlyStream ); + + /* Disregard playback */ + stream->playback.pcm = NULL; + + if( stream->overrun > 0. ) + { + result = paInputOverflowed; + stream->overrun = 0.0; + } + + if( stream->capture.userInterleaved ) + { + userBuffer = buffer; + } + else + { + /* Copy channels into local array */ + userBuffer = stream->capture.userBuffers; + memcpy( userBuffer, buffer, sizeof (void *) * stream->capture.numUserChannels ); + } + + /* Start stream if in prepared state */ + if( alsa_snd_pcm_state( stream->capture.pcm ) == SND_PCM_STATE_PREPARED ) + { + ENSURE_( alsa_snd_pcm_start( stream->capture.pcm ), paUnanticipatedHostError ); + } + + while( frames > 0 ) + { + int xrun = 0; + PA_ENSURE( PaAlsaStream_WaitForFrames( stream, &framesAvail, &xrun ) ); + framesGot = PA_MIN( framesAvail, frames ); + + PA_ENSURE( PaAlsaStream_SetUpBuffers( stream, &framesGot, &xrun ) ); + if( framesGot > 0 ) + { + framesGot = PaUtil_CopyInput( &stream->bufferProcessor, &userBuffer, framesGot ); + PA_ENSURE( PaAlsaStream_EndProcessing( stream, framesGot, &xrun ) ); + frames -= framesGot; + } + } + +end: + stream->playback.pcm = save; + return result; +error: + goto end; +} + +static PaError WriteStream( PaStream* s, const void *buffer, unsigned long frames ) +{ + PaError result = paNoError; + signed long err; + PaAlsaStream *stream = (PaAlsaStream*)s; + snd_pcm_uframes_t framesGot, framesAvail; + const void *userBuffer; + snd_pcm_t *save = stream->capture.pcm; + + assert( stream ); + + PA_UNLESS( stream->playback.pcm, paCanNotWriteToAnInputOnlyStream ); + + /* Disregard capture */ + stream->capture.pcm = NULL; + + if( stream->underrun > 0. ) + { + result = paOutputUnderflowed; + stream->underrun = 0.0; + } + + if( stream->playback.userInterleaved ) + userBuffer = buffer; + else /* Copy channels into local array */ + { + userBuffer = stream->playback.userBuffers; + memcpy( (void *)userBuffer, buffer, sizeof (void *) * stream->playback.numUserChannels ); + } + + while( frames > 0 ) + { + int xrun = 0; + snd_pcm_uframes_t hwAvail; + + PA_ENSURE( PaAlsaStream_WaitForFrames( stream, &framesAvail, &xrun ) ); + framesGot = PA_MIN( framesAvail, frames ); + + PA_ENSURE( PaAlsaStream_SetUpBuffers( stream, &framesGot, &xrun ) ); + if( framesGot > 0 ) + { + framesGot = PaUtil_CopyOutput( &stream->bufferProcessor, &userBuffer, framesGot ); + PA_ENSURE( PaAlsaStream_EndProcessing( stream, framesGot, &xrun ) ); + frames -= framesGot; + } + + /* Start stream after one period of samples worth */ + + /* Frames residing in buffer */ + PA_ENSURE( err = GetStreamWriteAvailable( stream ) ); + framesAvail = err; + hwAvail = stream->playback.bufferSize - framesAvail; + + if( alsa_snd_pcm_state( stream->playback.pcm ) == SND_PCM_STATE_PREPARED && + hwAvail >= stream->playback.framesPerBuffer ) + { + ENSURE_( alsa_snd_pcm_start( stream->playback.pcm ), paUnanticipatedHostError ); + } + } + +end: + stream->capture.pcm = save; + return result; +error: + goto end; +} + +/* Return frames available for reading. In the event of an overflow, the capture pcm will be restarted */ +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaError result = paNoError; + PaAlsaStream *stream = (PaAlsaStream*)s; + unsigned long avail; + int xrun; + + PA_ENSURE( PaAlsaStreamComponent_GetAvailableFrames( &stream->capture, &avail, &xrun ) ); + if( xrun ) + { + PA_ENSURE( PaAlsaStream_HandleXrun( stream ) ); + PA_ENSURE( PaAlsaStreamComponent_GetAvailableFrames( &stream->capture, &avail, &xrun ) ); + if( xrun ) + PA_ENSURE( paInputOverflowed ); + } + + return (signed long)avail; + +error: + return result; +} + +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaError result = paNoError; + PaAlsaStream *stream = (PaAlsaStream*)s; + unsigned long avail; + int xrun; + + PA_ENSURE( PaAlsaStreamComponent_GetAvailableFrames( &stream->playback, &avail, &xrun ) ); + if( xrun ) + { + snd_pcm_sframes_t savail; + + PA_ENSURE( PaAlsaStream_HandleXrun( stream ) ); + savail = alsa_snd_pcm_avail_update( stream->playback.pcm ); + + /* savail should not contain -EPIPE now, since PaAlsaStream_HandleXrun will only prepare the pcm */ + ENSURE_( savail, paUnanticipatedHostError ); + + avail = (unsigned long) savail; + } + + return (signed long)avail; + +error: + return result; +} + +/* Extensions */ + +void PaAlsa_InitializeStreamInfo( PaAlsaStreamInfo *info ) +{ + info->size = sizeof (PaAlsaStreamInfo); + info->hostApiType = paALSA; + info->version = 1; + info->deviceString = NULL; +} + +void PaAlsa_EnableRealtimeScheduling( PaStream *s, int enable ) +{ + PaAlsaStream *stream = (PaAlsaStream *) s; + stream->rtSched = enable; +} + +#if 0 +void PaAlsa_EnableWatchdog( PaStream *s, int enable ) +{ + PaAlsaStream *stream = (PaAlsaStream *) s; + stream->thread.useWatchdog = enable; +} +#endif + +static PaError GetAlsaStreamPointer( PaStream* s, PaAlsaStream** stream ) +{ + PaError result = paNoError; + PaUtilHostApiRepresentation* hostApi; + PaAlsaHostApiRepresentation* alsaHostApi; + + PA_ENSURE( PaUtil_ValidateStreamPointer( s ) ); + PA_ENSURE( PaUtil_GetHostApiRepresentation( &hostApi, paALSA ) ); + alsaHostApi = (PaAlsaHostApiRepresentation*)hostApi; + + PA_UNLESS( PA_STREAM_REP( s )->streamInterface == &alsaHostApi->callbackStreamInterface + || PA_STREAM_REP( s )->streamInterface == &alsaHostApi->blockingStreamInterface, + paIncompatibleStreamHostApi ); + + *stream = (PaAlsaStream*)s; +error: + return paNoError; +} + +PaError PaAlsa_GetStreamInputCard(PaStream* s, int* card) { + PaAlsaStream *stream; + PaError result = paNoError; + snd_pcm_info_t* pcmInfo; + + PA_ENSURE( GetAlsaStreamPointer( s, &stream ) ); + + /* XXX: More descriptive error? */ + PA_UNLESS( stream->capture.pcm, paDeviceUnavailable ); + + alsa_snd_pcm_info_alloca( &pcmInfo ); + PA_ENSURE( alsa_snd_pcm_info( stream->capture.pcm, pcmInfo ) ); + *card = alsa_snd_pcm_info_get_card( pcmInfo ); + +error: + return result; +} + +PaError PaAlsa_GetStreamOutputCard(PaStream* s, int* card) { + PaAlsaStream *stream; + PaError result = paNoError; + snd_pcm_info_t* pcmInfo; + + PA_ENSURE( GetAlsaStreamPointer( s, &stream ) ); + + /* XXX: More descriptive error? */ + PA_UNLESS( stream->playback.pcm, paDeviceUnavailable ); + + alsa_snd_pcm_info_alloca( &pcmInfo ); + PA_ENSURE( alsa_snd_pcm_info( stream->playback.pcm, pcmInfo ) ); + *card = alsa_snd_pcm_info_get_card( pcmInfo ); + +error: + return result; +} + +PaError PaAlsa_SetRetriesBusy( int retries ) +{ + busyRetries_ = retries; + return paNoError; +} diff --git a/Externals/portaudio/src/hostapi/asihpi/pa_linux_asihpi.c b/Externals/portaudio/src/hostapi/asihpi/pa_linux_asihpi.c new file mode 100644 index 0000000000..f5a5290284 --- /dev/null +++ b/Externals/portaudio/src/hostapi/asihpi/pa_linux_asihpi.c @@ -0,0 +1,2893 @@ +/* + * $Id:$ + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * AudioScience HPI implementation by Fred Gleason, Ludwig Schwardt and + * Eliot Blennerhassett + * + * Copyright (c) 2003 Fred Gleason + * Copyright (c) 2005,2006 Ludwig Schwardt + * Copyright (c) 2011 Eliot Blennerhassett + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/* + * Modification History + * 12/2003 - Initial version + * 09/2005 - v19 version [rewrite] + */ + +/** @file + @ingroup hostapi_src + @brief Host API implementation supporting AudioScience cards + via the Linux HPI interface. + +

Overview

+ + This is a PortAudio implementation for the AudioScience HPI Audio API + on the Linux platform. AudioScience makes a range of audio adapters customised + for the broadcasting industry, with support for both Windows and Linux. + More information on their products can be found on their website: + + http://www.audioscience.com + + Documentation for the HPI API can be found at: + + http://www.audioscience.com/internet/download/sdk/hpi_usermanual_html/html/index.html + + The Linux HPI driver itself (a kernel module + library) can be downloaded from: + + http://www.audioscience.com/internet/download/linux_drivers.htm + +

Implementation strategy

+ + *Note* Ideally, AudioScience cards should be handled by the PortAudio ALSA + implementation on Linux, as ALSA is the preferred Linux soundcard API. The existence + of this host API implementation might therefore seem a bit flawed. Unfortunately, at + the time of the creation of this implementation (June 2006), the PA ALSA implementation + could not make use of the existing AudioScience ALSA driver. PA ALSA uses the + "memory-mapped" (mmap) ALSA access mode to interact with the ALSA library, while the + AudioScience ALSA driver only supports the "read-write" access mode. The appropriate + solution to this problem is to add "read-write" support to PortAudio ALSA, thereby + extending the range of soundcards it supports (AudioScience cards are not the only + ones with this problem). Given the author's limited knowledge of ALSA and the + simplicity of the HPI API, the second-best solution was born... + + The following mapping between HPI and PA was followed: + HPI subsystem => PortAudio host API + HPI adapter => nothing specific + HPI stream => PortAudio device + + Each HPI stream is either input or output (not both), and can support + different channel counts, sampling rates and sample formats. It is therefore + a more natural fit to a PA device. A PA stream can therefore combine two + HPI streams (one input and one output) into a "full-duplex" stream. These + HPI streams can even be on different physical adapters. The two streams ought to be + sample-synchronised when they reside on the same adapter, as most AudioScience adapters + derive their ADC and DAC clocks from one master clock. When combining two adapters + into one full-duplex stream, however, the use of a word clock connection between the + adapters is strongly recommended. + + The HPI interface is inherently blocking, making use of read and write calls to + transfer data between user buffers and driver buffers. The callback interface therefore + requires a helper thread ("callback engine") which periodically transfers data (one thread + per PA stream, in fact). The current implementation explicitly sleeps via Pa_Sleep() until + enough samples can be transferred (select() or poll() would be better, but currently seems + impossible...). The thread implementation makes use of the Unix thread helper functions + and some pthread calls here and there. If a unified PA thread exists, this host API + implementation might also compile on Windows, as this is the only real Linux-specific + part of the code. + + There is no inherent fixed buffer size in the HPI interface, as in some other host APIs. + The PortAudio implementation contains a buffer that is allocated during OpenStream and + used to transfer data between the callback and the HPI driver buffer. The size of this + buffer is quite flexible and is derived from latency suggestions and matched to the + requested callback buffer size as far as possible. It can become quite huge, as the + AudioScience cards are typically geared towards higher-latency applications and contain + large hardware buffers. + + The HPI interface natively supports most common sample formats and sample rates (some + conversion is done on the adapter itself). + + Stream time is measured based on the number of processed frames, which is adjusted by the + number of frames currently buffered by the HPI driver. + + There is basic support for detecting overflow and underflow. The HPI interface does not + explicitly indicate this, so thresholds on buffer levels are used in combination with + stream state. Recovery from overflow and underflow is left to the PA client. + + Blocking streams are also implemented. It makes use of the same polling routines that + the callback interface uses, in order to prevent the allocation of variable-sized + buffers during reading and writing. The framesPerBuffer parameter is therefore still + relevant, and this can be increased in the blocking case to improve efficiency. + + The implementation contains extensive reporting macros (slightly modified PA_ENSURE and + PA_UNLESS versions) and a useful stream dump routine to provide debugging feedback. + + Output buffer priming via the user callback (i.e. paPrimeOutputBuffersUsingStreamCallback + and friends) is not implemented yet. All output is primed with silence. + */ + +#include +#include +#include +#include /* strlen() */ +#include /* pthreads and friends */ +#include /* assert */ +#include /* ceil, floor */ + +#include /* HPI API */ + +#include "portaudio.h" /* PortAudio API */ +#include "pa_util.h" /* PA_DEBUG, other small utilities */ +#include "pa_unix_util.h" /* Unix threading utilities */ +#include "pa_allocation.h" /* Group memory allocation */ +#include "pa_hostapi.h" /* Host API structs */ +#include "pa_stream.h" /* Stream interface structs */ +#include "pa_cpuload.h" /* CPU load measurer */ +#include "pa_process.h" /* Buffer processor */ +#include "pa_converters.h" /* PaUtilZeroer */ +#include "pa_debugprint.h" + +/* -------------------------------------------------------------------------- */ + +/* + * Defines + */ + +/* Error reporting and assertions */ + +/** Evaluate expression, and return on any PortAudio errors */ +#define PA_ENSURE_(expr) \ + do { \ + PaError paError = (expr); \ + if( UNLIKELY( paError < paNoError ) ) \ + { \ + PA_DEBUG(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + result = paError; \ + goto error; \ + } \ + } while (0); + +/** Assert expression, else return the provided PaError */ +#define PA_UNLESS_(expr, paError) \ + do { \ + if( UNLIKELY( (expr) == 0 ) ) \ + { \ + PA_DEBUG(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + result = (paError); \ + goto error; \ + } \ + } while( 0 ); + +/** Check return value of HPI function, and map it to PaError */ +#define PA_ASIHPI_UNLESS_(expr, paError) \ + do { \ + hpi_err_t hpiError = (expr); \ + /* If HPI error occurred */ \ + if( UNLIKELY( hpiError ) ) \ + { \ + char szError[256]; \ + HPI_GetErrorText( hpiError, szError ); \ + PA_DEBUG(( "HPI error %d occurred: %s\n", hpiError, szError )); \ + /* This message will always be displayed, even if debug info is disabled */ \ + PA_DEBUG(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + if( (paError) == paUnanticipatedHostError ) \ + { \ + PA_DEBUG(( "Host error description: %s\n", szError )); \ + /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \ + if( pthread_equal( pthread_self(), paUnixMainThread ) ) \ + { \ + PaUtil_SetLastHostErrorInfo( paInDevelopment, hpiError, szError ); \ + } \ + } \ + /* If paNoError is specified, continue as usual */ \ + /* (useful if you only want to print out the debug messages above) */ \ + if( (paError) < 0 ) \ + { \ + result = (paError); \ + goto error; \ + } \ + } \ + } while( 0 ); + +/** Report HPI error code and text */ +#define PA_ASIHPI_REPORT_ERROR_(hpiErrorCode) \ + do { \ + char szError[256]; \ + HPI_GetErrorText( hpiError, szError ); \ + PA_DEBUG(( "HPI error %d occurred: %s\n", hpiError, szError )); \ + /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \ + if( pthread_equal( pthread_self(), paUnixMainThread ) ) \ + { \ + PaUtil_SetLastHostErrorInfo( paInDevelopment, (hpiErrorCode), szError ); \ + } \ + } while( 0 ); + +/* Defaults */ + +/** Sample formats available natively on AudioScience hardware */ +#define PA_ASIHPI_AVAILABLE_FORMATS_ (paFloat32 | paInt32 | paInt24 | paInt16 | paUInt8) +/** Enable background bus mastering (BBM) for buffer transfers, if available (see HPI docs) */ +#define PA_ASIHPI_USE_BBM_ 1 +/** Minimum number of frames in HPI buffer (for either data or available space). + If buffer contains less data/space, it indicates xrun or completion. */ +#define PA_ASIHPI_MIN_FRAMES_ 1152 +/** Minimum polling interval in milliseconds, which determines minimum host buffer size */ +#define PA_ASIHPI_MIN_POLLING_INTERVAL_ 10 + +/* -------------------------------------------------------------------------- */ + +/* + * Structures + */ + +/** Host API global data */ +typedef struct PaAsiHpiHostApiRepresentation +{ + /* PortAudio "base class" - keep the baseRep first! (C-style inheritance) */ + PaUtilHostApiRepresentation baseHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + /* implementation specific data goes here */ + + PaHostApiIndex hostApiIndex; +} +PaAsiHpiHostApiRepresentation; + + +/** Device data */ +typedef struct PaAsiHpiDeviceInfo +{ + /* PortAudio "base class" - keep the baseRep first! (C-style inheritance) */ + /** Common PortAudio device information */ + PaDeviceInfo baseDeviceInfo; + + /* implementation specific data goes here */ + + /** Adapter index */ + uint16_t adapterIndex; + /** Adapter model number (hex) */ + uint16_t adapterType; + /** Adapter HW/SW version */ + uint16_t adapterVersion; + /** Adapter serial number */ + uint32_t adapterSerialNumber; + /** Stream number */ + uint16_t streamIndex; + /** 0=Input, 1=Output (HPI streams are either input or output but not both) */ + uint16_t streamIsOutput; +} +PaAsiHpiDeviceInfo; + + +/** Stream state as defined by PortAudio. + It seems that the host API implementation has to keep track of the PortAudio stream state. + Please note that this is NOT the same as the state of the underlying HPI stream. By separating + these two concepts, a lot of flexibility is gained. There is a rough match between the two, + of course, but forcing a precise match is difficult. For example, HPI_STATE_DRAINED can occur + during the Active state of PortAudio (due to underruns) and also during CallBackFinished in + the case of an output stream. Similarly, HPI_STATE_STOPPED mostly coincides with the Stopped + PortAudio state, by may also occur in the CallbackFinished state when recording is finished. + + Here is a rough match-up: + + PortAudio state => HPI state + --------------- --------- + Active => HPI_STATE_RECORDING, HPI_STATE_PLAYING, (HPI_STATE_DRAINED) + Stopped => HPI_STATE_STOPPED + CallbackFinished => HPI_STATE_STOPPED, HPI_STATE_DRAINED */ +typedef enum PaAsiHpiStreamState +{ + paAsiHpiStoppedState=0, + paAsiHpiActiveState=1, + paAsiHpiCallbackFinishedState=2 +} +PaAsiHpiStreamState; + + +/** Stream component data (associated with one direction, i.e. either input or output) */ +typedef struct PaAsiHpiStreamComponent +{ + /** Device information (HPI handles, etc) */ + PaAsiHpiDeviceInfo *hpiDevice; + /** Stream handle, as passed to HPI interface. */ + hpi_handle_t hpiStream; + /** Stream format, as passed to HPI interface */ + struct hpi_format hpiFormat; + /** Number of bytes per frame, derived from hpiFormat and saved for convenience */ + uint32_t bytesPerFrame; + /** Size of hardware (on-card) buffer of stream in bytes */ + uint32_t hardwareBufferSize; + /** Size of host (BBM) buffer of stream in bytes (if used) */ + uint32_t hostBufferSize; + /** Upper limit on the utilization of output stream buffer (both hardware and host). + This prevents large latencies in an output-only stream with a potentially huge buffer + and a fast data generator, which would otherwise keep the hardware buffer filled to + capacity. See also the "Hardware Buffering=off" option in the AudioScience WAV driver. */ + uint32_t outputBufferCap; + /** Sample buffer (halfway station between HPI and buffer processor) */ + uint8_t *tempBuffer; + /** Sample buffer size, in bytes */ + uint32_t tempBufferSize; +} +PaAsiHpiStreamComponent; + + +/** Stream data */ +typedef struct PaAsiHpiStream +{ + /* PortAudio "base class" - keep the baseRep first! (C-style inheritance) */ + PaUtilStreamRepresentation baseStreamRep; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + PaUtilAllocationGroup *allocations; + + /* implementation specific data goes here */ + + /** Separate structs for input and output sides of stream */ + PaAsiHpiStreamComponent *input, *output; + + /** Polling interval (in milliseconds) */ + uint32_t pollingInterval; + /** Are we running in callback mode? */ + int callbackMode; + /** Number of frames to transfer at a time to/from HPI */ + unsigned long maxFramesPerHostBuffer; + /** Indicates that the stream is in the paNeverDropInput mode */ + int neverDropInput; + /** Contains copy of user buffers, used by blocking interface to transfer non-interleaved data. + It went here instead of to each stream component, as the stream component buffer setup in + PaAsiHpi_SetupBuffers doesn't know the stream details such as callbackMode. + (Maybe a problem later if ReadStream and WriteStream happens concurrently on same stream.) */ + void **blockingUserBufferCopy; + + /* Thread-related variables */ + + /** Helper thread which will deliver data to user callback */ + PaUnixThread thread; + /** PortAudio stream state (Active/Stopped/CallbackFinished) */ + volatile sig_atomic_t state; + /** Hard abort, i.e. drop frames? */ + volatile sig_atomic_t callbackAbort; + /** True if stream stopped via exiting callback with paComplete/paAbort flag + (as opposed to explicit call to StopStream/AbortStream) */ + volatile sig_atomic_t callbackFinished; +} +PaAsiHpiStream; + + +/** Stream state information, collected together for convenience */ +typedef struct PaAsiHpiStreamInfo +{ + /** HPI stream state (HPI_STATE_STOPPED, HPI_STATE_PLAYING, etc.) */ + uint16_t state; + /** Size (in bytes) of recording/playback data buffer in HPI driver */ + uint32_t bufferSize; + /** Amount of data (in bytes) available in the buffer */ + uint32_t dataSize; + /** Number of frames played/recorded since last stream reset */ + uint32_t frameCounter; + /** Amount of data (in bytes) in hardware (on-card) buffer. + This differs from dataSize if bus mastering (BBM) is used, which introduces another + driver-level buffer to which dataSize/bufferSize then refers. */ + uint32_t auxDataSize; + /** Total number of data frames currently buffered by HPI driver (host + hw buffers) */ + uint32_t totalBufferedData; + /** Size of immediately available data (for input) or space (for output) in frames. + This only checks the first-level buffer (typically host buffer). This amount can be + transferred immediately. */ + uint32_t availableFrames; + /** Indicates that hardware buffer is getting too full */ + int overflow; + /** Indicates that hardware buffer is getting too empty */ + int underflow; +} +PaAsiHpiStreamInfo; + +/* -------------------------------------------------------------------------- */ + +/* + * Function prototypes + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + /* The only exposed function in the entire host API implementation */ + PaError PaAsiHpi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); + +/* Stream prototypes */ +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream **s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError CloseStream( PaStream *s ); +static PaError StartStream( PaStream *s ); +static PaError StopStream( PaStream *s ); +static PaError AbortStream( PaStream *s ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *s ); +static PaTime GetStreamTime( PaStream *s ); +static double GetStreamCpuLoad( PaStream *s ); + +/* Blocking prototypes */ +static PaError ReadStream( PaStream *s, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream *s, const void *buffer, unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream *s ); +static signed long GetStreamWriteAvailable( PaStream *s ); + +/* Callback prototypes */ +static void *CallbackThreadFunc( void *userData ); + +/* Functions specific to this API */ +static PaError PaAsiHpi_BuildDeviceList( PaAsiHpiHostApiRepresentation *hpiHostApi ); +static uint16_t PaAsiHpi_PaToHpiFormat( PaSampleFormat paFormat ); +static PaSampleFormat PaAsiHpi_HpiToPaFormat( uint16_t hpiFormat ); +static PaError PaAsiHpi_CreateFormat( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *parameters, double sampleRate, + PaAsiHpiDeviceInfo **hpiDevice, struct hpi_format *hpiFormat ); +static PaError PaAsiHpi_OpenInput( struct PaUtilHostApiRepresentation *hostApi, + const PaAsiHpiDeviceInfo *hpiDevice, const struct hpi_format *hpiFormat, + hpi_handle_t *hpiStream ); +static PaError PaAsiHpi_OpenOutput( struct PaUtilHostApiRepresentation *hostApi, + const PaAsiHpiDeviceInfo *hpiDevice, const struct hpi_format *hpiFormat, + hpi_handle_t *hpiStream ); +static PaError PaAsiHpi_GetStreamInfo( PaAsiHpiStreamComponent *streamComp, PaAsiHpiStreamInfo *info ); +static void PaAsiHpi_StreamComponentDump( PaAsiHpiStreamComponent *streamComp, PaAsiHpiStream *stream ); +static void PaAsiHpi_StreamDump( PaAsiHpiStream *stream ); +static PaError PaAsiHpi_SetupBuffers( PaAsiHpiStreamComponent *streamComp, uint32_t pollingInterval, + unsigned long framesPerPaHostBuffer, PaTime suggestedLatency ); +static PaError PaAsiHpi_PrimeOutputWithSilence( PaAsiHpiStream *stream ); +static PaError PaAsiHpi_StartStream( PaAsiHpiStream *stream, int outputPrimed ); +static PaError PaAsiHpi_StopStream( PaAsiHpiStream *stream, int abort ); +static PaError PaAsiHpi_ExplicitStop( PaAsiHpiStream *stream, int abort ); +static void PaAsiHpi_OnThreadExit( void *userData ); +static PaError PaAsiHpi_WaitForFrames( PaAsiHpiStream *stream, unsigned long *framesAvail, + PaStreamCallbackFlags *cbFlags ); +static void PaAsiHpi_CalculateTimeInfo( PaAsiHpiStream *stream, PaStreamCallbackTimeInfo *timeInfo ); +static PaError PaAsiHpi_BeginProcessing( PaAsiHpiStream* stream, unsigned long* numFrames, + PaStreamCallbackFlags *cbFlags ); +static PaError PaAsiHpi_EndProcessing( PaAsiHpiStream *stream, unsigned long numFrames, + PaStreamCallbackFlags *cbFlags ); + +/* ========================================================================== + * ============================= IMPLEMENTATION ============================= + * ========================================================================== */ + +/* --------------------------- Host API Interface --------------------------- */ + +/** Enumerate all PA devices (= HPI streams). + This compiles a list of all HPI adapters, and registers a PA device for each input and + output stream it finds. Most errors are ignored, as missing or erroneous devices are + simply skipped. + + @param hpiHostApi Pointer to HPI host API struct + + @return PortAudio error code (only paInsufficientMemory in practice) + */ +static PaError PaAsiHpi_BuildDeviceList( PaAsiHpiHostApiRepresentation *hpiHostApi ) +{ + PaError result = paNoError; + PaUtilHostApiRepresentation *hostApi = &hpiHostApi->baseHostApiRep; + PaHostApiInfo *baseApiInfo = &hostApi->info; + PaAsiHpiDeviceInfo *hpiDeviceList; + int numAdapters; + hpi_err_t hpiError = 0; + int i, j, deviceCount = 0, deviceIndex = 0; + + assert( hpiHostApi ); + + /* Errors not considered critical here (subsystem may report 0 devices), but report them */ + /* in debug mode. */ + PA_ASIHPI_UNLESS_( HPI_SubSysGetNumAdapters( NULL, &numAdapters), paNoError ); + + for( i=0; i < numAdapters; ++i ) + { + uint16_t inStreams, outStreams; + uint16_t version; + uint32_t serial; + uint16_t type; + uint32_t idx; + + hpiError = HPI_SubSysGetAdapter(NULL, i, &idx, &type); + if (hpiError) + continue; + + /* Try to open adapter */ + hpiError = HPI_AdapterOpen( NULL, idx ); + /* Report error and skip to next device on failure */ + if( hpiError ) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + continue; + } + hpiError = HPI_AdapterGetInfo( NULL, idx, &outStreams, &inStreams, + &version, &serial, &type ); + /* Skip to next device on failure */ + if( hpiError ) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + continue; + } + else + { + /* Assign default devices if available and increment device count */ + if( (baseApiInfo->defaultInputDevice == paNoDevice) && (inStreams > 0) ) + baseApiInfo->defaultInputDevice = deviceCount; + deviceCount += inStreams; + if( (baseApiInfo->defaultOutputDevice == paNoDevice) && (outStreams > 0) ) + baseApiInfo->defaultOutputDevice = deviceCount; + deviceCount += outStreams; + } + } + + /* Register any discovered devices */ + if( deviceCount > 0 ) + { + /* Memory allocation */ + PA_UNLESS_( hostApi->deviceInfos = (PaDeviceInfo**) PaUtil_GroupAllocateMemory( + hpiHostApi->allocations, sizeof(PaDeviceInfo*) * deviceCount ), + paInsufficientMemory ); + /* Allocate all device info structs in a contiguous block */ + PA_UNLESS_( hpiDeviceList = (PaAsiHpiDeviceInfo*) PaUtil_GroupAllocateMemory( + hpiHostApi->allocations, sizeof(PaAsiHpiDeviceInfo) * deviceCount ), + paInsufficientMemory ); + + /* Now query devices again for information */ + for( i=0; i < numAdapters; ++i ) + { + uint16_t inStreams, outStreams; + uint16_t version; + uint32_t serial; + uint16_t type; + uint32_t idx; + + hpiError = HPI_SubSysGetAdapter( NULL, i, &idx, &type ); + if (hpiError) + continue; + + /* Assume adapter is still open from previous round */ + hpiError = HPI_AdapterGetInfo( NULL, idx, + &outStreams, &inStreams, &version, &serial, &type ); + /* Report error and skip to next device on failure */ + if( hpiError ) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + continue; + } + else + { + PA_DEBUG(( "Found HPI Adapter ID=%4X Idx=%d #In=%d #Out=%d S/N=%d HWver=%c%d DSPver=%03d\n", + type, idx, inStreams, outStreams, serial, + ((version>>3)&0xf)+'A', /* Hw version major */ + version&0x7, /* Hw version minor */ + ((version>>13)*100)+((version>>7)&0x3f) /* DSP code version */ + )); + } + + /* First add all input streams as devices */ + for( j=0; j < inStreams; ++j ) + { + PaAsiHpiDeviceInfo *hpiDevice = &hpiDeviceList[deviceIndex]; + PaDeviceInfo *baseDeviceInfo = &hpiDevice->baseDeviceInfo; + char srcName[72]; + char *deviceName; + + memset( hpiDevice, 0, sizeof(PaAsiHpiDeviceInfo) ); + /* Set implementation-specific device details */ + hpiDevice->adapterIndex = idx; + hpiDevice->adapterType = type; + hpiDevice->adapterVersion = version; + hpiDevice->adapterSerialNumber = serial; + hpiDevice->streamIndex = j; + hpiDevice->streamIsOutput = 0; + /* Set common PortAudio device stats */ + baseDeviceInfo->structVersion = 2; + /* Make sure name string is owned by API info structure */ + sprintf( srcName, + "Adapter %d (%4X) - Input Stream %d", i+1, type, j+1 ); + PA_UNLESS_( deviceName = (char *) PaUtil_GroupAllocateMemory( + hpiHostApi->allocations, strlen(srcName) + 1 ), paInsufficientMemory ); + strcpy( deviceName, srcName ); + baseDeviceInfo->name = deviceName; + baseDeviceInfo->hostApi = hpiHostApi->hostApiIndex; + baseDeviceInfo->maxInputChannels = HPI_MAX_CHANNELS; + baseDeviceInfo->maxOutputChannels = 0; + /* Default latency values for interactive performance */ + baseDeviceInfo->defaultLowInputLatency = 0.01; + baseDeviceInfo->defaultLowOutputLatency = -1.0; + /* Default latency values for robust non-interactive applications (eg. playing sound files) */ + baseDeviceInfo->defaultHighInputLatency = 0.2; + baseDeviceInfo->defaultHighOutputLatency = -1.0; + /* HPI interface can actually handle any sampling rate to 1 Hz accuracy, + * so this default is as good as any */ + baseDeviceInfo->defaultSampleRate = 44100; + + /* Store device in global PortAudio list */ + hostApi->deviceInfos[deviceIndex++] = (PaDeviceInfo *) hpiDevice; + } + + /* Now add all output streams as devices (I know, the repetition is painful) */ + for( j=0; j < outStreams; ++j ) + { + PaAsiHpiDeviceInfo *hpiDevice = &hpiDeviceList[deviceIndex]; + PaDeviceInfo *baseDeviceInfo = &hpiDevice->baseDeviceInfo; + char srcName[72]; + char *deviceName; + + memset( hpiDevice, 0, sizeof(PaAsiHpiDeviceInfo) ); + /* Set implementation-specific device details */ + hpiDevice->adapterIndex = idx; + hpiDevice->adapterType = type; + hpiDevice->adapterVersion = version; + hpiDevice->adapterSerialNumber = serial; + hpiDevice->streamIndex = j; + hpiDevice->streamIsOutput = 1; + /* Set common PortAudio device stats */ + baseDeviceInfo->structVersion = 2; + /* Make sure name string is owned by API info structure */ + sprintf( srcName, + "Adapter %d (%4X) - Output Stream %d", i+1, type, j+1 ); + PA_UNLESS_( deviceName = (char *) PaUtil_GroupAllocateMemory( + hpiHostApi->allocations, strlen(srcName) + 1 ), paInsufficientMemory ); + strcpy( deviceName, srcName ); + baseDeviceInfo->name = deviceName; + baseDeviceInfo->hostApi = hpiHostApi->hostApiIndex; + baseDeviceInfo->maxInputChannels = 0; + baseDeviceInfo->maxOutputChannels = HPI_MAX_CHANNELS; + /* Default latency values for interactive performance. */ + baseDeviceInfo->defaultLowInputLatency = -1.0; + baseDeviceInfo->defaultLowOutputLatency = 0.01; + /* Default latency values for robust non-interactive applications (eg. playing sound files). */ + baseDeviceInfo->defaultHighInputLatency = -1.0; + baseDeviceInfo->defaultHighOutputLatency = 0.2; + /* HPI interface can actually handle any sampling rate to 1 Hz accuracy, + * so this default is as good as any */ + baseDeviceInfo->defaultSampleRate = 44100; + + /* Store device in global PortAudio list */ + hostApi->deviceInfos[deviceIndex++] = (PaDeviceInfo *) hpiDevice; + } + } + } + + /* Finally acknowledge checked devices */ + baseApiInfo->deviceCount = deviceIndex; + +error: + return result; +} + + +/** Initialize host API implementation. + This is the only function exported beyond this file. It is called by PortAudio to initialize + the host API. It stores API info, finds and registers all devices, and sets up callback and + blocking interfaces. + + @param hostApi Pointer to host API struct + + @param hostApiIndex Index of current (HPI) host API + + @return PortAudio error code + */ +PaError PaAsiHpi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + PaAsiHpiHostApiRepresentation *hpiHostApi = NULL; + PaHostApiInfo *baseApiInfo; + + /* Try to initialize HPI subsystem */ + if (!HPI_SubSysCreate()) + { + /* the V19 development docs say that if an implementation + * detects that it cannot be used, it should return a NULL + * interface and paNoError */ + PA_DEBUG(( "Could not open HPI interface\n" )); + + *hostApi = NULL; + return paNoError; + } + else + { + uint32_t hpiVersion; + PA_ASIHPI_UNLESS_( HPI_SubSysGetVersionEx( NULL, &hpiVersion ), paUnanticipatedHostError ); + PA_DEBUG(( "HPI interface v%d.%02d.%02d\n", + hpiVersion >> 16, (hpiVersion >> 8) & 0x0F, (hpiVersion & 0x0F) )); + } + + /* Allocate host API structure */ + PA_UNLESS_( hpiHostApi = (PaAsiHpiHostApiRepresentation*) PaUtil_AllocateMemory( + sizeof(PaAsiHpiHostApiRepresentation) ), paInsufficientMemory ); + PA_UNLESS_( hpiHostApi->allocations = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); + + hpiHostApi->hostApiIndex = hostApiIndex; + + *hostApi = &hpiHostApi->baseHostApiRep; + baseApiInfo = &((*hostApi)->info); + /* Fill in common API details */ + baseApiInfo->structVersion = 1; + baseApiInfo->type = paAudioScienceHPI; + baseApiInfo->name = "AudioScience HPI"; + baseApiInfo->deviceCount = 0; + baseApiInfo->defaultInputDevice = paNoDevice; + baseApiInfo->defaultOutputDevice = paNoDevice; + + PA_ENSURE_( PaAsiHpi_BuildDeviceList( hpiHostApi ) ); + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &hpiHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &hpiHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + /* Store identity of main thread */ + PA_ENSURE_( PaUnixThreading_Initialize() ); + + return result; +error: + if (hpiHostApi) + PaUtil_FreeMemory( hpiHostApi ); + return result; +} + + +/** Terminate host API implementation. + This closes all HPI adapters and frees the HPI subsystem. It also frees the host API struct + memory. It should be called once for every PaAsiHpi_Initialize call. + + @param Pointer to host API struct + */ +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaAsiHpiHostApiRepresentation *hpiHostApi = (PaAsiHpiHostApiRepresentation*)hostApi; + int i; + PaError result = paNoError; + + if( hpiHostApi ) + { + /* Get rid of HPI-specific structures */ + uint16_t lastAdapterIndex = HPI_MAX_ADAPTERS; + /* Iterate through device list and close adapters */ + for( i=0; i < hostApi->info.deviceCount; ++i ) + { + PaAsiHpiDeviceInfo *hpiDevice = (PaAsiHpiDeviceInfo *) hostApi->deviceInfos[ i ]; + /* Close adapter only if it differs from previous one */ + if( hpiDevice->adapterIndex != lastAdapterIndex ) + { + /* Ignore errors (report only during debugging) */ + PA_ASIHPI_UNLESS_( HPI_AdapterClose( NULL, + hpiDevice->adapterIndex ), paNoError ); + lastAdapterIndex = hpiDevice->adapterIndex; + } + } + /* Finally dismantle HPI subsystem */ + HPI_SubSysFree( NULL ); + + if( hpiHostApi->allocations ) + { + PaUtil_FreeAllAllocations( hpiHostApi->allocations ); + PaUtil_DestroyAllocationGroup( hpiHostApi->allocations ); + } + + PaUtil_FreeMemory( hpiHostApi ); + } +error: + return; +} + + +/** Converts PortAudio sample format to equivalent HPI format. + + @param paFormat PortAudio sample format + + @return HPI sample format + */ +static uint16_t PaAsiHpi_PaToHpiFormat( PaSampleFormat paFormat ) +{ + /* Ignore interleaving flag */ + switch( paFormat & ~paNonInterleaved ) + { + case paFloat32: + return HPI_FORMAT_PCM32_FLOAT; + + case paInt32: + return HPI_FORMAT_PCM32_SIGNED; + + case paInt24: + return HPI_FORMAT_PCM24_SIGNED; + + case paInt16: + return HPI_FORMAT_PCM16_SIGNED; + + case paUInt8: + return HPI_FORMAT_PCM8_UNSIGNED; + + /* Default is 16-bit signed */ + case paInt8: + default: + return HPI_FORMAT_PCM16_SIGNED; + } +} + + +/** Converts HPI sample format to equivalent PortAudio format. + + @param paFormat HPI sample format + + @return PortAudio sample format + */ +static PaSampleFormat PaAsiHpi_HpiToPaFormat( uint16_t hpiFormat ) +{ + switch( hpiFormat ) + { + case HPI_FORMAT_PCM32_FLOAT: + return paFloat32; + + case HPI_FORMAT_PCM32_SIGNED: + return paInt32; + + case HPI_FORMAT_PCM24_SIGNED: + return paInt24; + + case HPI_FORMAT_PCM16_SIGNED: + return paInt16; + + case HPI_FORMAT_PCM8_UNSIGNED: + return paUInt8; + + /* Default is custom format (e.g. for HPI MP3 format) */ + default: + return paCustomFormat; + } +} + + +/** Creates HPI format struct based on PortAudio parameters. + This also does some checks to see whether the desired format is valid, and whether + the device allows it. This only checks the format of one half (input or output) of the + PortAudio stream. + + @param hostApi Pointer to host API struct + + @param parameters Pointer to stream parameter struct + + @param sampleRate Desired sample rate + + @param hpiDevice Pointer to HPI device struct + + @param hpiFormat Resulting HPI format returned here + + @return PortAudio error code (typically indicating a problem with stream format) + */ +static PaError PaAsiHpi_CreateFormat( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *parameters, double sampleRate, + PaAsiHpiDeviceInfo **hpiDevice, struct hpi_format *hpiFormat ) +{ + int maxChannelCount = 0; + PaSampleFormat hostSampleFormat = 0; + hpi_err_t hpiError = 0; + + /* Unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + if( parameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + else + { + assert( parameters->device < hostApi->info.deviceCount ); + *hpiDevice = (PaAsiHpiDeviceInfo*) hostApi->deviceInfos[ parameters->device ]; + } + + /* Validate streamInfo - this implementation doesn't use custom stream info */ + if( parameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; + + /* Check that device can support channel count */ + if( (*hpiDevice)->streamIsOutput ) + { + maxChannelCount = (*hpiDevice)->baseDeviceInfo.maxOutputChannels; + } + else + { + maxChannelCount = (*hpiDevice)->baseDeviceInfo.maxInputChannels; + } + if( (maxChannelCount == 0) || (parameters->channelCount > maxChannelCount) ) + return paInvalidChannelCount; + + /* All standard sample formats are supported by the buffer adapter, + and this implementation doesn't support any custom sample formats */ + if( parameters->sampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* Switch to closest HPI native format */ + hostSampleFormat = PaUtil_SelectClosestAvailableFormat(PA_ASIHPI_AVAILABLE_FORMATS_, + parameters->sampleFormat ); + /* Setup format + info objects */ + hpiError = HPI_FormatCreate( hpiFormat, (uint16_t)parameters->channelCount, + PaAsiHpi_PaToHpiFormat( hostSampleFormat ), + (uint32_t)sampleRate, 0, 0 ); + if( hpiError ) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + switch( hpiError ) + { + case HPI_ERROR_INVALID_FORMAT: + return paSampleFormatNotSupported; + + case HPI_ERROR_INVALID_SAMPLERATE: + case HPI_ERROR_INCOMPATIBLE_SAMPLERATE: + return paInvalidSampleRate; + + case HPI_ERROR_INVALID_CHANNELS: + return paInvalidChannelCount; + } + } + + return paNoError; +} + + +/** Open HPI input stream with given format. + This attempts to open HPI input stream with desired format. If the format is not supported + or the device is unavailable, the stream is closed and a PortAudio error code is returned. + + @param hostApi Pointer to host API struct + + @param hpiDevice Pointer to HPI device struct + + @param hpiFormat Pointer to HPI format struct + + @return PortAudio error code (typically indicating a problem with stream format or device) +*/ +static PaError PaAsiHpi_OpenInput( struct PaUtilHostApiRepresentation *hostApi, + const PaAsiHpiDeviceInfo *hpiDevice, const struct hpi_format *hpiFormat, + hpi_handle_t *hpiStream ) +{ + PaAsiHpiHostApiRepresentation *hpiHostApi = (PaAsiHpiHostApiRepresentation*)hostApi; + PaError result = paNoError; + hpi_err_t hpiError = 0; + + /* Catch misplaced output devices, as they typically have 0 input channels */ + PA_UNLESS_( !hpiDevice->streamIsOutput, paInvalidChannelCount ); + /* Try to open input stream */ + PA_ASIHPI_UNLESS_( HPI_InStreamOpen( NULL, hpiDevice->adapterIndex, + hpiDevice->streamIndex, hpiStream ), paDeviceUnavailable ); + /* Set input format (checking it in the process) */ + /* Could also use HPI_InStreamQueryFormat, but this economizes the process */ + hpiError = HPI_InStreamSetFormat( NULL, *hpiStream, (struct hpi_format*)hpiFormat ); + if( hpiError ) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + PA_ASIHPI_UNLESS_( HPI_InStreamClose( NULL, *hpiStream ), paNoError ); + switch( hpiError ) + { + case HPI_ERROR_INVALID_FORMAT: + return paSampleFormatNotSupported; + + case HPI_ERROR_INVALID_SAMPLERATE: + case HPI_ERROR_INCOMPATIBLE_SAMPLERATE: + return paInvalidSampleRate; + + case HPI_ERROR_INVALID_CHANNELS: + return paInvalidChannelCount; + + default: + /* In case anything else went wrong */ + return paInvalidDevice; + } + } + +error: + return result; +} + + +/** Open HPI output stream with given format. + This attempts to open HPI output stream with desired format. If the format is not supported + or the device is unavailable, the stream is closed and a PortAudio error code is returned. + + @param hostApi Pointer to host API struct + + @param hpiDevice Pointer to HPI device struct + + @param hpiFormat Pointer to HPI format struct + + @return PortAudio error code (typically indicating a problem with stream format or device) +*/ +static PaError PaAsiHpi_OpenOutput( struct PaUtilHostApiRepresentation *hostApi, + const PaAsiHpiDeviceInfo *hpiDevice, const struct hpi_format *hpiFormat, + hpi_handle_t *hpiStream ) +{ + PaAsiHpiHostApiRepresentation *hpiHostApi = (PaAsiHpiHostApiRepresentation*)hostApi; + PaError result = paNoError; + hpi_err_t hpiError = 0; + + /* Catch misplaced input devices, as they typically have 0 output channels */ + PA_UNLESS_( hpiDevice->streamIsOutput, paInvalidChannelCount ); + /* Try to open output stream */ + PA_ASIHPI_UNLESS_( HPI_OutStreamOpen( NULL, hpiDevice->adapterIndex, + hpiDevice->streamIndex, hpiStream ), paDeviceUnavailable ); + + /* Check output format (format is set on first write to output stream) */ + hpiError = HPI_OutStreamQueryFormat( NULL, *hpiStream, (struct hpi_format*)hpiFormat ); + if( hpiError ) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + PA_ASIHPI_UNLESS_( HPI_OutStreamClose( NULL, *hpiStream ), paNoError ); + switch( hpiError ) + { + case HPI_ERROR_INVALID_FORMAT: + return paSampleFormatNotSupported; + + case HPI_ERROR_INVALID_SAMPLERATE: + case HPI_ERROR_INCOMPATIBLE_SAMPLERATE: + return paInvalidSampleRate; + + case HPI_ERROR_INVALID_CHANNELS: + return paInvalidChannelCount; + + default: + /* In case anything else went wrong */ + return paInvalidDevice; + } + } + +error: + return result; +} + + +/** Checks whether the desired stream formats and devices are supported + (for both input and output). + This is done by actually opening the appropriate HPI streams and closing them again. + + @param hostApi Pointer to host API struct + + @param inputParameters Pointer to stream parameter struct for input side of stream + + @param outputParameters Pointer to stream parameter struct for output side of stream + + @param sampleRate Desired sample rate + + @return PortAudio error code (paFormatIsSupported on success) + */ +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + PaError result = paFormatIsSupported; + PaAsiHpiHostApiRepresentation *hpiHostApi = (PaAsiHpiHostApiRepresentation*)hostApi; + PaAsiHpiDeviceInfo *hpiDevice = NULL; + struct hpi_format hpiFormat; + + /* Input stream */ + if( inputParameters ) + { + hpi_handle_t hpiStream; + PA_DEBUG(( "%s: Checking input params: dev=%d, sr=%d, chans=%d, fmt=%d\n", + __FUNCTION__, inputParameters->device, (int)sampleRate, + inputParameters->channelCount, inputParameters->sampleFormat )); + /* Create and validate format */ + PA_ENSURE_( PaAsiHpi_CreateFormat( hostApi, inputParameters, sampleRate, + &hpiDevice, &hpiFormat ) ); + /* Open stream to further check format */ + PA_ENSURE_( PaAsiHpi_OpenInput( hostApi, hpiDevice, &hpiFormat, &hpiStream ) ); + /* Close stream again */ + PA_ASIHPI_UNLESS_( HPI_InStreamClose( NULL, hpiStream ), paNoError ); + } + + /* Output stream */ + if( outputParameters ) + { + hpi_handle_t hpiStream; + PA_DEBUG(( "%s: Checking output params: dev=%d, sr=%d, chans=%d, fmt=%d\n", + __FUNCTION__, outputParameters->device, (int)sampleRate, + outputParameters->channelCount, outputParameters->sampleFormat )); + /* Create and validate format */ + PA_ENSURE_( PaAsiHpi_CreateFormat( hostApi, outputParameters, sampleRate, + &hpiDevice, &hpiFormat ) ); + /* Open stream to further check format */ + PA_ENSURE_( PaAsiHpi_OpenOutput( hostApi, hpiDevice, &hpiFormat, &hpiStream ) ); + /* Close stream again */ + PA_ASIHPI_UNLESS_( HPI_OutStreamClose( NULL, hpiStream ), paNoError ); + } + +error: + return result; +} + +/* ---------------------------- Stream Interface ---------------------------- */ + +/** Obtain HPI stream information. + This obtains info such as stream state and available data/space in buffers. It also + estimates whether an underflow or overflow occurred. + + @param streamComp Pointer to stream component (input or output) to query + + @param info Pointer to stream info struct that will contain result + + @return PortAudio error code (either paNoError, paDeviceUnavailable or paUnanticipatedHostError) + */ +static PaError PaAsiHpi_GetStreamInfo( PaAsiHpiStreamComponent *streamComp, PaAsiHpiStreamInfo *info ) +{ + PaError result = paDeviceUnavailable; + uint16_t state; + uint32_t bufferSize, dataSize, frameCounter, auxDataSize, threshold; + uint32_t hwBufferSize, hwDataSize; + + assert( streamComp ); + assert( info ); + + /* First blank the stream info struct, in case something goes wrong below. + This saves the caller from initializing the struct. */ + info->state = 0; + info->bufferSize = 0; + info->dataSize = 0; + info->frameCounter = 0; + info->auxDataSize = 0; + info->totalBufferedData = 0; + info->availableFrames = 0; + info->underflow = 0; + info->overflow = 0; + + if( streamComp->hpiDevice && streamComp->hpiStream ) + { + /* Obtain detailed stream info (either input or output) */ + if( streamComp->hpiDevice->streamIsOutput ) + { + PA_ASIHPI_UNLESS_( HPI_OutStreamGetInfoEx( NULL, + streamComp->hpiStream, + &state, &bufferSize, &dataSize, &frameCounter, + &auxDataSize ), paUnanticipatedHostError ); + } + else + { + PA_ASIHPI_UNLESS_( HPI_InStreamGetInfoEx( NULL, + streamComp->hpiStream, + &state, &bufferSize, &dataSize, &frameCounter, + &auxDataSize ), paUnanticipatedHostError ); + } + /* Load stream info */ + info->state = state; + info->bufferSize = bufferSize; + info->dataSize = dataSize; + info->frameCounter = frameCounter; + info->auxDataSize = auxDataSize; + /* Determine total buffered data */ + info->totalBufferedData = dataSize; + if( streamComp->hostBufferSize > 0 ) + info->totalBufferedData += auxDataSize; + info->totalBufferedData /= streamComp->bytesPerFrame; + /* Determine immediately available frames */ + info->availableFrames = streamComp->hpiDevice->streamIsOutput ? + bufferSize - dataSize : dataSize; + info->availableFrames /= streamComp->bytesPerFrame; + /* Minimum space/data required in buffers */ + threshold = PA_MIN( streamComp->tempBufferSize, + streamComp->bytesPerFrame * PA_ASIHPI_MIN_FRAMES_ ); + /* Obtain hardware buffer stats first, to simplify things */ + hwBufferSize = streamComp->hardwareBufferSize; + hwDataSize = streamComp->hostBufferSize > 0 ? auxDataSize : dataSize; + /* Underflow is a bit tricky */ + info->underflow = streamComp->hpiDevice->streamIsOutput ? + /* Stream seems to start in drained state sometimes, so ignore initial underflow */ + (frameCounter > 0) && ( (state == HPI_STATE_DRAINED) || (hwDataSize == 0) ) : + /* Input streams check the first-level (host) buffer for underflow */ + (state != HPI_STATE_STOPPED) && (dataSize < threshold); + /* Check for overflow in second-level (hardware) buffer for both input and output */ + info->overflow = (state != HPI_STATE_STOPPED) && (hwBufferSize - hwDataSize < threshold); + + return paNoError; + } + +error: + return result; +} + + +/** Display stream component information for debugging purposes. + + @param streamComp Pointer to stream component (input or output) to query + + @param stream Pointer to stream struct which contains the component above + */ +static void PaAsiHpi_StreamComponentDump( PaAsiHpiStreamComponent *streamComp, + PaAsiHpiStream *stream ) +{ + PaAsiHpiStreamInfo streamInfo; + + assert( streamComp ); + assert( stream ); + + /* Name of soundcard/device used by component */ + PA_DEBUG(( "device: %s\n", streamComp->hpiDevice->baseDeviceInfo.name )); + /* Unfortunately some overlap between input and output here */ + if( streamComp->hpiDevice->streamIsOutput ) + { + /* Settings on the user side (as experienced by user callback) */ + PA_DEBUG(( "user: %d-bit, %d ", + 8*stream->bufferProcessor.bytesPerUserOutputSample, + stream->bufferProcessor.outputChannelCount)); + if( stream->bufferProcessor.userOutputIsInterleaved ) + { + PA_DEBUG(( "interleaved channels, " )); + } + else + { + PA_DEBUG(( "non-interleaved channels, " )); + } + PA_DEBUG(( "%d frames/buffer, latency = %5.1f ms\n", + stream->bufferProcessor.framesPerUserBuffer, + 1000*stream->baseStreamRep.streamInfo.outputLatency )); + /* Settings on the host side (internal to PortAudio host API) */ + PA_DEBUG(( "host: %d-bit, %d interleaved channels, %d frames/buffer ", + 8*stream->bufferProcessor.bytesPerHostOutputSample, + stream->bufferProcessor.outputChannelCount, + stream->bufferProcessor.framesPerHostBuffer )); + } + else + { + /* Settings on the user side (as experienced by user callback) */ + PA_DEBUG(( "user: %d-bit, %d ", + 8*stream->bufferProcessor.bytesPerUserInputSample, + stream->bufferProcessor.inputChannelCount)); + if( stream->bufferProcessor.userInputIsInterleaved ) + { + PA_DEBUG(( "interleaved channels, " )); + } + else + { + PA_DEBUG(( "non-interleaved channels, " )); + } + PA_DEBUG(( "%d frames/buffer, latency = %5.1f ms\n", + stream->bufferProcessor.framesPerUserBuffer, + 1000*stream->baseStreamRep.streamInfo.inputLatency )); + /* Settings on the host side (internal to PortAudio host API) */ + PA_DEBUG(( "host: %d-bit, %d interleaved channels, %d frames/buffer ", + 8*stream->bufferProcessor.bytesPerHostInputSample, + stream->bufferProcessor.inputChannelCount, + stream->bufferProcessor.framesPerHostBuffer )); + } + switch( stream->bufferProcessor.hostBufferSizeMode ) + { + case paUtilFixedHostBufferSize: + PA_DEBUG(( "[fixed] " )); + break; + case paUtilBoundedHostBufferSize: + PA_DEBUG(( "[bounded] " )); + break; + case paUtilUnknownHostBufferSize: + PA_DEBUG(( "[unknown] " )); + break; + case paUtilVariableHostBufferSizePartialUsageAllowed: + PA_DEBUG(( "[variable] " )); + break; + } + PA_DEBUG(( "(%d max)\n", streamComp->tempBufferSize / streamComp->bytesPerFrame )); + /* HPI hardware settings */ + PA_DEBUG(( "HPI: adapter %d stream %d, %d-bit, %d-channel, %d Hz\n", + streamComp->hpiDevice->adapterIndex, streamComp->hpiDevice->streamIndex, + 8 * streamComp->bytesPerFrame / streamComp->hpiFormat.wChannels, + streamComp->hpiFormat.wChannels, + streamComp->hpiFormat.dwSampleRate )); + /* Stream state and buffer levels */ + PA_DEBUG(( "HPI: " )); + PaAsiHpi_GetStreamInfo( streamComp, &streamInfo ); + switch( streamInfo.state ) + { + case HPI_STATE_STOPPED: + PA_DEBUG(( "[STOPPED] " )); + break; + case HPI_STATE_PLAYING: + PA_DEBUG(( "[PLAYING] " )); + break; + case HPI_STATE_RECORDING: + PA_DEBUG(( "[RECORDING] " )); + break; + case HPI_STATE_DRAINED: + PA_DEBUG(( "[DRAINED] " )); + break; + default: + PA_DEBUG(( "[unknown state] " )); + break; + } + if( streamComp->hostBufferSize ) + { + PA_DEBUG(( "host = %d/%d B, ", streamInfo.dataSize, streamComp->hostBufferSize )); + PA_DEBUG(( "hw = %d/%d (%d) B, ", streamInfo.auxDataSize, + streamComp->hardwareBufferSize, streamComp->outputBufferCap )); + } + else + { + PA_DEBUG(( "hw = %d/%d B, ", streamInfo.dataSize, streamComp->hardwareBufferSize )); + } + PA_DEBUG(( "count = %d", streamInfo.frameCounter )); + if( streamInfo.overflow ) + { + PA_DEBUG(( " [overflow]" )); + } + else if( streamInfo.underflow ) + { + PA_DEBUG(( " [underflow]" )); + } + PA_DEBUG(( "\n" )); +} + + +/** Display stream information for debugging purposes. + + @param stream Pointer to stream to query + */ +static void PaAsiHpi_StreamDump( PaAsiHpiStream *stream ) +{ + assert( stream ); + + PA_DEBUG(( "\n------------------------- STREAM INFO FOR %p ---------------------------\n", stream )); + /* General stream info (input+output) */ + if( stream->baseStreamRep.streamCallback ) + { + PA_DEBUG(( "[callback] " )); + } + else + { + PA_DEBUG(( "[blocking] " )); + } + PA_DEBUG(( "sr=%d Hz, poll=%d ms, max %d frames/buf ", + (int)stream->baseStreamRep.streamInfo.sampleRate, + stream->pollingInterval, stream->maxFramesPerHostBuffer )); + switch( stream->state ) + { + case paAsiHpiStoppedState: + PA_DEBUG(( "[stopped]\n" )); + break; + case paAsiHpiActiveState: + PA_DEBUG(( "[active]\n" )); + break; + case paAsiHpiCallbackFinishedState: + PA_DEBUG(( "[cb fin]\n" )); + break; + default: + PA_DEBUG(( "[unknown state]\n" )); + break; + } + if( stream->callbackMode ) + { + PA_DEBUG(( "cb info: thread=%p, cbAbort=%d, cbFinished=%d\n", + stream->thread.thread, stream->callbackAbort, stream->callbackFinished )); + } + + PA_DEBUG(( "----------------------------------- Input ------------------------------------\n" )); + if( stream->input ) + { + PaAsiHpi_StreamComponentDump( stream->input, stream ); + } + else + { + PA_DEBUG(( "*none*\n" )); + } + + PA_DEBUG(( "----------------------------------- Output ------------------------------------\n" )); + if( stream->output ) + { + PaAsiHpi_StreamComponentDump( stream->output, stream ); + } + else + { + PA_DEBUG(( "*none*\n" )); + } + PA_DEBUG(( "-------------------------------------------------------------------------------\n\n" )); + +} + + +/** Determine buffer sizes and allocate appropriate stream buffers. + This attempts to allocate a BBM (host) buffer for the HPI stream component (either input + or output, as both have similar buffer needs). Not all AudioScience adapters support BBM, + in which case the hardware buffer has to suffice. The size of the HPI host buffer is chosen + as a multiple of framesPerPaHostBuffer, and also influenced by the suggested latency and the + estimated minimum polling interval. The HPI host and hardware buffer sizes are stored, and an + appropriate cap for the hardware buffer is also calculated. Finally, the temporary stream + buffer which serves as the PortAudio host buffer for this implementation is allocated. + This buffer contains an integer number of user buffers, to simplify buffer adaption in the + buffer processor. The function returns paBufferTooBig if the HPI interface cannot allocate + an HPI host buffer of the desired size. + + @param streamComp Pointer to stream component struct + + @param pollingInterval Polling interval for stream, in milliseconds + + @param framesPerPaHostBuffer Size of PortAudio host buffer, in frames + + @param suggestedLatency Suggested latency for stream component, in seconds + + @return PortAudio error code (possibly paBufferTooBig or paInsufficientMemory) + */ +static PaError PaAsiHpi_SetupBuffers( PaAsiHpiStreamComponent *streamComp, uint32_t pollingInterval, + unsigned long framesPerPaHostBuffer, PaTime suggestedLatency ) +{ + PaError result = paNoError; + PaAsiHpiStreamInfo streamInfo; + unsigned long hpiBufferSize = 0, paHostBufferSize = 0; + + assert( streamComp ); + assert( streamComp->hpiDevice ); + + /* Obtain size of hardware buffer of HPI stream, since we will be activating BBM shortly + and afterwards the buffer size will refer to the BBM (host-side) buffer. + This is necessary to enable reliable detection of xruns. */ + PA_ENSURE_( PaAsiHpi_GetStreamInfo( streamComp, &streamInfo ) ); + streamComp->hardwareBufferSize = streamInfo.bufferSize; + hpiBufferSize = streamInfo.bufferSize; + + /* Check if BBM (background bus mastering) is to be enabled */ + if( PA_ASIHPI_USE_BBM_ ) + { + uint32_t bbmBufferSize = 0, preLatencyBufferSize = 0; + hpi_err_t hpiError = 0; + PaTime pollingOverhead; + + /* Check overhead of Pa_Sleep() call (minimum sleep duration in ms -> OS dependent) */ + pollingOverhead = PaUtil_GetTime(); + Pa_Sleep( 0 ); + pollingOverhead = 1000*(PaUtil_GetTime() - pollingOverhead); + PA_DEBUG(( "polling overhead = %f ms (length of 0-second sleep)\n", pollingOverhead )); + /* Obtain minimum recommended size for host buffer (in bytes) */ + PA_ASIHPI_UNLESS_( HPI_StreamEstimateBufferSize( &streamComp->hpiFormat, + pollingInterval + (uint32_t)ceil( pollingOverhead ), + &bbmBufferSize ), paUnanticipatedHostError ); + /* BBM places more stringent requirements on buffer size (see description */ + /* of HPI_StreamEstimateBufferSize in HPI API document) */ + bbmBufferSize *= 3; + /* Make sure the BBM buffer contains multiple PA host buffers */ + if( bbmBufferSize < 3 * streamComp->bytesPerFrame * framesPerPaHostBuffer ) + bbmBufferSize = 3 * streamComp->bytesPerFrame * framesPerPaHostBuffer; + /* Try to honor latency suggested by user by growing buffer (no decrease possible) */ + if( suggestedLatency > 0.0 ) + { + PaTime bufferDuration = ((PaTime)bbmBufferSize) / streamComp->bytesPerFrame + / streamComp->hpiFormat.dwSampleRate; + /* Don't decrease buffer */ + if( bufferDuration < suggestedLatency ) + { + /* Save old buffer size, to be retried if new size proves too big */ + preLatencyBufferSize = bbmBufferSize; + bbmBufferSize = (uint32_t)ceil( suggestedLatency * streamComp->bytesPerFrame + * streamComp->hpiFormat.dwSampleRate ); + } + } + /* Choose closest memory block boundary (HPI API document states that + "a buffer size of Nx4096 - 20 makes the best use of memory" + (under the entry for HPI_StreamEstimateBufferSize)) */ + bbmBufferSize = ((uint32_t)ceil((bbmBufferSize + 20)/4096.0))*4096 - 20; + streamComp->hostBufferSize = bbmBufferSize; + /* Allocate BBM host buffer (this enables bus mastering transfers in background) */ + if( streamComp->hpiDevice->streamIsOutput ) + hpiError = HPI_OutStreamHostBufferAllocate( NULL, + streamComp->hpiStream, + bbmBufferSize ); + else + hpiError = HPI_InStreamHostBufferAllocate( NULL, + streamComp->hpiStream, + bbmBufferSize ); + if( hpiError ) + { + /* Indicate that BBM is disabled */ + streamComp->hostBufferSize = 0; + /* Retry with smaller buffer size (transfers will still work, but not via BBM) */ + if( hpiError == HPI_ERROR_INVALID_DATASIZE ) + { + /* Retry BBM allocation with smaller size if requested latency proved too big */ + if( preLatencyBufferSize > 0 ) + { + PA_DEBUG(( "Retrying BBM allocation with smaller size (%d vs. %d bytes)\n", + preLatencyBufferSize, bbmBufferSize )); + bbmBufferSize = preLatencyBufferSize; + if( streamComp->hpiDevice->streamIsOutput ) + hpiError = HPI_OutStreamHostBufferAllocate( NULL, + streamComp->hpiStream, + bbmBufferSize ); + else + hpiError = HPI_InStreamHostBufferAllocate( NULL, + streamComp->hpiStream, + bbmBufferSize ); + /* Another round of error checking */ + if( hpiError ) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + /* No escapes this time */ + if( hpiError == HPI_ERROR_INVALID_DATASIZE ) + { + result = paBufferTooBig; + goto error; + } + else if( hpiError != HPI_ERROR_INVALID_OPERATION ) + { + result = paUnanticipatedHostError; + goto error; + } + } + else + { + streamComp->hostBufferSize = bbmBufferSize; + hpiBufferSize = bbmBufferSize; + } + } + else + { + result = paBufferTooBig; + goto error; + } + } + /* If BBM not supported, foreground transfers will be used, but not a show-stopper */ + /* Anything else is an error */ + else if (( hpiError != HPI_ERROR_INVALID_OPERATION ) && + ( hpiError != HPI_ERROR_INVALID_FUNC )) + { + PA_ASIHPI_REPORT_ERROR_( hpiError ); + result = paUnanticipatedHostError; + goto error; + } + } + else + { + hpiBufferSize = bbmBufferSize; + } + } + + /* Final check of buffer size */ + paHostBufferSize = streamComp->bytesPerFrame * framesPerPaHostBuffer; + if( hpiBufferSize < 3*paHostBufferSize ) + { + result = paBufferTooBig; + goto error; + } + /* Set cap on output buffer size, based on latency suggestions */ + if( streamComp->hpiDevice->streamIsOutput ) + { + PaTime latency = suggestedLatency > 0.0 ? suggestedLatency : + streamComp->hpiDevice->baseDeviceInfo.defaultHighOutputLatency; + streamComp->outputBufferCap = + (uint32_t)ceil( latency * streamComp->bytesPerFrame * streamComp->hpiFormat.dwSampleRate ); + /* The cap should not be too small, to prevent underflow */ + if( streamComp->outputBufferCap < 4*paHostBufferSize ) + streamComp->outputBufferCap = 4*paHostBufferSize; + } + else + { + streamComp->outputBufferCap = 0; + } + /* Temp buffer size should be multiple of PA host buffer size (or 1x, if using fixed blocks) */ + streamComp->tempBufferSize = paHostBufferSize; + /* Allocate temp buffer */ + PA_UNLESS_( streamComp->tempBuffer = (uint8_t *)PaUtil_AllocateMemory( streamComp->tempBufferSize ), + paInsufficientMemory ); +error: + return result; +} + + +/** Opens PortAudio stream. + This determines a suitable value for framesPerBuffer, if the user didn't specify it, + based on the suggested latency. It then opens each requested stream direction with the + appropriate stream format, and allocates the required stream buffers. It sets up the + various PortAudio structures dealing with streams, and estimates the stream latency. + + See pa_hostapi.h for a list of validity guarantees made about OpenStream parameters. + + @param hostApi Pointer to host API struct + + @param s List of open streams, where successfully opened stream will go + + @param inputParameters Pointer to stream parameter struct for input side of stream + + @param outputParameters Pointer to stream parameter struct for output side of stream + + @param sampleRate Desired sample rate + + @param framesPerBuffer Desired number of frames per buffer passed to user callback + (or chunk size for blocking stream) + + @param streamFlags Stream flags + + @param streamCallback Pointer to user callback function (zero for blocking interface) + + @param userData Pointer to user data that will be passed to callback function along with data + + @return PortAudio error code +*/ +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream **s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + PaAsiHpiHostApiRepresentation *hpiHostApi = (PaAsiHpiHostApiRepresentation*)hostApi; + PaAsiHpiStream *stream = NULL; + unsigned long framesPerHostBuffer = framesPerBuffer; + int inputChannelCount = 0, outputChannelCount = 0; + PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0; + PaSampleFormat hostInputSampleFormat = 0, hostOutputSampleFormat = 0; + PaTime maxSuggestedLatency = 0.0; + + /* Validate platform-specific flags -> none expected for HPI */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform-specific flag */ + + /* Create blank stream structure */ + PA_UNLESS_( stream = (PaAsiHpiStream *)PaUtil_AllocateMemory( sizeof(PaAsiHpiStream) ), + paInsufficientMemory ); + memset( stream, 0, sizeof(PaAsiHpiStream) ); + + /* If the number of frames per buffer is unspecified, we have to come up with one. */ + if( framesPerHostBuffer == paFramesPerBufferUnspecified ) + { + if( inputParameters ) + maxSuggestedLatency = inputParameters->suggestedLatency; + if( outputParameters && (outputParameters->suggestedLatency > maxSuggestedLatency) ) + maxSuggestedLatency = outputParameters->suggestedLatency; + /* Use suggested latency if available */ + if( maxSuggestedLatency > 0.0 ) + framesPerHostBuffer = (unsigned long)ceil( maxSuggestedLatency * sampleRate ); + else + /* AudioScience cards like BIG buffers by default */ + framesPerHostBuffer = 4096; + } + /* Lower bounds on host buffer size, due to polling and HPI constraints */ + if( 1000.0*framesPerHostBuffer/sampleRate < PA_ASIHPI_MIN_POLLING_INTERVAL_ ) + framesPerHostBuffer = (unsigned long)ceil( sampleRate * PA_ASIHPI_MIN_POLLING_INTERVAL_ / 1000.0 ); + /* if( framesPerHostBuffer < PA_ASIHPI_MIN_FRAMES_ ) + framesPerHostBuffer = PA_ASIHPI_MIN_FRAMES_; */ + /* Efficient if host buffer size is integer multiple of user buffer size */ + if( framesPerBuffer > 0 ) + framesPerHostBuffer = (unsigned long)ceil( (double)framesPerHostBuffer / framesPerBuffer ) * framesPerBuffer; + /* Buffer should always be a multiple of 4 bytes to facilitate 32-bit PCI transfers. + By keeping the frames a multiple of 4, this is ensured even for 8-bit mono sound. */ + framesPerHostBuffer = (framesPerHostBuffer / 4) * 4; + /* Polling is based on time length (in milliseconds) of user-requested block size */ + stream->pollingInterval = (uint32_t)ceil( 1000.0*framesPerHostBuffer/sampleRate ); + assert( framesPerHostBuffer > 0 ); + + /* Open underlying streams, check formats and allocate buffers */ + if( inputParameters ) + { + /* Create blank stream component structure */ + PA_UNLESS_( stream->input = (PaAsiHpiStreamComponent *)PaUtil_AllocateMemory( sizeof(PaAsiHpiStreamComponent) ), + paInsufficientMemory ); + memset( stream->input, 0, sizeof(PaAsiHpiStreamComponent) ); + /* Create/validate format */ + PA_ENSURE_( PaAsiHpi_CreateFormat( hostApi, inputParameters, sampleRate, + &stream->input->hpiDevice, &stream->input->hpiFormat ) ); + /* Open stream and set format */ + PA_ENSURE_( PaAsiHpi_OpenInput( hostApi, stream->input->hpiDevice, &stream->input->hpiFormat, + &stream->input->hpiStream ) ); + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + hostInputSampleFormat = PaAsiHpi_HpiToPaFormat( stream->input->hpiFormat.wFormat ); + stream->input->bytesPerFrame = inputChannelCount * Pa_GetSampleSize( hostInputSampleFormat ); + assert( stream->input->bytesPerFrame > 0 ); + /* Allocate host and temp buffers of appropriate size */ + PA_ENSURE_( PaAsiHpi_SetupBuffers( stream->input, stream->pollingInterval, + framesPerHostBuffer, inputParameters->suggestedLatency ) ); + } + if( outputParameters ) + { + /* Create blank stream component structure */ + PA_UNLESS_( stream->output = (PaAsiHpiStreamComponent *)PaUtil_AllocateMemory( sizeof(PaAsiHpiStreamComponent) ), + paInsufficientMemory ); + memset( stream->output, 0, sizeof(PaAsiHpiStreamComponent) ); + /* Create/validate format */ + PA_ENSURE_( PaAsiHpi_CreateFormat( hostApi, outputParameters, sampleRate, + &stream->output->hpiDevice, &stream->output->hpiFormat ) ); + /* Open stream and check format */ + PA_ENSURE_( PaAsiHpi_OpenOutput( hostApi, stream->output->hpiDevice, + &stream->output->hpiFormat, + &stream->output->hpiStream ) ); + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + hostOutputSampleFormat = PaAsiHpi_HpiToPaFormat( stream->output->hpiFormat.wFormat ); + stream->output->bytesPerFrame = outputChannelCount * Pa_GetSampleSize( hostOutputSampleFormat ); + /* Allocate host and temp buffers of appropriate size */ + PA_ENSURE_( PaAsiHpi_SetupBuffers( stream->output, stream->pollingInterval, + framesPerHostBuffer, outputParameters->suggestedLatency ) ); + } + + /* Determine maximum frames per host buffer (least common denominator of input/output) */ + if( inputParameters && outputParameters ) + { + stream->maxFramesPerHostBuffer = PA_MIN( stream->input->tempBufferSize / stream->input->bytesPerFrame, + stream->output->tempBufferSize / stream->output->bytesPerFrame ); + } + else + { + stream->maxFramesPerHostBuffer = inputParameters ? stream->input->tempBufferSize / stream->input->bytesPerFrame + : stream->output->tempBufferSize / stream->output->bytesPerFrame; + } + assert( stream->maxFramesPerHostBuffer > 0 ); + /* Initialize various other stream parameters */ + stream->neverDropInput = streamFlags & paNeverDropInput; + stream->state = paAsiHpiStoppedState; + + /* Initialize either callback or blocking interface */ + if( streamCallback ) + { + PaUtil_InitializeStreamRepresentation( &stream->baseStreamRep, + &hpiHostApi->callbackStreamInterface, + streamCallback, userData ); + stream->callbackMode = 1; + } + else + { + PaUtil_InitializeStreamRepresentation( &stream->baseStreamRep, + &hpiHostApi->blockingStreamInterface, + streamCallback, userData ); + /* Pre-allocate non-interleaved user buffer pointers for blocking interface */ + PA_UNLESS_( stream->blockingUserBufferCopy = + PaUtil_AllocateMemory( sizeof(void *) * PA_MAX( inputChannelCount, outputChannelCount ) ), + paInsufficientMemory ); + stream->callbackMode = 0; + } + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + /* Following pa_linux_alsa's lead, we operate with fixed host buffer size by default, */ + /* since other modes will invariably lead to block adaption (maybe Bounded better?) */ + PA_ENSURE_( PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + inputChannelCount, inputSampleFormat, hostInputSampleFormat, + outputChannelCount, outputSampleFormat, hostOutputSampleFormat, + sampleRate, streamFlags, + framesPerBuffer, framesPerHostBuffer, paUtilFixedHostBufferSize, + streamCallback, userData ) ); + + stream->baseStreamRep.streamInfo.structVersion = 1; + stream->baseStreamRep.streamInfo.sampleRate = sampleRate; + /* Determine input latency from buffer processor and buffer sizes */ + if( stream->input ) + { + PaTime bufferDuration = ( stream->input->hostBufferSize + stream->input->hardwareBufferSize ) + / sampleRate / stream->input->bytesPerFrame; + stream->baseStreamRep.streamInfo.inputLatency = + bufferDuration + + ((PaTime)PaUtil_GetBufferProcessorInputLatencyFrames( &stream->bufferProcessor ) - + stream->maxFramesPerHostBuffer) / sampleRate; + assert( stream->baseStreamRep.streamInfo.inputLatency > 0.0 ); + } + /* Determine output latency from buffer processor and buffer sizes */ + if( stream->output ) + { + PaTime bufferDuration = ( stream->output->hostBufferSize + stream->output->hardwareBufferSize ) + / sampleRate / stream->output->bytesPerFrame; + /* Take buffer size cap into account (see PaAsiHpi_WaitForFrames) */ + if( !stream->input && (stream->output->outputBufferCap > 0) ) + { + bufferDuration = PA_MIN( bufferDuration, + stream->output->outputBufferCap / sampleRate / stream->output->bytesPerFrame ); + } + stream->baseStreamRep.streamInfo.outputLatency = + bufferDuration + + ((PaTime)PaUtil_GetBufferProcessorOutputLatencyFrames( &stream->bufferProcessor ) - + stream->maxFramesPerHostBuffer) / sampleRate; + assert( stream->baseStreamRep.streamInfo.outputLatency > 0.0 ); + } + + /* Report stream info, for debugging purposes */ + PaAsiHpi_StreamDump( stream ); + + /* Save initialized stream to PA stream list */ + *s = (PaStream*)stream; + return result; + +error: + CloseStream( (PaStream*)stream ); + return result; +} + + +/** Close PortAudio stream. + When CloseStream() is called, the multi-api layer ensures that the stream has already + been stopped or aborted. This closes the underlying HPI streams and deallocates stream + buffers and structs. + + @param s Pointer to PortAudio stream + + @return PortAudio error code +*/ +static PaError CloseStream( PaStream *s ) +{ + PaError result = paNoError; + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + + /* If stream is already gone, all is well */ + if( stream == NULL ) + return paNoError; + + /* Generic stream cleanup */ + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaUtil_TerminateStreamRepresentation( &stream->baseStreamRep ); + + /* Implementation-specific details - close internal streams */ + if( stream->input ) + { + /* Close HPI stream (freeing BBM host buffer in the process, if used) */ + if( stream->input->hpiStream ) + { + PA_ASIHPI_UNLESS_( HPI_InStreamClose( NULL, + stream->input->hpiStream ), paUnanticipatedHostError ); + } + /* Free temp buffer and stream component */ + PaUtil_FreeMemory( stream->input->tempBuffer ); + PaUtil_FreeMemory( stream->input ); + } + if( stream->output ) + { + /* Close HPI stream (freeing BBM host buffer in the process, if used) */ + if( stream->output->hpiStream ) + { + PA_ASIHPI_UNLESS_( HPI_OutStreamClose( NULL, + stream->output->hpiStream ), paUnanticipatedHostError ); + } + /* Free temp buffer and stream component */ + PaUtil_FreeMemory( stream->output->tempBuffer ); + PaUtil_FreeMemory( stream->output ); + } + + PaUtil_FreeMemory( stream->blockingUserBufferCopy ); + PaUtil_FreeMemory( stream ); + +error: + return result; +} + + +/** Prime HPI output stream with silence. + This resets the output stream and uses PortAudio helper routines to fill the + temp buffer with silence. It then writes two host buffers to the stream. This is supposed + to be called before the stream is started. It has no effect on input-only streams. + + @param stream Pointer to stream struct + + @return PortAudio error code + */ +static PaError PaAsiHpi_PrimeOutputWithSilence( PaAsiHpiStream *stream ) +{ + PaError result = paNoError; + PaAsiHpiStreamComponent *out; + PaUtilZeroer *zeroer; + PaSampleFormat outputFormat; + assert( stream ); + out = stream->output; + /* Only continue if stream has output channels */ + if( !out ) + return result; + assert( out->tempBuffer ); + + /* Clear all existing data in hardware playback buffer */ + PA_ASIHPI_UNLESS_( HPI_OutStreamReset( NULL, + out->hpiStream ), paUnanticipatedHostError ); + /* Fill temp buffer with silence */ + outputFormat = PaAsiHpi_HpiToPaFormat( out->hpiFormat.wFormat ); + zeroer = PaUtil_SelectZeroer( outputFormat ); + zeroer(out->tempBuffer, 1, out->tempBufferSize / Pa_GetSampleSize(outputFormat) ); + /* Write temp buffer to hardware fifo twice, to get started */ + PA_ASIHPI_UNLESS_( HPI_OutStreamWriteBuf( NULL, out->hpiStream, + out->tempBuffer, out->tempBufferSize, &out->hpiFormat), + paUnanticipatedHostError ); + PA_ASIHPI_UNLESS_( HPI_OutStreamWriteBuf( NULL, out->hpiStream, + out->tempBuffer, out->tempBufferSize, &out->hpiFormat), + paUnanticipatedHostError ); +error: + return result; +} + + +/** Start HPI streams (both input + output). + This starts all HPI streams in the PortAudio stream. Output streams are first primed with + silence, if required. After this call the PA stream is in the Active state. + + @todo Implement priming via the user callback + + @param stream Pointer to stream struct + + @param outputPrimed True if output is already primed (if false, silence will be loaded before starting) + + @return PortAudio error code + */ +static PaError PaAsiHpi_StartStream( PaAsiHpiStream *stream, int outputPrimed ) +{ + PaError result = paNoError; + + if( stream->input ) + { + PA_ASIHPI_UNLESS_( HPI_InStreamStart( NULL, + stream->input->hpiStream ), paUnanticipatedHostError ); + } + if( stream->output ) + { + if( !outputPrimed ) + { + /* Buffer isn't primed, so load stream with silence */ + PA_ENSURE_( PaAsiHpi_PrimeOutputWithSilence( stream ) ); + } + PA_ASIHPI_UNLESS_( HPI_OutStreamStart( NULL, + stream->output->hpiStream ), paUnanticipatedHostError ); + } + stream->state = paAsiHpiActiveState; + stream->callbackFinished = 0; + + /* Report stream info for debugging purposes */ + /* PaAsiHpi_StreamDump( stream ); */ + +error: + return result; +} + + +/** Start PortAudio stream. + If the stream has a callback interface, this starts a helper thread to feed the user callback. + The thread will then take care of starting the HPI streams, and this function will block + until the streams actually start. In the case of a blocking interface, the HPI streams + are simply started. + + @param s Pointer to PortAudio stream + + @return PortAudio error code +*/ +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + + assert( stream ); + + /* Ready the processor */ + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + + if( stream->callbackMode ) + { + /* Create and start callback engine thread */ + /* Also waits 1 second for stream to be started by engine thread (otherwise aborts) */ + PA_ENSURE_( PaUnixThread_New( &stream->thread, &CallbackThreadFunc, stream, 1., 0 /*rtSched*/ ) ); + } + else + { + PA_ENSURE_( PaAsiHpi_StartStream( stream, 0 ) ); + } + +error: + return result; +} + + +/** Stop HPI streams (input + output), either softly or abruptly. + If abort is false, the function blocks until the output stream is drained, otherwise it + stops immediately and discards data in the stream hardware buffers. + + This function is safe to call from the callback engine thread as well as the main thread. + + @param stream Pointer to stream struct + + @param abort True if samples in output buffer should be discarded (otherwise blocks until stream is done) + + @return PortAudio error code + + */ +static PaError PaAsiHpi_StopStream( PaAsiHpiStream *stream, int abort ) +{ + PaError result = paNoError; + + assert( stream ); + + /* Input channels */ + if( stream->input ) + { + PA_ASIHPI_UNLESS_( HPI_InStreamReset( NULL, + stream->input->hpiStream ), paUnanticipatedHostError ); + } + /* Output channels */ + if( stream->output ) + { + if( !abort ) + { + /* Wait until HPI output stream is drained */ + while( 1 ) + { + PaAsiHpiStreamInfo streamInfo; + PaTime timeLeft; + + /* Obtain number of samples waiting to be played */ + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->output, &streamInfo ) ); + /* Check if stream is drained */ + if( (streamInfo.state != HPI_STATE_PLAYING) && + (streamInfo.dataSize < stream->output->bytesPerFrame * PA_ASIHPI_MIN_FRAMES_) ) + break; + /* Sleep amount of time represented by remaining samples */ + timeLeft = 1000.0 * streamInfo.dataSize / stream->output->bytesPerFrame + / stream->baseStreamRep.streamInfo.sampleRate; + Pa_Sleep( (long)ceil( timeLeft ) ); + } + } + PA_ASIHPI_UNLESS_( HPI_OutStreamReset( NULL, + stream->output->hpiStream ), paUnanticipatedHostError ); + } + + /* Report stream info for debugging purposes */ + /* PaAsiHpi_StreamDump( stream ); */ + +error: + return result; +} + + +/** Stop or abort PortAudio stream. + + This function is used to explicitly stop the PortAudio stream (via StopStream/AbortStream), + as opposed to the situation when the callback finishes with a result other than paContinue. + If a stream is in callback mode we will have to inspect whether the background thread has + finished, or we will have to take it out. In either case we join the thread before returning. + In blocking mode, we simply tell HPI to stop abruptly (abort) or finish buffers (drain). + The PortAudio stream will be in the Stopped state after a call to this function. + + Don't call this from the callback engine thread! + + @param stream Pointer to stream struct + + @param abort True if samples in output buffer should be discarded (otherwise blocks until stream is done) + + @return PortAudio error code +*/ +static PaError PaAsiHpi_ExplicitStop( PaAsiHpiStream *stream, int abort ) +{ + PaError result = paNoError; + + /* First deal with the callback thread, cancelling and/or joining it if necessary */ + if( stream->callbackMode ) + { + PaError threadRes; + stream->callbackAbort = abort; + if( abort ) + { + PA_DEBUG(( "Aborting callback\n" )); + } + else + { + PA_DEBUG(( "Stopping callback\n" )); + } + PA_ENSURE_( PaUnixThread_Terminate( &stream->thread, !abort, &threadRes ) ); + if( threadRes != paNoError ) + { + PA_DEBUG(( "Callback thread returned: %d\n", threadRes )); + } + } + else + { + PA_ENSURE_( PaAsiHpi_StopStream( stream, abort ) ); + } + + stream->state = paAsiHpiStoppedState; + +error: + return result; +} + + +/** Stop PortAudio stream. + This blocks until the output buffers are drained. + + @param s Pointer to PortAudio stream + + @return PortAudio error code +*/ +static PaError StopStream( PaStream *s ) +{ + return PaAsiHpi_ExplicitStop( (PaAsiHpiStream *) s, 0 ); +} + + +/** Abort PortAudio stream. + This discards any existing data in output buffers and stops the stream immediately. + + @param s Pointer to PortAudio stream + + @return PortAudio error code +*/ +static PaError AbortStream( PaStream *s ) +{ + return PaAsiHpi_ExplicitStop( (PaAsiHpiStream * ) s, 1 ); +} + + +/** Determine whether the stream is stopped. + A stream is considered to be stopped prior to a successful call to StartStream and after + a successful call to StopStream or AbortStream. If a stream callback returns a value other + than paContinue the stream is NOT considered to be stopped (it is in CallbackFinished state). + + @param s Pointer to PortAudio stream + + @return Returns one (1) when the stream is stopped, zero (0) when the stream is running, or + a PaErrorCode (which are always negative) if PortAudio is not initialized or an + error is encountered. +*/ +static PaError IsStreamStopped( PaStream *s ) +{ + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + + assert( stream ); + return stream->state == paAsiHpiStoppedState ? 1 : 0; +} + + +/** Determine whether the stream is active. + A stream is active after a successful call to StartStream(), until it becomes inactive either + as a result of a call to StopStream() or AbortStream(), or as a result of a return value + other than paContinue from the stream callback. In the latter case, the stream is considered + inactive after the last buffer has finished playing. + + @param s Pointer to PortAudio stream + + @return Returns one (1) when the stream is active (i.e. playing or recording audio), + zero (0) when not playing, or a PaErrorCode (which are always negative) + if PortAudio is not initialized or an error is encountered. +*/ +static PaError IsStreamActive( PaStream *s ) +{ + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + + assert( stream ); + return stream->state == paAsiHpiActiveState ? 1 : 0; +} + + +/** Returns current stream time. + This corresponds to the system clock. The clock should run continuously while the stream + is open, i.e. between calls to OpenStream() and CloseStream(), therefore a frame counter + is not good enough. + + @param s Pointer to PortAudio stream + + @return Stream time, in seconds + */ +static PaTime GetStreamTime( PaStream *s ) +{ + return PaUtil_GetTime(); +} + + +/** Returns CPU load. + + @param s Pointer to PortAudio stream + + @return CPU load (0.0 if blocking interface is used) + */ +static double GetStreamCpuLoad( PaStream *s ) +{ + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + + return stream->callbackMode ? PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ) : 0.0; +} + +/* --------------------------- Callback Interface --------------------------- */ + +/** Exit routine which is called when callback thread quits. + This takes care of stopping the HPI streams (either waiting for output to finish, or + abruptly). It also calls the user-supplied StreamFinished callback, and sets the + stream state to CallbackFinished if it was reached via a non-paContinue return from + the user callback function. + + @param userData A pointer to an open stream previously created with Pa_OpenStream + */ +static void PaAsiHpi_OnThreadExit( void *userData ) +{ + PaAsiHpiStream *stream = (PaAsiHpiStream *) userData; + + assert( stream ); + + PaUtil_ResetCpuLoadMeasurer( &stream->cpuLoadMeasurer ); + + PA_DEBUG(( "%s: Stopping HPI streams\n", __FUNCTION__ )); + PaAsiHpi_StopStream( stream, stream->callbackAbort ); + PA_DEBUG(( "%s: Stoppage\n", __FUNCTION__ )); + + /* Eventually notify user all buffers have played */ + if( stream->baseStreamRep.streamFinishedCallback ) + { + stream->baseStreamRep.streamFinishedCallback( stream->baseStreamRep.userData ); + } + + /* Unfortunately both explicit calls to Stop/AbortStream (leading to Stopped state) + and implicit stops via paComplete/paAbort (leading to CallbackFinished state) + end up here - need another flag to remind us which is the case */ + if( stream->callbackFinished ) + stream->state = paAsiHpiCallbackFinishedState; +} + + +/** Wait until there is enough frames to fill a host buffer. + The routine attempts to sleep until at least a full host buffer can be retrieved from the + input HPI stream and passed to the output HPI stream. It will first sleep until enough + output space is available, as this is usually easily achievable. If it is an output-only + stream, it will also sleep if the hardware buffer is too full, thereby throttling the + filling of the output buffer and reducing output latency. The routine then blocks until + enough input samples are available, unless this will cause an output underflow. In the + process, input overflows and output underflows are indicated. + + @param stream Pointer to stream struct + + @param framesAvail Returns the number of available frames + + @param cbFlags Overflows and underflows indicated in here + + @return PortAudio error code (only paUnanticipatedHostError expected) + */ +static PaError PaAsiHpi_WaitForFrames( PaAsiHpiStream *stream, unsigned long *framesAvail, + PaStreamCallbackFlags *cbFlags ) +{ + PaError result = paNoError; + double sampleRate; + unsigned long framesTarget; + uint32_t outputData = 0, outputSpace = 0, inputData = 0, framesLeft = 0; + + assert( stream ); + assert( stream->input || stream->output ); + + sampleRate = stream->baseStreamRep.streamInfo.sampleRate; + /* We have to come up with this much frames on both input and output */ + framesTarget = stream->bufferProcessor.framesPerHostBuffer; + assert( framesTarget > 0 ); + + while( 1 ) + { + PaAsiHpiStreamInfo info; + /* Check output first, as this takes priority in the default full-duplex mode */ + if( stream->output ) + { + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->output, &info ) ); + /* Wait until enough space is available in output buffer to receive a full block */ + if( info.availableFrames < framesTarget ) + { + framesLeft = framesTarget - info.availableFrames; + Pa_Sleep( (long)ceil( 1000 * framesLeft / sampleRate ) ); + continue; + } + /* Wait until the data in hardware buffer has dropped to a sensible level. + Without this, the hardware buffer quickly fills up in the absence of an input + stream to regulate its data rate (if data generation is fast). This leads to + large latencies, as the AudioScience hardware buffers are humongous. + This is similar to the default "Hardware Buffering=off" option in the + AudioScience WAV driver. */ + if( !stream->input && (stream->output->outputBufferCap > 0) && + ( info.totalBufferedData > stream->output->outputBufferCap / stream->output->bytesPerFrame ) ) + { + framesLeft = info.totalBufferedData - stream->output->outputBufferCap / stream->output->bytesPerFrame; + Pa_Sleep( (long)ceil( 1000 * framesLeft / sampleRate ) ); + continue; + } + outputData = info.totalBufferedData; + outputSpace = info.availableFrames; + /* Report output underflow to callback */ + if( info.underflow ) + { + *cbFlags |= paOutputUnderflow; + } + } + + /* Now check input side */ + if( stream->input ) + { + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->input, &info ) ); + /* If a full block of samples hasn't been recorded yet, wait for it if possible */ + if( info.availableFrames < framesTarget ) + { + framesLeft = framesTarget - info.availableFrames; + /* As long as output is not disrupted in the process, wait for a full + block of input samples */ + if( !stream->output || (outputData > framesLeft) ) + { + Pa_Sleep( (long)ceil( 1000 * framesLeft / sampleRate ) ); + continue; + } + } + inputData = info.availableFrames; + /** @todo The paInputOverflow flag should be set in the callback containing the + first input sample following the overflow. That means the block currently sitting + at the fore-front of recording, i.e. typically the one containing the newest (last) + sample in the HPI buffer system. This is most likely not the same as the current + block of data being passed to the callback. The current overflow should ideally + be noted in an overflow list of sorts, with an indication of when it should be + reported. The trouble starts if there are several separate overflow incidents, + given a big input buffer. Oh well, something to try out later... */ + if( info.overflow ) + { + *cbFlags |= paInputOverflow; + } + } + break; + } + /* Full-duplex stream */ + if( stream->input && stream->output ) + { + if( outputSpace >= framesTarget ) + *framesAvail = outputSpace; + /* If input didn't make the target, keep the output count instead (input underflow) */ + if( (inputData >= framesTarget) && (inputData < outputSpace) ) + *framesAvail = inputData; + } + else + { + *framesAvail = stream->input ? inputData : outputSpace; + } + +error: + return result; +} + + +/** Obtain recording, current and playback timestamps of stream. + The current time is determined by the system clock. This "now" timestamp occurs at the + forefront of recording (and playback in the full-duplex case), which happens later than the + input timestamp by an amount equal to the total number of recorded frames in the input buffer. + The output timestamp indicates when the next generated sample will actually be played. This + happens after all the samples currently in the output buffer are played. The output timestamp + therefore follows the current timestamp by an amount equal to the number of frames yet to be + played back in the output buffer. + + If the current timestamp is the present, the input timestamp is in the past and the output + timestamp is in the future. + + @param stream Pointer to stream struct + + @param timeInfo Pointer to timeInfo struct that will contain timestamps + */ +static void PaAsiHpi_CalculateTimeInfo( PaAsiHpiStream *stream, PaStreamCallbackTimeInfo *timeInfo ) +{ + PaAsiHpiStreamInfo streamInfo; + double sampleRate; + + assert( stream ); + assert( timeInfo ); + sampleRate = stream->baseStreamRep.streamInfo.sampleRate; + + /* The current time ("now") is at the forefront of both recording and playback */ + timeInfo->currentTime = GetStreamTime( (PaStream *)stream ); + /* The last sample in the input buffer was recorded just now, so the first sample + happened (number of recorded samples)/sampleRate ago */ + timeInfo->inputBufferAdcTime = timeInfo->currentTime; + if( stream->input ) + { + PaAsiHpi_GetStreamInfo( stream->input, &streamInfo ); + timeInfo->inputBufferAdcTime -= streamInfo.totalBufferedData / sampleRate; + } + /* The first of the outgoing samples will be played after all the samples in the output + buffer is done */ + timeInfo->outputBufferDacTime = timeInfo->currentTime; + if( stream->output ) + { + PaAsiHpi_GetStreamInfo( stream->output, &streamInfo ); + timeInfo->outputBufferDacTime += streamInfo.totalBufferedData / sampleRate; + } +} + + +/** Read from HPI input stream and register buffers. + This reads data from the HPI input stream (if it exists) and registers the temp stream + buffers of both input and output streams with the buffer processor. In the process it also + handles input underflows in the full-duplex case. + + @param stream Pointer to stream struct + + @param numFrames On entrance the number of available frames, on exit the number of + received frames + + @param cbFlags Indicates overflows and underflows + + @return PortAudio error code + */ +static PaError PaAsiHpi_BeginProcessing( PaAsiHpiStream *stream, unsigned long *numFrames, + PaStreamCallbackFlags *cbFlags ) +{ + PaError result = paNoError; + + assert( stream ); + if( *numFrames > stream->maxFramesPerHostBuffer ) + *numFrames = stream->maxFramesPerHostBuffer; + + if( stream->input ) + { + PaAsiHpiStreamInfo info; + + uint32_t framesToGet = *numFrames; + + /* Check for overflows and underflows yet again */ + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->input, &info ) ); + if( info.overflow ) + { + *cbFlags |= paInputOverflow; + } + /* Input underflow if less than expected number of samples pitch up */ + if( framesToGet > info.availableFrames ) + { + PaUtilZeroer *zeroer; + PaSampleFormat inputFormat; + + /* Never call an input-only stream with InputUnderflow set */ + if( stream->output ) + *cbFlags |= paInputUnderflow; + framesToGet = info.availableFrames; + /* Fill temp buffer with silence (to make up for missing input samples) */ + inputFormat = PaAsiHpi_HpiToPaFormat( stream->input->hpiFormat.wFormat ); + zeroer = PaUtil_SelectZeroer( inputFormat ); + zeroer(stream->input->tempBuffer, 1, + stream->input->tempBufferSize / Pa_GetSampleSize(inputFormat) ); + } + + /* Read block of data into temp buffer */ + PA_ASIHPI_UNLESS_( HPI_InStreamReadBuf( NULL, + stream->input->hpiStream, + stream->input->tempBuffer, + framesToGet * stream->input->bytesPerFrame), + paUnanticipatedHostError ); + /* Register temp buffer with buffer processor (always FULL buffer) */ + PaUtil_SetInputFrameCount( &stream->bufferProcessor, *numFrames ); + /* HPI interface only allows interleaved channels */ + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, + 0, stream->input->tempBuffer, + stream->input->hpiFormat.wChannels ); + } + if( stream->output ) + { + /* Register temp buffer with buffer processor */ + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, *numFrames ); + /* HPI interface only allows interleaved channels */ + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, + 0, stream->output->tempBuffer, + stream->output->hpiFormat.wChannels ); + } + +error: + return result; +} + + +/** Flush output buffers to HPI output stream. + This completes the processing cycle by writing the temp buffer to the HPI interface. + Additional output underflows are caught before data is written to the stream, as this + action typically remedies the underflow and hides it in the process. + + @param stream Pointer to stream struct + + @param numFrames The number of frames to write to the output stream + + @param cbFlags Indicates overflows and underflows + */ +static PaError PaAsiHpi_EndProcessing( PaAsiHpiStream *stream, unsigned long numFrames, + PaStreamCallbackFlags *cbFlags ) +{ + PaError result = paNoError; + + assert( stream ); + + if( stream->output ) + { + PaAsiHpiStreamInfo info; + /* Check for underflows after the (potentially time-consuming) callback */ + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->output, &info ) ); + if( info.underflow ) + { + *cbFlags |= paOutputUnderflow; + } + + /* Write temp buffer to HPI stream */ + PA_ASIHPI_UNLESS_( HPI_OutStreamWriteBuf( NULL, + stream->output->hpiStream, + stream->output->tempBuffer, + numFrames * stream->output->bytesPerFrame, + &stream->output->hpiFormat), + paUnanticipatedHostError ); + } + +error: + return result; +} + + +/** Main callback engine. + This function runs in a separate thread and does all the work of fetching audio data from + the AudioScience card via the HPI interface, feeding it to the user callback via the buffer + processor, and delivering the resulting output data back to the card via HPI calls. + It is started and terminated when the PortAudio stream is started and stopped, and starts + the HPI streams on startup. + + @param userData A pointer to an open stream previously created with Pa_OpenStream. +*/ +static void *CallbackThreadFunc( void *userData ) +{ + PaError result = paNoError; + PaAsiHpiStream *stream = (PaAsiHpiStream *) userData; + int callbackResult = paContinue; + + assert( stream ); + + /* Cleanup routine stops streams on thread exit */ + pthread_cleanup_push( &PaAsiHpi_OnThreadExit, stream ); + + /* Start HPI streams and notify parent when we're done */ + PA_ENSURE_( PaUnixThread_PrepareNotify( &stream->thread ) ); + /* Buffer will be primed with silence */ + PA_ENSURE_( PaAsiHpi_StartStream( stream, 0 ) ); + PA_ENSURE_( PaUnixThread_NotifyParent( &stream->thread ) ); + + /* MAIN LOOP */ + while( 1 ) + { + PaStreamCallbackFlags cbFlags = 0; + unsigned long framesAvail, framesGot; + + pthread_testcancel(); + + /** @concern StreamStop if the main thread has requested a stop and the stream has not + * been effectively stopped we signal this condition by modifying callbackResult + * (we'll want to flush buffered output). */ + if( PaUnixThread_StopRequested( &stream->thread ) && (callbackResult == paContinue) ) + { + PA_DEBUG(( "Setting callbackResult to paComplete\n" )); + callbackResult = paComplete; + } + + /* Start winding down thread if requested */ + if( callbackResult != paContinue ) + { + stream->callbackAbort = (callbackResult == paAbort); + if( stream->callbackAbort || + /** @concern BlockAdaption: Go on if adaption buffers are empty */ + PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) + { + goto end; + } + PA_DEBUG(( "%s: Flushing buffer processor\n", __FUNCTION__ )); + /* There is still buffered output that needs to be processed */ + } + + /* SLEEP */ + /* Wait for data (or buffer space) to become available. This basically sleeps and + polls the HPI interface until a full block of frames can be moved. */ + PA_ENSURE_( PaAsiHpi_WaitForFrames( stream, &framesAvail, &cbFlags ) ); + + /* Consume buffer space. Once we have a number of frames available for consumption we + must retrieve the data from the HPI interface and pass it to the PA buffer processor. + We should be prepared to process several chunks successively. */ + while( framesAvail > 0 ) + { + PaStreamCallbackTimeInfo timeInfo = {0, 0, 0}; + + pthread_testcancel(); + + framesGot = framesAvail; + if( stream->bufferProcessor.hostBufferSizeMode == paUtilFixedHostBufferSize ) + { + /* We've committed to a fixed host buffer size, stick to that */ + framesGot = framesGot >= stream->maxFramesPerHostBuffer ? stream->maxFramesPerHostBuffer : 0; + } + else + { + /* We've committed to an upper bound on the size of host buffers */ + assert( stream->bufferProcessor.hostBufferSizeMode == paUtilBoundedHostBufferSize ); + framesGot = PA_MIN( framesGot, stream->maxFramesPerHostBuffer ); + } + + /* Obtain buffer timestamps */ + PaAsiHpi_CalculateTimeInfo( stream, &timeInfo ); + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, cbFlags ); + /* CPU load measurement should include processing activivity external to the stream callback */ + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + if( framesGot > 0 ) + { + /* READ FROM HPI INPUT STREAM */ + PA_ENSURE_( PaAsiHpi_BeginProcessing( stream, &framesGot, &cbFlags ) ); + /* Input overflow in a full-duplex stream makes for interesting times */ + if( stream->input && stream->output && (cbFlags & paInputOverflow) ) + { + /* Special full-duplex paNeverDropInput mode */ + if( stream->neverDropInput ) + { + PaUtil_SetNoOutput( &stream->bufferProcessor ); + cbFlags |= paOutputOverflow; + } + } + /* CALL USER CALLBACK WITH INPUT DATA, AND OBTAIN OUTPUT DATA */ + PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult ); + /* Clear overflow and underflow information (but PaAsiHpi_EndProcessing might + still show up output underflow that will carry over to next round) */ + cbFlags = 0; + /* WRITE TO HPI OUTPUT STREAM */ + PA_ENSURE_( PaAsiHpi_EndProcessing( stream, framesGot, &cbFlags ) ); + /* Advance frame counter */ + framesAvail -= framesGot; + } + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesGot ); + + if( framesGot == 0 ) + { + /* Go back to polling for more frames */ + break; + + } + if( callbackResult != paContinue ) + break; + } + } + + /* This code is unreachable, but important to include regardless because it + * is possibly a macro with a closing brace to match the opening brace in + * pthread_cleanup_push() above. The documentation states that they must + * always occur in pairs. */ + pthread_cleanup_pop( 1 ); + +end: + /* Indicates normal exit of callback, as opposed to the thread getting killed explicitly */ + stream->callbackFinished = 1; + PA_DEBUG(( "%s: Thread %d exiting (callbackResult = %d)\n ", + __FUNCTION__, pthread_self(), callbackResult )); + /* Exit from thread and report any PortAudio error in the process */ + PaUnixThreading_EXIT( result ); +error: + goto end; +} + +/* --------------------------- Blocking Interface --------------------------- */ + +/* As separate stream interfaces are used for blocking and callback streams, the following + functions can be guaranteed to only be called for blocking streams. */ + +/** Read data from input stream. + This reads the indicated number of frames into the supplied buffer from an input stream, + and blocks until this is done. + + @param s Pointer to PortAudio stream + + @param buffer Pointer to buffer that will receive interleaved data (or an array of pointers + to a buffer for each non-interleaved channel) + + @param frames Number of frames to read from stream + + @return PortAudio error code (also indicates overflow via paInputOverflowed) + */ +static PaError ReadStream( PaStream *s, + void *buffer, + unsigned long frames ) +{ + PaError result = paNoError; + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + PaAsiHpiStreamInfo info; + void *userBuffer; + + assert( stream ); + PA_UNLESS_( stream->input, paCanNotReadFromAnOutputOnlyStream ); + + /* Check for input overflow since previous call to ReadStream */ + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->input, &info ) ); + if( info.overflow ) + { + result = paInputOverflowed; + } + + /* NB Make copy of user buffer pointers, since they are advanced by buffer processor */ + if( stream->bufferProcessor.userInputIsInterleaved ) + { + userBuffer = buffer; + } + else + { + /* Copy channels into local array */ + userBuffer = stream->blockingUserBufferCopy; + memcpy( userBuffer, buffer, sizeof (void *) * stream->input->hpiFormat.wChannels ); + } + + while( frames > 0 ) + { + unsigned long framesGot, framesAvail; + PaStreamCallbackFlags cbFlags = 0; + + PA_ENSURE_( PaAsiHpi_WaitForFrames( stream, &framesAvail, &cbFlags ) ); + framesGot = PA_MIN( framesAvail, frames ); + PA_ENSURE_( PaAsiHpi_BeginProcessing( stream, &framesGot, &cbFlags ) ); + + if( framesGot > 0 ) + { + framesGot = PaUtil_CopyInput( &stream->bufferProcessor, &userBuffer, framesGot ); + PA_ENSURE_( PaAsiHpi_EndProcessing( stream, framesGot, &cbFlags ) ); + /* Advance frame counter */ + frames -= framesGot; + } + } + +error: + return result; +} + + +/** Write data to output stream. + This writes the indicated number of frames from the supplied buffer to an output stream, + and blocks until this is done. + + @param s Pointer to PortAudio stream + + @param buffer Pointer to buffer that provides interleaved data (or an array of pointers + to a buffer for each non-interleaved channel) + + @param frames Number of frames to write to stream + + @return PortAudio error code (also indicates underflow via paOutputUnderflowed) + */ +static PaError WriteStream( PaStream *s, + const void *buffer, + unsigned long frames ) +{ + PaError result = paNoError; + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + PaAsiHpiStreamInfo info; + const void *userBuffer; + + assert( stream ); + PA_UNLESS_( stream->output, paCanNotWriteToAnInputOnlyStream ); + + /* Check for output underflow since previous call to WriteStream */ + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->output, &info ) ); + if( info.underflow ) + { + result = paOutputUnderflowed; + } + + /* NB Make copy of user buffer pointers, since they are advanced by buffer processor */ + if( stream->bufferProcessor.userOutputIsInterleaved ) + { + userBuffer = buffer; + } + else + { + /* Copy channels into local array */ + userBuffer = stream->blockingUserBufferCopy; + memcpy( (void *)userBuffer, buffer, sizeof (void *) * stream->output->hpiFormat.wChannels ); + } + + while( frames > 0 ) + { + unsigned long framesGot, framesAvail; + PaStreamCallbackFlags cbFlags = 0; + + PA_ENSURE_( PaAsiHpi_WaitForFrames( stream, &framesAvail, &cbFlags ) ); + framesGot = PA_MIN( framesAvail, frames ); + PA_ENSURE_( PaAsiHpi_BeginProcessing( stream, &framesGot, &cbFlags ) ); + + if( framesGot > 0 ) + { + framesGot = PaUtil_CopyOutput( &stream->bufferProcessor, &userBuffer, framesGot ); + PA_ENSURE_( PaAsiHpi_EndProcessing( stream, framesGot, &cbFlags ) ); + /* Advance frame counter */ + frames -= framesGot; + } + } + +error: + return result; +} + + +/** Number of frames that can be read from input stream without blocking. + + @param s Pointer to PortAudio stream + + @return Number of frames, or PortAudio error code + */ +static signed long GetStreamReadAvailable( PaStream *s ) +{ + PaError result = paNoError; + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + PaAsiHpiStreamInfo info; + + assert( stream ); + PA_UNLESS_( stream->input, paCanNotReadFromAnOutputOnlyStream ); + + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->input, &info ) ); + /* Round down to the nearest host buffer multiple */ + result = (info.availableFrames / stream->maxFramesPerHostBuffer) * stream->maxFramesPerHostBuffer; + if( info.overflow ) + { + result = paInputOverflowed; + } + +error: + return result; +} + + +/** Number of frames that can be written to output stream without blocking. + + @param s Pointer to PortAudio stream + + @return Number of frames, or PortAudio error code + */ +static signed long GetStreamWriteAvailable( PaStream *s ) +{ + PaError result = paNoError; + PaAsiHpiStream *stream = (PaAsiHpiStream*)s; + PaAsiHpiStreamInfo info; + + assert( stream ); + PA_UNLESS_( stream->output, paCanNotWriteToAnInputOnlyStream ); + + PA_ENSURE_( PaAsiHpi_GetStreamInfo( stream->output, &info ) ); + /* Round down to the nearest host buffer multiple */ + result = (info.availableFrames / stream->maxFramesPerHostBuffer) * stream->maxFramesPerHostBuffer; + if( info.underflow ) + { + result = paOutputUnderflowed; + } + +error: + return result; +} diff --git a/Externals/portaudio/src/hostapi/asio/ASIO-README.txt b/Externals/portaudio/src/hostapi/asio/ASIO-README.txt new file mode 100644 index 0000000000..bc86caa5be --- /dev/null +++ b/Externals/portaudio/src/hostapi/asio/ASIO-README.txt @@ -0,0 +1,147 @@ +ASIO-README.txt + +This document contains information to help you compile PortAudio with +ASIO support. If you find any omissions or errors in this document +please notify us on the PortAudio mailing list. + +NOTE: The Macintosh sections of this document are provided for historical +reference. They refer to pre-OS X Macintosh. PortAudio no longer +supports pre-OS X Macintosh. Steinberg does not support ASIO on Mac OS X. + + +Building PortAudio with ASIO support +------------------------------------ + +To build PortAudio with ASIO support you need to compile and link with +pa_asio.c, and files from the ASIO SDK (see below), along with the common +PortAudio files from src/common/ and platform specific files from +src/os/win/ (for Win32). + +If you are compiling with a non-Microsoft compiler on Windows, also +compile and link with iasiothiscallresolver.cpp (see below for +an explanation). + +For some platforms (MingW, Cygwin/MingW), you may simply +be able to type: + +./configure --with-host_os=mingw --with-winapi=asio [--with-asiodir=/usr/local/asiosdk2] +make + +and life will be good. Make sure you update the above with the correct local +path to the ASIO SDK. + + +For Microsoft Visual C++ there is an build tutorial here: +http://www.portaudio.com/trac/wiki/TutorialDir/Compile/WindowsASIOMSVC + + + +Obtaining the ASIO SDK +---------------------- + +In order to build PortAudio with ASIO support, you need to download +the ASIO SDK (version 2.0 or later) from Steinberg. Steinberg makes the ASIO +SDK available to anyone free of charge, however they do not permit its +source code to be distributed. + +NOTE: In some cases the ASIO SDK may require patching, see below +for further details. + +http://www.steinberg.net/en/company/developer.html + +If the above link is broken search Google for: +"download steinberg ASIO SDK" + + + +Building the ASIO SDK on Windows +-------------------------------- + +To build the ASIO SDK on Windows you need to compile and link with the +following files from the ASIO SDK: + +asio_sdk\common\asio.cpp +asio_sdk\host\asiodrivers.cpp +asio_sdk\host\pc\asiolist.cpp + +You may also need to adjust your include paths to support inclusion of +header files from the above directories. + +The ASIO SDK depends on the following COM API functions: +CoInitialize, CoUninitialize, CoCreateInstance, CLSIDFromString +For compilation with MinGW you will need to link with -lole32, for +Borland compilers link with Import32.lib. + + + +Non-Microsoft (MSVC) Compilers on Windows including Borland and GCC +------------------------------------------------------------------- + +Steinberg did not specify a calling convention in the IASIO interface +definition. This causes the Microsoft compiler to use the proprietary +thiscall convention which is not compatible with other compilers, such +as compilers from Borland (BCC and C++Builder) and GNU (gcc). +Steinberg's ASIO SDK will compile but crash on initialization if +compiled with a non-Microsoft compiler on Windows. + +PortAudio solves this problem using the iasiothiscallresolver library +which is included in the distribution. When building ASIO support for +non-Microsoft compilers, be sure to compile and link with +iasiothiscallresolver.cpp. Note that iasiothiscallresolver includes +conditional directives which cause it to have no effect if it is +compiled with a Microsoft compiler, or on the Macintosh. + +If you use configure and make (see above), this should be handled +automatically for you. + +For further information about the IASIO thiscall problem see this page: +http://www.rossbencina.com/code/iasio-thiscall-resolver + + + +Building the ASIO SDK on (Pre-OS X) Macintosh +--------------------------------------------- + +To build the ASIO SDK on Macintosh you need to compile and link with the +following files from the ASIO SDK: + +host/asiodrivers.cpp +host/mac/asioshlib.cpp +host/mac/codefragements.cpp + +You may also need to adjust your include paths to support inclusion of +header files from the above directories. + + + +(Pre-OS X) Macintosh ASIO SDK Bug Patch +--------------------------------------- + +There is a bug in the ASIO SDK that causes the Macintosh version to +often fail during initialization. Below is a patch that you can apply. + +In codefragments.cpp replace getFrontProcessDirectory function with +the following one (GetFrontProcess replaced by GetCurrentProcess). + + +bool CodeFragments::getFrontProcessDirectory(void *specs) +{ + FSSpec *fss = (FSSpec *)specs; + ProcessInfoRec pif; + ProcessSerialNumber psn; + + memset(&psn,0,(long)sizeof(ProcessSerialNumber)); + // if(GetFrontProcess(&psn) == noErr) // wrong !!! + if(GetCurrentProcess(&psn) == noErr) // correct !!! + { + pif.processName = 0; + pif.processAppSpec = fss; + pif.processInfoLength = sizeof(ProcessInfoRec); + if(GetProcessInformation(&psn, &pif) == noErr) + return true; + } + return false; +} + + +### diff --git a/Externals/portaudio/src/hostapi/asio/Callback_adaptation_.pdf b/Externals/portaudio/src/hostapi/asio/Callback_adaptation_.pdf new file mode 100644 index 0000000000..76bf678635 Binary files /dev/null and b/Externals/portaudio/src/hostapi/asio/Callback_adaptation_.pdf differ diff --git a/Externals/portaudio/src/hostapi/asio/Pa_ASIO.pdf b/Externals/portaudio/src/hostapi/asio/Pa_ASIO.pdf new file mode 100644 index 0000000000..ac5ecadbc9 Binary files /dev/null and b/Externals/portaudio/src/hostapi/asio/Pa_ASIO.pdf differ diff --git a/Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp b/Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp new file mode 100644 index 0000000000..08c55eacfc --- /dev/null +++ b/Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp @@ -0,0 +1,572 @@ +/* + IASIOThiscallResolver.cpp see the comments in iasiothiscallresolver.h for + the top level description - this comment describes the technical details of + the implementation. + + The latest version of this file is available from: + http://www.audiomulch.com/~rossb/code/calliasio + + please email comments to Ross Bencina + + BACKGROUND + + The IASIO interface declared in the Steinberg ASIO 2 SDK declares + functions with no explicit calling convention. This causes MSVC++ to default + to using the thiscall convention, which is a proprietary convention not + implemented by some non-microsoft compilers - notably borland BCC, + C++Builder, and gcc. MSVC++ is the defacto standard compiler used by + Steinberg. As a result of this situation, the ASIO sdk will compile with + any compiler, however attempting to execute the compiled code will cause a + crash due to different default calling conventions on non-Microsoft + compilers. + + IASIOThiscallResolver solves the problem by providing an adapter class that + delegates to the IASIO interface using the correct calling convention + (thiscall). Due to the lack of support for thiscall in the Borland and GCC + compilers, the calls have been implemented in assembly language. + + A number of macros are defined for thiscall function calls with different + numbers of parameters, with and without return values - it may be possible + to modify the format of these macros to make them work with other inline + assemblers. + + + THISCALL DEFINITION + + A number of definitions of the thiscall calling convention are floating + around the internet. The following definition has been validated against + output from the MSVC++ compiler: + + For non-vararg functions, thiscall works as follows: the object (this) + pointer is passed in ECX. All arguments are passed on the stack in + right to left order. The return value is placed in EAX. The callee + clears the passed arguments from the stack. + + + FINDING FUNCTION POINTERS FROM AN IASIO POINTER + + The first field of a COM object is a pointer to its vtble. Thus a pointer + to an object implementing the IASIO interface also points to a pointer to + that object's vtbl. The vtble is a table of function pointers for all of + the virtual functions exposed by the implemented interfaces. + + If we consider a variable declared as a pointer to IASO: + + IASIO *theAsioDriver + + theAsioDriver points to: + + object implementing IASIO + { + IASIOvtbl *vtbl + other data + } + + in other words, theAsioDriver points to a pointer to an IASIOvtbl + + vtbl points to a table of function pointers: + + IASIOvtbl ( interface IASIO : public IUnknown ) + { + (IUnknown functions) + 0 virtual HRESULT STDMETHODCALLTYPE (*QueryInterface)(REFIID riid, void **ppv) = 0; + 4 virtual ULONG STDMETHODCALLTYPE (*AddRef)() = 0; + 8 virtual ULONG STDMETHODCALLTYPE (*Release)() = 0; + + (IASIO functions) + 12 virtual ASIOBool (*init)(void *sysHandle) = 0; + 16 virtual void (*getDriverName)(char *name) = 0; + 20 virtual long (*getDriverVersion)() = 0; + 24 virtual void (*getErrorMessage)(char *string) = 0; + 28 virtual ASIOError (*start)() = 0; + 32 virtual ASIOError (*stop)() = 0; + 36 virtual ASIOError (*getChannels)(long *numInputChannels, long *numOutputChannels) = 0; + 40 virtual ASIOError (*getLatencies)(long *inputLatency, long *outputLatency) = 0; + 44 virtual ASIOError (*getBufferSize)(long *minSize, long *maxSize, + long *preferredSize, long *granularity) = 0; + 48 virtual ASIOError (*canSampleRate)(ASIOSampleRate sampleRate) = 0; + 52 virtual ASIOError (*getSampleRate)(ASIOSampleRate *sampleRate) = 0; + 56 virtual ASIOError (*setSampleRate)(ASIOSampleRate sampleRate) = 0; + 60 virtual ASIOError (*getClockSources)(ASIOClockSource *clocks, long *numSources) = 0; + 64 virtual ASIOError (*setClockSource)(long reference) = 0; + 68 virtual ASIOError (*getSamplePosition)(ASIOSamples *sPos, ASIOTimeStamp *tStamp) = 0; + 72 virtual ASIOError (*getChannelInfo)(ASIOChannelInfo *info) = 0; + 76 virtual ASIOError (*createBuffers)(ASIOBufferInfo *bufferInfos, long numChannels, + long bufferSize, ASIOCallbacks *callbacks) = 0; + 80 virtual ASIOError (*disposeBuffers)() = 0; + 84 virtual ASIOError (*controlPanel)() = 0; + 88 virtual ASIOError (*future)(long selector,void *opt) = 0; + 92 virtual ASIOError (*outputReady)() = 0; + }; + + The numbers in the left column show the byte offset of each function ptr + from the beginning of the vtbl. These numbers are used in the code below + to select different functions. + + In order to find the address of a particular function, theAsioDriver + must first be dereferenced to find the value of the vtbl pointer: + + mov eax, theAsioDriver + mov edx, [theAsioDriver] // edx now points to vtbl[0] + + Then an offset must be added to the vtbl pointer to select a + particular function, for example vtbl+44 points to the slot containing + a pointer to the getBufferSize function. + + Finally vtbl+x must be dereferenced to obtain the value of the function + pointer stored in that address: + + call [edx+44] // call the function pointed to by + // the value in the getBufferSize field of the vtbl + + + SEE ALSO + + Martin Fay's OpenASIO DLL at http://www.martinfay.com solves the same + problem by providing a new COM interface which wraps IASIO with an + interface that uses portable calling conventions. OpenASIO must be compiled + with MSVC, and requires that you ship the OpenASIO DLL with your + application. + + + ACKNOWLEDGEMENTS + + Ross Bencina: worked out the thiscall details above, wrote the original + Borland asm macros, and a patch for asio.cpp (which is no longer needed). + Thanks to Martin Fay for introducing me to the issues discussed here, + and to Rene G. Ceballos for assisting with asm dumps from MSVC++. + + Antti Silvast: converted the original calliasio to work with gcc and NASM + by implementing the asm code in a separate file. + + Fraser Adams: modified the original calliasio containing the Borland inline + asm to add inline asm for gcc i.e. Intel syntax for Borland and AT&T syntax + for gcc. This seems a neater approach for gcc than to have a separate .asm + file and it means that we only need one version of the thiscall patch. + + Fraser Adams: rewrote the original calliasio patch in the form of the + IASIOThiscallResolver class in order to avoid modifications to files from + the Steinberg SDK, which may have had potential licence issues. + + Andrew Baldwin: contributed fixes for compatibility problems with more + recent versions of the gcc assembler. +*/ + + +// We only need IASIOThiscallResolver at all if we are on Win32. For other +// platforms we simply bypass the IASIOThiscallResolver definition to allow us +// to be safely #include'd whatever the platform to keep client code portable +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(_WIN64) + + +// If microsoft compiler we can call IASIO directly so IASIOThiscallResolver +// is not used. +#if !defined(_MSC_VER) + + +#include +#include + +// We have a mechanism in iasiothiscallresolver.h to ensure that asio.h is +// #include'd before it in client code, we do NOT want to do this test here. +#define iasiothiscallresolver_sourcefile 1 +#include "iasiothiscallresolver.h" +#undef iasiothiscallresolver_sourcefile + +// iasiothiscallresolver.h redefines ASIOInit for clients, but we don't want +// this macro defined in this translation unit. +#undef ASIOInit + + +// theAsioDriver is a global pointer to the current IASIO instance which the +// ASIO SDK uses to perform all actions on the IASIO interface. We substitute +// our own forwarding interface into this pointer. +extern IASIO* theAsioDriver; + + +// The following macros define the inline assembler for BORLAND first then gcc + +#if defined(__BCPLUSPLUS__) || defined(__BORLANDC__) + + +#define CALL_THISCALL_0( resultName, thisPtr, funcOffset )\ + void *this_ = (thisPtr); \ + __asm { \ + mov ecx, this_ ; \ + mov eax, [ecx] ; \ + call [eax+funcOffset] ; \ + mov resultName, eax ; \ + } + + +#define CALL_VOID_THISCALL_1( thisPtr, funcOffset, param1 )\ + void *this_ = (thisPtr); \ + __asm { \ + mov eax, param1 ; \ + push eax ; \ + mov ecx, this_ ; \ + mov eax, [ecx] ; \ + call [eax+funcOffset] ; \ + } + + +#define CALL_THISCALL_1( resultName, thisPtr, funcOffset, param1 )\ + void *this_ = (thisPtr); \ + __asm { \ + mov eax, param1 ; \ + push eax ; \ + mov ecx, this_ ; \ + mov eax, [ecx] ; \ + call [eax+funcOffset] ; \ + mov resultName, eax ; \ + } + + +#define CALL_THISCALL_1_DOUBLE( resultName, thisPtr, funcOffset, param1 )\ + void *this_ = (thisPtr); \ + void *doubleParamPtr_ (¶m1); \ + __asm { \ + mov eax, doubleParamPtr_ ; \ + push [eax+4] ; \ + push [eax] ; \ + mov ecx, this_ ; \ + mov eax, [ecx] ; \ + call [eax+funcOffset] ; \ + mov resultName, eax ; \ + } + + +#define CALL_THISCALL_2( resultName, thisPtr, funcOffset, param1, param2 )\ + void *this_ = (thisPtr); \ + __asm { \ + mov eax, param2 ; \ + push eax ; \ + mov eax, param1 ; \ + push eax ; \ + mov ecx, this_ ; \ + mov eax, [ecx] ; \ + call [eax+funcOffset] ; \ + mov resultName, eax ; \ + } + + +#define CALL_THISCALL_4( resultName, thisPtr, funcOffset, param1, param2, param3, param4 )\ + void *this_ = (thisPtr); \ + __asm { \ + mov eax, param4 ; \ + push eax ; \ + mov eax, param3 ; \ + push eax ; \ + mov eax, param2 ; \ + push eax ; \ + mov eax, param1 ; \ + push eax ; \ + mov ecx, this_ ; \ + mov eax, [ecx] ; \ + call [eax+funcOffset] ; \ + mov resultName, eax ; \ + } + + +#elif defined(__GNUC__) + + +#define CALL_THISCALL_0( resultName, thisPtr, funcOffset ) \ + __asm__ __volatile__ ("movl (%1), %%edx\n\t" \ + "call *"#funcOffset"(%%edx)\n\t" \ + :"=a"(resultName) /* Output Operands */ \ + :"c"(thisPtr) /* Input Operands */ \ + : "%edx" /* Clobbered Registers */ \ + ); \ + + +#define CALL_VOID_THISCALL_1( thisPtr, funcOffset, param1 ) \ + __asm__ __volatile__ ("pushl %0\n\t" \ + "movl (%1), %%edx\n\t" \ + "call *"#funcOffset"(%%edx)\n\t" \ + : /* Output Operands */ \ + :"r"(param1), /* Input Operands */ \ + "c"(thisPtr) \ + : "%edx" /* Clobbered Registers */ \ + ); \ + + +#define CALL_THISCALL_1( resultName, thisPtr, funcOffset, param1 ) \ + __asm__ __volatile__ ("pushl %1\n\t" \ + "movl (%2), %%edx\n\t" \ + "call *"#funcOffset"(%%edx)\n\t" \ + :"=a"(resultName) /* Output Operands */ \ + :"r"(param1), /* Input Operands */ \ + "c"(thisPtr) \ + : "%edx" /* Clobbered Registers */ \ + ); \ + + +#define CALL_THISCALL_1_DOUBLE( resultName, thisPtr, funcOffset, param1 ) \ + do { \ + double param1f64 = param1; /* Cast explicitly to double */ \ + double *param1f64Ptr = ¶m1f64; /* Make pointer to address */ \ + __asm__ __volatile__ ("pushl 4(%1)\n\t" \ + "pushl (%1)\n\t" \ + "movl (%2), %%edx\n\t" \ + "call *"#funcOffset"(%%edx);\n\t" \ + : "=a"(resultName) /* Output Operands */ \ + : "r"(param1f64Ptr), /* Input Operands */ \ + "c"(thisPtr), \ + "m"(*param1f64Ptr) /* Using address */ \ + : "%edx" /* Clobbered Registers */ \ + ); \ + } while (0); \ + + +#define CALL_THISCALL_2( resultName, thisPtr, funcOffset, param1, param2 ) \ + __asm__ __volatile__ ("pushl %1\n\t" \ + "pushl %2\n\t" \ + "movl (%3), %%edx\n\t" \ + "call *"#funcOffset"(%%edx)\n\t" \ + :"=a"(resultName) /* Output Operands */ \ + :"r"(param2), /* Input Operands */ \ + "r"(param1), \ + "c"(thisPtr) \ + : "%edx" /* Clobbered Registers */ \ + ); \ + + +#define CALL_THISCALL_4( resultName, thisPtr, funcOffset, param1, param2, param3, param4 )\ + __asm__ __volatile__ ("pushl %1\n\t" \ + "pushl %2\n\t" \ + "pushl %3\n\t" \ + "pushl %4\n\t" \ + "movl (%5), %%edx\n\t" \ + "call *"#funcOffset"(%%edx)\n\t" \ + :"=a"(resultName) /* Output Operands */ \ + :"r"(param4), /* Input Operands */ \ + "r"(param3), \ + "r"(param2), \ + "r"(param1), \ + "c"(thisPtr) \ + : "%edx" /* Clobbered Registers */ \ + ); \ + +#endif + + + +// Our static singleton instance. +IASIOThiscallResolver IASIOThiscallResolver::instance; + +// Constructor called to initialize static Singleton instance above. Note that +// it is important not to clear that_ incase it has already been set by the call +// to placement new in ASIOInit(). +IASIOThiscallResolver::IASIOThiscallResolver() +{ +} + +// Constructor called from ASIOInit() below +IASIOThiscallResolver::IASIOThiscallResolver(IASIO* that) +: that_( that ) +{ +} + +// Implement IUnknown methods as assert(false). IASIOThiscallResolver is not +// really a COM object, just a wrapper which will work with the ASIO SDK. +// If you wanted to use ASIO without the SDK you might want to implement COM +// aggregation in these methods. +HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface(REFIID riid, void **ppv) +{ + (void)riid; // suppress unused variable warning + + assert( false ); // this function should never be called by the ASIO SDK. + + *ppv = NULL; + return E_NOINTERFACE; +} + +ULONG STDMETHODCALLTYPE IASIOThiscallResolver::AddRef() +{ + assert( false ); // this function should never be called by the ASIO SDK. + + return 1; +} + +ULONG STDMETHODCALLTYPE IASIOThiscallResolver::Release() +{ + assert( false ); // this function should never be called by the ASIO SDK. + + return 1; +} + + +// Implement the IASIO interface methods by performing the vptr manipulation +// described above then delegating to the real implementation. +ASIOBool IASIOThiscallResolver::init(void *sysHandle) +{ + ASIOBool result; + CALL_THISCALL_1( result, that_, 12, sysHandle ); + return result; +} + +void IASIOThiscallResolver::getDriverName(char *name) +{ + CALL_VOID_THISCALL_1( that_, 16, name ); +} + +long IASIOThiscallResolver::getDriverVersion() +{ + ASIOBool result; + CALL_THISCALL_0( result, that_, 20 ); + return result; +} + +void IASIOThiscallResolver::getErrorMessage(char *string) +{ + CALL_VOID_THISCALL_1( that_, 24, string ); +} + +ASIOError IASIOThiscallResolver::start() +{ + ASIOBool result; + CALL_THISCALL_0( result, that_, 28 ); + return result; +} + +ASIOError IASIOThiscallResolver::stop() +{ + ASIOBool result; + CALL_THISCALL_0( result, that_, 32 ); + return result; +} + +ASIOError IASIOThiscallResolver::getChannels(long *numInputChannels, long *numOutputChannels) +{ + ASIOBool result; + CALL_THISCALL_2( result, that_, 36, numInputChannels, numOutputChannels ); + return result; +} + +ASIOError IASIOThiscallResolver::getLatencies(long *inputLatency, long *outputLatency) +{ + ASIOBool result; + CALL_THISCALL_2( result, that_, 40, inputLatency, outputLatency ); + return result; +} + +ASIOError IASIOThiscallResolver::getBufferSize(long *minSize, long *maxSize, + long *preferredSize, long *granularity) +{ + ASIOBool result; + CALL_THISCALL_4( result, that_, 44, minSize, maxSize, preferredSize, granularity ); + return result; +} + +ASIOError IASIOThiscallResolver::canSampleRate(ASIOSampleRate sampleRate) +{ + ASIOBool result; + CALL_THISCALL_1_DOUBLE( result, that_, 48, sampleRate ); + return result; +} + +ASIOError IASIOThiscallResolver::getSampleRate(ASIOSampleRate *sampleRate) +{ + ASIOBool result; + CALL_THISCALL_1( result, that_, 52, sampleRate ); + return result; +} + +ASIOError IASIOThiscallResolver::setSampleRate(ASIOSampleRate sampleRate) +{ + ASIOBool result; + CALL_THISCALL_1_DOUBLE( result, that_, 56, sampleRate ); + return result; +} + +ASIOError IASIOThiscallResolver::getClockSources(ASIOClockSource *clocks, long *numSources) +{ + ASIOBool result; + CALL_THISCALL_2( result, that_, 60, clocks, numSources ); + return result; +} + +ASIOError IASIOThiscallResolver::setClockSource(long reference) +{ + ASIOBool result; + CALL_THISCALL_1( result, that_, 64, reference ); + return result; +} + +ASIOError IASIOThiscallResolver::getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp) +{ + ASIOBool result; + CALL_THISCALL_2( result, that_, 68, sPos, tStamp ); + return result; +} + +ASIOError IASIOThiscallResolver::getChannelInfo(ASIOChannelInfo *info) +{ + ASIOBool result; + CALL_THISCALL_1( result, that_, 72, info ); + return result; +} + +ASIOError IASIOThiscallResolver::createBuffers(ASIOBufferInfo *bufferInfos, + long numChannels, long bufferSize, ASIOCallbacks *callbacks) +{ + ASIOBool result; + CALL_THISCALL_4( result, that_, 76, bufferInfos, numChannels, bufferSize, callbacks ); + return result; +} + +ASIOError IASIOThiscallResolver::disposeBuffers() +{ + ASIOBool result; + CALL_THISCALL_0( result, that_, 80 ); + return result; +} + +ASIOError IASIOThiscallResolver::controlPanel() +{ + ASIOBool result; + CALL_THISCALL_0( result, that_, 84 ); + return result; +} + +ASIOError IASIOThiscallResolver::future(long selector,void *opt) +{ + ASIOBool result; + CALL_THISCALL_2( result, that_, 88, selector, opt ); + return result; +} + +ASIOError IASIOThiscallResolver::outputReady() +{ + ASIOBool result; + CALL_THISCALL_0( result, that_, 92 ); + return result; +} + + +// Implement our substitute ASIOInit() method +ASIOError IASIOThiscallResolver::ASIOInit(ASIODriverInfo *info) +{ + // To ensure that our instance's vptr is correctly constructed, even if + // ASIOInit is called prior to main(), we explicitly call its constructor + // (potentially over the top of an existing instance). Note that this is + // pretty ugly, and is only safe because IASIOThiscallResolver has no + // destructor and contains no objects with destructors. + new((void*)&instance) IASIOThiscallResolver( theAsioDriver ); + + // Interpose between ASIO client code and the real driver. + theAsioDriver = &instance; + + // Note that we never need to switch theAsioDriver back to point to the + // real driver because theAsioDriver is reset to zero in ASIOExit(). + + // Delegate to the real ASIOInit + return ::ASIOInit(info); +} + + +#endif /* !defined(_MSC_VER) */ + +#endif /* Win32 */ + diff --git a/Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.h b/Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.h new file mode 100644 index 0000000000..21d53b3206 --- /dev/null +++ b/Externals/portaudio/src/hostapi/asio/iasiothiscallresolver.h @@ -0,0 +1,197 @@ +// **************************************************************************** +// File: IASIOThiscallResolver.h +// Description: The IASIOThiscallResolver class implements the IASIO +// interface and acts as a proxy to the real IASIO interface by +// calling through its vptr table using the thiscall calling +// convention. To put it another way, we interpose +// IASIOThiscallResolver between ASIO SDK code and the driver. +// This is necessary because most non-Microsoft compilers don't +// implement the thiscall calling convention used by IASIO. +// +// iasiothiscallresolver.cpp contains the background of this +// problem plus a technical description of the vptr +// manipulations. +// +// In order to use this mechanism one simply has to add +// iasiothiscallresolver.cpp to the list of files to compile +// and #include +// +// Note that this #include must come after the other ASIO SDK +// #includes, for example: +// +// #include +// #include +// #include +// #include +// #include +// +// Actually the important thing is to #include +// after . We have +// incorporated a test to enforce this ordering. +// +// The code transparently takes care of the interposition by +// using macro substitution to intercept calls to ASIOInit() +// and ASIOExit(). We save the original ASIO global +// "theAsioDriver" in our "that" variable, and then set +// "theAsioDriver" to equal our IASIOThiscallResolver instance. +// +// Whilst this method of resolving the thiscall problem requires +// the addition of #include to client +// code it has the advantage that it does not break the terms +// of the ASIO licence by publishing it. We are NOT modifying +// any Steinberg code here, we are merely implementing the IASIO +// interface in the same way that we would need to do if we +// wished to provide an open source ASIO driver. +// +// For compilation with MinGW -lole32 needs to be added to the +// linker options. For BORLAND, linking with Import32.lib is +// sufficient. +// +// The dependencies are with: CoInitialize, CoUninitialize, +// CoCreateInstance, CLSIDFromString - used by asiolist.cpp +// and are required on Windows whether ThiscallResolver is used +// or not. +// +// Searching for the above strings in the root library path +// of your compiler should enable the correct libraries to be +// identified if they aren't immediately obvious. +// +// Note that the current implementation of IASIOThiscallResolver +// is not COM compliant - it does not correctly implement the +// IUnknown interface. Implementing it is not necessary because +// it is not called by parts of the ASIO SDK which call through +// theAsioDriver ptr. The IUnknown methods are implemented as +// assert(false) to ensure that the code fails if they are +// ever called. +// Restrictions: None. Public Domain & Open Source distribute freely +// You may use IASIOThiscallResolver commercially as well as +// privately. +// You the user assume the responsibility for the use of the +// files, binary or text, and there is no guarantee or warranty, +// expressed or implied, including but not limited to the +// implied warranties of merchantability and fitness for a +// particular purpose. You assume all responsibility and agree +// to hold no entity, copyright holder or distributors liable +// for any loss of data or inaccurate representations of data +// as a result of using IASIOThiscallResolver. +// Version: 1.4 Added separate macro CALL_THISCALL_1_DOUBLE from +// Andrew Baldwin, and volatile for whole gcc asm blocks, +// both for compatibility with newer gcc versions. Cleaned up +// Borland asm to use one less register. +// 1.3 Switched to including assert.h for better compatibility. +// Wrapped entire .h and .cpp contents with a check for +// _MSC_VER to provide better compatibility with MS compilers. +// Changed Singleton implementation to use static instance +// instead of freestore allocated instance. Removed ASIOExit +// macro as it is no longer needed. +// 1.2 Removed semicolons from ASIOInit and ASIOExit macros to +// allow them to be embedded in expressions (if statements). +// Cleaned up some comments. Removed combase.c dependency (it +// doesn't compile with BCB anyway) by stubbing IUnknown. +// 1.1 Incorporated comments from Ross Bencina including things +// such as changing name from ThiscallResolver to +// IASIOThiscallResolver, tidying up the constructor, fixing +// a bug in IASIOThiscallResolver::ASIOExit() and improving +// portability through the use of conditional compilation +// 1.0 Initial working version. +// Created: 6/09/2003 +// Authors: Fraser Adams +// Ross Bencina +// Rene G. Ceballos +// Martin Fay +// Antti Silvast +// Andrew Baldwin +// +// **************************************************************************** + + +#ifndef included_iasiothiscallresolver_h +#define included_iasiothiscallresolver_h + +// We only need IASIOThiscallResolver at all if we are on Win32. For other +// platforms we simply bypass the IASIOThiscallResolver definition to allow us +// to be safely #include'd whatever the platform to keep client code portable +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(_WIN64) + + +// If microsoft compiler we can call IASIO directly so IASIOThiscallResolver +// is not used. +#if !defined(_MSC_VER) + + +// The following is in order to ensure that this header is only included after +// the other ASIO headers (except for the case of iasiothiscallresolver.cpp). +// We need to do this because IASIOThiscallResolver works by eclipsing the +// original definition of ASIOInit() with a macro (see below). +#if !defined(iasiothiscallresolver_sourcefile) + #if !defined(__ASIO_H) + #error iasiothiscallresolver.h must be included AFTER asio.h + #endif +#endif + +#include +#include /* From ASIO SDK */ + + +class IASIOThiscallResolver : public IASIO { +private: + IASIO* that_; // Points to the real IASIO + + static IASIOThiscallResolver instance; // Singleton instance + + // Constructors - declared private so construction is limited to + // our Singleton instance + IASIOThiscallResolver(); + IASIOThiscallResolver(IASIO* that); +public: + + // Methods from the IUnknown interface. We don't fully implement IUnknown + // because the ASIO SDK never calls these methods through theAsioDriver ptr. + // These methods are implemented as assert(false). + virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv); + virtual ULONG STDMETHODCALLTYPE AddRef(); + virtual ULONG STDMETHODCALLTYPE Release(); + + // Methods from the IASIO interface, implemented as forwarning calls to that. + virtual ASIOBool init(void *sysHandle); + virtual void getDriverName(char *name); + virtual long getDriverVersion(); + virtual void getErrorMessage(char *string); + virtual ASIOError start(); + virtual ASIOError stop(); + virtual ASIOError getChannels(long *numInputChannels, long *numOutputChannels); + virtual ASIOError getLatencies(long *inputLatency, long *outputLatency); + virtual ASIOError getBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity); + virtual ASIOError canSampleRate(ASIOSampleRate sampleRate); + virtual ASIOError getSampleRate(ASIOSampleRate *sampleRate); + virtual ASIOError setSampleRate(ASIOSampleRate sampleRate); + virtual ASIOError getClockSources(ASIOClockSource *clocks, long *numSources); + virtual ASIOError setClockSource(long reference); + virtual ASIOError getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp); + virtual ASIOError getChannelInfo(ASIOChannelInfo *info); + virtual ASIOError createBuffers(ASIOBufferInfo *bufferInfos, long numChannels, long bufferSize, ASIOCallbacks *callbacks); + virtual ASIOError disposeBuffers(); + virtual ASIOError controlPanel(); + virtual ASIOError future(long selector,void *opt); + virtual ASIOError outputReady(); + + // Class method, see ASIOInit() macro below. + static ASIOError ASIOInit(ASIODriverInfo *info); // Delegates to ::ASIOInit +}; + + +// Replace calls to ASIOInit with our interposing version. +// This macro enables us to perform thiscall resolution simply by #including +// after the asio #includes (this file _must_ be +// included _after_ the asio #includes) + +#define ASIOInit(name) IASIOThiscallResolver::ASIOInit((name)) + + +#endif /* !defined(_MSC_VER) */ + +#endif /* Win32 */ + +#endif /* included_iasiothiscallresolver_h */ + + diff --git a/Externals/portaudio/src/hostapi/asio/pa_asio.cpp b/Externals/portaudio/src/hostapi/asio/pa_asio.cpp new file mode 100644 index 0000000000..28eee9dbb5 --- /dev/null +++ b/Externals/portaudio/src/hostapi/asio/pa_asio.cpp @@ -0,0 +1,4214 @@ +/* + * $Id: pa_asio.cpp 1778 2011-11-10 13:59:53Z rossb $ + * Portable Audio I/O Library for ASIO Drivers + * + * Author: Stephane Letz + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 2000-2002 Stephane Letz, Phil Burk, Ross Bencina + * Blocking i/o implementation by Sven Fischer, Institute of Hearing + * Technology and Audiology (www.hoertechnik-audiologie.de) + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/* Modification History + + 08-03-01 First version : Stephane Letz + 08-06-01 Tweaks for PC, use C++, buffer allocation, Float32 to Int32 conversion : Phil Burk + 08-20-01 More conversion, PA_StreamTime, Pa_GetHostError : Stephane Letz + 08-21-01 PaUInt8 bug correction, implementation of ASIOSTFloat32LSB and ASIOSTFloat32MSB native formats : Stephane Letz + 08-24-01 MAX_INT32_FP hack, another Uint8 fix : Stephane and Phil + 08-27-01 Implementation of hostBufferSize < userBufferSize case, better management of the ouput buffer when + the stream is stopped : Stephane Letz + 08-28-01 Check the stream pointer for null in bufferSwitchTimeInfo, correct bug in bufferSwitchTimeInfo when + the stream is stopped : Stephane Letz + 10-12-01 Correct the PaHost_CalcNumHostBuffers function: computes FramesPerHostBuffer to be the lowest that + respect requested FramesPerUserBuffer and userBuffersPerHostBuffer : Stephane Letz + 10-26-01 Management of hostBufferSize and userBufferSize of any size : Stephane Letz + 10-27-01 Improve calculus of hostBufferSize to be multiple or divisor of userBufferSize if possible : Stephane and Phil + 10-29-01 Change MAX_INT32_FP to (2147483520.0f) to prevent roundup to 0x80000000 : Phil Burk + 10-31-01 Clear the ouput buffer and user buffers in PaHost_StartOutput, correct bug in GetFirstMultiple : Stephane Letz + 11-06-01 Rename functions : Stephane Letz + 11-08-01 New Pa_ASIO_Adaptor_Init function to init Callback adpatation variables, cleanup of Pa_ASIO_Callback_Input: Stephane Letz + 11-29-01 Break apart device loading to debug random failure in Pa_ASIO_QueryDeviceInfo ; Phil Burk + 01-03-02 Desallocate all resources in PaHost_Term for cases where Pa_CloseStream is not called properly : Stephane Letz + 02-01-02 Cleanup, test of multiple-stream opening : Stephane Letz + 19-02-02 New Pa_ASIO_loadDriver that calls CoInitialize on each thread on Windows : Stephane Letz + 09-04-02 Correct error code management in PaHost_Term, removes various compiler warning : Stephane Letz + 12-04-02 Add Mac includes for and : Phil Burk + 13-04-02 Removes another compiler warning : Stephane Letz + 30-04-02 Pa_ASIO_QueryDeviceInfo bug correction, memory allocation checking, better error handling : D Viens, P Burk, S Letz + 12-06-02 Rehashed into new multi-api infrastructure, added support for all ASIO sample formats : Ross Bencina + 18-06-02 Added pa_asio.h, PaAsio_GetAvailableLatencyValues() : Ross B. + 21-06-02 Added SelectHostBufferSize() which selects host buffer size based on user latency parameters : Ross Bencina + ** NOTE maintanance history is now stored in CVS ** +*/ + +/** @file + @ingroup hostapi_src + + Note that specific support for paInputUnderflow, paOutputOverflow and + paNeverDropInput is not necessary or possible with this driver due to the + synchronous full duplex double-buffered architecture of ASIO. +*/ + + +#include +#include +#include +//#include +#include + +#include +#include + +#include "portaudio.h" +#include "pa_asio.h" +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "pa_debugprint.h" +#include "pa_ringbuffer.h" + +#include "pa_win_coinitialize.h" + +/* This version of pa_asio.cpp is currently only targetted at Win32, + It would require a few tweaks to work with pre-OS X Macintosh. + To make configuration easier, we define WIN32 here to make sure + that the ASIO SDK knows this is Win32. +*/ +#ifndef WIN32 +#define WIN32 +#endif + +#include "asiosys.h" +#include "asio.h" +#include "asiodrivers.h" +#include "iasiothiscallresolver.h" + +/* +#if MAC +#include +#include +#include +#else +*/ +/* +#include +#include +#include +*/ +/* +#endif +*/ + + +/* winmm.lib is needed for timeGetTime() (this is in winmm.a if you're using gcc) */ +#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */ +#pragma comment(lib, "winmm.lib") +#endif + + +/* external reference to ASIO SDK's asioDrivers. + + This is a bit messy because we want to explicitly manage + allocation/deallocation of this structure, but some layers of the SDK + which we currently use (eg the implementation in asio.cpp) still + use this global version. + + For now we keep it in sync with our local instance in the host + API representation structure, but later we should be able to remove + all dependence on it. +*/ +extern AsioDrivers* asioDrivers; + + +/* We are trying to be compatible with CARBON but this has not been thoroughly tested. */ +/* not tested at all since new V19 code was introduced. */ +#define CARBON_COMPATIBLE (0) + + +/* prototypes for functions declared in this file */ + +extern "C" PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ); +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream* stream ); +static signed long GetStreamWriteAvailable( PaStream* stream ); + +/* Blocking i/o callback function. */ +static int BlockingIoPaCallback(const void *inputBuffer , + void *outputBuffer , + unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo *timeInfo , + PaStreamCallbackFlags statusFlags , + void *userData ); + +/* our ASIO callback functions */ + +static void bufferSwitch(long index, ASIOBool processNow); +static ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow); +static void sampleRateChanged(ASIOSampleRate sRate); +static long asioMessages(long selector, long value, void* message, double* opt); + +static ASIOCallbacks asioCallbacks_ = + { bufferSwitch, sampleRateChanged, asioMessages, bufferSwitchTimeInfo }; + + +#define PA_ASIO_SET_LAST_HOST_ERROR( errorCode, errorText ) \ + PaUtil_SetLastHostErrorInfo( paASIO, errorCode, errorText ) + + +static void PaAsio_SetLastSystemError( DWORD errorCode ) +{ + LPVOID lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + errorCode, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + PaUtil_SetLastHostErrorInfo( paASIO, errorCode, (const char*)lpMsgBuf ); + LocalFree( lpMsgBuf ); +} + +#define PA_ASIO_SET_LAST_SYSTEM_ERROR( errorCode ) \ + PaAsio_SetLastSystemError( errorCode ) + + +static const char* PaAsio_GetAsioErrorText( ASIOError asioError ) +{ + const char *result; + + switch( asioError ){ + case ASE_OK: + case ASE_SUCCESS: result = "Success"; break; + case ASE_NotPresent: result = "Hardware input or output is not present or available"; break; + case ASE_HWMalfunction: result = "Hardware is malfunctioning"; break; + case ASE_InvalidParameter: result = "Input parameter invalid"; break; + case ASE_InvalidMode: result = "Hardware is in a bad mode or used in a bad mode"; break; + case ASE_SPNotAdvancing: result = "Hardware is not running when sample position is inquired"; break; + case ASE_NoClock: result = "Sample clock or rate cannot be determined or is not present"; break; + case ASE_NoMemory: result = "Not enough memory for completing the request"; break; + default: result = "Unknown ASIO error"; break; + } + + return result; +} + + +#define PA_ASIO_SET_LAST_ASIO_ERROR( asioError ) \ + PaUtil_SetLastHostErrorInfo( paASIO, asioError, PaAsio_GetAsioErrorText( asioError ) ) + + + + +// Atomic increment and decrement operations +#if MAC + /* need to be implemented on Mac */ + inline long PaAsio_AtomicIncrement(volatile long* v) {return ++(*const_cast(v));} + inline long PaAsio_AtomicDecrement(volatile long* v) {return --(*const_cast(v));} +#elif WINDOWS + inline long PaAsio_AtomicIncrement(volatile long* v) {return InterlockedIncrement(const_cast(v));} + inline long PaAsio_AtomicDecrement(volatile long* v) {return InterlockedDecrement(const_cast(v));} +#endif + + + +typedef struct PaAsioDriverInfo +{ + ASIODriverInfo asioDriverInfo; + long inputChannelCount, outputChannelCount; + long bufferMinSize, bufferMaxSize, bufferPreferredSize, bufferGranularity; + bool postOutput; +} +PaAsioDriverInfo; + + +/* PaAsioHostApiRepresentation - host api datastructure specific to this implementation */ + +typedef struct +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + PaWinUtilComInitializationResult comInitializationResult; + + AsioDrivers *asioDrivers; + void *systemSpecific; + + /* the ASIO C API only allows one ASIO driver to be open at a time, + so we keep track of whether we have the driver open here, and + use this information to return errors from OpenStream if the + driver is already open. + + openAsioDeviceIndex will be PaNoDevice if there is no device open + and a valid pa_asio (not global) device index otherwise. + + openAsioDriverInfo is populated with the driver info for the + currently open device (if any) + */ + PaDeviceIndex openAsioDeviceIndex; + PaAsioDriverInfo openAsioDriverInfo; +} +PaAsioHostApiRepresentation; + + +/* + Retrieve driver names from ASIO, returned in a char** + allocated in . +*/ +static char **GetAsioDriverNames( PaAsioHostApiRepresentation *asioHostApi, PaUtilAllocationGroup *group, long driverCount ) +{ + char **result = 0; + int i; + + result =(char**)PaUtil_GroupAllocateMemory( + group, sizeof(char*) * driverCount ); + if( !result ) + goto error; + + result[0] = (char*)PaUtil_GroupAllocateMemory( + group, 32 * driverCount ); + if( !result[0] ) + goto error; + + for( i=0; iasioDrivers->getDriverNames( result, driverCount ); + +error: + return result; +} + + +static PaSampleFormat AsioSampleTypeToPaNativeSampleFormat(ASIOSampleType type) +{ + switch (type) { + case ASIOSTInt16MSB: + case ASIOSTInt16LSB: + return paInt16; + + case ASIOSTFloat32MSB: + case ASIOSTFloat32LSB: + case ASIOSTFloat64MSB: + case ASIOSTFloat64LSB: + return paFloat32; + + case ASIOSTInt32MSB: + case ASIOSTInt32LSB: + case ASIOSTInt32MSB16: + case ASIOSTInt32LSB16: + case ASIOSTInt32MSB18: + case ASIOSTInt32MSB20: + case ASIOSTInt32MSB24: + case ASIOSTInt32LSB18: + case ASIOSTInt32LSB20: + case ASIOSTInt32LSB24: + return paInt32; + + case ASIOSTInt24MSB: + case ASIOSTInt24LSB: + return paInt24; + + default: + return paCustomFormat; + } +} + +void AsioSampleTypeLOG(ASIOSampleType type) +{ + switch (type) { + case ASIOSTInt16MSB: PA_DEBUG(("ASIOSTInt16MSB\n")); break; + case ASIOSTInt16LSB: PA_DEBUG(("ASIOSTInt16LSB\n")); break; + case ASIOSTFloat32MSB:PA_DEBUG(("ASIOSTFloat32MSB\n"));break; + case ASIOSTFloat32LSB:PA_DEBUG(("ASIOSTFloat32LSB\n"));break; + case ASIOSTFloat64MSB:PA_DEBUG(("ASIOSTFloat64MSB\n"));break; + case ASIOSTFloat64LSB:PA_DEBUG(("ASIOSTFloat64LSB\n"));break; + case ASIOSTInt32MSB: PA_DEBUG(("ASIOSTInt32MSB\n")); break; + case ASIOSTInt32LSB: PA_DEBUG(("ASIOSTInt32LSB\n")); break; + case ASIOSTInt32MSB16:PA_DEBUG(("ASIOSTInt32MSB16\n"));break; + case ASIOSTInt32LSB16:PA_DEBUG(("ASIOSTInt32LSB16\n"));break; + case ASIOSTInt32MSB18:PA_DEBUG(("ASIOSTInt32MSB18\n"));break; + case ASIOSTInt32MSB20:PA_DEBUG(("ASIOSTInt32MSB20\n"));break; + case ASIOSTInt32MSB24:PA_DEBUG(("ASIOSTInt32MSB24\n"));break; + case ASIOSTInt32LSB18:PA_DEBUG(("ASIOSTInt32LSB18\n"));break; + case ASIOSTInt32LSB20:PA_DEBUG(("ASIOSTInt32LSB20\n"));break; + case ASIOSTInt32LSB24:PA_DEBUG(("ASIOSTInt32LSB24\n"));break; + case ASIOSTInt24MSB: PA_DEBUG(("ASIOSTInt24MSB\n")); break; + case ASIOSTInt24LSB: PA_DEBUG(("ASIOSTInt24LSB\n")); break; + default: PA_DEBUG(("Custom Format%d\n",type));break; + + } +} + +static int BytesPerAsioSample( ASIOSampleType sampleType ) +{ + switch (sampleType) { + case ASIOSTInt16MSB: + case ASIOSTInt16LSB: + return 2; + + case ASIOSTFloat64MSB: + case ASIOSTFloat64LSB: + return 8; + + case ASIOSTFloat32MSB: + case ASIOSTFloat32LSB: + case ASIOSTInt32MSB: + case ASIOSTInt32LSB: + case ASIOSTInt32MSB16: + case ASIOSTInt32LSB16: + case ASIOSTInt32MSB18: + case ASIOSTInt32MSB20: + case ASIOSTInt32MSB24: + case ASIOSTInt32LSB18: + case ASIOSTInt32LSB20: + case ASIOSTInt32LSB24: + return 4; + + case ASIOSTInt24MSB: + case ASIOSTInt24LSB: + return 3; + + default: + return 0; + } +} + + +static void Swap16( void *buffer, long shift, long count ) +{ + unsigned short *p = (unsigned short*)buffer; + unsigned short temp; + (void) shift; /* unused parameter */ + + while( count-- ) + { + temp = *p; + *p++ = (unsigned short)((temp<<8) | (temp>>8)); + } +} + +static void Swap24( void *buffer, long shift, long count ) +{ + unsigned char *p = (unsigned char*)buffer; + unsigned char temp; + (void) shift; /* unused parameter */ + + while( count-- ) + { + temp = *p; + *p = *(p+2); + *(p+2) = temp; + p += 3; + } +} + +#define PA_SWAP32_( x ) ((x>>24) | ((x>>8)&0xFF00) | ((x<<8)&0xFF0000) | (x<<24)); + +static void Swap32( void *buffer, long shift, long count ) +{ + unsigned long *p = (unsigned long*)buffer; + unsigned long temp; + (void) shift; /* unused parameter */ + + while( count-- ) + { + temp = *p; + *p++ = PA_SWAP32_( temp); + } +} + +static void SwapShiftLeft32( void *buffer, long shift, long count ) +{ + unsigned long *p = (unsigned long*)buffer; + unsigned long temp; + + while( count-- ) + { + temp = *p; + temp = PA_SWAP32_( temp); + *p++ = temp << shift; + } +} + +static void ShiftRightSwap32( void *buffer, long shift, long count ) +{ + unsigned long *p = (unsigned long*)buffer; + unsigned long temp; + + while( count-- ) + { + temp = *p >> shift; + *p++ = PA_SWAP32_( temp); + } +} + +static void ShiftLeft32( void *buffer, long shift, long count ) +{ + unsigned long *p = (unsigned long*)buffer; + unsigned long temp; + + while( count-- ) + { + temp = *p; + *p++ = temp << shift; + } +} + +static void ShiftRight32( void *buffer, long shift, long count ) +{ + unsigned long *p = (unsigned long*)buffer; + unsigned long temp; + + while( count-- ) + { + temp = *p; + *p++ = temp >> shift; + } +} + +#define PA_SWAP_( x, y ) temp=x; x = y; y = temp; + +static void Swap64ConvertFloat64ToFloat32( void *buffer, long shift, long count ) +{ + double *in = (double*)buffer; + float *out = (float*)buffer; + unsigned char *p; + unsigned char temp; + (void) shift; /* unused parameter */ + + while( count-- ) + { + p = (unsigned char*)in; + PA_SWAP_( p[0], p[7] ); + PA_SWAP_( p[1], p[6] ); + PA_SWAP_( p[2], p[5] ); + PA_SWAP_( p[3], p[4] ); + + *out++ = (float) (*in++); + } +} + +static void ConvertFloat64ToFloat32( void *buffer, long shift, long count ) +{ + double *in = (double*)buffer; + float *out = (float*)buffer; + (void) shift; /* unused parameter */ + + while( count-- ) + *out++ = (float) (*in++); +} + +static void ConvertFloat32ToFloat64Swap64( void *buffer, long shift, long count ) +{ + float *in = ((float*)buffer) + (count-1); + double *out = ((double*)buffer) + (count-1); + unsigned char *p; + unsigned char temp; + (void) shift; /* unused parameter */ + + while( count-- ) + { + *out = *in--; + + p = (unsigned char*)out; + PA_SWAP_( p[0], p[7] ); + PA_SWAP_( p[1], p[6] ); + PA_SWAP_( p[2], p[5] ); + PA_SWAP_( p[3], p[4] ); + + out--; + } +} + +static void ConvertFloat32ToFloat64( void *buffer, long shift, long count ) +{ + float *in = ((float*)buffer) + (count-1); + double *out = ((double*)buffer) + (count-1); + (void) shift; /* unused parameter */ + + while( count-- ) + *out-- = *in--; +} + +#ifdef MAC +#define PA_MSB_IS_NATIVE_ +#undef PA_LSB_IS_NATIVE_ +#endif + +#ifdef WINDOWS +#undef PA_MSB_IS_NATIVE_ +#define PA_LSB_IS_NATIVE_ +#endif + +typedef void PaAsioBufferConverter( void *, long, long ); + +static void SelectAsioToPaConverter( ASIOSampleType type, PaAsioBufferConverter **converter, long *shift ) +{ + *shift = 0; + *converter = 0; + + switch (type) { + case ASIOSTInt16MSB: + /* dest: paInt16, no conversion necessary, possible byte swap*/ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap16; + #endif + break; + case ASIOSTInt16LSB: + /* dest: paInt16, no conversion necessary, possible byte swap*/ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap16; + #endif + break; + case ASIOSTFloat32MSB: + /* dest: paFloat32, no conversion necessary, possible byte swap*/ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTFloat32LSB: + /* dest: paFloat32, no conversion necessary, possible byte swap*/ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTFloat64MSB: + /* dest: paFloat32, in-place conversion to/from float32, possible byte swap*/ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap64ConvertFloat64ToFloat32; + #else + *converter = ConvertFloat64ToFloat32; + #endif + break; + case ASIOSTFloat64LSB: + /* dest: paFloat32, in-place conversion to/from float32, possible byte swap*/ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap64ConvertFloat64ToFloat32; + #else + *converter = ConvertFloat64ToFloat32; + #endif + break; + case ASIOSTInt32MSB: + /* dest: paInt32, no conversion necessary, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTInt32LSB: + /* dest: paInt32, no conversion necessary, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTInt32MSB16: + /* dest: paInt32, 16 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 16; + break; + case ASIOSTInt32MSB18: + /* dest: paInt32, 14 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 14; + break; + case ASIOSTInt32MSB20: + /* dest: paInt32, 12 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 12; + break; + case ASIOSTInt32MSB24: + /* dest: paInt32, 8 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 8; + break; + case ASIOSTInt32LSB16: + /* dest: paInt32, 16 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 16; + break; + case ASIOSTInt32LSB18: + /* dest: paInt32, 14 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 14; + break; + case ASIOSTInt32LSB20: + /* dest: paInt32, 12 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 12; + break; + case ASIOSTInt32LSB24: + /* dest: paInt32, 8 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = SwapShiftLeft32; + #else + *converter = ShiftLeft32; + #endif + *shift = 8; + break; + case ASIOSTInt24MSB: + /* dest: paInt24, no conversion necessary, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap24; + #endif + break; + case ASIOSTInt24LSB: + /* dest: paInt24, no conversion necessary, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap24; + #endif + break; + } +} + + +static void SelectPaToAsioConverter( ASIOSampleType type, PaAsioBufferConverter **converter, long *shift ) +{ + *shift = 0; + *converter = 0; + + switch (type) { + case ASIOSTInt16MSB: + /* src: paInt16, no conversion necessary, possible byte swap*/ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap16; + #endif + break; + case ASIOSTInt16LSB: + /* src: paInt16, no conversion necessary, possible byte swap*/ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap16; + #endif + break; + case ASIOSTFloat32MSB: + /* src: paFloat32, no conversion necessary, possible byte swap*/ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTFloat32LSB: + /* src: paFloat32, no conversion necessary, possible byte swap*/ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTFloat64MSB: + /* src: paFloat32, in-place conversion to/from float32, possible byte swap*/ + #ifdef PA_LSB_IS_NATIVE_ + *converter = ConvertFloat32ToFloat64Swap64; + #else + *converter = ConvertFloat32ToFloat64; + #endif + break; + case ASIOSTFloat64LSB: + /* src: paFloat32, in-place conversion to/from float32, possible byte swap*/ + #ifdef PA_MSB_IS_NATIVE_ + *converter = ConvertFloat32ToFloat64Swap64; + #else + *converter = ConvertFloat32ToFloat64; + #endif + break; + case ASIOSTInt32MSB: + /* src: paInt32, no conversion necessary, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTInt32LSB: + /* src: paInt32, no conversion necessary, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap32; + #endif + break; + case ASIOSTInt32MSB16: + /* src: paInt32, 16 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 16; + break; + case ASIOSTInt32MSB18: + /* src: paInt32, 14 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 14; + break; + case ASIOSTInt32MSB20: + /* src: paInt32, 12 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 12; + break; + case ASIOSTInt32MSB24: + /* src: paInt32, 8 bit shift, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 8; + break; + case ASIOSTInt32LSB16: + /* src: paInt32, 16 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 16; + break; + case ASIOSTInt32LSB18: + /* src: paInt32, 14 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 14; + break; + case ASIOSTInt32LSB20: + /* src: paInt32, 12 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 12; + break; + case ASIOSTInt32LSB24: + /* src: paInt32, 8 bit shift, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = ShiftRightSwap32; + #else + *converter = ShiftRight32; + #endif + *shift = 8; + break; + case ASIOSTInt24MSB: + /* src: paInt24, no conversion necessary, possible byte swap */ + #ifdef PA_LSB_IS_NATIVE_ + *converter = Swap24; + #endif + break; + case ASIOSTInt24LSB: + /* src: paInt24, no conversion necessary, possible byte swap */ + #ifdef PA_MSB_IS_NATIVE_ + *converter = Swap24; + #endif + break; + } +} + + +typedef struct PaAsioDeviceInfo +{ + PaDeviceInfo commonDeviceInfo; + long minBufferSize; + long maxBufferSize; + long preferredBufferSize; + long bufferGranularity; + + ASIOChannelInfo *asioChannelInfos; +} +PaAsioDeviceInfo; + + +PaError PaAsio_GetAvailableBufferSizes( PaDeviceIndex device, + long *minBufferSizeFrames, long *maxBufferSizeFrames, long *preferredBufferSizeFrames, long *granularity ) +{ + PaError result; + PaUtilHostApiRepresentation *hostApi; + PaDeviceIndex hostApiDevice; + + result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO ); + + if( result == paNoError ) + { + result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi ); + + if( result == paNoError ) + { + PaAsioDeviceInfo *asioDeviceInfo = + (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice]; + + *minBufferSizeFrames = asioDeviceInfo->minBufferSize; + *maxBufferSizeFrames = asioDeviceInfo->maxBufferSize; + *preferredBufferSizeFrames = asioDeviceInfo->preferredBufferSize; + *granularity = asioDeviceInfo->bufferGranularity; + } + } + + return result; +} + +/* Unload whatever we loaded in LoadAsioDriver(). +*/ +static void UnloadAsioDriver( void ) +{ + ASIOExit(); +} + +/* + load the asio driver named by and return statistics about + the driver in info. If no error occurred, the driver will remain open + and must be closed by the called by calling UnloadAsioDriver() - if an error + is returned the driver will already be unloaded. +*/ +static PaError LoadAsioDriver( PaAsioHostApiRepresentation *asioHostApi, const char *driverName, + PaAsioDriverInfo *driverInfo, void *systemSpecific ) +{ + PaError result = paNoError; + ASIOError asioError; + int asioIsInitialized = 0; + + if( !asioHostApi->asioDrivers->loadDriver( const_cast(driverName) ) ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_HOST_ERROR( 0, "Failed to load ASIO driver" ); + goto error; + } + + memset( &driverInfo->asioDriverInfo, 0, sizeof(ASIODriverInfo) ); + driverInfo->asioDriverInfo.asioVersion = 2; + driverInfo->asioDriverInfo.sysRef = systemSpecific; + if( (asioError = ASIOInit( &driverInfo->asioDriverInfo )) != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + goto error; + } + else + { + asioIsInitialized = 1; + } + + if( (asioError = ASIOGetChannels(&driverInfo->inputChannelCount, + &driverInfo->outputChannelCount)) != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + goto error; + } + + if( (asioError = ASIOGetBufferSize(&driverInfo->bufferMinSize, + &driverInfo->bufferMaxSize, &driverInfo->bufferPreferredSize, + &driverInfo->bufferGranularity)) != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + goto error; + } + + if( ASIOOutputReady() == ASE_OK ) + driverInfo->postOutput = true; + else + driverInfo->postOutput = false; + + return result; + +error: + if( asioIsInitialized ) + { + ASIOExit(); + } + + return result; +} + + +#define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_ 13 /* must be the same number of elements as in the array below */ +static ASIOSampleRate defaultSampleRateSearchOrder_[] + = {44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0, + 192000.0, 16000.0, 12000.0, 11025.0, 9600.0, 8000.0 }; + + +/* we look up IsDebuggerPresent at runtime incase it isn't present (on Win95 for example) */ +typedef BOOL (WINAPI *IsDebuggerPresentPtr)(VOID); +IsDebuggerPresentPtr IsDebuggerPresent_ = 0; +//FARPROC IsDebuggerPresent_ = 0; // this is the current way to do it apparently according to davidv + +PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + int i, driverCount; + PaAsioHostApiRepresentation *asioHostApi; + PaAsioDeviceInfo *deviceInfoArray; + char **names; + PaAsioDriverInfo paAsioDriverInfo; + + asioHostApi = (PaAsioHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaAsioHostApiRepresentation) ); + if( !asioHostApi ) + { + result = paInsufficientMemory; + goto error; + } + + /* + We initialize COM ourselves here and uninitialize it in Terminate(). + This should be the only COM initialization needed in this module. + + The ASIO SDK may also initialize COM but since we want to reduce dependency + on the ASIO SDK we manage COM initialization ourselves. + + There used to be code that initialized COM in other situations + such as when creating a Stream. This made PA work when calling Pa_CreateStream + from a non-main thread. However we currently consider initialization + of COM in non-main threads to be the caller's responsibility. + */ + result = PaWinUtil_CoInitialize( paASIO, &asioHostApi->comInitializationResult ); + if( result != paNoError ) + { + goto error; + } + + asioHostApi->asioDrivers = 0; /* avoid surprises in our error handler below */ + + asioHostApi->allocations = PaUtil_CreateAllocationGroup(); + if( !asioHostApi->allocations ) + { + result = paInsufficientMemory; + goto error; + } + + /* Allocate the AsioDrivers() driver list (class from ASIO SDK) */ + try + { + asioHostApi->asioDrivers = new AsioDrivers(); /* invokes CoInitialize(0) in AsioDriverList::AsioDriverList */ + } + catch (std::bad_alloc) + { + asioHostApi->asioDrivers = 0; + } + /* some implementations of new (ie MSVC, see http://support.microsoft.com/?kbid=167733) + don't throw std::bad_alloc, so we also explicitly test for a null return. */ + if( asioHostApi->asioDrivers == 0 ) + { + result = paInsufficientMemory; + goto error; + } + + asioDrivers = asioHostApi->asioDrivers; /* keep SDK global in sync until we stop depending on it */ + + asioHostApi->systemSpecific = 0; + asioHostApi->openAsioDeviceIndex = paNoDevice; + + *hostApi = &asioHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + + (*hostApi)->info.type = paASIO; + (*hostApi)->info.name = "ASIO"; + (*hostApi)->info.deviceCount = 0; + + #ifdef WINDOWS + /* use desktop window as system specific ptr */ + asioHostApi->systemSpecific = GetDesktopWindow(); + #endif + + /* driverCount is the number of installed drivers - not necessarily + the number of installed physical devices. */ + #if MAC + driverCount = asioHostApi->asioDrivers->getNumFragments(); + #elif WINDOWS + driverCount = asioHostApi->asioDrivers->asioGetNumDev(); + #endif + + if( driverCount > 0 ) + { + names = GetAsioDriverNames( asioHostApi, asioHostApi->allocations, driverCount ); + if( !names ) + { + result = paInsufficientMemory; + goto error; + } + + + /* allocate enough space for all drivers, even if some aren't installed */ + + (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + asioHostApi->allocations, sizeof(PaDeviceInfo*) * driverCount ); + if( !(*hostApi)->deviceInfos ) + { + result = paInsufficientMemory; + goto error; + } + + /* allocate all device info structs in a contiguous block */ + deviceInfoArray = (PaAsioDeviceInfo*)PaUtil_GroupAllocateMemory( + asioHostApi->allocations, sizeof(PaAsioDeviceInfo) * driverCount ); + if( !deviceInfoArray ) + { + result = paInsufficientMemory; + goto error; + } + + IsDebuggerPresent_ = (IsDebuggerPresentPtr)GetProcAddress( LoadLibraryA( "Kernel32.dll" ), "IsDebuggerPresent" ); + + for( i=0; i < driverCount; ++i ) + { + + PA_DEBUG(("ASIO names[%d]:%s\n",i,names[i])); + + // Since portaudio opens ALL ASIO drivers, and no one else does that, + // we face fact that some drivers were not meant for it, drivers which act + // like shells on top of REAL drivers, for instance. + // so we get duplicate handles, locks and other problems. + // so lets NOT try to load any such wrappers. + // The ones i [davidv] know of so far are: + + if ( strcmp (names[i],"ASIO DirectX Full Duplex Driver") == 0 + || strcmp (names[i],"ASIO Multimedia Driver") == 0 + || strncmp(names[i],"Premiere",8) == 0 //"Premiere Elements Windows Sound 1.0" + || strncmp(names[i],"Adobe",5) == 0 //"Adobe Default Windows Sound 1.5" + ) + { + PA_DEBUG(("BLACKLISTED!!!\n")); + continue; + } + + + if( IsDebuggerPresent_ && IsDebuggerPresent_() ) + { + /* ASIO Digidesign Driver uses PACE copy protection which quits out + if a debugger is running. So we don't load it if a debugger is running. */ + if( strcmp(names[i], "ASIO Digidesign Driver") == 0 ) + { + PA_DEBUG(("BLACKLISTED!!! ASIO Digidesign Driver would quit the debugger\n")); + continue; + } + } + + + /* Attempt to load the asio driver... */ + if( LoadAsioDriver( asioHostApi, names[i], &paAsioDriverInfo, asioHostApi->systemSpecific ) == paNoError ) + { + PaAsioDeviceInfo *asioDeviceInfo = &deviceInfoArray[ (*hostApi)->info.deviceCount ]; + PaDeviceInfo *deviceInfo = &asioDeviceInfo->commonDeviceInfo; + + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + + deviceInfo->name = names[i]; + PA_DEBUG(("PaAsio_Initialize: drv:%d name = %s\n", i,deviceInfo->name)); + PA_DEBUG(("PaAsio_Initialize: drv:%d inputChannels = %d\n", i, paAsioDriverInfo.inputChannelCount)); + PA_DEBUG(("PaAsio_Initialize: drv:%d outputChannels = %d\n", i, paAsioDriverInfo.outputChannelCount)); + PA_DEBUG(("PaAsio_Initialize: drv:%d bufferMinSize = %d\n", i, paAsioDriverInfo.bufferMinSize)); + PA_DEBUG(("PaAsio_Initialize: drv:%d bufferMaxSize = %d\n", i, paAsioDriverInfo.bufferMaxSize)); + PA_DEBUG(("PaAsio_Initialize: drv:%d bufferPreferredSize = %d\n", i, paAsioDriverInfo.bufferPreferredSize)); + PA_DEBUG(("PaAsio_Initialize: drv:%d bufferGranularity = %d\n", i, paAsioDriverInfo.bufferGranularity)); + + deviceInfo->maxInputChannels = paAsioDriverInfo.inputChannelCount; + deviceInfo->maxOutputChannels = paAsioDriverInfo.outputChannelCount; + + deviceInfo->defaultSampleRate = 0.; + bool foundDefaultSampleRate = false; + for( int j=0; j < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++j ) + { + ASIOError asioError = ASIOCanSampleRate( defaultSampleRateSearchOrder_[j] ); + if( asioError != ASE_NoClock && asioError != ASE_NotPresent ) + { + deviceInfo->defaultSampleRate = defaultSampleRateSearchOrder_[j]; + foundDefaultSampleRate = true; + break; + } + } + + PA_DEBUG(("PaAsio_Initialize: drv:%d defaultSampleRate = %f\n", i, deviceInfo->defaultSampleRate)); + + if( foundDefaultSampleRate ){ + + /* calculate default latency values from bufferPreferredSize + for default low latency, and bufferMaxSize + for default high latency. + use the default sample rate to convert from samples to + seconds. Without knowing what sample rate the user will + use this is the best we can do. + */ + + double defaultLowLatency = + paAsioDriverInfo.bufferPreferredSize / deviceInfo->defaultSampleRate; + + deviceInfo->defaultLowInputLatency = defaultLowLatency; + deviceInfo->defaultLowOutputLatency = defaultLowLatency; + + double defaultHighLatency = + paAsioDriverInfo.bufferMaxSize / deviceInfo->defaultSampleRate; + + if( defaultHighLatency < defaultLowLatency ) + defaultHighLatency = defaultLowLatency; /* just in case the driver returns something strange */ + + deviceInfo->defaultHighInputLatency = defaultHighLatency; + deviceInfo->defaultHighOutputLatency = defaultHighLatency; + + }else{ + + deviceInfo->defaultLowInputLatency = 0.; + deviceInfo->defaultLowOutputLatency = 0.; + deviceInfo->defaultHighInputLatency = 0.; + deviceInfo->defaultHighOutputLatency = 0.; + } + + PA_DEBUG(("PaAsio_Initialize: drv:%d defaultLowInputLatency = %f\n", i, deviceInfo->defaultLowInputLatency)); + PA_DEBUG(("PaAsio_Initialize: drv:%d defaultLowOutputLatency = %f\n", i, deviceInfo->defaultLowOutputLatency)); + PA_DEBUG(("PaAsio_Initialize: drv:%d defaultHighInputLatency = %f\n", i, deviceInfo->defaultHighInputLatency)); + PA_DEBUG(("PaAsio_Initialize: drv:%d defaultHighOutputLatency = %f\n", i, deviceInfo->defaultHighOutputLatency)); + + asioDeviceInfo->minBufferSize = paAsioDriverInfo.bufferMinSize; + asioDeviceInfo->maxBufferSize = paAsioDriverInfo.bufferMaxSize; + asioDeviceInfo->preferredBufferSize = paAsioDriverInfo.bufferPreferredSize; + asioDeviceInfo->bufferGranularity = paAsioDriverInfo.bufferGranularity; + + + asioDeviceInfo->asioChannelInfos = (ASIOChannelInfo*)PaUtil_GroupAllocateMemory( + asioHostApi->allocations, + sizeof(ASIOChannelInfo) * (deviceInfo->maxInputChannels + + deviceInfo->maxOutputChannels) ); + if( !asioDeviceInfo->asioChannelInfos ) + { + result = paInsufficientMemory; + goto error_unload; + } + + int a; + + for( a=0; a < deviceInfo->maxInputChannels; ++a ){ + asioDeviceInfo->asioChannelInfos[a].channel = a; + asioDeviceInfo->asioChannelInfos[a].isInput = ASIOTrue; + ASIOError asioError = ASIOGetChannelInfo( &asioDeviceInfo->asioChannelInfos[a] ); + if( asioError != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + goto error_unload; + } + } + + for( a=0; a < deviceInfo->maxOutputChannels; ++a ){ + int b = deviceInfo->maxInputChannels + a; + asioDeviceInfo->asioChannelInfos[b].channel = a; + asioDeviceInfo->asioChannelInfos[b].isInput = ASIOFalse; + ASIOError asioError = ASIOGetChannelInfo( &asioDeviceInfo->asioChannelInfos[b] ); + if( asioError != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + goto error_unload; + } + } + + + /* unload the driver */ + UnloadAsioDriver(); + + (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo; + ++(*hostApi)->info.deviceCount; + } + } + } + + if( (*hostApi)->info.deviceCount > 0 ) + { + (*hostApi)->info.defaultInputDevice = 0; + (*hostApi)->info.defaultOutputDevice = 0; + } + else + { + (*hostApi)->info.defaultInputDevice = paNoDevice; + (*hostApi)->info.defaultOutputDevice = paNoDevice; + } + + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &asioHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &asioHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + return result; + +error_unload: + UnloadAsioDriver(); + +error: + if( asioHostApi ) + { + if( asioHostApi->allocations ) + { + PaUtil_FreeAllAllocations( asioHostApi->allocations ); + PaUtil_DestroyAllocationGroup( asioHostApi->allocations ); + } + + delete asioHostApi->asioDrivers; + asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */ + + PaWinUtil_CoUninitialize( paASIO, &asioHostApi->comInitializationResult ); + + PaUtil_FreeMemory( asioHostApi ); + } + + return result; +} + + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi; + + /* + IMPLEMENT ME: + - clean up any resources not handled by the allocation group (need to review if there are any) + */ + + if( asioHostApi->allocations ) + { + PaUtil_FreeAllAllocations( asioHostApi->allocations ); + PaUtil_DestroyAllocationGroup( asioHostApi->allocations ); + } + + delete asioHostApi->asioDrivers; + asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */ + + PaWinUtil_CoUninitialize( paASIO, &asioHostApi->comInitializationResult ); + + PaUtil_FreeMemory( asioHostApi ); +} + + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + PaError result = paNoError; + PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi; + PaAsioDriverInfo *driverInfo = &asioHostApi->openAsioDriverInfo; + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaDeviceIndex asioDeviceIndex; + ASIOError asioError; + + if( inputParameters && outputParameters ) + { + /* full duplex ASIO stream must use the same device for input and output */ + + if( inputParameters->device != outputParameters->device ) + return paBadIODeviceCombination; + } + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( inputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + asioDeviceIndex = inputParameters->device; + + /* validate inputStreamInfo */ + /** @todo do more validation here */ + // if( inputParameters->hostApiSpecificStreamInfo ) + // return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( outputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + asioDeviceIndex = outputParameters->device; + + /* validate outputStreamInfo */ + /** @todo do more validation here */ + // if( outputParameters->hostApiSpecificStreamInfo ) + // return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + outputChannelCount = 0; + } + + + + /* if an ASIO device is open we can only get format information for the currently open device */ + + if( asioHostApi->openAsioDeviceIndex != paNoDevice + && asioHostApi->openAsioDeviceIndex != asioDeviceIndex ) + { + return paDeviceUnavailable; + } + + + /* NOTE: we load the driver and use its current settings + rather than the ones in our device info structure which may be stale */ + + /* open the device if it's not already open */ + if( asioHostApi->openAsioDeviceIndex == paNoDevice ) + { + result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name, + driverInfo, asioHostApi->systemSpecific ); + if( result != paNoError ) + return result; + } + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > 0 ) + { + if( inputChannelCount > driverInfo->inputChannelCount ) + { + result = paInvalidChannelCount; + goto done; + } + } + + /* check that output device can support outputChannelCount */ + if( outputChannelCount ) + { + if( outputChannelCount > driverInfo->outputChannelCount ) + { + result = paInvalidChannelCount; + goto done; + } + } + + /* query for sample rate support */ + asioError = ASIOCanSampleRate( sampleRate ); + if( asioError == ASE_NoClock || asioError == ASE_NotPresent ) + { + result = paInvalidSampleRate; + goto done; + } + +done: + /* close the device if it wasn't already open */ + if( asioHostApi->openAsioDeviceIndex == paNoDevice ) + { + UnloadAsioDriver(); /* not sure if we should check for errors here */ + } + + if( result == paNoError ) + return paFormatIsSupported; + else + return result; +} + + + +/** A data structure specifically for storing blocking i/o related data. */ +typedef struct PaAsioStreamBlockingState +{ + int stopFlag; /**< Flag indicating that block processing is to be stopped. */ + + unsigned long writeBuffersRequested; /**< The number of available output buffers, requested by the #WriteStream() function. */ + unsigned long readFramesRequested; /**< The number of available input frames, requested by the #ReadStream() function. */ + + int writeBuffersRequestedFlag; /**< Flag to indicate that #WriteStream() has requested more output buffers to be available. */ + int readFramesRequestedFlag; /**< Flag to indicate that #ReadStream() requires more input frames to be available. */ + + HANDLE writeBuffersReadyEvent; /**< Event to signal that requested output buffers are available. */ + HANDLE readFramesReadyEvent; /**< Event to signal that requested input frames are available. */ + + void *writeRingBufferData; /**< The actual ring buffer memory, used by the output ring buffer. */ + void *readRingBufferData; /**< The actual ring buffer memory, used by the input ring buffer. */ + + PaUtilRingBuffer writeRingBuffer; /**< Frame-aligned blocking i/o ring buffer to store output data (interleaved user format). */ + PaUtilRingBuffer readRingBuffer; /**< Frame-aligned blocking i/o ring buffer to store input data (interleaved user format). */ + + long writeRingBufferInitialFrames; /**< The initial number of silent frames within the output ring buffer. */ + + const void **writeStreamBuffer; /**< Temp buffer, used by #WriteStream() for handling non-interleaved data. */ + void **readStreamBuffer; /**< Temp buffer, used by #ReadStream() for handling non-interleaved data. */ + + PaUtilBufferProcessor bufferProcessor; /**< Buffer processor, used to handle the blocking i/o ring buffers. */ + + int outputUnderflowFlag; /**< Flag to signal an output underflow from within the callback function. */ + int inputOverflowFlag; /**< Flag to signal an input overflow from within the callback function. */ +} +PaAsioStreamBlockingState; + + + +/* PaAsioStream - a stream data structure specifically for this implementation */ + +typedef struct PaAsioStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + PaAsioHostApiRepresentation *asioHostApi; + unsigned long framesPerHostCallback; + + /* ASIO driver info - these may not be needed for the life of the stream, + but store them here until we work out how format conversion is going + to work. */ + + ASIOBufferInfo *asioBufferInfos; + ASIOChannelInfo *asioChannelInfos; + long asioInputLatencyFrames, asioOutputLatencyFrames; // actual latencies returned by asio + + long inputChannelCount, outputChannelCount; + bool postOutput; + + void **bufferPtrs; /* this is carved up for inputBufferPtrs and outputBufferPtrs */ + void **inputBufferPtrs[2]; + void **outputBufferPtrs[2]; + + PaAsioBufferConverter *inputBufferConverter; + long inputShift; + PaAsioBufferConverter *outputBufferConverter; + long outputShift; + + volatile bool stopProcessing; + int stopPlayoutCount; + HANDLE completedBuffersPlayedEvent; + + bool streamFinishedCallbackCalled; + int isStopped; + volatile int isActive; + volatile bool zeroOutput; /* all future calls to the callback will output silence */ + + volatile long reenterCount; + volatile long reenterError; + + PaStreamCallbackFlags callbackFlags; + + PaAsioStreamBlockingState *blockingState; /**< Blocking i/o data struct, or NULL when using callback interface. */ +} +PaAsioStream; + +static PaAsioStream *theAsioStream = 0; /* due to ASIO sdk limitations there can be only one stream */ + + +static void ZeroOutputBuffers( PaAsioStream *stream, long index ) +{ + int i; + + for( i=0; i < stream->outputChannelCount; ++i ) + { + void *buffer = stream->asioBufferInfos[ i + stream->inputChannelCount ].buffers[index]; + + int bytesPerSample = BytesPerAsioSample( stream->asioChannelInfos[ i + stream->inputChannelCount ].type ); + + memset( buffer, 0, stream->framesPerHostCallback * bytesPerSample ); + } +} + + +/* return the next power of two >= x. + Returns the input parameter if it is already a power of two. + http://stackoverflow.com/questions/364985/algorithm-for-finding-the-smallest-power-of-two-thats-greater-or-equal-to-a-giv +*/ +static unsigned long NextPowerOfTwo( unsigned long x ) +{ + --x; + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + /* If you needed to deal with numbers > 2^32 the following would be needed. + For latencies, we don't deal with values this large. + x |= x >> 16; + */ + + return x + 1; +} + + +static unsigned long SelectHostBufferSizeForUnspecifiedUserFramesPerBuffer( + unsigned long targetBufferingLatencyFrames, PaAsioDriverInfo *driverInfo ) +{ + /* Choose a host buffer size based only on targetBufferingLatencyFrames and the + device's supported buffer sizes. Always returns a valid value. + */ + + unsigned long result; + + if( targetBufferingLatencyFrames <= (unsigned long)driverInfo->bufferMinSize ) + { + result = driverInfo->bufferMinSize; + } + else if( targetBufferingLatencyFrames >= (unsigned long)driverInfo->bufferMaxSize ) + { + result = driverInfo->bufferMaxSize; + } + else + { + if( driverInfo->bufferGranularity == 0 ) /* single fixed host buffer size */ + { + /* The documentation states that bufferGranularity should be zero + when bufferMinSize, bufferMaxSize and bufferPreferredSize are the + same. We assume that is the case. + */ + + result = driverInfo->bufferPreferredSize; + } + else if( driverInfo->bufferGranularity == -1 ) /* power-of-two */ + { + /* We assume bufferMinSize and bufferMaxSize are powers of two. */ + + result = NextPowerOfTwo( targetBufferingLatencyFrames ); + + if( result < (unsigned long)driverInfo->bufferMinSize ) + result = driverInfo->bufferMinSize; + + if( result > (unsigned long)driverInfo->bufferMaxSize ) + result = driverInfo->bufferMaxSize; + } + else /* modulo bufferGranularity */ + { + /* round up to the next multiple of granularity */ + unsigned long n = (targetBufferingLatencyFrames + driverInfo->bufferGranularity - 1) + / driverInfo->bufferGranularity; + + result = n * driverInfo->bufferGranularity; + + if( result < (unsigned long)driverInfo->bufferMinSize ) + result = driverInfo->bufferMinSize; + + if( result > (unsigned long)driverInfo->bufferMaxSize ) + result = driverInfo->bufferMaxSize; + } + } + + return result; +} + + +static unsigned long SelectHostBufferSizeForSpecifiedUserFramesPerBuffer( + unsigned long targetBufferingLatencyFrames, unsigned long userFramesPerBuffer, + PaAsioDriverInfo *driverInfo ) +{ + /* Select a host buffer size conforming to targetBufferingLatencyFrames + and the device's supported buffer sizes. + The return value will always be a multiple of userFramesPerBuffer. + If a valid buffer size can not be found the function returns 0. + + The current implementation uses a simple iterative search for clarity. + Feel free to suggest a closed form solution. + */ + unsigned long result = 0; + + assert( userFramesPerBuffer != 0 ); + + if( driverInfo->bufferGranularity == 0 ) /* single fixed host buffer size */ + { + /* The documentation states that bufferGranularity should be zero + when bufferMinSize, bufferMaxSize and bufferPreferredSize are the + same. We assume that is the case. + */ + + if( (driverInfo->bufferPreferredSize % userFramesPerBuffer) == 0 ) + result = driverInfo->bufferPreferredSize; + } + else if( driverInfo->bufferGranularity == -1 ) /* power-of-two */ + { + /* We assume bufferMinSize and bufferMaxSize are powers of two. */ + + /* Search all powers of two in the range [bufferMinSize,bufferMaxSize] + for multiples of userFramesPerBuffer. We prefer the first multiple + that is equal or greater than targetBufferingLatencyFrames, or + failing that, the largest multiple less than + targetBufferingLatencyFrames. + */ + unsigned long x = (unsigned long)driverInfo->bufferMinSize; + do { + if( (x % userFramesPerBuffer) == 0 ) + { + /* any power-of-two multiple of userFramesPerBuffer is acceptable */ + result = x; + if( result >= targetBufferingLatencyFrames ) + break; /* stop. a value >= to targetBufferingLatencyFrames is ideal. */ + } + + x *= 2; + } while( x <= (unsigned long)driverInfo->bufferMaxSize ); + } + else /* modulo granularity */ + { + /* We assume bufferMinSize is a multiple of bufferGranularity. */ + + /* Search all multiples of bufferGranularity in the range + [bufferMinSize,bufferMaxSize] for multiples of userFramesPerBuffer. + We prefer the first multiple that is equal or greater than + targetBufferingLatencyFrames, or failing that, the largest multiple + less than targetBufferingLatencyFrames. + */ + unsigned long x = (unsigned long)driverInfo->bufferMinSize; + do { + if( (x % userFramesPerBuffer) == 0 ) + { + /* any power-of-two multiple of userFramesPerBuffer is acceptable */ + result = x; + if( result >= targetBufferingLatencyFrames ) + break; /* stop. a value >= to targetBufferingLatencyFrames is ideal. */ + } + + x += driverInfo->bufferGranularity; + } while( x <= (unsigned long)driverInfo->bufferMaxSize ); + } + + return result; +} + + +static unsigned long SelectHostBufferSize( + unsigned long targetBufferingLatencyFrames, + unsigned long userFramesPerBuffer, PaAsioDriverInfo *driverInfo ) +{ + unsigned long result = 0; + + /* We select a host buffer size based on the following requirements + (in priority order): + + 1. The host buffer size must be permissible according to the ASIO + driverInfo buffer size constraints (min, max, granularity or + powers-of-two). + + 2. If the user specifies a non-zero framesPerBuffer parameter + (userFramesPerBuffer here) the host buffer should be a multiple of + this (subject to the constraints in (1) above). + + [NOTE: Where no permissible host buffer size is a multiple of + userFramesPerBuffer, we choose a value as if userFramesPerBuffer were + zero (i.e. we ignore it). This strategy is open for review ~ perhaps + there are still "more optimal" buffer sizes related to + userFramesPerBuffer that we could use.] + + 3. The host buffer size should be greater than or equal to + targetBufferingLatencyFrames, subject to (1) and (2) above. Where it + is not possible to select a host buffer size equal or greater than + targetBufferingLatencyFrames, the highest buffer size conforming to + (1) and (2) should be chosen. + */ + + if( userFramesPerBuffer != 0 ) + { + /* userFramesPerBuffer is specified, try to find a buffer size that's + a multiple of it */ + result = SelectHostBufferSizeForSpecifiedUserFramesPerBuffer( + targetBufferingLatencyFrames, userFramesPerBuffer, driverInfo ); + } + + if( result == 0 ) + { + /* either userFramesPerBuffer was not specified, or we couldn't find a + host buffer size that is a multiple of it. Select a host buffer size + according to targetBufferingLatencyFrames and the ASIO driverInfo + buffer size constraints. + */ + result = SelectHostBufferSizeForUnspecifiedUserFramesPerBuffer( + targetBufferingLatencyFrames, driverInfo ); + } + + return result; +} + + +/* returns channelSelectors if present */ + +static PaError ValidateAsioSpecificStreamInfo( + const PaStreamParameters *streamParameters, + const PaAsioStreamInfo *streamInfo, + int deviceChannelCount, + int **channelSelectors ) +{ + if( streamInfo ) + { + if( streamInfo->size != sizeof( PaAsioStreamInfo ) + || streamInfo->version != 1 ) + { + return paIncompatibleHostApiSpecificStreamInfo; + } + + if( streamInfo->flags & paAsioUseChannelSelectors ) + *channelSelectors = streamInfo->channelSelectors; + + if( !(*channelSelectors) ) + return paIncompatibleHostApiSpecificStreamInfo; + + for( int i=0; i < streamParameters->channelCount; ++i ){ + if( (*channelSelectors)[i] < 0 + || (*channelSelectors)[i] >= deviceChannelCount ){ + return paInvalidChannelCount; + } + } + } + + return paNoError; +} + + +static bool IsUsingExternalClockSource() +{ + bool result = false; + ASIOError asioError; + ASIOClockSource clocks[32]; + long numSources=32; + + /* davidv: listing ASIO Clock sources. there is an ongoing investigation by + me about whether or not to call ASIOSetSampleRate if an external Clock is + used. A few drivers expected different things here */ + + asioError = ASIOGetClockSources(clocks, &numSources); + if( asioError != ASE_OK ){ + PA_DEBUG(("ERROR: ASIOGetClockSources: %s\n", PaAsio_GetAsioErrorText(asioError) )); + }else{ + PA_DEBUG(("INFO ASIOGetClockSources listing %d clocks\n", numSources )); + for (int i=0;iopenAsioDeviceIndex != paNoDevice ) + { + PA_DEBUG(("OpenStream paDeviceUnavailable\n")); + return paDeviceUnavailable; + } + + assert( theAsioStream == 0 ); + + if( inputParameters && outputParameters ) + { + /* full duplex ASIO stream must use the same device for input and output */ + + if( inputParameters->device != outputParameters->device ) + { + PA_DEBUG(("OpenStream paBadIODeviceCombination\n")); + return paBadIODeviceCombination; + } + } + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + suggestedInputLatencyFrames = (unsigned long)((inputParameters->suggestedLatency * sampleRate)+0.5f); + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + asioDeviceIndex = inputParameters->device; + + PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[asioDeviceIndex]; + + /* validate hostApiSpecificStreamInfo */ + inputStreamInfo = (PaAsioStreamInfo*)inputParameters->hostApiSpecificStreamInfo; + result = ValidateAsioSpecificStreamInfo( inputParameters, inputStreamInfo, + asioDeviceInfo->commonDeviceInfo.maxInputChannels, + &inputChannelSelectors + ); + if( result != paNoError ) return result; + } + else + { + inputChannelCount = 0; + inputSampleFormat = 0; + suggestedInputLatencyFrames = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + suggestedOutputLatencyFrames = (unsigned long)((outputParameters->suggestedLatency * sampleRate)+0.5f); + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + asioDeviceIndex = outputParameters->device; + + PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[asioDeviceIndex]; + + /* validate hostApiSpecificStreamInfo */ + outputStreamInfo = (PaAsioStreamInfo*)outputParameters->hostApiSpecificStreamInfo; + result = ValidateAsioSpecificStreamInfo( outputParameters, outputStreamInfo, + asioDeviceInfo->commonDeviceInfo.maxOutputChannels, + &outputChannelSelectors + ); + if( result != paNoError ) return result; + } + else + { + outputChannelCount = 0; + outputSampleFormat = 0; + suggestedOutputLatencyFrames = 0; + } + + driverInfo = &asioHostApi->openAsioDriverInfo; + + /* NOTE: we load the driver and use its current settings + rather than the ones in our device info structure which may be stale */ + + result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name, + driverInfo, asioHostApi->systemSpecific ); + if( result == paNoError ) + asioIsInitialized = 1; + else{ + PA_DEBUG(("OpenStream ERROR1 - LoadAsioDriver returned %d\n", result)); + goto error; + } + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > 0 ) + { + if( inputChannelCount > driverInfo->inputChannelCount ) + { + result = paInvalidChannelCount; + PA_DEBUG(("OpenStream ERROR2\n")); + goto error; + } + } + + /* check that output device can support outputChannelCount */ + if( outputChannelCount ) + { + if( outputChannelCount > driverInfo->outputChannelCount ) + { + result = paInvalidChannelCount; + PA_DEBUG(("OpenStream ERROR3\n")); + goto error; + } + } + + result = ValidateAndSetSampleRate( sampleRate ); + if( result != paNoError ) + goto error; + + /* + IMPLEMENT ME: + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported + */ + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ){ + PA_DEBUG(("OpenStream invalid flags!!\n")); + return paInvalidFlag; /* unexpected platform specific flag */ + } + + + stream = (PaAsioStream*)PaUtil_AllocateMemory( sizeof(PaAsioStream) ); + if( !stream ) + { + result = paInsufficientMemory; + PA_DEBUG(("OpenStream ERROR5\n")); + goto error; + } + stream->blockingState = NULL; /* Blocking i/o not initialized, yet. */ + + + stream->completedBuffersPlayedEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); + if( stream->completedBuffersPlayedEvent == NULL ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + PA_DEBUG(("OpenStream ERROR6\n")); + goto error; + } + completedBuffersPlayedEventInited = 1; + + + stream->asioBufferInfos = 0; /* for deallocation in error */ + stream->asioChannelInfos = 0; /* for deallocation in error */ + stream->bufferPtrs = 0; /* for deallocation in error */ + + /* Using blocking i/o interface... */ + if( usingBlockingIo ) + { + /* Blocking i/o is implemented by running callback mode, using a special blocking i/o callback. */ + streamCallback = BlockingIoPaCallback; /* Setup PA to use the ASIO blocking i/o callback. */ + userData = &theAsioStream; /* The callback user data will be the PA ASIO stream. */ + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &asioHostApi->blockingStreamInterface, streamCallback, userData ); + } + else /* Using callback interface... */ + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &asioHostApi->callbackStreamInterface, streamCallback, userData ); + } + + + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + + stream->asioBufferInfos = (ASIOBufferInfo*)PaUtil_AllocateMemory( + sizeof(ASIOBufferInfo) * (inputChannelCount + outputChannelCount) ); + if( !stream->asioBufferInfos ) + { + result = paInsufficientMemory; + PA_DEBUG(("OpenStream ERROR7\n")); + goto error; + } + + + for( i=0; i < inputChannelCount; ++i ) + { + ASIOBufferInfo *info = &stream->asioBufferInfos[i]; + + info->isInput = ASIOTrue; + + if( inputChannelSelectors ){ + // inputChannelSelectors values have already been validated in + // ValidateAsioSpecificStreamInfo() above + info->channelNum = inputChannelSelectors[i]; + }else{ + info->channelNum = i; + } + + info->buffers[0] = info->buffers[1] = 0; + } + + for( i=0; i < outputChannelCount; ++i ){ + ASIOBufferInfo *info = &stream->asioBufferInfos[inputChannelCount+i]; + + info->isInput = ASIOFalse; + + if( outputChannelSelectors ){ + // outputChannelSelectors values have already been validated in + // ValidateAsioSpecificStreamInfo() above + info->channelNum = outputChannelSelectors[i]; + }else{ + info->channelNum = i; + } + + info->buffers[0] = info->buffers[1] = 0; + } + + + /* Using blocking i/o interface... */ + if( usingBlockingIo ) + { +/** @todo REVIEW selection of host buffer size for blocking i/o */ + + framesPerHostBuffer = SelectHostBufferSize( 0, framesPerBuffer, driverInfo ); + + } + else /* Using callback interface... */ + { + /* Select the host buffer size based on user framesPerBuffer and the + maximum of suggestedInputLatencyFrames and + suggestedOutputLatencyFrames. + + We should subtract any fixed known driver latency from + suggestedLatencyFrames before computing the host buffer size. + However, the ASIO API doesn't provide a method for determining fixed + latencies independent of the host buffer size. ASIOGetLatencies() + only returns latencies after the buffer size has been configured, so + we can't reliably use it to determine fixed latencies here. + + We could set the preferred buffer size and then subtract it from + the values returned from ASIOGetLatencies, but this would not be 100% + reliable, so we don't do it. + */ + + unsigned long targetBufferingLatencyFrames = + (( suggestedInputLatencyFrames > suggestedOutputLatencyFrames ) + ? suggestedInputLatencyFrames + : suggestedOutputLatencyFrames); + + framesPerHostBuffer = SelectHostBufferSize( targetBufferingLatencyFrames, + framesPerBuffer, driverInfo ); + } + + + PA_DEBUG(("PaAsioOpenStream: framesPerHostBuffer :%d\n", framesPerHostBuffer)); + + asioError = ASIOCreateBuffers( stream->asioBufferInfos, + inputChannelCount+outputChannelCount, + framesPerHostBuffer, &asioCallbacks_ ); + + if( asioError != ASE_OK + && framesPerHostBuffer != (unsigned long)driverInfo->bufferPreferredSize ) + { + PA_DEBUG(("ERROR: ASIOCreateBuffers: %s\n", PaAsio_GetAsioErrorText(asioError) )); + /* + Some buggy drivers (like the Hoontech DSP24) give incorrect + [min, preferred, max] values They should work with the preferred size + value, thus if Pa_ASIO_CreateBuffers fails with the hostBufferSize + computed in SelectHostBufferSize, we try again with the preferred size. + */ + + framesPerHostBuffer = driverInfo->bufferPreferredSize; + + PA_DEBUG(("PaAsioOpenStream: CORRECTED framesPerHostBuffer :%d\n", framesPerHostBuffer)); + + ASIOError asioError2 = ASIOCreateBuffers( stream->asioBufferInfos, + inputChannelCount+outputChannelCount, + framesPerHostBuffer, &asioCallbacks_ ); + if( asioError2 == ASE_OK ) + asioError = ASE_OK; + } + + if( asioError != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + PA_DEBUG(("OpenStream ERROR9\n")); + goto error; + } + + asioBuffersCreated = 1; + + stream->asioChannelInfos = (ASIOChannelInfo*)PaUtil_AllocateMemory( + sizeof(ASIOChannelInfo) * (inputChannelCount + outputChannelCount) ); + if( !stream->asioChannelInfos ) + { + result = paInsufficientMemory; + PA_DEBUG(("OpenStream ERROR10\n")); + goto error; + } + + for( i=0; i < inputChannelCount + outputChannelCount; ++i ) + { + stream->asioChannelInfos[i].channel = stream->asioBufferInfos[i].channelNum; + stream->asioChannelInfos[i].isInput = stream->asioBufferInfos[i].isInput; + asioError = ASIOGetChannelInfo( &stream->asioChannelInfos[i] ); + if( asioError != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + PA_DEBUG(("OpenStream ERROR11\n")); + goto error; + } + } + + stream->bufferPtrs = (void**)PaUtil_AllocateMemory( + 2 * sizeof(void*) * (inputChannelCount + outputChannelCount) ); + if( !stream->bufferPtrs ) + { + result = paInsufficientMemory; + PA_DEBUG(("OpenStream ERROR12\n")); + goto error; + } + + if( inputChannelCount > 0 ) + { + stream->inputBufferPtrs[0] = stream-> bufferPtrs; + stream->inputBufferPtrs[1] = &stream->bufferPtrs[inputChannelCount]; + + for( i=0; iinputBufferPtrs[0][i] = stream->asioBufferInfos[i].buffers[0]; + stream->inputBufferPtrs[1][i] = stream->asioBufferInfos[i].buffers[1]; + } + } + else + { + stream->inputBufferPtrs[0] = 0; + stream->inputBufferPtrs[1] = 0; + } + + if( outputChannelCount > 0 ) + { + stream->outputBufferPtrs[0] = &stream->bufferPtrs[inputChannelCount*2]; + stream->outputBufferPtrs[1] = &stream->bufferPtrs[inputChannelCount*2 + outputChannelCount]; + + for( i=0; ioutputBufferPtrs[0][i] = stream->asioBufferInfos[inputChannelCount+i].buffers[0]; + stream->outputBufferPtrs[1][i] = stream->asioBufferInfos[inputChannelCount+i].buffers[1]; + } + } + else + { + stream->outputBufferPtrs[0] = 0; + stream->outputBufferPtrs[1] = 0; + } + + if( inputChannelCount > 0 ) + { + /* FIXME: assume all channels use the same type for now + + see: "ASIO devices with multiple sample formats are unsupported" + http://www.portaudio.com/trac/ticket/106 + */ + ASIOSampleType inputType = stream->asioChannelInfos[0].type; + + PA_DEBUG(("ASIO Input type:%d",inputType)); + AsioSampleTypeLOG(inputType); + hostInputSampleFormat = AsioSampleTypeToPaNativeSampleFormat( inputType ); + + SelectAsioToPaConverter( inputType, &stream->inputBufferConverter, &stream->inputShift ); + } + else + { + hostInputSampleFormat = 0; + stream->inputBufferConverter = 0; + } + + if( outputChannelCount > 0 ) + { + /* FIXME: assume all channels use the same type for now + + see: "ASIO devices with multiple sample formats are unsupported" + http://www.portaudio.com/trac/ticket/106 + */ + ASIOSampleType outputType = stream->asioChannelInfos[inputChannelCount].type; + + PA_DEBUG(("ASIO Output type:%d",outputType)); + AsioSampleTypeLOG(outputType); + hostOutputSampleFormat = AsioSampleTypeToPaNativeSampleFormat( outputType ); + + SelectPaToAsioConverter( outputType, &stream->outputBufferConverter, &stream->outputShift ); + } + else + { + hostOutputSampleFormat = 0; + stream->outputBufferConverter = 0; + } + + /* Values returned by ASIOGetLatencies() include the latency introduced by + the ASIO double buffer. */ + ASIOGetLatencies( &stream->asioInputLatencyFrames, &stream->asioOutputLatencyFrames ); + + + /* Using blocking i/o interface... */ + if( usingBlockingIo ) + { + /* Allocate the blocking i/o input ring buffer memory. */ + stream->blockingState = (PaAsioStreamBlockingState*)PaUtil_AllocateMemory( sizeof(PaAsioStreamBlockingState) ); + if( !stream->blockingState ) + { + result = paInsufficientMemory; + PA_DEBUG(("ERROR! Blocking i/o interface struct allocation failed in OpenStream()\n")); + goto error; + } + + /* Initialize blocking i/o interface struct. */ + stream->blockingState->readFramesReadyEvent = NULL; /* Uninitialized, yet. */ + stream->blockingState->writeBuffersReadyEvent = NULL; /* Uninitialized, yet. */ + stream->blockingState->readRingBufferData = NULL; /* Uninitialized, yet. */ + stream->blockingState->writeRingBufferData = NULL; /* Uninitialized, yet. */ + stream->blockingState->readStreamBuffer = NULL; /* Uninitialized, yet. */ + stream->blockingState->writeStreamBuffer = NULL; /* Uninitialized, yet. */ + stream->blockingState->stopFlag = TRUE; /* Not started, yet. */ + + + /* If the user buffer is unspecified */ + if( framesPerBuffer == paFramesPerBufferUnspecified ) + { + /* Make the user buffer the same size as the host buffer. */ + framesPerBuffer = framesPerHostBuffer; + } + + + /* Initialize callback buffer processor. */ + result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor , + inputChannelCount , + inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */ + hostInputSampleFormat , /* Host format. */ + outputChannelCount , + outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */ + hostOutputSampleFormat , /* Host format. */ + sampleRate , + streamFlags , + framesPerBuffer , /* Frames per ring buffer block. */ + framesPerHostBuffer , /* Frames per asio buffer. */ + paUtilFixedHostBufferSize , + streamCallback , + userData ); + if( result != paNoError ){ + PA_DEBUG(("OpenStream ERROR13\n")); + goto error; + } + callbackBufferProcessorInited = TRUE; + + /* Initialize the blocking i/o buffer processor. */ + result = PaUtil_InitializeBufferProcessor(&stream->blockingState->bufferProcessor, + inputChannelCount , + inputSampleFormat , /* User format. */ + inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */ + outputChannelCount , + outputSampleFormat , /* User format. */ + outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */ + sampleRate , + paClipOff | paDitherOff , /* Don't use dither nor clipping. */ + framesPerBuffer , /* Frames per user buffer. */ + framesPerBuffer , /* Frames per ring buffer block. */ + paUtilBoundedHostBufferSize , + NULL, NULL );/* No callback! */ + if( result != paNoError ){ + PA_DEBUG(("ERROR! Blocking i/o buffer processor initialization failed in OpenStream()\n")); + goto error; + } + blockingBufferProcessorInited = TRUE; + + /* If input is requested. */ + if( inputChannelCount ) + { + /* Create the callback sync-event. */ + stream->blockingState->readFramesReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); + if( stream->blockingState->readFramesReadyEvent == NULL ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + PA_DEBUG(("ERROR! Blocking i/o \"read frames ready\" event creation failed in OpenStream()\n")); + goto error; + } + blockingReadFramesReadyEventInitialized = 1; + + + /* Create pointer buffer to access non-interleaved data in ReadStream() */ + stream->blockingState->readStreamBuffer = (void**)PaUtil_AllocateMemory( sizeof(void*) * inputChannelCount ); + if( !stream->blockingState->readStreamBuffer ) + { + result = paInsufficientMemory; + PA_DEBUG(("ERROR! Blocking i/o read stream buffer allocation failed in OpenStream()\n")); + goto error; + } + + /* The ring buffer should store as many data blocks as needed + to achieve the requested latency. Whereas it must be large + enough to store at least two complete data blocks. + + 1) Determine the amount of latency to be added to the + prefered ASIO latency. + 2) Make sure we have at lest one additional latency frame. + 3) Divide the number of frames by the desired block size to + get the number (rounded up to pure integer) of blocks to + be stored in the buffer. + 4) Add one additional block for block processing and convert + to samples frames. + 5) Get the next larger (or equal) power-of-two buffer size. + */ + lBlockingBufferSize = suggestedInputLatencyFrames - stream->asioInputLatencyFrames; + lBlockingBufferSize = (lBlockingBufferSize > 0) ? lBlockingBufferSize : 1; + lBlockingBufferSize = (lBlockingBufferSize + framesPerBuffer - 1) / framesPerBuffer; + lBlockingBufferSize = (lBlockingBufferSize + 1) * framesPerBuffer; + + /* Get the next larger or equal power-of-two buffersize. */ + lBlockingBufferSizePow2 = 1; + while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) ); + lBlockingBufferSize = lBlockingBufferSizePow2; + + /* Compute total intput latency in seconds */ + stream->streamRepresentation.streamInfo.inputLatency = + (double)( PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor ) + + PaUtil_GetBufferProcessorInputLatencyFrames(&stream->blockingState->bufferProcessor) + + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer + + stream->asioInputLatencyFrames ) + / sampleRate; + + /* The code below prints the ASIO latency which doesn't include + the buffer processor latency nor the blocking i/o latency. It + reports the added latency separately. + */ + PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms),\n added buffProc:%ld (%ld ms),\n added blocking:%ld (%ld ms)\n", + stream->asioInputLatencyFrames, + (long)( stream->asioInputLatencyFrames * (1000.0 / sampleRate) ), + PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor), + (long)( PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor) * (1000.0 / sampleRate) ), + PaUtil_GetBufferProcessorInputLatencyFrames(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer, + (long)( (PaUtil_GetBufferProcessorInputLatencyFrames(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) ) + )); + + /* Determine the size of ring buffer in bytes. */ + lBytesPerFrame = inputChannelCount * Pa_GetSampleSize(inputSampleFormat ); + + /* Allocate the blocking i/o input ring buffer memory. */ + stream->blockingState->readRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame ); + if( !stream->blockingState->readRingBufferData ) + { + result = paInsufficientMemory; + PA_DEBUG(("ERROR! Blocking i/o input ring buffer allocation failed in OpenStream()\n")); + goto error; + } + + /* Initialize the input ring buffer struct. */ + PaUtil_InitializeRingBuffer( &stream->blockingState->readRingBuffer , + lBytesPerFrame , + lBlockingBufferSize , + stream->blockingState->readRingBufferData ); + } + + /* If output is requested. */ + if( outputChannelCount ) + { + stream->blockingState->writeBuffersReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); + if( stream->blockingState->writeBuffersReadyEvent == NULL ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + PA_DEBUG(("ERROR! Blocking i/o \"write buffers ready\" event creation failed in OpenStream()\n")); + goto error; + } + blockingWriteBuffersReadyEventInitialized = 1; + + /* Create pointer buffer to access non-interleaved data in WriteStream() */ + stream->blockingState->writeStreamBuffer = (const void**)PaUtil_AllocateMemory( sizeof(const void*) * outputChannelCount ); + if( !stream->blockingState->writeStreamBuffer ) + { + result = paInsufficientMemory; + PA_DEBUG(("ERROR! Blocking i/o write stream buffer allocation failed in OpenStream()\n")); + goto error; + } + + /* The ring buffer should store as many data blocks as needed + to achieve the requested latency. Whereas it must be large + enough to store at least two complete data blocks. + + 1) Determine the amount of latency to be added to the + prefered ASIO latency. + 2) Make sure we have at lest one additional latency frame. + 3) Divide the number of frames by the desired block size to + get the number (rounded up to pure integer) of blocks to + be stored in the buffer. + 4) Add one additional block for block processing and convert + to samples frames. + 5) Get the next larger (or equal) power-of-two buffer size. + */ + lBlockingBufferSize = suggestedOutputLatencyFrames - stream->asioOutputLatencyFrames; + lBlockingBufferSize = (lBlockingBufferSize > 0) ? lBlockingBufferSize : 1; + lBlockingBufferSize = (lBlockingBufferSize + framesPerBuffer - 1) / framesPerBuffer; + lBlockingBufferSize = (lBlockingBufferSize + 1) * framesPerBuffer; + + /* The buffer size (without the additional block) corresponds + to the initial number of silent samples in the output ring + buffer. */ + stream->blockingState->writeRingBufferInitialFrames = lBlockingBufferSize - framesPerBuffer; + + /* Get the next larger or equal power-of-two buffersize. */ + lBlockingBufferSizePow2 = 1; + while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) ); + lBlockingBufferSize = lBlockingBufferSizePow2; + + /* Compute total output latency in seconds */ + stream->streamRepresentation.streamInfo.outputLatency = + (double)( PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor) + + PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->blockingState->bufferProcessor) + + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer + + stream->asioOutputLatencyFrames ) + / sampleRate; + + /* The code below prints the ASIO latency which doesn't include + the buffer processor latency nor the blocking i/o latency. It + reports the added latency separately. + */ + PA_DEBUG(("PaAsio : ASIO OutputLatency = %ld (%ld ms),\n added buffProc:%ld (%ld ms),\n added blocking:%ld (%ld ms)\n", + stream->asioOutputLatencyFrames, + (long)( stream->asioOutputLatencyFrames * (1000.0 / sampleRate) ), + PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor), + (long)( PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor) * (1000.0 / sampleRate) ), + PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer, + (long)( (PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) ) + )); + + /* Determine the size of ring buffer in bytes. */ + lBytesPerFrame = outputChannelCount * Pa_GetSampleSize(outputSampleFormat); + + /* Allocate the blocking i/o output ring buffer memory. */ + stream->blockingState->writeRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame ); + if( !stream->blockingState->writeRingBufferData ) + { + result = paInsufficientMemory; + PA_DEBUG(("ERROR! Blocking i/o output ring buffer allocation failed in OpenStream()\n")); + goto error; + } + + /* Initialize the output ring buffer struct. */ + PaUtil_InitializeRingBuffer( &stream->blockingState->writeRingBuffer , + lBytesPerFrame , + lBlockingBufferSize , + stream->blockingState->writeRingBufferData ); + } + + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + + } + else /* Using callback interface... */ + { + result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + inputChannelCount, inputSampleFormat, (hostInputSampleFormat | paNonInterleaved), + outputChannelCount, outputSampleFormat, (hostOutputSampleFormat | paNonInterleaved), + sampleRate, streamFlags, framesPerBuffer, + framesPerHostBuffer, paUtilFixedHostBufferSize, + streamCallback, userData ); + if( result != paNoError ){ + PA_DEBUG(("OpenStream ERROR13\n")); + goto error; + } + callbackBufferProcessorInited = TRUE; + + stream->streamRepresentation.streamInfo.inputLatency = + (double)( PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor) + + stream->asioInputLatencyFrames) / sampleRate; // seconds + stream->streamRepresentation.streamInfo.outputLatency = + (double)( PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor) + + stream->asioOutputLatencyFrames) / sampleRate; // seconds + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + // the code below prints the ASIO latency which doesn't include the + // buffer processor latency. it reports the added latency separately + PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n", + stream->asioInputLatencyFrames, + (long)((stream->asioInputLatencyFrames*1000)/ sampleRate), + PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor), + (long)((PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor)*1000)/ sampleRate) + )); + + PA_DEBUG(("PaAsio : ASIO OuputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n", + stream->asioOutputLatencyFrames, + (long)((stream->asioOutputLatencyFrames*1000)/ sampleRate), + PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor), + (long)((PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor)*1000)/ sampleRate) + )); + } + + stream->asioHostApi = asioHostApi; + stream->framesPerHostCallback = framesPerHostBuffer; + + stream->inputChannelCount = inputChannelCount; + stream->outputChannelCount = outputChannelCount; + stream->postOutput = driverInfo->postOutput; + stream->isStopped = 1; + stream->isActive = 0; + + asioHostApi->openAsioDeviceIndex = asioDeviceIndex; + + theAsioStream = stream; + *s = (PaStream*)stream; + + return result; + +error: + PA_DEBUG(("goto errored\n")); + if( stream ) + { + if( stream->blockingState ) + { + if( blockingBufferProcessorInited ) + PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor ); + + if( stream->blockingState->writeRingBufferData ) + PaUtil_FreeMemory( stream->blockingState->writeRingBufferData ); + if( stream->blockingState->writeStreamBuffer ) + PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer ); + if( blockingWriteBuffersReadyEventInitialized ) + CloseHandle( stream->blockingState->writeBuffersReadyEvent ); + + if( stream->blockingState->readRingBufferData ) + PaUtil_FreeMemory( stream->blockingState->readRingBufferData ); + if( stream->blockingState->readStreamBuffer ) + PaUtil_FreeMemory( stream->blockingState->readStreamBuffer ); + if( blockingReadFramesReadyEventInitialized ) + CloseHandle( stream->blockingState->readFramesReadyEvent ); + + PaUtil_FreeMemory( stream->blockingState ); + } + + if( callbackBufferProcessorInited ) + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + + if( completedBuffersPlayedEventInited ) + CloseHandle( stream->completedBuffersPlayedEvent ); + + if( stream->asioBufferInfos ) + PaUtil_FreeMemory( stream->asioBufferInfos ); + + if( stream->asioChannelInfos ) + PaUtil_FreeMemory( stream->asioChannelInfos ); + + if( stream->bufferPtrs ) + PaUtil_FreeMemory( stream->bufferPtrs ); + + PaUtil_FreeMemory( stream ); + } + + if( asioBuffersCreated ) + ASIODisposeBuffers(); + + if( asioIsInitialized ) + { + UnloadAsioDriver(); + } + return result; +} + + +/* + When CloseStream() is called, the multi-api layer ensures that + the stream has already been stopped or aborted. +*/ +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaAsioStream *stream = (PaAsioStream*)s; + + /* + IMPLEMENT ME: + - additional stream closing + cleanup + */ + + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + + stream->asioHostApi->openAsioDeviceIndex = paNoDevice; + + CloseHandle( stream->completedBuffersPlayedEvent ); + + /* Using blocking i/o interface... */ + if( stream->blockingState ) + { + PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor ); + + if( stream->inputChannelCount ) { + PaUtil_FreeMemory( stream->blockingState->readRingBufferData ); + PaUtil_FreeMemory( stream->blockingState->readStreamBuffer ); + CloseHandle( stream->blockingState->readFramesReadyEvent ); + } + if( stream->outputChannelCount ) { + PaUtil_FreeMemory( stream->blockingState->writeRingBufferData ); + PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer ); + CloseHandle( stream->blockingState->writeBuffersReadyEvent ); + } + + PaUtil_FreeMemory( stream->blockingState ); + } + + PaUtil_FreeMemory( stream->asioBufferInfos ); + PaUtil_FreeMemory( stream->asioChannelInfos ); + PaUtil_FreeMemory( stream->bufferPtrs ); + PaUtil_FreeMemory( stream ); + + ASIODisposeBuffers(); + UnloadAsioDriver(); + + theAsioStream = 0; + + return result; +} + + +static void bufferSwitch(long index, ASIOBool directProcess) +{ +//TAKEN FROM THE ASIO SDK + + // the actual processing callback. + // Beware that this is normally in a seperate thread, hence be sure that + // you take care about thread synchronization. This is omitted here for + // simplicity. + + // as this is a "back door" into the bufferSwitchTimeInfo a timeInfo needs + // to be created though it will only set the timeInfo.samplePosition and + // timeInfo.systemTime fields and the according flags + + ASIOTime timeInfo; + memset( &timeInfo, 0, sizeof (timeInfo) ); + + // get the time stamp of the buffer, not necessary if no + // synchronization to other media is required + if( ASIOGetSamplePosition(&timeInfo.timeInfo.samplePosition, &timeInfo.timeInfo.systemTime) == ASE_OK) + timeInfo.timeInfo.flags = kSystemTimeValid | kSamplePositionValid; + + // Call the real callback + bufferSwitchTimeInfo( &timeInfo, index, directProcess ); +} + + +// conversion from 64 bit ASIOSample/ASIOTimeStamp to double float +#if NATIVE_INT64 + #define ASIO64toDouble(a) (a) +#else + const double twoRaisedTo32 = 4294967296.; + #define ASIO64toDouble(a) ((a).lo + (a).hi * twoRaisedTo32) +#endif + +static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool directProcess ) +{ + // the actual processing callback. + // Beware that this is normally in a seperate thread, hence be sure that + // you take care about thread synchronization. + + + /* The SDK says the following about the directProcess flag: + suggests to the host whether it should immediately start processing + (directProcess == ASIOTrue), or whether its process should be deferred + because the call comes from a very low level (for instance, a high level + priority interrupt), and direct processing would cause timing instabilities for + the rest of the system. If in doubt, directProcess should be set to ASIOFalse. + + We just ignore directProcess. This could cause incompatibilities with + drivers which really don't want the audio processing to occur in this + callback, but none have been identified yet. + */ + + (void) directProcess; /* suppress unused parameter warning */ + +#if 0 + // store the timeInfo for later use + asioDriverInfo.tInfo = *timeInfo; + + // get the time stamp of the buffer, not necessary if no + // synchronization to other media is required + + if (timeInfo->timeInfo.flags & kSystemTimeValid) + asioDriverInfo.nanoSeconds = ASIO64toDouble(timeInfo->timeInfo.systemTime); + else + asioDriverInfo.nanoSeconds = 0; + + if (timeInfo->timeInfo.flags & kSamplePositionValid) + asioDriverInfo.samples = ASIO64toDouble(timeInfo->timeInfo.samplePosition); + else + asioDriverInfo.samples = 0; + + if (timeInfo->timeCode.flags & kTcValid) + asioDriverInfo.tcSamples = ASIO64toDouble(timeInfo->timeCode.timeCodeSamples); + else + asioDriverInfo.tcSamples = 0; + + // get the system reference time + asioDriverInfo.sysRefTime = get_sys_reference_time(); +#endif + +#if 0 + // a few debug messages for the Windows device driver developer + // tells you the time when driver got its interrupt and the delay until the app receives + // the event notification. + static double last_samples = 0; + char tmp[128]; + sprintf (tmp, "diff: %d / %d ms / %d ms / %d samples \n", asioDriverInfo.sysRefTime - (long)(asioDriverInfo.nanoSeconds / 1000000.0), asioDriverInfo.sysRefTime, (long)(asioDriverInfo.nanoSeconds / 1000000.0), (long)(asioDriverInfo.samples - last_samples)); + OutputDebugString (tmp); + last_samples = asioDriverInfo.samples; +#endif + + + if( !theAsioStream ) + return 0L; + + // protect against reentrancy + if( PaAsio_AtomicIncrement(&theAsioStream->reenterCount) ) + { + theAsioStream->reenterError++; + //DBUG(("bufferSwitchTimeInfo : reentrancy detection = %d\n", asioDriverInfo.reenterError)); + return 0L; + } + + int buffersDone = 0; + + do + { + if( buffersDone > 0 ) + { + // this is a reentered buffer, we missed processing it on time + // set the input overflow and output underflow flags as appropriate + + if( theAsioStream->inputChannelCount > 0 ) + theAsioStream->callbackFlags |= paInputOverflow; + + if( theAsioStream->outputChannelCount > 0 ) + theAsioStream->callbackFlags |= paOutputUnderflow; + } + else + { + if( theAsioStream->zeroOutput ) + { + ZeroOutputBuffers( theAsioStream, index ); + + // Finally if the driver supports the ASIOOutputReady() optimization, + // do it here, all data are in place + if( theAsioStream->postOutput ) + ASIOOutputReady(); + + if( theAsioStream->stopProcessing ) + { + if( theAsioStream->stopPlayoutCount < 2 ) + { + ++theAsioStream->stopPlayoutCount; + if( theAsioStream->stopPlayoutCount == 2 ) + { + theAsioStream->isActive = 0; + if( theAsioStream->streamRepresentation.streamFinishedCallback != 0 ) + theAsioStream->streamRepresentation.streamFinishedCallback( theAsioStream->streamRepresentation.userData ); + theAsioStream->streamFinishedCallbackCalled = true; + SetEvent( theAsioStream->completedBuffersPlayedEvent ); + } + } + } + } + else + { + +#if 0 +/* + see: "ASIO callback underflow/overflow buffer slip detection doesn't work" + http://www.portaudio.com/trac/ticket/110 +*/ + +// test code to try to detect slip conditions... these may work on some systems +// but neither of them work on the RME Digi96 + +// check that sample delta matches buffer size (otherwise we must have skipped +// a buffer. +static double last_samples = -512; +double samples; +//if( timeInfo->timeCode.flags & kTcValid ) +// samples = ASIO64toDouble(timeInfo->timeCode.timeCodeSamples); +//else + samples = ASIO64toDouble(timeInfo->timeInfo.samplePosition); +int delta = samples - last_samples; +//printf( "%d\n", delta); +last_samples = samples; + +if( delta > theAsioStream->framesPerHostCallback ) +{ + if( theAsioStream->inputChannelCount > 0 ) + theAsioStream->callbackFlags |= paInputOverflow; + + if( theAsioStream->outputChannelCount > 0 ) + theAsioStream->callbackFlags |= paOutputUnderflow; +} + +// check that the buffer index is not the previous index (which would indicate +// that a buffer was skipped. +static int previousIndex = 1; +if( index == previousIndex ) +{ + if( theAsioStream->inputChannelCount > 0 ) + theAsioStream->callbackFlags |= paInputOverflow; + + if( theAsioStream->outputChannelCount > 0 ) + theAsioStream->callbackFlags |= paOutputUnderflow; +} +previousIndex = index; +#endif + + int i; + + PaUtil_BeginCpuLoadMeasurement( &theAsioStream->cpuLoadMeasurer ); + + PaStreamCallbackTimeInfo paTimeInfo; + + // asio systemTime is supposed to be measured according to the same + // clock as timeGetTime + paTimeInfo.currentTime = (ASIO64toDouble( timeInfo->timeInfo.systemTime ) * .000000001); + + /* patch from Paul Boege */ + paTimeInfo.inputBufferAdcTime = paTimeInfo.currentTime - + ((double)theAsioStream->asioInputLatencyFrames/theAsioStream->streamRepresentation.streamInfo.sampleRate); + + paTimeInfo.outputBufferDacTime = paTimeInfo.currentTime + + ((double)theAsioStream->asioOutputLatencyFrames/theAsioStream->streamRepresentation.streamInfo.sampleRate); + + /* old version is buggy because the buffer processor also adds in its latency to the time parameters + paTimeInfo.inputBufferAdcTime = paTimeInfo.currentTime - theAsioStream->streamRepresentation.streamInfo.inputLatency; + paTimeInfo.outputBufferDacTime = paTimeInfo.currentTime + theAsioStream->streamRepresentation.streamInfo.outputLatency; + */ + +/* Disabled! Stopping and re-starting the stream causes an input overflow / output undeflow. S.Fischer */ +#if 0 +// detect underflows by checking inter-callback time > 2 buffer period +static double previousTime = -1; +if( previousTime > 0 ){ + + double delta = paTimeInfo.currentTime - previousTime; + + if( delta >= 2. * (theAsioStream->framesPerHostCallback / theAsioStream->streamRepresentation.streamInfo.sampleRate) ){ + if( theAsioStream->inputChannelCount > 0 ) + theAsioStream->callbackFlags |= paInputOverflow; + + if( theAsioStream->outputChannelCount > 0 ) + theAsioStream->callbackFlags |= paOutputUnderflow; + } +} +previousTime = paTimeInfo.currentTime; +#endif + + // note that the above input and output times do not need to be + // adjusted for the latency of the buffer processor -- the buffer + // processor handles that. + + if( theAsioStream->inputBufferConverter ) + { + for( i=0; iinputChannelCount; i++ ) + { + theAsioStream->inputBufferConverter( theAsioStream->inputBufferPtrs[index][i], + theAsioStream->inputShift, theAsioStream->framesPerHostCallback ); + } + } + + PaUtil_BeginBufferProcessing( &theAsioStream->bufferProcessor, &paTimeInfo, theAsioStream->callbackFlags ); + + /* reset status flags once they've been passed to the callback */ + theAsioStream->callbackFlags = 0; + + PaUtil_SetInputFrameCount( &theAsioStream->bufferProcessor, 0 /* default to host buffer size */ ); + for( i=0; iinputChannelCount; ++i ) + PaUtil_SetNonInterleavedInputChannel( &theAsioStream->bufferProcessor, i, theAsioStream->inputBufferPtrs[index][i] ); + + PaUtil_SetOutputFrameCount( &theAsioStream->bufferProcessor, 0 /* default to host buffer size */ ); + for( i=0; ioutputChannelCount; ++i ) + PaUtil_SetNonInterleavedOutputChannel( &theAsioStream->bufferProcessor, i, theAsioStream->outputBufferPtrs[index][i] ); + + int callbackResult; + if( theAsioStream->stopProcessing ) + callbackResult = paComplete; + else + callbackResult = paContinue; + unsigned long framesProcessed = PaUtil_EndBufferProcessing( &theAsioStream->bufferProcessor, &callbackResult ); + + if( theAsioStream->outputBufferConverter ) + { + for( i=0; ioutputChannelCount; i++ ) + { + theAsioStream->outputBufferConverter( theAsioStream->outputBufferPtrs[index][i], + theAsioStream->outputShift, theAsioStream->framesPerHostCallback ); + } + } + + PaUtil_EndCpuLoadMeasurement( &theAsioStream->cpuLoadMeasurer, framesProcessed ); + + // Finally if the driver supports the ASIOOutputReady() optimization, + // do it here, all data are in place + if( theAsioStream->postOutput ) + ASIOOutputReady(); + + if( callbackResult == paContinue ) + { + /* nothing special to do */ + } + else if( callbackResult == paAbort ) + { + /* finish playback immediately */ + theAsioStream->isActive = 0; + if( theAsioStream->streamRepresentation.streamFinishedCallback != 0 ) + theAsioStream->streamRepresentation.streamFinishedCallback( theAsioStream->streamRepresentation.userData ); + theAsioStream->streamFinishedCallbackCalled = true; + SetEvent( theAsioStream->completedBuffersPlayedEvent ); + theAsioStream->zeroOutput = true; + } + else /* paComplete or other non-zero value indicating complete */ + { + /* Finish playback once currently queued audio has completed. */ + theAsioStream->stopProcessing = true; + + if( PaUtil_IsBufferProcessorOutputEmpty( &theAsioStream->bufferProcessor ) ) + { + theAsioStream->zeroOutput = true; + theAsioStream->stopPlayoutCount = 0; + } + } + } + } + + ++buffersDone; + }while( PaAsio_AtomicDecrement(&theAsioStream->reenterCount) >= 0 ); + + return 0L; +} + + +static void sampleRateChanged(ASIOSampleRate sRate) +{ + // TAKEN FROM THE ASIO SDK + // do whatever you need to do if the sample rate changed + // usually this only happens during external sync. + // Audio processing is not stopped by the driver, actual sample rate + // might not have even changed, maybe only the sample rate status of an + // AES/EBU or S/PDIF digital input at the audio device. + // You might have to update time/sample related conversion routines, etc. + + (void) sRate; /* unused parameter */ + PA_DEBUG( ("sampleRateChanged : %d \n", sRate)); +} + +static long asioMessages(long selector, long value, void* message, double* opt) +{ +// TAKEN FROM THE ASIO SDK + // currently the parameters "value", "message" and "opt" are not used. + long ret = 0; + + (void) message; /* unused parameters */ + (void) opt; + + PA_DEBUG( ("asioMessages : %d , %d \n", selector, value)); + + switch(selector) + { + case kAsioSelectorSupported: + if(value == kAsioResetRequest + || value == kAsioEngineVersion + || value == kAsioResyncRequest + || value == kAsioLatenciesChanged + // the following three were added for ASIO 2.0, you don't necessarily have to support them + || value == kAsioSupportsTimeInfo + || value == kAsioSupportsTimeCode + || value == kAsioSupportsInputMonitor) + ret = 1L; + break; + + case kAsioBufferSizeChange: + //printf("kAsioBufferSizeChange \n"); + break; + + case kAsioResetRequest: + // defer the task and perform the reset of the driver during the next "safe" situation + // You cannot reset the driver right now, as this code is called from the driver. + // Reset the driver is done by completely destruct is. I.e. ASIOStop(), ASIODisposeBuffers(), Destruction + // Afterwards you initialize the driver again. + + /*FIXME: commented the next line out + + see: "PA/ASIO ignores some driver notifications it probably shouldn't" + http://www.portaudio.com/trac/ticket/108 + */ + //asioDriverInfo.stopped; // In this sample the processing will just stop + ret = 1L; + break; + + case kAsioResyncRequest: + // This informs the application, that the driver encountered some non fatal data loss. + // It is used for synchronization purposes of different media. + // Added mainly to work around the Win16Mutex problems in Windows 95/98 with the + // Windows Multimedia system, which could loose data because the Mutex was hold too long + // by another thread. + // However a driver can issue it in other situations, too. + ret = 1L; + break; + + case kAsioLatenciesChanged: + // This will inform the host application that the drivers were latencies changed. + // Beware, it this does not mean that the buffer sizes have changed! + // You might need to update internal delay data. + ret = 1L; + //printf("kAsioLatenciesChanged \n"); + break; + + case kAsioEngineVersion: + // return the supported ASIO version of the host application + // If a host applications does not implement this selector, ASIO 1.0 is assumed + // by the driver + ret = 2L; + break; + + case kAsioSupportsTimeInfo: + // informs the driver wether the asioCallbacks.bufferSwitchTimeInfo() callback + // is supported. + // For compatibility with ASIO 1.0 drivers the host application should always support + // the "old" bufferSwitch method, too. + ret = 1; + break; + + case kAsioSupportsTimeCode: + // informs the driver wether application is interested in time code info. + // If an application does not need to know about time code, the driver has less work + // to do. + ret = 0; + break; + } + return ret; +} + + +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaAsioStream *stream = (PaAsioStream*)s; + PaAsioStreamBlockingState *blockingState = stream->blockingState; + ASIOError asioError; + + if( stream->outputChannelCount > 0 ) + { + ZeroOutputBuffers( stream, 0 ); + ZeroOutputBuffers( stream, 1 ); + } + + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + stream->stopProcessing = false; + stream->zeroOutput = false; + + /* Reentrancy counter initialisation */ + stream->reenterCount = -1; + stream->reenterError = 0; + + stream->callbackFlags = 0; + + if( ResetEvent( stream->completedBuffersPlayedEvent ) == 0 ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + } + + + /* Using blocking i/o interface... */ + if( blockingState ) + { + /* Reset blocking i/o buffer processor. */ + PaUtil_ResetBufferProcessor( &blockingState->bufferProcessor ); + + /* If we're about to process some input data. */ + if( stream->inputChannelCount ) + { + /* Reset callback-ReadStream sync event. */ + if( ResetEvent( blockingState->readFramesReadyEvent ) == 0 ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + } + + /* Flush blocking i/o ring buffer. */ + PaUtil_FlushRingBuffer( &blockingState->readRingBuffer ); + (*blockingState->bufferProcessor.inputZeroer)( blockingState->readRingBuffer.buffer, 1, blockingState->bufferProcessor.inputChannelCount * blockingState->readRingBuffer.bufferSize ); + } + + /* If we're about to process some output data. */ + if( stream->outputChannelCount ) + { + /* Reset callback-WriteStream sync event. */ + if( ResetEvent( blockingState->writeBuffersReadyEvent ) == 0 ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + } + + /* Flush blocking i/o ring buffer. */ + PaUtil_FlushRingBuffer( &blockingState->writeRingBuffer ); + (*blockingState->bufferProcessor.outputZeroer)( blockingState->writeRingBuffer.buffer, 1, blockingState->bufferProcessor.outputChannelCount * blockingState->writeRingBuffer.bufferSize ); + + /* Initialize the output ring buffer to "silence". */ + PaUtil_AdvanceRingBufferWriteIndex( &blockingState->writeRingBuffer, blockingState->writeRingBufferInitialFrames ); + } + + /* Clear requested frames / buffers count. */ + blockingState->writeBuffersRequested = 0; + blockingState->readFramesRequested = 0; + blockingState->writeBuffersRequestedFlag = FALSE; + blockingState->readFramesRequestedFlag = FALSE; + blockingState->outputUnderflowFlag = FALSE; + blockingState->inputOverflowFlag = FALSE; + blockingState->stopFlag = FALSE; + } + + + if( result == paNoError ) + { + assert( theAsioStream == stream ); /* theAsioStream should be set correctly in OpenStream */ + + /* initialize these variables before the callback has a chance to be invoked */ + stream->isStopped = 0; + stream->isActive = 1; + stream->streamFinishedCallbackCalled = false; + + asioError = ASIOStart(); + if( asioError != ASE_OK ) + { + stream->isStopped = 1; + stream->isActive = 0; + + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + } + } + + return result; +} + +static void EnsureCallbackHasCompleted( PaAsioStream *stream ) +{ + // make sure that the callback is not still in-flight after ASIOStop() + // returns. This has been observed to happen on the Hoontech DSP24 for + // example. + int count = 2000; // only wait for 2 seconds, rather than hanging. + while( stream->reenterCount != -1 && count > 0 ) + { + Sleep(1); + --count; + } +} + +static PaError StopStream( PaStream *s ) +{ + PaError result = paNoError; + PaAsioStream *stream = (PaAsioStream*)s; + PaAsioStreamBlockingState *blockingState = stream->blockingState; + ASIOError asioError; + + if( stream->isActive ) + { + /* If blocking i/o output is in use */ + if( blockingState && stream->outputChannelCount ) + { + /* Request the whole output buffer to be available. */ + blockingState->writeBuffersRequested = blockingState->writeRingBuffer.bufferSize; + /* Signalize that additional buffers are need. */ + blockingState->writeBuffersRequestedFlag = TRUE; + /* Set flag to indicate the playback is to be stopped. */ + blockingState->stopFlag = TRUE; + + /* Wait until requested number of buffers has been freed. Time + out after twice the blocking i/o ouput buffer could have + been consumed. */ + DWORD timeout = (DWORD)( 2 * blockingState->writeRingBuffer.bufferSize * 1000 + / stream->streamRepresentation.streamInfo.sampleRate ); + DWORD waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout ); + + /* If something seriously went wrong... */ + if( waitResult == WAIT_FAILED ) + { + PA_DEBUG(("WaitForSingleObject() failed in StopStream()\n")); + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + } + else if( waitResult == WAIT_TIMEOUT ) + { + PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n")); + result = paTimedOut; + } + } + + stream->stopProcessing = true; + + /* wait for the stream to finish playing out enqueued buffers. + timeout after four times the stream latency. + + @todo should use a better time out value - if the user buffer + length is longer than the asio buffer size then that should + be taken into account. + */ + if( WaitForSingleObject( stream->completedBuffersPlayedEvent, + (DWORD)(stream->streamRepresentation.streamInfo.outputLatency * 1000. * 4.) ) + == WAIT_TIMEOUT ) + { + PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n" )); + } + } + + asioError = ASIOStop(); + if( asioError == ASE_OK ) + { + EnsureCallbackHasCompleted( stream ); + } + else + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + } + + stream->isStopped = 1; + stream->isActive = 0; + + if( !stream->streamFinishedCallbackCalled ) + { + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } + + return result; +} + +static PaError AbortStream( PaStream *s ) +{ + PaError result = paNoError; + PaAsioStream *stream = (PaAsioStream*)s; + ASIOError asioError; + + stream->zeroOutput = true; + + asioError = ASIOStop(); + if( asioError == ASE_OK ) + { + EnsureCallbackHasCompleted( stream ); + } + else + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + } + + stream->isStopped = 1; + stream->isActive = 0; + + if( !stream->streamFinishedCallbackCalled ) + { + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } + + return result; +} + + +static PaError IsStreamStopped( PaStream *s ) +{ + PaAsioStream *stream = (PaAsioStream*)s; + + return stream->isStopped; +} + + +static PaError IsStreamActive( PaStream *s ) +{ + PaAsioStream *stream = (PaAsioStream*)s; + + return stream->isActive; +} + + +static PaTime GetStreamTime( PaStream *s ) +{ + (void) s; /* unused parameter */ + return (double)timeGetTime() * .001; +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaAsioStream *stream = (PaAsioStream*)s; + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + + +/* + As separate stream interfaces are used for blocking and callback + streams, the following functions can be guaranteed to only be called + for blocking streams. +*/ + +static PaError ReadStream( PaStream *s , + void *buffer, + unsigned long frames ) +{ + PaError result = paNoError; /* Initial return value. */ + PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */ + + /* Pointer to the blocking i/o data struct. */ + PaAsioStreamBlockingState *blockingState = stream->blockingState; + + /* Get blocking i/o buffer processor and ring buffer pointers. */ + PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor; + PaUtilRingBuffer *pRb = &blockingState->readRingBuffer; + + /* Ring buffer segment(s) used for writing. */ + void *pRingBufferData1st = NULL; /* First segment. (Mandatory) */ + void *pRingBufferData2nd = NULL; /* Second segment. (Optional) */ + + /* Number of frames per ring buffer segment. */ + long lRingBufferSize1st = 0; /* First segment. (Mandatory) */ + long lRingBufferSize2nd = 0; /* Second segment. (Optional) */ + + /* Get number of frames to be processed per data block. */ + unsigned long lFramesPerBlock = stream->bufferProcessor.framesPerUserBuffer; + /* Actual number of frames that has been copied into the ring buffer. */ + unsigned long lFramesCopied = 0; + /* The number of remaining unprocessed dtat frames. */ + unsigned long lFramesRemaining = frames; + + /* Copy the input argument to avoid pointer increment! */ + const void *userBuffer; + unsigned int i; /* Just a counter. */ + + /* About the time, needed to process 8 data blocks. */ + DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate ); + DWORD waitResult = 0; + + + /* Check if the stream is still available ready to gather new data. */ + if( blockingState->stopFlag || !stream->isActive ) + { + PA_DEBUG(("Warning! Stream no longer available for reading in ReadStream()\n")); + result = paStreamIsStopped; + return result; + } + + /* If the stream is a input stream. */ + if( stream->inputChannelCount ) + { + /* Prepare buffer access. */ + if( !pBp->userOutputIsInterleaved ) + { + userBuffer = blockingState->readStreamBuffer; + for( i = 0; iinputChannelCount; ++i ) + { + ((void**)userBuffer)[i] = ((void**)buffer)[i]; + } + } /* Use the unchanged buffer. */ + else { userBuffer = buffer; } + + do /* Internal block processing for too large user data buffers. */ + { + /* Get the size of the current data block to be processed. */ + lFramesPerBlock =(lFramesPerBlock < lFramesRemaining) + ? lFramesPerBlock : lFramesRemaining; + /* Use predefined block size for as long there are enough + buffers available, thereafter reduce the processing block + size to match the number of remaining buffers. So the final + data block is processed although it may be incomplete. */ + + /* If the available amount of data frames is insufficient. */ + if( PaUtil_GetRingBufferReadAvailable(pRb) < (long) lFramesPerBlock ) + { + /* Make sure, the event isn't already set! */ + /* ResetEvent( blockingState->readFramesReadyEvent ); */ + + /* Set the number of requested buffers. */ + blockingState->readFramesRequested = lFramesPerBlock; + + /* Signalize that additional buffers are need. */ + blockingState->readFramesRequestedFlag = TRUE; + + /* Wait until requested number of buffers has been freed. */ + waitResult = WaitForSingleObject( blockingState->readFramesReadyEvent, timeout ); + + /* If something seriously went wrong... */ + if( waitResult == WAIT_FAILED ) + { + PA_DEBUG(("WaitForSingleObject() failed in ReadStream()\n")); + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + return result; + } + else if( waitResult == WAIT_TIMEOUT ) + { + PA_DEBUG(("WaitForSingleObject() timed out in ReadStream()\n")); + + /* If block processing has stopped, abort! */ + if( blockingState->stopFlag ) { return result = paStreamIsStopped; } + + /* If a timeout is encountered, give up eventually. */ + return result = paTimedOut; + } + } + /* Now, the ring buffer contains the required amount of data + frames. + (Therefor we don't need to check the return argument of + PaUtil_GetRingBufferReadRegions(). ;-) ) + */ + + /* Retrieve pointer(s) to the ring buffer's current write + position(s). If the first buffer segment is too small to + store the requested number of bytes, an additional second + segment is returned. Otherwise, i.e. if the first segment + is large enough, the second segment's pointer will be NULL. + */ + PaUtil_GetRingBufferReadRegions(pRb , + lFramesPerBlock , + &pRingBufferData1st, + &lRingBufferSize1st, + &pRingBufferData2nd, + &lRingBufferSize2nd); + + /* Set number of frames to be copied from the ring buffer. */ + PaUtil_SetInputFrameCount( pBp, lRingBufferSize1st ); + /* Setup ring buffer access. */ + PaUtil_SetInterleavedInputChannels(pBp , /* Buffer processor. */ + 0 , /* The first channel's index. */ + pRingBufferData1st, /* First ring buffer segment. */ + 0 ); /* Use all available channels. */ + + /* If a second ring buffer segment is required. */ + if( lRingBufferSize2nd ) { + /* Set number of frames to be copied from the ring buffer. */ + PaUtil_Set2ndInputFrameCount( pBp, lRingBufferSize2nd ); + /* Setup ring buffer access. */ + PaUtil_Set2ndInterleavedInputChannels(pBp , /* Buffer processor. */ + 0 , /* The first channel's index. */ + pRingBufferData2nd, /* Second ring buffer segment. */ + 0 ); /* Use all available channels. */ + } + + /* Let the buffer processor handle "copy and conversion" and + update the ring buffer indices manually. */ + lFramesCopied = PaUtil_CopyInput( pBp, &buffer, lFramesPerBlock ); + PaUtil_AdvanceRingBufferReadIndex( pRb, lFramesCopied ); + + /* Decrease number of unprocessed frames. */ + lFramesRemaining -= lFramesCopied; + + } /* Continue with the next data chunk. */ + while( lFramesRemaining ); + + + /* If there has been an input overflow within the callback */ + if( blockingState->inputOverflowFlag ) + { + blockingState->inputOverflowFlag = FALSE; + + /* Return the corresponding error code. */ + result = paInputOverflowed; + } + + } /* If this is not an input stream. */ + else { + result = paCanNotReadFromAnOutputOnlyStream; + } + + return result; +} + +static PaError WriteStream( PaStream *s , + const void *buffer, + unsigned long frames ) +{ + PaError result = paNoError; /* Initial return value. */ + PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */ + + /* Pointer to the blocking i/o data struct. */ + PaAsioStreamBlockingState *blockingState = stream->blockingState; + + /* Get blocking i/o buffer processor and ring buffer pointers. */ + PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor; + PaUtilRingBuffer *pRb = &blockingState->writeRingBuffer; + + /* Ring buffer segment(s) used for writing. */ + void *pRingBufferData1st = NULL; /* First segment. (Mandatory) */ + void *pRingBufferData2nd = NULL; /* Second segment. (Optional) */ + + /* Number of frames per ring buffer segment. */ + long lRingBufferSize1st = 0; /* First segment. (Mandatory) */ + long lRingBufferSize2nd = 0; /* Second segment. (Optional) */ + + /* Get number of frames to be processed per data block. */ + unsigned long lFramesPerBlock = stream->bufferProcessor.framesPerUserBuffer; + /* Actual number of frames that has been copied into the ring buffer. */ + unsigned long lFramesCopied = 0; + /* The number of remaining unprocessed dtat frames. */ + unsigned long lFramesRemaining = frames; + + /* About the time, needed to process 8 data blocks. */ + DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate ); + DWORD waitResult = 0; + + /* Copy the input argument to avoid pointer increment! */ + const void *userBuffer; + unsigned int i; /* Just a counter. */ + + + /* Check if the stream ist still available ready to recieve new data. */ + if( blockingState->stopFlag || !stream->isActive ) + { + PA_DEBUG(("Warning! Stream no longer available for writing in WriteStream()\n")); + result = paStreamIsStopped; + return result; + } + + /* If the stream is a output stream. */ + if( stream->outputChannelCount ) + { + /* Prepare buffer access. */ + if( !pBp->userOutputIsInterleaved ) + { + userBuffer = blockingState->writeStreamBuffer; + for( i = 0; ioutputChannelCount; ++i ) + { + ((const void**)userBuffer)[i] = ((const void**)buffer)[i]; + } + } /* Use the unchanged buffer. */ + else { userBuffer = buffer; } + + + do /* Internal block processing for too large user data buffers. */ + { + /* Get the size of the current data block to be processed. */ + lFramesPerBlock =(lFramesPerBlock < lFramesRemaining) + ? lFramesPerBlock : lFramesRemaining; + /* Use predefined block size for as long there are enough + frames available, thereafter reduce the processing block + size to match the number of remaining frames. So the final + data block is processed although it may be incomplete. */ + + /* If the available amount of buffers is insufficient. */ + if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) lFramesPerBlock ) + { + /* Make sure, the event isn't already set! */ + /* ResetEvent( blockingState->writeBuffersReadyEvent ); */ + + /* Set the number of requested buffers. */ + blockingState->writeBuffersRequested = lFramesPerBlock; + + /* Signalize that additional buffers are need. */ + blockingState->writeBuffersRequestedFlag = TRUE; + + /* Wait until requested number of buffers has been freed. */ + waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout ); + + /* If something seriously went wrong... */ + if( waitResult == WAIT_FAILED ) + { + PA_DEBUG(("WaitForSingleObject() failed in WriteStream()\n")); + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() ); + return result; + } + else if( waitResult == WAIT_TIMEOUT ) + { + PA_DEBUG(("WaitForSingleObject() timed out in WriteStream()\n")); + + /* If block processing has stopped, abort! */ + if( blockingState->stopFlag ) { return result = paStreamIsStopped; } + + /* If a timeout is encountered, give up eventually. */ + return result = paTimedOut; + } + } + /* Now, the ring buffer contains the required amount of free + space to store the provided number of data frames. + (Therefor we don't need to check the return argument of + PaUtil_GetRingBufferWriteRegions(). ;-) ) + */ + + /* Retrieve pointer(s) to the ring buffer's current write + position(s). If the first buffer segment is too small to + store the requested number of bytes, an additional second + segment is returned. Otherwise, i.e. if the first segment + is large enough, the second segment's pointer will be NULL. + */ + PaUtil_GetRingBufferWriteRegions(pRb , + lFramesPerBlock , + &pRingBufferData1st, + &lRingBufferSize1st, + &pRingBufferData2nd, + &lRingBufferSize2nd); + + /* Set number of frames to be copied to the ring buffer. */ + PaUtil_SetOutputFrameCount( pBp, lRingBufferSize1st ); + /* Setup ring buffer access. */ + PaUtil_SetInterleavedOutputChannels(pBp , /* Buffer processor. */ + 0 , /* The first channel's index. */ + pRingBufferData1st, /* First ring buffer segment. */ + 0 ); /* Use all available channels. */ + + /* If a second ring buffer segment is required. */ + if( lRingBufferSize2nd ) { + /* Set number of frames to be copied to the ring buffer. */ + PaUtil_Set2ndOutputFrameCount( pBp, lRingBufferSize2nd ); + /* Setup ring buffer access. */ + PaUtil_Set2ndInterleavedOutputChannels(pBp , /* Buffer processor. */ + 0 , /* The first channel's index. */ + pRingBufferData2nd, /* Second ring buffer segment. */ + 0 ); /* Use all available channels. */ + } + + /* Let the buffer processor handle "copy and conversion" and + update the ring buffer indices manually. */ + lFramesCopied = PaUtil_CopyOutput( pBp, &userBuffer, lFramesPerBlock ); + PaUtil_AdvanceRingBufferWriteIndex( pRb, lFramesCopied ); + + /* Decrease number of unprocessed frames. */ + lFramesRemaining -= lFramesCopied; + + } /* Continue with the next data chunk. */ + while( lFramesRemaining ); + + + /* If there has been an output underflow within the callback */ + if( blockingState->outputUnderflowFlag ) + { + blockingState->outputUnderflowFlag = FALSE; + + /* Return the corresponding error code. */ + result = paOutputUnderflowed; + } + + } /* If this is not an output stream. */ + else + { + result = paCanNotWriteToAnInputOnlyStream; + } + + return result; +} + + +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaAsioStream *stream = (PaAsioStream*)s; + + /* Call buffer utility routine to get the number of available frames. */ + return PaUtil_GetRingBufferReadAvailable( &stream->blockingState->readRingBuffer ); +} + + +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaAsioStream *stream = (PaAsioStream*)s; + + /* Call buffer utility routine to get the number of empty buffers. */ + return PaUtil_GetRingBufferWriteAvailable( &stream->blockingState->writeRingBuffer ); +} + + +/* This routine will be called by the PortAudio engine when audio is needed. +** It may called at interrupt level on some machines so don't do anything +** that could mess up the system like calling malloc() or free(). +*/ +static int BlockingIoPaCallback(const void *inputBuffer , + void *outputBuffer , + unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo *timeInfo , + PaStreamCallbackFlags statusFlags , + void *userData ) +{ + PaError result = paNoError; /* Initial return value. */ + PaAsioStream *stream = *(PaAsioStream**)userData; /* The PA ASIO stream. */ + PaAsioStreamBlockingState *blockingState = stream->blockingState; /* Persume blockingState is valid, otherwise the callback wouldn't be running. */ + + /* Get a pointer to the stream's blocking i/o buffer processor. */ + PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor; + PaUtilRingBuffer *pRb = NULL; + + /* If output data has been requested. */ + if( stream->outputChannelCount ) + { + /* If the callback input argument signalizes a output underflow, + make sure the WriteStream() function knows about it, too! */ + if( statusFlags & paOutputUnderflowed ) { + blockingState->outputUnderflowFlag = TRUE; + } + + /* Access the corresponding ring buffer. */ + pRb = &blockingState->writeRingBuffer; + + /* If the blocking i/o buffer contains enough output data, */ + if( PaUtil_GetRingBufferReadAvailable(pRb) >= (long) framesPerBuffer ) + { + /* Extract the requested data from the ring buffer. */ + PaUtil_ReadRingBuffer( pRb, outputBuffer, framesPerBuffer ); + } + else /* If no output data is available :-( */ + { + /* Signalize a write-buffer underflow. */ + blockingState->outputUnderflowFlag = TRUE; + + /* Fill the output buffer with silence. */ + (*pBp->outputZeroer)( outputBuffer, 1, pBp->outputChannelCount * framesPerBuffer ); + + /* If playback is to be stopped */ + if( blockingState->stopFlag && PaUtil_GetRingBufferReadAvailable(pRb) < (long) framesPerBuffer ) + { + /* Extract all the remaining data from the ring buffer, + whether it is a complete data block or not. */ + PaUtil_ReadRingBuffer( pRb, outputBuffer, PaUtil_GetRingBufferReadAvailable(pRb) ); + } + } + + /* Set blocking i/o event? */ + if( blockingState->writeBuffersRequestedFlag && PaUtil_GetRingBufferWriteAvailable(pRb) >= (long) blockingState->writeBuffersRequested ) + { + /* Reset buffer request. */ + blockingState->writeBuffersRequestedFlag = FALSE; + blockingState->writeBuffersRequested = 0; + /* Signalize that requested buffers are ready. */ + SetEvent( blockingState->writeBuffersReadyEvent ); + /* What do we do if SetEvent() returns zero, i.e. the event + could not be set? How to return errors from within the + callback? - S.Fischer */ + } + } + + /* If input data has been supplied. */ + if( stream->inputChannelCount ) + { + /* If the callback input argument signalizes a input overflow, + make sure the ReadStream() function knows about it, too! */ + if( statusFlags & paInputOverflowed ) { + blockingState->inputOverflowFlag = TRUE; + } + + /* Access the corresponding ring buffer. */ + pRb = &blockingState->readRingBuffer; + + /* If the blocking i/o buffer contains not enough input buffers */ + if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) framesPerBuffer ) + { + /* Signalize a read-buffer overflow. */ + blockingState->inputOverflowFlag = TRUE; + + /* Remove some old data frames from the buffer. */ + PaUtil_AdvanceRingBufferReadIndex( pRb, framesPerBuffer ); + } + + /* Insert the current input data into the ring buffer. */ + PaUtil_WriteRingBuffer( pRb, inputBuffer, framesPerBuffer ); + + /* Set blocking i/o event? */ + if( blockingState->readFramesRequestedFlag && PaUtil_GetRingBufferReadAvailable(pRb) >= (long) blockingState->readFramesRequested ) + { + /* Reset buffer request. */ + blockingState->readFramesRequestedFlag = FALSE; + blockingState->readFramesRequested = 0; + /* Signalize that requested buffers are ready. */ + SetEvent( blockingState->readFramesReadyEvent ); + /* What do we do if SetEvent() returns zero, i.e. the event + could not be set? How to return errors from within the + callback? - S.Fischer */ + /** @todo report an error with PA_DEBUG */ + } + } + + return paContinue; +} + + +PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific ) +{ + PaError result = paNoError; + PaUtilHostApiRepresentation *hostApi; + PaDeviceIndex hostApiDevice; + ASIODriverInfo asioDriverInfo; + ASIOError asioError; + int asioIsInitialized = 0; + PaAsioHostApiRepresentation *asioHostApi; + PaAsioDeviceInfo *asioDeviceInfo; + PaWinUtilComInitializationResult comInitializationResult; + + /* initialize COM again here, we might be in another thread */ + result = PaWinUtil_CoInitialize( paASIO, &comInitializationResult ); + if( result != paNoError ) + return result; + + result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO ); + if( result != paNoError ) + goto error; + + result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi ); + if( result != paNoError ) + goto error; + + /* + In theory we could proceed if the currently open device was the same + one for which the control panel was requested, however because the + window pointer is not available until this function is called we + currently need to call ASIOInit() again here, which of course can't be + done safely while a stream is open. + */ + + asioHostApi = (PaAsioHostApiRepresentation*)hostApi; + if( asioHostApi->openAsioDeviceIndex != paNoDevice ) + { + result = paDeviceUnavailable; + goto error; + } + + asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice]; + + if( !asioHostApi->asioDrivers->loadDriver( const_cast(asioDeviceInfo->commonDeviceInfo.name) ) ) + { + result = paUnanticipatedHostError; + goto error; + } + + /* CRUCIAL!!! */ + memset( &asioDriverInfo, 0, sizeof(ASIODriverInfo) ); + asioDriverInfo.asioVersion = 2; + asioDriverInfo.sysRef = systemSpecific; + asioError = ASIOInit( &asioDriverInfo ); + if( asioError != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + goto error; + } + else + { + asioIsInitialized = 1; + } + +PA_DEBUG(("PaAsio_ShowControlPanel: ASIOInit(): %s\n", PaAsio_GetAsioErrorText(asioError) )); +PA_DEBUG(("asioVersion: ASIOInit(): %ld\n", asioDriverInfo.asioVersion )); +PA_DEBUG(("driverVersion: ASIOInit(): %ld\n", asioDriverInfo.driverVersion )); +PA_DEBUG(("Name: ASIOInit(): %s\n", asioDriverInfo.name )); +PA_DEBUG(("ErrorMessage: ASIOInit(): %s\n", asioDriverInfo.errorMessage )); + + asioError = ASIOControlPanel(); + if( asioError != ASE_OK ) + { + PA_DEBUG(("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText(asioError) )); + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + goto error; + } + +PA_DEBUG(("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText(asioError) )); + + asioError = ASIOExit(); + if( asioError != ASE_OK ) + { + result = paUnanticipatedHostError; + PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); + asioIsInitialized = 0; + goto error; + } + +PA_DEBUG(("PaAsio_ShowControlPanel: ASIOExit(): %s\n", PaAsio_GetAsioErrorText(asioError) )); + + return result; + +error: + if( asioIsInitialized ) + { + ASIOExit(); + } + + PaWinUtil_CoUninitialize( paASIO, &comInitializationResult ); + + return result; +} + + +PaError PaAsio_GetInputChannelName( PaDeviceIndex device, int channelIndex, + const char** channelName ) +{ + PaError result = paNoError; + PaUtilHostApiRepresentation *hostApi; + PaDeviceIndex hostApiDevice; + PaAsioDeviceInfo *asioDeviceInfo; + + + result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO ); + if( result != paNoError ) + goto error; + + result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi ); + if( result != paNoError ) + goto error; + + asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice]; + + if( channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxInputChannels ){ + result = paInvalidChannelCount; + goto error; + } + + *channelName = asioDeviceInfo->asioChannelInfos[channelIndex].name; + + return paNoError; + +error: + return result; +} + + +PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex, + const char** channelName ) +{ + PaError result = paNoError; + PaUtilHostApiRepresentation *hostApi; + PaDeviceIndex hostApiDevice; + PaAsioDeviceInfo *asioDeviceInfo; + + + result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO ); + if( result != paNoError ) + goto error; + + result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi ); + if( result != paNoError ) + goto error; + + asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice]; + + if( channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxOutputChannels ){ + result = paInvalidChannelCount; + goto error; + } + + *channelName = asioDeviceInfo->asioChannelInfos[ + asioDeviceInfo->commonDeviceInfo.maxInputChannels + channelIndex].name; + + return paNoError; + +error: + return result; +} + + +/* NOTE: the following functions are ASIO-stream specific, and are called directly + by client code. We need to check for many more error conditions here because + we don't have the benefit of pa_front.c's parameter checking. +*/ + +static PaError GetAsioStreamPointer( PaAsioStream **stream, PaStream *s ) +{ + PaError result; + PaUtilHostApiRepresentation *hostApi; + PaAsioHostApiRepresentation *asioHostApi; + + result = PaUtil_ValidateStreamPointer( s ); + if( result != paNoError ) + return result; + + result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO ); + if( result != paNoError ) + return result; + + asioHostApi = (PaAsioHostApiRepresentation*)hostApi; + + if( PA_STREAM_REP( s )->streamInterface == &asioHostApi->callbackStreamInterface + || PA_STREAM_REP( s )->streamInterface == &asioHostApi->blockingStreamInterface ) + { + /* s is an ASIO stream */ + *stream = (PaAsioStream *)s; + return paNoError; + } + else + { + return paIncompatibleStreamHostApi; + } +} + + +PaError PaAsio_SetStreamSampleRate( PaStream* s, double sampleRate ) +{ + PaAsioStream *stream; + PaError result = GetAsioStreamPointer( &stream, s ); + if( result != paNoError ) + return result; + + if( stream != theAsioStream ) + return paBadStreamPtr; + + return ValidateAndSetSampleRate( sampleRate ); +} + diff --git a/Externals/portaudio/src/hostapi/coreaudio/notes.txt b/Externals/portaudio/src/hostapi/coreaudio/notes.txt new file mode 100644 index 0000000000..145afe1544 --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/notes.txt @@ -0,0 +1,196 @@ +Notes on status of CoreAudio Implementation of PortAudio + +Document Last Updated December 9, 2005 + +There are currently two implementations of PortAudio for Mac Core Audio. + +The original is in pa_mac_core_old.c, and the newer, default implementation +is in pa_mac_core.c. +Only pa_mac_core.c is currently developed and supported as it uses apple's +current core audio technology. To select use the old implementation, replace +pa_mac_core.c with pa_mac_core_old.c (eg. "cp pa_mac_core_auhal.c +pa_mac_core.c"), then run configure and make as usual. + +------------------------------------------- + +Notes on Newer/Default AUHAL implementation: + +by Bjorn Roche + +Last Updated December 9, 2005 + +Principle of Operation: + +This implementation uses AUHAL for audio I/O. To some extent, it also +operates at the "HAL" Layer, though this behavior can be limited by +platform specific flags (see pa_mac_core.h for details). The default +settings should be reasonable: they don't change the SR of the device and +don't cause interruptions if other devices are using the device. + +Major Software Elements Used: Apple's HAL AUs provide output SR +conversion transparently, however, only on output, so this +implementation uses AudioConverters to convert the sample rate on input. +A PortAudio ring buffer is used to buffer input when sample rate +conversion is required or when separate audio units are used for duplex +IO. Finally, a PortAudio buffer processor is used to convert formats and +provide additional buffers if needed. Internally, interleaved floating +point data streams are used exclusively - the audio unit converts from +the audio hardware's native format to interleaved float PCM and +PortAudio's Buffer processor is used for conversion to user formats. + +Simplex Input: Simplex input uses a single callback. If sample rate +conversion is required, a ring buffer and AudioConverter are used as +well. + +Simplex output: Simplex output uses a single callback. No ring buffer or +audio converter is used because AUHAL does its own output SR conversion. + +Duplex, one device (no SR conversion): When one device is used, a single +callback is used. This achieves very low latency. + +Duplex, separate devices or SR conversion: When SR conversion is +required, data must be buffered before it is converted and data is not +always available at the same times on input and output, so SR conversion +requires the same treatment as separate devices. The input callback +reads data and puts it in the ring buffer. The output callback reads the +data off the ring buffer, into an audio converter and finally to the +buffer processor. + +Platform Specific Options: + +By using the flags in pa_mac_core.h, the user may specify several options. +For example, the user can specify the sample-rate conversion quality, and +the extent to which PA will attempt to "play nice" and to what extent it +will interrupt other apps to improve performance. For example, if 44100 Hz +sample rate is requested but the device is set at 48000 Hz, PA can either +change the device for optimal playback ("Pro" mode), which may interrupt +other programs playing back audio, or simple use a sample-rate coversion, +which allows for friendlier sharing of the device ("Play Nice" mode). + +Additionally, the user may define a "channel mapping" by calling +paSetupMacCoreChannelMap() on their stream info structure before opening +the stream with it. See below for creating a channel map. + +Known issues: + +- Buffering: No buffering beyond that provided by core audio is provided +except where absolutely needed for the implementation to work. This may cause +issues with large framesPerBuffer settings and it also means that no additional +latency will be provided even if a large latency setting is selected. + +- Latency: Latency settings are generally ignored. They may be used as a +hint for buffer size in paHostFramesPerBufferUnspecified, or the value may +be used in cases where additional buffering is needed, such as doing input and +output on seperate devices. Latency settings are always automatically bound +to "safe" values, however, so setting extreme values here should not be +an issue. + +- Buffer Size: paHostFramesPerBufferUnspecified and specific host buffer sizes +are supported. paHostFramesPerBufferUnspecified works best in "pro" mode, +where the buffer size and sample rate of the audio device is most likely +to match the expected values. In the case of paHostFramesPerBuffer, an +appropriate framesPerBuffer value will be used that guarantees minimum +requested latency if that's possible. + +- Timing info. It reports on stream time, but I'm probably doing something +wrong since patest_sine_time often reports negative latency numbers. Also, +there are currently issues with some devices whehn plugging/unplugging +devices. + +- xrun detection: The only xrun detection performed is when reading +and writing the ring buffer. There is probably more that can be done. + +- abort/stop issues: stopping a stream is always a complete operation, +but latency should be low enough to make the lack of a separate abort +unnecessary. Apple clarifies its AudioOutputUnitStop() call here: +http://lists.apple.com/archives/coreaudio-api/2005/Dec/msg00055.html + +- blocking interface: should work fine. + +- multichannel: It has been tested successfully on multichannel hardware +from MOTU: traveler and 896HD. Also Presonus firepod and others. It is +believed to work with all Core Audio devices, including virtual devices +such as soundflower. + +- sample rate conversion quality: By default, SR conversion is the maximum +available. This can be tweaked using flags pa_mac_core.h. Note that the AU +render quyality property is used to set the sample rate conversion quality +as "documented" here: +http://lists.apple.com/archives/coreaudio-api/2004/Jan/msg00141.html + +- x86/Universal Binary: Universal binaries can be build. + + + +Creating a channel map: + +How to create the map array - Text taken From AUHAL.rtfd : +[3] Channel Maps +Clients can tell the AUHAL units which channels of the device they are interested in. For example, the client may be processing stereo data, but outputting to a six-channel device. This is done by using the kAudioOutputUnitProperty_ChannelMap property. To use this property: + +For Output: +Create an array of SInt32 that is the size of the number of channels of the device (Get the Format of the AUHAL's output Element == 0) +Initialize each of the array's values to -1 (-1 indicates that that channel is NOT to be presented in the conversion.) + +Next, for each channel of your app's output, set: +channelMapArray[deviceOutputChannel] = desiredAppOutputChannel. + +For example: we have a 6 channel output device and our application has a stereo source it wants to provide to the device. Suppose we want that stereo source to go to the 3rd and 4th channels of the device. The channel map would look like this: { -1, -1, 0, 1, -1, -1 } + +Where the formats are: +Input Element == 0: 2 channels (- client format - settable) +Output Element == 0: 6 channels (- device format - NOT settable) + +So channel 2 (zero-based) of the device will take the first channel of output and channel 3 will take the second channel of output. (This translates to the 3rd and 4th plugs of the 6 output plugs of the device of course!) + +For Input: +Create an array of SInt32 that is the size of the number of channels of the format you require for input. Get (or Set in this case as needed) the AUHAL's output Element == 1. + +Next, for each channel of input you require, set: +channelMapArray[desiredAppInputChannel] = deviceOutputChannel; + +For example: we have a 6 channel input device from which we wish to receive stereo input from the 3rd and 4th channels. The channel map looks like this: { 2, 3 } + +Where the formats are: +Input Element == 0: 2 channels (- device format - NOT settable) +Output Element == 0: 6 channels (- client format - settable) + + + +---------------------------------------- + +Notes on Original implementation: + +by Phil Burk and Darren Gibbs + +Last updated March 20, 2002 + +WHAT WORKS + +Output with very low latency, <10 msec. +Half duplex input or output. +Full duplex on the same CoreAudio device. +The paFLoat32, paInt16, paInt8, paUInt8 sample formats. +Pa_GetCPULoad() +Pa_StreamTime() + +KNOWN BUGS OR LIMITATIONS + +We do not yet support simultaneous input and output on different +devices. Note that some CoreAudio devices like the Roland UH30 look +like one device but are actually two different CoreAudio devices. The +Built-In audio is typically one CoreAudio device. + +Mono doesn't work. + +DEVICE MAPPING + +CoreAudio devices can support both input and output. But the sample +rates supported may be different. So we have map one or two PortAudio +device to each CoreAudio device depending on whether it supports +input, output or both. + +When we query devices, we first get a list of CoreAudio devices. Then +we scan the list and add a PortAudio device for each CoreAudio device +that supports input. Then we make a scan for output devices. + diff --git a/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core.c b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core.c new file mode 100644 index 0000000000..b182dac05a --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core.c @@ -0,0 +1,2752 @@ +/* + * Implementation of the PortAudio API for Apple AUHAL + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file pa_mac_core + @ingroup hostapi_src + @author Bjorn Roche + @brief AUHAL implementation of PortAudio +*/ + +/* FIXME: not all error conditions call PaUtil_SetLastHostErrorInfo() + * PaMacCore_SetError() will do this. + */ + +#include "pa_mac_core_internal.h" + +#include /* strlen(), memcmp() etc. */ +#include + +#include "pa_mac_core.h" +#include "pa_mac_core_utilities.h" +#include "pa_mac_core_blocking.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* This is a reasonable size for a small buffer based on experience. */ +#define PA_MAC_SMALL_BUFFER_SIZE (64) + +/* prototypes for functions declared in this file */ +PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +/* + * Function declared in pa_mac_core.h. Sets up a PaMacCoreStreamInfoStruct + * with the requested flags and initializes channel map. + */ +void PaMacCore_SetupStreamInfo( PaMacCoreStreamInfo *data, const unsigned long flags ) +{ + bzero( data, sizeof( PaMacCoreStreamInfo ) ); + data->size = sizeof( PaMacCoreStreamInfo ); + data->hostApiType = paCoreAudio; + data->version = 0x01; + data->flags = flags; + data->channelMap = NULL; + data->channelMapSize = 0; +} + +/* + * Function declared in pa_mac_core.h. Adds channel mapping to a PaMacCoreStreamInfoStruct + */ +void PaMacCore_SetupChannelMap( PaMacCoreStreamInfo *data, const SInt32 * const channelMap, const unsigned long channelMapSize ) +{ + data->channelMap = channelMap; + data->channelMapSize = channelMapSize; +} +static char *channelName = NULL; +static int channelNameSize = 0; +static bool ensureChannelNameSize( int size ) +{ + if( size >= channelNameSize ) { + free( channelName ); + channelName = (char *) malloc( ( channelNameSize = size ) + 1 ); + if( !channelName ) { + channelNameSize = 0; + return false; + } + } + return true; +} +/* + * Function declared in pa_mac_core.h. retrives channel names. + */ +const char *PaMacCore_GetChannelName( int device, int channelIndex, bool input ) +{ + struct PaUtilHostApiRepresentation *hostApi; + PaError err; + OSStatus error; + err = PaUtil_GetHostApiRepresentation( &hostApi, paCoreAudio ); + assert(err == paNoError); + if( err != paNoError ) + return NULL; + PaMacAUHAL *macCoreHostApi = (PaMacAUHAL*)hostApi; + AudioDeviceID hostApiDevice = macCoreHostApi->devIds[device]; + + UInt32 size = 0; + + error = AudioDeviceGetPropertyInfo( hostApiDevice, + channelIndex + 1, + input, + kAudioDevicePropertyChannelName, + &size, + NULL ); + if( error ) { + //try the CFString + CFStringRef name; + bool isDeviceName = false; + size = sizeof( name ); + error = AudioDeviceGetProperty( hostApiDevice, + channelIndex + 1, + input, + kAudioDevicePropertyChannelNameCFString, + &size, + &name ); + if( error ) { //as a last-ditch effort, get the device name. Later we'll append the channel number. + size = sizeof( name ); + error = AudioDeviceGetProperty( hostApiDevice, + channelIndex + 1, + input, + kAudioDevicePropertyDeviceNameCFString, + &size, + &name ); + if( error ) + return NULL; + isDeviceName = true; + } + if( isDeviceName ) { + name = CFStringCreateWithFormat( NULL, NULL, CFSTR( "%@: %d"), name, channelIndex + 1 ); + } + + CFIndex length = CFStringGetLength(name); + while( ensureChannelNameSize( length * sizeof(UniChar) + 1 ) ) { + if( CFStringGetCString( name, channelName, channelNameSize, kCFStringEncodingUTF8 ) ) { + if( isDeviceName ) + CFRelease( name ); + return channelName; + } + if( length == 0 ) + ++length; + length *= 2; + } + if( isDeviceName ) + CFRelease( name ); + return NULL; + } + + //continue with C string: + if( !ensureChannelNameSize( size ) ) + return NULL; + + error = AudioDeviceGetProperty( hostApiDevice, + channelIndex + 1, + input, + kAudioDevicePropertyChannelName, + &size, + channelName ); + + if( error ) { + ERR( error ); + return NULL; + } + return channelName; +} + + + + + +AudioDeviceID PaMacCore_GetStreamInputDevice( PaStream* s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + VVDBUG(("PaMacCore_GetStreamInputHandle()\n")); + + return ( stream->inputDevice ); +} + +AudioDeviceID PaMacCore_GetStreamOutputDevice( PaStream* s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + VVDBUG(("PaMacCore_GetStreamOutputHandle()\n")); + + return ( stream->outputDevice ); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#define RING_BUFFER_ADVANCE_DENOMINATOR (4) + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static OSStatus AudioIOProc( void *inRefCon, + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, + UInt32 inNumberFrames, + AudioBufferList *ioData ); +static double GetStreamCpuLoad( PaStream* stream ); + +static PaError GetChannelInfo( PaMacAUHAL *auhalHostApi, + PaDeviceInfo *deviceInfo, + AudioDeviceID macCoreDeviceId, + int isInput); + +static PaError OpenAndSetupOneAudioUnit( + const PaMacCoreStream *stream, + const PaStreamParameters *inStreamParams, + const PaStreamParameters *outStreamParams, + const UInt32 requestedFramesPerBuffer, + UInt32 *actualInputFramesPerBuffer, + UInt32 *actualOutputFramesPerBuffer, + const PaMacAUHAL *auhalHostApi, + AudioUnit *audioUnit, + AudioConverterRef *srConverter, + AudioDeviceID *audioDevice, + const double sampleRate, + void *refCon ); + +/* for setting errors. */ +#define PA_AUHAL_SET_LAST_HOST_ERROR( errorCode, errorText ) \ + PaUtil_SetLastHostErrorInfo( paInDevelopment, errorCode, errorText ) + +/* + * Callback called when starting or stopping a stream. + */ +static void startStopCallback( + void * inRefCon, + AudioUnit ci, + AudioUnitPropertyID inID, + AudioUnitScope inScope, + AudioUnitElement inElement ) +{ + PaMacCoreStream *stream = (PaMacCoreStream *) inRefCon; + UInt32 isRunning; + UInt32 size = sizeof( isRunning ); + OSStatus err; + err = AudioUnitGetProperty( ci, kAudioOutputUnitProperty_IsRunning, inScope, inElement, &isRunning, &size ); + assert( !err ); + if( err ) + isRunning = false; //it's very unclear what to do in case of error here. There's no real way to notify the user, and crashing seems unreasonable. + if( isRunning ) + return; //We are only interested in when we are stopping + // -- if we are using 2 I/O units, we only need one notification! + if( stream->inputUnit && stream->outputUnit && stream->inputUnit != stream->outputUnit && ci == stream->inputUnit ) + return; + PaStreamFinishedCallback *sfc = stream->streamRepresentation.streamFinishedCallback; + if( stream->state == STOPPING ) + stream->state = STOPPED ; + if( sfc ) + sfc( stream->streamRepresentation.userData ); +} + + +/*currently, this is only used in initialization, but it might be modified + to be used when the list of devices changes.*/ +static PaError gatherDeviceInfo(PaMacAUHAL *auhalHostApi) +{ + UInt32 size; + UInt32 propsize; + VVDBUG(("gatherDeviceInfo()\n")); + /* -- free any previous allocations -- */ + if( auhalHostApi->devIds ) + PaUtil_GroupFreeMemory(auhalHostApi->allocations, auhalHostApi->devIds); + auhalHostApi->devIds = NULL; + + /* -- figure out how many devices there are -- */ + AudioHardwareGetPropertyInfo( kAudioHardwarePropertyDevices, + &propsize, + NULL ); + auhalHostApi->devCount = propsize / sizeof( AudioDeviceID ); + + VDBUG( ( "Found %ld device(s).\n", auhalHostApi->devCount ) ); + + /* -- copy the device IDs -- */ + auhalHostApi->devIds = (AudioDeviceID *)PaUtil_GroupAllocateMemory( + auhalHostApi->allocations, + propsize ); + if( !auhalHostApi->devIds ) + return paInsufficientMemory; + AudioHardwareGetProperty( kAudioHardwarePropertyDevices, + &propsize, + auhalHostApi->devIds ); +#ifdef MAC_CORE_VERBOSE_DEBUG + { + int i; + for( i=0; idevCount; ++i ) + printf( "Device %d\t: %ld\n", i, auhalHostApi->devIds[i] ); + } +#endif + + size = sizeof(AudioDeviceID); + auhalHostApi->defaultIn = kAudioDeviceUnknown; + auhalHostApi->defaultOut = kAudioDeviceUnknown; + + /* determine the default device. */ + /* I am not sure how these calls to AudioHardwareGetProperty() + could fail, but in case they do, we use the first available + device as the default. */ + if( 0 != AudioHardwareGetProperty(kAudioHardwarePropertyDefaultInputDevice, + &size, + &auhalHostApi->defaultIn) ) { + int i; + auhalHostApi->defaultIn = kAudioDeviceUnknown; + VDBUG(("Failed to get default input device from OS.")); + VDBUG((" I will substitute the first available input Device.")); + for( i=0; idevCount; ++i ) { + PaDeviceInfo devInfo; + if( 0 != GetChannelInfo( auhalHostApi, &devInfo, + auhalHostApi->devIds[i], TRUE ) ) + if( devInfo.maxInputChannels ) { + auhalHostApi->defaultIn = auhalHostApi->devIds[i]; + break; + } + } + } + if( 0 != AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, + &size, + &auhalHostApi->defaultOut) ) { + int i; + auhalHostApi->defaultIn = kAudioDeviceUnknown; + VDBUG(("Failed to get default output device from OS.")); + VDBUG((" I will substitute the first available output Device.")); + for( i=0; idevCount; ++i ) { + PaDeviceInfo devInfo; + if( 0 != GetChannelInfo( auhalHostApi, &devInfo, + auhalHostApi->devIds[i], FALSE ) ) + if( devInfo.maxOutputChannels ) { + auhalHostApi->defaultOut = auhalHostApi->devIds[i]; + break; + } + } + } + + VDBUG( ( "Default in : %ld\n", auhalHostApi->defaultIn ) ); + VDBUG( ( "Default out: %ld\n", auhalHostApi->defaultOut ) ); + + return paNoError; +} + +/* =================================================================================================== */ +/** + * @internal + * @brief Clip the desired size against the allowed IO buffer size range for the device. + */ +static PaError ClipToDeviceBufferSize( AudioDeviceID macCoreDeviceId, + int isInput, UInt32 desiredSize, UInt32 *allowedSize ) +{ + UInt32 resultSize = desiredSize; + AudioValueRange audioRange; + UInt32 propSize = sizeof( audioRange ); + PaError err = WARNING(AudioDeviceGetProperty( macCoreDeviceId, 0, isInput, kAudioDevicePropertyBufferFrameSizeRange, &propSize, &audioRange ) ); + resultSize = MAX( resultSize, audioRange.mMinimum ); + resultSize = MIN( resultSize, audioRange.mMaximum ); + *allowedSize = resultSize; + return err; +} + +/* =================================================================================================== */ +#if 0 +static void DumpDeviceProperties( AudioDeviceID macCoreDeviceId, + int isInput ) +{ + PaError err; + int i; + UInt32 propSize; + UInt32 deviceLatency; + UInt32 streamLatency; + UInt32 bufferFrames; + UInt32 safetyOffset; + AudioStreamID streamIDs[128]; + + printf("\n======= latency query : macCoreDeviceId = %d, isInput %d =======\n", (int)macCoreDeviceId, isInput ); + + propSize = sizeof(UInt32); + err = WARNING(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyBufferFrameSize, &propSize, &bufferFrames)); + printf("kAudioDevicePropertyBufferFrameSize: err = %d, propSize = %d, value = %d\n", err, propSize, bufferFrames ); + + propSize = sizeof(UInt32); + err = WARNING(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertySafetyOffset, &propSize, &safetyOffset)); + printf("kAudioDevicePropertySafetyOffset: err = %d, propSize = %d, value = %d\n", err, propSize, safetyOffset ); + + propSize = sizeof(UInt32); + err = WARNING(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyLatency, &propSize, &deviceLatency)); + printf("kAudioDevicePropertyLatency: err = %d, propSize = %d, value = %d\n", err, propSize, deviceLatency ); + + AudioValueRange audioRange; + propSize = sizeof( audioRange ); + err = WARNING(AudioDeviceGetProperty( macCoreDeviceId, 0, isInput, kAudioDevicePropertyBufferFrameSizeRange, &propSize, &audioRange ) ); + printf("kAudioDevicePropertyBufferFrameSizeRange: err = %d, propSize = %u, minimum = %g\n", err, propSize, audioRange.mMinimum); + printf("kAudioDevicePropertyBufferFrameSizeRange: err = %d, propSize = %u, maximum = %g\n", err, propSize, audioRange.mMaximum ); + + /* Get the streams from the device and query their latency. */ + propSize = sizeof(streamIDs); + err = WARNING(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyStreams, &propSize, &streamIDs[0])); + int numStreams = propSize / sizeof(AudioStreamID); + for( i=0; imNumberBuffers; ++i) + numChannels += buflist->mBuffers[i].mNumberChannels; + + if (isInput) + deviceInfo->maxInputChannels = numChannels; + else + deviceInfo->maxOutputChannels = numChannels; + + if (numChannels > 0) /* do not try to retrieve the latency if there are no channels. */ + { + /* Get the latency. Don't fail if we can't get this. */ + /* default to something reasonable */ + deviceInfo->defaultLowInputLatency = .01; + deviceInfo->defaultHighInputLatency = .10; + deviceInfo->defaultLowOutputLatency = .01; + deviceInfo->defaultHighOutputLatency = .10; + UInt32 lowLatencyFrames = 0; + UInt32 highLatencyFrames = 0; + err = CalculateDefaultDeviceLatencies( macCoreDeviceId, isInput, &lowLatencyFrames, &highLatencyFrames ); + if( err == 0 ) + { + + double lowLatencySeconds = lowLatencyFrames / deviceInfo->defaultSampleRate; + double highLatencySeconds = highLatencyFrames / deviceInfo->defaultSampleRate; + if (isInput) + { + deviceInfo->defaultLowInputLatency = lowLatencySeconds; + deviceInfo->defaultHighInputLatency = highLatencySeconds; + } + else + { + deviceInfo->defaultLowOutputLatency = lowLatencySeconds; + deviceInfo->defaultHighOutputLatency = highLatencySeconds; + } + } + } + PaUtil_FreeMemory( buflist ); + return paNoError; + error: + PaUtil_FreeMemory( buflist ); + return err; +} + +/* =================================================================================================== */ +static PaError InitializeDeviceInfo( PaMacAUHAL *auhalHostApi, + PaDeviceInfo *deviceInfo, + AudioDeviceID macCoreDeviceId, + PaHostApiIndex hostApiIndex ) +{ + Float64 sampleRate; + char *name; + PaError err = paNoError; + UInt32 propSize; + + VVDBUG(("InitializeDeviceInfo(): macCoreDeviceId=%ld\n", macCoreDeviceId)); + + memset(deviceInfo, 0, sizeof(deviceInfo)); + + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + + /* Get the device name. Fail if we can't get it. */ + err = ERR(AudioDeviceGetPropertyInfo(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, NULL)); + if (err) + return err; + + name = PaUtil_GroupAllocateMemory(auhalHostApi->allocations,propSize); + if ( !name ) + return paInsufficientMemory; + err = ERR(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, name)); + if (err) + return err; + deviceInfo->name = name; + + /* Try to get the default sample rate. Don't fail if we can't get this. */ + propSize = sizeof(Float64); + err = ERR(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyNominalSampleRate, &propSize, &sampleRate)); + if (err) + deviceInfo->defaultSampleRate = 0.0; + else + deviceInfo->defaultSampleRate = sampleRate; + + /* Get the maximum number of input and output channels. Fail if we can't get this. */ + + err = GetChannelInfo(auhalHostApi, deviceInfo, macCoreDeviceId, 1); + if (err) + return err; + + err = GetChannelInfo(auhalHostApi, deviceInfo, macCoreDeviceId, 0); + if (err) + return err; + + return paNoError; +} + +PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + int i; + PaMacAUHAL *auhalHostApi = NULL; + PaDeviceInfo *deviceInfoArray; + int unixErr; + + VVDBUG(("PaMacCore_Initialize(): hostApiIndex=%d\n", hostApiIndex)); + + SInt32 major; + SInt32 minor; + Gestalt(gestaltSystemVersionMajor, &major); + Gestalt(gestaltSystemVersionMinor, &minor); + + // Starting with 10.6 systems, the HAL notification thread is created internally + if (major == 10 && minor >= 6) { + CFRunLoopRef theRunLoop = NULL; + AudioObjectPropertyAddress theAddress = { kAudioHardwarePropertyRunLoop, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; + OSStatus osErr = AudioObjectSetPropertyData (kAudioObjectSystemObject, &theAddress, 0, NULL, sizeof(CFRunLoopRef), &theRunLoop); + if (osErr != noErr) { + goto error; + } + } + + unixErr = initializeXRunListenerList(); + if( 0 != unixErr ) { + return UNIX_ERR(unixErr); + } + + auhalHostApi = (PaMacAUHAL*)PaUtil_AllocateMemory( sizeof(PaMacAUHAL) ); + if( !auhalHostApi ) + { + result = paInsufficientMemory; + goto error; + } + + auhalHostApi->allocations = PaUtil_CreateAllocationGroup(); + if( !auhalHostApi->allocations ) + { + result = paInsufficientMemory; + goto error; + } + + auhalHostApi->devIds = NULL; + auhalHostApi->devCount = 0; + + /* get the info we need about the devices */ + result = gatherDeviceInfo( auhalHostApi ); + if( result != paNoError ) + goto error; + + *hostApi = &auhalHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paCoreAudio; + (*hostApi)->info.name = "Core Audio"; + + (*hostApi)->info.defaultInputDevice = paNoDevice; + (*hostApi)->info.defaultOutputDevice = paNoDevice; + + (*hostApi)->info.deviceCount = 0; + + if( auhalHostApi->devCount > 0 ) + { + (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + auhalHostApi->allocations, sizeof(PaDeviceInfo*) * auhalHostApi->devCount); + if( !(*hostApi)->deviceInfos ) + { + result = paInsufficientMemory; + goto error; + } + + /* allocate all device info structs in a contiguous block */ + deviceInfoArray = (PaDeviceInfo*)PaUtil_GroupAllocateMemory( + auhalHostApi->allocations, sizeof(PaDeviceInfo) * auhalHostApi->devCount ); + if( !deviceInfoArray ) + { + result = paInsufficientMemory; + goto error; + } + + for( i=0; i < auhalHostApi->devCount; ++i ) + { + int err; + err = InitializeDeviceInfo( auhalHostApi, &deviceInfoArray[i], + auhalHostApi->devIds[i], + hostApiIndex ); + if (err == paNoError) + { /* copy some info and set the defaults */ + (*hostApi)->deviceInfos[(*hostApi)->info.deviceCount] = &deviceInfoArray[i]; + if (auhalHostApi->devIds[i] == auhalHostApi->defaultIn) + (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount; + if (auhalHostApi->devIds[i] == auhalHostApi->defaultOut) + (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount; + (*hostApi)->info.deviceCount++; + } + else + { /* there was an error. we need to shift the devices down, so we ignore this one */ + int j; + auhalHostApi->devCount--; + for( j=i; jdevCount; ++j ) + auhalHostApi->devIds[j] = auhalHostApi->devIds[j+1]; + i--; + } + } + } + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &auhalHostApi->callbackStreamInterface, + CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, + IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, + PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &auhalHostApi->blockingStreamInterface, + CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, + IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, + GetStreamReadAvailable, + GetStreamWriteAvailable ); + + return result; + +error: + if( auhalHostApi ) + { + if( auhalHostApi->allocations ) + { + PaUtil_FreeAllAllocations( auhalHostApi->allocations ); + PaUtil_DestroyAllocationGroup( auhalHostApi->allocations ); + } + + PaUtil_FreeMemory( auhalHostApi ); + } + return result; +} + + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + int unixErr; + + PaMacAUHAL *auhalHostApi = (PaMacAUHAL*)hostApi; + + VVDBUG(("Terminate()\n")); + + unixErr = destroyXRunListenerList(); + if( 0 != unixErr ) + UNIX_ERR(unixErr); + + /* + IMPLEMENT ME: + - clean up any resources not handled by the allocation group + TODO: Double check that everything is handled by alloc group + */ + + if( auhalHostApi->allocations ) + { + PaUtil_FreeAllAllocations( auhalHostApi->allocations ); + PaUtil_DestroyAllocationGroup( auhalHostApi->allocations ); + } + + PaUtil_FreeMemory( auhalHostApi ); +} + + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + + VVDBUG(("IsFormatSupported(): in chan=%d, in fmt=%ld, out chan=%d, out fmt=%ld sampleRate=%g\n", + inputParameters ? inputParameters->channelCount : -1, + inputParameters ? inputParameters->sampleFormat : -1, + outputParameters ? outputParameters->channelCount : -1, + outputParameters ? outputParameters->sampleFormat : -1, + (float) sampleRate )); + + /** These first checks are standard PA checks. We do some fancier checks + later. */ + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( inputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( outputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support outputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + } + else + { + outputChannelCount = 0; + } + + /* FEEDBACK */ + /* I think the only way to check a given format SR combo is */ + /* to try opening it. This could be disruptive, is that Okay? */ + /* The alternative is to just read off available sample rates, */ + /* but this will not work %100 of the time (eg, a device that */ + /* supports N output at one rate but only N/2 at a higher rate.)*/ + + /* The following code opens the device with the requested parameters to + see if it works. */ + { + PaError err; + PaStream *s; + err = OpenStream( hostApi, &s, inputParameters, outputParameters, + sampleRate, 1024, 0, (PaStreamCallback *)1, NULL ); + if( err != paNoError && err != paInvalidSampleRate ) + DBUG( ( "OpenStream @ %g returned: %d: %s\n", + (float) sampleRate, err, Pa_GetErrorText( err ) ) ); + if( err ) + return err; + err = CloseStream( s ); + if( err ) { + /* FEEDBACK: is this more serious? should we assert? */ + DBUG( ( "WARNING: could not close Stream. %d: %s\n", + err, Pa_GetErrorText( err ) ) ); + } + } + + return paFormatIsSupported; +} + +/* ================================================================================= */ +static void InitializeDeviceProperties( PaMacCoreDeviceProperties *deviceProperties ) +{ + memset( deviceProperties, 0, sizeof(PaMacCoreDeviceProperties) ); + deviceProperties->sampleRate = 1.0; // Better than random. Overwritten by actual values later on. + deviceProperties->samplePeriod = 1.0 / deviceProperties->sampleRate; +} + +static Float64 CalculateSoftwareLatencyFromProperties( PaMacCoreStream *stream, PaMacCoreDeviceProperties *deviceProperties ) +{ + UInt32 latencyFrames = deviceProperties->bufferFrameSize + deviceProperties->deviceLatency + deviceProperties->safetyOffset; + return latencyFrames * deviceProperties->samplePeriod; // same as dividing by sampleRate but faster +} + +static Float64 CalculateHardwareLatencyFromProperties( PaMacCoreStream *stream, PaMacCoreDeviceProperties *deviceProperties ) +{ + return deviceProperties->deviceLatency * deviceProperties->samplePeriod; // same as dividing by sampleRate but faster +} + +/* Calculate values used to convert Apple timestamps into PA timestamps + * from the device properties. The final results of this calculation + * will be used in the audio callback function. + */ +static void UpdateTimeStampOffsets( PaMacCoreStream *stream ) +{ + Float64 inputSoftwareLatency = 0.0; + Float64 inputHardwareLatency = 0.0; + Float64 outputSoftwareLatency = 0.0; + Float64 outputHardwareLatency = 0.0; + + if( stream->inputUnit != NULL ) + { + inputSoftwareLatency = CalculateSoftwareLatencyFromProperties( stream, &stream->inputProperties ); + inputHardwareLatency = CalculateHardwareLatencyFromProperties( stream, &stream->inputProperties ); + } + if( stream->outputUnit != NULL ) + { + outputSoftwareLatency = CalculateSoftwareLatencyFromProperties( stream, &stream->outputProperties ); + outputHardwareLatency = CalculateHardwareLatencyFromProperties( stream, &stream->outputProperties ); + } + + /* We only need a mutex around setting these variables as a group. */ + pthread_mutex_lock( &stream->timingInformationMutex ); + stream->timestampOffsetCombined = inputSoftwareLatency + outputSoftwareLatency; + stream->timestampOffsetInputDevice = inputHardwareLatency; + stream->timestampOffsetOutputDevice = outputHardwareLatency; + pthread_mutex_unlock( &stream->timingInformationMutex ); +} + +/* ================================================================================= */ +/* Query sample rate property. */ +static OSStatus UpdateSampleRateFromDeviceProperty( PaMacCoreStream *stream, AudioDeviceID deviceID, Boolean isInput ) +{ + PaMacCoreDeviceProperties * deviceProperties = isInput ? &stream->inputProperties : &stream->outputProperties; + /* FIXME: not sure if this should be the sample rate of the output device or the output unit */ + Float64 actualSampleRate = deviceProperties->sampleRate; + UInt32 propSize = sizeof(Float64); + OSStatus osErr = AudioDeviceGetProperty( deviceID, 0, isInput, kAudioDevicePropertyActualSampleRate, &propSize, &actualSampleRate); + if( (osErr == noErr) && (actualSampleRate > 1000.0) ) // avoid divide by zero if there's an error + { + deviceProperties->sampleRate = actualSampleRate; + deviceProperties->samplePeriod = 1.0 / actualSampleRate; + } + return osErr; +} + +static OSStatus AudioDevicePropertyActualSampleRateListenerProc( AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *inClientData ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)inClientData; + + // Make sure the callback is operating on a stream that is still valid! + assert( stream->streamRepresentation.magic == PA_STREAM_MAGIC ); + + OSStatus osErr = UpdateSampleRateFromDeviceProperty( stream, inDevice, isInput ); + if( osErr == noErr ) + { + UpdateTimeStampOffsets( stream ); + } + return osErr; +} + +/* ================================================================================= */ +static OSStatus QueryUInt32DeviceProperty( AudioDeviceID deviceID, Boolean isInput, AudioDevicePropertyID propertyID, UInt32 *outValue ) +{ + UInt32 propertyValue = 0; + UInt32 propertySize = sizeof(UInt32); + OSStatus osErr = AudioDeviceGetProperty( deviceID, 0, isInput, propertyID, &propertySize, &propertyValue); + if( osErr == noErr ) + { + *outValue = propertyValue; + } + return osErr; +} + +static OSStatus AudioDevicePropertyGenericListenerProc( AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *inClientData ) +{ + OSStatus osErr = noErr; + PaMacCoreStream *stream = (PaMacCoreStream*)inClientData; + + // Make sure the callback is operating on a stream that is still valid! + assert( stream->streamRepresentation.magic == PA_STREAM_MAGIC ); + + PaMacCoreDeviceProperties *deviceProperties = isInput ? &stream->inputProperties : &stream->outputProperties; + UInt32 *valuePtr = NULL; + switch( inPropertyID ) + { + case kAudioDevicePropertySafetyOffset: + valuePtr = &deviceProperties->safetyOffset; + break; + + case kAudioDevicePropertyLatency: + valuePtr = &deviceProperties->deviceLatency; + break; + + case kAudioDevicePropertyBufferFrameSize: + valuePtr = &deviceProperties->bufferFrameSize; + break; + } + if( valuePtr != NULL ) + { + osErr = QueryUInt32DeviceProperty( inDevice, isInput, inPropertyID, valuePtr ); + if( osErr == noErr ) + { + UpdateTimeStampOffsets( stream ); + } + } + return osErr; +} + +/* ================================================================================= */ +/* + * Setup listeners in case device properties change during the run. */ +static OSStatus SetupDevicePropertyListeners( PaMacCoreStream *stream, AudioDeviceID deviceID, Boolean isInput ) +{ + OSStatus osErr = noErr; + PaMacCoreDeviceProperties *deviceProperties = isInput ? &stream->inputProperties : &stream->outputProperties; + + // Start with the current values for the device properties. + UpdateSampleRateFromDeviceProperty( stream, deviceID, isInput ); + + if( (osErr = QueryUInt32DeviceProperty( deviceID, isInput, + kAudioDevicePropertyLatency, &deviceProperties->deviceLatency )) != noErr ) return osErr; + if( (osErr = QueryUInt32DeviceProperty( deviceID, isInput, + kAudioDevicePropertyBufferFrameSize, &deviceProperties->bufferFrameSize )) != noErr ) return osErr; + if( (osErr = QueryUInt32DeviceProperty( deviceID, isInput, + kAudioDevicePropertySafetyOffset, &deviceProperties->safetyOffset )) != noErr ) return osErr; + + AudioDeviceAddPropertyListener( deviceID, 0, isInput, kAudioDevicePropertyActualSampleRate, + AudioDevicePropertyActualSampleRateListenerProc, stream ); + + AudioDeviceAddPropertyListener( deviceID, 0, isInput, kAudioStreamPropertyLatency, + AudioDevicePropertyGenericListenerProc, stream ); + AudioDeviceAddPropertyListener( deviceID, 0, isInput, kAudioDevicePropertyBufferFrameSize, + AudioDevicePropertyGenericListenerProc, stream ); + AudioDeviceAddPropertyListener( deviceID, 0, isInput, kAudioDevicePropertySafetyOffset, + AudioDevicePropertyGenericListenerProc, stream ); + + return osErr; +} + +static void CleanupDevicePropertyListeners( PaMacCoreStream *stream, AudioDeviceID deviceID, Boolean isInput ) +{ + AudioDeviceRemovePropertyListener( deviceID, 0, isInput, kAudioDevicePropertyActualSampleRate, + AudioDevicePropertyActualSampleRateListenerProc ); + + AudioDeviceRemovePropertyListener( deviceID, 0, isInput, kAudioDevicePropertyLatency, + AudioDevicePropertyGenericListenerProc ); + AudioDeviceRemovePropertyListener( deviceID, 0, isInput, kAudioDevicePropertyBufferFrameSize, + AudioDevicePropertyGenericListenerProc ); + AudioDeviceRemovePropertyListener( deviceID, 0, isInput, kAudioDevicePropertySafetyOffset, + AudioDevicePropertyGenericListenerProc ); +} + +/* ================================================================================= */ +static PaError OpenAndSetupOneAudioUnit( + const PaMacCoreStream *stream, + const PaStreamParameters *inStreamParams, + const PaStreamParameters *outStreamParams, + const UInt32 requestedFramesPerBuffer, + UInt32 *actualInputFramesPerBuffer, + UInt32 *actualOutputFramesPerBuffer, + const PaMacAUHAL *auhalHostApi, + AudioUnit *audioUnit, + AudioConverterRef *srConverter, + AudioDeviceID *audioDevice, + const double sampleRate, + void *refCon ) +{ + ComponentDescription desc; + Component comp; + /*An Apple TN suggests using CAStreamBasicDescription, but that is C++*/ + AudioStreamBasicDescription desiredFormat; + OSStatus result = noErr; + PaError paResult = paNoError; + int line = 0; + UInt32 callbackKey; + AURenderCallbackStruct rcbs; + unsigned long macInputStreamFlags = paMacCorePlayNice; + unsigned long macOutputStreamFlags = paMacCorePlayNice; + SInt32 const *inChannelMap = NULL; + SInt32 const *outChannelMap = NULL; + unsigned long inChannelMapSize = 0; + unsigned long outChannelMapSize = 0; + + VVDBUG(("OpenAndSetupOneAudioUnit(): in chan=%d, in fmt=%ld, out chan=%d, out fmt=%ld, requestedFramesPerBuffer=%ld\n", + inStreamParams ? inStreamParams->channelCount : -1, + inStreamParams ? inStreamParams->sampleFormat : -1, + outStreamParams ? outStreamParams->channelCount : -1, + outStreamParams ? outStreamParams->sampleFormat : -1, + requestedFramesPerBuffer )); + + /* -- handle the degenerate case -- */ + if( !inStreamParams && !outStreamParams ) { + *audioUnit = NULL; + *audioDevice = kAudioDeviceUnknown; + return paNoError; + } + + /* -- get the user's api specific info, if they set any -- */ + if( inStreamParams && inStreamParams->hostApiSpecificStreamInfo ) + { + macInputStreamFlags= + ((PaMacCoreStreamInfo*)inStreamParams->hostApiSpecificStreamInfo) + ->flags; + inChannelMap = ((PaMacCoreStreamInfo*)inStreamParams->hostApiSpecificStreamInfo) + ->channelMap; + inChannelMapSize = ((PaMacCoreStreamInfo*)inStreamParams->hostApiSpecificStreamInfo) + ->channelMapSize; + } + if( outStreamParams && outStreamParams->hostApiSpecificStreamInfo ) + { + macOutputStreamFlags= + ((PaMacCoreStreamInfo*)outStreamParams->hostApiSpecificStreamInfo) + ->flags; + outChannelMap = ((PaMacCoreStreamInfo*)outStreamParams->hostApiSpecificStreamInfo) + ->channelMap; + outChannelMapSize = ((PaMacCoreStreamInfo*)outStreamParams->hostApiSpecificStreamInfo) + ->channelMapSize; + } + /* Override user's flags here, if desired for testing. */ + + /* + * The HAL AU is a Mac OS style "component". + * the first few steps deal with that. + * Later steps work on a combination of Mac OS + * components and the slightly lower level + * HAL. + */ + + /* -- describe the output type AudioUnit -- */ + /* Note: for the default AudioUnit, we could use the + * componentSubType value kAudioUnitSubType_DefaultOutput; + * but I don't think that's relevant here. + */ + desc.componentType = kAudioUnitType_Output; + desc.componentSubType = kAudioUnitSubType_HALOutput; + desc.componentManufacturer = kAudioUnitManufacturer_Apple; + desc.componentFlags = 0; + desc.componentFlagsMask = 0; + /* -- find the component -- */ + comp = FindNextComponent( NULL, &desc ); + if( !comp ) + { + DBUG( ( "AUHAL component not found." ) ); + *audioUnit = NULL; + *audioDevice = kAudioDeviceUnknown; + return paUnanticipatedHostError; + } + /* -- open it -- */ + result = OpenAComponent( comp, audioUnit ); + if( result ) + { + DBUG( ( "Failed to open AUHAL component." ) ); + *audioUnit = NULL; + *audioDevice = kAudioDeviceUnknown; + return ERR( result ); + } + /* -- prepare a little error handling logic / hackery -- */ +#define ERR_WRAP(mac_err) do { result = mac_err ; line = __LINE__ ; if ( result != noErr ) goto error ; } while(0) + + /* -- if there is input, we have to explicitly enable input -- */ + if( inStreamParams ) + { + UInt32 enableIO = 1; + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioOutputUnitProperty_EnableIO, + kAudioUnitScope_Input, + INPUT_ELEMENT, + &enableIO, + sizeof(enableIO) ) ); + } + /* -- if there is no output, we must explicitly disable output -- */ + if( !outStreamParams ) + { + UInt32 enableIO = 0; + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioOutputUnitProperty_EnableIO, + kAudioUnitScope_Output, + OUTPUT_ELEMENT, + &enableIO, + sizeof(enableIO) ) ); + } + + /* -- set the devices -- */ + /* make sure input and output are the same device if we are doing input and + output. */ + if( inStreamParams && outStreamParams ) + { + assert( outStreamParams->device == inStreamParams->device ); + } + if( inStreamParams ) + { + *audioDevice = auhalHostApi->devIds[inStreamParams->device] ; + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioOutputUnitProperty_CurrentDevice, + kAudioUnitScope_Global, + INPUT_ELEMENT, + audioDevice, + sizeof(AudioDeviceID) ) ); + } + if( outStreamParams && outStreamParams != inStreamParams ) + { + *audioDevice = auhalHostApi->devIds[outStreamParams->device] ; + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioOutputUnitProperty_CurrentDevice, + kAudioUnitScope_Global, + OUTPUT_ELEMENT, + audioDevice, + sizeof(AudioDeviceID) ) ); + } + /* -- add listener for dropouts -- */ + result = AudioDeviceAddPropertyListener( *audioDevice, + 0, + outStreamParams ? false : true, + kAudioDeviceProcessorOverload, + xrunCallback, + addToXRunListenerList( (void *)stream ) ) ; + if( result == kAudioHardwareIllegalOperationError ) { + // -- already registered, we're good + } else { + // -- not already registered, just check for errors + ERR_WRAP( result ); + } + /* -- listen for stream start and stop -- */ + ERR_WRAP( AudioUnitAddPropertyListener( *audioUnit, + kAudioOutputUnitProperty_IsRunning, + startStopCallback, + (void *)stream ) ); + + /* -- set format -- */ + bzero( &desiredFormat, sizeof(desiredFormat) ); + desiredFormat.mFormatID = kAudioFormatLinearPCM ; + desiredFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked; + desiredFormat.mFramesPerPacket = 1; + desiredFormat.mBitsPerChannel = sizeof( float ) * 8; + + result = 0; + /* set device format first, but only touch the device if the user asked */ + if( inStreamParams ) { + /*The callback never calls back if we don't set the FPB */ + /*This seems wierd, because I would think setting anything on the device + would be disruptive.*/ + paResult = setBestFramesPerBuffer( *audioDevice, FALSE, + requestedFramesPerBuffer, + actualInputFramesPerBuffer ); + if( paResult ) goto error; + if( macInputStreamFlags & paMacCoreChangeDeviceParameters ) { + bool requireExact; + requireExact=macInputStreamFlags & paMacCoreFailIfConversionRequired; + paResult = setBestSampleRateForDevice( *audioDevice, FALSE, + requireExact, sampleRate ); + if( paResult ) goto error; + } + if( actualInputFramesPerBuffer && actualOutputFramesPerBuffer ) + *actualOutputFramesPerBuffer = *actualInputFramesPerBuffer ; + } + if( outStreamParams && !inStreamParams ) { + /*The callback never calls back if we don't set the FPB */ + /*This seems wierd, because I would think setting anything on the device + would be disruptive.*/ + paResult = setBestFramesPerBuffer( *audioDevice, TRUE, + requestedFramesPerBuffer, + actualOutputFramesPerBuffer ); + if( paResult ) goto error; + if( macOutputStreamFlags & paMacCoreChangeDeviceParameters ) { + bool requireExact; + requireExact=macOutputStreamFlags & paMacCoreFailIfConversionRequired; + paResult = setBestSampleRateForDevice( *audioDevice, TRUE, + requireExact, sampleRate ); + if( paResult ) goto error; + } + } + + /* -- set the quality of the output converter -- */ + if( outStreamParams ) { + UInt32 value = kAudioConverterQuality_Max; + switch( macOutputStreamFlags & 0x0700 ) { + case 0x0100: /*paMacCore_ConversionQualityMin:*/ + value=kRenderQuality_Min; + break; + case 0x0200: /*paMacCore_ConversionQualityLow:*/ + value=kRenderQuality_Low; + break; + case 0x0300: /*paMacCore_ConversionQualityMedium:*/ + value=kRenderQuality_Medium; + break; + case 0x0400: /*paMacCore_ConversionQualityHigh:*/ + value=kRenderQuality_High; + break; + } + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioUnitProperty_RenderQuality, + kAudioUnitScope_Global, + OUTPUT_ELEMENT, + &value, + sizeof(value) ) ); + } + /* now set the format on the Audio Units. */ + if( outStreamParams ) + { + desiredFormat.mSampleRate =sampleRate; + desiredFormat.mBytesPerPacket=sizeof(float)*outStreamParams->channelCount; + desiredFormat.mBytesPerFrame =sizeof(float)*outStreamParams->channelCount; + desiredFormat.mChannelsPerFrame = outStreamParams->channelCount; + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Input, + OUTPUT_ELEMENT, + &desiredFormat, + sizeof(AudioStreamBasicDescription) ) ); + } + if( inStreamParams ) + { + AudioStreamBasicDescription sourceFormat; + UInt32 size = sizeof( AudioStreamBasicDescription ); + + /* keep the sample rate of the device, or we confuse AUHAL */ + ERR_WRAP( AudioUnitGetProperty( *audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Input, + INPUT_ELEMENT, + &sourceFormat, + &size ) ); + desiredFormat.mSampleRate = sourceFormat.mSampleRate; + desiredFormat.mBytesPerPacket=sizeof(float)*inStreamParams->channelCount; + desiredFormat.mBytesPerFrame =sizeof(float)*inStreamParams->channelCount; + desiredFormat.mChannelsPerFrame = inStreamParams->channelCount; + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Output, + INPUT_ELEMENT, + &desiredFormat, + sizeof(AudioStreamBasicDescription) ) ); + } + /* set the maximumFramesPerSlice */ + /* not doing this causes real problems + (eg. the callback might not be called). The idea of setting both this + and the frames per buffer on the device is that we'll be most likely + to actually get the frame size we requested in the callback with the + minimum latency. */ + if( outStreamParams ) { + UInt32 size = sizeof( *actualOutputFramesPerBuffer ); + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Input, + OUTPUT_ELEMENT, + actualOutputFramesPerBuffer, + sizeof(*actualOutputFramesPerBuffer) ) ); + ERR_WRAP( AudioUnitGetProperty( *audioUnit, + kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Global, + OUTPUT_ELEMENT, + actualOutputFramesPerBuffer, + &size ) ); + } + if( inStreamParams ) { + /*UInt32 size = sizeof( *actualInputFramesPerBuffer );*/ + ERR_WRAP( AudioUnitSetProperty( *audioUnit, + kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Output, + INPUT_ELEMENT, + actualInputFramesPerBuffer, + sizeof(*actualInputFramesPerBuffer) ) ); +/* Don't know why this causes problems + ERR_WRAP( AudioUnitGetProperty( *audioUnit, + kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Global, //Output, + INPUT_ELEMENT, + actualInputFramesPerBuffer, + &size ) ); +*/ + } + + /* -- if we have input, we may need to setup an SR converter -- */ + /* even if we got the sample rate we asked for, we need to do + the conversion in case another program changes the underlying SR. */ + /* FIXME: I think we need to monitor stream and change the converter if the incoming format changes. */ + if( inStreamParams ) { + AudioStreamBasicDescription desiredFormat; + AudioStreamBasicDescription sourceFormat; + UInt32 sourceSize = sizeof( sourceFormat ); + bzero( &desiredFormat, sizeof(desiredFormat) ); + desiredFormat.mSampleRate = sampleRate; + desiredFormat.mFormatID = kAudioFormatLinearPCM ; + desiredFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked; + desiredFormat.mFramesPerPacket = 1; + desiredFormat.mBitsPerChannel = sizeof( float ) * 8; + desiredFormat.mBytesPerPacket=sizeof(float)*inStreamParams->channelCount; + desiredFormat.mBytesPerFrame =sizeof(float)*inStreamParams->channelCount; + desiredFormat.mChannelsPerFrame = inStreamParams->channelCount; + + /* get the source format */ + ERR_WRAP( AudioUnitGetProperty( + *audioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Output, + INPUT_ELEMENT, + &sourceFormat, + &sourceSize ) ); + + if( desiredFormat.mSampleRate != sourceFormat.mSampleRate ) + { + UInt32 value = kAudioConverterQuality_Max; + switch( macInputStreamFlags & 0x0700 ) { + case 0x0100: /*paMacCore_ConversionQualityMin:*/ + value=kAudioConverterQuality_Min; + break; + case 0x0200: /*paMacCore_ConversionQualityLow:*/ + value=kAudioConverterQuality_Low; + break; + case 0x0300: /*paMacCore_ConversionQualityMedium:*/ + value=kAudioConverterQuality_Medium; + break; + case 0x0400: /*paMacCore_ConversionQualityHigh:*/ + value=kAudioConverterQuality_High; + break; + } + VDBUG(( "Creating sample rate converter for input" + " to convert from %g to %g\n", + (float)sourceFormat.mSampleRate, + (float)desiredFormat.mSampleRate ) ); + /* create our converter */ + ERR_WRAP( AudioConverterNew( + &sourceFormat, + &desiredFormat, + srConverter ) ); + /* Set quality */ + ERR_WRAP( AudioConverterSetProperty( + *srConverter, + kAudioConverterSampleRateConverterQuality, + sizeof( value ), + &value ) ); + } + } + /* -- set IOProc (callback) -- */ + callbackKey = outStreamParams ? kAudioUnitProperty_SetRenderCallback + : kAudioOutputUnitProperty_SetInputCallback ; + rcbs.inputProc = AudioIOProc; + rcbs.inputProcRefCon = refCon; + ERR_WRAP( AudioUnitSetProperty( + *audioUnit, + callbackKey, + kAudioUnitScope_Output, + outStreamParams ? OUTPUT_ELEMENT : INPUT_ELEMENT, + &rcbs, + sizeof(rcbs)) ); + + if( inStreamParams && outStreamParams && *srConverter ) + ERR_WRAP( AudioUnitSetProperty( + *audioUnit, + kAudioOutputUnitProperty_SetInputCallback, + kAudioUnitScope_Output, + INPUT_ELEMENT, + &rcbs, + sizeof(rcbs)) ); + + /* channel mapping. */ + if(inChannelMap) + { + UInt32 mapSize = inChannelMapSize *sizeof(SInt32); + + //for each channel of desired input, map the channel from + //the device's output channel. + ERR_WRAP( AudioUnitSetProperty(*audioUnit, + kAudioOutputUnitProperty_ChannelMap, + kAudioUnitScope_Output, + INPUT_ELEMENT, + inChannelMap, + mapSize)); + } + if(outChannelMap) + { + UInt32 mapSize = outChannelMapSize *sizeof(SInt32); + + //for each channel of desired output, map the channel from + //the device's output channel. + ERR_WRAP(AudioUnitSetProperty(*audioUnit, + kAudioOutputUnitProperty_ChannelMap, + kAudioUnitScope_Output, + OUTPUT_ELEMENT, + outChannelMap, + mapSize)); + } + /* initialize the audio unit */ + ERR_WRAP( AudioUnitInitialize(*audioUnit) ); + + if( inStreamParams && outStreamParams ) + { + VDBUG( ("Opened device %ld for input and output.\n", *audioDevice ) ); + } + else if( inStreamParams ) + { + VDBUG( ("Opened device %ld for input.\n", *audioDevice ) ); + } + else if( outStreamParams ) + { + VDBUG( ("Opened device %ld for output.\n", *audioDevice ) ); + } + return paNoError; +#undef ERR_WRAP + + error: + CloseComponent( *audioUnit ); + *audioUnit = NULL; + if( result ) + return PaMacCore_SetError( result, line, 1 ); + return paResult; +} + +/* =================================================================================================== */ + +static UInt32 CalculateOptimalBufferSize( PaMacAUHAL *auhalHostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + UInt32 fixedInputLatency, + UInt32 fixedOutputLatency, + double sampleRate, + UInt32 requestedFramesPerBuffer ) +{ + UInt32 resultBufferSizeFrames = 0; + // Use maximum of suggested input and output latencies. + if( inputParameters ) + { + UInt32 suggestedLatencyFrames = inputParameters->suggestedLatency * sampleRate; + // Calculate a buffer size assuming we are double buffered. + SInt32 variableLatencyFrames = suggestedLatencyFrames - fixedInputLatency; + // Prevent negative latency. + variableLatencyFrames = MAX( variableLatencyFrames, 0 ); + resultBufferSizeFrames = MAX( resultBufferSizeFrames, (UInt32) variableLatencyFrames ); + } + if( outputParameters ) + { + UInt32 suggestedLatencyFrames = outputParameters->suggestedLatency * sampleRate; + SInt32 variableLatencyFrames = suggestedLatencyFrames - fixedOutputLatency; + variableLatencyFrames = MAX( variableLatencyFrames, 0 ); + resultBufferSizeFrames = MAX( resultBufferSizeFrames, (UInt32) variableLatencyFrames ); + } + + if( requestedFramesPerBuffer != paFramesPerBufferUnspecified ) + { + // make host buffer the next highest integer multiple of user frames per buffer + UInt32 n = (resultBufferSizeFrames + requestedFramesPerBuffer - 1) / requestedFramesPerBuffer; + resultBufferSizeFrames = n * requestedFramesPerBuffer; + + }else{ + VDBUG( ("Block Size unspecified. Based on Latency, the user wants a Block Size near: %ld.\n", + resultBufferSizeFrames ) ); + } + + // Clip to the capabilities of the device. + if( inputParameters ) + { + ClipToDeviceBufferSize( auhalHostApi->devIds[inputParameters->device], + true, // In the old code isInput was false! + resultBufferSizeFrames, &resultBufferSizeFrames ); + } + if( outputParameters ) + { + ClipToDeviceBufferSize( auhalHostApi->devIds[outputParameters->device], + false, resultBufferSizeFrames, &resultBufferSizeFrames ); + } + VDBUG(("After querying hardware, setting block size to %ld.\n", resultBufferSizeFrames)); + + return resultBufferSizeFrames; +} + +/* =================================================================================================== */ +/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */ +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long requestedFramesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + PaMacAUHAL *auhalHostApi = (PaMacAUHAL*)hostApi; + PaMacCoreStream *stream = 0; + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat; + UInt32 fixedInputLatency = 0; + UInt32 fixedOutputLatency = 0; + // Accumulate contributions to latency in these variables. + UInt32 inputLatencyFrames = 0; + UInt32 outputLatencyFrames = 0; + UInt32 suggestedLatencyFramesPerBuffer = requestedFramesPerBuffer; + + VVDBUG(("OpenStream(): in chan=%d, in fmt=%ld, out chan=%d, out fmt=%ld SR=%g, FPB=%ld\n", + inputParameters ? inputParameters->channelCount : -1, + inputParameters ? inputParameters->sampleFormat : -1, + outputParameters ? outputParameters->channelCount : -1, + outputParameters ? outputParameters->sampleFormat : -1, + (float) sampleRate, + requestedFramesPerBuffer )); + VDBUG( ("Opening Stream.\n") ); + + /* These first few bits of code are from paSkeleton with few modifications. */ + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* @todo Blocking read/write on Mac is not yet supported. */ + if( !streamCallback && inputSampleFormat & paNonInterleaved ) + { + return paSampleFormatNotSupported; + } + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* Host supports interleaved float32 */ + hostInputSampleFormat = paFloat32; + } + else + { + inputChannelCount = 0; + inputSampleFormat = hostInputSampleFormat = paFloat32; /* Surpress 'uninitialised var' warnings. */ + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* @todo Blocking read/write on Mac is not yet supported. */ + if( !streamCallback && outputSampleFormat & paNonInterleaved ) + { + return paSampleFormatNotSupported; + } + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support inputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* Host supports interleaved float32 */ + hostOutputSampleFormat = paFloat32; + } + else + { + outputChannelCount = 0; + outputSampleFormat = hostOutputSampleFormat = paFloat32; /* Surpress 'uninitialized var' warnings. */ + } + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform specific flag */ + + stream = (PaMacCoreStream*)PaUtil_AllocateMemory( sizeof(PaMacCoreStream) ); + if( !stream ) + { + result = paInsufficientMemory; + goto error; + } + + /* If we fail after this point, we my be left in a bad state, with + some data structures setup and others not. So, first thing we + do is initialize everything so that if we fail, we know what hasn't + been touched. + */ + + stream->inputAudioBufferList.mBuffers[0].mData = NULL; + stream->inputRingBuffer.buffer = NULL; + bzero( &stream->blio, sizeof( PaMacBlio ) ); +/* + stream->blio.inputRingBuffer.buffer = NULL; + stream->blio.outputRingBuffer.buffer = NULL; + stream->blio.inputSampleFormat = inputParameters?inputParameters->sampleFormat:0; + stream->blio.inputSampleSize = computeSampleSizeFromFormat(stream->blio.inputSampleFormat); + stream->blio.outputSampleFormat=outputParameters?outputParameters->sampleFormat:0; + stream->blio.outputSampleSize = computeSampleSizeFromFormat(stream->blio.outputSampleFormat); +*/ + stream->inputSRConverter = NULL; + stream->inputUnit = NULL; + stream->outputUnit = NULL; + stream->inputFramesPerBuffer = 0; + stream->outputFramesPerBuffer = 0; + stream->bufferProcessorIsInitialized = FALSE; + stream->timingInformationMutexIsInitialized = 0; + + /* assert( streamCallback ) ; */ /* only callback mode is implemented */ + if( streamCallback ) + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &auhalHostApi->callbackStreamInterface, + streamCallback, userData ); + } + else + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &auhalHostApi->blockingStreamInterface, + BlioCallback, &stream->blio ); + } + + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + + if( inputParameters ) + { + CalculateFixedDeviceLatency( auhalHostApi->devIds[inputParameters->device], true, &fixedInputLatency ); + inputLatencyFrames += fixedInputLatency; + } + if( outputParameters ) + { + CalculateFixedDeviceLatency( auhalHostApi->devIds[outputParameters->device], false, &fixedOutputLatency ); + outputLatencyFrames += fixedOutputLatency; + + } + + suggestedLatencyFramesPerBuffer = CalculateOptimalBufferSize( auhalHostApi, inputParameters, outputParameters, + fixedInputLatency, fixedOutputLatency, + sampleRate, requestedFramesPerBuffer ); + if( requestedFramesPerBuffer == paFramesPerBufferUnspecified ) + { + requestedFramesPerBuffer = suggestedLatencyFramesPerBuffer; + } + + /* -- Now we actually open and setup streams. -- */ + if( inputParameters && outputParameters && outputParameters->device == inputParameters->device ) + { /* full duplex. One device. */ + UInt32 inputFramesPerBuffer = (UInt32) stream->inputFramesPerBuffer; + UInt32 outputFramesPerBuffer = (UInt32) stream->outputFramesPerBuffer; + result = OpenAndSetupOneAudioUnit( stream, + inputParameters, + outputParameters, + suggestedLatencyFramesPerBuffer, + &inputFramesPerBuffer, + &outputFramesPerBuffer, + auhalHostApi, + &(stream->inputUnit), + &(stream->inputSRConverter), + &(stream->inputDevice), + sampleRate, + stream ); + stream->inputFramesPerBuffer = inputFramesPerBuffer; + stream->outputFramesPerBuffer = outputFramesPerBuffer; + stream->outputUnit = stream->inputUnit; + stream->outputDevice = stream->inputDevice; + if( result != paNoError ) + goto error; + } + else + { /* full duplex, different devices OR simplex */ + UInt32 outputFramesPerBuffer = (UInt32) stream->outputFramesPerBuffer; + UInt32 inputFramesPerBuffer = (UInt32) stream->inputFramesPerBuffer; + result = OpenAndSetupOneAudioUnit( stream, + NULL, + outputParameters, + suggestedLatencyFramesPerBuffer, + NULL, + &outputFramesPerBuffer, + auhalHostApi, + &(stream->outputUnit), + NULL, + &(stream->outputDevice), + sampleRate, + stream ); + if( result != paNoError ) + goto error; + result = OpenAndSetupOneAudioUnit( stream, + inputParameters, + NULL, + suggestedLatencyFramesPerBuffer, + &inputFramesPerBuffer, + NULL, + auhalHostApi, + &(stream->inputUnit), + &(stream->inputSRConverter), + &(stream->inputDevice), + sampleRate, + stream ); + if( result != paNoError ) + goto error; + stream->inputFramesPerBuffer = inputFramesPerBuffer; + stream->outputFramesPerBuffer = outputFramesPerBuffer; + } + + inputLatencyFrames += stream->inputFramesPerBuffer; + outputLatencyFrames += stream->outputFramesPerBuffer; + + if( stream->inputUnit ) { + const size_t szfl = sizeof(float); + /* setup the AudioBufferList used for input */ + bzero( &stream->inputAudioBufferList, sizeof( AudioBufferList ) ); + stream->inputAudioBufferList.mNumberBuffers = 1; + stream->inputAudioBufferList.mBuffers[0].mNumberChannels + = inputChannelCount; + stream->inputAudioBufferList.mBuffers[0].mDataByteSize + = stream->inputFramesPerBuffer*inputChannelCount*szfl; + stream->inputAudioBufferList.mBuffers[0].mData + = (float *) calloc( + stream->inputFramesPerBuffer*inputChannelCount, + szfl ); + if( !stream->inputAudioBufferList.mBuffers[0].mData ) + { + result = paInsufficientMemory; + goto error; + } + + /* + * If input and output devs are different or we are doing SR conversion, + * we also need a + * ring buffer to store inpt data while waiting for output + * data. + */ + if( (stream->outputUnit && (stream->inputUnit != stream->outputUnit)) + || stream->inputSRConverter ) + { + /* May want the ringSize ot initial position in + ring buffer to depend somewhat on sample rate change */ + + void *data; + long ringSize; + + ringSize = computeRingBufferSize( inputParameters, + outputParameters, + stream->inputFramesPerBuffer, + stream->outputFramesPerBuffer, + sampleRate ); + /*ringSize <<= 4; *//*16x bigger, for testing */ + + + /*now, we need to allocate memory for the ring buffer*/ + data = calloc( ringSize, szfl*inputParameters->channelCount ); + if( !data ) + { + result = paInsufficientMemory; + goto error; + } + + /* now we can initialize the ring buffer */ + PaUtil_InitializeRingBuffer( &stream->inputRingBuffer, szfl*inputParameters->channelCount, ringSize, data ) ; + /* advance the read point a little, so we are reading from the + middle of the buffer */ + if( stream->outputUnit ) + PaUtil_AdvanceRingBufferWriteIndex( &stream->inputRingBuffer, ringSize / RING_BUFFER_ADVANCE_DENOMINATOR ); + + // Just adds to input latency between input device and PA full duplex callback. + inputLatencyFrames += ringSize; + } + } + + /* -- initialize Blio Buffer Processors -- */ + if( !streamCallback ) + { + long ringSize; + + ringSize = computeRingBufferSize( inputParameters, + outputParameters, + stream->inputFramesPerBuffer, + stream->outputFramesPerBuffer, + sampleRate ); + result = initializeBlioRingBuffers( &stream->blio, + inputParameters?inputParameters->sampleFormat:0 , + outputParameters?outputParameters->sampleFormat:0 , + MAX(stream->inputFramesPerBuffer,stream->outputFramesPerBuffer), + ringSize, + inputParameters?inputChannelCount:0 , + outputParameters?outputChannelCount:0 ) ; + if( result != paNoError ) + goto error; + + inputLatencyFrames += ringSize; + outputLatencyFrames += ringSize; + + } + + /* -- initialize Buffer Processor -- */ + { + unsigned long maxHostFrames = stream->inputFramesPerBuffer; + if( stream->outputFramesPerBuffer > maxHostFrames ) + maxHostFrames = stream->outputFramesPerBuffer; + result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + inputChannelCount, inputSampleFormat, + hostInputSampleFormat, + outputChannelCount, outputSampleFormat, + hostOutputSampleFormat, + sampleRate, + streamFlags, + requestedFramesPerBuffer, + /* If sample rate conversion takes place, the buffer size + will not be known. */ + maxHostFrames, + stream->inputSRConverter + ? paUtilUnknownHostBufferSize + : paUtilBoundedHostBufferSize, + streamCallback ? streamCallback : BlioCallback, + streamCallback ? userData : &stream->blio ); + if( result != paNoError ) + goto error; + } + stream->bufferProcessorIsInitialized = TRUE; + + // Calculate actual latency from the sum of individual latencies. + if( inputParameters ) + { + inputLatencyFrames += PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor); + stream->streamRepresentation.streamInfo.inputLatency = inputLatencyFrames / sampleRate; + } + else + { + stream->streamRepresentation.streamInfo.inputLatency = 0.0; + } + + if( outputParameters ) + { + outputLatencyFrames += PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor); + stream->streamRepresentation.streamInfo.outputLatency = outputLatencyFrames / sampleRate; + } + else + { + stream->streamRepresentation.streamInfo.outputLatency = 0.0; + } + + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + stream->sampleRate = sampleRate; + stream->outDeviceSampleRate = 0; + if( stream->outputUnit ) { + Float64 rate; + UInt32 size = sizeof( rate ); + result = ERR( AudioDeviceGetProperty( stream->outputDevice, + 0, + FALSE, + kAudioDevicePropertyNominalSampleRate, + &size, &rate ) ); + if( result ) + goto error; + stream->outDeviceSampleRate = rate; + } + stream->inDeviceSampleRate = 0; + if( stream->inputUnit ) { + Float64 rate; + UInt32 size = sizeof( rate ); + result = ERR( AudioDeviceGetProperty( stream->inputDevice, + 0, + TRUE, + kAudioDevicePropertyNominalSampleRate, + &size, &rate ) ); + if( result ) + goto error; + stream->inDeviceSampleRate = rate; + } + stream->userInChan = inputChannelCount; + stream->userOutChan = outputChannelCount; + + // Setup property listeners for timestamp and latency calculations. + pthread_mutex_init( &stream->timingInformationMutex, NULL ); + stream->timingInformationMutexIsInitialized = 1; + InitializeDeviceProperties( &stream->inputProperties ); + InitializeDeviceProperties( &stream->outputProperties ); + if( stream->outputUnit ) + { + Boolean isInput = FALSE; + SetupDevicePropertyListeners( stream, stream->outputDevice, isInput ); + } + if( stream->inputUnit ) + { + Boolean isInput = TRUE; + SetupDevicePropertyListeners( stream, stream->inputDevice, isInput ); + } + UpdateTimeStampOffsets( stream ); + // Setup copies to be used by audio callback. + stream->timestampOffsetCombined_ioProcCopy = stream->timestampOffsetCombined; + stream->timestampOffsetInputDevice_ioProcCopy = stream->timestampOffsetInputDevice; + stream->timestampOffsetOutputDevice_ioProcCopy = stream->timestampOffsetOutputDevice; + + stream->state = STOPPED; + stream->xrunFlags = 0; + + *s = (PaStream*)stream; + + return result; + +error: + CloseStream( stream ); + return result; +} + + +#define HOST_TIME_TO_PA_TIME( x ) ( AudioConvertHostTimeToNanos( (x) ) * 1.0E-09) /* convert to nanoseconds and then to seconds */ + +PaTime GetStreamTime( PaStream *s ) +{ + return HOST_TIME_TO_PA_TIME( AudioGetCurrentHostTime() ); +} + +#define RING_BUFFER_EMPTY (1000) + +static OSStatus ringBufferIOProc( AudioConverterRef inAudioConverter, + UInt32*ioDataSize, + void** outData, + void*inUserData ) +{ + void *dummyData; + ring_buffer_size_t dummySize; + PaUtilRingBuffer *rb = (PaUtilRingBuffer *) inUserData; + + VVDBUG(("ringBufferIOProc()\n")); + + if( PaUtil_GetRingBufferReadAvailable( rb ) == 0 ) { + *outData = NULL; + *ioDataSize = 0; + return RING_BUFFER_EMPTY; + } + assert(sizeof(UInt32) == sizeof(ring_buffer_size_t)); + assert( ( (*ioDataSize) / rb->elementSizeBytes ) * rb->elementSizeBytes == (*ioDataSize) ) ; + (*ioDataSize) /= rb->elementSizeBytes ; + PaUtil_GetRingBufferReadRegions( rb, *ioDataSize, + outData, (ring_buffer_size_t *)ioDataSize, + &dummyData, &dummySize ); + assert( *ioDataSize ); + PaUtil_AdvanceRingBufferReadIndex( rb, *ioDataSize ); + (*ioDataSize) *= rb->elementSizeBytes ; + + return noErr; +} + +/* + * Called by the AudioUnit API to process audio from the sound card. + * This is where the magic happens. + */ +/* FEEDBACK: there is a lot of redundant code here because of how all the cases differ. This makes it hard to maintain, so if there are suggestinos for cleaning it up, I'm all ears. */ +static OSStatus AudioIOProc( void *inRefCon, + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, + UInt32 inNumberFrames, + AudioBufferList *ioData ) +{ + unsigned long framesProcessed = 0; + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; + PaMacCoreStream *stream = (PaMacCoreStream*)inRefCon; + const bool isRender = inBusNumber == OUTPUT_ELEMENT; + int callbackResult = paContinue ; + double hostTimeStampInPaTime = HOST_TIME_TO_PA_TIME(inTimeStamp->mHostTime); + + VVDBUG(("AudioIOProc()\n")); + + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + /* -----------------------------------------------------------------*\ + This output may be useful for debugging, + But printing durring the callback is a bad enough idea that + this is not enabled by enableing the usual debugging calls. + \* -----------------------------------------------------------------*/ + /* + static int renderCount = 0; + static int inputCount = 0; + printf( "------------------- starting reder/input\n" ); + if( isRender ) + printf("Render callback (%d):\t", ++renderCount); + else + printf("Input callback (%d):\t", ++inputCount); + printf( "Call totals: %d (input), %d (render)\n", inputCount, renderCount ); + + printf( "--- inBusNumber: %lu\n", inBusNumber ); + printf( "--- inNumberFrames: %lu\n", inNumberFrames ); + printf( "--- %x ioData\n", (unsigned) ioData ); + if( ioData ) + { + int i=0; + printf( "--- ioData.mNumBuffers %lu: \n", ioData->mNumberBuffers ); + for( i=0; imNumberBuffers; ++i ) + printf( "--- ioData buffer %d size: %lu.\n", i, ioData->mBuffers[i].mDataByteSize ); + } + ----------------------------------------------------------------- */ + + /* compute PaStreamCallbackTimeInfo */ + + if( pthread_mutex_trylock( &stream->timingInformationMutex ) == 0 ){ + /* snapshot the ioproc copy of timing information */ + stream->timestampOffsetCombined_ioProcCopy = stream->timestampOffsetCombined; + stream->timestampOffsetInputDevice_ioProcCopy = stream->timestampOffsetInputDevice; + stream->timestampOffsetOutputDevice_ioProcCopy = stream->timestampOffsetOutputDevice; + pthread_mutex_unlock( &stream->timingInformationMutex ); + } + + /* For timeInfo.currentTime we could calculate current time backwards from the HAL audio + output time to give a more accurate impression of the current timeslice but it doesn't + seem worth it at the moment since other PA host APIs don't do any better. + */ + timeInfo.currentTime = HOST_TIME_TO_PA_TIME( AudioGetCurrentHostTime() ); + + /* + For an input HAL AU, inTimeStamp is the time the samples are received from the hardware, + for an output HAL AU inTimeStamp is the time the samples are sent to the hardware. + PA expresses timestamps in terms of when the samples enter the ADC or leave the DAC + so we add or subtract kAudioDevicePropertyLatency below. + */ + + /* FIXME: not sure what to do below if the host timestamps aren't valid (kAudioTimeStampHostTimeValid isn't set) + Could ask on CA mailing list if it is possible for it not to be set. If so, could probably grab a now timestamp + at the top and compute from there (modulo scheduling jitter) or ask on mailing list for other options. */ + + if( isRender ) + { + if( stream->inputUnit ) /* full duplex */ + { + if( stream->inputUnit == stream->outputUnit ) /* full duplex AUHAL IOProc */ + { + // Ross and Phil agreed that the following calculation is correct based on an email from Jeff Moore: + // http://osdir.com/ml/coreaudio-api/2009-07/msg00140.html + // Basically the difference between the Apple output timestamp and the PA timestamp is kAudioDevicePropertyLatency. + timeInfo.inputBufferAdcTime = hostTimeStampInPaTime - + (stream->timestampOffsetCombined_ioProcCopy + stream->timestampOffsetInputDevice_ioProcCopy); + timeInfo.outputBufferDacTime = hostTimeStampInPaTime + stream->timestampOffsetOutputDevice_ioProcCopy; + } + else /* full duplex with ring-buffer from a separate input AUHAL ioproc */ + { + /* FIXME: take the ring buffer latency into account */ + timeInfo.inputBufferAdcTime = hostTimeStampInPaTime - + (stream->timestampOffsetCombined_ioProcCopy + stream->timestampOffsetInputDevice_ioProcCopy); + timeInfo.outputBufferDacTime = hostTimeStampInPaTime + stream->timestampOffsetOutputDevice_ioProcCopy; + } + } + else /* output only */ + { + timeInfo.inputBufferAdcTime = 0; + timeInfo.outputBufferDacTime = hostTimeStampInPaTime + stream->timestampOffsetOutputDevice_ioProcCopy; + } + } + else /* input only */ + { + timeInfo.inputBufferAdcTime = hostTimeStampInPaTime - stream->timestampOffsetInputDevice_ioProcCopy; + timeInfo.outputBufferDacTime = 0; + } + + //printf( "---%g, %g, %g\n", timeInfo.inputBufferAdcTime, timeInfo.currentTime, timeInfo.outputBufferDacTime ); + + if( isRender && stream->inputUnit == stream->outputUnit + && !stream->inputSRConverter ) + { + /* --------- Full Duplex, One Device, no SR Conversion ------- + * + * This is the lowest latency case, and also the simplest. + * Input data and output data are available at the same time. + * we do not use the input SR converter or the input ring buffer. + * + */ + OSStatus err = 0; + unsigned long frames; + + /* -- start processing -- */ + PaUtil_BeginBufferProcessing( &(stream->bufferProcessor), + &timeInfo, + stream->xrunFlags ); + stream->xrunFlags = 0; //FIXME: this flag also gets set outside by a callback, which calls the xrunCallback function. It should be in the same thread as the main audio callback, but the apple docs just use the word "usually" so it may be possible to loose an xrun notification, if that callback happens here. + + /* -- compute frames. do some checks -- */ + assert( ioData->mNumberBuffers == 1 ); + assert( ioData->mBuffers[0].mNumberChannels == stream->userOutChan ); + frames = ioData->mBuffers[0].mDataByteSize; + frames /= sizeof( float ) * ioData->mBuffers[0].mNumberChannels; + /* -- copy and process input data -- */ + err= AudioUnitRender(stream->inputUnit, + ioActionFlags, + inTimeStamp, + INPUT_ELEMENT, + inNumberFrames, + &stream->inputAudioBufferList ); + /* FEEDBACK: I'm not sure what to do when this call fails. There's nothing in the PA API to + * do about failures in the callback system. */ + assert( !err ); + + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), frames ); + PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), + 0, + stream->inputAudioBufferList.mBuffers[0].mData, + stream->inputAudioBufferList.mBuffers[0].mNumberChannels); + /* -- Copy and process output data -- */ + PaUtil_SetOutputFrameCount( &(stream->bufferProcessor), frames ); + PaUtil_SetInterleavedOutputChannels( &(stream->bufferProcessor), + 0, + ioData->mBuffers[0].mData, + ioData->mBuffers[0].mNumberChannels); + /* -- complete processing -- */ + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + } + else if( isRender ) + { + /* -------- Output Side of Full Duplex (Separate Devices or SR Conversion) + * -- OR Simplex Output + * + * This case handles output data as in the full duplex case, + * and, if there is input data, reads it off the ring buffer + * and into the PA buffer processor. If sample rate conversion + * is required on input, that is done here as well. + */ + unsigned long frames; + + /* Sometimes, when stopping a duplex stream we get erroneous + xrun flags, so if this is our last run, clear the flags. */ + int xrunFlags = stream->xrunFlags; +/* + if( xrunFlags & paInputUnderflow ) + printf( "input underflow.\n" ); + if( xrunFlags & paInputOverflow ) + printf( "input overflow.\n" ); +*/ + if( stream->state == STOPPING || stream->state == CALLBACK_STOPPED ) + xrunFlags = 0; + + /* -- start processing -- */ + PaUtil_BeginBufferProcessing( &(stream->bufferProcessor), + &timeInfo, + xrunFlags ); + stream->xrunFlags = 0; /* FEEDBACK: we only send flags to Buf Proc once */ + + /* -- Copy and process output data -- */ + assert( ioData->mNumberBuffers == 1 ); + frames = ioData->mBuffers[0].mDataByteSize; + frames /= sizeof( float ) * ioData->mBuffers[0].mNumberChannels; + assert( ioData->mBuffers[0].mNumberChannels == stream->userOutChan ); + PaUtil_SetOutputFrameCount( &(stream->bufferProcessor), frames ); + PaUtil_SetInterleavedOutputChannels( &(stream->bufferProcessor), + 0, + ioData->mBuffers[0].mData, + ioData->mBuffers[0].mNumberChannels); + + /* -- copy and process input data, and complete processing -- */ + if( stream->inputUnit ) { + const int flsz = sizeof( float ); + /* Here, we read the data out of the ring buffer, through the + audio converter. */ + int inChan = stream->inputAudioBufferList.mBuffers[0].mNumberChannels; + if( stream->inputSRConverter ) + { + OSStatus err; + UInt32 size; + float data[ inChan * frames ]; + size = sizeof( data ); + err = AudioConverterFillBuffer( + stream->inputSRConverter, + ringBufferIOProc, + &stream->inputRingBuffer, + &size, + (void *)&data ); + if( err == RING_BUFFER_EMPTY ) + { /*the ring buffer callback underflowed */ + err = 0; + bzero( ((char *)data) + size, sizeof(data)-size ); + stream->xrunFlags |= paInputUnderflow; + } + ERR( err ); + assert( !err ); + + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), frames ); + PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), + 0, + data, + inChan ); + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + } + else + { + /* Without the AudioConverter is actually a bit more complex + because we have to do a little buffer processing that the + AudioConverter would otherwise handle for us. */ + void *data1, *data2; + ring_buffer_size_t size1, size2; + PaUtil_GetRingBufferReadRegions( &stream->inputRingBuffer, + frames, + &data1, &size1, + &data2, &size2 ); + if( size1 == frames ) { + /* simplest case: all in first buffer */ + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), frames ); + PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), + 0, + data1, + inChan ); + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + PaUtil_AdvanceRingBufferReadIndex(&stream->inputRingBuffer, size1 ); + } else if( size1 + size2 < frames ) { + /*we underflowed. take what data we can, zero the rest.*/ + unsigned char data[frames*inChan*flsz]; + if( size1 ) + memcpy( data, data1, size1 ); + if( size2 ) + memcpy( data+size1, data2, size2 ); + bzero( data+size1+size2, frames*flsz*inChan - size1 - size2 ); + + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), frames ); + PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), + 0, + data, + inChan ); + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + PaUtil_AdvanceRingBufferReadIndex( &stream->inputRingBuffer, + size1+size2 ); + /* flag underflow */ + stream->xrunFlags |= paInputUnderflow; + } else { + /*we got all the data, but split between buffers*/ + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), size1 ); + PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), + 0, + data1, + inChan ); + PaUtil_Set2ndInputFrameCount( &(stream->bufferProcessor), size2 ); + PaUtil_Set2ndInterleavedInputChannels( &(stream->bufferProcessor), + 0, + data2, + inChan ); + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + PaUtil_AdvanceRingBufferReadIndex(&stream->inputRingBuffer, size1+size2 ); + } + } + } else { + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + } + + } + else + { + /* ------------------ Input + * + * First, we read off the audio data and put it in the ring buffer. + * if this is an input-only stream, we need to process it more, + * otherwise, we let the output case deal with it. + */ + OSStatus err = 0; + int chan = stream->inputAudioBufferList.mBuffers[0].mNumberChannels ; + /* FIXME: looping here may not actually be necessary, but it was something I tried in testing. */ + do { + err= AudioUnitRender(stream->inputUnit, + ioActionFlags, + inTimeStamp, + INPUT_ELEMENT, + inNumberFrames, + &stream->inputAudioBufferList ); + if( err == -10874 ) + inNumberFrames /= 2; + } while( err == -10874 && inNumberFrames > 1 ); + /* FEEDBACK: I'm not sure what to do when this call fails */ + ERR( err ); + assert( !err ); + if( stream->inputSRConverter || stream->outputUnit ) + { + /* If this is duplex or we use a converter, put the data + into the ring buffer. */ + long bytesIn, bytesOut; + bytesIn = sizeof( float ) * inNumberFrames * chan; + bytesOut = PaUtil_WriteRingBuffer( &stream->inputRingBuffer, + stream->inputAudioBufferList.mBuffers[0].mData, + inNumberFrames ); + if( bytesIn != bytesOut ) + stream->xrunFlags |= paInputOverflow ; + } + else + { + /* for simplex input w/o SR conversion, + just pop the data into the buffer processor.*/ + PaUtil_BeginBufferProcessing( &(stream->bufferProcessor), + &timeInfo, + stream->xrunFlags ); + stream->xrunFlags = 0; + + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), inNumberFrames); + PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), + 0, + stream->inputAudioBufferList.mBuffers[0].mData, + chan ); + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + } + if( !stream->outputUnit && stream->inputSRConverter ) + { + /* ------------------ Simplex Input w/ SR Conversion + * + * if this is a simplex input stream, we need to read off the buffer, + * do our sample rate conversion and pass the results to the buffer + * processor. + * The logic here is complicated somewhat by the fact that we don't + * know how much data is available, so we loop on reasonably sized + * chunks, and let the BufferProcessor deal with the rest. + * + */ + /*This might be too big or small depending on SR conversion*/ + float data[ chan * inNumberFrames ]; + OSStatus err; + do + { /*Run the buffer processor until we are out of data*/ + UInt32 size; + long f; + + size = sizeof( data ); + err = AudioConverterFillBuffer( + stream->inputSRConverter, + ringBufferIOProc, + &stream->inputRingBuffer, + &size, + (void *)data ); + if( err != RING_BUFFER_EMPTY ) + ERR( err ); + assert( err == 0 || err == RING_BUFFER_EMPTY ); + + f = size / ( chan * sizeof(float) ); + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), f ); + if( f ) + { + PaUtil_BeginBufferProcessing( &(stream->bufferProcessor), + &timeInfo, + stream->xrunFlags ); + stream->xrunFlags = 0; + + PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), + 0, + data, + chan ); + framesProcessed = + PaUtil_EndBufferProcessing( &(stream->bufferProcessor), + &callbackResult ); + } + } while( callbackResult == paContinue && !err ); + } + } + + switch( callbackResult ) + { + case paContinue: break; + case paComplete: + case paAbort: + stream->state = CALLBACK_STOPPED ; + if( stream->outputUnit ) + AudioOutputUnitStop(stream->outputUnit); + if( stream->inputUnit ) + AudioOutputUnitStop(stream->inputUnit); + break; + } + + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + return noErr; +} + + +/* + When CloseStream() is called, the multi-api layer ensures that + the stream has already been stopped or aborted. +*/ +static PaError CloseStream( PaStream* s ) +{ + /* This may be called from a failed OpenStream. + Therefore, each piece of info is treated seperately. */ + PaError result = paNoError; + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + VVDBUG(("CloseStream()\n")); + VDBUG( ( "Closing stream.\n" ) ); + + if( stream ) { + + if( stream->outputUnit ) + { + Boolean isInput = FALSE; + CleanupDevicePropertyListeners( stream, stream->outputDevice, isInput ); + } + + if( stream->inputUnit ) + { + Boolean isInput = TRUE; + CleanupDevicePropertyListeners( stream, stream->inputDevice, isInput ); + } + + if( stream->outputUnit ) { + int count = removeFromXRunListenerList( stream ); + if( count == 0 ) + AudioDeviceRemovePropertyListener( stream->outputDevice, + 0, + false, + kAudioDeviceProcessorOverload, + xrunCallback ); + } + if( stream->inputUnit && stream->outputUnit != stream->inputUnit ) { + int count = removeFromXRunListenerList( stream ); + if( count == 0 ) + AudioDeviceRemovePropertyListener( stream->inputDevice, + 0, + true, + kAudioDeviceProcessorOverload, + xrunCallback ); + } + if( stream->outputUnit && stream->outputUnit != stream->inputUnit ) { + AudioUnitUninitialize( stream->outputUnit ); + CloseComponent( stream->outputUnit ); + } + stream->outputUnit = NULL; + if( stream->inputUnit ) + { + AudioUnitUninitialize( stream->inputUnit ); + CloseComponent( stream->inputUnit ); + stream->inputUnit = NULL; + } + if( stream->inputRingBuffer.buffer ) + free( (void *) stream->inputRingBuffer.buffer ); + stream->inputRingBuffer.buffer = NULL; + /*TODO: is there more that needs to be done on error + from AudioConverterDispose?*/ + if( stream->inputSRConverter ) + ERR( AudioConverterDispose( stream->inputSRConverter ) ); + stream->inputSRConverter = NULL; + if( stream->inputAudioBufferList.mBuffers[0].mData ) + free( stream->inputAudioBufferList.mBuffers[0].mData ); + stream->inputAudioBufferList.mBuffers[0].mData = NULL; + + result = destroyBlioRingBuffers( &stream->blio ); + if( result ) + return result; + if( stream->bufferProcessorIsInitialized ) + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + + if( stream->timingInformationMutexIsInitialized ) + pthread_mutex_destroy( &stream->timingInformationMutex ); + + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + PaUtil_FreeMemory( stream ); + } + + return result; +} + +static PaError StartStream( PaStream *s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + OSStatus result = noErr; + VVDBUG(("StartStream()\n")); + VDBUG( ( "Starting stream.\n" ) ); + +#define ERR_WRAP(mac_err) do { result = mac_err ; if ( result != noErr ) return ERR(result) ; } while(0) + + /*FIXME: maybe want to do this on close/abort for faster start? */ + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + if( stream->inputSRConverter ) + ERR_WRAP( AudioConverterReset( stream->inputSRConverter ) ); + + /* -- start -- */ + stream->state = ACTIVE; + if( stream->inputUnit ) { + ERR_WRAP( AudioOutputUnitStart(stream->inputUnit) ); + } + if( stream->outputUnit && stream->outputUnit != stream->inputUnit ) { + ERR_WRAP( AudioOutputUnitStart(stream->outputUnit) ); + } + + return paNoError; +#undef ERR_WRAP +} + +// it's not clear from appl's docs that this really waits +// until all data is flushed. +static ComponentResult BlockWhileAudioUnitIsRunning( AudioUnit audioUnit, AudioUnitElement element ) +{ + Boolean isRunning = 1; + while( isRunning ) { + UInt32 s = sizeof( isRunning ); + ComponentResult err = AudioUnitGetProperty( audioUnit, kAudioOutputUnitProperty_IsRunning, kAudioUnitScope_Global, element, &isRunning, &s ); + if( err ) + return err; + Pa_Sleep( 100 ); + } + return noErr; +} + +static PaError StopStream( PaStream *s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + OSStatus result = noErr; + PaError paErr; + VVDBUG(("StopStream()\n")); + + VDBUG( ("Waiting for BLIO.\n") ); + waitUntilBlioWriteBufferIsFlushed( &stream->blio ); + VDBUG( ( "Stopping stream.\n" ) ); + + stream->state = STOPPING; + +#define ERR_WRAP(mac_err) do { result = mac_err ; if ( result != noErr ) return ERR(result) ; } while(0) + /* -- stop and reset -- */ + if( stream->inputUnit == stream->outputUnit && stream->inputUnit ) + { + ERR_WRAP( AudioOutputUnitStop(stream->inputUnit) ); + ERR_WRAP( BlockWhileAudioUnitIsRunning(stream->inputUnit,0) ); + ERR_WRAP( BlockWhileAudioUnitIsRunning(stream->inputUnit,1) ); + ERR_WRAP( AudioUnitReset(stream->inputUnit, kAudioUnitScope_Global, 1) ); + ERR_WRAP( AudioUnitReset(stream->inputUnit, kAudioUnitScope_Global, 0) ); + } + else + { + if( stream->inputUnit ) + { + ERR_WRAP(AudioOutputUnitStop(stream->inputUnit) ); + ERR_WRAP( BlockWhileAudioUnitIsRunning(stream->inputUnit,1) ); + ERR_WRAP(AudioUnitReset(stream->inputUnit,kAudioUnitScope_Global,1)); + } + if( stream->outputUnit ) + { + ERR_WRAP(AudioOutputUnitStop(stream->outputUnit)); + ERR_WRAP( BlockWhileAudioUnitIsRunning(stream->outputUnit,0) ); + ERR_WRAP(AudioUnitReset(stream->outputUnit,kAudioUnitScope_Global,0)); + } + } + if( stream->inputRingBuffer.buffer ) { + PaUtil_FlushRingBuffer( &stream->inputRingBuffer ); + bzero( (void *)stream->inputRingBuffer.buffer, + stream->inputRingBuffer.bufferSize ); + /* advance the write point a little, so we are reading from the + middle of the buffer. We'll need extra at the end because + testing has shown that this helps. */ + if( stream->outputUnit ) + PaUtil_AdvanceRingBufferWriteIndex( &stream->inputRingBuffer, + stream->inputRingBuffer.bufferSize + / RING_BUFFER_ADVANCE_DENOMINATOR ); + } + + stream->xrunFlags = 0; + stream->state = STOPPED; + + paErr = resetBlioRingBuffers( &stream->blio ); + if( paErr ) + return paErr; + + VDBUG( ( "Stream Stopped.\n" ) ); + return paNoError; +#undef ERR_WRAP +} + +static PaError AbortStream( PaStream *s ) +{ + VVDBUG(("AbortStream()->StopStream()\n")); + VDBUG( ( "Aborting stream.\n" ) ); + /* We have nothing faster than StopStream. */ + return StopStream(s); +} + + +static PaError IsStreamStopped( PaStream *s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + VVDBUG(("IsStreamStopped()\n")); + + return stream->state == STOPPED ? 1 : 0; +} + + +static PaError IsStreamActive( PaStream *s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + VVDBUG(("IsStreamActive()\n")); + return ( stream->state == ACTIVE || stream->state == STOPPING ); +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + VVDBUG(("GetStreamCpuLoad()\n")); + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} diff --git a/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c new file mode 100644 index 0000000000..b514f64119 --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c @@ -0,0 +1,592 @@ +/* + * Implementation of the PortAudio API for Apple AUHAL + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src + + This file contains the implementation + required for blocking I/O. It is separated from pa_mac_core.c simply to ease + development. +*/ + +#include "pa_mac_core_blocking.h" +#include "pa_mac_core_internal.h" +#include +#ifdef MOSX_USE_NON_ATOMIC_FLAG_BITS +# define OSAtomicOr32( a, b ) ( (*(b)) |= (a) ) +# define OSAtomicAnd32( a, b ) ( (*(b)) &= (a) ) +#else +# include +#endif + +/* + * This function determines the size of a particular sample format. + * if the format is not recognized, this returns zero. + */ +static size_t computeSampleSizeFromFormat( PaSampleFormat format ) +{ + switch( format & (~paNonInterleaved) ) { + case paFloat32: return 4; + case paInt32: return 4; + case paInt24: return 3; + case paInt16: return 2; + case paInt8: case paUInt8: return 1; + default: return 0; + } +} +/* + * Same as computeSampleSizeFromFormat, except that if + * the size is not a power of two, it returns the next power of two up + */ +static size_t computeSampleSizeFromFormatPow2( PaSampleFormat format ) +{ + switch( format & (~paNonInterleaved) ) { + case paFloat32: return 4; + case paInt32: return 4; + case paInt24: return 4; + case paInt16: return 2; + case paInt8: case paUInt8: return 1; + default: return 0; + } +} + + + +/* + * Functions for initializing, resetting, and destroying BLIO structures. + * + */ + +/* This should be called with the relevant info when initializing a stream for + callback. */ +PaError initializeBlioRingBuffers( + PaMacBlio *blio, + PaSampleFormat inputSampleFormat, + PaSampleFormat outputSampleFormat, + size_t framesPerBuffer, + long ringBufferSize, + int inChan, + int outChan ) +{ + void *data; + int result; + OSStatus err; + + /* zeroify things */ + bzero( blio, sizeof( PaMacBlio ) ); + /* this is redundant, but the buffers are used to check + if the bufffers have been initialized, so we do it explicitly. */ + blio->inputRingBuffer.buffer = NULL; + blio->outputRingBuffer.buffer = NULL; + + /* initialize simple data */ + blio->ringBufferFrames = ringBufferSize; + blio->inputSampleFormat = inputSampleFormat; + blio->inputSampleSizeActual = computeSampleSizeFromFormat(inputSampleFormat); + blio->inputSampleSizePow2 = computeSampleSizeFromFormatPow2(inputSampleFormat); + blio->outputSampleFormat = outputSampleFormat; + blio->outputSampleSizeActual = computeSampleSizeFromFormat(outputSampleFormat); + blio->outputSampleSizePow2 = computeSampleSizeFromFormatPow2(outputSampleFormat); + + blio->framesPerBuffer = framesPerBuffer; + blio->inChan = inChan; + blio->outChan = outChan; + blio->statusFlags = 0; + blio->errors = paNoError; +#ifdef PA_MAC_BLIO_MUTEX + blio->isInputEmpty = false; + blio->isOutputFull = false; +#endif + + /* setup ring buffers */ +#ifdef PA_MAC_BLIO_MUTEX + result = PaMacCore_SetUnixError( pthread_mutex_init(&(blio->inputMutex),NULL), 0 ); + if( result ) + goto error; + result = UNIX_ERR( pthread_cond_init( &(blio->inputCond), NULL ) ); + if( result ) + goto error; + result = UNIX_ERR( pthread_mutex_init(&(blio->outputMutex),NULL) ); + if( result ) + goto error; + result = UNIX_ERR( pthread_cond_init( &(blio->outputCond), NULL ) ); +#endif + if( inChan ) { + data = calloc( ringBufferSize, blio->inputSampleSizePow2*inChan ); + if( !data ) + { + result = paInsufficientMemory; + goto error; + } + + err = PaUtil_InitializeRingBuffer( + &blio->inputRingBuffer, + 1, ringBufferSize*blio->inputSampleSizePow2*inChan, + data ); + assert( !err ); + } + if( outChan ) { + data = calloc( ringBufferSize, blio->outputSampleSizePow2*outChan ); + if( !data ) + { + result = paInsufficientMemory; + goto error; + } + + err = PaUtil_InitializeRingBuffer( + &blio->outputRingBuffer, + 1, ringBufferSize*blio->outputSampleSizePow2*outChan, + data ); + assert( !err ); + } + + result = resetBlioRingBuffers( blio ); + if( result ) + goto error; + + return 0; + + error: + destroyBlioRingBuffers( blio ); + return result; +} + +#ifdef PA_MAC_BLIO_MUTEX +PaError blioSetIsInputEmpty( PaMacBlio *blio, bool isEmpty ) +{ + PaError result = paNoError; + if( isEmpty == blio->isInputEmpty ) + goto done; + + /* we need to update the value. Here's what we do: + * - Lock the mutex, so noone else can write. + * - update the value. + * - unlock. + * - broadcast to all listeners. + */ + result = UNIX_ERR( pthread_mutex_lock( &blio->inputMutex ) ); + if( result ) + goto done; + blio->isInputEmpty = isEmpty; + result = UNIX_ERR( pthread_mutex_unlock( &blio->inputMutex ) ); + if( result ) + goto done; + result = UNIX_ERR( pthread_cond_broadcast( &blio->inputCond ) ); + if( result ) + goto done; + + done: + return result; +} +PaError blioSetIsOutputFull( PaMacBlio *blio, bool isFull ) +{ + PaError result = paNoError; + if( isFull == blio->isOutputFull ) + goto done; + + /* we need to update the value. Here's what we do: + * - Lock the mutex, so noone else can write. + * - update the value. + * - unlock. + * - broadcast to all listeners. + */ + result = UNIX_ERR( pthread_mutex_lock( &blio->outputMutex ) ); + if( result ) + goto done; + blio->isOutputFull = isFull; + result = UNIX_ERR( pthread_mutex_unlock( &blio->outputMutex ) ); + if( result ) + goto done; + result = UNIX_ERR( pthread_cond_broadcast( &blio->outputCond ) ); + if( result ) + goto done; + + done: + return result; +} +#endif + +/* This should be called after stopping or aborting the stream, so that on next + start, the buffers will be ready. */ +PaError resetBlioRingBuffers( PaMacBlio *blio ) +{ +#ifdef PA_MAC__BLIO_MUTEX + int result; +#endif + blio->statusFlags = 0; + if( blio->outputRingBuffer.buffer ) { + PaUtil_FlushRingBuffer( &blio->outputRingBuffer ); + bzero( blio->outputRingBuffer.buffer, + blio->outputRingBuffer.bufferSize ); + /* Advance buffer */ + PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->ringBufferFrames*blio->outputSampleSizeActual*blio->outChan ); + //PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->outputRingBuffer.bufferSize ); + + /* Update isOutputFull. */ +#ifdef PA_MAC__BLIO_MUTEX + result = blioSetIsOutputFull( blio, toAdvance == blio->outputRingBuffer.bufferSize ); + if( result ) + goto error; +#endif +/* + printf( "------%d\n" , blio->framesPerBuffer ); + printf( "------%d\n" , blio->outChan ); + printf( "------%d\n" , blio->outputSampleSize ); + printf( "------%d\n" , blio->framesPerBuffer*blio->outChan*blio->outputSampleSize ); +*/ + } + if( blio->inputRingBuffer.buffer ) { + PaUtil_FlushRingBuffer( &blio->inputRingBuffer ); + bzero( blio->inputRingBuffer.buffer, + blio->inputRingBuffer.bufferSize ); + /* Update isInputEmpty. */ +#ifdef PA_MAC__BLIO_MUTEX + result = blioSetIsInputEmpty( blio, true ); + if( result ) + goto error; +#endif + } + return paNoError; +#ifdef PA_MAC__BLIO_MUTEX + error: + return result; +#endif +} + +/*This should be called when you are done with the blio. It can safely be called + multiple times if there are no exceptions. */ +PaError destroyBlioRingBuffers( PaMacBlio *blio ) +{ + PaError result = paNoError; + if( blio->inputRingBuffer.buffer ) { + free( blio->inputRingBuffer.buffer ); +#ifdef PA_MAC__BLIO_MUTEX + result = UNIX_ERR( pthread_mutex_destroy( & blio->inputMutex ) ); + if( result ) return result; + result = UNIX_ERR( pthread_cond_destroy( & blio->inputCond ) ); + if( result ) return result; +#endif + } + blio->inputRingBuffer.buffer = NULL; + if( blio->outputRingBuffer.buffer ) { + free( blio->outputRingBuffer.buffer ); +#ifdef PA_MAC__BLIO_MUTEX + result = UNIX_ERR( pthread_mutex_destroy( & blio->outputMutex ) ); + if( result ) return result; + result = UNIX_ERR( pthread_cond_destroy( & blio->outputCond ) ); + if( result ) return result; +#endif + } + blio->outputRingBuffer.buffer = NULL; + + return result; +} + +/* + * this is the BlioCallback function. It expects to recieve a PaMacBlio Object + * pointer as userData. + * + */ +int BlioCallback( const void *input, void *output, unsigned long frameCount, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ) +{ + PaMacBlio *blio = (PaMacBlio*)userData; + long avail; + long toRead; + long toWrite; + long read; + long written; + + /* set flags returned by OS: */ + OSAtomicOr32( statusFlags, &blio->statusFlags ) ; + + /* --- Handle Input Buffer --- */ + if( blio->inChan ) { + avail = PaUtil_GetRingBufferWriteAvailable( &blio->inputRingBuffer ); + + /* check for underflow */ + if( avail < frameCount * blio->inputSampleSizeActual * blio->inChan ) + OSAtomicOr32( paInputOverflow, &blio->statusFlags ); + + toRead = MIN( avail, frameCount * blio->inputSampleSizeActual * blio->inChan ); + + /* copy the data */ + /*printf( "reading %d\n", toRead );*/ + read = PaUtil_WriteRingBuffer( &blio->inputRingBuffer, input, toRead ); + assert( toRead == read ); +#ifdef PA_MAC__BLIO_MUTEX + /* Priority inversion. See notes below. */ + blioSetIsInputEmpty( blio, false ); +#endif + } + + + /* --- Handle Output Buffer --- */ + if( blio->outChan ) { + avail = PaUtil_GetRingBufferReadAvailable( &blio->outputRingBuffer ); + + /* check for underflow */ + if( avail < frameCount * blio->outputSampleSizeActual * blio->outChan ) + OSAtomicOr32( paOutputUnderflow, &blio->statusFlags ); + + toWrite = MIN( avail, frameCount * blio->outputSampleSizeActual * blio->outChan ); + + if( toWrite != frameCount * blio->outputSampleSizeActual * blio->outChan ) + bzero( ((char *)output)+toWrite, + frameCount * blio->outputSampleSizeActual * blio->outChan - toWrite ); + /* copy the data */ + /*printf( "writing %d\n", toWrite );*/ + written = PaUtil_ReadRingBuffer( &blio->outputRingBuffer, output, toWrite ); + assert( toWrite == written ); +#ifdef PA_MAC__BLIO_MUTEX + /* We have a priority inversion here. However, we will only have to + wait if this was true and is now false, which means we've got + some room in the buffer. + Hopefully problems will be minimized. */ + blioSetIsOutputFull( blio, false ); +#endif + } + + return paContinue; +} + +PaError ReadStream( PaStream* stream, + void *buffer, + unsigned long frames ) +{ + PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; + char *cbuf = (char *) buffer; + PaError ret = paNoError; + VVDBUG(("ReadStream()\n")); + + while( frames > 0 ) { + long avail; + long toRead; + do { + avail = PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ); +/* + printf( "Read Buffer is %%%g full: %ld of %ld.\n", + 100 * (float)avail / (float) blio->inputRingBuffer.bufferSize, + avail, blio->inputRingBuffer.bufferSize ); +*/ + if( avail == 0 ) { +#ifdef PA_MAC_BLIO_MUTEX + /**block when empty*/ + ret = UNIX_ERR( pthread_mutex_lock( &blio->inputMutex ) ); + if( ret ) + return ret; + while( blio->isInputEmpty ) { + ret = UNIX_ERR( pthread_cond_wait( &blio->inputCond, &blio->inputMutex ) ); + if( ret ) + return ret; + } + ret = UNIX_ERR( pthread_mutex_unlock( &blio->inputMutex ) ); + if( ret ) + return ret; +#else + Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); +#endif + } + } while( avail == 0 ); + toRead = MIN( avail, frames * blio->inputSampleSizeActual * blio->inChan ); + toRead -= toRead % blio->inputSampleSizeActual * blio->inChan ; + PaUtil_ReadRingBuffer( &blio->inputRingBuffer, (void *)cbuf, toRead ); + cbuf += toRead; + frames -= toRead / ( blio->inputSampleSizeActual * blio->inChan ); + + if( toRead == avail ) { +#ifdef PA_MAC_BLIO_MUTEX + /* we just emptied the buffer, so we need to mark it as empty. */ + ret = blioSetIsInputEmpty( blio, true ); + if( ret ) + return ret; + /* of course, in the meantime, the callback may have put some sats + in, so + so check for that, too, to avoid a race condition. */ + if( PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ) ) { + blioSetIsInputEmpty( blio, false ); + if( ret ) + return ret; + } +#endif + } + } + + /* Report either paNoError or paInputOverflowed. */ + /* may also want to report other errors, but this is non-standard. */ + ret = blio->statusFlags & paInputOverflow; + + /* report underflow only once: */ + if( ret ) { + OSAtomicAnd32( (uint32_t)(~paInputOverflow), &blio->statusFlags ); + ret = paInputOverflowed; + } + + return ret; +} + + +PaError WriteStream( PaStream* stream, + const void *buffer, + unsigned long frames ) +{ + PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; + char *cbuf = (char *) buffer; + PaError ret = paNoError; + VVDBUG(("WriteStream()\n")); + + while( frames > 0 ) { + long avail = 0; + long toWrite; + + do { + avail = PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); +/* + printf( "Write Buffer is %%%g full: %ld of %ld.\n", + 100 - 100 * (float)avail / (float) blio->outputRingBuffer.bufferSize, + avail, blio->outputRingBuffer.bufferSize ); +*/ + if( avail == 0 ) { +#ifdef PA_MAC_BLIO_MUTEX + /*block while full*/ + ret = UNIX_ERR( pthread_mutex_lock( &blio->outputMutex ) ); + if( ret ) + return ret; + while( blio->isOutputFull ) { + ret = UNIX_ERR( pthread_cond_wait( &blio->outputCond, &blio->outputMutex ) ); + if( ret ) + return ret; + } + ret = UNIX_ERR( pthread_mutex_unlock( &blio->outputMutex ) ); + if( ret ) + return ret; +#else + Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); +#endif + } + } while( avail == 0 ); + + toWrite = MIN( avail, frames * blio->outputSampleSizeActual * blio->outChan ); + toWrite -= toWrite % blio->outputSampleSizeActual * blio->outChan ; + PaUtil_WriteRingBuffer( &blio->outputRingBuffer, (void *)cbuf, toWrite ); + cbuf += toWrite; + frames -= toWrite / ( blio->outputSampleSizeActual * blio->outChan ); + +#ifdef PA_MAC_BLIO_MUTEX + if( toWrite == avail ) { + /* we just filled up the buffer, so we need to mark it as filled. */ + ret = blioSetIsOutputFull( blio, true ); + if( ret ) + return ret; + /* of course, in the meantime, we may have emptied the buffer, so + so check for that, too, to avoid a race condition. */ + if( PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ) ) { + blioSetIsOutputFull( blio, false ); + if( ret ) + return ret; + } + } +#endif + } + + /* Report either paNoError or paOutputUnderflowed. */ + /* may also want to report other errors, but this is non-standard. */ + ret = blio->statusFlags & paOutputUnderflow; + + /* report underflow only once: */ + if( ret ) { + OSAtomicAnd32( (uint32_t)(~paOutputUnderflow), &blio->statusFlags ); + ret = paOutputUnderflowed; + } + + return ret; +} + +/* + * + */ +void waitUntilBlioWriteBufferIsFlushed( PaMacBlio *blio ) +{ + if( blio->outputRingBuffer.buffer ) { + long avail = PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); + while( avail != blio->outputRingBuffer.bufferSize ) { + if( avail == 0 ) + Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); + avail = PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); + } + } +} + + +signed long GetStreamReadAvailable( PaStream* stream ) +{ + PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; + VVDBUG(("GetStreamReadAvailable()\n")); + + return PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ) + / ( blio->inputSampleSizeActual * blio->inChan ); +} + + +signed long GetStreamWriteAvailable( PaStream* stream ) +{ + PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; + VVDBUG(("GetStreamWriteAvailable()\n")); + + return PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ) + / ( blio->outputSampleSizeActual * blio->outChan ); +} + diff --git a/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h new file mode 100644 index 0000000000..a6f0ad5dc1 --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h @@ -0,0 +1,136 @@ +/* + * Internal blocking interfaces for PortAudio Apple AUHAL implementation + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#ifndef PA_MAC_CORE_BLOCKING_H_ +#define PA_MAC_CORE_BLOCKING_H_ + +#include "pa_ringbuffer.h" +#include "portaudio.h" +#include "pa_mac_core_utilities.h" + +/* + * Number of miliseconds to busy wait whil waiting for data in blocking calls. + */ +#define PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL (5) +/* + * Define exactly one of these blocking methods + * PA_MAC_BLIO_MUTEX is not actively maintained. + */ +#define PA_MAC_BLIO_BUSY_WAIT +/* +#define PA_MAC_BLIO_MUTEX +*/ + +typedef struct { + PaUtilRingBuffer inputRingBuffer; + PaUtilRingBuffer outputRingBuffer; + size_t ringBufferFrames; + PaSampleFormat inputSampleFormat; + size_t inputSampleSizeActual; + size_t inputSampleSizePow2; + PaSampleFormat outputSampleFormat; + size_t outputSampleSizeActual; + size_t outputSampleSizePow2; + + size_t framesPerBuffer; + + int inChan; + int outChan; + + //PaStreamCallbackFlags statusFlags; + uint32_t statusFlags; + PaError errors; + + /* Here we handle blocking, using condition variables. */ +#ifdef PA_MAC_BLIO_MUTEX + volatile bool isInputEmpty; + pthread_mutex_t inputMutex; + pthread_cond_t inputCond; + + volatile bool isOutputFull; + pthread_mutex_t outputMutex; + pthread_cond_t outputCond; +#endif +} +PaMacBlio; + +/* + * These functions operate on condition and related variables. + */ + +PaError initializeBlioRingBuffers( + PaMacBlio *blio, + PaSampleFormat inputSampleFormat, + PaSampleFormat outputSampleFormat, + size_t framesPerBuffer, + long ringBufferSize, + int inChan, + int outChan ); +PaError destroyBlioRingBuffers( PaMacBlio *blio ); +PaError resetBlioRingBuffers( PaMacBlio *blio ); + +int BlioCallback( + const void *input, void *output, + unsigned long frameCount, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ); + +void waitUntilBlioWriteBufferIsFlushed( PaMacBlio *blio ); + +#endif /*PA_MAC_CORE_BLOCKING_H_*/ diff --git a/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h new file mode 100644 index 0000000000..462240bb4b --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h @@ -0,0 +1,194 @@ +/* + * Internal interfaces for PortAudio Apple AUHAL implementation + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file pa_mac_core + @ingroup hostapi_src + @author Bjorn Roche + @brief AUHAL implementation of PortAudio +*/ + +#ifndef PA_MAC_CORE_INTERNAL_H__ +#define PA_MAC_CORE_INTERNAL_H__ + +#include +#include +#include +#include + +#include "portaudio.h" +#include "pa_util.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_allocation.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "pa_ringbuffer.h" + +#include "pa_mac_core_blocking.h" + +/* function prototypes */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#define RING_BUFFER_ADVANCE_DENOMINATOR (4) + +PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); +signed long GetStreamReadAvailable( PaStream* stream ); +signed long GetStreamWriteAvailable( PaStream* stream ); +/* PaMacAUHAL - host api datastructure specific to this implementation */ +typedef struct +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + /* implementation specific data goes here */ + long devCount; + AudioDeviceID *devIds; /*array of all audio devices*/ + AudioDeviceID defaultIn; + AudioDeviceID defaultOut; +} +PaMacAUHAL; + +typedef struct PaMacCoreDeviceProperties +{ + /* Values in Frames from property queries. */ + UInt32 safetyOffset; + UInt32 bufferFrameSize; + // UInt32 streamLatency; // Seems to be the same as deviceLatency!? + UInt32 deviceLatency; + /* Current device sample rate. May change! */ + Float64 sampleRate; + Float64 samplePeriod; // reciprocal +} +PaMacCoreDeviceProperties; + +/* stream data structure specifically for this implementation */ +typedef struct PaMacCoreStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + /* implementation specific data goes here */ + bool bufferProcessorIsInitialized; + AudioUnit inputUnit; + AudioUnit outputUnit; + AudioDeviceID inputDevice; + AudioDeviceID outputDevice; + size_t userInChan; + size_t userOutChan; + size_t inputFramesPerBuffer; + size_t outputFramesPerBuffer; + PaMacBlio blio; + /* We use this ring buffer when input and out devs are different. */ + PaUtilRingBuffer inputRingBuffer; + /* We may need to do SR conversion on input. */ + AudioConverterRef inputSRConverter; + /* We need to preallocate an inputBuffer for reading data. */ + AudioBufferList inputAudioBufferList; + AudioTimeStamp startTime; + /* FIXME: instead of volatile, these should be properly memory barriered */ + volatile uint32_t xrunFlags; /*PaStreamCallbackFlags*/ + volatile enum { + STOPPED = 0, /* playback is completely stopped, + and the user has called StopStream(). */ + CALLBACK_STOPPED = 1, /* callback has requested stop, + but user has not yet called StopStream(). */ + STOPPING = 2, /* The stream is in the process of closing + because the user has called StopStream. + This state is just used internally; + externally it is indistinguishable from + ACTIVE.*/ + ACTIVE = 3 /* The stream is active and running. */ + } state; + double sampleRate; + //these may be different from the stream sample rate due to SR conversion: + double outDeviceSampleRate; + double inDeviceSampleRate; + + PaMacCoreDeviceProperties inputProperties; + PaMacCoreDeviceProperties outputProperties; + + /* data updated by main thread and notifications, protected by timingInformationMutex */ + int timingInformationMutexIsInitialized; + pthread_mutex_t timingInformationMutex; + + /* These are written by the PA thread or from CoreAudio callbacks. Protected by the mutex. */ + Float64 timestampOffsetCombined; + Float64 timestampOffsetInputDevice; + Float64 timestampOffsetOutputDevice; + + /* Offsets in seconds to be applied to Apple timestamps to convert them to PA timestamps. + * While the io proc is active, the following values are only accessed and manipulated by the ioproc */ + Float64 timestampOffsetCombined_ioProcCopy; + Float64 timestampOffsetInputDevice_ioProcCopy; + Float64 timestampOffsetOutputDevice_ioProcCopy; + +} +PaMacCoreStream; + +#endif /* PA_MAC_CORE_INTERNAL_H__ */ diff --git a/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_old.c b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_old.c new file mode 100644 index 0000000000..4ef89549b0 --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_old.c @@ -0,0 +1,913 @@ +/* + * $Id: pa_mac_core_old.c 1083 2006-08-23 07:30:49Z rossb $ + * pa_mac_core.c + * Implementation of PortAudio for Mac OS X CoreAudio + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Authors: Ross Bencina and Phil Burk + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +#include +#include +#include +#include +#include +#include + +#include "portaudio.h" +#include "pa_trace.h" +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" + +// ===== constants ===== + +// ===== structs ===== +#pragma mark structs + +// PaMacCoreHostApiRepresentation - host api datastructure specific to this implementation +typedef struct PaMacCore_HAR +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + AudioDeviceID *macCoreDeviceIds; +} +PaMacCoreHostApiRepresentation; + +typedef struct PaMacCore_DI +{ + PaDeviceInfo inheritedDeviceInfo; +} +PaMacCoreDeviceInfo; + +// PaMacCoreStream - a stream data structure specifically for this implementation +typedef struct PaMacCore_S +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + int primeStreamUsingCallback; + + AudioDeviceID inputDevice; + AudioDeviceID outputDevice; + + // Processing thread management -------------- +// HANDLE abortEvent; +// HANDLE processingThread; +// DWORD processingThreadId; + + char throttleProcessingThreadOnOverload; // 0 -> don't throtte, non-0 -> throttle + int processingThreadPriority; + int highThreadPriority; + int throttledThreadPriority; + unsigned long throttledSleepMsecs; + + int isStopped; + volatile int isActive; + volatile int stopProcessing; // stop thread once existing buffers have been returned + volatile int abortProcessing; // stop thread immediately + +// DWORD allBuffersDurationMs; // used to calculate timeouts +} +PaMacCoreStream; + +// Data needed by the CoreAudio callback functions +typedef struct PaMacCore_CD +{ + PaMacCoreStream *stream; + PaStreamCallback *callback; + void *userData; + PaUtilConverter *inputConverter; + PaUtilConverter *outputConverter; + void *inputBuffer; + void *outputBuffer; + int inputChannelCount; + int outputChannelCount; + PaSampleFormat inputSampleFormat; + PaSampleFormat outputSampleFormat; + PaUtilTriangularDitherGenerator *ditherGenerator; +} +PaMacClientData; + +// ===== CoreAudio-PortAudio bridge functions ===== +#pragma mark CoreAudio-PortAudio bridge functions + +// Maps CoreAudio OSStatus codes to PortAudio PaError codes +static PaError conv_err(OSStatus error) +{ + PaError result; + + switch (error) { + case kAudioHardwareNoError: + result = paNoError; break; + case kAudioHardwareNotRunningError: + result = paInternalError; break; + case kAudioHardwareUnspecifiedError: + result = paInternalError; break; + case kAudioHardwareUnknownPropertyError: + result = paInternalError; break; + case kAudioHardwareBadPropertySizeError: + result = paInternalError; break; + case kAudioHardwareIllegalOperationError: + result = paInternalError; break; + case kAudioHardwareBadDeviceError: + result = paInvalidDevice; break; + case kAudioHardwareBadStreamError: + result = paBadStreamPtr; break; + case kAudioHardwareUnsupportedOperationError: + result = paInternalError; break; + case kAudioDeviceUnsupportedFormatError: + result = paSampleFormatNotSupported; break; + case kAudioDevicePermissionsError: + result = paDeviceUnavailable; break; + default: + result = paInternalError; + } + + return result; +} + +/* This function is unused +static AudioStreamBasicDescription *InitializeStreamDescription(const PaStreamParameters *parameters, double sampleRate) +{ + struct AudioStreamBasicDescription *streamDescription = PaUtil_AllocateMemory(sizeof(AudioStreamBasicDescription)); + streamDescription->mSampleRate = sampleRate; + streamDescription->mFormatID = kAudioFormatLinearPCM; + streamDescription->mFormatFlags = 0; + streamDescription->mFramesPerPacket = 1; + + if (parameters->sampleFormat & paNonInterleaved) { + streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsNonInterleaved; + streamDescription->mChannelsPerFrame = 1; + streamDescription->mBytesPerFrame = Pa_GetSampleSize(parameters->sampleFormat); + streamDescription->mBytesPerPacket = Pa_GetSampleSize(parameters->sampleFormat); + } + else { + streamDescription->mChannelsPerFrame = parameters->channelCount; + } + + streamDescription->mBytesPerFrame = Pa_GetSampleSize(parameters->sampleFormat) * streamDescription->mChannelsPerFrame; + streamDescription->mBytesPerPacket = streamDescription->mBytesPerFrame * streamDescription->mFramesPerPacket; + + if (parameters->sampleFormat & paFloat32) { + streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsFloat; + streamDescription->mBitsPerChannel = 32; + } + else if (parameters->sampleFormat & paInt32) { + streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; + streamDescription->mBitsPerChannel = 32; + } + else if (parameters->sampleFormat & paInt24) { + streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; + streamDescription->mBitsPerChannel = 24; + } + else if (parameters->sampleFormat & paInt16) { + streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; + streamDescription->mBitsPerChannel = 16; + } + else if (parameters->sampleFormat & paInt8) { + streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; + streamDescription->mBitsPerChannel = 8; + } + else if (parameters->sampleFormat & paInt32) { + streamDescription->mBitsPerChannel = 8; + } + + return streamDescription; +} +*/ + +static PaStreamCallbackTimeInfo *InitializeTimeInfo(const AudioTimeStamp* now, const AudioTimeStamp* inputTime, const AudioTimeStamp* outputTime) +{ + PaStreamCallbackTimeInfo *timeInfo = PaUtil_AllocateMemory(sizeof(PaStreamCallbackTimeInfo)); + + timeInfo->inputBufferAdcTime = inputTime->mSampleTime; + timeInfo->currentTime = now->mSampleTime; + timeInfo->outputBufferDacTime = outputTime->mSampleTime; + + return timeInfo; +} + +// ===== support functions ===== +#pragma mark support functions + +static void CleanUp(PaMacCoreHostApiRepresentation *macCoreHostApi) +{ + if( macCoreHostApi->allocations ) + { + PaUtil_FreeAllAllocations( macCoreHostApi->allocations ); + PaUtil_DestroyAllocationGroup( macCoreHostApi->allocations ); + } + + PaUtil_FreeMemory( macCoreHostApi ); +} + +static PaError GetChannelInfo(PaDeviceInfo *deviceInfo, AudioDeviceID macCoreDeviceId, int isInput) +{ + UInt32 propSize; + PaError err = paNoError; + UInt32 i; + int numChannels = 0; + AudioBufferList *buflist; + + err = conv_err(AudioDeviceGetPropertyInfo(macCoreDeviceId, 0, isInput, kAudioDevicePropertyStreamConfiguration, &propSize, NULL)); + buflist = PaUtil_AllocateMemory(propSize); + err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyStreamConfiguration, &propSize, buflist)); + if (!err) { + for (i = 0; i < buflist->mNumberBuffers; ++i) { + numChannels += buflist->mBuffers[i].mNumberChannels; + } + + if (isInput) + deviceInfo->maxInputChannels = numChannels; + else + deviceInfo->maxOutputChannels = numChannels; + + int frameLatency; + propSize = sizeof(UInt32); + err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyLatency, &propSize, &frameLatency)); + if (!err) { + double secondLatency = frameLatency / deviceInfo->defaultSampleRate; + if (isInput) { + deviceInfo->defaultLowInputLatency = secondLatency; + deviceInfo->defaultHighInputLatency = secondLatency; + } + else { + deviceInfo->defaultLowOutputLatency = secondLatency; + deviceInfo->defaultHighOutputLatency = secondLatency; + } + } + } + PaUtil_FreeMemory(buflist); + + return err; +} + +static PaError InitializeDeviceInfo(PaMacCoreDeviceInfo *macCoreDeviceInfo, AudioDeviceID macCoreDeviceId, PaHostApiIndex hostApiIndex ) +{ + PaDeviceInfo *deviceInfo = &macCoreDeviceInfo->inheritedDeviceInfo; + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + + PaError err = paNoError; + UInt32 propSize; + + err = conv_err(AudioDeviceGetPropertyInfo(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, NULL)); + // FIXME: this allocation should be part of the allocations group + char *name = PaUtil_AllocateMemory(propSize); + err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, name)); + if (!err) { + deviceInfo->name = name; + } + + Float64 sampleRate; + propSize = sizeof(Float64); + err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyNominalSampleRate, &propSize, &sampleRate)); + if (!err) { + deviceInfo->defaultSampleRate = sampleRate; + } + + + // Get channel info + err = GetChannelInfo(deviceInfo, macCoreDeviceId, 1); + err = GetChannelInfo(deviceInfo, macCoreDeviceId, 0); + + return err; +} + +static PaError InitializeDeviceInfos( PaMacCoreHostApiRepresentation *macCoreHostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + PaUtilHostApiRepresentation *hostApi; + PaMacCoreDeviceInfo *deviceInfoArray; + + // initialise device counts and default devices under the assumption that there are no devices. These values are incremented below if and when devices are successfully initialized. + hostApi = &macCoreHostApi->inheritedHostApiRep; + hostApi->info.deviceCount = 0; + hostApi->info.defaultInputDevice = paNoDevice; + hostApi->info.defaultOutputDevice = paNoDevice; + + UInt32 propsize; + AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propsize, NULL); + int numDevices = propsize / sizeof(AudioDeviceID); + hostApi->info.deviceCount = numDevices; + if (numDevices > 0) { + hostApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + macCoreHostApi->allocations, sizeof(PaDeviceInfo*) * numDevices ); + if( !hostApi->deviceInfos ) + { + return paInsufficientMemory; + } + + // allocate all device info structs in a contiguous block + deviceInfoArray = (PaMacCoreDeviceInfo*)PaUtil_GroupAllocateMemory( + macCoreHostApi->allocations, sizeof(PaMacCoreDeviceInfo) * numDevices ); + if( !deviceInfoArray ) + { + return paInsufficientMemory; + } + + macCoreHostApi->macCoreDeviceIds = PaUtil_GroupAllocateMemory(macCoreHostApi->allocations, propsize); + AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propsize, macCoreHostApi->macCoreDeviceIds); + + AudioDeviceID defaultInputDevice, defaultOutputDevice; + propsize = sizeof(AudioDeviceID); + AudioHardwareGetProperty(kAudioHardwarePropertyDefaultInputDevice, &propsize, &defaultInputDevice); + AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &propsize, &defaultOutputDevice); + + UInt32 i; + for (i = 0; i < numDevices; ++i) { + if (macCoreHostApi->macCoreDeviceIds[i] == defaultInputDevice) { + hostApi->info.defaultInputDevice = i; + } + if (macCoreHostApi->macCoreDeviceIds[i] == defaultOutputDevice) { + hostApi->info.defaultOutputDevice = i; + } + InitializeDeviceInfo(&deviceInfoArray[i], macCoreHostApi->macCoreDeviceIds[i], hostApiIndex); + hostApi->deviceInfos[i] = &(deviceInfoArray[i].inheritedDeviceInfo); + } + } + + return result; +} + +static OSStatus CheckFormat(AudioDeviceID macCoreDeviceId, const PaStreamParameters *parameters, double sampleRate, int isInput) +{ + UInt32 propSize = sizeof(AudioStreamBasicDescription); + AudioStreamBasicDescription *streamDescription = PaUtil_AllocateMemory(propSize); + + streamDescription->mSampleRate = sampleRate; + streamDescription->mFormatID = 0; + streamDescription->mFormatFlags = 0; + streamDescription->mBytesPerPacket = 0; + streamDescription->mFramesPerPacket = 0; + streamDescription->mBytesPerFrame = 0; + streamDescription->mChannelsPerFrame = 0; + streamDescription->mBitsPerChannel = 0; + streamDescription->mReserved = 0; + + OSStatus result = AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyStreamFormatSupported, &propSize, streamDescription); + PaUtil_FreeMemory(streamDescription); + return result; +} + +static OSStatus CopyInputData(PaMacClientData* destination, const AudioBufferList *source, unsigned long frameCount) +{ + int frameSpacing, channelSpacing; + if (destination->inputSampleFormat & paNonInterleaved) { + frameSpacing = 1; + channelSpacing = destination->inputChannelCount; + } + else { + frameSpacing = destination->inputChannelCount; + channelSpacing = 1; + } + + AudioBuffer const *inputBuffer = &source->mBuffers[0]; + void *coreAudioBuffer = inputBuffer->mData; + void *portAudioBuffer = destination->inputBuffer; + UInt32 i, streamNumber, streamChannel; + for (i = streamNumber = streamChannel = 0; i < destination->inputChannelCount; ++i, ++streamChannel) { + if (streamChannel >= inputBuffer->mNumberChannels) { + ++streamNumber; + inputBuffer = &source->mBuffers[streamNumber]; + coreAudioBuffer = inputBuffer->mData; + streamChannel = 0; + } + destination->inputConverter(portAudioBuffer, frameSpacing, coreAudioBuffer, inputBuffer->mNumberChannels, frameCount, destination->ditherGenerator); + coreAudioBuffer += sizeof(Float32); + portAudioBuffer += Pa_GetSampleSize(destination->inputSampleFormat) * channelSpacing; + } + return noErr; +} + +static OSStatus CopyOutputData(AudioBufferList* destination, PaMacClientData *source, unsigned long frameCount) +{ + int frameSpacing, channelSpacing; + if (source->outputSampleFormat & paNonInterleaved) { + frameSpacing = 1; + channelSpacing = source->outputChannelCount; + } + else { + frameSpacing = source->outputChannelCount; + channelSpacing = 1; + } + + AudioBuffer *outputBuffer = &destination->mBuffers[0]; + void *coreAudioBuffer = outputBuffer->mData; + void *portAudioBuffer = source->outputBuffer; + UInt32 i, streamNumber, streamChannel; + for (i = streamNumber = streamChannel = 0; i < source->outputChannelCount; ++i, ++streamChannel) { + if (streamChannel >= outputBuffer->mNumberChannels) { + ++streamNumber; + outputBuffer = &destination->mBuffers[streamNumber]; + coreAudioBuffer = outputBuffer->mData; + streamChannel = 0; + } + source->outputConverter(coreAudioBuffer, outputBuffer->mNumberChannels, portAudioBuffer, frameSpacing, frameCount, NULL); + coreAudioBuffer += sizeof(Float32); + portAudioBuffer += Pa_GetSampleSize(source->outputSampleFormat) * channelSpacing; + } + return noErr; +} + +static OSStatus AudioIOProc( AudioDeviceID inDevice, + const AudioTimeStamp* inNow, + const AudioBufferList* inInputData, + const AudioTimeStamp* inInputTime, + AudioBufferList* outOutputData, + const AudioTimeStamp* inOutputTime, + void* inClientData) +{ + PaMacClientData *clientData = (PaMacClientData *)inClientData; + PaStreamCallbackTimeInfo *timeInfo = InitializeTimeInfo(inNow, inInputTime, inOutputTime); + + PaUtil_BeginCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer ); + + AudioBuffer *outputBuffer = &outOutputData->mBuffers[0]; + unsigned long frameCount = outputBuffer->mDataByteSize / (outputBuffer->mNumberChannels * sizeof(Float32)); + + if (clientData->inputBuffer) { + CopyInputData(clientData, inInputData, frameCount); + } + PaStreamCallbackResult result = clientData->callback(clientData->inputBuffer, clientData->outputBuffer, frameCount, timeInfo, paNoFlag, clientData->userData); + if (clientData->outputBuffer) { + CopyOutputData(outOutputData, clientData, frameCount); + } + + PaUtil_EndCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer, frameCount ); + + if (result == paComplete || result == paAbort) { + Pa_StopStream(clientData->stream); + } + + PaUtil_FreeMemory( timeInfo ); + return noErr; +} + +// This is not for input-only streams, this is for streams where the input device is different from the output device +static OSStatus AudioInputProc( AudioDeviceID inDevice, + const AudioTimeStamp* inNow, + const AudioBufferList* inInputData, + const AudioTimeStamp* inInputTime, + AudioBufferList* outOutputData, + const AudioTimeStamp* inOutputTime, + void* inClientData) +{ + PaMacClientData *clientData = (PaMacClientData *)inClientData; + PaStreamCallbackTimeInfo *timeInfo = InitializeTimeInfo(inNow, inInputTime, inOutputTime); + + PaUtil_BeginCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer ); + + AudioBuffer const *inputBuffer = &inInputData->mBuffers[0]; + unsigned long frameCount = inputBuffer->mDataByteSize / (inputBuffer->mNumberChannels * sizeof(Float32)); + + CopyInputData(clientData, inInputData, frameCount); + PaStreamCallbackResult result = clientData->callback(clientData->inputBuffer, clientData->outputBuffer, frameCount, timeInfo, paNoFlag, clientData->userData); + + PaUtil_EndCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer, frameCount ); + if( result == paComplete || result == paAbort ) + Pa_StopStream(clientData->stream); + PaUtil_FreeMemory( timeInfo ); + return noErr; +} + +// This is not for output-only streams, this is for streams where the input device is different from the output device +static OSStatus AudioOutputProc( AudioDeviceID inDevice, + const AudioTimeStamp* inNow, + const AudioBufferList* inInputData, + const AudioTimeStamp* inInputTime, + AudioBufferList* outOutputData, + const AudioTimeStamp* inOutputTime, + void* inClientData) +{ + PaMacClientData *clientData = (PaMacClientData *)inClientData; + //PaStreamCallbackTimeInfo *timeInfo = InitializeTimeInfo(inNow, inInputTime, inOutputTime); + + PaUtil_BeginCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer ); + + AudioBuffer *outputBuffer = &outOutputData->mBuffers[0]; + unsigned long frameCount = outputBuffer->mDataByteSize / (outputBuffer->mNumberChannels * sizeof(Float32)); + + //clientData->callback(NULL, clientData->outputBuffer, frameCount, timeInfo, paNoFlag, clientData->userData); + + CopyOutputData(outOutputData, clientData, frameCount); + + PaUtil_EndCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer, frameCount ); + return noErr; +} + +static PaError SetSampleRate(AudioDeviceID device, double sampleRate, int isInput) +{ + PaError result = paNoError; + + double actualSampleRate; + UInt32 propSize = sizeof(double); + result = conv_err(AudioDeviceSetProperty(device, NULL, 0, isInput, kAudioDevicePropertyNominalSampleRate, propSize, &sampleRate)); + + result = conv_err(AudioDeviceGetProperty(device, 0, isInput, kAudioDevicePropertyNominalSampleRate, &propSize, &actualSampleRate)); + + if (result == paNoError && actualSampleRate != sampleRate) { + result = paInvalidSampleRate; + } + + return result; +} + +static PaError SetFramesPerBuffer(AudioDeviceID device, unsigned long framesPerBuffer, int isInput) +{ + PaError result = paNoError; + UInt32 preferredFramesPerBuffer = framesPerBuffer; + // while (preferredFramesPerBuffer > UINT32_MAX) { + // preferredFramesPerBuffer /= 2; + // } + + UInt32 actualFramesPerBuffer; + UInt32 propSize = sizeof(UInt32); + result = conv_err(AudioDeviceSetProperty(device, NULL, 0, isInput, kAudioDevicePropertyBufferFrameSize, propSize, &preferredFramesPerBuffer)); + + result = conv_err(AudioDeviceGetProperty(device, 0, isInput, kAudioDevicePropertyBufferFrameSize, &propSize, &actualFramesPerBuffer)); + + if (result != paNoError) { + // do nothing + } + else if (actualFramesPerBuffer > framesPerBuffer) { + result = paBufferTooSmall; + } + else if (actualFramesPerBuffer < framesPerBuffer) { + result = paBufferTooBig; + } + + return result; +} + +static PaError SetUpUnidirectionalStream(AudioDeviceID device, double sampleRate, unsigned long framesPerBuffer, int isInput) +{ + PaError err = paNoError; + err = SetSampleRate(device, sampleRate, isInput); + if( err == paNoError ) + err = SetFramesPerBuffer(device, framesPerBuffer, isInput); + return err; +} + +// ===== PortAudio functions ===== +#pragma mark PortAudio functions + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + + PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif // __cplusplus + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation*)hostApi; + + CleanUp(macCoreHostApi); +} + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation*)hostApi; + PaDeviceInfo *deviceInfo; + + PaError result = paNoError; + if (inputParameters) { + deviceInfo = macCoreHostApi->inheritedHostApiRep.deviceInfos[inputParameters->device]; + if (inputParameters->channelCount > deviceInfo->maxInputChannels) + result = paInvalidChannelCount; + else if (CheckFormat(macCoreHostApi->macCoreDeviceIds[inputParameters->device], inputParameters, sampleRate, 1) != kAudioHardwareNoError) { + result = paInvalidSampleRate; + } + } + if (outputParameters && result == paNoError) { + deviceInfo = macCoreHostApi->inheritedHostApiRep.deviceInfos[outputParameters->device]; + if (outputParameters->channelCount > deviceInfo->maxOutputChannels) + result = paInvalidChannelCount; + else if (CheckFormat(macCoreHostApi->macCoreDeviceIds[outputParameters->device], outputParameters, sampleRate, 0) != kAudioHardwareNoError) { + result = paInvalidSampleRate; + } + } + + return result; +} + +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError err = paNoError; + PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation *)hostApi; + PaMacCoreStream *stream = PaUtil_AllocateMemory(sizeof(PaMacCoreStream)); + stream->isActive = 0; + stream->isStopped = 1; + stream->inputDevice = kAudioDeviceUnknown; + stream->outputDevice = kAudioDeviceUnknown; + + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + ( (streamCallback) + ? &macCoreHostApi->callbackStreamInterface + : &macCoreHostApi->blockingStreamInterface ), + streamCallback, userData ); + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + *s = (PaStream*)stream; + PaMacClientData *clientData = PaUtil_AllocateMemory(sizeof(PaMacClientData)); + clientData->stream = stream; + clientData->callback = streamCallback; + clientData->userData = userData; + clientData->inputBuffer = 0; + clientData->outputBuffer = 0; + clientData->ditherGenerator = PaUtil_AllocateMemory(sizeof(PaUtilTriangularDitherGenerator)); + PaUtil_InitializeTriangularDitherState(clientData->ditherGenerator); + + if (inputParameters != NULL) { + stream->inputDevice = macCoreHostApi->macCoreDeviceIds[inputParameters->device]; + clientData->inputConverter = PaUtil_SelectConverter(paFloat32, inputParameters->sampleFormat, streamFlags); + clientData->inputBuffer = PaUtil_AllocateMemory(Pa_GetSampleSize(inputParameters->sampleFormat) * framesPerBuffer * inputParameters->channelCount); + clientData->inputChannelCount = inputParameters->channelCount; + clientData->inputSampleFormat = inputParameters->sampleFormat; + err = SetUpUnidirectionalStream(stream->inputDevice, sampleRate, framesPerBuffer, 1); + } + + if (err == paNoError && outputParameters != NULL) { + stream->outputDevice = macCoreHostApi->macCoreDeviceIds[outputParameters->device]; + clientData->outputConverter = PaUtil_SelectConverter(outputParameters->sampleFormat, paFloat32, streamFlags); + clientData->outputBuffer = PaUtil_AllocateMemory(Pa_GetSampleSize(outputParameters->sampleFormat) * framesPerBuffer * outputParameters->channelCount); + clientData->outputChannelCount = outputParameters->channelCount; + clientData->outputSampleFormat = outputParameters->sampleFormat; + err = SetUpUnidirectionalStream(stream->outputDevice, sampleRate, framesPerBuffer, 0); + } + + if (inputParameters == NULL || outputParameters == NULL || stream->inputDevice == stream->outputDevice) { + AudioDeviceID device = (inputParameters == NULL) ? stream->outputDevice : stream->inputDevice; + + AudioDeviceAddIOProc(device, AudioIOProc, clientData); + } + else { + // using different devices for input and output + AudioDeviceAddIOProc(stream->inputDevice, AudioInputProc, clientData); + AudioDeviceAddIOProc(stream->outputDevice, AudioOutputProc, clientData); + } + + return err; +} + +// Note: When CloseStream() is called, the multi-api layer ensures that the stream has already been stopped or aborted. +static PaError CloseStream( PaStream* s ) +{ + PaError err = paNoError; + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + PaUtil_ResetCpuLoadMeasurer( &stream->cpuLoadMeasurer ); + + if (stream->inputDevice != kAudioDeviceUnknown) { + if (stream->outputDevice == kAudioDeviceUnknown || stream->outputDevice == stream->inputDevice) { + err = conv_err(AudioDeviceRemoveIOProc(stream->inputDevice, AudioIOProc)); + } + else { + err = conv_err(AudioDeviceRemoveIOProc(stream->inputDevice, AudioInputProc)); + err = conv_err(AudioDeviceRemoveIOProc(stream->outputDevice, AudioOutputProc)); + } + } + else { + err = conv_err(AudioDeviceRemoveIOProc(stream->outputDevice, AudioIOProc)); + } + + return err; +} + + +static PaError StartStream( PaStream *s ) +{ + PaError err = paNoError; + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + if (stream->inputDevice != kAudioDeviceUnknown) { + if (stream->outputDevice == kAudioDeviceUnknown || stream->outputDevice == stream->inputDevice) { + err = conv_err(AudioDeviceStart(stream->inputDevice, AudioIOProc)); + } + else { + err = conv_err(AudioDeviceStart(stream->inputDevice, AudioInputProc)); + err = conv_err(AudioDeviceStart(stream->outputDevice, AudioOutputProc)); + } + } + else { + err = conv_err(AudioDeviceStart(stream->outputDevice, AudioIOProc)); + } + + stream->isActive = 1; + stream->isStopped = 0; + return err; +} + +static PaError AbortStream( PaStream *s ) +{ + PaError err = paNoError; + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + if (stream->inputDevice != kAudioDeviceUnknown) { + if (stream->outputDevice == kAudioDeviceUnknown || stream->outputDevice == stream->inputDevice) { + err = conv_err(AudioDeviceStop(stream->inputDevice, AudioIOProc)); + } + else { + err = conv_err(AudioDeviceStop(stream->inputDevice, AudioInputProc)); + err = conv_err(AudioDeviceStop(stream->outputDevice, AudioOutputProc)); + } + } + else { + err = conv_err(AudioDeviceStop(stream->outputDevice, AudioIOProc)); + } + + stream->isActive = 0; + stream->isStopped = 1; + return err; +} + +static PaError StopStream( PaStream *s ) +{ + // TODO: this should be nicer than abort + return AbortStream(s); +} + +static PaError IsStreamStopped( PaStream *s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + return stream->isStopped; +} + + +static PaError IsStreamActive( PaStream *s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + return stream->isActive; +} + + +static PaTime GetStreamTime( PaStream *s ) +{ + OSStatus err; + PaTime result; + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + AudioTimeStamp *timeStamp = PaUtil_AllocateMemory(sizeof(AudioTimeStamp)); + if (stream->inputDevice != kAudioDeviceUnknown) { + err = AudioDeviceGetCurrentTime(stream->inputDevice, timeStamp); + } + else { + err = AudioDeviceGetCurrentTime(stream->outputDevice, timeStamp); + } + + result = err ? 0 : timeStamp->mSampleTime; + PaUtil_FreeMemory(timeStamp); + + return result; +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaMacCoreStream *stream = (PaMacCoreStream*)s; + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + + +// As separate stream interfaces are used for blocking and callback streams, the following functions can be guaranteed to only be called for blocking streams. + +static PaError ReadStream( PaStream* s, + void *buffer, + unsigned long frames ) +{ + return paInternalError; +} + + +static PaError WriteStream( PaStream* s, + const void *buffer, + unsigned long frames ) +{ + return paInternalError; +} + + +static signed long GetStreamReadAvailable( PaStream* s ) +{ + return paInternalError; +} + + +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + return paInternalError; +} + +// HostAPI-specific initialization function +PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation *)PaUtil_AllocateMemory( sizeof(PaMacCoreHostApiRepresentation) ); + if( !macCoreHostApi ) + { + result = paInsufficientMemory; + goto error; + } + + macCoreHostApi->allocations = PaUtil_CreateAllocationGroup(); + if( !macCoreHostApi->allocations ) + { + result = paInsufficientMemory; + goto error; + } + + *hostApi = &macCoreHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paCoreAudio; + (*hostApi)->info.name = "CoreAudio"; + + result = InitializeDeviceInfos(macCoreHostApi, hostApiIndex); + if (result != paNoError) { + goto error; + } + + // Set up the proper callbacks to this HostApi's functions + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &macCoreHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &macCoreHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + return result; + +error: + if( macCoreHostApi ) { + CleanUp(macCoreHostApi); + } + + return result; +} diff --git a/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c new file mode 100644 index 0000000000..63e616f052 --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c @@ -0,0 +1,701 @@ +/* + * Helper and utility functions for pa_mac_core.c (Apple AUHAL implementation) + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#include "pa_mac_core_utilities.h" +#include "pa_mac_core_internal.h" +#include +#include +#include +#include + +PaError PaMacCore_SetUnixError( int err, int line ) +{ + PaError ret; + const char *errorText; + + if( err == 0 ) + { + return paNoError; + } + + ret = paNoError; + errorText = strerror( err ); + + /** Map Unix error to PaError. Pretty much the only one that maps + is ENOMEM. */ + if( err == ENOMEM ) + ret = paInsufficientMemory; + else + ret = paInternalError; + + DBUG(("%d on line %d: msg='%s'\n", err, line, errorText)); + PaUtil_SetLastHostErrorInfo( paCoreAudio, err, errorText ); + + return ret; +} + +/* + * Translates MacOS generated errors into PaErrors + */ +PaError PaMacCore_SetError(OSStatus error, int line, int isError) +{ + /*FIXME: still need to handle possible ComponentResult values.*/ + /* unfortunately, they don't seem to be documented anywhere.*/ + PaError result; + const char *errorType; + const char *errorText; + + switch (error) { + case kAudioHardwareNoError: + return paNoError; + case kAudioHardwareNotRunningError: + errorText = "Audio Hardware Not Running"; + result = paInternalError; break; + case kAudioHardwareUnspecifiedError: + errorText = "Unspecified Audio Hardware Error"; + result = paInternalError; break; + case kAudioHardwareUnknownPropertyError: + errorText = "Audio Hardware: Unknown Property"; + result = paInternalError; break; + case kAudioHardwareBadPropertySizeError: + errorText = "Audio Hardware: Bad Property Size"; + result = paInternalError; break; + case kAudioHardwareIllegalOperationError: + errorText = "Audio Hardware: Illegal Operation"; + result = paInternalError; break; + case kAudioHardwareBadDeviceError: + errorText = "Audio Hardware: Bad Device"; + result = paInvalidDevice; break; + case kAudioHardwareBadStreamError: + errorText = "Audio Hardware: BadStream"; + result = paBadStreamPtr; break; + case kAudioHardwareUnsupportedOperationError: + errorText = "Audio Hardware: Unsupported Operation"; + result = paInternalError; break; + case kAudioDeviceUnsupportedFormatError: + errorText = "Audio Device: Unsupported Format"; + result = paSampleFormatNotSupported; break; + case kAudioDevicePermissionsError: + errorText = "Audio Device: Permissions Error"; + result = paDeviceUnavailable; break; + /* Audio Unit Errors: http://developer.apple.com/documentation/MusicAudio/Reference/CoreAudio/audio_units/chapter_5_section_3.html */ + case kAudioUnitErr_InvalidProperty: + errorText = "Audio Unit: Invalid Property"; + result = paInternalError; break; + case kAudioUnitErr_InvalidParameter: + errorText = "Audio Unit: Invalid Parameter"; + result = paInternalError; break; + case kAudioUnitErr_NoConnection: + errorText = "Audio Unit: No Connection"; + result = paInternalError; break; + case kAudioUnitErr_FailedInitialization: + errorText = "Audio Unit: Initialization Failed"; + result = paInternalError; break; + case kAudioUnitErr_TooManyFramesToProcess: + errorText = "Audio Unit: Too Many Frames"; + result = paInternalError; break; + case kAudioUnitErr_IllegalInstrument: + errorText = "Audio Unit: Illegal Instrument"; + result = paInternalError; break; + case kAudioUnitErr_InstrumentTypeNotFound: + errorText = "Audio Unit: Instrument Type Not Found"; + result = paInternalError; break; + case kAudioUnitErr_InvalidFile: + errorText = "Audio Unit: Invalid File"; + result = paInternalError; break; + case kAudioUnitErr_UnknownFileType: + errorText = "Audio Unit: Unknown File Type"; + result = paInternalError; break; + case kAudioUnitErr_FileNotSpecified: + errorText = "Audio Unit: File Not Specified"; + result = paInternalError; break; + case kAudioUnitErr_FormatNotSupported: + errorText = "Audio Unit: Format Not Supported"; + result = paInternalError; break; + case kAudioUnitErr_Uninitialized: + errorText = "Audio Unit: Unitialized"; + result = paInternalError; break; + case kAudioUnitErr_InvalidScope: + errorText = "Audio Unit: Invalid Scope"; + result = paInternalError; break; + case kAudioUnitErr_PropertyNotWritable: + errorText = "Audio Unit: PropertyNotWritable"; + result = paInternalError; break; + case kAudioUnitErr_InvalidPropertyValue: + errorText = "Audio Unit: Invalid Property Value"; + result = paInternalError; break; + case kAudioUnitErr_PropertyNotInUse: + errorText = "Audio Unit: Property Not In Use"; + result = paInternalError; break; + case kAudioUnitErr_Initialized: + errorText = "Audio Unit: Initialized"; + result = paInternalError; break; + case kAudioUnitErr_InvalidOfflineRender: + errorText = "Audio Unit: Invalid Offline Render"; + result = paInternalError; break; + case kAudioUnitErr_Unauthorized: + errorText = "Audio Unit: Unauthorized"; + result = paInternalError; break; + case kAudioUnitErr_CannotDoInCurrentContext: + errorText = "Audio Unit: cannot do in current context"; + result = paInternalError; break; + default: + errorText = "Unknown Error"; + result = paInternalError; + } + + if (isError) + errorType = "Error"; + else + errorType = "Warning"; + + char str[20]; + // see if it appears to be a 4-char-code + *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error); + if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) + { + str[0] = str[5] = '\''; + str[6] = '\0'; + } else { + // no, format it as an integer + sprintf(str, "%d", (int)error); + } + + DBUG(("%s on line %d: err='%s', msg=%s\n", errorType, line, str, errorText)); + + PaUtil_SetLastHostErrorInfo( paCoreAudio, error, errorText ); + + return result; +} + +/* + * This function computes an appropriate ring buffer size given + * a requested latency (in seconds), sample rate and framesPerBuffer. + * + * The returned ringBufferSize is computed using the following + * constraints: + * - it must be at least 4. + * - it must be at least 3x framesPerBuffer. + * - it must be at least 2x the suggestedLatency. + * - it must be a power of 2. + * This function attempts to compute the minimum such size. + * + * FEEDBACK: too liberal/conservative/another way? + */ +long computeRingBufferSize( const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + long inputFramesPerBuffer, + long outputFramesPerBuffer, + double sampleRate ) +{ + long ringSize; + int index; + int i; + double latency ; + long framesPerBuffer ; + + VVDBUG(( "computeRingBufferSize()\n" )); + + assert( inputParameters || outputParameters ); + + if( outputParameters && inputParameters ) + { + latency = MAX( inputParameters->suggestedLatency, outputParameters->suggestedLatency ); + framesPerBuffer = MAX( inputFramesPerBuffer, outputFramesPerBuffer ); + } + else if( outputParameters ) + { + latency = outputParameters->suggestedLatency; + framesPerBuffer = outputFramesPerBuffer ; + } + else /* we have inputParameters */ + { + latency = inputParameters->suggestedLatency; + framesPerBuffer = inputFramesPerBuffer ; + } + + ringSize = (long) ( latency * sampleRate * 2 + .5); + VDBUG( ( "suggested latency : %d\n", (int) (latency*sampleRate) ) ); + if( ringSize < framesPerBuffer * 3 ) + ringSize = framesPerBuffer * 3 ; + VDBUG(("framesPerBuffer:%d\n",(int)framesPerBuffer)); + VDBUG(("Ringbuffer size (1): %d\n", (int)ringSize )); + + /* make sure it's at least 4 */ + ringSize = MAX( ringSize, 4 ); + + /* round up to the next power of 2 */ + index = -1; + for( i=0; i> i & 0x01 ) + index = i; + assert( index > 0 ); + if( ringSize <= ( 0x01 << index ) ) + ringSize = 0x01 << index ; + else + ringSize = 0x01 << ( index + 1 ); + + VDBUG(( "Final Ringbuffer size (2): %d\n", (int)ringSize )); + return ringSize; +} + + +/* + * Durring testing of core audio, I found that serious crashes could occur + * if properties such as sample rate were changed multiple times in rapid + * succession. The function below could be used to with a condition variable. + * to prevent propertychanges from happening until the last property + * change is acknowledged. Instead, I implemented a busy-wait, which is simpler + * to implement b/c in second round of testing (nov '09) property changes occured + * quickly and so there was no real way to test the condition variable implementation. + * therefore, this function is not used, but it is aluded to in commented code below, + * since it represents a theoretically better implementation. + */ + +OSStatus propertyProc( + AudioDeviceID inDevice, + UInt32 inChannel, + Boolean isInput, + AudioDevicePropertyID inPropertyID, + void* inClientData ) +{ + // this is where we would set the condition variable + return noErr; +} + +/* sets the value of the given property and waits for the change to + be acknowledged, and returns the final value, which is not guaranteed + by this function to be the same as the desired value. Obviously, this + function can only be used for data whose input and output are the + same size and format, and their size and format are known in advance. + whether or not the call succeeds, if the data is successfully read, + it is returned in outPropertyData. If it is not read successfully, + outPropertyData is zeroed, which may or may not be useful in + determining if the property was read. */ +PaError AudioDeviceSetPropertyNowAndWaitForChange( + AudioDeviceID inDevice, + UInt32 inChannel, + Boolean isInput, + AudioDevicePropertyID inPropertyID, + UInt32 inPropertyDataSize, + const void *inPropertyData, + void *outPropertyData ) +{ + OSStatus macErr; + UInt32 outPropertyDataSize = inPropertyDataSize; + + /* First, see if it already has that value. If so, return. */ + macErr = AudioDeviceGetProperty( inDevice, inChannel, + isInput, inPropertyID, + &outPropertyDataSize, outPropertyData ); + if( macErr ) { + memset( outPropertyData, 0, inPropertyDataSize ); + goto failMac; + } + if( inPropertyDataSize!=outPropertyDataSize ) + return paInternalError; + if( 0==memcmp( outPropertyData, inPropertyData, outPropertyDataSize ) ) + return paNoError; + + /* Ideally, we'd use a condition variable to determine changes. + we could set that up here. */ + + /* If we were using a cond variable, we'd do something useful here, + but for now, this is just to make 10.6 happy. */ + macErr = AudioDeviceAddPropertyListener( inDevice, inChannel, isInput, + inPropertyID, propertyProc, + NULL ); + if( macErr ) + /* we couldn't add a listener. */ + goto failMac; + + /* set property */ + macErr = AudioDeviceSetProperty( inDevice, NULL, inChannel, + isInput, inPropertyID, + inPropertyDataSize, inPropertyData ); + if( macErr ) + goto failMac; + + /* busy-wait up to 30 seconds for the property to change */ + /* busy-wait is justified here only because the correct alternative (condition variable) + was hard to test, since most of the waiting ended up being for setting rather than + getting in OS X 10.5. This was not the case in earlier OS versions. */ + struct timeval tv1, tv2; + gettimeofday( &tv1, NULL ); + memcpy( &tv2, &tv1, sizeof( struct timeval ) ); + while( tv2.tv_sec - tv1.tv_sec < 30 ) { + /* now read the property back out */ + macErr = AudioDeviceGetProperty( inDevice, inChannel, + isInput, inPropertyID, + &outPropertyDataSize, outPropertyData ); + if( macErr ) { + memset( outPropertyData, 0, inPropertyDataSize ); + goto failMac; + } + /* and compare... */ + if( 0==memcmp( outPropertyData, inPropertyData, outPropertyDataSize ) ) { + AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc ); + return paNoError; + } + /* No match yet, so let's sleep and try again. */ + Pa_Sleep( 100 ); + gettimeofday( &tv2, NULL ); + } + DBUG( ("Timeout waiting for device setting.\n" ) ); + + AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc ); + return paNoError; + + failMac: + AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc ); + return ERR( macErr ); +} + +/* + * Sets the sample rate the HAL device. + * if requireExact: set the sample rate or fail. + * + * otherwise : set the exact sample rate. + * If that fails, check for available sample rates, and choose one + * higher than the requested rate. If there isn't a higher one, + * just use the highest available. + */ +PaError setBestSampleRateForDevice( const AudioDeviceID device, + const bool isOutput, + const bool requireExact, + const Float64 desiredSrate ) +{ + const bool isInput = isOutput ? 0 : 1; + Float64 srate; + UInt32 propsize = sizeof( Float64 ); + OSErr err; + AudioValueRange *ranges; + int i=0; + Float64 max = -1; /*the maximum rate available*/ + Float64 best = -1; /*the lowest sample rate still greater than desired rate*/ + VDBUG(("Setting sample rate for device %ld to %g.\n",device,(float)desiredSrate)); + + /* -- try setting the sample rate -- */ + srate = 0; + err = AudioDeviceSetPropertyNowAndWaitForChange( + device, 0, isInput, + kAudioDevicePropertyNominalSampleRate, + propsize, &desiredSrate, &srate ); + + /* -- if the rate agrees, and was changed, we are done -- */ + if( srate != 0 && srate == desiredSrate ) + return paNoError; + /* -- if the rate agrees, and we got no errors, we are done -- */ + if( !err && srate == desiredSrate ) + return paNoError; + /* -- we've failed if the rates disagree and we are setting input -- */ + if( requireExact ) + return paInvalidSampleRate; + + /* -- generate a list of available sample rates -- */ + err = AudioDeviceGetPropertyInfo( device, 0, isInput, + kAudioDevicePropertyAvailableNominalSampleRates, + &propsize, NULL ); + if( err ) + return ERR( err ); + ranges = (AudioValueRange *)calloc( 1, propsize ); + if( !ranges ) + return paInsufficientMemory; + err = AudioDeviceGetProperty( device, 0, isInput, + kAudioDevicePropertyAvailableNominalSampleRates, + &propsize, ranges ); + if( err ) + { + free( ranges ); + return ERR( err ); + } + VDBUG(("Requested sample rate of %g was not available.\n", (float)desiredSrate)); + VDBUG(("%lu Available Sample Rates are:\n",propsize/sizeof(AudioValueRange))); +#ifdef MAC_CORE_VERBOSE_DEBUG + for( i=0; i max ) max = ranges[i].mMaximum; + if( ranges[i].mMinimum > desiredSrate ) { + if( best < 0 ) + best = ranges[i].mMinimum; + else if( ranges[i].mMinimum < best ) + best = ranges[i].mMinimum; + } + } + if( best < 0 ) + best = max; + VDBUG( ("Maximum Rate %g. best is %g.\n", max, best ) ); + free( ranges ); + + /* -- set the sample rate -- */ + propsize = sizeof( best ); + srate = 0; + err = AudioDeviceSetPropertyNowAndWaitForChange( + device, 0, isInput, + kAudioDevicePropertyNominalSampleRate, + propsize, &best, &srate ); + + /* -- if the set rate matches, we are done -- */ + if( srate != 0 && srate == best ) + return paNoError; + + if( err ) + return ERR( err ); + + /* -- otherwise, something wierd happened: we didn't set the rate, and we got no errors. Just bail. */ + return paInternalError; +} + + +/* + Attempts to set the requestedFramesPerBuffer. If it can't set the exact + value, it settles for something smaller if available. If nothing smaller + is available, it uses the smallest available size. + actualFramesPerBuffer will be set to the actual value on successful return. + OK to pass NULL to actualFramesPerBuffer. + The logic is very simmilar too setBestSampleRate only failure here is + not usually catastrophic. +*/ +PaError setBestFramesPerBuffer( const AudioDeviceID device, + const bool isOutput, + UInt32 requestedFramesPerBuffer, + UInt32 *actualFramesPerBuffer ) +{ + UInt32 afpb; + const bool isInput = !isOutput; + UInt32 propsize = sizeof(UInt32); + OSErr err; + AudioValueRange range; + + if( actualFramesPerBuffer == NULL ) + { + actualFramesPerBuffer = &afpb; + } + + /* -- try and set exact FPB -- */ + err = AudioDeviceSetProperty( device, NULL, 0, isInput, + kAudioDevicePropertyBufferFrameSize, + propsize, &requestedFramesPerBuffer); + err = AudioDeviceGetProperty( device, 0, isInput, + kAudioDevicePropertyBufferFrameSize, + &propsize, actualFramesPerBuffer); + if( err ) + { + return ERR( err ); + } + // Did we get the size we asked for? + if( *actualFramesPerBuffer == requestedFramesPerBuffer ) + { + return paNoError; /* we are done */ + } + + // Clip requested value against legal range for the device. + propsize = sizeof(AudioValueRange); + err = AudioDeviceGetProperty( device, 0, isInput, + kAudioDevicePropertyBufferFrameSizeRange, + &propsize, &range ); + if( err ) + { + return ERR( err ); + } + if( requestedFramesPerBuffer < range.mMinimum ) + { + requestedFramesPerBuffer = range.mMinimum; + } + else if( requestedFramesPerBuffer > range.mMaximum ) + { + requestedFramesPerBuffer = range.mMaximum; + } + + /* --- set the buffer size (ignore errors) -- */ + propsize = sizeof( UInt32 ); + err = AudioDeviceSetProperty( device, NULL, 0, isInput, + kAudioDevicePropertyBufferFrameSize, + propsize, &requestedFramesPerBuffer ); + /* --- read the property to check that it was set -- */ + err = AudioDeviceGetProperty( device, 0, isInput, + kAudioDevicePropertyBufferFrameSize, + &propsize, actualFramesPerBuffer ); + + if( err ) + return ERR( err ); + + return paNoError; +} + +/********************** + * + * XRun stuff + * + **********************/ + +struct PaMacXRunListNode_s { + PaMacCoreStream *stream; + struct PaMacXRunListNode_s *next; +} ; + +typedef struct PaMacXRunListNode_s PaMacXRunListNode; + +/** Always empty, so that it can always be the one returned by + addToXRunListenerList. note that it's not a pointer. */ +static PaMacXRunListNode firstXRunListNode; +static int xRunListSize; +static pthread_mutex_t xrunMutex; + +OSStatus xrunCallback( + AudioDeviceID inDevice, + UInt32 inChannel, + Boolean isInput, + AudioDevicePropertyID inPropertyID, + void* inClientData) +{ + PaMacXRunListNode *node = (PaMacXRunListNode *) inClientData; + + int ret = pthread_mutex_trylock( &xrunMutex ) ; + + if( ret == 0 ) { + + node = node->next ; //skip the first node + + for( ; node; node=node->next ) { + PaMacCoreStream *stream = node->stream; + + if( stream->state != ACTIVE ) + continue; //if the stream isn't active, we don't care if the device is dropping + + if( isInput ) { + if( stream->inputDevice == inDevice ) + OSAtomicOr32( paInputOverflow, &stream->xrunFlags ); + } else { + if( stream->outputDevice == inDevice ) + OSAtomicOr32( paOutputUnderflow, &stream->xrunFlags ); + } + } + + pthread_mutex_unlock( &xrunMutex ); + } + + return 0; +} + +int initializeXRunListenerList() +{ + xRunListSize = 0; + bzero( (void *) &firstXRunListNode, sizeof(firstXRunListNode) ); + return pthread_mutex_init( &xrunMutex, NULL ); +} +int destroyXRunListenerList() +{ + PaMacXRunListNode *node; + node = firstXRunListNode.next; + while( node ) { + PaMacXRunListNode *tmp = node; + node = node->next; + free( tmp ); + } + xRunListSize = 0; + return pthread_mutex_destroy( &xrunMutex ); +} + +void *addToXRunListenerList( void *stream ) +{ + pthread_mutex_lock( &xrunMutex ); + PaMacXRunListNode *newNode; + // setup new node: + newNode = (PaMacXRunListNode *) malloc( sizeof( PaMacXRunListNode ) ); + newNode->stream = (PaMacCoreStream *) stream; + newNode->next = firstXRunListNode.next; + // insert: + firstXRunListNode.next = newNode; + pthread_mutex_unlock( &xrunMutex ); + + return &firstXRunListNode; +} + +int removeFromXRunListenerList( void *stream ) +{ + pthread_mutex_lock( &xrunMutex ); + PaMacXRunListNode *node, *prev; + prev = &firstXRunListNode; + node = firstXRunListNode.next; + while( node ) { + if( node->stream == stream ) { + //found it: + --xRunListSize; + prev->next = node->next; + free( node ); + pthread_mutex_unlock( &xrunMutex ); + return xRunListSize; + } + prev = prev->next; + node = node->next; + } + + pthread_mutex_unlock( &xrunMutex ); + // failure + return xRunListSize; +} + diff --git a/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h new file mode 100644 index 0000000000..7c4afe52ca --- /dev/null +++ b/Externals/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h @@ -0,0 +1,218 @@ +/* + * Helper and utility functions for pa_mac_core.c (Apple AUHAL implementation) + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#ifndef PA_MAC_CORE_UTILITIES_H__ +#define PA_MAC_CORE_UTILITIES_H__ + +#include +#include "portaudio.h" +#include "pa_util.h" +#include +#include + +#ifndef MIN +#define MIN(a, b) (((a)<(b))?(a):(b)) +#endif + +#ifndef MAX +#define MAX(a, b) (((a)<(b))?(b):(a)) +#endif + +#define ERR(mac_error) PaMacCore_SetError(mac_error, __LINE__, 1 ) +#define WARNING(mac_error) PaMacCore_SetError(mac_error, __LINE__, 0 ) + + +/* Help keep track of AUHAL element numbers */ +#define INPUT_ELEMENT (1) +#define OUTPUT_ELEMENT (0) + +/* Normal level of debugging: fine for most apps that don't mind the occational warning being printf'ed */ +/* + */ +#define MAC_CORE_DEBUG +#ifdef MAC_CORE_DEBUG +# define DBUG(MSG) do { printf("||PaMacCore (AUHAL)|| "); printf MSG ; fflush(stdout); } while(0) +#else +# define DBUG(MSG) +#endif + +/* Verbose Debugging: useful for developement */ +/* +#define MAC_CORE_VERBOSE_DEBUG +*/ +#ifdef MAC_CORE_VERBOSE_DEBUG +# define VDBUG(MSG) do { printf("||PaMacCore (v )|| "); printf MSG ; fflush(stdout); } while(0) +#else +# define VDBUG(MSG) +#endif + +/* Very Verbose Debugging: Traces every call. */ +/* +#define MAC_CORE_VERY_VERBOSE_DEBUG + */ +#ifdef MAC_CORE_VERY_VERBOSE_DEBUG +# define VVDBUG(MSG) do { printf("||PaMacCore (vv)|| "); printf MSG ; fflush(stdout); } while(0) +#else +# define VVDBUG(MSG) +#endif + + + + + +#define UNIX_ERR(err) PaMacCore_SetUnixError( err, __LINE__ ) + +PaError PaMacCore_SetUnixError( int err, int line ); + +/* + * Translates MacOS generated errors into PaErrors + */ +PaError PaMacCore_SetError(OSStatus error, int line, int isError); + +/* + * This function computes an appropriate ring buffer size given + * a requested latency (in seconds), sample rate and framesPerBuffer. + * + * The returned ringBufferSize is computed using the following + * constraints: + * - it must be at least 4. + * - it must be at least 3x framesPerBuffer. + * - it must be at least 2x the suggestedLatency. + * - it must be a power of 2. + * This function attempts to compute the minimum such size. + * + */ +long computeRingBufferSize( const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + long inputFramesPerBuffer, + long outputFramesPerBuffer, + double sampleRate ); + +OSStatus propertyProc( + AudioDeviceID inDevice, + UInt32 inChannel, + Boolean isInput, + AudioDevicePropertyID inPropertyID, + void* inClientData ); + +/* sets the value of the given property and waits for the change to + be acknowledged, and returns the final value, which is not guaranteed + by this function to be the same as the desired value. Obviously, this + function can only be used for data whose input and output are the + same size and format, and their size and format are known in advance.*/ +PaError AudioDeviceSetPropertyNowAndWaitForChange( + AudioDeviceID inDevice, + UInt32 inChannel, + Boolean isInput, + AudioDevicePropertyID inPropertyID, + UInt32 inPropertyDataSize, + const void *inPropertyData, + void *outPropertyData ); + +/* + * Sets the sample rate the HAL device. + * if requireExact: set the sample rate or fail. + * + * otherwise : set the exact sample rate. + * If that fails, check for available sample rates, and choose one + * higher than the requested rate. If there isn't a higher one, + * just use the highest available. + */ +PaError setBestSampleRateForDevice( const AudioDeviceID device, + const bool isOutput, + const bool requireExact, + const Float64 desiredSrate ); +/* + Attempts to set the requestedFramesPerBuffer. If it can't set the exact + value, it settles for something smaller if available. If nothing smaller + is available, it uses the smallest available size. + actualFramesPerBuffer will be set to the actual value on successful return. + OK to pass NULL to actualFramesPerBuffer. + The logic is very simmilar too setBestSampleRate only failure here is + not usually catastrophic. +*/ +PaError setBestFramesPerBuffer( const AudioDeviceID device, + const bool isOutput, + UInt32 requestedFramesPerBuffer, + UInt32 *actualFramesPerBuffer ); + + +/********************* + * + * xrun handling + * + *********************/ + +OSStatus xrunCallback( + AudioDeviceID inDevice, + UInt32 inChannel, + Boolean isInput, + AudioDevicePropertyID inPropertyID, + void* inClientData ) ; + +/** returns zero on success or a unix style error code. */ +int initializeXRunListenerList(); +/** returns zero on success or a unix style error code. */ +int destroyXRunListenerList(); + +/**Returns the list, so that it can be passed to CorAudio.*/ +void *addToXRunListenerList( void *stream ); +/**Returns the number of Listeners in the list remaining.*/ +int removeFromXRunListenerList( void *stream ); + +#endif /* PA_MAC_CORE_UTILITIES_H__*/ diff --git a/Externals/portaudio/src/hostapi/dsound/pa_win_ds.c b/Externals/portaudio/src/hostapi/dsound/pa_win_ds.c new file mode 100644 index 0000000000..77d1924955 --- /dev/null +++ b/Externals/portaudio/src/hostapi/dsound/pa_win_ds.c @@ -0,0 +1,3154 @@ +/* + * $Id: pa_win_ds.c 1779 2011-11-10 14:51:15Z rossb $ + * Portable Audio I/O Library DirectSound implementation + * + * Authors: Phil Burk, Robert Marsanyi & Ross Bencina + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2007 Ross Bencina, Phil Burk, Robert Marsanyi + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup hostapi_src +*/ + +/* Until May 2011 PA/DS has used a multimedia timer to perform the callback. + We're replacing this with a new implementation using a thread and a different timer mechanim. + Defining PA_WIN_DS_USE_WMME_TIMER uses the old (pre-May 2011) behavior. +*/ +//#define PA_WIN_DS_USE_WMME_TIMER + +#include +#include +#include /* strlen() */ + +#define _WIN32_WINNT 0x0400 /* required to get waitable timer APIs */ +#include /* make sure ds guids get defined */ +#include +#include + + +/* + Use the earliest version of DX required, no need to polute the namespace +*/ +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE +#define DIRECTSOUND_VERSION 0x0800 +#else +#define DIRECTSOUND_VERSION 0x0300 +#endif +#include +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO +#include +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ +#ifndef PA_WIN_DS_USE_WMME_TIMER +#ifndef UNDER_CE +#include +#endif +#endif + +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "pa_debugprint.h" + +#include "pa_win_ds.h" +#include "pa_win_ds_dynlink.h" +#include "pa_win_waveformat.h" +#include "pa_win_wdmks_utils.h" +#include "pa_win_coinitialize.h" + +#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */ +#pragma comment( lib, "dsound.lib" ) +#pragma comment( lib, "winmm.lib" ) +#pragma comment( lib, "kernel32.lib" ) +#endif + +/* use CreateThread for CYGWIN, _beginthreadex for all others */ +#ifndef PA_WIN_DS_USE_WMME_TIMER + +#if !defined(__CYGWIN__) && !defined(UNDER_CE) +#define CREATE_THREAD (HANDLE)_beginthreadex +#undef CLOSE_THREAD_HANDLE /* as per documentation we don't call CloseHandle on a thread created with _beginthreadex */ +#define PA_THREAD_FUNC static unsigned WINAPI +#define PA_THREAD_ID unsigned +#else +#define CREATE_THREAD CreateThread +#define CLOSE_THREAD_HANDLE CloseHandle +#define PA_THREAD_FUNC static DWORD WINAPI +#define PA_THREAD_ID DWORD +#endif + +#if (defined(UNDER_CE)) +#pragma comment(lib, "Coredll.lib") +#elif (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */ +#pragma comment(lib, "winmm.lib") +#endif + +PA_THREAD_FUNC ProcessingThreadProc( void *pArg ); + +#if !defined(UNDER_CE) +#define PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT /* use waitable timer where possible, otherwise we use a WaitForSingleObject timeout */ +#endif + +#endif /* !PA_WIN_DS_USE_WMME_TIMER */ + + +/* + provided in newer platform sdks and x64 + */ +#ifndef DWORD_PTR + #if defined(_WIN64) + #define DWORD_PTR unsigned __int64 + #else + #define DWORD_PTR unsigned long + #endif +#endif + +#define PRINT(x) PA_DEBUG(x); +#define ERR_RPT(x) PRINT(x) +#define DBUG(x) PRINT(x) +#define DBUGX(x) PRINT(x) + +#define PA_USE_HIGH_LATENCY (0) +#if PA_USE_HIGH_LATENCY +#define PA_DS_WIN_9X_DEFAULT_LATENCY_ (.500) +#define PA_DS_WIN_NT_DEFAULT_LATENCY_ (.600) +#else +#define PA_DS_WIN_9X_DEFAULT_LATENCY_ (.140) +#define PA_DS_WIN_NT_DEFAULT_LATENCY_ (.280) +#endif + +#define PA_DS_WIN_WDM_DEFAULT_LATENCY_ (.120) + +#define SECONDS_PER_MSEC (0.001) +#define MSECS_PER_SECOND (1000) + +/* prototypes for functions declared in this file */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +PaError PaWinDs_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream* stream ); +static signed long GetStreamWriteAvailable( PaStream* stream ); + + +/* FIXME: should convert hr to a string */ +#define PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ) \ + PaUtil_SetLastHostErrorInfo( paDirectSound, hr, "DirectSound error" ) + +/************************************************* DX Prototypes **********/ +static BOOL CALLBACK CollectGUIDsProc(LPGUID lpGUID, + LPCTSTR lpszDesc, + LPCTSTR lpszDrvName, + LPVOID lpContext ); + +/************************************************************************************/ +/********************** Structures **************************************************/ +/************************************************************************************/ +/* PaWinDsHostApiRepresentation - host api datastructure specific to this implementation */ + +typedef struct PaWinDsDeviceInfo +{ + PaDeviceInfo inheritedDeviceInfo; + GUID guid; + GUID *lpGUID; + double sampleRates[3]; + char deviceInputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/ + char deviceOutputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/ +} PaWinDsDeviceInfo; + +typedef struct +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + /* implementation specific data goes here */ + + PaWinUtilComInitializationResult comInitializationResult; + +} PaWinDsHostApiRepresentation; + + +/* PaWinDsStream - a stream data structure specifically for this implementation */ + +typedef struct PaWinDsStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + +/* DirectSound specific data. */ +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE + LPDIRECTSOUNDFULLDUPLEX8 pDirectSoundFullDuplex8; +#endif + +/* Output */ + LPDIRECTSOUND pDirectSound; + LPDIRECTSOUNDBUFFER pDirectSoundPrimaryBuffer; + LPDIRECTSOUNDBUFFER pDirectSoundOutputBuffer; + DWORD outputBufferWriteOffsetBytes; /* last write position */ + INT outputBufferSizeBytes; + INT outputFrameSizeBytes; + /* Try to detect play buffer underflows. */ + LARGE_INTEGER perfCounterTicksPerBuffer; /* counter ticks it should take to play a full buffer */ + LARGE_INTEGER previousPlayTime; + DWORD previousPlayCursor; + UINT outputUnderflowCount; + BOOL outputIsRunning; + INT finalZeroBytesWritten; /* used to determine when we've flushed the whole buffer */ + +/* Input */ + LPDIRECTSOUNDCAPTURE pDirectSoundCapture; + LPDIRECTSOUNDCAPTUREBUFFER pDirectSoundInputBuffer; + INT inputFrameSizeBytes; + UINT readOffset; /* last read position */ + UINT inputBufferSizeBytes; + + + int hostBufferSizeFrames; /* input and output host ringbuffers have the same number of frames */ + double framesWritten; + double secondsPerHostByte; /* Used to optimize latency calculation for outTime */ + double pollingPeriodSeconds; + + PaStreamCallbackFlags callbackFlags; + + PaStreamFlags streamFlags; + int callbackResult; + HANDLE processingCompleted; + +/* FIXME - move all below to PaUtilStreamRepresentation */ + volatile int isStarted; + volatile int isActive; + volatile int stopProcessing; /* stop thread once existing buffers have been returned */ + volatile int abortProcessing; /* stop thread immediately */ + + UINT systemTimerResolutionPeriodMs; /* set to 0 if we were unable to set the timer period */ + +#ifdef PA_WIN_DS_USE_WMME_TIMER + MMRESULT timerID; +#else + +#ifdef PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT + HANDLE waitableTimer; +#endif + HANDLE processingThread; + PA_THREAD_ID processingThreadId; + HANDLE processingThreadCompleted; +#endif + +} PaWinDsStream; + + +/* Set minimal latency based on the current OS version. + * NT has higher latency. + */ +static double PaWinDS_GetMinSystemLatencySeconds( void ) +{ + double minLatencySeconds; + /* Set minimal latency based on whether NT or other OS. + * NT has higher latency. + */ + OSVERSIONINFO osvi; + osvi.dwOSVersionInfoSize = sizeof( osvi ); + GetVersionEx( &osvi ); + DBUG(("PA - PlatformId = 0x%x\n", osvi.dwPlatformId )); + DBUG(("PA - MajorVersion = 0x%x\n", osvi.dwMajorVersion )); + DBUG(("PA - MinorVersion = 0x%x\n", osvi.dwMinorVersion )); + /* Check for NT */ + if( (osvi.dwMajorVersion == 4) && (osvi.dwPlatformId == 2) ) + { + minLatencySeconds = PA_DS_WIN_NT_DEFAULT_LATENCY_; + } + else if(osvi.dwMajorVersion >= 5) + { + minLatencySeconds = PA_DS_WIN_WDM_DEFAULT_LATENCY_; + } + else + { + minLatencySeconds = PA_DS_WIN_9X_DEFAULT_LATENCY_; + } + return minLatencySeconds; +} + + +/************************************************************************* +** Return minimum workable latency required for this host. This is returned +** As the default stream latency in PaDeviceInfo. +** Latency can be optionally set by user by setting an environment variable. +** For example, to set latency to 200 msec, put: +** +** set PA_MIN_LATENCY_MSEC=200 +** +** in the AUTOEXEC.BAT file and reboot. +** If the environment variable is not set, then the latency will be determined +** based on the OS. Windows NT has higher latency than Win95. +*/ +#define PA_LATENCY_ENV_NAME ("PA_MIN_LATENCY_MSEC") +#define PA_ENV_BUF_SIZE (32) + +static double PaWinDs_GetMinLatencySeconds( double sampleRate ) +{ + char envbuf[PA_ENV_BUF_SIZE]; + DWORD hresult; + double minLatencySeconds = 0; + + /* Let user determine minimal latency by setting environment variable. */ + hresult = GetEnvironmentVariable( PA_LATENCY_ENV_NAME, envbuf, PA_ENV_BUF_SIZE ); + if( (hresult > 0) && (hresult < PA_ENV_BUF_SIZE) ) + { + minLatencySeconds = atoi( envbuf ) * SECONDS_PER_MSEC; + } + else + { + minLatencySeconds = PaWinDS_GetMinSystemLatencySeconds(); +#if PA_USE_HIGH_LATENCY + PRINT(("PA - Minimum Latency set to %f msec!\n", minLatencySeconds * MSECS_PER_SECOND )); +#endif + } + + return minLatencySeconds; +} + + +/************************************************************************************ +** Duplicate the input string using the allocations allocator. +** A NULL string is converted to a zero length string. +** If memory cannot be allocated, NULL is returned. +**/ +static char *DuplicateDeviceNameString( PaUtilAllocationGroup *allocations, const char* src ) +{ + char *result = 0; + + if( src != NULL ) + { + size_t len = strlen(src); + result = (char*)PaUtil_GroupAllocateMemory( allocations, (long)(len + 1) ); + if( result ) + memcpy( (void *) result, src, len+1 ); + } + else + { + result = (char*)PaUtil_GroupAllocateMemory( allocations, 1 ); + if( result ) + result[0] = '\0'; + } + + return result; +} + +/************************************************************************************ +** DSDeviceNameAndGUID, DSDeviceNameAndGUIDVector used for collecting preliminary +** information during device enumeration. +*/ +typedef struct DSDeviceNameAndGUID{ + char *name; // allocated from parent's allocations, never deleted by this structure + GUID guid; + LPGUID lpGUID; + void *pnpInterface; // wchar_t* interface path, allocated using the DS host api's allocation group +} DSDeviceNameAndGUID; + +typedef struct DSDeviceNameAndGUIDVector{ + PaUtilAllocationGroup *allocations; + PaError enumerationError; + + int count; + int free; + DSDeviceNameAndGUID *items; // Allocated using LocalAlloc() +} DSDeviceNameAndGUIDVector; + +typedef struct DSDeviceNamesAndGUIDs{ + PaWinDsHostApiRepresentation *winDsHostApi; + DSDeviceNameAndGUIDVector inputNamesAndGUIDs; + DSDeviceNameAndGUIDVector outputNamesAndGUIDs; +} DSDeviceNamesAndGUIDs; + +static PaError InitializeDSDeviceNameAndGUIDVector( + DSDeviceNameAndGUIDVector *guidVector, PaUtilAllocationGroup *allocations ) +{ + PaError result = paNoError; + + guidVector->allocations = allocations; + guidVector->enumerationError = paNoError; + + guidVector->count = 0; + guidVector->free = 8; + guidVector->items = (DSDeviceNameAndGUID*)LocalAlloc( LMEM_FIXED, sizeof(DSDeviceNameAndGUID) * guidVector->free ); + if( guidVector->items == NULL ) + result = paInsufficientMemory; + + return result; +} + +static PaError ExpandDSDeviceNameAndGUIDVector( DSDeviceNameAndGUIDVector *guidVector ) +{ + PaError result = paNoError; + DSDeviceNameAndGUID *newItems; + int i; + + /* double size of vector */ + int size = guidVector->count + guidVector->free; + guidVector->free += size; + + newItems = (DSDeviceNameAndGUID*)LocalAlloc( LMEM_FIXED, sizeof(DSDeviceNameAndGUID) * size * 2 ); + if( newItems == NULL ) + { + result = paInsufficientMemory; + } + else + { + for( i=0; i < guidVector->count; ++i ) + { + newItems[i].name = guidVector->items[i].name; + if( guidVector->items[i].lpGUID == NULL ) + { + newItems[i].lpGUID = NULL; + } + else + { + newItems[i].lpGUID = &newItems[i].guid; + memcpy( &newItems[i].guid, guidVector->items[i].lpGUID, sizeof(GUID) );; + } + newItems[i].pnpInterface = guidVector->items[i].pnpInterface; + } + + LocalFree( guidVector->items ); + guidVector->items = newItems; + } + + return result; +} + +/* + it's safe to call DSDeviceNameAndGUIDVector multiple times +*/ +static PaError TerminateDSDeviceNameAndGUIDVector( DSDeviceNameAndGUIDVector *guidVector ) +{ + PaError result = paNoError; + + if( guidVector->items != NULL ) + { + if( LocalFree( guidVector->items ) != NULL ) + result = paInsufficientMemory; /** @todo this isn't the correct error to return from a deallocation failure */ + + guidVector->items = NULL; + } + + return result; +} + +/************************************************************************************ +** Collect preliminary device information during DirectSound enumeration +*/ +static BOOL CALLBACK CollectGUIDsProc(LPGUID lpGUID, + LPCTSTR lpszDesc, + LPCTSTR lpszDrvName, + LPVOID lpContext ) +{ + DSDeviceNameAndGUIDVector *namesAndGUIDs = (DSDeviceNameAndGUIDVector*)lpContext; + PaError error; + + (void) lpszDrvName; /* unused variable */ + + if( namesAndGUIDs->free == 0 ) + { + error = ExpandDSDeviceNameAndGUIDVector( namesAndGUIDs ); + if( error != paNoError ) + { + namesAndGUIDs->enumerationError = error; + return FALSE; + } + } + + /* Set GUID pointer, copy GUID to storage in DSDeviceNameAndGUIDVector. */ + if( lpGUID == NULL ) + { + namesAndGUIDs->items[namesAndGUIDs->count].lpGUID = NULL; + } + else + { + namesAndGUIDs->items[namesAndGUIDs->count].lpGUID = + &namesAndGUIDs->items[namesAndGUIDs->count].guid; + + memcpy( &namesAndGUIDs->items[namesAndGUIDs->count].guid, lpGUID, sizeof(GUID) ); + } + + namesAndGUIDs->items[namesAndGUIDs->count].name = + DuplicateDeviceNameString( namesAndGUIDs->allocations, lpszDesc ); + if( namesAndGUIDs->items[namesAndGUIDs->count].name == NULL ) + { + namesAndGUIDs->enumerationError = paInsufficientMemory; + return FALSE; + } + + namesAndGUIDs->items[namesAndGUIDs->count].pnpInterface = 0; + + ++namesAndGUIDs->count; + --namesAndGUIDs->free; + + return TRUE; +} + + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + +static void *DuplicateWCharString( PaUtilAllocationGroup *allocations, wchar_t *source ) +{ + size_t len; + wchar_t *result; + + len = wcslen( source ); + result = (wchar_t*)PaUtil_GroupAllocateMemory( allocations, (long) ((len+1) * sizeof(wchar_t)) ); + wcscpy( result, source ); + return result; +} + +static BOOL CALLBACK KsPropertySetEnumerateCallback( PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data, LPVOID context ) +{ + int i; + DSDeviceNamesAndGUIDs *deviceNamesAndGUIDs = (DSDeviceNamesAndGUIDs*)context; + + if( data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ) + { + for( i=0; i < deviceNamesAndGUIDs->outputNamesAndGUIDs.count; ++i ) + { + if( deviceNamesAndGUIDs->outputNamesAndGUIDs.items[i].lpGUID + && memcmp( &data->DeviceId, deviceNamesAndGUIDs->outputNamesAndGUIDs.items[i].lpGUID, sizeof(GUID) ) == 0 ) + { + deviceNamesAndGUIDs->outputNamesAndGUIDs.items[i].pnpInterface = + (char*)DuplicateWCharString( deviceNamesAndGUIDs->winDsHostApi->allocations, data->Interface ); + break; + } + } + } + else if( data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ) + { + for( i=0; i < deviceNamesAndGUIDs->inputNamesAndGUIDs.count; ++i ) + { + if( deviceNamesAndGUIDs->inputNamesAndGUIDs.items[i].lpGUID + && memcmp( &data->DeviceId, deviceNamesAndGUIDs->inputNamesAndGUIDs.items[i].lpGUID, sizeof(GUID) ) == 0 ) + { + deviceNamesAndGUIDs->inputNamesAndGUIDs.items[i].pnpInterface = + (char*)DuplicateWCharString( deviceNamesAndGUIDs->winDsHostApi->allocations, data->Interface ); + break; + } + } + } + + return TRUE; +} + + +static GUID pawin_CLSID_DirectSoundPrivate = +{ 0x11ab3ec0, 0x25ec, 0x11d1, 0xa4, 0xd8, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca }; + +static GUID pawin_DSPROPSETID_DirectSoundDevice = +{ 0x84624f82, 0x25ec, 0x11d1, 0xa4, 0xd8, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca }; + +static GUID pawin_IID_IKsPropertySet = +{ 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93 }; + + +/* + FindDevicePnpInterfaces fills in the pnpInterface fields in deviceNamesAndGUIDs + with UNICODE file paths to the devices. The DS documentation mentions + at least two techniques by which these Interface paths can be found using IKsPropertySet on + the DirectSound class object. One is using the DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION + property, and the other is using DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE. + I tried both methods and only the second worked. I found two postings on the + net from people who had the same problem with the first method, so I think the method used here is + more common/likely to work. The probem is that IKsPropertySet_Get returns S_OK + but the fields of the device description are not filled in. + + The mechanism we use works by registering an enumeration callback which is called for + every DSound device. Our callback searches for a device in our deviceNamesAndGUIDs list + with the matching GUID and copies the pointer to the Interface path. + Note that we could have used this enumeration callback to perform the original + device enumeration, however we choose not to so we can disable this step easily. + + Apparently the IKsPropertySet mechanism was added in DirectSound 9c 2004 + http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.mmedia/2004-12/0099.html + + -- rossb +*/ +static void FindDevicePnpInterfaces( DSDeviceNamesAndGUIDs *deviceNamesAndGUIDs ) +{ + IClassFactory *pClassFactory; + + if( paWinDsDSoundEntryPoints.DllGetClassObject(&pawin_CLSID_DirectSoundPrivate, &IID_IClassFactory, (PVOID *) &pClassFactory) == S_OK ){ + IKsPropertySet *pPropertySet; + if( pClassFactory->lpVtbl->CreateInstance( pClassFactory, NULL, &pawin_IID_IKsPropertySet, (PVOID *) &pPropertySet) == S_OK ){ + + DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA data; + ULONG bytesReturned; + + data.Callback = KsPropertySetEnumerateCallback; + data.Context = deviceNamesAndGUIDs; + + IKsPropertySet_Get( pPropertySet, + &pawin_DSPROPSETID_DirectSoundDevice, + DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W, + NULL, + 0, + &data, + sizeof(data), + &bytesReturned + ); + + IKsPropertySet_Release( pPropertySet ); + } + pClassFactory->lpVtbl->Release( pClassFactory ); + } + + /* + The following code fragment, which I chose not to use, queries for the + device interface for a device with a specific GUID: + + ULONG BytesReturned; + DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA Property; + + memset (&Property, 0, sizeof(Property)); + Property.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER; + Property.DeviceId = *lpGUID; + + hr = IKsPropertySet_Get( pPropertySet, + &pawin_DSPROPSETID_DirectSoundDevice, + DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W, + NULL, + 0, + &Property, + sizeof(Property), + &BytesReturned + ); + + if( hr == S_OK ) + { + //pnpInterface = Property.Interface; + } + */ +} +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + + +/* + GUIDs for emulated devices which we blacklist below. + are there more than two of them?? +*/ + +GUID IID_IRolandVSCEmulated1 = {0xc2ad1800, 0xb243, 0x11ce, 0xa8, 0xa4, 0x00, 0xaa, 0x00, 0x6c, 0x45, 0x01}; +GUID IID_IRolandVSCEmulated2 = {0xc2ad1800, 0xb243, 0x11ce, 0xa8, 0xa4, 0x00, 0xaa, 0x00, 0x6c, 0x45, 0x02}; + + +#define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_ (13) /* must match array length below */ +static double defaultSampleRateSearchOrder_[] = + { 44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0, 192000.0, + 16000.0, 12000.0, 11025.0, 9600.0, 8000.0 }; + +/************************************************************************************ +** Extract capabilities from an output device, and add it to the device info list +** if successful. This function assumes that there is enough room in the +** device info list to accomodate all entries. +** +** The device will not be added to the device list if any errors are encountered. +*/ +static PaError AddOutputDeviceInfoFromDirectSound( + PaWinDsHostApiRepresentation *winDsHostApi, char *name, LPGUID lpGUID, char *pnpInterface ) +{ + PaUtilHostApiRepresentation *hostApi = &winDsHostApi->inheritedHostApiRep; + PaWinDsDeviceInfo *winDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[hostApi->info.deviceCount]; + PaDeviceInfo *deviceInfo = &winDsDeviceInfo->inheritedDeviceInfo; + HRESULT hr; + LPDIRECTSOUND lpDirectSound; + DSCAPS caps; + int deviceOK = TRUE; + PaError result = paNoError; + int i; + + /* Copy GUID to the device info structure. Set pointer. */ + if( lpGUID == NULL ) + { + winDsDeviceInfo->lpGUID = NULL; + } + else + { + memcpy( &winDsDeviceInfo->guid, lpGUID, sizeof(GUID) ); + winDsDeviceInfo->lpGUID = &winDsDeviceInfo->guid; + } + + if( lpGUID ) + { + if (IsEqualGUID (&IID_IRolandVSCEmulated1,lpGUID) || + IsEqualGUID (&IID_IRolandVSCEmulated2,lpGUID) ) + { + PA_DEBUG(("BLACKLISTED: %s \n",name)); + return paNoError; + } + } + + /* Create a DirectSound object for the specified GUID + Note that using CoCreateInstance doesn't work on windows CE. + */ + hr = paWinDsDSoundEntryPoints.DirectSoundCreate( lpGUID, &lpDirectSound, NULL ); + + /** try using CoCreateInstance because DirectSoundCreate was hanging under + some circumstances - note this was probably related to the + #define BOOL short bug which has now been fixed + @todo delete this comment and the following code once we've ensured + there is no bug. + */ + /* + hr = CoCreateInstance( &CLSID_DirectSound, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectSound, (void**)&lpDirectSound ); + + if( hr == S_OK ) + { + hr = IDirectSound_Initialize( lpDirectSound, lpGUID ); + } + */ + + if( hr != DS_OK ) + { + if (hr == DSERR_ALLOCATED) + PA_DEBUG(("AddOutputDeviceInfoFromDirectSound %s DSERR_ALLOCATED\n",name)); + DBUG(("Cannot create DirectSound for %s. Result = 0x%x\n", name, hr )); + if (lpGUID) + DBUG(("%s's GUID: {0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x, 0x%x} \n", + name, + lpGUID->Data1, + lpGUID->Data2, + lpGUID->Data3, + lpGUID->Data4[0], + lpGUID->Data4[1], + lpGUID->Data4[2], + lpGUID->Data4[3], + lpGUID->Data4[4], + lpGUID->Data4[5], + lpGUID->Data4[6], + lpGUID->Data4[7])); + + deviceOK = FALSE; + } + else + { + /* Query device characteristics. */ + memset( &caps, 0, sizeof(caps) ); + caps.dwSize = sizeof(caps); + hr = IDirectSound_GetCaps( lpDirectSound, &caps ); + if( hr != DS_OK ) + { + DBUG(("Cannot GetCaps() for DirectSound device %s. Result = 0x%x\n", name, hr )); + deviceOK = FALSE; + } + else + { + +#if PA_USE_WMME + if( caps.dwFlags & DSCAPS_EMULDRIVER ) + { + /* If WMME supported, then reject Emulated drivers because they are lousy. */ + deviceOK = FALSE; + } +#endif + + if( deviceOK ) + { + deviceInfo->maxInputChannels = 0; + winDsDeviceInfo->deviceInputChannelCountIsKnown = 1; + + /* DS output capabilities only indicate supported number of channels + using two flags which indicate mono and/or stereo. + We assume that stereo devices may support more than 2 channels + (as is the case with 5.1 devices for example) and so + set deviceOutputChannelCountIsKnown to 0 (unknown). + In this case OpenStream will try to open the device + when the user requests more than 2 channels, rather than + returning an error. + */ + if( caps.dwFlags & DSCAPS_PRIMARYSTEREO ) + { + deviceInfo->maxOutputChannels = 2; + winDsDeviceInfo->deviceOutputChannelCountIsKnown = 0; + } + else + { + deviceInfo->maxOutputChannels = 1; + winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1; + } + + /* Guess channels count from speaker configuration. We do it only when + pnpInterface is NULL or when PAWIN_USE_WDMKS_DEVICE_INFO is undefined. + */ +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + if( !pnpInterface ) +#endif + { + DWORD spkrcfg; + if( SUCCEEDED(IDirectSound_GetSpeakerConfig( lpDirectSound, &spkrcfg )) ) + { + int count = 0; + switch (DSSPEAKER_CONFIG(spkrcfg)) + { + case DSSPEAKER_HEADPHONE: count = 2; break; + case DSSPEAKER_MONO: count = 1; break; + case DSSPEAKER_QUAD: count = 4; break; + case DSSPEAKER_STEREO: count = 2; break; + case DSSPEAKER_SURROUND: count = 4; break; + case DSSPEAKER_5POINT1: count = 6; break; + case DSSPEAKER_7POINT1: count = 8; break; +#ifndef DSSPEAKER_7POINT1_SURROUND +#define DSSPEAKER_7POINT1_SURROUND 0x00000008 +#endif + case DSSPEAKER_7POINT1_SURROUND: count = 8; break; +#ifndef DSSPEAKER_5POINT1_SURROUND +#define DSSPEAKER_5POINT1_SURROUND 0x00000009 +#endif + case DSSPEAKER_5POINT1_SURROUND: count = 6; break; + } + if( count ) + { + deviceInfo->maxOutputChannels = count; + winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1; + } + } + } + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + if( pnpInterface ) + { + int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( pnpInterface, /* isInput= */ 0 ); + if( count > 0 ) + { + deviceInfo->maxOutputChannels = count; + winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1; + } + } +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + + /* initialize defaultSampleRate */ + + if( caps.dwFlags & DSCAPS_CONTINUOUSRATE ) + { + /* initialize to caps.dwMaxSecondarySampleRate incase none of the standard rates match */ + deviceInfo->defaultSampleRate = caps.dwMaxSecondarySampleRate; + + for( i = 0; i < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++i ) + { + if( defaultSampleRateSearchOrder_[i] >= caps.dwMinSecondarySampleRate + && defaultSampleRateSearchOrder_[i] <= caps.dwMaxSecondarySampleRate ) + { + deviceInfo->defaultSampleRate = defaultSampleRateSearchOrder_[i]; + break; + } + } + } + else if( caps.dwMinSecondarySampleRate == caps.dwMaxSecondarySampleRate ) + { + if( caps.dwMinSecondarySampleRate == 0 ) + { + /* + ** On my Thinkpad 380Z, DirectSoundV6 returns min-max=0 !! + ** But it supports continuous sampling. + ** So fake range of rates, and hope it really supports it. + */ + deviceInfo->defaultSampleRate = 48000.0f; /* assume 48000 as the default */ + + DBUG(("PA - Reported rates both zero. Setting to fake values for device #%s\n", name )); + } + else + { + deviceInfo->defaultSampleRate = caps.dwMaxSecondarySampleRate; + } + } + else if( (caps.dwMinSecondarySampleRate < 1000.0) && (caps.dwMaxSecondarySampleRate > 50000.0) ) + { + /* The EWS88MT drivers lie, lie, lie. The say they only support two rates, 100 & 100000. + ** But we know that they really support a range of rates! + ** So when we see a ridiculous set of rates, assume it is a range. + */ + deviceInfo->defaultSampleRate = 48000.0f; /* assume 48000 as the default */ + DBUG(("PA - Sample rate range used instead of two odd values for device #%s\n", name )); + } + else deviceInfo->defaultSampleRate = caps.dwMaxSecondarySampleRate; + + //printf( "min %d max %d\n", caps.dwMinSecondarySampleRate, caps.dwMaxSecondarySampleRate ); + // dwFlags | DSCAPS_CONTINUOUSRATE + + deviceInfo->defaultLowInputLatency = 0.; + deviceInfo->defaultHighInputLatency = 0.; + + deviceInfo->defaultLowOutputLatency = PaWinDs_GetMinLatencySeconds( deviceInfo->defaultSampleRate ); + deviceInfo->defaultHighOutputLatency = deviceInfo->defaultLowOutputLatency * 2; + } + } + + IDirectSound_Release( lpDirectSound ); + } + + if( deviceOK ) + { + deviceInfo->name = name; + + if( lpGUID == NULL ) + hostApi->info.defaultOutputDevice = hostApi->info.deviceCount; + + hostApi->info.deviceCount++; + } + + return result; +} + + +/************************************************************************************ +** Extract capabilities from an input device, and add it to the device info list +** if successful. This function assumes that there is enough room in the +** device info list to accomodate all entries. +** +** The device will not be added to the device list if any errors are encountered. +*/ +static PaError AddInputDeviceInfoFromDirectSoundCapture( + PaWinDsHostApiRepresentation *winDsHostApi, char *name, LPGUID lpGUID, char *pnpInterface ) +{ + PaUtilHostApiRepresentation *hostApi = &winDsHostApi->inheritedHostApiRep; + PaWinDsDeviceInfo *winDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[hostApi->info.deviceCount]; + PaDeviceInfo *deviceInfo = &winDsDeviceInfo->inheritedDeviceInfo; + HRESULT hr; + LPDIRECTSOUNDCAPTURE lpDirectSoundCapture; + DSCCAPS caps; + int deviceOK = TRUE; + PaError result = paNoError; + + /* Copy GUID to the device info structure. Set pointer. */ + if( lpGUID == NULL ) + { + winDsDeviceInfo->lpGUID = NULL; + } + else + { + winDsDeviceInfo->lpGUID = &winDsDeviceInfo->guid; + memcpy( &winDsDeviceInfo->guid, lpGUID, sizeof(GUID) ); + } + + hr = paWinDsDSoundEntryPoints.DirectSoundCaptureCreate( lpGUID, &lpDirectSoundCapture, NULL ); + + /** try using CoCreateInstance because DirectSoundCreate was hanging under + some circumstances - note this was probably related to the + #define BOOL short bug which has now been fixed + @todo delete this comment and the following code once we've ensured + there is no bug. + */ + /* + hr = CoCreateInstance( &CLSID_DirectSoundCapture, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectSoundCapture, (void**)&lpDirectSoundCapture ); + */ + if( hr != DS_OK ) + { + DBUG(("Cannot create Capture for %s. Result = 0x%x\n", name, hr )); + deviceOK = FALSE; + } + else + { + /* Query device characteristics. */ + memset( &caps, 0, sizeof(caps) ); + caps.dwSize = sizeof(caps); + hr = IDirectSoundCapture_GetCaps( lpDirectSoundCapture, &caps ); + if( hr != DS_OK ) + { + DBUG(("Cannot GetCaps() for Capture device %s. Result = 0x%x\n", name, hr )); + deviceOK = FALSE; + } + else + { +#if PA_USE_WMME + if( caps.dwFlags & DSCAPS_EMULDRIVER ) + { + /* If WMME supported, then reject Emulated drivers because they are lousy. */ + deviceOK = FALSE; + } +#endif + + if( deviceOK ) + { + deviceInfo->maxInputChannels = caps.dwChannels; + winDsDeviceInfo->deviceInputChannelCountIsKnown = 1; + + deviceInfo->maxOutputChannels = 0; + winDsDeviceInfo->deviceOutputChannelCountIsKnown = 1; + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + if( pnpInterface ) + { + int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( pnpInterface, /* isInput= */ 1 ); + if( count > 0 ) + { + deviceInfo->maxInputChannels = count; + winDsDeviceInfo->deviceInputChannelCountIsKnown = 1; + } + } +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + +/* constants from a WINE patch by Francois Gouget, see: + http://www.winehq.com/hypermail/wine-patches/2003/01/0290.html + + --- + Date: Fri, 14 May 2004 10:38:12 +0200 (CEST) + From: Francois Gouget + To: Ross Bencina + Subject: Re: Permission to use wine 48/96 wave patch in BSD licensed library + + [snip] + + I give you permission to use the patch below under the BSD license. + http://www.winehq.com/hypermail/wine-patches/2003/01/0290.html + + [snip] +*/ +#ifndef WAVE_FORMAT_48M08 +#define WAVE_FORMAT_48M08 0x00001000 /* 48 kHz, Mono, 8-bit */ +#define WAVE_FORMAT_48S08 0x00002000 /* 48 kHz, Stereo, 8-bit */ +#define WAVE_FORMAT_48M16 0x00004000 /* 48 kHz, Mono, 16-bit */ +#define WAVE_FORMAT_48S16 0x00008000 /* 48 kHz, Stereo, 16-bit */ +#define WAVE_FORMAT_96M08 0x00010000 /* 96 kHz, Mono, 8-bit */ +#define WAVE_FORMAT_96S08 0x00020000 /* 96 kHz, Stereo, 8-bit */ +#define WAVE_FORMAT_96M16 0x00040000 /* 96 kHz, Mono, 16-bit */ +#define WAVE_FORMAT_96S16 0x00080000 /* 96 kHz, Stereo, 16-bit */ +#endif + + /* defaultSampleRate */ + if( caps.dwChannels == 2 ) + { + if( caps.dwFormats & WAVE_FORMAT_4S16 ) + deviceInfo->defaultSampleRate = 44100.0; + else if( caps.dwFormats & WAVE_FORMAT_48S16 ) + deviceInfo->defaultSampleRate = 48000.0; + else if( caps.dwFormats & WAVE_FORMAT_2S16 ) + deviceInfo->defaultSampleRate = 22050.0; + else if( caps.dwFormats & WAVE_FORMAT_1S16 ) + deviceInfo->defaultSampleRate = 11025.0; + else if( caps.dwFormats & WAVE_FORMAT_96S16 ) + deviceInfo->defaultSampleRate = 96000.0; + else + deviceInfo->defaultSampleRate = 48000.0; /* assume 48000 as the default */ + } + else if( caps.dwChannels == 1 ) + { + if( caps.dwFormats & WAVE_FORMAT_4M16 ) + deviceInfo->defaultSampleRate = 44100.0; + else if( caps.dwFormats & WAVE_FORMAT_48M16 ) + deviceInfo->defaultSampleRate = 48000.0; + else if( caps.dwFormats & WAVE_FORMAT_2M16 ) + deviceInfo->defaultSampleRate = 22050.0; + else if( caps.dwFormats & WAVE_FORMAT_1M16 ) + deviceInfo->defaultSampleRate = 11025.0; + else if( caps.dwFormats & WAVE_FORMAT_96M16 ) + deviceInfo->defaultSampleRate = 96000.0; + else + deviceInfo->defaultSampleRate = 48000.0; /* assume 48000 as the default */ + } + else deviceInfo->defaultSampleRate = 48000.0; /* assume 48000 as the default */ + + deviceInfo->defaultLowInputLatency = PaWinDs_GetMinLatencySeconds( deviceInfo->defaultSampleRate ); + deviceInfo->defaultHighInputLatency = deviceInfo->defaultLowInputLatency * 2; + + deviceInfo->defaultLowOutputLatency = 0.; + deviceInfo->defaultHighOutputLatency = 0.; + } + } + + IDirectSoundCapture_Release( lpDirectSoundCapture ); + } + + if( deviceOK ) + { + deviceInfo->name = name; + + if( lpGUID == NULL ) + hostApi->info.defaultInputDevice = hostApi->info.deviceCount; + + hostApi->info.deviceCount++; + } + + return result; +} + + +/***********************************************************************************/ +PaError PaWinDs_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + int i, deviceCount; + PaWinDsHostApiRepresentation *winDsHostApi; + DSDeviceNamesAndGUIDs deviceNamesAndGUIDs; + PaWinDsDeviceInfo *deviceInfoArray; + + PaWinDs_InitializeDSoundEntryPoints(); + + /* initialise guid vectors so they can be safely deleted on error */ + deviceNamesAndGUIDs.winDsHostApi = NULL; + deviceNamesAndGUIDs.inputNamesAndGUIDs.items = NULL; + deviceNamesAndGUIDs.outputNamesAndGUIDs.items = NULL; + + winDsHostApi = (PaWinDsHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinDsHostApiRepresentation) ); + if( !winDsHostApi ) + { + result = paInsufficientMemory; + goto error; + } + + result = PaWinUtil_CoInitialize( paDirectSound, &winDsHostApi->comInitializationResult ); + if( result != paNoError ) + { + goto error; + } + + winDsHostApi->allocations = PaUtil_CreateAllocationGroup(); + if( !winDsHostApi->allocations ) + { + result = paInsufficientMemory; + goto error; + } + + *hostApi = &winDsHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paDirectSound; + (*hostApi)->info.name = "Windows DirectSound"; + + (*hostApi)->info.deviceCount = 0; + (*hostApi)->info.defaultInputDevice = paNoDevice; + (*hostApi)->info.defaultOutputDevice = paNoDevice; + + +/* DSound - enumerate devices to count them and to gather their GUIDs */ + + result = InitializeDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.inputNamesAndGUIDs, winDsHostApi->allocations ); + if( result != paNoError ) + goto error; + + result = InitializeDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.outputNamesAndGUIDs, winDsHostApi->allocations ); + if( result != paNoError ) + goto error; + + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA( (LPDSENUMCALLBACK)CollectGUIDsProc, (void *)&deviceNamesAndGUIDs.inputNamesAndGUIDs ); + + paWinDsDSoundEntryPoints.DirectSoundEnumerateA( (LPDSENUMCALLBACK)CollectGUIDsProc, (void *)&deviceNamesAndGUIDs.outputNamesAndGUIDs ); + + if( deviceNamesAndGUIDs.inputNamesAndGUIDs.enumerationError != paNoError ) + { + result = deviceNamesAndGUIDs.inputNamesAndGUIDs.enumerationError; + goto error; + } + + if( deviceNamesAndGUIDs.outputNamesAndGUIDs.enumerationError != paNoError ) + { + result = deviceNamesAndGUIDs.outputNamesAndGUIDs.enumerationError; + goto error; + } + + deviceCount = deviceNamesAndGUIDs.inputNamesAndGUIDs.count + deviceNamesAndGUIDs.outputNamesAndGUIDs.count; + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + if( deviceCount > 0 ) + { + deviceNamesAndGUIDs.winDsHostApi = winDsHostApi; + FindDevicePnpInterfaces( &deviceNamesAndGUIDs ); + } +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + + if( deviceCount > 0 ) + { + /* allocate array for pointers to PaDeviceInfo structs */ + (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + winDsHostApi->allocations, sizeof(PaDeviceInfo*) * deviceCount ); + if( !(*hostApi)->deviceInfos ) + { + result = paInsufficientMemory; + goto error; + } + + /* allocate all PaDeviceInfo structs in a contiguous block */ + deviceInfoArray = (PaWinDsDeviceInfo*)PaUtil_GroupAllocateMemory( + winDsHostApi->allocations, sizeof(PaWinDsDeviceInfo) * deviceCount ); + if( !deviceInfoArray ) + { + result = paInsufficientMemory; + goto error; + } + + for( i=0; i < deviceCount; ++i ) + { + PaDeviceInfo *deviceInfo = &deviceInfoArray[i].inheritedDeviceInfo; + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + deviceInfo->name = 0; + (*hostApi)->deviceInfos[i] = deviceInfo; + } + + for( i=0; i < deviceNamesAndGUIDs.inputNamesAndGUIDs.count; ++i ) + { + result = AddInputDeviceInfoFromDirectSoundCapture( winDsHostApi, + deviceNamesAndGUIDs.inputNamesAndGUIDs.items[i].name, + deviceNamesAndGUIDs.inputNamesAndGUIDs.items[i].lpGUID, + deviceNamesAndGUIDs.inputNamesAndGUIDs.items[i].pnpInterface ); + if( result != paNoError ) + goto error; + } + + for( i=0; i < deviceNamesAndGUIDs.outputNamesAndGUIDs.count; ++i ) + { + result = AddOutputDeviceInfoFromDirectSound( winDsHostApi, + deviceNamesAndGUIDs.outputNamesAndGUIDs.items[i].name, + deviceNamesAndGUIDs.outputNamesAndGUIDs.items[i].lpGUID, + deviceNamesAndGUIDs.outputNamesAndGUIDs.items[i].pnpInterface ); + if( result != paNoError ) + goto error; + } + } + + result = TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.inputNamesAndGUIDs ); + if( result != paNoError ) + goto error; + + result = TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.outputNamesAndGUIDs ); + if( result != paNoError ) + goto error; + + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &winDsHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &winDsHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + return result; + +error: + TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.inputNamesAndGUIDs ); + TerminateDSDeviceNameAndGUIDVector( &deviceNamesAndGUIDs.outputNamesAndGUIDs ); + + Terminate( winDsHostApi ); + + return result; +} + + +/***********************************************************************************/ +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaWinDsHostApiRepresentation *winDsHostApi = (PaWinDsHostApiRepresentation*)hostApi; + + if( winDsHostApi ){ + if( winDsHostApi->allocations ) + { + PaUtil_FreeAllAllocations( winDsHostApi->allocations ); + PaUtil_DestroyAllocationGroup( winDsHostApi->allocations ); + } + + PaWinUtil_CoUninitialize( paDirectSound, &winDsHostApi->comInitializationResult ); + + PaUtil_FreeMemory( winDsHostApi ); + } + + PaWinDs_TerminateDSoundEntryPoints(); +} + +static PaError ValidateWinDirectSoundSpecificStreamInfo( + const PaStreamParameters *streamParameters, + const PaWinDirectSoundStreamInfo *streamInfo ) +{ + if( streamInfo ) + { + if( streamInfo->size != sizeof( PaWinDirectSoundStreamInfo ) + || streamInfo->version != 2 ) + { + return paIncompatibleHostApiSpecificStreamInfo; + } + } + + return paNoError; +} + +/***********************************************************************************/ +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + PaError result; + PaWinDsDeviceInfo *inputWinDsDeviceInfo, *outputWinDsDeviceInfo; + PaDeviceInfo *inputDeviceInfo, *outputDeviceInfo; + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaWinDirectSoundStreamInfo *inputStreamInfo, *outputStreamInfo; + + if( inputParameters ) + { + inputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ inputParameters->device ]; + inputDeviceInfo = &inputWinDsDeviceInfo->inheritedDeviceInfo; + + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputWinDsDeviceInfo->deviceInputChannelCountIsKnown + && inputChannelCount > inputDeviceInfo->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + inputStreamInfo = (PaWinDirectSoundStreamInfo*)inputParameters->hostApiSpecificStreamInfo; + result = ValidateWinDirectSoundSpecificStreamInfo( inputParameters, inputStreamInfo ); + if( result != paNoError ) return result; + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ outputParameters->device ]; + outputDeviceInfo = &outputWinDsDeviceInfo->inheritedDeviceInfo; + + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support inputChannelCount */ + if( outputWinDsDeviceInfo->deviceOutputChannelCountIsKnown + && outputChannelCount > outputDeviceInfo->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + outputStreamInfo = (PaWinDirectSoundStreamInfo*)outputParameters->hostApiSpecificStreamInfo; + result = ValidateWinDirectSoundSpecificStreamInfo( outputParameters, outputStreamInfo ); + if( result != paNoError ) return result; + } + else + { + outputChannelCount = 0; + } + + /* + IMPLEMENT ME: + + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported if necessary + + - check that the device supports sampleRate + + Because the buffer adapter handles conversion between all standard + sample formats, the following checks are only required if paCustomFormat + is implemented, or under some other unusual conditions. + + - check that input device can support inputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - check that output device can support outputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + */ + + return paFormatIsSupported; +} + + +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE +static HRESULT InitFullDuplexInputOutputBuffers( PaWinDsStream *stream, + PaWinDsDeviceInfo *inputDevice, + PaSampleFormat hostInputSampleFormat, + WORD inputChannelCount, + int bytesPerInputBuffer, + PaWinWaveFormatChannelMask inputChannelMask, + PaWinDsDeviceInfo *outputDevice, + PaSampleFormat hostOutputSampleFormat, + WORD outputChannelCount, + int bytesPerOutputBuffer, + PaWinWaveFormatChannelMask outputChannelMask, + unsigned long nFrameRate + ) +{ + HRESULT hr; + DSCBUFFERDESC captureDesc; + PaWinWaveFormat captureWaveFormat; + DSBUFFERDESC secondaryRenderDesc; + PaWinWaveFormat renderWaveFormat; + LPDIRECTSOUNDBUFFER8 pRenderBuffer8; + LPDIRECTSOUNDCAPTUREBUFFER8 pCaptureBuffer8; + + // capture buffer description + + // only try wave format extensible. assume it's available on all ds 8 systems + PaWin_InitializeWaveFormatExtensible( &captureWaveFormat, inputChannelCount, + hostInputSampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( hostInputSampleFormat ), + nFrameRate, inputChannelMask ); + + ZeroMemory(&captureDesc, sizeof(DSCBUFFERDESC)); + captureDesc.dwSize = sizeof(DSCBUFFERDESC); + captureDesc.dwFlags = 0; + captureDesc.dwBufferBytes = bytesPerInputBuffer; + captureDesc.lpwfxFormat = (WAVEFORMATEX*)&captureWaveFormat; + + // render buffer description + + PaWin_InitializeWaveFormatExtensible( &renderWaveFormat, outputChannelCount, + hostOutputSampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( hostOutputSampleFormat ), + nFrameRate, outputChannelMask ); + + ZeroMemory(&secondaryRenderDesc, sizeof(DSBUFFERDESC)); + secondaryRenderDesc.dwSize = sizeof(DSBUFFERDESC); + secondaryRenderDesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2; + secondaryRenderDesc.dwBufferBytes = bytesPerOutputBuffer; + secondaryRenderDesc.lpwfxFormat = (WAVEFORMATEX*)&renderWaveFormat; + + /* note that we don't create a primary buffer here at all */ + + hr = paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8( + inputDevice->lpGUID, outputDevice->lpGUID, + &captureDesc, &secondaryRenderDesc, + GetDesktopWindow(), /* see InitOutputBuffer() for a discussion of whether this is a good idea */ + DSSCL_EXCLUSIVE, + &stream->pDirectSoundFullDuplex8, + &pCaptureBuffer8, + &pRenderBuffer8, + NULL /* pUnkOuter must be NULL */ + ); + + if( hr == DS_OK ) + { + PA_DEBUG(("DirectSoundFullDuplexCreate succeeded!\n")); + + /* retrieve the pre ds 8 buffer interfaces which are used by the rest of the code */ + + hr = IUnknown_QueryInterface( pCaptureBuffer8, &IID_IDirectSoundCaptureBuffer, (LPVOID *)&stream->pDirectSoundInputBuffer ); + + if( hr == DS_OK ) + hr = IUnknown_QueryInterface( pRenderBuffer8, &IID_IDirectSoundBuffer, (LPVOID *)&stream->pDirectSoundOutputBuffer ); + + /* release the ds 8 interfaces, we don't need them */ + IUnknown_Release( pCaptureBuffer8 ); + IUnknown_Release( pRenderBuffer8 ); + + if( !stream->pDirectSoundInputBuffer || !stream->pDirectSoundOutputBuffer ){ + /* couldn't get pre ds 8 interfaces for some reason. clean up. */ + if( stream->pDirectSoundInputBuffer ) + { + IUnknown_Release( stream->pDirectSoundInputBuffer ); + stream->pDirectSoundInputBuffer = NULL; + } + + if( stream->pDirectSoundOutputBuffer ) + { + IUnknown_Release( stream->pDirectSoundOutputBuffer ); + stream->pDirectSoundOutputBuffer = NULL; + } + + IUnknown_Release( stream->pDirectSoundFullDuplex8 ); + stream->pDirectSoundFullDuplex8 = NULL; + } + } + else + { + PA_DEBUG(("DirectSoundFullDuplexCreate failed. hr=%d\n", hr)); + } + + return hr; +} +#endif /* PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE */ + + +static HRESULT InitInputBuffer( PaWinDsStream *stream, PaWinDsDeviceInfo *device, PaSampleFormat sampleFormat, unsigned long nFrameRate, WORD nChannels, int bytesPerBuffer, PaWinWaveFormatChannelMask channelMask ) +{ + DSCBUFFERDESC captureDesc; + PaWinWaveFormat waveFormat; + HRESULT result; + + if( (result = paWinDsDSoundEntryPoints.DirectSoundCaptureCreate( + device->lpGUID, &stream->pDirectSoundCapture, NULL) ) != DS_OK ){ + ERR_RPT(("PortAudio: DirectSoundCaptureCreate() failed!\n")); + return result; + } + + // Setup the secondary buffer description + ZeroMemory(&captureDesc, sizeof(DSCBUFFERDESC)); + captureDesc.dwSize = sizeof(DSCBUFFERDESC); + captureDesc.dwFlags = 0; + captureDesc.dwBufferBytes = bytesPerBuffer; + captureDesc.lpwfxFormat = (WAVEFORMATEX*)&waveFormat; + + // Create the capture buffer + + // first try WAVEFORMATEXTENSIBLE. if this fails, fall back to WAVEFORMATEX + PaWin_InitializeWaveFormatExtensible( &waveFormat, nChannels, + sampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), + nFrameRate, channelMask ); + + if( IDirectSoundCapture_CreateCaptureBuffer( stream->pDirectSoundCapture, + &captureDesc, &stream->pDirectSoundInputBuffer, NULL) != DS_OK ) + { + PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, + PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), nFrameRate ); + + if ((result = IDirectSoundCapture_CreateCaptureBuffer( stream->pDirectSoundCapture, + &captureDesc, &stream->pDirectSoundInputBuffer, NULL)) != DS_OK) return result; + } + + stream->readOffset = 0; // reset last read position to start of buffer + return DS_OK; +} + + +static HRESULT InitOutputBuffer( PaWinDsStream *stream, PaWinDsDeviceInfo *device, PaSampleFormat sampleFormat, unsigned long nFrameRate, WORD nChannels, int bytesPerBuffer, PaWinWaveFormatChannelMask channelMask ) +{ + HRESULT result; + HWND hWnd; + HRESULT hr; + PaWinWaveFormat waveFormat; + DSBUFFERDESC primaryDesc; + DSBUFFERDESC secondaryDesc; + + if( (hr = paWinDsDSoundEntryPoints.DirectSoundCreate( + device->lpGUID, &stream->pDirectSound, NULL )) != DS_OK ){ + ERR_RPT(("PortAudio: DirectSoundCreate() failed!\n")); + return hr; + } + + // We were using getForegroundWindow() but sometimes the ForegroundWindow may not be the + // applications's window. Also if that window is closed before the Buffer is closed + // then DirectSound can crash. (Thanks for Scott Patterson for reporting this.) + // So we will use GetDesktopWindow() which was suggested by Miller Puckette. + // hWnd = GetForegroundWindow(); + // + // FIXME: The example code I have on the net creates a hidden window that + // is managed by our code - I think we should do that - one hidden + // window for the whole of Pa_DS + // + hWnd = GetDesktopWindow(); + + // Set cooperative level to DSSCL_EXCLUSIVE so that we can get 16 bit output, 44.1 KHz. + // exclusive also prevents unexpected sounds from other apps during a performance. + if ((hr = IDirectSound_SetCooperativeLevel( stream->pDirectSound, + hWnd, DSSCL_EXCLUSIVE)) != DS_OK) + { + return hr; + } + + // ----------------------------------------------------------------------- + // Create primary buffer and set format just so we can specify our custom format. + // Otherwise we would be stuck with the default which might be 8 bit or 22050 Hz. + // Setup the primary buffer description + ZeroMemory(&primaryDesc, sizeof(DSBUFFERDESC)); + primaryDesc.dwSize = sizeof(DSBUFFERDESC); + primaryDesc.dwFlags = DSBCAPS_PRIMARYBUFFER; // all panning, mixing, etc done by synth + primaryDesc.dwBufferBytes = 0; + primaryDesc.lpwfxFormat = NULL; + // Create the buffer + if ((result = IDirectSound_CreateSoundBuffer( stream->pDirectSound, + &primaryDesc, &stream->pDirectSoundPrimaryBuffer, NULL)) != DS_OK) + goto error; + + // Set the primary buffer's format + + // first try WAVEFORMATEXTENSIBLE. if this fails, fall back to WAVEFORMATEX + PaWin_InitializeWaveFormatExtensible( &waveFormat, nChannels, + sampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), + nFrameRate, channelMask ); + + if( IDirectSoundBuffer_SetFormat( stream->pDirectSoundPrimaryBuffer, (WAVEFORMATEX*)&waveFormat) != DS_OK ) + { + PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, + PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), nFrameRate ); + + if((result = IDirectSoundBuffer_SetFormat( stream->pDirectSoundPrimaryBuffer, (WAVEFORMATEX*)&waveFormat)) != DS_OK) + goto error; + } + + // ---------------------------------------------------------------------- + // Setup the secondary buffer description + ZeroMemory(&secondaryDesc, sizeof(DSBUFFERDESC)); + secondaryDesc.dwSize = sizeof(DSBUFFERDESC); + secondaryDesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2; + secondaryDesc.dwBufferBytes = bytesPerBuffer; + secondaryDesc.lpwfxFormat = (WAVEFORMATEX*)&waveFormat; /* waveFormat contains whatever format was negotiated for the primary buffer above */ + // Create the secondary buffer + if ((result = IDirectSound_CreateSoundBuffer( stream->pDirectSound, + &secondaryDesc, &stream->pDirectSoundOutputBuffer, NULL)) != DS_OK) + goto error; + + return DS_OK; + +error: + + if( stream->pDirectSoundPrimaryBuffer ) + { + IDirectSoundBuffer_Release( stream->pDirectSoundPrimaryBuffer ); + stream->pDirectSoundPrimaryBuffer = NULL; + } + + return result; +} + + +static void CalculateBufferSettings( unsigned long *hostBufferSizeFrames, + unsigned long *pollingPeriodFrames, + int isFullDuplex, + unsigned long suggestedInputLatencyFrames, + unsigned long suggestedOutputLatencyFrames, + double sampleRate, unsigned long userFramesPerBuffer ) +{ + /* we allow the polling period to range between 1 and 100ms. + prior to August 2011 we limited the minimum polling period to 10ms. + */ + unsigned long minimumPollingPeriodFrames = sampleRate / 1000; /* 1ms */ + unsigned long maximumPollingPeriodFrames = sampleRate / 10; /* 100ms */ + unsigned long pollingJitterFrames = sampleRate / 1000; /* 1ms */ + + if( userFramesPerBuffer == paFramesPerBufferUnspecified ) + { + unsigned long targetBufferingLatencyFrames = max( suggestedInputLatencyFrames, suggestedOutputLatencyFrames ); + + *pollingPeriodFrames = targetBufferingLatencyFrames / 4; + if( *pollingPeriodFrames < minimumPollingPeriodFrames ) + { + *pollingPeriodFrames = minimumPollingPeriodFrames; + } + else if( *pollingPeriodFrames > maximumPollingPeriodFrames ) + { + *pollingPeriodFrames = maximumPollingPeriodFrames; + } + + *hostBufferSizeFrames = *pollingPeriodFrames + + max( *pollingPeriodFrames + pollingJitterFrames, targetBufferingLatencyFrames); + } + else + { + unsigned long targetBufferingLatencyFrames = suggestedInputLatencyFrames; + if( isFullDuplex ) + { + /* In full duplex streams we know that the buffer adapter adds userFramesPerBuffer + extra fixed latency. so we subtract it here as a fixed latency before computing + the buffer size. being careful not to produce an unrepresentable negative result. + + Note: this only works as expected if output latency is greater than input latency. + Otherwise we use input latency anyway since we do max(in,out). + */ + + if( userFramesPerBuffer < suggestedOutputLatencyFrames ) + { + unsigned long adjustedSuggestedOutputLatencyFrames = + suggestedOutputLatencyFrames - userFramesPerBuffer; + + /* maximum of input and adjusted output suggested latency */ + if( adjustedSuggestedOutputLatencyFrames > targetBufferingLatencyFrames ) + targetBufferingLatencyFrames = adjustedSuggestedOutputLatencyFrames; + } + } + else + { + /* maximum of input and output suggested latency */ + if( suggestedOutputLatencyFrames > suggestedInputLatencyFrames ) + targetBufferingLatencyFrames = suggestedOutputLatencyFrames; + } + + *hostBufferSizeFrames = userFramesPerBuffer + + max( userFramesPerBuffer + pollingJitterFrames, targetBufferingLatencyFrames); + + *pollingPeriodFrames = max( max(1, userFramesPerBuffer / 4), targetBufferingLatencyFrames / 16 ); + + if( *pollingPeriodFrames > maximumPollingPeriodFrames ) + { + *pollingPeriodFrames = maximumPollingPeriodFrames; + } + } +} + + +static void SetStreamInfoLatencies( PaWinDsStream *stream, + unsigned long userFramesPerBuffer, + unsigned long pollingPeriodFrames, + double sampleRate ) +{ + /* compute the stream info actual latencies based on framesPerBuffer, polling period, hostBufferSizeFrames, + and the configuration of the buffer processor */ + + unsigned long effectiveFramesPerBuffer = (userFramesPerBuffer == paFramesPerBufferUnspecified) + ? pollingPeriodFrames + : userFramesPerBuffer; + + if( stream->bufferProcessor.inputChannelCount > 0 ) + { + /* stream info input latency is the minimum buffering latency + (unlike suggested and default which are *maximums*) */ + stream->streamRepresentation.streamInfo.inputLatency = + (double)(PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor) + + effectiveFramesPerBuffer) / sampleRate; + } + else + { + stream->streamRepresentation.streamInfo.inputLatency = 0; + } + + if( stream->bufferProcessor.outputChannelCount > 0 ) + { + stream->streamRepresentation.streamInfo.outputLatency = + (double)(PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor) + + (stream->hostBufferSizeFrames - effectiveFramesPerBuffer)) / sampleRate; + } + else + { + stream->streamRepresentation.streamInfo.outputLatency = 0; + } +} + + +/***********************************************************************************/ +/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */ + +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + PaWinDsHostApiRepresentation *winDsHostApi = (PaWinDsHostApiRepresentation*)hostApi; + PaWinDsStream *stream = 0; + int bufferProcessorIsInitialized = 0; + int streamRepresentationIsInitialized = 0; + PaWinDsDeviceInfo *inputWinDsDeviceInfo, *outputWinDsDeviceInfo; + PaDeviceInfo *inputDeviceInfo, *outputDeviceInfo; + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat; + unsigned long suggestedInputLatencyFrames, suggestedOutputLatencyFrames; + PaWinDirectSoundStreamInfo *inputStreamInfo, *outputStreamInfo; + PaWinWaveFormatChannelMask inputChannelMask, outputChannelMask; + unsigned long pollingPeriodFrames = 0; + + if( inputParameters ) + { + inputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ inputParameters->device ]; + inputDeviceInfo = &inputWinDsDeviceInfo->inheritedDeviceInfo; + + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + suggestedInputLatencyFrames = (unsigned long)(inputParameters->suggestedLatency * sampleRate); + + /* IDEA: the following 3 checks could be performed by default by pa_front + unless some flag indicated otherwise */ + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputWinDsDeviceInfo->deviceInputChannelCountIsKnown + && inputChannelCount > inputDeviceInfo->maxInputChannels ) + return paInvalidChannelCount; + + /* validate hostApiSpecificStreamInfo */ + inputStreamInfo = (PaWinDirectSoundStreamInfo*)inputParameters->hostApiSpecificStreamInfo; + result = ValidateWinDirectSoundSpecificStreamInfo( inputParameters, inputStreamInfo ); + if( result != paNoError ) return result; + + if( inputStreamInfo && inputStreamInfo->flags & paWinDirectSoundUseChannelMask ) + inputChannelMask = inputStreamInfo->channelMask; + else + inputChannelMask = PaWin_DefaultChannelMask( inputChannelCount ); + } + else + { + inputChannelCount = 0; + inputSampleFormat = 0; + suggestedInputLatencyFrames = 0; + } + + + if( outputParameters ) + { + outputWinDsDeviceInfo = (PaWinDsDeviceInfo*) hostApi->deviceInfos[ outputParameters->device ]; + outputDeviceInfo = &outputWinDsDeviceInfo->inheritedDeviceInfo; + + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + suggestedOutputLatencyFrames = (unsigned long)(outputParameters->suggestedLatency * sampleRate); + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support outputChannelCount */ + if( outputWinDsDeviceInfo->deviceOutputChannelCountIsKnown + && outputChannelCount > outputDeviceInfo->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate hostApiSpecificStreamInfo */ + outputStreamInfo = (PaWinDirectSoundStreamInfo*)outputParameters->hostApiSpecificStreamInfo; + result = ValidateWinDirectSoundSpecificStreamInfo( outputParameters, outputStreamInfo ); + if( result != paNoError ) return result; + + if( outputStreamInfo && outputStreamInfo->flags & paWinDirectSoundUseChannelMask ) + outputChannelMask = outputStreamInfo->channelMask; + else + outputChannelMask = PaWin_DefaultChannelMask( outputChannelCount ); + } + else + { + outputChannelCount = 0; + outputSampleFormat = 0; + suggestedOutputLatencyFrames = 0; + } + + + /* + IMPLEMENT ME: + + ( the following two checks are taken care of by PaUtil_InitializeBufferProcessor() ) + + - check that input device can support inputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - check that output device can support outputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported + + - check that the device supports sampleRate + + - alter sampleRate to a close allowable rate if possible / necessary + + - validate suggestedInputLatency and suggestedOutputLatency parameters, + use default values where necessary + */ + + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform specific flag */ + + + stream = (PaWinDsStream*)PaUtil_AllocateMemory( sizeof(PaWinDsStream) ); + if( !stream ) + { + result = paInsufficientMemory; + goto error; + } + + memset( stream, 0, sizeof(PaWinDsStream) ); /* initialize all stream variables to 0 */ + + if( streamCallback ) + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &winDsHostApi->callbackStreamInterface, streamCallback, userData ); + } + else + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &winDsHostApi->blockingStreamInterface, streamCallback, userData ); + } + + streamRepresentationIsInitialized = 1; + + stream->streamFlags = streamFlags; + + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + + if( inputParameters ) + { + /* IMPLEMENT ME - establish which host formats are available */ + PaSampleFormat nativeInputFormats = paInt16; + /* PaSampleFormat nativeFormats = paUInt8 | paInt16 | paInt24 | paInt32 | paFloat32; */ + + hostInputSampleFormat = + PaUtil_SelectClosestAvailableFormat( nativeInputFormats, inputParameters->sampleFormat ); + } + else + { + hostInputSampleFormat = 0; + } + + if( outputParameters ) + { + /* IMPLEMENT ME - establish which host formats are available */ + PaSampleFormat nativeOutputFormats = paInt16; + /* PaSampleFormat nativeOutputFormats = paUInt8 | paInt16 | paInt24 | paInt32 | paFloat32; */ + + hostOutputSampleFormat = + PaUtil_SelectClosestAvailableFormat( nativeOutputFormats, outputParameters->sampleFormat ); + } + else + { + hostOutputSampleFormat = 0; + } + + result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + inputChannelCount, inputSampleFormat, hostInputSampleFormat, + outputChannelCount, outputSampleFormat, hostOutputSampleFormat, + sampleRate, streamFlags, framesPerBuffer, + 0, /* ignored in paUtilVariableHostBufferSizePartialUsageAllowed mode. */ + /* This next mode is required because DS can split the host buffer when it wraps around. */ + paUtilVariableHostBufferSizePartialUsageAllowed, + streamCallback, userData ); + if( result != paNoError ) + goto error; + + bufferProcessorIsInitialized = 1; + + +/* DirectSound specific initialization */ + { + HRESULT hr; + unsigned long integerSampleRate = (unsigned long) (sampleRate + 0.5); + + stream->processingCompleted = CreateEvent( NULL, /* bManualReset = */ TRUE, /* bInitialState = */ FALSE, NULL ); + if( stream->processingCompleted == NULL ) + { + result = paInsufficientMemory; + goto error; + } + +#ifdef PA_WIN_DS_USE_WMME_TIMER + stream->timerID = 0; +#endif + +#ifdef PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT + stream->waitableTimer = (HANDLE)CreateWaitableTimer( 0, FALSE, NULL ); + if( stream->waitableTimer == NULL ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( GetLastError() ); + goto error; + } +#endif + +#ifndef PA_WIN_DS_USE_WMME_TIMER + stream->processingThreadCompleted = CreateEvent( NULL, /* bManualReset = */ TRUE, /* bInitialState = */ FALSE, NULL ); + if( stream->processingThreadCompleted == NULL ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( GetLastError() ); + goto error; + } +#endif + + /* set up i/o parameters */ + + CalculateBufferSettings( &stream->hostBufferSizeFrames, &pollingPeriodFrames, + /* isFullDuplex = */ (inputParameters && outputParameters), + suggestedInputLatencyFrames, + suggestedOutputLatencyFrames, + sampleRate, framesPerBuffer ); + + stream->pollingPeriodSeconds = pollingPeriodFrames / sampleRate; + + /* ------------------ OUTPUT */ + if( outputParameters ) + { + LARGE_INTEGER counterFrequency; + + /* + PaDeviceInfo *deviceInfo = hostApi->deviceInfos[ outputParameters->device ]; + DBUG(("PaHost_OpenStream: deviceID = 0x%x\n", outputParameters->device)); + */ + + int sampleSizeBytes = Pa_GetSampleSize(hostOutputSampleFormat); + stream->outputFrameSizeBytes = outputParameters->channelCount * sampleSizeBytes; + + stream->outputBufferSizeBytes = stream->hostBufferSizeFrames * stream->outputFrameSizeBytes; + if( stream->outputBufferSizeBytes < DSBSIZE_MIN ) + { + result = paBufferTooSmall; + goto error; + } + else if( stream->outputBufferSizeBytes > DSBSIZE_MAX ) + { + result = paBufferTooBig; + goto error; + } + + /* Calculate value used in latency calculation to avoid real-time divides. */ + stream->secondsPerHostByte = 1.0 / + (stream->bufferProcessor.bytesPerHostOutputSample * + outputChannelCount * sampleRate); + + stream->outputIsRunning = FALSE; + stream->outputUnderflowCount = 0; + + /* perfCounterTicksPerBuffer is used by QueryOutputSpace for overflow detection */ + if( QueryPerformanceFrequency( &counterFrequency ) ) + { + stream->perfCounterTicksPerBuffer.QuadPart = (counterFrequency.QuadPart * stream->hostBufferSizeFrames) / integerSampleRate; + } + else + { + stream->perfCounterTicksPerBuffer.QuadPart = 0; + } + } + + /* ------------------ INPUT */ + if( inputParameters ) + { + /* + PaDeviceInfo *deviceInfo = hostApi->deviceInfos[ inputParameters->device ]; + DBUG(("PaHost_OpenStream: deviceID = 0x%x\n", inputParameters->device)); + */ + + int sampleSizeBytes = Pa_GetSampleSize(hostInputSampleFormat); + stream->inputFrameSizeBytes = inputParameters->channelCount * sampleSizeBytes; + + stream->inputBufferSizeBytes = stream->hostBufferSizeFrames * stream->inputFrameSizeBytes; + if( stream->inputBufferSizeBytes < DSBSIZE_MIN ) + { + result = paBufferTooSmall; + goto error; + } + else if( stream->inputBufferSizeBytes > DSBSIZE_MAX ) + { + result = paBufferTooBig; + goto error; + } + } + + /* open/create the DirectSound buffers */ + + /* interface ptrs should be zeroed when stream is zeroed. */ + assert( stream->pDirectSoundCapture == NULL ); + assert( stream->pDirectSoundInputBuffer == NULL ); + assert( stream->pDirectSound == NULL ); + assert( stream->pDirectSoundPrimaryBuffer == NULL ); + assert( stream->pDirectSoundOutputBuffer == NULL ); + + + if( inputParameters && outputParameters ) + { +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE + /* try to use the full-duplex DX8 API to create the buffers. + if that fails we fall back to the half-duplex API below */ + + hr = InitFullDuplexInputOutputBuffers( stream, + (PaWinDsDeviceInfo*)hostApi->deviceInfos[inputParameters->device], + hostInputSampleFormat, + (WORD)inputParameters->channelCount, stream->inputBufferSizeBytes, + inputChannelMask, + (PaWinDsDeviceInfo*)hostApi->deviceInfos[outputParameters->device], + hostOutputSampleFormat, + (WORD)outputParameters->channelCount, stream->outputBufferSizeBytes, + outputChannelMask, + integerSampleRate + ); + DBUG(("InitFullDuplexInputOutputBuffers() returns %x\n", hr)); + /* ignore any error returned by InitFullDuplexInputOutputBuffers. + we retry opening the buffers below */ +#endif /* PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE */ + } + + /* create half duplex buffers. also used for full-duplex streams which didn't + succeed when using the full duplex API. that could happen because + DX8 or greater isnt installed, the i/o devices aren't the same + physical device. etc. + */ + + if( outputParameters && !stream->pDirectSoundOutputBuffer ) + { + hr = InitOutputBuffer( stream, + (PaWinDsDeviceInfo*)hostApi->deviceInfos[outputParameters->device], + hostOutputSampleFormat, + integerSampleRate, + (WORD)outputParameters->channelCount, stream->outputBufferSizeBytes, + outputChannelMask ); + DBUG(("InitOutputBuffer() returns %x\n", hr)); + if( hr != DS_OK ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ); + goto error; + } + } + + if( inputParameters && !stream->pDirectSoundInputBuffer ) + { + hr = InitInputBuffer( stream, + (PaWinDsDeviceInfo*)hostApi->deviceInfos[inputParameters->device], + hostInputSampleFormat, + integerSampleRate, + (WORD)inputParameters->channelCount, stream->inputBufferSizeBytes, + inputChannelMask ); + DBUG(("InitInputBuffer() returns %x\n", hr)); + if( hr != DS_OK ) + { + ERR_RPT(("PortAudio: DSW_InitInputBuffer() returns %x\n", hr)); + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ); + goto error; + } + } + } + + SetStreamInfoLatencies( stream, framesPerBuffer, pollingPeriodFrames, sampleRate ); + + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + *s = (PaStream*)stream; + + return result; + +error: + if( stream ) + { + if( stream->processingCompleted != NULL ) + CloseHandle( stream->processingCompleted ); + +#ifdef PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT + if( stream->waitableTimer != NULL ) + CloseHandle( stream->waitableTimer ); +#endif + +#ifndef PA_WIN_DS_USE_WMME_TIMER + if( stream->processingThreadCompleted != NULL ) + CloseHandle( stream->processingThreadCompleted ); +#endif + + if( stream->pDirectSoundOutputBuffer ) + { + IDirectSoundBuffer_Stop( stream->pDirectSoundOutputBuffer ); + IDirectSoundBuffer_Release( stream->pDirectSoundOutputBuffer ); + stream->pDirectSoundOutputBuffer = NULL; + } + + if( stream->pDirectSoundPrimaryBuffer ) + { + IDirectSoundBuffer_Release( stream->pDirectSoundPrimaryBuffer ); + stream->pDirectSoundPrimaryBuffer = NULL; + } + + if( stream->pDirectSoundInputBuffer ) + { + IDirectSoundCaptureBuffer_Stop( stream->pDirectSoundInputBuffer ); + IDirectSoundCaptureBuffer_Release( stream->pDirectSoundInputBuffer ); + stream->pDirectSoundInputBuffer = NULL; + } + + if( stream->pDirectSoundCapture ) + { + IDirectSoundCapture_Release( stream->pDirectSoundCapture ); + stream->pDirectSoundCapture = NULL; + } + + if( stream->pDirectSound ) + { + IDirectSound_Release( stream->pDirectSound ); + stream->pDirectSound = NULL; + } + +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE + if( stream->pDirectSoundFullDuplex8 ) + { + IDirectSoundFullDuplex_Release( stream->pDirectSoundFullDuplex8 ); + stream->pDirectSoundFullDuplex8 = NULL; + } +#endif + if( bufferProcessorIsInitialized ) + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + + if( streamRepresentationIsInitialized ) + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + + PaUtil_FreeMemory( stream ); + } + + return result; +} + + +/************************************************************************************ + * Determine how much space can be safely written to in DS buffer. + * Detect underflows and overflows. + * Does not allow writing into safety gap maintained by DirectSound. + */ +static HRESULT QueryOutputSpace( PaWinDsStream *stream, long *bytesEmpty ) +{ + HRESULT hr; + DWORD playCursor; + DWORD writeCursor; + long numBytesEmpty; + long playWriteGap; + // Query to see how much room is in buffer. + hr = IDirectSoundBuffer_GetCurrentPosition( stream->pDirectSoundOutputBuffer, + &playCursor, &writeCursor ); + if( hr != DS_OK ) + { + return hr; + } + + // Determine size of gap between playIndex and WriteIndex that we cannot write into. + playWriteGap = writeCursor - playCursor; + if( playWriteGap < 0 ) playWriteGap += stream->outputBufferSizeBytes; // unwrap + + /* DirectSound doesn't have a large enough playCursor so we cannot detect wrap-around. */ + /* Attempt to detect playCursor wrap-around and correct it. */ + if( stream->outputIsRunning && (stream->perfCounterTicksPerBuffer.QuadPart != 0) ) + { + /* How much time has elapsed since last check. */ + LARGE_INTEGER currentTime; + LARGE_INTEGER elapsedTime; + long bytesPlayed; + long bytesExpected; + long buffersWrapped; + + QueryPerformanceCounter( ¤tTime ); + elapsedTime.QuadPart = currentTime.QuadPart - stream->previousPlayTime.QuadPart; + stream->previousPlayTime = currentTime; + + /* How many bytes does DirectSound say have been played. */ + bytesPlayed = playCursor - stream->previousPlayCursor; + if( bytesPlayed < 0 ) bytesPlayed += stream->outputBufferSizeBytes; // unwrap + stream->previousPlayCursor = playCursor; + + /* Calculate how many bytes we would have expected to been played by now. */ + bytesExpected = (long) ((elapsedTime.QuadPart * stream->outputBufferSizeBytes) / stream->perfCounterTicksPerBuffer.QuadPart); + buffersWrapped = (bytesExpected - bytesPlayed) / stream->outputBufferSizeBytes; + if( buffersWrapped > 0 ) + { + playCursor += (buffersWrapped * stream->outputBufferSizeBytes); + bytesPlayed += (buffersWrapped * stream->outputBufferSizeBytes); + } + } + numBytesEmpty = playCursor - stream->outputBufferWriteOffsetBytes; + if( numBytesEmpty < 0 ) numBytesEmpty += stream->outputBufferSizeBytes; // unwrap offset + + /* Have we underflowed? */ + if( numBytesEmpty > (stream->outputBufferSizeBytes - playWriteGap) ) + { + if( stream->outputIsRunning ) + { + stream->outputUnderflowCount += 1; + } + + /* + From MSDN: + The write cursor indicates the position at which it is safe + to write new data to the buffer. The write cursor always leads the + play cursor, typically by about 15 milliseconds' worth of audio + data. + It is always safe to change data that is behind the position + indicated by the lpdwCurrentPlayCursor parameter. + */ + + stream->outputBufferWriteOffsetBytes = writeCursor; + numBytesEmpty = stream->outputBufferSizeBytes - playWriteGap; + } + *bytesEmpty = numBytesEmpty; + return hr; +} + +/***********************************************************************************/ +static int TimeSlice( PaWinDsStream *stream ) +{ + long numFrames = 0; + long bytesEmpty = 0; + long bytesFilled = 0; + long bytesToXfer = 0; + long framesToXfer = 0; /* the number of frames we'll process this tick */ + long numInFramesReady = 0; + long numOutFramesReady = 0; + long bytesProcessed; + HRESULT hresult; + double outputLatency = 0; + double inputLatency = 0; + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; + +/* Input */ + LPBYTE lpInBuf1 = NULL; + LPBYTE lpInBuf2 = NULL; + DWORD dwInSize1 = 0; + DWORD dwInSize2 = 0; +/* Output */ + LPBYTE lpOutBuf1 = NULL; + LPBYTE lpOutBuf2 = NULL; + DWORD dwOutSize1 = 0; + DWORD dwOutSize2 = 0; + + /* How much input data is available? */ + if( stream->bufferProcessor.inputChannelCount > 0 ) + { + HRESULT hr; + DWORD capturePos; + DWORD readPos; + long filled = 0; + // Query to see how much data is in buffer. + // We don't need the capture position but sometimes DirectSound doesn't handle NULLS correctly + // so let's pass a pointer just to be safe. + hr = IDirectSoundCaptureBuffer_GetCurrentPosition( stream->pDirectSoundInputBuffer, &capturePos, &readPos ); + if( hr == DS_OK ) + { + filled = readPos - stream->readOffset; + if( filled < 0 ) filled += stream->inputBufferSizeBytes; // unwrap offset + bytesFilled = filled; + + inputLatency = ((double)bytesFilled) * stream->secondsPerHostByte; + } + // FIXME: what happens if IDirectSoundCaptureBuffer_GetCurrentPosition fails? + + framesToXfer = numInFramesReady = bytesFilled / stream->inputFrameSizeBytes; + + /** @todo Check for overflow */ + } + + /* How much output room is available? */ + if( stream->bufferProcessor.outputChannelCount > 0 ) + { + UINT previousUnderflowCount = stream->outputUnderflowCount; + QueryOutputSpace( stream, &bytesEmpty ); + framesToXfer = numOutFramesReady = bytesEmpty / stream->outputFrameSizeBytes; + + /* Check for underflow */ + if( stream->outputUnderflowCount != previousUnderflowCount ) + stream->callbackFlags |= paOutputUnderflow; + + /* We are about to compute audio into the first byte of empty space in the output buffer. + This audio will reach the DAC after all of the current (non-empty) audio + in the buffer has played. Therefore the output time is the current time + plus the time it takes to play the non-empty bytes in the buffer, + computed here: + */ + outputLatency = ((double)(stream->outputBufferSizeBytes - bytesEmpty)) * stream->secondsPerHostByte; + } + + /* if it's a full duplex stream, set framesToXfer to the minimum of input and output frames ready */ + if( stream->bufferProcessor.inputChannelCount > 0 && stream->bufferProcessor.outputChannelCount > 0 ) + { + framesToXfer = (numOutFramesReady < numInFramesReady) ? numOutFramesReady : numInFramesReady; + } + + if( framesToXfer > 0 ) + { + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + /* The outputBufferDacTime parameter should indicates the time at which + the first sample of the output buffer is heard at the DACs. */ + timeInfo.currentTime = PaUtil_GetTime(); + + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, stream->callbackFlags ); + stream->callbackFlags = 0; + + /* Input */ + if( stream->bufferProcessor.inputChannelCount > 0 ) + { + timeInfo.inputBufferAdcTime = timeInfo.currentTime - inputLatency; + + bytesToXfer = framesToXfer * stream->inputFrameSizeBytes; + hresult = IDirectSoundCaptureBuffer_Lock ( stream->pDirectSoundInputBuffer, + stream->readOffset, bytesToXfer, + (void **) &lpInBuf1, &dwInSize1, + (void **) &lpInBuf2, &dwInSize2, 0); + if (hresult != DS_OK) + { + ERR_RPT(("DirectSound IDirectSoundCaptureBuffer_Lock failed, hresult = 0x%x\n",hresult)); + /* PA_DS_SET_LAST_DIRECTSOUND_ERROR( hresult ); */ + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); /* flush the buffer processor */ + stream->callbackResult = paComplete; + goto error2; + } + + numFrames = dwInSize1 / stream->inputFrameSizeBytes; + PaUtil_SetInputFrameCount( &stream->bufferProcessor, numFrames ); + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, 0, lpInBuf1, 0 ); + /* Is input split into two regions. */ + if( dwInSize2 > 0 ) + { + numFrames = dwInSize2 / stream->inputFrameSizeBytes; + PaUtil_Set2ndInputFrameCount( &stream->bufferProcessor, numFrames ); + PaUtil_Set2ndInterleavedInputChannels( &stream->bufferProcessor, 0, lpInBuf2, 0 ); + } + } + + /* Output */ + if( stream->bufferProcessor.outputChannelCount > 0 ) + { + /* + We don't currently add outputLatency here because it appears to produce worse + results than non adding it. Need to do more testing to verify this. + */ + /* timeInfo.outputBufferDacTime = timeInfo.currentTime + outputLatency; */ + timeInfo.outputBufferDacTime = timeInfo.currentTime; + + bytesToXfer = framesToXfer * stream->outputFrameSizeBytes; + hresult = IDirectSoundBuffer_Lock ( stream->pDirectSoundOutputBuffer, + stream->outputBufferWriteOffsetBytes, bytesToXfer, + (void **) &lpOutBuf1, &dwOutSize1, + (void **) &lpOutBuf2, &dwOutSize2, 0); + if (hresult != DS_OK) + { + ERR_RPT(("DirectSound IDirectSoundBuffer_Lock failed, hresult = 0x%x\n",hresult)); + /* PA_DS_SET_LAST_DIRECTSOUND_ERROR( hresult ); */ + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); /* flush the buffer processor */ + stream->callbackResult = paComplete; + goto error1; + } + + numFrames = dwOutSize1 / stream->outputFrameSizeBytes; + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, numFrames ); + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, 0, lpOutBuf1, 0 ); + + /* Is output split into two regions. */ + if( dwOutSize2 > 0 ) + { + numFrames = dwOutSize2 / stream->outputFrameSizeBytes; + PaUtil_Set2ndOutputFrameCount( &stream->bufferProcessor, numFrames ); + PaUtil_Set2ndInterleavedOutputChannels( &stream->bufferProcessor, 0, lpOutBuf2, 0 ); + } + } + + numFrames = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &stream->callbackResult ); + stream->framesWritten += numFrames; + + if( stream->bufferProcessor.outputChannelCount > 0 ) + { + /* FIXME: an underflow could happen here */ + + /* Update our buffer offset and unlock sound buffer */ + bytesProcessed = numFrames * stream->outputFrameSizeBytes; + stream->outputBufferWriteOffsetBytes = (stream->outputBufferWriteOffsetBytes + bytesProcessed) % stream->outputBufferSizeBytes; + IDirectSoundBuffer_Unlock( stream->pDirectSoundOutputBuffer, lpOutBuf1, dwOutSize1, lpOutBuf2, dwOutSize2); + } + +error1: + if( stream->bufferProcessor.inputChannelCount > 0 ) + { + /* FIXME: an overflow could happen here */ + + /* Update our buffer offset and unlock sound buffer */ + bytesProcessed = numFrames * stream->inputFrameSizeBytes; + stream->readOffset = (stream->readOffset + bytesProcessed) % stream->inputBufferSizeBytes; + IDirectSoundCaptureBuffer_Unlock( stream->pDirectSoundInputBuffer, lpInBuf1, dwInSize1, lpInBuf2, dwInSize2); + } +error2: + + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, numFrames ); + } + + if( stream->callbackResult == paComplete && !PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) + { + /* don't return completed until the buffer processor has been drained */ + return paContinue; + } + else + { + return stream->callbackResult; + } +} +/*******************************************************************/ + +static HRESULT ZeroAvailableOutputSpace( PaWinDsStream *stream ) +{ + HRESULT hr; + LPBYTE lpbuf1 = NULL; + LPBYTE lpbuf2 = NULL; + DWORD dwsize1 = 0; + DWORD dwsize2 = 0; + long bytesEmpty; + hr = QueryOutputSpace( stream, &bytesEmpty ); + if (hr != DS_OK) return hr; + if( bytesEmpty == 0 ) return DS_OK; + // Lock free space in the DS + hr = IDirectSoundBuffer_Lock( stream->pDirectSoundOutputBuffer, stream->outputBufferWriteOffsetBytes, + bytesEmpty, (void **) &lpbuf1, &dwsize1, + (void **) &lpbuf2, &dwsize2, 0); + if (hr == DS_OK) + { + // Copy the buffer into the DS + ZeroMemory(lpbuf1, dwsize1); + if(lpbuf2 != NULL) + { + ZeroMemory(lpbuf2, dwsize2); + } + // Update our buffer offset and unlock sound buffer + stream->outputBufferWriteOffsetBytes = (stream->outputBufferWriteOffsetBytes + dwsize1 + dwsize2) % stream->outputBufferSizeBytes; + IDirectSoundBuffer_Unlock( stream->pDirectSoundOutputBuffer, lpbuf1, dwsize1, lpbuf2, dwsize2); + + stream->finalZeroBytesWritten += dwsize1 + dwsize2; + } + return hr; +} + + +static void CALLBACK TimerCallback(UINT uID, UINT uMsg, DWORD_PTR dwUser, DWORD dw1, DWORD dw2) +{ + PaWinDsStream *stream; + int isFinished = 0; + + /* suppress unused variable warnings */ + (void) uID; + (void) uMsg; + (void) dw1; + (void) dw2; + + stream = (PaWinDsStream *) dwUser; + if( stream == NULL ) return; + + if( stream->isActive ) + { + if( stream->abortProcessing ) + { + isFinished = 1; + } + else if( stream->stopProcessing ) + { + if( stream->bufferProcessor.outputChannelCount > 0 ) + { + ZeroAvailableOutputSpace( stream ); + if( stream->finalZeroBytesWritten >= stream->outputBufferSizeBytes ) + { + /* once we've flushed the whole output buffer with zeros we know all data has been played */ + isFinished = 1; + } + } + else + { + isFinished = 1; + } + } + else + { + int callbackResult = TimeSlice( stream ); + if( callbackResult != paContinue ) + { + /* FIXME implement handling of paComplete and paAbort if possible + At the moment this should behave as if paComplete was called and + flush the buffer. + */ + + stream->stopProcessing = 1; + } + } + + if( isFinished ) + { + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + + stream->isActive = 0; /* don't set this until the stream really is inactive */ + SetEvent( stream->processingCompleted ); + } + } +} + +#ifndef PA_WIN_DS_USE_WMME_TIMER + +#ifdef PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT + +static void CALLBACK WaitableTimerAPCProc( + LPVOID lpArg, // Data value + DWORD dwTimerLowValue, // Timer low value + DWORD dwTimerHighValue ) // Timer high value + +{ + (void)dwTimerLowValue; + (void)dwTimerHighValue; + + TimerCallback( 0, 0, (DWORD_PTR)lpArg, 0, 0 ); +} + +#endif /* PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT */ + + +PA_THREAD_FUNC ProcessingThreadProc( void *pArg ) +{ + PaWinDsStream *stream = (PaWinDsStream *)pArg; + MMRESULT mmResult; + HANDLE hWaitableTimer; + LARGE_INTEGER dueTime; + int timerPeriodMs; + + timerPeriodMs = stream->pollingPeriodSeconds * MSECS_PER_SECOND; + if( timerPeriodMs < 1 ) + timerPeriodMs = 1; + +#ifdef PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT + assert( stream->waitableTimer != NULL ); + + /* invoke first timeout immediately */ + dueTime.LowPart = timerPeriodMs * 1000 * 10; + dueTime.HighPart = 0; + + /* tick using waitable timer */ + if( SetWaitableTimer( stream->waitableTimer, &dueTime, timerPeriodMs, WaitableTimerAPCProc, pArg, FALSE ) != 0 ) + { + DWORD wfsoResult = 0; + do + { + /* wait for processingCompleted to be signaled or our timer APC to be called */ + wfsoResult = WaitForSingleObjectEx( stream->processingCompleted, timerPeriodMs * 10, /* alertable = */ TRUE ); + + }while( wfsoResult == WAIT_TIMEOUT || wfsoResult == WAIT_IO_COMPLETION ); + } + + CancelWaitableTimer( stream->waitableTimer ); + +#else + + /* tick using WaitForSingleObject timout */ + while ( WaitForSingleObject( stream->processingCompleted, timerPeriodMs ) == WAIT_TIMEOUT ) + { + TimerCallback( 0, 0, (DWORD_PTR)pArg, 0, 0 ); + } +#endif /* PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT */ + + SetEvent( stream->processingThreadCompleted ); + + return 0; +} + +#endif /* !PA_WIN_DS_USE_WMME_TIMER */ + +/*********************************************************************************** + When CloseStream() is called, the multi-api layer ensures that + the stream has already been stopped or aborted. +*/ +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaWinDsStream *stream = (PaWinDsStream*)s; + + CloseHandle( stream->processingCompleted ); + +#ifdef PA_WIN_DS_USE_WAITABLE_TIMER_OBJECT + if( stream->waitableTimer != NULL ) + CloseHandle( stream->waitableTimer ); +#endif + +#ifndef PA_WIN_DS_USE_WMME_TIMER + CloseHandle( stream->processingThreadCompleted ); +#endif + + // Cleanup the sound buffers + if( stream->pDirectSoundOutputBuffer ) + { + IDirectSoundBuffer_Stop( stream->pDirectSoundOutputBuffer ); + IDirectSoundBuffer_Release( stream->pDirectSoundOutputBuffer ); + stream->pDirectSoundOutputBuffer = NULL; + } + + if( stream->pDirectSoundPrimaryBuffer ) + { + IDirectSoundBuffer_Release( stream->pDirectSoundPrimaryBuffer ); + stream->pDirectSoundPrimaryBuffer = NULL; + } + + if( stream->pDirectSoundInputBuffer ) + { + IDirectSoundCaptureBuffer_Stop( stream->pDirectSoundInputBuffer ); + IDirectSoundCaptureBuffer_Release( stream->pDirectSoundInputBuffer ); + stream->pDirectSoundInputBuffer = NULL; + } + + if( stream->pDirectSoundCapture ) + { + IDirectSoundCapture_Release( stream->pDirectSoundCapture ); + stream->pDirectSoundCapture = NULL; + } + + if( stream->pDirectSound ) + { + IDirectSound_Release( stream->pDirectSound ); + stream->pDirectSound = NULL; + } + +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE + if( stream->pDirectSoundFullDuplex8 ) + { + IDirectSoundFullDuplex_Release( stream->pDirectSoundFullDuplex8 ); + stream->pDirectSoundFullDuplex8 = NULL; + } +#endif + + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + PaUtil_FreeMemory( stream ); + + return result; +} + +/***********************************************************************************/ +static HRESULT ClearOutputBuffer( PaWinDsStream *stream ) +{ + PaError result = paNoError; + unsigned char* pDSBuffData; + DWORD dwDataLen; + HRESULT hr; + + hr = IDirectSoundBuffer_SetCurrentPosition( stream->pDirectSoundOutputBuffer, 0 ); + DBUG(("PaHost_ClearOutputBuffer: IDirectSoundBuffer_SetCurrentPosition returned = 0x%X.\n", hr)); + if( hr != DS_OK ) + return hr; + + // Lock the DS buffer + if ((hr = IDirectSoundBuffer_Lock( stream->pDirectSoundOutputBuffer, 0, stream->outputBufferSizeBytes, (LPVOID*)&pDSBuffData, + &dwDataLen, NULL, 0, 0)) != DS_OK ) + return hr; + + // Zero the DS buffer + ZeroMemory(pDSBuffData, dwDataLen); + // Unlock the DS buffer + if ((hr = IDirectSoundBuffer_Unlock( stream->pDirectSoundOutputBuffer, pDSBuffData, dwDataLen, NULL, 0)) != DS_OK) + return hr; + + // Let DSound set the starting write position because if we set it to zero, it looks like the + // buffer is full to begin with. This causes a long pause before sound starts when using large buffers. + if ((hr = IDirectSoundBuffer_GetCurrentPosition( stream->pDirectSoundOutputBuffer, + &stream->previousPlayCursor, &stream->outputBufferWriteOffsetBytes )) != DS_OK) + return hr; + + /* printf("DSW_InitOutputBuffer: playCursor = %d, writeCursor = %d\n", playCursor, dsw->dsw_WriteOffset ); */ + + return DS_OK; +} + +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaWinDsStream *stream = (PaWinDsStream*)s; + HRESULT hr; + + stream->callbackResult = paContinue; + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + + ResetEvent( stream->processingCompleted ); + +#ifndef PA_WIN_DS_USE_WMME_TIMER + ResetEvent( stream->processingThreadCompleted ); +#endif + + if( stream->bufferProcessor.inputChannelCount > 0 ) + { + // Start the buffer capture + if( stream->pDirectSoundInputBuffer != NULL ) // FIXME: not sure this check is necessary + { + hr = IDirectSoundCaptureBuffer_Start( stream->pDirectSoundInputBuffer, DSCBSTART_LOOPING ); + } + + DBUG(("StartStream: DSW_StartInput returned = 0x%X.\n", hr)); + if( hr != DS_OK ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ); + goto error; + } + } + + stream->framesWritten = 0; + stream->callbackFlags = 0; + + stream->abortProcessing = 0; + stream->stopProcessing = 0; + + if( stream->bufferProcessor.outputChannelCount > 0 ) + { + QueryPerformanceCounter( &stream->previousPlayTime ); + stream->finalZeroBytesWritten = 0; + + hr = ClearOutputBuffer( stream ); + if( hr != DS_OK ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ); + goto error; + } + + if( stream->streamRepresentation.streamCallback && (stream->streamFlags & paPrimeOutputBuffersUsingStreamCallback) ) + { + stream->callbackFlags = paPrimingOutput; + + TimeSlice( stream ); + /* we ignore the return value from TimeSlice here and start the stream as usual. + The first timer callback will detect if the callback has completed. */ + + stream->callbackFlags = 0; + } + + // Start the buffer playback in a loop. + if( stream->pDirectSoundOutputBuffer != NULL ) // FIXME: not sure this needs to be checked here + { + hr = IDirectSoundBuffer_Play( stream->pDirectSoundOutputBuffer, 0, 0, DSBPLAY_LOOPING ); + DBUG(("PaHost_StartOutput: IDirectSoundBuffer_Play returned = 0x%X.\n", hr)); + if( hr != DS_OK ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ); + goto error; + } + stream->outputIsRunning = TRUE; + } + } + + if( stream->streamRepresentation.streamCallback ) + { + TIMECAPS timecaps; + int timerPeriodMs = stream->pollingPeriodSeconds * MSECS_PER_SECOND; + if( timerPeriodMs < 1 ) + timerPeriodMs = 1; + + /* set windows scheduler granularity only as fine as needed, no finer */ + /* Although this is not fully documented by MS, it appears that + timeBeginPeriod() affects the scheduling granulatity of all timers + including Waitable Timer Objects. So we always call timeBeginPeriod, whether + we're using an MM timer callback via timeSetEvent or not. + */ + assert( stream->systemTimerResolutionPeriodMs == 0 ); + if( timeGetDevCaps( &timecaps, sizeof(TIMECAPS) == MMSYSERR_NOERROR && timecaps.wPeriodMin > 0 ) ) + { + /* aim for resolution 4 times higher than polling rate */ + stream->systemTimerResolutionPeriodMs = (stream->pollingPeriodSeconds * MSECS_PER_SECOND) / 4; + if( stream->systemTimerResolutionPeriodMs < timecaps.wPeriodMin ) + stream->systemTimerResolutionPeriodMs = timecaps.wPeriodMin; + if( stream->systemTimerResolutionPeriodMs > timecaps.wPeriodMax ) + stream->systemTimerResolutionPeriodMs = timecaps.wPeriodMax; + + if( timeBeginPeriod( stream->systemTimerResolutionPeriodMs ) != MMSYSERR_NOERROR ) + stream->systemTimerResolutionPeriodMs = 0; /* timeBeginPeriod failed, so we don't need to call timeEndPeriod() later */ + } + + +#ifdef PA_WIN_DS_USE_WMME_TIMER + /* Create timer that will wake us up so we can fill the DSound buffer. */ + /* We have deprecated timeSetEvent because all MM timer callbacks + are serialised onto a single thread. Which creates problems with multiple + PA streams, or when also using timers for other time critical tasks + */ + stream->timerID = timeSetEvent( timerPeriodMs, stream->systemTimerResolutionPeriodMs, (LPTIMECALLBACK) TimerCallback, + (DWORD_PTR) stream, TIME_PERIODIC | TIME_KILL_SYNCHRONOUS ); + + if( stream->timerID == 0 ) + { + stream->isActive = 0; + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( GetLastError() ); + goto error; + } +#else + /* Create processing thread which calls TimerCallback */ + + stream->processingThread = CREATE_THREAD( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId ); + if( !stream->processingThread ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( GetLastError() ); + goto error; + } + + if( !SetThreadPriority( stream->processingThread, THREAD_PRIORITY_TIME_CRITICAL ) ) + { + result = paUnanticipatedHostError; + PA_DS_SET_LAST_DIRECTSOUND_ERROR( GetLastError() ); + goto error; + } +#endif + } + + stream->isActive = 1; + stream->isStarted = 1; + + assert( result == paNoError ); + return result; + +error: + + if( stream->pDirectSoundOutputBuffer != NULL && stream->outputIsRunning ) + IDirectSoundBuffer_Stop( stream->pDirectSoundOutputBuffer ); + stream->outputIsRunning = FALSE; + +#ifndef PA_WIN_DS_USE_WMME_TIMER + if( stream->processingThread ) + { +#ifdef CLOSE_THREAD_HANDLE + CLOSE_THREAD_HANDLE( stream->processingThread ); /* Delete thread. */ +#endif + stream->processingThread = NULL; + } +#endif + + return result; +} + + +/***********************************************************************************/ +static PaError StopStream( PaStream *s ) +{ + PaError result = paNoError; + PaWinDsStream *stream = (PaWinDsStream*)s; + HRESULT hr; + int timeoutMsec; + + if( stream->streamRepresentation.streamCallback ) + { + stream->stopProcessing = 1; + + /* Set timeout at 4 times maximum time we might wait. */ + timeoutMsec = (int) (4 * MSECS_PER_SECOND * (stream->hostBufferSizeFrames / stream->streamRepresentation.streamInfo.sampleRate)); + + WaitForSingleObject( stream->processingCompleted, timeoutMsec ); + } + +#ifdef PA_WIN_DS_USE_WMME_TIMER + if( stream->timerID != 0 ) + { + timeKillEvent(stream->timerID); /* Stop callback timer. */ + stream->timerID = 0; + } +#else + if( stream->processingThread ) + { + if( WaitForSingleObject( stream->processingThreadCompleted, 30*100 ) == WAIT_TIMEOUT ) + return paUnanticipatedHostError; + +#ifdef CLOSE_THREAD_HANDLE + CloseHandle( stream->processingThread ); /* Delete thread. */ + stream->processingThread = NULL; +#endif + + } +#endif + + if( stream->systemTimerResolutionPeriodMs > 0 ){ + timeEndPeriod( stream->systemTimerResolutionPeriodMs ); + stream->systemTimerResolutionPeriodMs = 0; + } + + if( stream->bufferProcessor.outputChannelCount > 0 ) + { + // Stop the buffer playback + if( stream->pDirectSoundOutputBuffer != NULL ) + { + stream->outputIsRunning = FALSE; + // FIXME: what happens if IDirectSoundBuffer_Stop returns an error? + hr = IDirectSoundBuffer_Stop( stream->pDirectSoundOutputBuffer ); + + if( stream->pDirectSoundPrimaryBuffer ) + IDirectSoundBuffer_Stop( stream->pDirectSoundPrimaryBuffer ); /* FIXME we never started the primary buffer so I'm not sure we need to stop it */ + } + } + + if( stream->bufferProcessor.inputChannelCount > 0 ) + { + // Stop the buffer capture + if( stream->pDirectSoundInputBuffer != NULL ) + { + // FIXME: what happens if IDirectSoundCaptureBuffer_Stop returns an error? + hr = IDirectSoundCaptureBuffer_Stop( stream->pDirectSoundInputBuffer ); + } + } + + stream->isStarted = 0; + + return result; +} + + +/***********************************************************************************/ +static PaError AbortStream( PaStream *s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + stream->abortProcessing = 1; + return StopStream( s ); +} + + +/***********************************************************************************/ +static PaError IsStreamStopped( PaStream *s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + return !stream->isStarted; +} + + +/***********************************************************************************/ +static PaError IsStreamActive( PaStream *s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + return stream->isActive; +} + +/***********************************************************************************/ +static PaTime GetStreamTime( PaStream *s ) +{ + /* suppress unused variable warnings */ + (void) s; + + return PaUtil_GetTime(); +} + + +/***********************************************************************************/ +static double GetStreamCpuLoad( PaStream* s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + + +/*********************************************************************************** + As separate stream interfaces are used for blocking and callback + streams, the following functions can be guaranteed to only be called + for blocking streams. +*/ + +static PaError ReadStream( PaStream* s, + void *buffer, + unsigned long frames ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + /* suppress unused variable warnings */ + (void) buffer; + (void) frames; + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return paNoError; +} + + +/***********************************************************************************/ +static PaError WriteStream( PaStream* s, + const void *buffer, + unsigned long frames ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + /* suppress unused variable warnings */ + (void) buffer; + (void) frames; + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return paNoError; +} + + +/***********************************************************************************/ +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return 0; +} + + +/***********************************************************************************/ +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return 0; +} + diff --git a/Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c b/Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c new file mode 100644 index 0000000000..c4e3c4ecab --- /dev/null +++ b/Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c @@ -0,0 +1,224 @@ +/* + * Interface for dynamically loading directsound and providing a dummy + * implementation if it isn't present. + * + * Author: Ross Bencina (some portions Phil Burk & Robert Marsanyi) + * + * For PortAudio Portable Real-Time Audio Library + * For more information see: http://www.portaudio.com + * Copyright (c) 1999-2006 Phil Burk, Robert Marsanyi and Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#include "pa_win_ds_dynlink.h" +#include "pa_debugprint.h" + +PaWinDsDSoundEntryPoints paWinDsDSoundEntryPoints = { 0, 0, 0, 0, 0, 0, 0 }; + + +static HRESULT WINAPI DummyDllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) +{ + (void)rclsid; /* unused parameter */ + (void)riid; /* unused parameter */ + (void)ppv; /* unused parameter */ + return CLASS_E_CLASSNOTAVAILABLE; +} + +static HRESULT WINAPI DummyDirectSoundCreate(LPGUID lpcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter) +{ + (void)lpcGuidDevice; /* unused parameter */ + (void)ppDS; /* unused parameter */ + (void)pUnkOuter; /* unused parameter */ + return E_NOTIMPL; +} + +static HRESULT WINAPI DummyDirectSoundEnumerateW(LPDSENUMCALLBACKW lpDSEnumCallback, LPVOID lpContext) +{ + (void)lpDSEnumCallback; /* unused parameter */ + (void)lpContext; /* unused parameter */ + return E_NOTIMPL; +} + +static HRESULT WINAPI DummyDirectSoundEnumerateA(LPDSENUMCALLBACKA lpDSEnumCallback, LPVOID lpContext) +{ + (void)lpDSEnumCallback; /* unused parameter */ + (void)lpContext; /* unused parameter */ + return E_NOTIMPL; +} + +static HRESULT WINAPI DummyDirectSoundCaptureCreate(LPGUID lpcGUID, LPDIRECTSOUNDCAPTURE *lplpDSC, LPUNKNOWN pUnkOuter) +{ + (void)lpcGUID; /* unused parameter */ + (void)lplpDSC; /* unused parameter */ + (void)pUnkOuter; /* unused parameter */ + return E_NOTIMPL; +} + +static HRESULT WINAPI DummyDirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW lpDSCEnumCallback, LPVOID lpContext) +{ + (void)lpDSCEnumCallback; /* unused parameter */ + (void)lpContext; /* unused parameter */ + return E_NOTIMPL; +} + +static HRESULT WINAPI DummyDirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA lpDSCEnumCallback, LPVOID lpContext) +{ + (void)lpDSCEnumCallback; /* unused parameter */ + (void)lpContext; /* unused parameter */ + return E_NOTIMPL; +} + +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE +static HRESULT WINAPI DummyDirectSoundFullDuplexCreate8( + LPCGUID pcGuidCaptureDevice, + LPCGUID pcGuidRenderDevice, + LPCDSCBUFFERDESC pcDSCBufferDesc, + LPCDSBUFFERDESC pcDSBufferDesc, + HWND hWnd, + DWORD dwLevel, + LPDIRECTSOUNDFULLDUPLEX * ppDSFD, + LPDIRECTSOUNDCAPTUREBUFFER8 * ppDSCBuffer8, + LPDIRECTSOUNDBUFFER8 * ppDSBuffer8, + LPUNKNOWN pUnkOuter) +{ + (void)pcGuidCaptureDevice; /* unused parameter */ + (void)pcGuidRenderDevice; /* unused parameter */ + (void)pcDSCBufferDesc; /* unused parameter */ + (void)pcDSBufferDesc; /* unused parameter */ + (void)hWnd; /* unused parameter */ + (void)dwLevel; /* unused parameter */ + (void)ppDSFD; /* unused parameter */ + (void)ppDSCBuffer8; /* unused parameter */ + (void)ppDSBuffer8; /* unused parameter */ + (void)pUnkOuter; /* unused parameter */ + + return E_NOTIMPL; +} +#endif /* PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE */ + +void PaWinDs_InitializeDSoundEntryPoints(void) +{ + paWinDsDSoundEntryPoints.hInstance_ = LoadLibraryA("dsound.dll"); + if( paWinDsDSoundEntryPoints.hInstance_ != NULL ) + { + paWinDsDSoundEntryPoints.DllGetClassObject = + (HRESULT (WINAPI *)(REFCLSID, REFIID , LPVOID *)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DllGetClassObject" ); + if( paWinDsDSoundEntryPoints.DllGetClassObject == NULL ) + paWinDsDSoundEntryPoints.DllGetClassObject = DummyDllGetClassObject; + + paWinDsDSoundEntryPoints.DirectSoundCreate = + (HRESULT (WINAPI *)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCreate" ); + if( paWinDsDSoundEntryPoints.DirectSoundCreate == NULL ) + paWinDsDSoundEntryPoints.DirectSoundCreate = DummyDirectSoundCreate; + + paWinDsDSoundEntryPoints.DirectSoundEnumerateW = + (HRESULT (WINAPI *)(LPDSENUMCALLBACKW, LPVOID)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundEnumerateW" ); + if( paWinDsDSoundEntryPoints.DirectSoundEnumerateW == NULL ) + paWinDsDSoundEntryPoints.DirectSoundEnumerateW = DummyDirectSoundEnumerateW; + + paWinDsDSoundEntryPoints.DirectSoundEnumerateA = + (HRESULT (WINAPI *)(LPDSENUMCALLBACKA, LPVOID)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundEnumerateA" ); + if( paWinDsDSoundEntryPoints.DirectSoundEnumerateA == NULL ) + paWinDsDSoundEntryPoints.DirectSoundEnumerateA = DummyDirectSoundEnumerateA; + + paWinDsDSoundEntryPoints.DirectSoundCaptureCreate = + (HRESULT (WINAPI *)(LPGUID, LPDIRECTSOUNDCAPTURE *, LPUNKNOWN)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCaptureCreate" ); + if( paWinDsDSoundEntryPoints.DirectSoundCaptureCreate == NULL ) + paWinDsDSoundEntryPoints.DirectSoundCaptureCreate = DummyDirectSoundCaptureCreate; + + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW = + (HRESULT (WINAPI *)(LPDSENUMCALLBACKW, LPVOID)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCaptureEnumerateW" ); + if( paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW == NULL ) + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW = DummyDirectSoundCaptureEnumerateW; + + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA = + (HRESULT (WINAPI *)(LPDSENUMCALLBACKA, LPVOID)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundCaptureEnumerateA" ); + if( paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA == NULL ) + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA = DummyDirectSoundCaptureEnumerateA; + +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE + paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 = + (HRESULT (WINAPI *)(LPCGUID, LPCGUID, LPCDSCBUFFERDESC, LPCDSBUFFERDESC, + HWND, DWORD, LPDIRECTSOUNDFULLDUPLEX *, LPDIRECTSOUNDCAPTUREBUFFER8 *, + LPDIRECTSOUNDBUFFER8 *, LPUNKNOWN)) + GetProcAddress( paWinDsDSoundEntryPoints.hInstance_, "DirectSoundFullDuplexCreate" ); + if( paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 == NULL ) + paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 = DummyDirectSoundFullDuplexCreate8; +#endif + } + else + { + DWORD errorCode = GetLastError(); // 126 (0x7E) == ERROR_MOD_NOT_FOUND + PA_DEBUG(("Couldn't load dsound.dll error code: %d \n",errorCode)); + + /* initialize with dummy entry points to make live easy when ds isn't present */ + paWinDsDSoundEntryPoints.DirectSoundCreate = DummyDirectSoundCreate; + paWinDsDSoundEntryPoints.DirectSoundEnumerateW = DummyDirectSoundEnumerateW; + paWinDsDSoundEntryPoints.DirectSoundEnumerateA = DummyDirectSoundEnumerateA; + paWinDsDSoundEntryPoints.DirectSoundCaptureCreate = DummyDirectSoundCaptureCreate; + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW = DummyDirectSoundCaptureEnumerateW; + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA = DummyDirectSoundCaptureEnumerateA; +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE + paWinDsDSoundEntryPoints.DirectSoundFullDuplexCreate8 = DummyDirectSoundFullDuplexCreate8; +#endif + } +} + + +void PaWinDs_TerminateDSoundEntryPoints(void) +{ + if( paWinDsDSoundEntryPoints.hInstance_ != NULL ) + { + /* ensure that we crash reliably if the entry points arent initialised */ + paWinDsDSoundEntryPoints.DirectSoundCreate = 0; + paWinDsDSoundEntryPoints.DirectSoundEnumerateW = 0; + paWinDsDSoundEntryPoints.DirectSoundEnumerateA = 0; + paWinDsDSoundEntryPoints.DirectSoundCaptureCreate = 0; + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateW = 0; + paWinDsDSoundEntryPoints.DirectSoundCaptureEnumerateA = 0; + + FreeLibrary( paWinDsDSoundEntryPoints.hInstance_ ); + paWinDsDSoundEntryPoints.hInstance_ = NULL; + } +} \ No newline at end of file diff --git a/Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h b/Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h new file mode 100644 index 0000000000..fd6d8feda6 --- /dev/null +++ b/Externals/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h @@ -0,0 +1,106 @@ +/* + * Interface for dynamically loading directsound and providing a dummy + * implementation if it isn't present. + * + * Author: Ross Bencina (some portions Phil Burk & Robert Marsanyi) + * + * For PortAudio Portable Real-Time Audio Library + * For more information see: http://www.portaudio.com + * Copyright (c) 1999-2006 Phil Burk, Robert Marsanyi and Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#ifndef INCLUDED_PA_DSOUND_DYNLINK_H +#define INCLUDED_PA_DSOUND_DYNLINK_H + +/* on Borland compilers, WIN32 doesn't seem to be defined by default, which + breaks dsound.h. Adding the define here fixes the problem. - rossb. */ +#ifdef __BORLANDC__ +#if !defined(WIN32) +#define WIN32 +#endif +#endif + +/* + Use the earliest version of DX required, no need to polute the namespace +*/ +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE +#define DIRECTSOUND_VERSION 0x0800 +#else +#define DIRECTSOUND_VERSION 0x0300 +#endif +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +typedef struct +{ + HINSTANCE hInstance_; + + HRESULT (WINAPI *DllGetClassObject)(REFCLSID , REFIID , LPVOID *); + + HRESULT (WINAPI *DirectSoundCreate)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); + HRESULT (WINAPI *DirectSoundEnumerateW)(LPDSENUMCALLBACKW, LPVOID); + HRESULT (WINAPI *DirectSoundEnumerateA)(LPDSENUMCALLBACKA, LPVOID); + + HRESULT (WINAPI *DirectSoundCaptureCreate)(LPGUID, LPDIRECTSOUNDCAPTURE *, LPUNKNOWN); + HRESULT (WINAPI *DirectSoundCaptureEnumerateW)(LPDSENUMCALLBACKW, LPVOID); + HRESULT (WINAPI *DirectSoundCaptureEnumerateA)(LPDSENUMCALLBACKA, LPVOID); + +#ifdef PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE + HRESULT (WINAPI *DirectSoundFullDuplexCreate8)( + LPCGUID, LPCGUID, LPCDSCBUFFERDESC, LPCDSBUFFERDESC, + HWND, DWORD, LPDIRECTSOUNDFULLDUPLEX *, LPDIRECTSOUNDCAPTUREBUFFER8 *, + LPDIRECTSOUNDBUFFER8 *, LPUNKNOWN ); +#endif +}PaWinDsDSoundEntryPoints; + +extern PaWinDsDSoundEntryPoints paWinDsDSoundEntryPoints; + +void PaWinDs_InitializeDSoundEntryPoints(void); +void PaWinDs_TerminateDSoundEntryPoints(void); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* INCLUDED_PA_DSOUND_DYNLINK_H */ diff --git a/Externals/portaudio/src/hostapi/jack/pa_jack.c b/Externals/portaudio/src/hostapi/jack/pa_jack.c new file mode 100644 index 0000000000..25b7fd2d74 --- /dev/null +++ b/Externals/portaudio/src/hostapi/jack/pa_jack.c @@ -0,0 +1,1765 @@ +/* + * $Id: pa_jack.c 1668 2011-05-02 17:07:11Z rossb $ + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * JACK Implementation by Joshua Haberman + * + * Copyright (c) 2004 Stefan Westerfeld + * Copyright (c) 2004 Arve Knudsen + * Copyright (c) 2002 Joshua Haberman + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#include +#include +#include +#include +#include +#include +#include +#include /* EBUSY */ +#include /* sig_atomic_t */ +#include +#include + +#include +#include + +#include "pa_util.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_process.h" +#include "pa_allocation.h" +#include "pa_cpuload.h" +#include "pa_ringbuffer.h" +#include "pa_debugprint.h" + +static pthread_t mainThread_; +static char *jackErr_ = NULL; +static const char* clientName_ = "PortAudio"; + +#define STRINGIZE_HELPER(expr) #expr +#define STRINGIZE(expr) STRINGIZE_HELPER(expr) + +/* Check PaError */ +#define ENSURE_PA(expr) \ + do { \ + PaError paErr; \ + if( (paErr = (expr)) < paNoError ) \ + { \ + if( (paErr) == paUnanticipatedHostError && pthread_self() == mainThread_ ) \ + { \ + const char *err = jackErr_; \ + if (! err ) err = "unknown error"; \ + PaUtil_SetLastHostErrorInfo( paJACK, -1, err ); \ + } \ + PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + result = paErr; \ + goto error; \ + } \ + } while( 0 ) + +#define UNLESS(expr, code) \ + do { \ + if( (expr) == 0 ) \ + { \ + if( (code) == paUnanticipatedHostError && pthread_self() == mainThread_ ) \ + { \ + const char *err = jackErr_; \ + if (!err) err = "unknown error"; \ + PaUtil_SetLastHostErrorInfo( paJACK, -1, err ); \ + } \ + PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + result = (code); \ + goto error; \ + } \ + } while( 0 ) + +#define ASSERT_CALL(expr, success) \ + do { \ + int err = (expr); \ + assert( err == success ); \ + } while( 0 ) + +/* + * Functions that directly map to the PortAudio stream interface + */ + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +/*static PaTime GetStreamInputLatency( PaStream *stream );*/ +/*static PaTime GetStreamOutputLatency( PaStream *stream );*/ +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); + + +/* + * Data specific to this API + */ + +struct PaJackStream; + +typedef struct +{ + PaUtilHostApiRepresentation commonHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *deviceInfoMemory; + + jack_client_t *jack_client; + int jack_buffer_size; + PaHostApiIndex hostApiIndex; + + pthread_mutex_t mtx; + pthread_cond_t cond; + unsigned long inputBase, outputBase; + + /* For dealing with the process thread */ + volatile int xrun; /* Received xrun notification from JACK? */ + struct PaJackStream * volatile toAdd, * volatile toRemove; + struct PaJackStream *processQueue; + volatile sig_atomic_t jackIsDown; +} +PaJackHostApiRepresentation; + +/* PaJackStream - a stream data structure specifically for this implementation */ + +typedef struct PaJackStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilBufferProcessor bufferProcessor; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaJackHostApiRepresentation *hostApi; + + /* our input and output ports */ + jack_port_t **local_input_ports; + jack_port_t **local_output_ports; + + /* the input and output ports of the client we are connecting to */ + jack_port_t **remote_input_ports; + jack_port_t **remote_output_ports; + + int num_incoming_connections; + int num_outgoing_connections; + + jack_client_t *jack_client; + + /* The stream is running if it's still producing samples. + * The stream is active if samples it produced are still being heard. + */ + volatile sig_atomic_t is_running; + volatile sig_atomic_t is_active; + /* Used to signal processing thread that stream should start or stop, respectively */ + volatile sig_atomic_t doStart, doStop, doAbort; + + jack_nframes_t t0; + + PaUtilAllocationGroup *stream_memory; + + /* These are useful in the process callback */ + + int callbackResult; + int isSilenced; + int xrun; + + /* These are useful for the blocking API */ + + int isBlockingStream; + PaUtilRingBuffer inFIFO; + PaUtilRingBuffer outFIFO; + volatile sig_atomic_t data_available; + sem_t data_semaphore; + int bytesPerFrame; + int samplesPerFrame; + + struct PaJackStream *next; +} +PaJackStream; + +#define TRUE 1 +#define FALSE 0 + +/* + * Functions specific to this API + */ + +static int JackCallback( jack_nframes_t frames, void *userData ); + + +/* + * + * Implementation + * + */ + +/* ---- blocking emulation layer ---- */ + +/* Allocate buffer. */ +static PaError BlockingInitFIFO( PaUtilRingBuffer *rbuf, long numFrames, long bytesPerFrame ) +{ + long numBytes = numFrames * bytesPerFrame; + char *buffer = (char *) malloc( numBytes ); + if( buffer == NULL ) return paInsufficientMemory; + memset( buffer, 0, numBytes ); + return (PaError) PaUtil_InitializeRingBuffer( rbuf, 1, numBytes, buffer ); +} + +/* Free buffer. */ +static PaError BlockingTermFIFO( PaUtilRingBuffer *rbuf ) +{ + if( rbuf->buffer ) free( rbuf->buffer ); + rbuf->buffer = NULL; + return paNoError; +} + +static int +BlockingCallback( const void *inputBuffer, + void *outputBuffer, + unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ) +{ + struct PaJackStream *stream = (PaJackStream *)userData; + long numBytes = stream->bytesPerFrame * framesPerBuffer; + + /* This may get called with NULL inputBuffer during initial setup. */ + if( inputBuffer != NULL ) + { + PaUtil_WriteRingBuffer( &stream->inFIFO, inputBuffer, numBytes ); + } + if( outputBuffer != NULL ) + { + int numRead = PaUtil_ReadRingBuffer( &stream->outFIFO, outputBuffer, numBytes ); + /* Zero out remainder of buffer if we run out of data. */ + memset( (char *)outputBuffer + numRead, 0, numBytes - numRead ); + } + + if( !stream->data_available ) + { + stream->data_available = 1; + sem_post( &stream->data_semaphore ); + } + return paContinue; +} + +static PaError +BlockingBegin( PaJackStream *stream, int minimum_buffer_size ) +{ + long doRead = 0; + long doWrite = 0; + PaError result = paNoError; + long numFrames; + + doRead = stream->local_input_ports != NULL; + doWrite = stream->local_output_ports != NULL; + /* */ + stream->samplesPerFrame = 2; + stream->bytesPerFrame = sizeof(float) * stream->samplesPerFrame; + /* */ + numFrames = 32; + while (numFrames < minimum_buffer_size) + numFrames *= 2; + + if( doRead ) + { + ENSURE_PA( BlockingInitFIFO( &stream->inFIFO, numFrames, stream->bytesPerFrame ) ); + } + if( doWrite ) + { + long numBytes; + + ENSURE_PA( BlockingInitFIFO( &stream->outFIFO, numFrames, stream->bytesPerFrame ) ); + + /* Make Write FIFO appear full initially. */ + numBytes = PaUtil_GetRingBufferWriteAvailable( &stream->outFIFO ); + PaUtil_AdvanceRingBufferWriteIndex( &stream->outFIFO, numBytes ); + } + + stream->data_available = 0; + sem_init( &stream->data_semaphore, 0, 0 ); + +error: + return result; +} + +static void +BlockingEnd( PaJackStream *stream ) +{ + BlockingTermFIFO( &stream->inFIFO ); + BlockingTermFIFO( &stream->outFIFO ); + + sem_destroy( &stream->data_semaphore ); +} + +static PaError BlockingReadStream( PaStream* s, void *data, unsigned long numFrames ) +{ + PaError result = paNoError; + PaJackStream *stream = (PaJackStream *)s; + + long bytesRead; + char *p = (char *) data; + long numBytes = stream->bytesPerFrame * numFrames; + while( numBytes > 0 ) + { + bytesRead = PaUtil_ReadRingBuffer( &stream->inFIFO, p, numBytes ); + numBytes -= bytesRead; + p += bytesRead; + if( numBytes > 0 ) + { + /* see write for an explanation */ + if( stream->data_available ) + stream->data_available = 0; + else + sem_wait( &stream->data_semaphore ); + } + } + + return result; +} + +static PaError BlockingWriteStream( PaStream* s, const void *data, unsigned long numFrames ) +{ + PaError result = paNoError; + PaJackStream *stream = (PaJackStream *)s; + long bytesWritten; + char *p = (char *) data; + long numBytes = stream->bytesPerFrame * numFrames; + while( numBytes > 0 ) + { + bytesWritten = PaUtil_WriteRingBuffer( &stream->outFIFO, p, numBytes ); + numBytes -= bytesWritten; + p += bytesWritten; + if( numBytes > 0 ) + { + /* we use the following algorithm: + * (1) write data + * (2) if some data didn't fit into the ringbuffer, set data_available to 0 + * to indicate to the audio that if space becomes available, we want to know + * (3) retry to write data (because it might be that between (1) and (2) + * new space in the buffer became available) + * (4) if this failed, we are sure that the buffer is really empty and + * we will definitely receive a notification when it becomes available + * thus we can safely sleep + * + * if the algorithm bailed out in step (3) before, it leaks a count of 1 + * on the semaphore; however, it doesn't matter, because if we block in (4), + * we also do it in a loop + */ + if( stream->data_available ) + stream->data_available = 0; + else + sem_wait( &stream->data_semaphore ); + } + } + + return result; +} + +static signed long +BlockingGetStreamReadAvailable( PaStream* s ) +{ + PaJackStream *stream = (PaJackStream *)s; + + int bytesFull = PaUtil_GetRingBufferReadAvailable( &stream->inFIFO ); + return bytesFull / stream->bytesPerFrame; +} + +static signed long +BlockingGetStreamWriteAvailable( PaStream* s ) +{ + PaJackStream *stream = (PaJackStream *)s; + + int bytesEmpty = PaUtil_GetRingBufferWriteAvailable( &stream->outFIFO ); + return bytesEmpty / stream->bytesPerFrame; +} + +static PaError +BlockingWaitEmpty( PaStream *s ) +{ + PaJackStream *stream = (PaJackStream *)s; + + while( PaUtil_GetRingBufferReadAvailable( &stream->outFIFO ) > 0 ) + { + stream->data_available = 0; + sem_wait( &stream->data_semaphore ); + } + return 0; +} + +/* ---- jack driver ---- */ + +/* BuildDeviceList(): + * + * The process of determining a list of PortAudio "devices" from + * JACK's client/port system is fairly involved, so it is separated + * into its own routine. + */ + +static PaError BuildDeviceList( PaJackHostApiRepresentation *jackApi ) +{ + /* Utility macros for the repetitive process of allocating memory */ + + /* JACK has no concept of a device. To JACK, there are clients + * which have an arbitrary number of ports. To make this + * intelligible to PortAudio clients, we will group each JACK client + * into a device, and make each port of that client a channel */ + + PaError result = paNoError; + PaUtilHostApiRepresentation *commonApi = &jackApi->commonHostApiRep; + + const char **jack_ports = NULL; + char **client_names = NULL; + char *regex_pattern = NULL; + int port_index, client_index, i; + double globalSampleRate; + regex_t port_regex; + unsigned long numClients = 0, numPorts = 0; + char *tmp_client_name = NULL; + + commonApi->info.defaultInputDevice = paNoDevice; + commonApi->info.defaultOutputDevice = paNoDevice; + commonApi->info.deviceCount = 0; + + /* Parse the list of ports, using a regex to grab the client names */ + ASSERT_CALL( regcomp( &port_regex, "^[^:]*", REG_EXTENDED ), 0 ); + + /* since we are rebuilding the list of devices, free all memory + * associated with the previous list */ + PaUtil_FreeAllAllocations( jackApi->deviceInfoMemory ); + + regex_pattern = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, jack_client_name_size() + 3 ); + tmp_client_name = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, jack_client_name_size() ); + + /* We can only retrieve the list of clients indirectly, by first + * asking for a list of all ports, then parsing the port names + * according to the client_name:port_name convention (which is + * enforced by jackd) + * A: If jack_get_ports returns NULL, there's nothing for us to do */ + UNLESS( (jack_ports = jack_get_ports( jackApi->jack_client, "", "", 0 )) && jack_ports[0], paNoError ); + /* Find number of ports */ + while( jack_ports[numPorts] ) + ++numPorts; + /* At least there will be one port per client :) */ + UNLESS( client_names = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, numPorts * + sizeof (char *) ), paInsufficientMemory ); + + /* Build a list of clients from the list of ports */ + for( numClients = 0, port_index = 0; jack_ports[port_index] != NULL; port_index++ ) + { + int client_seen = FALSE; + regmatch_t match_info; + const char *port = jack_ports[port_index]; + + /* extract the client name from the port name, using a regex + * that parses the clientname:portname syntax */ + UNLESS( !regexec( &port_regex, port, 1, &match_info, 0 ), paInternalError ); + assert(match_info.rm_eo - match_info.rm_so < jack_client_name_size()); + memcpy( tmp_client_name, port + match_info.rm_so, + match_info.rm_eo - match_info.rm_so ); + tmp_client_name[match_info.rm_eo - match_info.rm_so] = '\0'; + + /* do we know about this port's client yet? */ + for( i = 0; i < numClients; i++ ) + { + if( strcmp( tmp_client_name, client_names[i] ) == 0 ) + client_seen = TRUE; + } + + if (client_seen) + continue; /* A: Nothing to see here, move along */ + + UNLESS( client_names[numClients] = (char*)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, + strlen(tmp_client_name) + 1), paInsufficientMemory ); + + /* The alsa_pcm client should go in spot 0. If this + * is the alsa_pcm client AND we are NOT about to put + * it in spot 0 put it in spot 0 and move whatever + * was already in spot 0 to the end. */ + if( strcmp( "alsa_pcm", tmp_client_name ) == 0 && numClients > 0 ) + { + /* alsa_pcm goes in spot 0 */ + strcpy( client_names[ numClients ], client_names[0] ); + strcpy( client_names[0], tmp_client_name ); + } + else + { + /* put the new client at the end of the client list */ + strcpy( client_names[ numClients ], tmp_client_name ); + } + ++numClients; + } + + /* Now we have a list of clients, which will become the list of + * PortAudio devices. */ + + /* there is one global sample rate all clients must conform to */ + + globalSampleRate = jack_get_sample_rate( jackApi->jack_client ); + UNLESS( commonApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, + sizeof(PaDeviceInfo*) * numClients ), paInsufficientMemory ); + + assert( commonApi->info.deviceCount == 0 ); + + /* Create a PaDeviceInfo structure for every client */ + for( client_index = 0; client_index < numClients; client_index++ ) + { + PaDeviceInfo *curDevInfo; + const char **clientPorts = NULL; + + UNLESS( curDevInfo = (PaDeviceInfo*)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, + sizeof(PaDeviceInfo) ), paInsufficientMemory ); + UNLESS( curDevInfo->name = (char*)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, + strlen(client_names[client_index]) + 1 ), paInsufficientMemory ); + strcpy( (char *)curDevInfo->name, client_names[client_index] ); + + curDevInfo->structVersion = 2; + curDevInfo->hostApi = jackApi->hostApiIndex; + + /* JACK is very inflexible: there is one sample rate the whole + * system must run at, and all clients must speak IEEE float. */ + curDevInfo->defaultSampleRate = globalSampleRate; + + /* To determine how many input and output channels are available, + * we re-query jackd with more specific parameters. */ + + sprintf( regex_pattern, "%s:.*", client_names[client_index] ); + + /* ... what are your output ports (that we could input from)? */ + clientPorts = jack_get_ports( jackApi->jack_client, regex_pattern, + NULL, JackPortIsOutput); + curDevInfo->maxInputChannels = 0; + curDevInfo->defaultLowInputLatency = 0.; + curDevInfo->defaultHighInputLatency = 0.; + if( clientPorts ) + { + jack_port_t *p = jack_port_by_name( jackApi->jack_client, clientPorts[0] ); + curDevInfo->defaultLowInputLatency = curDevInfo->defaultHighInputLatency = + jack_port_get_latency( p ) / globalSampleRate; + + for( i = 0; clientPorts[i] != NULL; i++) + { + /* The number of ports returned is the number of output channels. + * We don't care what they are, we just care how many */ + curDevInfo->maxInputChannels++; + } + free(clientPorts); + } + + /* ... what are your input ports (that we could output to)? */ + clientPorts = jack_get_ports( jackApi->jack_client, regex_pattern, + NULL, JackPortIsInput); + curDevInfo->maxOutputChannels = 0; + curDevInfo->defaultLowOutputLatency = 0.; + curDevInfo->defaultHighOutputLatency = 0.; + if( clientPorts ) + { + jack_port_t *p = jack_port_by_name( jackApi->jack_client, clientPorts[0] ); + curDevInfo->defaultLowOutputLatency = curDevInfo->defaultHighOutputLatency = + jack_port_get_latency( p ) / globalSampleRate; + + for( i = 0; clientPorts[i] != NULL; i++) + { + /* The number of ports returned is the number of input channels. + * We don't care what they are, we just care how many */ + curDevInfo->maxOutputChannels++; + } + free(clientPorts); + } + + /* Add this client to the list of devices */ + commonApi->deviceInfos[client_index] = curDevInfo; + ++commonApi->info.deviceCount; + if( commonApi->info.defaultInputDevice == paNoDevice && curDevInfo->maxInputChannels > 0 ) + commonApi->info.defaultInputDevice = client_index; + if( commonApi->info.defaultOutputDevice == paNoDevice && curDevInfo->maxOutputChannels > 0 ) + commonApi->info.defaultOutputDevice = client_index; + } + +error: + regfree( &port_regex ); + free( jack_ports ); + return result; +} + +static void UpdateSampleRate( PaJackStream *stream, double sampleRate ) +{ + /* XXX: Maybe not the cleanest way of going about this? */ + stream->cpuLoadMeasurer.samplingPeriod = stream->bufferProcessor.samplePeriod = 1. / sampleRate; + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; +} + +static void JackErrorCallback( const char *msg ) +{ + if( pthread_self() == mainThread_ ) + { + assert( msg ); + jackErr_ = realloc( jackErr_, strlen( msg ) + 1 ); + strcpy( jackErr_, msg ); + } +} + +static void JackOnShutdown( void *arg ) +{ + PaJackHostApiRepresentation *jackApi = (PaJackHostApiRepresentation *)arg; + PaJackStream *stream = jackApi->processQueue; + + PA_DEBUG(( "%s: JACK server is shutting down\n", __FUNCTION__ )); + for( ; stream; stream = stream->next ) + { + stream->is_active = 0; + } + + /* Make sure that the main thread doesn't get stuck waiting on the condition */ + ASSERT_CALL( pthread_mutex_lock( &jackApi->mtx ), 0 ); + jackApi->jackIsDown = 1; + ASSERT_CALL( pthread_cond_signal( &jackApi->cond ), 0 ); + ASSERT_CALL( pthread_mutex_unlock( &jackApi->mtx ), 0 ); + +} + +static int JackSrCb( jack_nframes_t nframes, void *arg ) +{ + PaJackHostApiRepresentation *jackApi = (PaJackHostApiRepresentation *)arg; + double sampleRate = (double)nframes; + PaJackStream *stream = jackApi->processQueue; + + /* Update all streams in process queue */ + PA_DEBUG(( "%s: Acting on change in JACK samplerate: %f\n", __FUNCTION__, sampleRate )); + for( ; stream; stream = stream->next ) + { + if( stream->streamRepresentation.streamInfo.sampleRate != sampleRate ) + { + PA_DEBUG(( "%s: Updating samplerate\n", __FUNCTION__ )); + UpdateSampleRate( stream, sampleRate ); + } + } + + return 0; +} + +static int JackXRunCb(void *arg) { + PaJackHostApiRepresentation *hostApi = (PaJackHostApiRepresentation *)arg; + assert( hostApi ); + hostApi->xrun = TRUE; + PA_DEBUG(( "%s: JACK signalled xrun\n", __FUNCTION__ )); + return 0; +} + +PaError PaJack_Initialize( PaUtilHostApiRepresentation **hostApi, + PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + PaJackHostApiRepresentation *jackHostApi; + int activated = 0; + jack_status_t jackStatus = 0; + *hostApi = NULL; /* Initialize to NULL */ + + UNLESS( jackHostApi = (PaJackHostApiRepresentation*) + PaUtil_AllocateMemory( sizeof(PaJackHostApiRepresentation) ), paInsufficientMemory ); + UNLESS( jackHostApi->deviceInfoMemory = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); + + mainThread_ = pthread_self(); + ASSERT_CALL( pthread_mutex_init( &jackHostApi->mtx, NULL ), 0 ); + ASSERT_CALL( pthread_cond_init( &jackHostApi->cond, NULL ), 0 ); + + /* Try to become a client of the JACK server. If we cannot do + * this, then this API cannot be used. + * + * Without the JackNoStartServer option, the jackd server is started + * automatically which we do not want. + */ + + jackHostApi->jack_client = jack_client_open( clientName_, JackNoStartServer, &jackStatus ); + if( !jackHostApi->jack_client ) + { + /* the V19 development docs say that if an implementation + * detects that it cannot be used, it should return a NULL + * interface and paNoError */ + PA_DEBUG(( "%s: Couldn't connect to JACK, status: %d\n", __FUNCTION__, jackStatus )); + result = paNoError; + goto error; + } + + jackHostApi->hostApiIndex = hostApiIndex; + + *hostApi = &jackHostApi->commonHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paJACK; + (*hostApi)->info.name = "JACK Audio Connection Kit"; + + /* Build a device list by querying the JACK server */ + ENSURE_PA( BuildDeviceList( jackHostApi ) ); + + /* Register functions */ + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &jackHostApi->callbackStreamInterface, + CloseStream, StartStream, + StopStream, AbortStream, + IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, + PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &jackHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + BlockingReadStream, BlockingWriteStream, + BlockingGetStreamReadAvailable, BlockingGetStreamWriteAvailable ); + + jackHostApi->inputBase = jackHostApi->outputBase = 0; + jackHostApi->xrun = 0; + jackHostApi->toAdd = jackHostApi->toRemove = NULL; + jackHostApi->processQueue = NULL; + jackHostApi->jackIsDown = 0; + + jack_on_shutdown( jackHostApi->jack_client, JackOnShutdown, jackHostApi ); + jack_set_error_function( JackErrorCallback ); + jackHostApi->jack_buffer_size = jack_get_buffer_size ( jackHostApi->jack_client ); + /* Don't check for error, may not be supported (deprecated in at least jackdmp) */ + jack_set_sample_rate_callback( jackHostApi->jack_client, JackSrCb, jackHostApi ); + UNLESS( !jack_set_xrun_callback( jackHostApi->jack_client, JackXRunCb, jackHostApi ), paUnanticipatedHostError ); + UNLESS( !jack_set_process_callback( jackHostApi->jack_client, JackCallback, jackHostApi ), paUnanticipatedHostError ); + UNLESS( !jack_activate( jackHostApi->jack_client ), paUnanticipatedHostError ); + activated = 1; + + return result; + +error: + if( activated ) + ASSERT_CALL( jack_deactivate( jackHostApi->jack_client ), 0 ); + + if( jackHostApi ) + { + if( jackHostApi->jack_client ) + ASSERT_CALL( jack_client_close( jackHostApi->jack_client ), 0 ); + + if( jackHostApi->deviceInfoMemory ) + { + PaUtil_FreeAllAllocations( jackHostApi->deviceInfoMemory ); + PaUtil_DestroyAllocationGroup( jackHostApi->deviceInfoMemory ); + } + + PaUtil_FreeMemory( jackHostApi ); + } + return result; +} + + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaJackHostApiRepresentation *jackHostApi = (PaJackHostApiRepresentation*)hostApi; + + /* note: this automatically disconnects all ports, since a deactivated + * client is not allowed to have any ports connected */ + ASSERT_CALL( jack_deactivate( jackHostApi->jack_client ), 0 ); + + ASSERT_CALL( pthread_mutex_destroy( &jackHostApi->mtx ), 0 ); + ASSERT_CALL( pthread_cond_destroy( &jackHostApi->cond ), 0 ); + + ASSERT_CALL( jack_client_close( jackHostApi->jack_client ), 0 ); + + if( jackHostApi->deviceInfoMemory ) + { + PaUtil_FreeAllAllocations( jackHostApi->deviceInfoMemory ); + PaUtil_DestroyAllocationGroup( jackHostApi->deviceInfoMemory ); + } + + PaUtil_FreeMemory( jackHostApi ); + + free( jackErr_ ); + jackErr_ = NULL; +} + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + int inputChannelCount = 0, outputChannelCount = 0; + PaSampleFormat inputSampleFormat, outputSampleFormat; + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if( inputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support inputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if( outputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + outputChannelCount = 0; + } + + /* + The following check is not necessary for JACK. + + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported + + + Because the buffer adapter handles conversion between all standard + sample formats, the following checks are only required if paCustomFormat + is implemented, or under some other unusual conditions. + + - check that input device can support inputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - check that output device can support outputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + */ + + /* check that the device supports sampleRate */ + +#define ABS(x) ( (x) > 0 ? (x) : -(x) ) + if( ABS(sampleRate - jack_get_sample_rate(((PaJackHostApiRepresentation *) hostApi)->jack_client )) > 1 ) + return paInvalidSampleRate; +#undef ABS + + return paFormatIsSupported; +} + +/* Basic stream initialization */ +static PaError InitializeStream( PaJackStream *stream, PaJackHostApiRepresentation *hostApi, int numInputChannels, + int numOutputChannels ) +{ + PaError result = paNoError; + assert( stream ); + + memset( stream, 0, sizeof (PaJackStream) ); + UNLESS( stream->stream_memory = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); + stream->jack_client = hostApi->jack_client; + stream->hostApi = hostApi; + + if( numInputChannels > 0 ) + { + UNLESS( stream->local_input_ports = + (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numInputChannels ), + paInsufficientMemory ); + memset( stream->local_input_ports, 0, sizeof(jack_port_t*) * numInputChannels ); + UNLESS( stream->remote_output_ports = + (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numInputChannels ), + paInsufficientMemory ); + memset( stream->remote_output_ports, 0, sizeof(jack_port_t*) * numInputChannels ); + } + if( numOutputChannels > 0 ) + { + UNLESS( stream->local_output_ports = + (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numOutputChannels ), + paInsufficientMemory ); + memset( stream->local_output_ports, 0, sizeof(jack_port_t*) * numOutputChannels ); + UNLESS( stream->remote_input_ports = + (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numOutputChannels ), + paInsufficientMemory ); + memset( stream->remote_input_ports, 0, sizeof(jack_port_t*) * numOutputChannels ); + } + + stream->num_incoming_connections = numInputChannels; + stream->num_outgoing_connections = numOutputChannels; + +error: + return result; +} + +/*! + * Free resources associated with stream, and eventually stream itself. + * + * Frees allocated memory, and closes opened pcms. + */ +static void CleanUpStream( PaJackStream *stream, int terminateStreamRepresentation, int terminateBufferProcessor ) +{ + int i; + assert( stream ); + + if( stream->isBlockingStream ) + BlockingEnd( stream ); + + for( i = 0; i < stream->num_incoming_connections; ++i ) + { + if( stream->local_input_ports[i] ) + ASSERT_CALL( jack_port_unregister( stream->jack_client, stream->local_input_ports[i] ), 0 ); + } + for( i = 0; i < stream->num_outgoing_connections; ++i ) + { + if( stream->local_output_ports[i] ) + ASSERT_CALL( jack_port_unregister( stream->jack_client, stream->local_output_ports[i] ), 0 ); + } + + if( terminateStreamRepresentation ) + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + if( terminateBufferProcessor ) + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + + if( stream->stream_memory ) + { + PaUtil_FreeAllAllocations( stream->stream_memory ); + PaUtil_DestroyAllocationGroup( stream->stream_memory ); + } + PaUtil_FreeMemory( stream ); +} + +static PaError WaitCondition( PaJackHostApiRepresentation *hostApi ) +{ + PaError result = paNoError; + int err = 0; + PaTime pt = PaUtil_GetTime(); + struct timespec ts; + + ts.tv_sec = (time_t) floor( pt + 10 * 60 /* 10 minutes */ ); + ts.tv_nsec = (long) ((pt - floor( pt )) * 1000000000); + /* XXX: Best enclose in loop, in case of spurious wakeups? */ + err = pthread_cond_timedwait( &hostApi->cond, &hostApi->mtx, &ts ); + + /* Make sure we didn't time out */ + UNLESS( err != ETIMEDOUT, paTimedOut ); + UNLESS( !err, paInternalError ); + +error: + return result; +} + +static PaError AddStream( PaJackStream *stream ) +{ + PaError result = paNoError; + PaJackHostApiRepresentation *hostApi = stream->hostApi; + /* Add to queue of streams that should be processed */ + ASSERT_CALL( pthread_mutex_lock( &hostApi->mtx ), 0 ); + if( !hostApi->jackIsDown ) + { + hostApi->toAdd = stream; + /* Unlock mutex and await signal from processing thread */ + result = WaitCondition( stream->hostApi ); + } + ASSERT_CALL( pthread_mutex_unlock( &hostApi->mtx ), 0 ); + ENSURE_PA( result ); + + UNLESS( !hostApi->jackIsDown, paDeviceUnavailable ); + +error: + return result; +} + +/* Remove stream from processing queue */ +static PaError RemoveStream( PaJackStream *stream ) +{ + PaError result = paNoError; + PaJackHostApiRepresentation *hostApi = stream->hostApi; + + /* Add to queue over streams that should be processed */ + ASSERT_CALL( pthread_mutex_lock( &hostApi->mtx ), 0 ); + if( !hostApi->jackIsDown ) + { + hostApi->toRemove = stream; + /* Unlock mutex and await signal from processing thread */ + result = WaitCondition( stream->hostApi ); + } + ASSERT_CALL( pthread_mutex_unlock( &hostApi->mtx ), 0 ); + ENSURE_PA( result ); + +error: + return result; +} + +/* Add stream to JACK callback processing queue */ +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + PaJackHostApiRepresentation *jackHostApi = (PaJackHostApiRepresentation*)hostApi; + PaJackStream *stream = NULL; + char *port_string = PaUtil_GroupAllocateMemory( jackHostApi->deviceInfoMemory, jack_port_name_size() ); + unsigned long regexSz = jack_client_name_size() + 3; + char *regex_pattern = PaUtil_GroupAllocateMemory( jackHostApi->deviceInfoMemory, regexSz ); + const char **jack_ports = NULL; + /* int jack_max_buffer_size = jack_get_buffer_size( jackHostApi->jack_client ); */ + int i; + int inputChannelCount, outputChannelCount; + const double jackSr = jack_get_sample_rate( jackHostApi->jack_client ); + PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0; + int bpInitialized = 0, srInitialized = 0; /* Initialized buffer processor and stream representation? */ + unsigned long ofs; + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform specific flag */ + if( (streamFlags & paPrimeOutputBuffersUsingStreamCallback) != 0 ) + { + streamFlags &= ~paPrimeOutputBuffersUsingStreamCallback; + /*return paInvalidFlag;*/ /* This implementation does not support buffer priming */ + } + + if( framesPerBuffer != paFramesPerBufferUnspecified ) + { + /* Jack operates with power of two buffers, and we don't support non-integer buffer adaption (yet) */ + /*UNLESS( !(framesPerBuffer & (framesPerBuffer - 1)), paBufferTooBig );*/ /* TODO: Add descriptive error code? */ + } + + /* Preliminary checks */ + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if( inputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support inputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if( outputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + outputChannelCount = 0; + } + + /* ... check that the sample rate exactly matches the ONE acceptable rate + * A: This rate isn't necessarily constant though? */ + +#define ABS(x) ( (x) > 0 ? (x) : -(x) ) + if( ABS(sampleRate - jackSr) > 1 ) + return paInvalidSampleRate; +#undef ABS + + UNLESS( stream = (PaJackStream*)PaUtil_AllocateMemory( sizeof(PaJackStream) ), paInsufficientMemory ); + ENSURE_PA( InitializeStream( stream, jackHostApi, inputChannelCount, outputChannelCount ) ); + + /* the blocking emulation, if necessary */ + stream->isBlockingStream = !streamCallback; + if( stream->isBlockingStream ) + { + float latency = 0.001; /* 1ms is the absolute minimum we support */ + int minimum_buffer_frames = 0; + + if( inputParameters && inputParameters->suggestedLatency > latency ) + latency = inputParameters->suggestedLatency; + else if( outputParameters && outputParameters->suggestedLatency > latency ) + latency = outputParameters->suggestedLatency; + + /* the latency the user asked for indicates the minimum buffer size in frames */ + minimum_buffer_frames = (int) (latency * jack_get_sample_rate( jackHostApi->jack_client )); + + /* we also need to be able to store at least three full jack buffers to avoid dropouts */ + if( jackHostApi->jack_buffer_size * 3 > minimum_buffer_frames ) + minimum_buffer_frames = jackHostApi->jack_buffer_size * 3; + + /* setup blocking API data structures (FIXME: can fail) */ + BlockingBegin( stream, minimum_buffer_frames ); + + /* install our own callback for the blocking API */ + streamCallback = BlockingCallback; + userData = stream; + + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &jackHostApi->blockingStreamInterface, streamCallback, userData ); + } + else + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &jackHostApi->callbackStreamInterface, streamCallback, userData ); + } + srInitialized = 1; + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, jackSr ); + + /* create the JACK ports. We cannot connect them until audio + * processing begins */ + + /* Register a unique set of ports for this stream + * TODO: Robust allocation of new port names */ + + ofs = jackHostApi->inputBase; + for( i = 0; i < inputChannelCount; i++ ) + { + snprintf( port_string, jack_port_name_size(), "in_%lu", ofs + i ); + UNLESS( stream->local_input_ports[i] = jack_port_register( + jackHostApi->jack_client, port_string, + JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0 ), paInsufficientMemory ); + } + jackHostApi->inputBase += inputChannelCount; + + ofs = jackHostApi->outputBase; + for( i = 0; i < outputChannelCount; i++ ) + { + snprintf( port_string, jack_port_name_size(), "out_%lu", ofs + i ); + UNLESS( stream->local_output_ports[i] = jack_port_register( + jackHostApi->jack_client, port_string, + JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ), paInsufficientMemory ); + } + jackHostApi->outputBase += outputChannelCount; + + /* look up the jack_port_t's for the remote ports. We could do + * this at stream start time, but doing it here ensures the + * name lookup only happens once. */ + + if( inputChannelCount > 0 ) + { + int err = 0; + + /* Get output ports of our capture device */ + snprintf( regex_pattern, regexSz, "%s:.*", hostApi->deviceInfos[ inputParameters->device ]->name ); + UNLESS( jack_ports = jack_get_ports( jackHostApi->jack_client, regex_pattern, + NULL, JackPortIsOutput ), paUnanticipatedHostError ); + for( i = 0; i < inputChannelCount && jack_ports[i]; i++ ) + { + if( (stream->remote_output_ports[i] = jack_port_by_name( + jackHostApi->jack_client, jack_ports[i] )) == NULL ) + { + err = 1; + break; + } + } + free( jack_ports ); + UNLESS( !err, paInsufficientMemory ); + + /* Fewer ports than expected? */ + UNLESS( i == inputChannelCount, paInternalError ); + } + + if( outputChannelCount > 0 ) + { + int err = 0; + + /* Get input ports of our playback device */ + snprintf( regex_pattern, regexSz, "%s:.*", hostApi->deviceInfos[ outputParameters->device ]->name ); + UNLESS( jack_ports = jack_get_ports( jackHostApi->jack_client, regex_pattern, + NULL, JackPortIsInput ), paUnanticipatedHostError ); + for( i = 0; i < outputChannelCount && jack_ports[i]; i++ ) + { + if( (stream->remote_input_ports[i] = jack_port_by_name( + jackHostApi->jack_client, jack_ports[i] )) == 0 ) + { + err = 1; + break; + } + } + free( jack_ports ); + UNLESS( !err , paInsufficientMemory ); + + /* Fewer ports than expected? */ + UNLESS( i == outputChannelCount, paInternalError ); + } + + ENSURE_PA( PaUtil_InitializeBufferProcessor( + &stream->bufferProcessor, + inputChannelCount, + inputSampleFormat, + paFloat32 | paNonInterleaved, /* hostInputSampleFormat */ + outputChannelCount, + outputSampleFormat, + paFloat32 | paNonInterleaved, /* hostOutputSampleFormat */ + jackSr, + streamFlags, + framesPerBuffer, + 0, /* Ignored */ + paUtilUnknownHostBufferSize, /* Buffer size may vary on JACK's discretion */ + streamCallback, + userData ) ); + bpInitialized = 1; + + if( stream->num_incoming_connections > 0 ) + stream->streamRepresentation.streamInfo.inputLatency = (jack_port_get_latency( stream->remote_output_ports[0] ) + - jack_get_buffer_size( jackHostApi->jack_client ) /* One buffer is not counted as latency */ + + PaUtil_GetBufferProcessorInputLatencyFrames( &stream->bufferProcessor )) / sampleRate; + if( stream->num_outgoing_connections > 0 ) + stream->streamRepresentation.streamInfo.outputLatency = (jack_port_get_latency( stream->remote_input_ports[0] ) + - jack_get_buffer_size( jackHostApi->jack_client ) /* One buffer is not counted as latency */ + + PaUtil_GetBufferProcessorOutputLatencyFrames( &stream->bufferProcessor )) / sampleRate; + + stream->streamRepresentation.streamInfo.sampleRate = jackSr; + stream->t0 = jack_frame_time( jackHostApi->jack_client ); /* A: Time should run from Pa_OpenStream */ + + /* Add to queue of opened streams */ + ENSURE_PA( AddStream( stream ) ); + + *s = (PaStream*)stream; + + return result; + +error: + if( stream ) + CleanUpStream( stream, srInitialized, bpInitialized ); + + return result; +} + +/* + When CloseStream() is called, the multi-api layer ensures that + the stream has already been stopped or aborted. +*/ +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaJackStream *stream = (PaJackStream*)s; + + /* Remove this stream from the processing queue */ + ENSURE_PA( RemoveStream( stream ) ); + +error: + CleanUpStream( stream, 1, 1 ); + return result; +} + +static PaError RealProcess( PaJackStream *stream, jack_nframes_t frames ) +{ + PaError result = paNoError; + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; + int chn; + int framesProcessed; + const double sr = jack_get_sample_rate( stream->jack_client ); /* Shouldn't change during the process callback */ + PaStreamCallbackFlags cbFlags = 0; + + /* If the user has returned !paContinue from the callback we'll want to flush the internal buffers, + * when these are empty we can finally mark the stream as inactive */ + if( stream->callbackResult != paContinue && + PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) + { + stream->is_active = 0; + if( stream->streamRepresentation.streamFinishedCallback ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + PA_DEBUG(( "%s: Callback finished\n", __FUNCTION__ )); + + goto end; + } + + timeInfo.currentTime = (jack_frame_time( stream->jack_client ) - stream->t0) / sr; + if( stream->num_incoming_connections > 0 ) + timeInfo.inputBufferAdcTime = timeInfo.currentTime - jack_port_get_latency( stream->remote_output_ports[0] ) + / sr; + if( stream->num_outgoing_connections > 0 ) + timeInfo.outputBufferDacTime = timeInfo.currentTime + jack_port_get_latency( stream->remote_input_ports[0] ) + / sr; + + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + if( stream->xrun ) + { + /* XXX: Any way to tell which of these occurred? */ + cbFlags = paOutputUnderflow | paInputOverflow; + stream->xrun = FALSE; + } + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, + cbFlags ); + + if( stream->num_incoming_connections > 0 ) + PaUtil_SetInputFrameCount( &stream->bufferProcessor, frames ); + if( stream->num_outgoing_connections > 0 ) + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, frames ); + + for( chn = 0; chn < stream->num_incoming_connections; chn++ ) + { + jack_default_audio_sample_t *channel_buf = (jack_default_audio_sample_t*) + jack_port_get_buffer( stream->local_input_ports[chn], + frames ); + + PaUtil_SetNonInterleavedInputChannel( &stream->bufferProcessor, + chn, + channel_buf ); + } + + for( chn = 0; chn < stream->num_outgoing_connections; chn++ ) + { + jack_default_audio_sample_t *channel_buf = (jack_default_audio_sample_t*) + jack_port_get_buffer( stream->local_output_ports[chn], + frames ); + + PaUtil_SetNonInterleavedOutputChannel( &stream->bufferProcessor, + chn, + channel_buf ); + } + + framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, + &stream->callbackResult ); + /* We've specified a host buffer size mode where every frame should be consumed by the buffer processor */ + assert( framesProcessed == frames ); + + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + +end: + return result; +} + +/* Update the JACK callback's stream processing queue. */ +static PaError UpdateQueue( PaJackHostApiRepresentation *hostApi ) +{ + PaError result = paNoError; + int queueModified = 0; + const double jackSr = jack_get_sample_rate( hostApi->jack_client ); + int err; + + if( (err = pthread_mutex_trylock( &hostApi->mtx )) != 0 ) + { + assert( err == EBUSY ); + return paNoError; + } + + if( hostApi->toAdd ) + { + if( hostApi->processQueue ) + { + PaJackStream *node = hostApi->processQueue; + /* Advance to end of queue */ + while( node->next ) + node = node->next; + + node->next = hostApi->toAdd; + } + else + { + /* The only queue entry. */ + hostApi->processQueue = (PaJackStream *)hostApi->toAdd; + } + + /* If necessary, update stream state */ + if( hostApi->toAdd->streamRepresentation.streamInfo.sampleRate != jackSr ) + UpdateSampleRate( hostApi->toAdd, jackSr ); + + hostApi->toAdd = NULL; + queueModified = 1; + } + if( hostApi->toRemove ) + { + int removed = 0; + PaJackStream *node = hostApi->processQueue, *prev = NULL; + assert( hostApi->processQueue ); + + while( node ) + { + if( node == hostApi->toRemove ) + { + if( prev ) + prev->next = node->next; + else + hostApi->processQueue = (PaJackStream *)node->next; + + removed = 1; + break; + } + + prev = node; + node = node->next; + } + UNLESS( removed, paInternalError ); + hostApi->toRemove = NULL; + PA_DEBUG(( "%s: Removed stream from processing queue\n", __FUNCTION__ )); + queueModified = 1; + } + + if( queueModified ) + { + /* Signal that we've done what was asked of us */ + ASSERT_CALL( pthread_cond_signal( &hostApi->cond ), 0 ); + } + +error: + ASSERT_CALL( pthread_mutex_unlock( &hostApi->mtx ), 0 ); + + return result; +} + +/* Audio processing callback invoked periodically from JACK. */ +static int JackCallback( jack_nframes_t frames, void *userData ) +{ + PaError result = paNoError; + PaJackHostApiRepresentation *hostApi = (PaJackHostApiRepresentation *)userData; + PaJackStream *stream = NULL; + int xrun = hostApi->xrun; + hostApi->xrun = 0; + + assert( hostApi ); + + ENSURE_PA( UpdateQueue( hostApi ) ); + + /* Process each stream */ + stream = hostApi->processQueue; + for( ; stream; stream = stream->next ) + { + if( xrun ) /* Don't override if already set */ + stream->xrun = 1; + + /* See if this stream is to be started */ + if( stream->doStart ) + { + /* If we can't obtain a lock, we'll try next time */ + int err = pthread_mutex_trylock( &stream->hostApi->mtx ); + if( !err ) + { + if( stream->doStart ) /* Could potentially change before obtaining the lock */ + { + stream->is_active = 1; + stream->doStart = 0; + PA_DEBUG(( "%s: Starting stream\n", __FUNCTION__ )); + ASSERT_CALL( pthread_cond_signal( &stream->hostApi->cond ), 0 ); + stream->callbackResult = paContinue; + stream->isSilenced = 0; + } + + ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); + } + else + assert( err == EBUSY ); + } + else if( stream->doStop || stream->doAbort ) /* Should we stop/abort stream? */ + { + if( stream->callbackResult == paContinue ) /* Ok, make it stop */ + { + PA_DEBUG(( "%s: Stopping stream\n", __FUNCTION__ )); + stream->callbackResult = stream->doStop ? paComplete : paAbort; + } + } + + if( stream->is_active ) + ENSURE_PA( RealProcess( stream, frames ) ); + /* If we have just entered inactive state, silence output */ + if( !stream->is_active && !stream->isSilenced ) + { + int i; + + /* Silence buffer after entering inactive state */ + PA_DEBUG(( "Silencing the output\n" )); + for( i = 0; i < stream->num_outgoing_connections; ++i ) + { + jack_default_audio_sample_t *buffer = jack_port_get_buffer( stream->local_output_ports[i], frames ); + memset( buffer, 0, sizeof (jack_default_audio_sample_t) * frames ); + } + + stream->isSilenced = 1; + } + + if( stream->doStop || stream->doAbort ) + { + /* See if RealProcess has acted on the request */ + if( !stream->is_active ) /* Ok, signal to the main thread that we've carried out the operation */ + { + /* If we can't obtain a lock, we'll try next time */ + int err = pthread_mutex_trylock( &stream->hostApi->mtx ); + if( !err ) + { + stream->doStop = stream->doAbort = 0; + ASSERT_CALL( pthread_cond_signal( &stream->hostApi->cond ), 0 ); + ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); + } + else + assert( err == EBUSY ); + } + } + } + + return 0; +error: + return -1; +} + +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaJackStream *stream = (PaJackStream*)s; + int i; + + /* Ready the processor */ + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + + /* Connect the ports. Note that the ports may already have been connected by someone else in + * the meantime, in which case JACK returns EEXIST. */ + + if( stream->num_incoming_connections > 0 ) + { + for( i = 0; i < stream->num_incoming_connections; i++ ) + { + int r = jack_connect( stream->jack_client, jack_port_name( stream->remote_output_ports[i] ), + jack_port_name( stream->local_input_ports[i] ) ); + UNLESS( 0 == r || EEXIST == r, paUnanticipatedHostError ); + } + } + + if( stream->num_outgoing_connections > 0 ) + { + for( i = 0; i < stream->num_outgoing_connections; i++ ) + { + int r = jack_connect( stream->jack_client, jack_port_name( stream->local_output_ports[i] ), + jack_port_name( stream->remote_input_ports[i] ) ); + UNLESS( 0 == r || EEXIST == r, paUnanticipatedHostError ); + } + } + + stream->xrun = FALSE; + + /* Enable processing */ + + ASSERT_CALL( pthread_mutex_lock( &stream->hostApi->mtx ), 0 ); + stream->doStart = 1; + + /* Wait for stream to be started */ + result = WaitCondition( stream->hostApi ); + /* + do + { + err = pthread_cond_timedwait( &stream->hostApi->cond, &stream->hostApi->mtx, &ts ); + } while( !stream->is_active && !err ); + */ + if( result != paNoError ) /* Something went wrong, call off the stream start */ + { + stream->doStart = 0; + stream->is_active = 0; /* Cancel any processing */ + } + ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); + + ENSURE_PA( result ); + + stream->is_running = TRUE; + PA_DEBUG(( "%s: Stream started\n", __FUNCTION__ )); + +error: + return result; +} + +static PaError RealStop( PaJackStream *stream, int abort ) +{ + PaError result = paNoError; + int i; + + if( stream->isBlockingStream ) + BlockingWaitEmpty ( stream ); + + ASSERT_CALL( pthread_mutex_lock( &stream->hostApi->mtx ), 0 ); + if( abort ) + stream->doAbort = 1; + else + stream->doStop = 1; + + /* Wait for stream to be stopped */ + result = WaitCondition( stream->hostApi ); + ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); + ENSURE_PA( result ); + + UNLESS( !stream->is_active, paInternalError ); + + PA_DEBUG(( "%s: Stream stopped\n", __FUNCTION__ )); + +error: + stream->is_running = FALSE; + + /* Disconnect ports belonging to this stream */ + + if( !stream->hostApi->jackIsDown ) /* XXX: Well? */ + { + for( i = 0; i < stream->num_incoming_connections; i++ ) + { + if( jack_port_connected( stream->local_input_ports[i] ) ) + { + UNLESS( !jack_port_disconnect( stream->jack_client, stream->local_input_ports[i] ), + paUnanticipatedHostError ); + } + } + for( i = 0; i < stream->num_outgoing_connections; i++ ) + { + if( jack_port_connected( stream->local_output_ports[i] ) ) + { + UNLESS( !jack_port_disconnect( stream->jack_client, stream->local_output_ports[i] ), + paUnanticipatedHostError ); + } + } + } + + return result; +} + +static PaError StopStream( PaStream *s ) +{ + assert(s); + return RealStop( (PaJackStream *)s, 0 ); +} + +static PaError AbortStream( PaStream *s ) +{ + assert(s); + return RealStop( (PaJackStream *)s, 1 ); +} + +static PaError IsStreamStopped( PaStream *s ) +{ + PaJackStream *stream = (PaJackStream*)s; + return !stream->is_running; +} + + +static PaError IsStreamActive( PaStream *s ) +{ + PaJackStream *stream = (PaJackStream*)s; + return stream->is_active; +} + + +static PaTime GetStreamTime( PaStream *s ) +{ + PaJackStream *stream = (PaJackStream*)s; + + /* A: Is this relevant?? --> TODO: what if we're recording-only? */ + return (jack_frame_time( stream->jack_client ) - stream->t0) / (PaTime)jack_get_sample_rate( stream->jack_client ); +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaJackStream *stream = (PaJackStream*)s; + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + +PaError PaJack_SetClientName( const char* name ) +{ + if( strlen( name ) > jack_client_name_size() ) + { + /* OK, I don't know any better error code */ + return paInvalidFlag; + } + clientName_ = name; + return paNoError; +} + +PaError PaJack_GetClientName(const char** clientName) +{ + PaError result = paNoError; + PaJackHostApiRepresentation* jackHostApi = NULL; + PaJackHostApiRepresentation** ref = &jackHostApi; + ENSURE_PA( PaUtil_GetHostApiRepresentation( (PaUtilHostApiRepresentation**)ref, paJACK ) ); + *clientName = jack_get_client_name( jackHostApi->jack_client ); + +error: + return result; +} diff --git a/Externals/portaudio/src/hostapi/oss/low_latency_tip.txt b/Externals/portaudio/src/hostapi/oss/low_latency_tip.txt new file mode 100644 index 0000000000..2d982b79ba Binary files /dev/null and b/Externals/portaudio/src/hostapi/oss/low_latency_tip.txt differ diff --git a/Externals/portaudio/src/hostapi/oss/pa_unix_oss.c b/Externals/portaudio/src/hostapi/oss/pa_unix_oss.c new file mode 100644 index 0000000000..b91577beeb --- /dev/null +++ b/Externals/portaudio/src/hostapi/oss/pa_unix_oss.c @@ -0,0 +1,2030 @@ +/* + * $Id: pa_unix_oss.c 1668 2011-05-02 17:07:11Z rossb $ + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * OSS implementation by: + * Douglas Repetto + * Phil Burk + * Dominic Mazzoni + * Arve Knudsen + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_SYS_SOUNDCARD_H +# include +# ifdef __NetBSD__ +# define DEVICE_NAME_BASE "/dev/audio" +# else +# define DEVICE_NAME_BASE "/dev/dsp" +# endif +#elif defined(HAVE_LINUX_SOUNDCARD_H) +# include +# define DEVICE_NAME_BASE "/dev/dsp" +#elif defined(HAVE_MACHINE_SOUNDCARD_H) +# include /* JH20010905 */ +# define DEVICE_NAME_BASE "/dev/audio" +#else +# error No sound card header file +#endif + +#include "portaudio.h" +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "pa_unix_util.h" +#include "pa_debugprint.h" + +static int sysErr_; +static pthread_t mainThread_; + +/* Check return value of system call, and map it to PaError */ +#define ENSURE_(expr, code) \ + do { \ + if( UNLIKELY( (sysErr_ = (expr)) < 0 ) ) \ + { \ + /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \ + if( (code) == paUnanticipatedHostError && pthread_self() == mainThread_ ) \ + { \ + PaUtil_SetLastHostErrorInfo( paOSS, sysErr_, strerror( errno ) ); \ + } \ + \ + PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + result = (code); \ + goto error; \ + } \ + } while( 0 ); + +#ifndef AFMT_S16_NE +#define AFMT_S16_NE Get_AFMT_S16_NE() +/********************************************************************* + * Some versions of OSS do not define AFMT_S16_NE. So check CPU. + * PowerPC is Big Endian. X86 is Little Endian. + */ +static int Get_AFMT_S16_NE( void ) +{ + long testData = 1; + char *ptr = (char *) &testData; + int isLittle = ( *ptr == 1 ); /* Does address point to least significant byte? */ + return isLittle ? AFMT_S16_LE : AFMT_S16_BE; +} +#endif + +/* PaOSSHostApiRepresentation - host api datastructure specific to this implementation */ + +typedef struct +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + PaHostApiIndex hostApiIndex; +} +PaOSSHostApiRepresentation; + +/** Per-direction structure for PaOssStream. + * + * Aspect StreamChannels: In case the user requests to open the same device for both capture and playback, + * but with different number of channels we will have to adapt between the number of user and host + * channels for at least one direction, since the configuration space is the same for both directions + * of an OSS device. + */ +typedef struct +{ + int fd; + const char *devName; + int userChannelCount, hostChannelCount; + int userInterleaved; + void *buffer; + PaSampleFormat userFormat, hostFormat; + double latency; + unsigned long hostFrames, numBufs; + void **userBuffers; /* For non-interleaved blocking */ +} PaOssStreamComponent; + +/** Implementation specific representation of a PaStream. + * + */ +typedef struct PaOssStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + PaUtilThreading threading; + + int sharedDevice; + unsigned long framesPerHostBuffer; + int triggered; /* Have the devices been triggered yet (first start) */ + + int isActive; + int isStopped; + + int lastPosPtr; + double lastStreamBytes; + + int framesProcessed; + + double sampleRate; + + int callbackMode; + volatile int callbackStop, callbackAbort; + + PaOssStreamComponent *capture, *playback; + unsigned long pollTimeout; + sem_t semaphore; +} +PaOssStream; + +typedef enum { + StreamMode_In, + StreamMode_Out +} StreamMode; + +/* prototypes for functions declared in this file */ + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream* stream ); +static signed long GetStreamWriteAvailable( PaStream* stream ); +static PaError BuildDeviceList( PaOSSHostApiRepresentation *hostApi ); + + +/** Initialize the OSS API implementation. + * + * This function will initialize host API datastructures and query host devices for information. + * + * Aspect DeviceCapabilities: Enumeration of host API devices is initiated from here + * + * Aspect FreeResources: If an error is encountered under way we have to free each resource allocated in this function, + * this happens with the usual "error" label. + */ +PaError PaOSS_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + PaOSSHostApiRepresentation *ossHostApi = NULL; + + PA_UNLESS( ossHostApi = (PaOSSHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaOSSHostApiRepresentation) ), + paInsufficientMemory ); + PA_UNLESS( ossHostApi->allocations = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); + ossHostApi->hostApiIndex = hostApiIndex; + + /* Initialize host API structure */ + *hostApi = &ossHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paOSS; + (*hostApi)->info.name = "OSS"; + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PA_ENSURE( BuildDeviceList( ossHostApi ) ); + + PaUtil_InitializeStreamInterface( &ossHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, + PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &ossHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + mainThread_ = pthread_self(); + + return result; + +error: + if( ossHostApi ) + { + if( ossHostApi->allocations ) + { + PaUtil_FreeAllAllocations( ossHostApi->allocations ); + PaUtil_DestroyAllocationGroup( ossHostApi->allocations ); + } + + PaUtil_FreeMemory( ossHostApi ); + } + return result; +} + +PaError PaUtil_InitializeDeviceInfo( PaDeviceInfo *deviceInfo, const char *name, PaHostApiIndex hostApiIndex, int maxInputChannels, + int maxOutputChannels, PaTime defaultLowInputLatency, PaTime defaultLowOutputLatency, PaTime defaultHighInputLatency, + PaTime defaultHighOutputLatency, double defaultSampleRate, PaUtilAllocationGroup *allocations ) +{ + PaError result = paNoError; + + deviceInfo->structVersion = 2; + if( allocations ) + { + size_t len = strlen( name ) + 1; + PA_UNLESS( deviceInfo->name = PaUtil_GroupAllocateMemory( allocations, len ), paInsufficientMemory ); + strncpy( (char *)deviceInfo->name, name, len ); + } + else + deviceInfo->name = name; + + deviceInfo->hostApi = hostApiIndex; + deviceInfo->maxInputChannels = maxInputChannels; + deviceInfo->maxOutputChannels = maxOutputChannels; + deviceInfo->defaultLowInputLatency = defaultLowInputLatency; + deviceInfo->defaultLowOutputLatency = defaultLowOutputLatency; + deviceInfo->defaultHighInputLatency = defaultHighInputLatency; + deviceInfo->defaultHighOutputLatency = defaultHighOutputLatency; + deviceInfo->defaultSampleRate = defaultSampleRate; + +error: + return result; +} + +static PaError QueryDirection( const char *deviceName, StreamMode mode, double *defaultSampleRate, int *maxChannelCount, + double *defaultLowLatency, double *defaultHighLatency ) +{ + PaError result = paNoError; + int numChannels, maxNumChannels; + int busy = 0; + int devHandle = -1; + int sr; + *maxChannelCount = 0; /* Default value in case this fails */ + + if ( (devHandle = open( deviceName, (mode == StreamMode_In ? O_RDONLY : O_WRONLY) | O_NONBLOCK )) < 0 ) + { + if( errno == EBUSY || errno == EAGAIN ) + { + PA_DEBUG(( "%s: Device %s busy\n", __FUNCTION__, deviceName )); + } + else + { + /* Ignore ENOENT, which means we've tried a non-existent device */ + if( errno != ENOENT ) + { + PA_DEBUG(( "%s: Can't access device %s: %s\n", __FUNCTION__, deviceName, strerror( errno ) )); + } + } + + return paDeviceUnavailable; + } + + /* Negotiate for the maximum number of channels for this device. PLB20010927 + * Consider up to 16 as the upper number of channels. + * Variable maxNumChannels should contain the actual upper limit after the call. + * Thanks to John Lazzaro and Heiko Purnhagen for suggestions. + */ + maxNumChannels = 0; + for( numChannels = 1; numChannels <= 16; numChannels++ ) + { + int temp = numChannels; + if( ioctl( devHandle, SNDCTL_DSP_CHANNELS, &temp ) < 0 ) + { + busy = EAGAIN == errno || EBUSY == errno; + /* ioctl() failed so bail out if we already have stereo */ + if( maxNumChannels >= 2 ) + break; + } + else + { + /* ioctl() worked but bail out if it does not support numChannels. + * We don't want to leave gaps in the numChannels supported. + */ + if( (numChannels > 2) && (temp != numChannels) ) + break; + if( temp > maxNumChannels ) + maxNumChannels = temp; /* Save maximum. */ + } + } + /* A: We're able to open a device for capture if it's busy playing back and vice versa, + * but we can't configure anything */ + if( 0 == maxNumChannels && busy ) + { + result = paDeviceUnavailable; + goto error; + } + + /* The above negotiation may fail for an old driver so try this older technique. */ + if( maxNumChannels < 1 ) + { + int stereo = 1; + if( ioctl( devHandle, SNDCTL_DSP_STEREO, &stereo ) < 0 ) + { + maxNumChannels = 1; + } + else + { + maxNumChannels = (stereo) ? 2 : 1; + } + PA_DEBUG(( "%s: use SNDCTL_DSP_STEREO, maxNumChannels = %d\n", __FUNCTION__, maxNumChannels )); + } + + /* During channel negotiation, the last ioctl() may have failed. This can + * also cause sample rate negotiation to fail. Hence the following, to return + * to a supported number of channels. SG20011005 */ + { + /* use most reasonable default value */ + int temp = PA_MIN( maxNumChannels, 2 ); + ENSURE_( ioctl( devHandle, SNDCTL_DSP_CHANNELS, &temp ), paUnanticipatedHostError ); + } + + /* Get supported sample rate closest to 44100 Hz */ + if( *defaultSampleRate < 0 ) + { + sr = 44100; + ENSURE_( ioctl( devHandle, SNDCTL_DSP_SPEED, &sr ), paUnanticipatedHostError ); + + *defaultSampleRate = sr; + } + + *maxChannelCount = maxNumChannels; + /* TODO */ + *defaultLowLatency = 512. / *defaultSampleRate; + *defaultHighLatency = 2048. / *defaultSampleRate; + +error: + if( devHandle >= 0 ) + close( devHandle ); + + return result; +} + +/** Query OSS device. + * + * This is where PaDeviceInfo objects are constructed and filled in with relevant information. + * + * Aspect DeviceCapabilities: The inferred device capabilities are recorded in a PaDeviceInfo object that is constructed + * in place. + */ +static PaError QueryDevice( char *deviceName, PaOSSHostApiRepresentation *ossApi, PaDeviceInfo **deviceInfo ) +{ + PaError result = paNoError; + double sampleRate = -1.; + int maxInputChannels, maxOutputChannels; + PaTime defaultLowInputLatency, defaultLowOutputLatency, defaultHighInputLatency, defaultHighOutputLatency; + PaError tmpRes = paNoError; + int busy = 0; + *deviceInfo = NULL; + + /* douglas: + we have to do this querying in a slightly different order. apparently + some sound cards will give you different info based on their settins. + e.g. a card might give you stereo at 22kHz but only mono at 44kHz. + the correct order for OSS is: format, channels, sample rate + */ + + /* Aspect StreamChannels: The number of channels supported for a device may depend on the mode it is + * opened in, it may have more channels available for capture than playback and vice versa. Therefore + * we will open the device in both read- and write-only mode to determine the supported number. + */ + if( (tmpRes = QueryDirection( deviceName, StreamMode_In, &sampleRate, &maxInputChannels, &defaultLowInputLatency, + &defaultHighInputLatency )) != paNoError ) + { + if( tmpRes != paDeviceUnavailable ) + { + PA_DEBUG(( "%s: Querying device %s for capture failed!\n", __FUNCTION__, deviceName )); + /* PA_ENSURE( tmpRes ); */ + } + ++busy; + } + if( (tmpRes = QueryDirection( deviceName, StreamMode_Out, &sampleRate, &maxOutputChannels, &defaultLowOutputLatency, + &defaultHighOutputLatency )) != paNoError ) + { + if( tmpRes != paDeviceUnavailable ) + { + PA_DEBUG(( "%s: Querying device %s for playback failed!\n", __FUNCTION__, deviceName )); + /* PA_ENSURE( tmpRes ); */ + } + ++busy; + } + assert( 0 <= busy && busy <= 2 ); + if( 2 == busy ) /* Both directions are unavailable to us */ + { + result = paDeviceUnavailable; + goto error; + } + + PA_UNLESS( *deviceInfo = PaUtil_GroupAllocateMemory( ossApi->allocations, sizeof (PaDeviceInfo) ), paInsufficientMemory ); + PA_ENSURE( PaUtil_InitializeDeviceInfo( *deviceInfo, deviceName, ossApi->hostApiIndex, maxInputChannels, maxOutputChannels, + defaultLowInputLatency, defaultLowOutputLatency, defaultHighInputLatency, defaultHighOutputLatency, sampleRate, + ossApi->allocations ) ); + +error: + return result; +} + +/** Query host devices. + * + * Loop over host devices and query their capabilitiesu + * + * Aspect DeviceCapabilities: This function calls QueryDevice on each device entry and receives a filled in PaDeviceInfo object + * per device, these are placed in the host api representation's deviceInfos array. + */ +static PaError BuildDeviceList( PaOSSHostApiRepresentation *ossApi ) +{ + PaError result = paNoError; + PaUtilHostApiRepresentation *commonApi = &ossApi->inheritedHostApiRep; + int i; + int numDevices = 0, maxDeviceInfos = 1; + PaDeviceInfo **deviceInfos = NULL; + + /* These two will be set to the first working input and output device, respectively */ + commonApi->info.defaultInputDevice = paNoDevice; + commonApi->info.defaultOutputDevice = paNoDevice; + + /* Find devices by calling QueryDevice on each + * potential device names. When we find a valid one, + * add it to a linked list. + * A: Set an arbitrary of 100 devices, should probably be a smarter way. */ + + for( i = 0; i < 100; i++ ) + { + char deviceName[32]; + PaDeviceInfo *deviceInfo; + int testResult; + + if( i == 0 ) + snprintf(deviceName, sizeof (deviceName), "%s", DEVICE_NAME_BASE); + else + snprintf(deviceName, sizeof (deviceName), "%s%d", DEVICE_NAME_BASE, i); + + /* PA_DEBUG(("%s: trying device %s\n", __FUNCTION__, deviceName )); */ + if( (testResult = QueryDevice( deviceName, ossApi, &deviceInfo )) != paNoError ) + { + if( testResult != paDeviceUnavailable ) + PA_ENSURE( testResult ); + + continue; + } + + ++numDevices; + if( !deviceInfos || numDevices > maxDeviceInfos ) + { + maxDeviceInfos *= 2; + PA_UNLESS( deviceInfos = (PaDeviceInfo **) realloc( deviceInfos, maxDeviceInfos * sizeof (PaDeviceInfo *) ), + paInsufficientMemory ); + } + { + int devIdx = numDevices - 1; + deviceInfos[devIdx] = deviceInfo; + + if( commonApi->info.defaultInputDevice == paNoDevice && deviceInfo->maxInputChannels > 0 ) + commonApi->info.defaultInputDevice = devIdx; + if( commonApi->info.defaultOutputDevice == paNoDevice && deviceInfo->maxOutputChannels > 0 ) + commonApi->info.defaultOutputDevice = devIdx; + } + } + + /* Make an array of PaDeviceInfo pointers out of the linked list */ + + PA_DEBUG(("PaOSS %s: Total number of devices found: %d\n", __FUNCTION__, numDevices)); + + commonApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + ossApi->allocations, sizeof(PaDeviceInfo*) * numDevices ); + memcpy( commonApi->deviceInfos, deviceInfos, numDevices * sizeof (PaDeviceInfo *) ); + + commonApi->info.deviceCount = numDevices; + +error: + free( deviceInfos ); + + return result; +} + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaOSSHostApiRepresentation *ossHostApi = (PaOSSHostApiRepresentation*)hostApi; + + if( ossHostApi->allocations ) + { + PaUtil_FreeAllAllocations( ossHostApi->allocations ); + PaUtil_DestroyAllocationGroup( ossHostApi->allocations ); + } + + PaUtil_FreeMemory( ossHostApi ); +} + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + PaError result = paNoError; + PaDeviceIndex device; + PaDeviceInfo *deviceInfo; + char *deviceName; + int inputChannelCount, outputChannelCount; + int tempDevHandle = -1; + int flags; + PaSampleFormat inputSampleFormat, outputSampleFormat; + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if( inputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support inputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if( outputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + outputChannelCount = 0; + } + + if (inputChannelCount == 0 && outputChannelCount == 0) + return paInvalidChannelCount; + + /* if full duplex, make sure that they're the same device */ + + if (inputChannelCount > 0 && outputChannelCount > 0 && + inputParameters->device != outputParameters->device) + return paInvalidDevice; + + /* if full duplex, also make sure that they're the same number of channels */ + + if (inputChannelCount > 0 && outputChannelCount > 0 && + inputChannelCount != outputChannelCount) + return paInvalidChannelCount; + + /* open the device so we can do more tests */ + + if( inputChannelCount > 0 ) + { + result = PaUtil_DeviceIndexToHostApiDeviceIndex(&device, inputParameters->device, hostApi); + if (result != paNoError) + return result; + } + else + { + result = PaUtil_DeviceIndexToHostApiDeviceIndex(&device, outputParameters->device, hostApi); + if (result != paNoError) + return result; + } + + deviceInfo = hostApi->deviceInfos[device]; + deviceName = (char *)deviceInfo->name; + + flags = O_NONBLOCK; + if (inputChannelCount > 0 && outputChannelCount > 0) + flags |= O_RDWR; + else if (inputChannelCount > 0) + flags |= O_RDONLY; + else + flags |= O_WRONLY; + + ENSURE_( tempDevHandle = open( deviceInfo->name, flags ), paDeviceUnavailable ); + + /* PaOssStream_Configure will do the rest of the checking for us */ + /* PA_ENSURE( PaOssStream_Configure( tempDevHandle, deviceName, outputChannelCount, &sampleRate ) ); */ + + /* everything succeeded! */ + + error: + if( tempDevHandle >= 0 ) + close( tempDevHandle ); + + return result; +} + +/** Validate stream parameters. + * + * Aspect StreamChannels: We verify that the number of channels is within the allowed range for the device + */ +static PaError ValidateParameters( const PaStreamParameters *parameters, const PaDeviceInfo *deviceInfo, StreamMode mode ) +{ + int maxChans; + + assert( parameters ); + + if( parameters->device == paUseHostApiSpecificDeviceSpecification ) + { + return paInvalidDevice; + } + + maxChans = (mode == StreamMode_In ? deviceInfo->maxInputChannels : + deviceInfo->maxOutputChannels); + if( parameters->channelCount > maxChans ) + { + return paInvalidChannelCount; + } + + return paNoError; +} + +static PaError PaOssStreamComponent_Initialize( PaOssStreamComponent *component, const PaStreamParameters *parameters, + int callbackMode, int fd, const char *deviceName ) +{ + PaError result = paNoError; + assert( component ); + + memset( component, 0, sizeof (PaOssStreamComponent) ); + + component->fd = fd; + component->devName = deviceName; + component->userChannelCount = parameters->channelCount; + component->userFormat = parameters->sampleFormat; + component->latency = parameters->suggestedLatency; + component->userInterleaved = !(parameters->sampleFormat & paNonInterleaved); + + if( !callbackMode && !component->userInterleaved ) + { + /* Pre-allocate non-interleaved user provided buffers */ + PA_UNLESS( component->userBuffers = PaUtil_AllocateMemory( sizeof (void *) * component->userChannelCount ), + paInsufficientMemory ); + } + +error: + return result; +} + +static void PaOssStreamComponent_Terminate( PaOssStreamComponent *component ) +{ + assert( component ); + + if( component->fd >= 0 ) + close( component->fd ); + if( component->buffer ) + PaUtil_FreeMemory( component->buffer ); + + if( component->userBuffers ) + PaUtil_FreeMemory( component->userBuffers ); + + PaUtil_FreeMemory( component ); +} + +static PaError ModifyBlocking( int fd, int blocking ) +{ + PaError result = paNoError; + int fflags; + + ENSURE_( fflags = fcntl( fd, F_GETFL ), paUnanticipatedHostError ); + + if( blocking ) + fflags &= ~O_NONBLOCK; + else + fflags |= O_NONBLOCK; + + ENSURE_( fcntl( fd, F_SETFL, fflags ), paUnanticipatedHostError ); + +error: + return result; +} + +/** Open input and output devices. + * + * @param idev: Returned input device file descriptor. + * @param odev: Returned output device file descriptor. + */ +static PaError OpenDevices( const char *idevName, const char *odevName, int *idev, int *odev ) +{ + PaError result = paNoError; + int flags = O_NONBLOCK, duplex = 0; + *idev = *odev = -1; + + if( idevName && odevName ) + { + duplex = 1; + flags |= O_RDWR; + } + else if( idevName ) + flags |= O_RDONLY; + else + flags |= O_WRONLY; + + /* open first in nonblocking mode, in case it's busy... + * A: then unset the non-blocking attribute */ + assert( flags & O_NONBLOCK ); + if( idevName ) + { + ENSURE_( *idev = open( idevName, flags ), paDeviceUnavailable ); + PA_ENSURE( ModifyBlocking( *idev, 1 ) ); /* Blocking */ + } + if( odevName ) + { + if( !idevName ) + { + ENSURE_( *odev = open( odevName, flags ), paDeviceUnavailable ); + PA_ENSURE( ModifyBlocking( *odev, 1 ) ); /* Blocking */ + } + else + { + ENSURE_( *odev = dup( *idev ), paUnanticipatedHostError ); + } + } + +error: + return result; +} + +static PaError PaOssStream_Initialize( PaOssStream *stream, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, + PaStreamCallback callback, void *userData, PaStreamFlags streamFlags, + PaOSSHostApiRepresentation *ossApi ) +{ + PaError result = paNoError; + int idev, odev; + PaUtilHostApiRepresentation *hostApi = &ossApi->inheritedHostApiRep; + const char *idevName = NULL, *odevName = NULL; + + assert( stream ); + + memset( stream, 0, sizeof (PaOssStream) ); + stream->isStopped = 1; + + PA_ENSURE( PaUtil_InitializeThreading( &stream->threading ) ); + + if( inputParameters && outputParameters ) + { + if( inputParameters->device == outputParameters->device ) + stream->sharedDevice = 1; + } + + if( inputParameters ) + idevName = hostApi->deviceInfos[inputParameters->device]->name; + if( outputParameters ) + odevName = hostApi->deviceInfos[outputParameters->device]->name; + PA_ENSURE( OpenDevices( idevName, odevName, &idev, &odev ) ); + if( inputParameters ) + { + PA_UNLESS( stream->capture = PaUtil_AllocateMemory( sizeof (PaOssStreamComponent) ), paInsufficientMemory ); + PA_ENSURE( PaOssStreamComponent_Initialize( stream->capture, inputParameters, callback != NULL, idev, idevName ) ); + } + if( outputParameters ) + { + PA_UNLESS( stream->playback = PaUtil_AllocateMemory( sizeof (PaOssStreamComponent) ), paInsufficientMemory ); + PA_ENSURE( PaOssStreamComponent_Initialize( stream->playback, outputParameters, callback != NULL, odev, odevName ) ); + } + + if( callback != NULL ) + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &ossApi->callbackStreamInterface, callback, userData ); + stream->callbackMode = 1; + } + else + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &ossApi->blockingStreamInterface, callback, userData ); + } + + ENSURE_( sem_init( &stream->semaphore, 0, 0 ), paInternalError ); + +error: + return result; +} + +static void PaOssStream_Terminate( PaOssStream *stream ) +{ + assert( stream ); + + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + PaUtil_TerminateThreading( &stream->threading ); + + if( stream->capture ) + PaOssStreamComponent_Terminate( stream->capture ); + if( stream->playback ) + PaOssStreamComponent_Terminate( stream->playback ); + + sem_destroy( &stream->semaphore ); + + PaUtil_FreeMemory( stream ); +} + +/** Translate from PA format to OSS native. + * + */ +static PaError Pa2OssFormat( PaSampleFormat paFormat, int *ossFormat ) +{ + switch( paFormat ) + { + case paUInt8: + *ossFormat = AFMT_U8; + break; + case paInt8: + *ossFormat = AFMT_S8; + break; + case paInt16: + *ossFormat = AFMT_S16_NE; + break; + default: + return paInternalError; /* This shouldn't happen */ + } + + return paNoError; +} + +/** Return the PA-compatible formats that this device can support. + * + */ +static PaError GetAvailableFormats( PaOssStreamComponent *component, PaSampleFormat *availableFormats ) +{ + PaError result = paNoError; + int mask = 0; + PaSampleFormat frmts = 0; + + ENSURE_( ioctl( component->fd, SNDCTL_DSP_GETFMTS, &mask ), paUnanticipatedHostError ); + if( mask & AFMT_U8 ) + frmts |= paUInt8; + if( mask & AFMT_S8 ) + frmts |= paInt8; + if( mask & AFMT_S16_NE ) + frmts |= paInt16; + else + result = paSampleFormatNotSupported; + + *availableFormats = frmts; + +error: + return result; +} + +static unsigned int PaOssStreamComponent_FrameSize( PaOssStreamComponent *component ) +{ + return Pa_GetSampleSize( component->hostFormat ) * component->hostChannelCount; +} + +/** Buffer size in bytes. + * + */ +static unsigned long PaOssStreamComponent_BufferSize( PaOssStreamComponent *component ) +{ + return PaOssStreamComponent_FrameSize( component ) * component->hostFrames * component->numBufs; +} + +static int CalcHigherLogTwo( int n ) +{ + int log2 = 0; + while( (1<userChannelCount; + int frgmt; + int numBufs; + int bytesPerBuf; + unsigned long bufSz; + unsigned long fragSz; + audio_buf_info bufInfo; + + /* We may have a situation where only one component (the master) is configured, if both point to the same device. + * In that case, the second component will copy settings from the other */ + if( !master ) + { + /* Aspect BufferSettings: If framesPerBuffer is unspecified we have to infer a suitable fragment size. + * The hardware need not respect the requested fragment size, so we may have to adapt. + */ + if( framesPerBuffer == paFramesPerBufferUnspecified ) + { + bufSz = (unsigned long)(component->latency * sampleRate); + fragSz = bufSz / 4; + } + else + { + fragSz = framesPerBuffer; + bufSz = (unsigned long)(component->latency * sampleRate) + fragSz; /* Latency + 1 buffer */ + } + + PA_ENSURE( GetAvailableFormats( component, &availableFormats ) ); + hostFormat = PaUtil_SelectClosestAvailableFormat( availableFormats, component->userFormat ); + + /* OSS demands at least 2 buffers, and 16 bytes per buffer */ + numBufs = (int)PA_MAX( bufSz / fragSz, 2 ); + bytesPerBuf = PA_MAX( fragSz * Pa_GetSampleSize( hostFormat ) * chans, 16 ); + + /* The fragment parameters are encoded like this: + * Most significant byte: number of fragments + * Least significant byte: exponent of fragment size (i.e., for 256, 8) + */ + frgmt = (numBufs << 16) + (CalcHigherLogTwo( bytesPerBuf ) & 0xffff); + ENSURE_( ioctl( component->fd, SNDCTL_DSP_SETFRAGMENT, &frgmt ), paUnanticipatedHostError ); + + /* A: according to the OSS programmer's guide parameters should be set in this order: + * format, channels, rate */ + + /* This format should be deemed good before we get this far */ + PA_ENSURE( Pa2OssFormat( hostFormat, &temp ) ); + nativeFormat = temp; + ENSURE_( ioctl( component->fd, SNDCTL_DSP_SETFMT, &temp ), paUnanticipatedHostError ); + PA_UNLESS( temp == nativeFormat, paInternalError ); + + /* try to set the number of channels */ + ENSURE_( ioctl( component->fd, SNDCTL_DSP_CHANNELS, &chans ), paSampleFormatNotSupported ); /* XXX: Should be paInvalidChannelCount? */ + /* It's possible that the minimum number of host channels is greater than what the user requested */ + PA_UNLESS( chans >= component->userChannelCount, paInvalidChannelCount ); + + /* try to set the sample rate */ + ENSURE_( ioctl( component->fd, SNDCTL_DSP_SPEED, &sr ), paInvalidSampleRate ); + + /* reject if there's no sample rate within 1% of the one requested */ + if( (fabs( sampleRate - sr ) / sampleRate) > 0.01 ) + { + PA_DEBUG(("%s: Wanted %f, closest sample rate was %d\n", __FUNCTION__, sampleRate, sr )); + PA_ENSURE( paInvalidSampleRate ); + } + + ENSURE_( ioctl( component->fd, streamMode == StreamMode_In ? SNDCTL_DSP_GETISPACE : SNDCTL_DSP_GETOSPACE, &bufInfo ), + paUnanticipatedHostError ); + component->numBufs = bufInfo.fragstotal; + + /* This needs to be the last ioctl call before the first read/write, according to the OSS programmer's guide */ + ENSURE_( ioctl( component->fd, SNDCTL_DSP_GETBLKSIZE, &bytesPerBuf ), paUnanticipatedHostError ); + + component->hostFrames = bytesPerBuf / Pa_GetSampleSize( hostFormat ) / chans; + component->hostChannelCount = chans; + component->hostFormat = hostFormat; + } + else + { + component->hostFormat = master->hostFormat; + component->hostFrames = master->hostFrames; + component->hostChannelCount = master->hostChannelCount; + component->numBufs = master->numBufs; + } + + PA_UNLESS( component->buffer = PaUtil_AllocateMemory( PaOssStreamComponent_BufferSize( component ) ), + paInsufficientMemory ); + +error: + return result; +} + +static PaError PaOssStreamComponent_Read( PaOssStreamComponent *component, unsigned long *frames ) +{ + PaError result = paNoError; + size_t len = *frames * PaOssStreamComponent_FrameSize( component ); + ssize_t bytesRead; + + ENSURE_( bytesRead = read( component->fd, component->buffer, len ), paUnanticipatedHostError ); + *frames = bytesRead / PaOssStreamComponent_FrameSize( component ); + /* TODO: Handle condition where number of frames read doesn't equal number of frames requested */ + +error: + return result; +} + +static PaError PaOssStreamComponent_Write( PaOssStreamComponent *component, unsigned long *frames ) +{ + PaError result = paNoError; + size_t len = *frames * PaOssStreamComponent_FrameSize( component ); + ssize_t bytesWritten; + + ENSURE_( bytesWritten = write( component->fd, component->buffer, len ), paUnanticipatedHostError ); + *frames = bytesWritten / PaOssStreamComponent_FrameSize( component ); + /* TODO: Handle condition where number of frames written doesn't equal number of frames requested */ + +error: + return result; +} + +/** Configure the stream according to input/output parameters. + * + * Aspect StreamChannels: The minimum number of channels supported by the device may exceed that requested by + * the user, if so we'll record the actual number of host channels and adapt later. + */ +static PaError PaOssStream_Configure( PaOssStream *stream, double sampleRate, unsigned long framesPerBuffer, + double *inputLatency, double *outputLatency ) +{ + PaError result = paNoError; + int duplex = stream->capture && stream->playback; + unsigned long framesPerHostBuffer = 0; + + /* We should request full duplex first thing after opening the device */ + if( duplex && stream->sharedDevice ) + ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETDUPLEX, 0 ), paUnanticipatedHostError ); + + if( stream->capture ) + { + PaOssStreamComponent *component = stream->capture; + PA_ENSURE( PaOssStreamComponent_Configure( component, sampleRate, framesPerBuffer, StreamMode_In, + NULL ) ); + + assert( component->hostChannelCount > 0 ); + assert( component->hostFrames > 0 ); + + *inputLatency = (component->hostFrames * (component->numBufs - 1)) / sampleRate; + } + if( stream->playback ) + { + PaOssStreamComponent *component = stream->playback, *master = stream->sharedDevice ? stream->capture : NULL; + PA_ENSURE( PaOssStreamComponent_Configure( component, sampleRate, framesPerBuffer, StreamMode_Out, + master ) ); + + assert( component->hostChannelCount > 0 ); + assert( component->hostFrames > 0 ); + + *outputLatency = (component->hostFrames * (component->numBufs - 1)) / sampleRate; + } + + if( duplex ) + framesPerHostBuffer = PA_MIN( stream->capture->hostFrames, stream->playback->hostFrames ); + else if( stream->capture ) + framesPerHostBuffer = stream->capture->hostFrames; + else if( stream->playback ) + framesPerHostBuffer = stream->playback->hostFrames; + + stream->framesPerHostBuffer = framesPerHostBuffer; + stream->pollTimeout = (int) ceil( 1e6 * framesPerHostBuffer / sampleRate ); /* Period in usecs, rounded up */ + + stream->sampleRate = stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + +error: + return result; +} + +/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */ + +/** Open a PA OSS stream. + * + * Aspect StreamChannels: The number of channels is specified per direction (in/out), and can differ between the + * two. However, OSS doesn't support separate configuration spaces for capture and playback so if both + * directions are the same device we will demand the same number of channels. The number of channels can range + * from 1 to the maximum supported by the device. + * + * Aspect BufferSettings: If framesPerBuffer != paFramesPerBufferUnspecified the number of frames per callback + * must reflect this, in addition the host latency per device should approximate the corresponding + * suggestedLatency. Based on these constraints we need to determine a number of frames per host buffer that + * both capture and playback can agree on (they can be different devices), the buffer processor can adapt + * between host and user buffer size, but the ratio should preferably be integral. + */ +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + PaOSSHostApiRepresentation *ossHostApi = (PaOSSHostApiRepresentation*)hostApi; + PaOssStream *stream = NULL; + int inputChannelCount = 0, outputChannelCount = 0; + PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0, inputHostFormat = 0, outputHostFormat = 0; + const PaDeviceInfo *inputDeviceInfo = 0, *outputDeviceInfo = 0; + int bpInitialized = 0; + double inLatency = 0., outLatency = 0.; + int i = 0; + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform specific flag */ + + if( inputParameters ) + { + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + inputDeviceInfo = hostApi->deviceInfos[inputParameters->device]; + PA_ENSURE( ValidateParameters( inputParameters, inputDeviceInfo, StreamMode_In ) ); + + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + } + if( outputParameters ) + { + outputDeviceInfo = hostApi->deviceInfos[outputParameters->device]; + PA_ENSURE( ValidateParameters( outputParameters, outputDeviceInfo, StreamMode_Out ) ); + + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + } + + /* Aspect StreamChannels: We currently demand that number of input and output channels are the same, if the same + * device is opened for both directions + */ + if( inputChannelCount > 0 && outputChannelCount > 0 ) + { + if( inputParameters->device == outputParameters->device ) + { + if( inputParameters->channelCount != outputParameters->channelCount ) + return paInvalidChannelCount; + } + } + + /* Round framesPerBuffer to the next power-of-two to make OSS happy. */ + if( framesPerBuffer != paFramesPerBufferUnspecified ) + { + framesPerBuffer &= INT_MAX; + for (i = 1; framesPerBuffer > i; i <<= 1) ; + framesPerBuffer = i; + } + + /* allocate and do basic initialization of the stream structure */ + PA_UNLESS( stream = (PaOssStream*)PaUtil_AllocateMemory( sizeof(PaOssStream) ), paInsufficientMemory ); + PA_ENSURE( PaOssStream_Initialize( stream, inputParameters, outputParameters, streamCallback, userData, streamFlags, ossHostApi ) ); + + PA_ENSURE( PaOssStream_Configure( stream, sampleRate, framesPerBuffer, &inLatency, &outLatency ) ); + + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + if( inputParameters ) + { + inputHostFormat = stream->capture->hostFormat; + stream->streamRepresentation.streamInfo.inputLatency = inLatency + + PaUtil_GetBufferProcessorInputLatencyFrames( &stream->bufferProcessor ) / sampleRate; + } + if( outputParameters ) + { + outputHostFormat = stream->playback->hostFormat; + stream->streamRepresentation.streamInfo.outputLatency = outLatency + + PaUtil_GetBufferProcessorOutputLatencyFrames( &stream->bufferProcessor ) / sampleRate; + } + + /* Initialize buffer processor with fixed host buffer size. + * Aspect StreamSampleFormat: Here we commit the user and host sample formats, PA infrastructure will + * convert between the two. + */ + PA_ENSURE( PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + inputChannelCount, inputSampleFormat, inputHostFormat, outputChannelCount, outputSampleFormat, + outputHostFormat, sampleRate, streamFlags, framesPerBuffer, stream->framesPerHostBuffer, + paUtilFixedHostBufferSize, streamCallback, userData ) ); + bpInitialized = 1; + + *s = (PaStream*)stream; + + return result; + +error: + if( bpInitialized ) + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + if( stream ) + PaOssStream_Terminate( stream ); + + return result; +} + +/*! Poll on I/O filedescriptors. + + Poll till we've determined there's data for read or write. In the full-duplex case, + we don't want to hang around forever waiting for either input or output frames, so + whenever we have a timed out filedescriptor we check if we're nearing under/overrun + for the other direction (critical limit set at one buffer). If so, we exit the waiting + state, and go on with what we got. We align the number of frames on a host buffer + boundary because it is possible that the buffer size differs for the two directions and + the host buffer size is a compromise between the two. + */ +static PaError PaOssStream_WaitForFrames( PaOssStream *stream, unsigned long *frames ) +{ + PaError result = paNoError; + int pollPlayback = 0, pollCapture = 0; + int captureAvail = INT_MAX, playbackAvail = INT_MAX, commonAvail; + audio_buf_info bufInfo; + /* int ofs = 0, nfds = stream->nfds; */ + fd_set readFds, writeFds; + int nfds = 0; + struct timeval selectTimeval = {0, 0}; + unsigned long timeout = stream->pollTimeout; /* In usecs */ + int captureFd = -1, playbackFd = -1; + + assert( stream ); + assert( frames ); + + if( stream->capture ) + { + pollCapture = 1; + captureFd = stream->capture->fd; + /* stream->capture->pfd->events = POLLIN; */ + } + if( stream->playback ) + { + pollPlayback = 1; + playbackFd = stream->playback->fd; + /* stream->playback->pfd->events = POLLOUT; */ + } + + FD_ZERO( &readFds ); + FD_ZERO( &writeFds ); + + while( pollPlayback || pollCapture ) + { +#ifdef PTHREAD_CANCELED + pthread_testcancel(); +#else + /* avoid indefinite waiting on thread not supporting cancelation */ + if( stream->callbackStop || stream->callbackAbort ) + { + PA_DEBUG(( "Cancelling PaOssStream_WaitForFrames\n" )); + (*frames) = 0; + return paNoError; + } +#endif + + /* select may modify the timeout parameter */ + selectTimeval.tv_usec = timeout; + nfds = 0; + + if( pollCapture ) + { + FD_SET( captureFd, &readFds ); + nfds = captureFd + 1; + } + if( pollPlayback ) + { + FD_SET( playbackFd, &writeFds ); + nfds = PA_MAX( nfds, playbackFd + 1 ); + } + ENSURE_( select( nfds, &readFds, &writeFds, NULL, &selectTimeval ), paUnanticipatedHostError ); + /* + if( poll( stream->pfds + ofs, nfds, stream->pollTimeout ) < 0 ) + { + + ENSURE_( -1, paUnanticipatedHostError ); + } + */ +#ifdef PTHREAD_CANCELED + pthread_testcancel(); +#else + /* avoid indefinite waiting on thread not supporting cancelation */ + if( stream->callbackStop || stream->callbackAbort ) + { + PA_DEBUG(( "Cancelling PaOssStream_WaitForFrames\n" )); + (*frames) = 0; + return paNoError; + } +#endif + if( pollCapture ) + { + if( FD_ISSET( captureFd, &readFds ) ) + { + FD_CLR( captureFd, &readFds ); + pollCapture = 0; + } + /* + if( stream->capture->pfd->revents & POLLIN ) + { + --nfds; + ++ofs; + pollCapture = 0; + } + */ + else if( stream->playback ) /* Timed out, go on with playback? */ + { + /*PA_DEBUG(( "%s: Trying to poll again for capture frames, pollTimeout: %d\n", + __FUNCTION__, stream->pollTimeout ));*/ + } + } + if( pollPlayback ) + { + if( FD_ISSET( playbackFd, &writeFds ) ) + { + FD_CLR( playbackFd, &writeFds ); + pollPlayback = 0; + } + /* + if( stream->playback->pfd->revents & POLLOUT ) + { + --nfds; + pollPlayback = 0; + } + */ + else if( stream->capture ) /* Timed out, go on with capture? */ + { + /*PA_DEBUG(( "%s: Trying to poll again for playback frames, pollTimeout: %d\n\n", + __FUNCTION__, stream->pollTimeout ));*/ + } + } + } + + if( stream->capture ) + { + ENSURE_( ioctl( captureFd, SNDCTL_DSP_GETISPACE, &bufInfo ), paUnanticipatedHostError ); + captureAvail = bufInfo.fragments * stream->capture->hostFrames; + if( !captureAvail ) + PA_DEBUG(( "%s: captureAvail: 0\n", __FUNCTION__ )); + + captureAvail = captureAvail == 0 ? INT_MAX : captureAvail; /* Disregard if zero */ + } + if( stream->playback ) + { + ENSURE_( ioctl( playbackFd, SNDCTL_DSP_GETOSPACE, &bufInfo ), paUnanticipatedHostError ); + playbackAvail = bufInfo.fragments * stream->playback->hostFrames; + if( !playbackAvail ) + { + PA_DEBUG(( "%s: playbackAvail: 0\n", __FUNCTION__ )); + } + + playbackAvail = playbackAvail == 0 ? INT_MAX : playbackAvail; /* Disregard if zero */ + } + + commonAvail = PA_MIN( captureAvail, playbackAvail ); + if( commonAvail == INT_MAX ) + commonAvail = 0; + commonAvail -= commonAvail % stream->framesPerHostBuffer; + + assert( commonAvail != INT_MAX ); + assert( commonAvail >= 0 ); + *frames = commonAvail; + +error: + return result; +} + +/** Prepare stream for capture/playback. + * + * In order to synchronize capture and playback properly we use the SETTRIGGER command. + */ +static PaError PaOssStream_Prepare( PaOssStream *stream ) +{ + PaError result = paNoError; + int enableBits = 0; + + if( stream->triggered ) + return result; + + /* The OSS reference instructs us to clear direction bits before setting them.*/ + if( stream->playback ) + ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); + if( stream->capture ) + ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); + + if( stream->playback ) + { + size_t bufSz = PaOssStreamComponent_BufferSize( stream->playback ); + memset( stream->playback->buffer, 0, bufSz ); + + /* Looks like we have to turn off blocking before we try this, but if we don't fill the buffer + * OSS will complain. */ + PA_ENSURE( ModifyBlocking( stream->playback->fd, 0 ) ); + while (1) + { + if( write( stream->playback->fd, stream->playback->buffer, bufSz ) < 0 ) + break; + } + PA_ENSURE( ModifyBlocking( stream->playback->fd, 1 ) ); + } + + if( stream->sharedDevice ) + { + enableBits = PCM_ENABLE_INPUT | PCM_ENABLE_OUTPUT; + ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); + } + else + { + if( stream->capture ) + { + enableBits = PCM_ENABLE_INPUT; + ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); + } + if( stream->playback ) + { + enableBits = PCM_ENABLE_OUTPUT; + ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); + } + } + + /* Ok, we have triggered the stream */ + stream->triggered = 1; + +error: + return result; +} + +/** Stop audio processing + * + */ +static PaError PaOssStream_Stop( PaOssStream *stream, int abort ) +{ + PaError result = paNoError; + + /* Looks like the only safe way to stop audio without reopening the device is SNDCTL_DSP_POST. + * Also disable capture/playback till the stream is started again. + */ + int captureErr = 0, playbackErr = 0; + if( stream->capture ) + { + if( (captureErr = ioctl( stream->capture->fd, SNDCTL_DSP_POST, 0 )) < 0 ) + { + PA_DEBUG(( "%s: Failed to stop capture device, error: %d\n", __FUNCTION__, captureErr )); + } + } + if( stream->playback && !stream->sharedDevice ) + { + if( (playbackErr = ioctl( stream->playback->fd, SNDCTL_DSP_POST, 0 )) < 0 ) + { + PA_DEBUG(( "%s: Failed to stop playback device, error: %d\n", __FUNCTION__, playbackErr )); + } + } + + if( captureErr || playbackErr ) + { + result = paUnanticipatedHostError; + } + + return result; +} + +/** Clean up after thread exit. + * + * Aspect StreamState: If the user has registered a streamFinishedCallback it will be called here + */ +static void OnExit( void *data ) +{ + PaOssStream *stream = (PaOssStream *) data; + assert( data ); + + PaUtil_ResetCpuLoadMeasurer( &stream->cpuLoadMeasurer ); + + PaOssStream_Stop( stream, stream->callbackAbort ); + + PA_DEBUG(( "OnExit: Stoppage\n" )); + + /* Eventually notify user all buffers have played */ + if( stream->streamRepresentation.streamFinishedCallback ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + + stream->callbackAbort = 0; /* Clear state */ + stream->isActive = 0; +} + +static PaError SetUpBuffers( PaOssStream *stream, unsigned long framesAvail ) +{ + PaError result = paNoError; + + if( stream->capture ) + { + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, 0, stream->capture->buffer, + stream->capture->hostChannelCount ); + PaUtil_SetInputFrameCount( &stream->bufferProcessor, framesAvail ); + } + if( stream->playback ) + { + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, 0, stream->playback->buffer, + stream->playback->hostChannelCount ); + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, framesAvail ); + } + + return result; +} + +/** Thread procedure for callback processing. + * + * Aspect StreamState: StartStream will wait on this to initiate audio processing, useful in case the + * callback should be used for buffer priming. When the stream is cancelled a separate function will + * take care of the transition to the Callback Finished state (the stream isn't considered Stopped + * before StopStream() or AbortStream() are called). + */ +static void *PaOSS_AudioThreadProc( void *userData ) +{ + PaError result = paNoError; + PaOssStream *stream = (PaOssStream*)userData; + unsigned long framesAvail = 0, framesProcessed = 0; + int callbackResult = paContinue; + int triggered = stream->triggered; /* See if SNDCTL_DSP_TRIGGER has been issued already */ + int initiateProcessing = triggered; /* Already triggered? */ + PaStreamCallbackFlags cbFlags = 0; /* We might want to keep state across iterations */ + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /* TODO: IMPLEMENT ME */ + + /* +#if ( SOUND_VERSION > 0x030904 ) + audio_errinfo errinfo; +#endif +*/ + + assert( stream ); + + pthread_cleanup_push( &OnExit, stream ); /* Execute OnExit when exiting */ + + /* The first time the stream is started we use SNDCTL_DSP_TRIGGER to accurately start capture and + * playback in sync, when the stream is restarted after being stopped we simply start by reading/ + * writing. + */ + PA_ENSURE( PaOssStream_Prepare( stream ) ); + + /* If we are to initiate processing implicitly by reading/writing data, we start off in blocking mode */ + if( initiateProcessing ) + { + /* Make sure devices are in blocking mode */ + if( stream->capture ) + ModifyBlocking( stream->capture->fd, 1 ); + if( stream->playback ) + ModifyBlocking( stream->playback->fd, 1 ); + } + + while( 1 ) + { +#ifdef PTHREAD_CANCELED + pthread_testcancel(); +#else + if( stream->callbackAbort ) /* avoid indefinite waiting on thread not supporting cancelation */ + { + PA_DEBUG(( "Aborting callback thread\n" )); + break; + } +#endif + if( stream->callbackStop && callbackResult == paContinue ) + { + PA_DEBUG(( "Setting callbackResult to paComplete\n" )); + callbackResult = paComplete; + } + + /* Aspect StreamState: Because of the messy OSS scheme we can't explicitly trigger device start unless + * the stream has been recently started, we will have to go right ahead and read/write in blocking + * fashion to trigger operation. Therefore we begin with processing one host buffer before we switch + * to non-blocking mode. + */ + if( !initiateProcessing ) + { + /* Wait on available frames */ + PA_ENSURE( PaOssStream_WaitForFrames( stream, &framesAvail ) ); + assert( framesAvail % stream->framesPerHostBuffer == 0 ); + } + else + { + framesAvail = stream->framesPerHostBuffer; + } + + while( framesAvail > 0 ) + { + unsigned long frames = framesAvail; + +#ifdef PTHREAD_CANCELED + pthread_testcancel(); +#else + if( stream->callbackStop ) + { + PA_DEBUG(( "Setting callbackResult to paComplete\n" )); + callbackResult = paComplete; + } + + if( stream->callbackAbort ) /* avoid indefinite waiting on thread not supporting cancelation */ + { + PA_DEBUG(( "Aborting callback thread\n" )); + break; + } +#endif + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + /* Read data */ + if ( stream->capture ) + { + PA_ENSURE( PaOssStreamComponent_Read( stream->capture, &frames ) ); + if( frames < framesAvail ) + { + PA_DEBUG(( "Read %lu less frames than requested\n", framesAvail - frames )); + framesAvail = frames; + } + } + +#if ( SOUND_VERSION >= 0x030904 ) + /* + Check with OSS to see if there have been any under/overruns + since last time we checked. + */ + /* + if( ioctl( stream->deviceHandle, SNDCTL_DSP_GETERROR, &errinfo ) >= 0 ) + { + if( errinfo.play_underruns ) + cbFlags |= paOutputUnderflow ; + if( errinfo.record_underruns ) + cbFlags |= paInputUnderflow ; + } + else + PA_DEBUG(( "SNDCTL_DSP_GETERROR command failed: %s\n", strerror( errno ) )); + */ +#endif + + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, + cbFlags ); + cbFlags = 0; + PA_ENSURE( SetUpBuffers( stream, framesAvail ) ); + + framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, + &callbackResult ); + assert( framesProcessed == framesAvail ); + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + + if ( stream->playback ) + { + frames = framesAvail; + + PA_ENSURE( PaOssStreamComponent_Write( stream->playback, &frames ) ); + if( frames < framesAvail ) + { + /* TODO: handle bytesWritten != bytesRequested (slippage?) */ + PA_DEBUG(( "Wrote %lu less frames than requested\n", framesAvail - frames )); + } + } + + framesAvail -= framesProcessed; + stream->framesProcessed += framesProcessed; + + if( callbackResult != paContinue ) + break; + } + + if( initiateProcessing || !triggered ) + { + /* Non-blocking */ + if( stream->capture ) + PA_ENSURE( ModifyBlocking( stream->capture->fd, 0 ) ); + if( stream->playback && !stream->sharedDevice ) + PA_ENSURE( ModifyBlocking( stream->playback->fd, 0 ) ); + + initiateProcessing = 0; + sem_post( &stream->semaphore ); + } + + if( callbackResult != paContinue ) + { + stream->callbackAbort = callbackResult == paAbort; + if( stream->callbackAbort || PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) + break; + } + } + + pthread_cleanup_pop( 1 ); + +error: + pthread_exit( NULL ); +} + +/** Close the stream. + * + */ +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaOssStream *stream = (PaOssStream*)s; + + assert( stream ); + + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaOssStream_Terminate( stream ); + + return result; +} + +/** Start the stream. + * + * Aspect StreamState: After returning, the stream shall be in the Active state, implying that an eventual + * callback will be repeatedly called in a separate thread. If a separate thread is started this function + * will block untill it has started processing audio, otherwise audio processing is started directly. + */ +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaOssStream *stream = (PaOssStream*)s; + + stream->isActive = 1; + stream->isStopped = 0; + stream->lastPosPtr = 0; + stream->lastStreamBytes = 0; + stream->framesProcessed = 0; + + /* only use the thread for callback streams */ + if( stream->bufferProcessor.streamCallback ) + { + PA_ENSURE( PaUtil_StartThreading( &stream->threading, &PaOSS_AudioThreadProc, stream ) ); + sem_wait( &stream->semaphore ); + } + else + PA_ENSURE( PaOssStream_Prepare( stream ) ); + +error: + return result; +} + +static PaError RealStop( PaOssStream *stream, int abort ) +{ + PaError result = paNoError; + + if( stream->callbackMode ) + { + if( abort ) + stream->callbackAbort = 1; + else + stream->callbackStop = 1; + + PA_ENSURE( PaUtil_CancelThreading( &stream->threading, !abort, NULL ) ); + + stream->callbackStop = stream->callbackAbort = 0; + } + else + PA_ENSURE( PaOssStream_Stop( stream, abort ) ); + + stream->isStopped = 1; + +error: + return result; +} + +/** Stop the stream. + * + * Aspect StreamState: This will cause the stream to transition to the Stopped state, playing all enqueued + * buffers. + */ +static PaError StopStream( PaStream *s ) +{ + return RealStop( (PaOssStream *)s, 0 ); +} + +/** Abort the stream. + * + * Aspect StreamState: This will cause the stream to transition to the Stopped state, discarding all enqueued + * buffers. Note that the buffers are not currently correctly discarded, this is difficult without closing + * the OSS device. + */ +static PaError AbortStream( PaStream *s ) +{ + return RealStop( (PaOssStream *)s, 1 ); +} + +/** Is the stream in the Stopped state. + * + */ +static PaError IsStreamStopped( PaStream *s ) +{ + PaOssStream *stream = (PaOssStream*)s; + + return (stream->isStopped); +} + +/** Is the stream in the Active state. + * + */ +static PaError IsStreamActive( PaStream *s ) +{ + PaOssStream *stream = (PaOssStream*)s; + + return (stream->isActive); +} + +static PaTime GetStreamTime( PaStream *s ) +{ + PaOssStream *stream = (PaOssStream*)s; + count_info info; + int delta; + + if( stream->playback ) { + if( ioctl( stream->playback->fd, SNDCTL_DSP_GETOPTR, &info) == 0 ) { + delta = ( info.bytes - stream->lastPosPtr ) /* & 0x000FFFFF*/; + return (float)(stream->lastStreamBytes + delta) / PaOssStreamComponent_FrameSize( stream->playback ) / stream->sampleRate; + } + } + else { + if (ioctl( stream->capture->fd, SNDCTL_DSP_GETIPTR, &info) == 0) { + delta = (info.bytes - stream->lastPosPtr) /*& 0x000FFFFF*/; + return (float)(stream->lastStreamBytes + delta) / PaOssStreamComponent_FrameSize( stream->capture ) / stream->sampleRate; + } + } + + /* the ioctl failed, but we can still give a coarse estimate */ + + return stream->framesProcessed / stream->sampleRate; +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaOssStream *stream = (PaOssStream*)s; + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + + +/* + As separate stream interfaces are used for blocking and callback + streams, the following functions can be guaranteed to only be called + for blocking streams. +*/ + + +static PaError ReadStream( PaStream* s, + void *buffer, + unsigned long frames ) +{ + PaError result = paNoError; + PaOssStream *stream = (PaOssStream*)s; + int bytesRequested, bytesRead; + unsigned long framesRequested; + void *userBuffer; + + /* If user input is non-interleaved, PaUtil_CopyInput will manipulate the channel pointers, + * so we copy the user provided pointers */ + if( stream->bufferProcessor.userInputIsInterleaved ) + userBuffer = buffer; + else /* Copy channels into local array */ + { + userBuffer = stream->capture->userBuffers; + memcpy( (void *)userBuffer, buffer, sizeof (void *) * stream->capture->userChannelCount ); + } + + while( frames ) + { + framesRequested = PA_MIN( frames, stream->capture->hostFrames ); + + bytesRequested = framesRequested * PaOssStreamComponent_FrameSize( stream->capture ); + ENSURE_( (bytesRead = read( stream->capture->fd, stream->capture->buffer, bytesRequested )), + paUnanticipatedHostError ); + if ( bytesRequested != bytesRead ) + { + PA_DEBUG(( "Requested %d bytes, read %d\n", bytesRequested, bytesRead )); + return paUnanticipatedHostError; + } + + PaUtil_SetInputFrameCount( &stream->bufferProcessor, stream->capture->hostFrames ); + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, 0, stream->capture->buffer, stream->capture->hostChannelCount ); + PaUtil_CopyInput( &stream->bufferProcessor, &userBuffer, framesRequested ); + frames -= framesRequested; + } + +error: + return result; +} + + +static PaError WriteStream( PaStream *s, const void *buffer, unsigned long frames ) +{ + PaError result = paNoError; + PaOssStream *stream = (PaOssStream*)s; + int bytesRequested, bytesWritten; + unsigned long framesConverted; + const void *userBuffer; + + /* If user output is non-interleaved, PaUtil_CopyOutput will manipulate the channel pointers, + * so we copy the user provided pointers */ + if( stream->bufferProcessor.userOutputIsInterleaved ) + userBuffer = buffer; + else + { + /* Copy channels into local array */ + userBuffer = stream->playback->userBuffers; + memcpy( (void *)userBuffer, buffer, sizeof (void *) * stream->playback->userChannelCount ); + } + + while( frames ) + { + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, stream->playback->hostFrames ); + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, 0, stream->playback->buffer, stream->playback->hostChannelCount ); + + framesConverted = PaUtil_CopyOutput( &stream->bufferProcessor, &userBuffer, frames ); + frames -= framesConverted; + + bytesRequested = framesConverted * PaOssStreamComponent_FrameSize( stream->playback ); + ENSURE_( (bytesWritten = write( stream->playback->fd, stream->playback->buffer, bytesRequested )), + paUnanticipatedHostError ); + + if ( bytesRequested != bytesWritten ) + { + PA_DEBUG(( "Requested %d bytes, wrote %d\n", bytesRequested, bytesWritten )); + return paUnanticipatedHostError; + } + } + +error: + return result; +} + + +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaError result = paNoError; + PaOssStream *stream = (PaOssStream*)s; + audio_buf_info info; + + ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_GETISPACE, &info ), paUnanticipatedHostError ); + return info.fragments * stream->capture->hostFrames; + +error: + return result; +} + + +/* TODO: Compute number of allocated bytes somewhere else, can we use ODELAY with capture */ +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaError result = paNoError; + PaOssStream *stream = (PaOssStream*)s; + int delay = 0; +#ifdef SNDCTL_DSP_GETODELAY + ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_GETODELAY, &delay ), paUnanticipatedHostError ); +#endif + return (PaOssStreamComponent_BufferSize( stream->playback ) - delay) / PaOssStreamComponent_FrameSize( stream->playback ); + +/* Conditionally compile this to avoid warning about unused label */ +#ifdef SNDCTL_DSP_GETODELAY +error: + return result; +#endif +} + diff --git a/Externals/portaudio/src/hostapi/oss/recplay.c b/Externals/portaudio/src/hostapi/oss/recplay.c new file mode 100644 index 0000000000..9d4c78cfa3 --- /dev/null +++ b/Externals/portaudio/src/hostapi/oss/recplay.c @@ -0,0 +1,114 @@ +/* + * recplay.c + * Phil Burk + * Minimal record and playback test. + * + */ +#include +#include +#include +#ifndef __STDC__ +/* #include */ +#endif /* __STDC__ */ +#include +#ifdef __STDC__ +#include +#else /* __STDC__ */ +#include +#endif /* __STDC__ */ +#include + +#define NUM_BYTES (64*1024) +#define BLOCK_SIZE (4*1024) + +#define AUDIO "/dev/dsp" + +char buffer[NUM_BYTES]; + +int audioDev = 0; + +main (int argc, char *argv[]) +{ + int numLeft; + char *ptr; + int num; + int samplesize; + + /********** RECORD ********************/ + /* Open audio device. */ + audioDev = open (AUDIO, O_RDONLY, 0); + if (audioDev == -1) + { + perror (AUDIO); + exit (-1); + } + + /* Set to 16 bit samples. */ + samplesize = 16; + ioctl(audioDev, SNDCTL_DSP_SAMPLESIZE, &samplesize); + if (samplesize != 16) + { + perror("Unable to set the sample size."); + exit(-1); + } + + /* Record in blocks */ + printf("Begin recording.\n"); + numLeft = NUM_BYTES; + ptr = buffer; + while( numLeft >= BLOCK_SIZE ) + { + if ( (num = read (audioDev, ptr, BLOCK_SIZE)) < 0 ) + { + perror (AUDIO); + exit (-1); + } + else + { + printf("Read %d bytes\n", num); + ptr += num; + numLeft -= num; + } + } + + close( audioDev ); + + /********** PLAYBACK ********************/ + /* Open audio device for writing. */ + audioDev = open (AUDIO, O_WRONLY, 0); + if (audioDev == -1) + { + perror (AUDIO); + exit (-1); + } + + /* Set to 16 bit samples. */ + samplesize = 16; + ioctl(audioDev, SNDCTL_DSP_SAMPLESIZE, &samplesize); + if (samplesize != 16) + { + perror("Unable to set the sample size."); + exit(-1); + } + + /* Play in blocks */ + printf("Begin playing.\n"); + numLeft = NUM_BYTES; + ptr = buffer; + while( numLeft >= BLOCK_SIZE ) + { + if ( (num = write (audioDev, ptr, BLOCK_SIZE)) < 0 ) + { + perror (AUDIO); + exit (-1); + } + else + { + printf("Wrote %d bytes\n", num); + ptr += num; + numLeft -= num; + } + } + + close( audioDev ); +} diff --git a/Externals/portaudio/src/hostapi/skeleton/README.txt b/Externals/portaudio/src/hostapi/skeleton/README.txt new file mode 100644 index 0000000000..39d4c8d2be --- /dev/null +++ b/Externals/portaudio/src/hostapi/skeleton/README.txt @@ -0,0 +1 @@ +pa_hostapi_skeleton.c provides a starting point for implementing support for a new host API with PortAudio. The idea is that you copy it to a new directory inside /hostapi and start editing. \ No newline at end of file diff --git a/Externals/portaudio/src/hostapi/skeleton/pa_hostapi_skeleton.c b/Externals/portaudio/src/hostapi/skeleton/pa_hostapi_skeleton.c new file mode 100644 index 0000000000..24eb450096 --- /dev/null +++ b/Externals/portaudio/src/hostapi/skeleton/pa_hostapi_skeleton.c @@ -0,0 +1,818 @@ +/* + * $Id: pa_hostapi_skeleton.c 1668 2011-05-02 17:07:11Z rossb $ + * Portable Audio I/O Library skeleton implementation + * demonstrates how to use the common functions to implement support + * for a host API + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Skeleton implementation of support for a host API. + + This file is provided as a starting point for implementing support for + a new host API. It provides examples of how the common code can be used. + + @note IMPLEMENT ME comments are used to indicate functionality + which much be customised for each implementation. +*/ + + +#include /* strlen() */ + +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" + + +/* prototypes for functions declared in this file */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream* stream ); +static signed long GetStreamWriteAvailable( PaStream* stream ); + + +/* IMPLEMENT ME: a macro like the following one should be used for reporting + host errors */ +#define PA_SKELETON_SET_LAST_HOST_ERROR( errorCode, errorText ) \ + PaUtil_SetLastHostErrorInfo( paInDevelopment, errorCode, errorText ) + +/* PaSkeletonHostApiRepresentation - host api datastructure specific to this implementation */ + +typedef struct +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + /* implementation specific data goes here */ +} +PaSkeletonHostApiRepresentation; /* IMPLEMENT ME: rename this */ + + +PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + int i, deviceCount; + PaSkeletonHostApiRepresentation *skeletonHostApi; + PaDeviceInfo *deviceInfoArray; + + skeletonHostApi = (PaSkeletonHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaSkeletonHostApiRepresentation) ); + if( !skeletonHostApi ) + { + result = paInsufficientMemory; + goto error; + } + + skeletonHostApi->allocations = PaUtil_CreateAllocationGroup(); + if( !skeletonHostApi->allocations ) + { + result = paInsufficientMemory; + goto error; + } + + *hostApi = &skeletonHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paInDevelopment; /* IMPLEMENT ME: change to correct type id */ + (*hostApi)->info.name = "skeleton implementation"; /* IMPLEMENT ME: change to correct name */ + + (*hostApi)->info.defaultInputDevice = paNoDevice; /* IMPLEMENT ME */ + (*hostApi)->info.defaultOutputDevice = paNoDevice; /* IMPLEMENT ME */ + + (*hostApi)->info.deviceCount = 0; + + deviceCount = 0; /* IMPLEMENT ME */ + + if( deviceCount > 0 ) + { + (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + skeletonHostApi->allocations, sizeof(PaDeviceInfo*) * deviceCount ); + if( !(*hostApi)->deviceInfos ) + { + result = paInsufficientMemory; + goto error; + } + + /* allocate all device info structs in a contiguous block */ + deviceInfoArray = (PaDeviceInfo*)PaUtil_GroupAllocateMemory( + skeletonHostApi->allocations, sizeof(PaDeviceInfo) * deviceCount ); + if( !deviceInfoArray ) + { + result = paInsufficientMemory; + goto error; + } + + for( i=0; i < deviceCount; ++i ) + { + PaDeviceInfo *deviceInfo = &deviceInfoArray[i]; + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + deviceInfo->name = 0; /* IMPLEMENT ME: allocate block and copy name eg: + deviceName = (char*)PaUtil_GroupAllocateMemory( skeletonHostApi->allocations, strlen(srcName) + 1 ); + if( !deviceName ) + { + result = paInsufficientMemory; + goto error; + } + strcpy( deviceName, srcName ); + deviceInfo->name = deviceName; + */ + + deviceInfo->maxInputChannels = 0; /* IMPLEMENT ME */ + deviceInfo->maxOutputChannels = 0; /* IMPLEMENT ME */ + + deviceInfo->defaultLowInputLatency = 0.; /* IMPLEMENT ME */ + deviceInfo->defaultLowOutputLatency = 0.; /* IMPLEMENT ME */ + deviceInfo->defaultHighInputLatency = 0.; /* IMPLEMENT ME */ + deviceInfo->defaultHighOutputLatency = 0.; /* IMPLEMENT ME */ + + deviceInfo->defaultSampleRate = 0.; /* IMPLEMENT ME */ + + (*hostApi)->deviceInfos[i] = deviceInfo; + ++(*hostApi)->info.deviceCount; + } + } + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &skeletonHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &skeletonHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + return result; + +error: + if( skeletonHostApi ) + { + if( skeletonHostApi->allocations ) + { + PaUtil_FreeAllAllocations( skeletonHostApi->allocations ); + PaUtil_DestroyAllocationGroup( skeletonHostApi->allocations ); + } + + PaUtil_FreeMemory( skeletonHostApi ); + } + return result; +} + + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaSkeletonHostApiRepresentation *skeletonHostApi = (PaSkeletonHostApiRepresentation*)hostApi; + + /* + IMPLEMENT ME: + - clean up any resources not handled by the allocation group + */ + + if( skeletonHostApi->allocations ) + { + PaUtil_FreeAllAllocations( skeletonHostApi->allocations ); + PaUtil_DestroyAllocationGroup( skeletonHostApi->allocations ); + } + + PaUtil_FreeMemory( skeletonHostApi ); +} + + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( inputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if( inputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( outputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support outputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if( outputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + } + else + { + outputChannelCount = 0; + } + + /* + IMPLEMENT ME: + + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported if necessary + + - check that the device supports sampleRate + + Because the buffer adapter handles conversion between all standard + sample formats, the following checks are only required if paCustomFormat + is implemented, or under some other unusual conditions. + + - check that input device can support inputSampleFormat, or that + we have the capability to convert from inputSampleFormat to + a native format + + - check that output device can support outputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + */ + + + /* suppress unused variable warnings */ + (void) sampleRate; + + return paFormatIsSupported; +} + +/* PaSkeletonStream - a stream data structure specifically for this implementation */ + +typedef struct PaSkeletonStream +{ /* IMPLEMENT ME: rename this */ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + /* IMPLEMENT ME: + - implementation specific data goes here + */ + unsigned long framesPerHostCallback; /* just an example */ +} +PaSkeletonStream; + +/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */ + +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + PaSkeletonHostApiRepresentation *skeletonHostApi = (PaSkeletonHostApiRepresentation*)hostApi; + PaSkeletonStream *stream = 0; + unsigned long framesPerHostBuffer = framesPerBuffer; /* these may not be equivalent for all implementations */ + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat; + + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if( inputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + + /* IMPLEMENT ME - establish which host formats are available */ + hostInputSampleFormat = + PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, inputSampleFormat ); + } + else + { + inputChannelCount = 0; + inputSampleFormat = hostInputSampleFormat = paInt16; /* Surpress 'uninitialised var' warnings. */ + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support inputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if( outputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + + /* IMPLEMENT ME - establish which host formats are available */ + hostOutputSampleFormat = + PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, outputSampleFormat ); + } + else + { + outputChannelCount = 0; + outputSampleFormat = hostOutputSampleFormat = paInt16; /* Surpress 'uninitialized var' warnings. */ + } + + /* + IMPLEMENT ME: + + ( the following two checks are taken care of by PaUtil_InitializeBufferProcessor() FIXME - checks needed? ) + + - check that input device can support inputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - check that output device can support outputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported + + - check that the device supports sampleRate + + - alter sampleRate to a close allowable rate if possible / necessary + + - validate suggestedInputLatency and suggestedOutputLatency parameters, + use default values where necessary + */ + + + + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform specific flag */ + + + stream = (PaSkeletonStream*)PaUtil_AllocateMemory( sizeof(PaSkeletonStream) ); + if( !stream ) + { + result = paInsufficientMemory; + goto error; + } + + if( streamCallback ) + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &skeletonHostApi->callbackStreamInterface, streamCallback, userData ); + } + else + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &skeletonHostApi->blockingStreamInterface, streamCallback, userData ); + } + + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + + /* we assume a fixed host buffer size in this example, but the buffer processor + can also support bounded and unknown host buffer sizes by passing + paUtilBoundedHostBufferSize or paUtilUnknownHostBufferSize instead of + paUtilFixedHostBufferSize below. */ + + result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + inputChannelCount, inputSampleFormat, hostInputSampleFormat, + outputChannelCount, outputSampleFormat, hostOutputSampleFormat, + sampleRate, streamFlags, framesPerBuffer, + framesPerHostBuffer, paUtilFixedHostBufferSize, + streamCallback, userData ); + if( result != paNoError ) + goto error; + + + /* + IMPLEMENT ME: initialise the following fields with estimated or actual + values. + */ + stream->streamRepresentation.streamInfo.inputLatency = + (PaTime)PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor) / sampleRate; /* inputLatency is specified in _seconds_ */ + stream->streamRepresentation.streamInfo.outputLatency = + (PaTime)PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor) / sampleRate; /* outputLatency is specified in _seconds_ */ + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + + /* + IMPLEMENT ME: + - additional stream setup + opening + */ + + stream->framesPerHostCallback = framesPerHostBuffer; + + *s = (PaStream*)stream; + + return result; + +error: + if( stream ) + PaUtil_FreeMemory( stream ); + + return result; +} + +/* + ExampleHostProcessingLoop() illustrates the kind of processing which may + occur in a host implementation. + +*/ +static void ExampleHostProcessingLoop( void *inputBuffer, void *outputBuffer, void *userData ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)userData; + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /* IMPLEMENT ME */ + int callbackResult; + unsigned long framesProcessed; + + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + /* + IMPLEMENT ME: + - generate timing information + - handle buffer slips + */ + + /* + If you need to byte swap or shift inputBuffer to convert it into a + portaudio format, do it here. + */ + + + + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, 0 /* IMPLEMENT ME: pass underflow/overflow flags when necessary */ ); + + /* + depending on whether the host buffers are interleaved, non-interleaved + or a mixture, you will want to call PaUtil_SetInterleaved*Channels(), + PaUtil_SetNonInterleaved*Channel() or PaUtil_Set*Channel() here. + */ + + PaUtil_SetInputFrameCount( &stream->bufferProcessor, 0 /* default to host buffer size */ ); + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, + 0, /* first channel of inputBuffer is channel 0 */ + inputBuffer, + 0 ); /* 0 - use inputChannelCount passed to init buffer processor */ + + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, 0 /* default to host buffer size */ ); + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, + 0, /* first channel of outputBuffer is channel 0 */ + outputBuffer, + 0 ); /* 0 - use outputChannelCount passed to init buffer processor */ + + /* you must pass a valid value of callback result to PaUtil_EndBufferProcessing() + in general you would pass paContinue for normal operation, and + paComplete to drain the buffer processor's internal output buffer. + You can check whether the buffer processor's output buffer is empty + using PaUtil_IsBufferProcessorOuputEmpty( bufferProcessor ) + */ + callbackResult = paContinue; + framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult ); + + + /* + If you need to byte swap or shift outputBuffer to convert it to + host format, do it here. + */ + + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + + + if( callbackResult == paContinue ) + { + /* nothing special to do */ + } + else if( callbackResult == paAbort ) + { + /* IMPLEMENT ME - finish playback immediately */ + + /* once finished, call the finished callback */ + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } + else + { + /* User callback has asked us to stop with paComplete or other non-zero value */ + + /* IMPLEMENT ME - finish playback once currently queued audio has completed */ + + /* once finished, call the finished callback */ + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } +} + + +/* + When CloseStream() is called, the multi-api layer ensures that + the stream has already been stopped or aborted. +*/ +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* + IMPLEMENT ME: + - additional stream closing + cleanup + */ + + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + PaUtil_FreeMemory( stream ); + + return result; +} + + +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + + /* IMPLEMENT ME, see portaudio.h for required behavior */ + + /* suppress unused function warning. the code in ExampleHostProcessingLoop or + something similar should be implemented to feed samples to and from the + host after StartStream() is called. + */ + (void) ExampleHostProcessingLoop; + + return result; +} + + +static PaError StopStream( PaStream *s ) +{ + PaError result = paNoError; + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior */ + + return result; +} + + +static PaError AbortStream( PaStream *s ) +{ + PaError result = paNoError; + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior */ + + return result; +} + + +static PaError IsStreamStopped( PaStream *s ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior */ + + return 0; +} + + +static PaError IsStreamActive( PaStream *s ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior */ + + return 0; +} + + +static PaTime GetStreamTime( PaStream *s ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return 0; +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + + +/* + As separate stream interfaces are used for blocking and callback + streams, the following functions can be guaranteed to only be called + for blocking streams. +*/ + +static PaError ReadStream( PaStream* s, + void *buffer, + unsigned long frames ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) buffer; + (void) frames; + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return paNoError; +} + + +static PaError WriteStream( PaStream* s, + const void *buffer, + unsigned long frames ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) buffer; + (void) frames; + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return paNoError; +} + + +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return 0; +} + + +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaSkeletonStream *stream = (PaSkeletonStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + + return 0; +} + + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h new file mode 100644 index 0000000000..385e9007e3 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h @@ -0,0 +1,94 @@ +// +// AudioSessionTypes.h -- Copyright Microsoft Corporation, All Rights Reserved. +// +// Description: Type definitions used by the audio session manager RPC/COM interfaces +// +#pragma once + +#ifndef __AUDIOSESSIONTYPES__ +#define __AUDIOSESSIONTYPES__ + +#if defined(__midl) +#define MIDL_SIZE_IS(x) [size_is(x)] +#define MIDL_STRING [string] +#define MIDL_ANYSIZE_ARRAY +#else // !defined(__midl) +#define MIDL_SIZE_IS(x) +#define MIDL_STRING +#define MIDL_ANYSIZE_ARRAY ANYSIZE_ARRAY +#endif // defined(__midl) + +//------------------------------------------------------------------------- +// Description: AudioClient share mode +// +// AUDCLNT_SHAREMODE_SHARED - The device will be opened in shared mode and use the +// WAS format. +// AUDCLNT_SHAREMODE_EXCLUSIVE - The device will be opened in exclusive mode and use the +// application specified format. +// +typedef enum _AUDCLNT_SHAREMODE +{ + AUDCLNT_SHAREMODE_SHARED, + AUDCLNT_SHAREMODE_EXCLUSIVE +} AUDCLNT_SHAREMODE; + +//------------------------------------------------------------------------- +// Description: AudioClient stream flags +// +// Can be a combination of AUDCLNT_STREAMFLAGS and AUDCLNT_SYSFXFLAGS: +// +// AUDCLNT_STREAMFLAGS (this group of flags uses the high word, w/exception of high-bit which is reserved, 0x7FFF0000): +// +// AUDCLNT_STREAMFLAGS_CROSSPROCESS - Audio policy control for this stream will be shared with +// with other process sessions that use the same audio session +// GUID. +// AUDCLNT_STREAMFLAGS_LOOPBACK - Initializes a renderer endpoint for a loopback audio application. +// In this mode, a capture stream will be opened on the specified +// renderer endpoint. Shared mode and a renderer endpoint is required. +// Otherwise the IAudioClient::Initialize call will fail. If the +// initialize is successful, a capture stream will be available +// from the IAudioClient object. +// +// AUDCLNT_STREAMFLAGS_EVENTCALLBACK - An exclusive mode client will supply an event handle that will be +// signaled when an IRP completes (or a waveRT buffer completes) telling +// it to fill the next buffer +// +// AUDCLNT_STREAMFLAGS_NOPERSIST - Session state will not be persisted +// +// AUDCLNT_SYSFXFLAGS (these flags use low word 0x0000FFFF): +// +// none defined currently +// +#define AUDCLNT_STREAMFLAGS_CROSSPROCESS 0x00010000 +#define AUDCLNT_STREAMFLAGS_LOOPBACK 0x00020000 +#define AUDCLNT_STREAMFLAGS_EVENTCALLBACK 0x00040000 +#define AUDCLNT_STREAMFLAGS_NOPERSIST 0x00080000 + +//------------------------------------------------------------------------- +// Description: Device share mode - sharing mode for the audio device. +// +// DeviceShared - The device can be shared with other processes. +// DeviceExclusive - The device will only be used by this process. +// +typedef enum _DeviceShareMode +{ + DeviceShared, + DeviceExclusive +} DeviceShareMode; + + +//------------------------------------------------------------------------- +// Description: AudioSession State. +// +// AudioSessionStateInactive - The session has no active audio streams. +// AudioSessionStateActive - The session has active audio streams. +// AudioSessionStateExpired - The session is dormant. +typedef enum _AudioSessionState +{ + AudioSessionStateInactive = 0, + AudioSessionStateActive = 1, + AudioSessionStateExpired = 2 +} AudioSessionState; + +#endif + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h new file mode 100644 index 0000000000..abfd661e67 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h @@ -0,0 +1,186 @@ + +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + devpkey.h + +Abstract: + + Defines property keys for the Plug and Play Device Property API. + +Author: + + Jim Cavalaris (jamesca) 10-14-2003 + +Environment: + + User-mode only. + +Revision History: + + 14-October-2003 jamesca + + Creation and initial implementation. + + 20-June-2006 dougb + + Copied Jim's version replaced "DEFINE_DEVPROPKEY(DEVPKEY_" with "DEFINE_PROPERTYKEY(PKEY_" + +--*/ + +//#include + +// +// _NAME +// + +DEFINE_PROPERTYKEY(PKEY_NAME, 0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac, 10); // DEVPROP_TYPE_STRING + +// +// Device properties +// These PKEYs correspond to the old setupapi SPDRP_XXX properties +// +DEFINE_PROPERTYKEY(PKEY_Device_DeviceDesc, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 2); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_HardwareIds, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 3); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_CompatibleIds, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 4); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_Service, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 6); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_Class, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 9); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_ClassGuid, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 10); // DEVPROP_TYPE_GUID +DEFINE_PROPERTYKEY(PKEY_Device_Driver, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 11); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_ConfigFlags, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 12); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_Manufacturer, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 13); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_FriendlyName, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 14); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_LocationInfo, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 15); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_PDOName, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 16); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_Capabilities, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 17); // DEVPROP_TYPE_UNINT32 +DEFINE_PROPERTYKEY(PKEY_Device_UINumber, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 18); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_UpperFilters, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 19); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_LowerFilters, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 20); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_BusTypeGuid, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 21); // DEVPROP_TYPE_GUID +DEFINE_PROPERTYKEY(PKEY_Device_LegacyBusType, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 22); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_BusNumber, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 23); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_EnumeratorName, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 24); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_Security, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 25); // DEVPROP_TYPE_SECURITY_DESCRIPTOR +DEFINE_PROPERTYKEY(PKEY_Device_SecuritySDS, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 26); // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DevType, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 27); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_Exclusive, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 28); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_Characteristics, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 29); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_Address, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 30); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_UINumberDescFormat, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 31); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_PowerData, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 32); // DEVPROP_TYPE_BINARY +DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicy, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 33); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyDefault, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 34); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyOverride, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 35); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_InstallState, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 36); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_LocationPaths, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 37); // DEVPROP_TYPE_STRING_LIST + +// +// Device properties +// These PKEYs correspond to a device's status and problem code +// +DEFINE_PROPERTYKEY(PKEY_Device_DevNodeStatus, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 2); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_ProblemCode, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 3); // DEVPROP_TYPE_UINT32 + +// +// Device properties +// These PKEYs correspond to device relations +// +DEFINE_PROPERTYKEY(PKEY_Device_EjectionRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 4); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_RemovalRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 5); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_PowerRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 6); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_BusRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 7); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_Parent, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 8); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_Children, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 9); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_Siblings, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 10); // DEVPROP_TYPE_STRING_LIST + +// +// Other Device properties +// +DEFINE_PROPERTYKEY(PKEY_Device_Reported, 0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 2); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_Device_Legacy, 0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 3); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_Device_InstanceId, 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 256); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Numa_Proximity_Domain, 0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 1); // DEVPROP_TYPE_UINT32 + +// +// Device driver properties +// +DEFINE_PROPERTYKEY(PKEY_Device_DriverDate, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 2); // DEVPROP_TYPE_FILETIME +DEFINE_PROPERTYKEY(PKEY_Device_DriverVersion, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 3); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverDesc, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 4); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverInfPath, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 5); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSection, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 6); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSectionExt, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 7); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_MatchingDeviceId, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 8); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverProvider, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 9); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverPropPageProvider, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 10); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverCoInstallers, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 11); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerTags, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 12); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerExceptions, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 13); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_Device_DriverRank, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 14); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_DriverLogoLevel, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 15); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_Device_NoConnectSound, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 17); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_Device_GenericDriverInstalled, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 18); // DEVPROP_TYPE_BOOLEAN + + +// +// Device properties that were set by the driver package that was installed +// on the device. +// +DEFINE_PROPERTYKEY(PKEY_DrvPkg_Model, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 2); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DrvPkg_VendorWebSite, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 3); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DrvPkg_DetailedDescription, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 4); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DrvPkg_DocumentationLink, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 5); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DrvPkg_Icon, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 6); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_DrvPkg_BrandingIcon, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 7); // DEVPROP_TYPE_STRING_LIST + +// +// Device setup class properties +// These PKEYs correspond to the old setupapi SPCRP_XXX properties +// +DEFINE_PROPERTYKEY(PKEY_DeviceClass_UpperFilters, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 19); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_DeviceClass_LowerFilters, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 20); // DEVPROP_TYPE_STRING_LIST +DEFINE_PROPERTYKEY(PKEY_DeviceClass_Security, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 25); // DEVPROP_TYPE_SECURITY_DESCRIPTOR +DEFINE_PROPERTYKEY(PKEY_DeviceClass_SecuritySDS, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 26); // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceClass_DevType, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 27); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_DeviceClass_Exclusive, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 28); // DEVPROP_TYPE_UINT32 +DEFINE_PROPERTYKEY(PKEY_DeviceClass_Characteristics, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 29); // DEVPROP_TYPE_UINT32 + +// +// Device setup class properties +// These PKEYs correspond to registry values under the device class GUID key +// +DEFINE_PROPERTYKEY(PKEY_DeviceClass_Name, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 2); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassName, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 3); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceClass_Icon, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 4); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassInstaller, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 5); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceClass_PropPageProvider, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 6); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoInstallClass, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 7); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoDisplayClass, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 8); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_DeviceClass_SilentInstall, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 9); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoUseClass, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 10); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_DeviceClass_DefaultService, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 11); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceClass_IconPath, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 12); // DEVPROP_TYPE_STRING_LIST + +// +// Other Device setup class properties +// +DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassCoInstallers, 0x713d1703, 0xa2e2, 0x49f5, 0x92, 0x14, 0x56, 0x47, 0x2e, 0xf3, 0xda, 0x5c, 2); // DEVPROP_TYPE_STRING_LIST + +// +// Device interface properties +// +DEFINE_PROPERTYKEY(PKEY_DeviceInterface_FriendlyName, 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 2); // DEVPROP_TYPE_STRING +DEFINE_PROPERTYKEY(PKEY_DeviceInterface_Enabled, 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 3); // DEVPROP_TYPE_BOOLEAN +DEFINE_PROPERTYKEY(PKEY_DeviceInterface_ClassGuid, 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 4); // DEVPROP_TYPE_GUID + +// +// Device interface class properties +// +DEFINE_PROPERTYKEY(PKEY_DeviceInterfaceClass_DefaultInterface, 0x14c83a99, 0x0b3f, 0x44b7, 0xbe, 0x4c, 0xa1, 0x78, 0xd3, 0x99, 0x05, 0x64, 2); // DEVPROP_TYPE_STRING + + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/audioclient.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/audioclient.h new file mode 100644 index 0000000000..bf77baf029 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/audioclient.h @@ -0,0 +1,1177 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for audioclient.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __audioclient_h__ +#define __audioclient_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IAudioClient_FWD_DEFINED__ +#define __IAudioClient_FWD_DEFINED__ +typedef interface IAudioClient IAudioClient; +#endif /* __IAudioClient_FWD_DEFINED__ */ + + +#ifndef __IAudioRenderClient_FWD_DEFINED__ +#define __IAudioRenderClient_FWD_DEFINED__ +typedef interface IAudioRenderClient IAudioRenderClient; +#endif /* __IAudioRenderClient_FWD_DEFINED__ */ + + +#ifndef __IAudioCaptureClient_FWD_DEFINED__ +#define __IAudioCaptureClient_FWD_DEFINED__ +typedef interface IAudioCaptureClient IAudioCaptureClient; +#endif /* __IAudioCaptureClient_FWD_DEFINED__ */ + + +#ifndef __IAudioClock_FWD_DEFINED__ +#define __IAudioClock_FWD_DEFINED__ +typedef interface IAudioClock IAudioClock; +#endif /* __IAudioClock_FWD_DEFINED__ */ + + +#ifndef __ISimpleAudioVolume_FWD_DEFINED__ +#define __ISimpleAudioVolume_FWD_DEFINED__ +typedef interface ISimpleAudioVolume ISimpleAudioVolume; +#endif /* __ISimpleAudioVolume_FWD_DEFINED__ */ + + +#ifndef __IAudioStreamVolume_FWD_DEFINED__ +#define __IAudioStreamVolume_FWD_DEFINED__ +typedef interface IAudioStreamVolume IAudioStreamVolume; +#endif /* __IAudioStreamVolume_FWD_DEFINED__ */ + + +#ifndef __IChannelAudioVolume_FWD_DEFINED__ +#define __IChannelAudioVolume_FWD_DEFINED__ +typedef interface IChannelAudioVolume IChannelAudioVolume; +#endif /* __IChannelAudioVolume_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "wtypes.h" +#include "unknwn.h" +#include "AudioSessionTypes.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_audioclient_0000_0000 */ +/* [local] */ + +#if 0 +typedef /* [hidden][restricted] */ struct WAVEFORMATEX + { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wBitsPerSample; + WORD cbSize; + } WAVEFORMATEX; + +#else +#include +#endif +#if 0 +typedef /* [hidden][restricted] */ LONGLONG REFERENCE_TIME; + +#else +#define _IKsControl_ +#include +#include +#endif + +enum _AUDCLNT_BUFFERFLAGS + { AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY = 0x1, + AUDCLNT_BUFFERFLAGS_SILENT = 0x2, + AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4 + } ; + + +extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0000_v0_0_s_ifspec; + +#ifndef __IAudioClient_INTERFACE_DEFINED__ +#define __IAudioClient_INTERFACE_DEFINED__ + +/* interface IAudioClient */ +/* [local][unique][uuid][object] */ + + +EXTERN_C const IID IID_IAudioClient; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1CB9AD4C-DBFA-4c32-B178-C2F568A703B2") + IAudioClient : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Initialize( + /* [in] */ + __in AUDCLNT_SHAREMODE ShareMode, + /* [in] */ + __in DWORD StreamFlags, + /* [in] */ + __in REFERENCE_TIME hnsBufferDuration, + /* [in] */ + __in REFERENCE_TIME hnsPeriodicity, + /* [in] */ + __in const WAVEFORMATEX *pFormat, + /* [in] */ + __in_opt LPCGUID AudioSessionGuid) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetBufferSize( + /* [out] */ + __out UINT32 *pNumBufferFrames) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetStreamLatency( + /* [out] */ + __out REFERENCE_TIME *phnsLatency) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCurrentPadding( + /* [out] */ + __out UINT32 *pNumPaddingFrames) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsFormatSupported( + /* [in] */ + __in AUDCLNT_SHAREMODE ShareMode, + /* [in] */ + __in const WAVEFORMATEX *pFormat, + /* [unique][out] */ + __out_opt WAVEFORMATEX **ppClosestMatch) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetMixFormat( + /* [out] */ + __out WAVEFORMATEX **ppDeviceFormat) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDevicePeriod( + /* [out] */ + __out_opt REFERENCE_TIME *phnsDefaultDevicePeriod, + /* [out] */ + __out_opt REFERENCE_TIME *phnsMinimumDevicePeriod) = 0; + + virtual HRESULT STDMETHODCALLTYPE Start( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Stop( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetEventHandle( + /* [in] */ HANDLE eventHandle) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetService( + /* [in] */ + __in REFIID riid, + /* [iid_is][out] */ + __out void **ppv) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioClientVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioClient * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioClient * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioClient * This); + + HRESULT ( STDMETHODCALLTYPE *Initialize )( + IAudioClient * This, + /* [in] */ + __in AUDCLNT_SHAREMODE ShareMode, + /* [in] */ + __in DWORD StreamFlags, + /* [in] */ + __in REFERENCE_TIME hnsBufferDuration, + /* [in] */ + __in REFERENCE_TIME hnsPeriodicity, + /* [in] */ + __in const WAVEFORMATEX *pFormat, + /* [in] */ + __in_opt LPCGUID AudioSessionGuid); + + HRESULT ( STDMETHODCALLTYPE *GetBufferSize )( + IAudioClient * This, + /* [out] */ + __out UINT32 *pNumBufferFrames); + + HRESULT ( STDMETHODCALLTYPE *GetStreamLatency )( + IAudioClient * This, + /* [out] */ + __out REFERENCE_TIME *phnsLatency); + + HRESULT ( STDMETHODCALLTYPE *GetCurrentPadding )( + IAudioClient * This, + /* [out] */ + __out UINT32 *pNumPaddingFrames); + + HRESULT ( STDMETHODCALLTYPE *IsFormatSupported )( + IAudioClient * This, + /* [in] */ + __in AUDCLNT_SHAREMODE ShareMode, + /* [in] */ + __in const WAVEFORMATEX *pFormat, + /* [unique][out] */ + __out_opt WAVEFORMATEX **ppClosestMatch); + + HRESULT ( STDMETHODCALLTYPE *GetMixFormat )( + IAudioClient * This, + /* [out] */ + __out WAVEFORMATEX **ppDeviceFormat); + + HRESULT ( STDMETHODCALLTYPE *GetDevicePeriod )( + IAudioClient * This, + /* [out] */ + __out_opt REFERENCE_TIME *phnsDefaultDevicePeriod, + /* [out] */ + __out_opt REFERENCE_TIME *phnsMinimumDevicePeriod); + + HRESULT ( STDMETHODCALLTYPE *Start )( + IAudioClient * This); + + HRESULT ( STDMETHODCALLTYPE *Stop )( + IAudioClient * This); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + IAudioClient * This); + + HRESULT ( STDMETHODCALLTYPE *SetEventHandle )( + IAudioClient * This, + /* [in] */ HANDLE eventHandle); + + HRESULT ( STDMETHODCALLTYPE *GetService )( + IAudioClient * This, + /* [in] */ + __in REFIID riid, + /* [iid_is][out] */ + __out void **ppv); + + END_INTERFACE + } IAudioClientVtbl; + + interface IAudioClient + { + CONST_VTBL struct IAudioClientVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioClient_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioClient_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioClient_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioClient_Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid) \ + ( (This)->lpVtbl -> Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid) ) + +#define IAudioClient_GetBufferSize(This,pNumBufferFrames) \ + ( (This)->lpVtbl -> GetBufferSize(This,pNumBufferFrames) ) + +#define IAudioClient_GetStreamLatency(This,phnsLatency) \ + ( (This)->lpVtbl -> GetStreamLatency(This,phnsLatency) ) + +#define IAudioClient_GetCurrentPadding(This,pNumPaddingFrames) \ + ( (This)->lpVtbl -> GetCurrentPadding(This,pNumPaddingFrames) ) + +#define IAudioClient_IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch) \ + ( (This)->lpVtbl -> IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch) ) + +#define IAudioClient_GetMixFormat(This,ppDeviceFormat) \ + ( (This)->lpVtbl -> GetMixFormat(This,ppDeviceFormat) ) + +#define IAudioClient_GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod) \ + ( (This)->lpVtbl -> GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod) ) + +#define IAudioClient_Start(This) \ + ( (This)->lpVtbl -> Start(This) ) + +#define IAudioClient_Stop(This) \ + ( (This)->lpVtbl -> Stop(This) ) + +#define IAudioClient_Reset(This) \ + ( (This)->lpVtbl -> Reset(This) ) + +#define IAudioClient_SetEventHandle(This,eventHandle) \ + ( (This)->lpVtbl -> SetEventHandle(This,eventHandle) ) + +#define IAudioClient_GetService(This,riid,ppv) \ + ( (This)->lpVtbl -> GetService(This,riid,ppv) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioClient_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioRenderClient_INTERFACE_DEFINED__ +#define __IAudioRenderClient_INTERFACE_DEFINED__ + +/* interface IAudioRenderClient */ +/* [local][unique][helpstring][uuid][object] */ + + +EXTERN_C const IID IID_IAudioRenderClient; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("F294ACFC-3146-4483-A7BF-ADDCA7C260E2") + IAudioRenderClient : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetBuffer( + /* [in] */ + __in UINT32 NumFramesRequested, + /* [out] */ + __out BYTE **ppData) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer( + /* [in] */ + __in UINT32 NumFramesWritten, + /* [in] */ + __in DWORD dwFlags) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioRenderClientVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioRenderClient * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioRenderClient * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioRenderClient * This); + + HRESULT ( STDMETHODCALLTYPE *GetBuffer )( + IAudioRenderClient * This, + /* [in] */ + __in UINT32 NumFramesRequested, + /* [out] */ + __out BYTE **ppData); + + HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( + IAudioRenderClient * This, + /* [in] */ + __in UINT32 NumFramesWritten, + /* [in] */ + __in DWORD dwFlags); + + END_INTERFACE + } IAudioRenderClientVtbl; + + interface IAudioRenderClient + { + CONST_VTBL struct IAudioRenderClientVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioRenderClient_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioRenderClient_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioRenderClient_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioRenderClient_GetBuffer(This,NumFramesRequested,ppData) \ + ( (This)->lpVtbl -> GetBuffer(This,NumFramesRequested,ppData) ) + +#define IAudioRenderClient_ReleaseBuffer(This,NumFramesWritten,dwFlags) \ + ( (This)->lpVtbl -> ReleaseBuffer(This,NumFramesWritten,dwFlags) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioRenderClient_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioCaptureClient_INTERFACE_DEFINED__ +#define __IAudioCaptureClient_INTERFACE_DEFINED__ + +/* interface IAudioCaptureClient */ +/* [local][unique][helpstring][uuid][object] */ + + +EXTERN_C const IID IID_IAudioCaptureClient; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C8ADBD64-E71E-48a0-A4DE-185C395CD317") + IAudioCaptureClient : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetBuffer( + /* [out] */ + __out BYTE **ppData, + /* [out] */ + __out UINT32 *pNumFramesToRead, + /* [out] */ + __out DWORD *pdwFlags, + /* [unique][out] */ + __out_opt UINT64 *pu64DevicePosition, + /* [unique][out] */ + __out_opt UINT64 *pu64QPCPosition) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer( + /* [in] */ + __in UINT32 NumFramesRead) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetNextPacketSize( + /* [out] */ + __out UINT32 *pNumFramesInNextPacket) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioCaptureClientVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioCaptureClient * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioCaptureClient * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioCaptureClient * This); + + HRESULT ( STDMETHODCALLTYPE *GetBuffer )( + IAudioCaptureClient * This, + /* [out] */ + __out BYTE **ppData, + /* [out] */ + __out UINT32 *pNumFramesToRead, + /* [out] */ + __out DWORD *pdwFlags, + /* [unique][out] */ + __out_opt UINT64 *pu64DevicePosition, + /* [unique][out] */ + __out_opt UINT64 *pu64QPCPosition); + + HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( + IAudioCaptureClient * This, + /* [in] */ + __in UINT32 NumFramesRead); + + HRESULT ( STDMETHODCALLTYPE *GetNextPacketSize )( + IAudioCaptureClient * This, + /* [out] */ + __out UINT32 *pNumFramesInNextPacket); + + END_INTERFACE + } IAudioCaptureClientVtbl; + + interface IAudioCaptureClient + { + CONST_VTBL struct IAudioCaptureClientVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioCaptureClient_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioCaptureClient_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioCaptureClient_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioCaptureClient_GetBuffer(This,ppData,pNumFramesToRead,pdwFlags,pu64DevicePosition,pu64QPCPosition) \ + ( (This)->lpVtbl -> GetBuffer(This,ppData,pNumFramesToRead,pdwFlags,pu64DevicePosition,pu64QPCPosition) ) + +#define IAudioCaptureClient_ReleaseBuffer(This,NumFramesRead) \ + ( (This)->lpVtbl -> ReleaseBuffer(This,NumFramesRead) ) + +#define IAudioCaptureClient_GetNextPacketSize(This,pNumFramesInNextPacket) \ + ( (This)->lpVtbl -> GetNextPacketSize(This,pNumFramesInNextPacket) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioCaptureClient_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_audioclient_0000_0003 */ +/* [local] */ + +#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ 0x00000001 + + +extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0003_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0003_v0_0_s_ifspec; + +#ifndef __IAudioClock_INTERFACE_DEFINED__ +#define __IAudioClock_INTERFACE_DEFINED__ + +/* interface IAudioClock */ +/* [local][unique][uuid][object] */ + + +EXTERN_C const IID IID_IAudioClock; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("CD63314F-3FBA-4a1b-812C-EF96358728E7") + IAudioClock : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetFrequency( + /* [out] */ + __out UINT64 *pu64Frequency) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPosition( + /* [out] */ + __out UINT64 *pu64Position, + /* [unique][out] */ + __out_opt UINT64 *pu64QPCPosition) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCharacteristics( + /* [out] */ + __out DWORD *pdwCharacteristics) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioClockVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioClock * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioClock * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioClock * This); + + HRESULT ( STDMETHODCALLTYPE *GetFrequency )( + IAudioClock * This, + /* [out] */ + __out UINT64 *pu64Frequency); + + HRESULT ( STDMETHODCALLTYPE *GetPosition )( + IAudioClock * This, + /* [out] */ + __out UINT64 *pu64Position, + /* [unique][out] */ + __out_opt UINT64 *pu64QPCPosition); + + HRESULT ( STDMETHODCALLTYPE *GetCharacteristics )( + IAudioClock * This, + /* [out] */ + __out DWORD *pdwCharacteristics); + + END_INTERFACE + } IAudioClockVtbl; + + interface IAudioClock + { + CONST_VTBL struct IAudioClockVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioClock_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioClock_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioClock_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioClock_GetFrequency(This,pu64Frequency) \ + ( (This)->lpVtbl -> GetFrequency(This,pu64Frequency) ) + +#define IAudioClock_GetPosition(This,pu64Position,pu64QPCPosition) \ + ( (This)->lpVtbl -> GetPosition(This,pu64Position,pu64QPCPosition) ) + +#define IAudioClock_GetCharacteristics(This,pdwCharacteristics) \ + ( (This)->lpVtbl -> GetCharacteristics(This,pdwCharacteristics) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioClock_INTERFACE_DEFINED__ */ + + +#ifndef __ISimpleAudioVolume_INTERFACE_DEFINED__ +#define __ISimpleAudioVolume_INTERFACE_DEFINED__ + +/* interface ISimpleAudioVolume */ +/* [local][unique][uuid][object] */ + + +EXTERN_C const IID IID_ISimpleAudioVolume; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("87CE5498-68D6-44E5-9215-6DA47EF883D8") + ISimpleAudioVolume : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SetMasterVolume( + /* [in] */ + __in float fLevel, + /* [unique][in] */ LPCGUID EventContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetMasterVolume( + /* [out] */ + __out float *pfLevel) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetMute( + /* [in] */ + __in const BOOL bMute, + /* [unique][in] */ LPCGUID EventContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetMute( + /* [out] */ + __out BOOL *pbMute) = 0; + + }; + +#else /* C style interface */ + + typedef struct ISimpleAudioVolumeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ISimpleAudioVolume * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ISimpleAudioVolume * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ISimpleAudioVolume * This); + + HRESULT ( STDMETHODCALLTYPE *SetMasterVolume )( + ISimpleAudioVolume * This, + /* [in] */ + __in float fLevel, + /* [unique][in] */ LPCGUID EventContext); + + HRESULT ( STDMETHODCALLTYPE *GetMasterVolume )( + ISimpleAudioVolume * This, + /* [out] */ + __out float *pfLevel); + + HRESULT ( STDMETHODCALLTYPE *SetMute )( + ISimpleAudioVolume * This, + /* [in] */ + __in const BOOL bMute, + /* [unique][in] */ LPCGUID EventContext); + + HRESULT ( STDMETHODCALLTYPE *GetMute )( + ISimpleAudioVolume * This, + /* [out] */ + __out BOOL *pbMute); + + END_INTERFACE + } ISimpleAudioVolumeVtbl; + + interface ISimpleAudioVolume + { + CONST_VTBL struct ISimpleAudioVolumeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ISimpleAudioVolume_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ISimpleAudioVolume_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ISimpleAudioVolume_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ISimpleAudioVolume_SetMasterVolume(This,fLevel,EventContext) \ + ( (This)->lpVtbl -> SetMasterVolume(This,fLevel,EventContext) ) + +#define ISimpleAudioVolume_GetMasterVolume(This,pfLevel) \ + ( (This)->lpVtbl -> GetMasterVolume(This,pfLevel) ) + +#define ISimpleAudioVolume_SetMute(This,bMute,EventContext) \ + ( (This)->lpVtbl -> SetMute(This,bMute,EventContext) ) + +#define ISimpleAudioVolume_GetMute(This,pbMute) \ + ( (This)->lpVtbl -> GetMute(This,pbMute) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ISimpleAudioVolume_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioStreamVolume_INTERFACE_DEFINED__ +#define __IAudioStreamVolume_INTERFACE_DEFINED__ + +/* interface IAudioStreamVolume */ +/* [local][unique][uuid][object] */ + + +EXTERN_C const IID IID_IAudioStreamVolume; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("93014887-242D-4068-8A15-CF5E93B90FE3") + IAudioStreamVolume : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetChannelCount( + /* [out] */ + __out UINT32 *pdwCount) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetChannelVolume( + /* [in] */ + __in UINT32 dwIndex, + /* [in] */ + __in const float fLevel) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetChannelVolume( + /* [in] */ + __in UINT32 dwIndex, + /* [out] */ + __out float *pfLevel) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetAllVolumes( + /* [in] */ + __in UINT32 dwCount, + /* [size_is][in] */ + __in_ecount(dwCount) const float *pfVolumes) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAllVolumes( + /* [in] */ + __in UINT32 dwCount, + /* [size_is][out] */ + __out_ecount(dwCount) float *pfVolumes) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioStreamVolumeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioStreamVolume * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioStreamVolume * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioStreamVolume * This); + + HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IAudioStreamVolume * This, + /* [out] */ + __out UINT32 *pdwCount); + + HRESULT ( STDMETHODCALLTYPE *SetChannelVolume )( + IAudioStreamVolume * This, + /* [in] */ + __in UINT32 dwIndex, + /* [in] */ + __in const float fLevel); + + HRESULT ( STDMETHODCALLTYPE *GetChannelVolume )( + IAudioStreamVolume * This, + /* [in] */ + __in UINT32 dwIndex, + /* [out] */ + __out float *pfLevel); + + HRESULT ( STDMETHODCALLTYPE *SetAllVolumes )( + IAudioStreamVolume * This, + /* [in] */ + __in UINT32 dwCount, + /* [size_is][in] */ + __in_ecount(dwCount) const float *pfVolumes); + + HRESULT ( STDMETHODCALLTYPE *GetAllVolumes )( + IAudioStreamVolume * This, + /* [in] */ + __in UINT32 dwCount, + /* [size_is][out] */ + __out_ecount(dwCount) float *pfVolumes); + + END_INTERFACE + } IAudioStreamVolumeVtbl; + + interface IAudioStreamVolume + { + CONST_VTBL struct IAudioStreamVolumeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioStreamVolume_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioStreamVolume_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioStreamVolume_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioStreamVolume_GetChannelCount(This,pdwCount) \ + ( (This)->lpVtbl -> GetChannelCount(This,pdwCount) ) + +#define IAudioStreamVolume_SetChannelVolume(This,dwIndex,fLevel) \ + ( (This)->lpVtbl -> SetChannelVolume(This,dwIndex,fLevel) ) + +#define IAudioStreamVolume_GetChannelVolume(This,dwIndex,pfLevel) \ + ( (This)->lpVtbl -> GetChannelVolume(This,dwIndex,pfLevel) ) + +#define IAudioStreamVolume_SetAllVolumes(This,dwCount,pfVolumes) \ + ( (This)->lpVtbl -> SetAllVolumes(This,dwCount,pfVolumes) ) + +#define IAudioStreamVolume_GetAllVolumes(This,dwCount,pfVolumes) \ + ( (This)->lpVtbl -> GetAllVolumes(This,dwCount,pfVolumes) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioStreamVolume_INTERFACE_DEFINED__ */ + + +#ifndef __IChannelAudioVolume_INTERFACE_DEFINED__ +#define __IChannelAudioVolume_INTERFACE_DEFINED__ + +/* interface IChannelAudioVolume */ +/* [local][unique][uuid][object] */ + + +EXTERN_C const IID IID_IChannelAudioVolume; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1C158861-B533-4B30-B1CF-E853E51C59B8") + IChannelAudioVolume : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetChannelCount( + /* [out] */ + __out UINT32 *pdwCount) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetChannelVolume( + /* [in] */ + __in UINT32 dwIndex, + /* [in] */ + __in const float fLevel, + /* [unique][in] */ LPCGUID EventContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetChannelVolume( + /* [in] */ + __in UINT32 dwIndex, + /* [out] */ + __out float *pfLevel) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetAllVolumes( + /* [in] */ + __in UINT32 dwCount, + /* [size_is][in] */ + __in_ecount(dwCount) const float *pfVolumes, + /* [unique][in] */ LPCGUID EventContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAllVolumes( + /* [in] */ + __in UINT32 dwCount, + /* [size_is][out] */ + __out_ecount(dwCount) float *pfVolumes) = 0; + + }; + +#else /* C style interface */ + + typedef struct IChannelAudioVolumeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IChannelAudioVolume * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IChannelAudioVolume * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IChannelAudioVolume * This); + + HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IChannelAudioVolume * This, + /* [out] */ + __out UINT32 *pdwCount); + + HRESULT ( STDMETHODCALLTYPE *SetChannelVolume )( + IChannelAudioVolume * This, + /* [in] */ + __in UINT32 dwIndex, + /* [in] */ + __in const float fLevel, + /* [unique][in] */ LPCGUID EventContext); + + HRESULT ( STDMETHODCALLTYPE *GetChannelVolume )( + IChannelAudioVolume * This, + /* [in] */ + __in UINT32 dwIndex, + /* [out] */ + __out float *pfLevel); + + HRESULT ( STDMETHODCALLTYPE *SetAllVolumes )( + IChannelAudioVolume * This, + /* [in] */ + __in UINT32 dwCount, + /* [size_is][in] */ + __in_ecount(dwCount) const float *pfVolumes, + /* [unique][in] */ LPCGUID EventContext); + + HRESULT ( STDMETHODCALLTYPE *GetAllVolumes )( + IChannelAudioVolume * This, + /* [in] */ + __in UINT32 dwCount, + /* [size_is][out] */ + __out_ecount(dwCount) float *pfVolumes); + + END_INTERFACE + } IChannelAudioVolumeVtbl; + + interface IChannelAudioVolume + { + CONST_VTBL struct IChannelAudioVolumeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IChannelAudioVolume_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IChannelAudioVolume_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IChannelAudioVolume_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IChannelAudioVolume_GetChannelCount(This,pdwCount) \ + ( (This)->lpVtbl -> GetChannelCount(This,pdwCount) ) + +#define IChannelAudioVolume_SetChannelVolume(This,dwIndex,fLevel,EventContext) \ + ( (This)->lpVtbl -> SetChannelVolume(This,dwIndex,fLevel,EventContext) ) + +#define IChannelAudioVolume_GetChannelVolume(This,dwIndex,pfLevel) \ + ( (This)->lpVtbl -> GetChannelVolume(This,dwIndex,pfLevel) ) + +#define IChannelAudioVolume_SetAllVolumes(This,dwCount,pfVolumes,EventContext) \ + ( (This)->lpVtbl -> SetAllVolumes(This,dwCount,pfVolumes,EventContext) ) + +#define IChannelAudioVolume_GetAllVolumes(This,dwCount,pfVolumes) \ + ( (This)->lpVtbl -> GetAllVolumes(This,dwCount,pfVolumes) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IChannelAudioVolume_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_audioclient_0000_0007 */ +/* [local] */ + +#define FACILITY_AUDCLNT 0x889 +#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_AUDCLNT, n) +#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_AUDCLNT, n) +#define AUDCLNT_E_NOT_INITIALIZED AUDCLNT_ERR(0x001) +#define AUDCLNT_E_ALREADY_INITIALIZED AUDCLNT_ERR(0x002) +#define AUDCLNT_E_WRONG_ENDPOINT_TYPE AUDCLNT_ERR(0x003) +#define AUDCLNT_E_DEVICE_INVALIDATED AUDCLNT_ERR(0x004) +#define AUDCLNT_E_NOT_STOPPED AUDCLNT_ERR(0x005) +#define AUDCLNT_E_BUFFER_TOO_LARGE AUDCLNT_ERR(0x006) +#define AUDCLNT_E_OUT_OF_ORDER AUDCLNT_ERR(0x007) +#define AUDCLNT_E_UNSUPPORTED_FORMAT AUDCLNT_ERR(0x008) +#define AUDCLNT_E_INVALID_SIZE AUDCLNT_ERR(0x009) +#define AUDCLNT_E_DEVICE_IN_USE AUDCLNT_ERR(0x00a) +#define AUDCLNT_E_BUFFER_OPERATION_PENDING AUDCLNT_ERR(0x00b) +#define AUDCLNT_E_THREAD_NOT_REGISTERED AUDCLNT_ERR(0x00c) +#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x00e) +#define AUDCLNT_E_ENDPOINT_CREATE_FAILED AUDCLNT_ERR(0x00f) +#define AUDCLNT_E_SERVICE_NOT_RUNNING AUDCLNT_ERR(0x010) +#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED AUDCLNT_ERR(0x011) +#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY AUDCLNT_ERR(0x012) +#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x013) +#define AUDCLNT_E_EVENTHANDLE_NOT_SET AUDCLNT_ERR(0x014) +#define AUDCLNT_E_INCORRECT_BUFFER_SIZE AUDCLNT_ERR(0x015) +#define AUDCLNT_E_BUFFER_SIZE_ERROR AUDCLNT_ERR(0x016) +#define AUDCLNT_E_CPUUSAGE_EXCEEDED AUDCLNT_ERR(0x017) +#define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x001) +#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x002) +#define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x003) + + +extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0007_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0007_v0_0_s_ifspec; + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h new file mode 100644 index 0000000000..7a1f75c4ee --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h @@ -0,0 +1,3275 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for devicetopology.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __devicetopology_h__ +#define __devicetopology_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IKsControl_FWD_DEFINED__ +#define __IKsControl_FWD_DEFINED__ +typedef interface IKsControl IKsControl; +#endif /* __IKsControl_FWD_DEFINED__ */ + + +#ifndef __IPerChannelDbLevel_FWD_DEFINED__ +#define __IPerChannelDbLevel_FWD_DEFINED__ +typedef interface IPerChannelDbLevel IPerChannelDbLevel; +#endif /* __IPerChannelDbLevel_FWD_DEFINED__ */ + + +#ifndef __IAudioVolumeLevel_FWD_DEFINED__ +#define __IAudioVolumeLevel_FWD_DEFINED__ +typedef interface IAudioVolumeLevel IAudioVolumeLevel; +#endif /* __IAudioVolumeLevel_FWD_DEFINED__ */ + + +#ifndef __IAudioChannelConfig_FWD_DEFINED__ +#define __IAudioChannelConfig_FWD_DEFINED__ +typedef interface IAudioChannelConfig IAudioChannelConfig; +#endif /* __IAudioChannelConfig_FWD_DEFINED__ */ + + +#ifndef __IAudioLoudness_FWD_DEFINED__ +#define __IAudioLoudness_FWD_DEFINED__ +typedef interface IAudioLoudness IAudioLoudness; +#endif /* __IAudioLoudness_FWD_DEFINED__ */ + + +#ifndef __IAudioInputSelector_FWD_DEFINED__ +#define __IAudioInputSelector_FWD_DEFINED__ +typedef interface IAudioInputSelector IAudioInputSelector; +#endif /* __IAudioInputSelector_FWD_DEFINED__ */ + + +#ifndef __IAudioOutputSelector_FWD_DEFINED__ +#define __IAudioOutputSelector_FWD_DEFINED__ +typedef interface IAudioOutputSelector IAudioOutputSelector; +#endif /* __IAudioOutputSelector_FWD_DEFINED__ */ + + +#ifndef __IAudioMute_FWD_DEFINED__ +#define __IAudioMute_FWD_DEFINED__ +typedef interface IAudioMute IAudioMute; +#endif /* __IAudioMute_FWD_DEFINED__ */ + + +#ifndef __IAudioBass_FWD_DEFINED__ +#define __IAudioBass_FWD_DEFINED__ +typedef interface IAudioBass IAudioBass; +#endif /* __IAudioBass_FWD_DEFINED__ */ + + +#ifndef __IAudioMidrange_FWD_DEFINED__ +#define __IAudioMidrange_FWD_DEFINED__ +typedef interface IAudioMidrange IAudioMidrange; +#endif /* __IAudioMidrange_FWD_DEFINED__ */ + + +#ifndef __IAudioTreble_FWD_DEFINED__ +#define __IAudioTreble_FWD_DEFINED__ +typedef interface IAudioTreble IAudioTreble; +#endif /* __IAudioTreble_FWD_DEFINED__ */ + + +#ifndef __IAudioAutoGainControl_FWD_DEFINED__ +#define __IAudioAutoGainControl_FWD_DEFINED__ +typedef interface IAudioAutoGainControl IAudioAutoGainControl; +#endif /* __IAudioAutoGainControl_FWD_DEFINED__ */ + + +#ifndef __IAudioPeakMeter_FWD_DEFINED__ +#define __IAudioPeakMeter_FWD_DEFINED__ +typedef interface IAudioPeakMeter IAudioPeakMeter; +#endif /* __IAudioPeakMeter_FWD_DEFINED__ */ + + +#ifndef __IDeviceSpecificProperty_FWD_DEFINED__ +#define __IDeviceSpecificProperty_FWD_DEFINED__ +typedef interface IDeviceSpecificProperty IDeviceSpecificProperty; +#endif /* __IDeviceSpecificProperty_FWD_DEFINED__ */ + + +#ifndef __IKsFormatSupport_FWD_DEFINED__ +#define __IKsFormatSupport_FWD_DEFINED__ +typedef interface IKsFormatSupport IKsFormatSupport; +#endif /* __IKsFormatSupport_FWD_DEFINED__ */ + + +#ifndef __IKsJackDescription_FWD_DEFINED__ +#define __IKsJackDescription_FWD_DEFINED__ +typedef interface IKsJackDescription IKsJackDescription; +#endif /* __IKsJackDescription_FWD_DEFINED__ */ + + +#ifndef __IPartsList_FWD_DEFINED__ +#define __IPartsList_FWD_DEFINED__ +typedef interface IPartsList IPartsList; +#endif /* __IPartsList_FWD_DEFINED__ */ + + +#ifndef __IPart_FWD_DEFINED__ +#define __IPart_FWD_DEFINED__ +typedef interface IPart IPart; +#endif /* __IPart_FWD_DEFINED__ */ + + +#ifndef __IConnector_FWD_DEFINED__ +#define __IConnector_FWD_DEFINED__ +typedef interface IConnector IConnector; +#endif /* __IConnector_FWD_DEFINED__ */ + + +#ifndef __ISubunit_FWD_DEFINED__ +#define __ISubunit_FWD_DEFINED__ +typedef interface ISubunit ISubunit; +#endif /* __ISubunit_FWD_DEFINED__ */ + + +#ifndef __IControlInterface_FWD_DEFINED__ +#define __IControlInterface_FWD_DEFINED__ +typedef interface IControlInterface IControlInterface; +#endif /* __IControlInterface_FWD_DEFINED__ */ + + +#ifndef __IControlChangeNotify_FWD_DEFINED__ +#define __IControlChangeNotify_FWD_DEFINED__ +typedef interface IControlChangeNotify IControlChangeNotify; +#endif /* __IControlChangeNotify_FWD_DEFINED__ */ + + +#ifndef __IDeviceTopology_FWD_DEFINED__ +#define __IDeviceTopology_FWD_DEFINED__ +typedef interface IDeviceTopology IDeviceTopology; +#endif /* __IDeviceTopology_FWD_DEFINED__ */ + + +#ifndef __DeviceTopology_FWD_DEFINED__ +#define __DeviceTopology_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class DeviceTopology DeviceTopology; +#else +typedef struct DeviceTopology DeviceTopology; +#endif /* __cplusplus */ + +#endif /* __DeviceTopology_FWD_DEFINED__ */ + + +#ifndef __IPartsList_FWD_DEFINED__ +#define __IPartsList_FWD_DEFINED__ +typedef interface IPartsList IPartsList; +#endif /* __IPartsList_FWD_DEFINED__ */ + + +#ifndef __IPerChannelDbLevel_FWD_DEFINED__ +#define __IPerChannelDbLevel_FWD_DEFINED__ +typedef interface IPerChannelDbLevel IPerChannelDbLevel; +#endif /* __IPerChannelDbLevel_FWD_DEFINED__ */ + + +#ifndef __IAudioVolumeLevel_FWD_DEFINED__ +#define __IAudioVolumeLevel_FWD_DEFINED__ +typedef interface IAudioVolumeLevel IAudioVolumeLevel; +#endif /* __IAudioVolumeLevel_FWD_DEFINED__ */ + + +#ifndef __IAudioLoudness_FWD_DEFINED__ +#define __IAudioLoudness_FWD_DEFINED__ +typedef interface IAudioLoudness IAudioLoudness; +#endif /* __IAudioLoudness_FWD_DEFINED__ */ + + +#ifndef __IAudioInputSelector_FWD_DEFINED__ +#define __IAudioInputSelector_FWD_DEFINED__ +typedef interface IAudioInputSelector IAudioInputSelector; +#endif /* __IAudioInputSelector_FWD_DEFINED__ */ + + +#ifndef __IAudioMute_FWD_DEFINED__ +#define __IAudioMute_FWD_DEFINED__ +typedef interface IAudioMute IAudioMute; +#endif /* __IAudioMute_FWD_DEFINED__ */ + + +#ifndef __IAudioBass_FWD_DEFINED__ +#define __IAudioBass_FWD_DEFINED__ +typedef interface IAudioBass IAudioBass; +#endif /* __IAudioBass_FWD_DEFINED__ */ + + +#ifndef __IAudioMidrange_FWD_DEFINED__ +#define __IAudioMidrange_FWD_DEFINED__ +typedef interface IAudioMidrange IAudioMidrange; +#endif /* __IAudioMidrange_FWD_DEFINED__ */ + + +#ifndef __IAudioTreble_FWD_DEFINED__ +#define __IAudioTreble_FWD_DEFINED__ +typedef interface IAudioTreble IAudioTreble; +#endif /* __IAudioTreble_FWD_DEFINED__ */ + + +#ifndef __IAudioAutoGainControl_FWD_DEFINED__ +#define __IAudioAutoGainControl_FWD_DEFINED__ +typedef interface IAudioAutoGainControl IAudioAutoGainControl; +#endif /* __IAudioAutoGainControl_FWD_DEFINED__ */ + + +#ifndef __IAudioOutputSelector_FWD_DEFINED__ +#define __IAudioOutputSelector_FWD_DEFINED__ +typedef interface IAudioOutputSelector IAudioOutputSelector; +#endif /* __IAudioOutputSelector_FWD_DEFINED__ */ + + +#ifndef __IAudioPeakMeter_FWD_DEFINED__ +#define __IAudioPeakMeter_FWD_DEFINED__ +typedef interface IAudioPeakMeter IAudioPeakMeter; +#endif /* __IAudioPeakMeter_FWD_DEFINED__ */ + + +#ifndef __IDeviceSpecificProperty_FWD_DEFINED__ +#define __IDeviceSpecificProperty_FWD_DEFINED__ +typedef interface IDeviceSpecificProperty IDeviceSpecificProperty; +#endif /* __IDeviceSpecificProperty_FWD_DEFINED__ */ + + +#ifndef __IKsFormatSupport_FWD_DEFINED__ +#define __IKsFormatSupport_FWD_DEFINED__ +typedef interface IKsFormatSupport IKsFormatSupport; +#endif /* __IKsFormatSupport_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" +#include "propidl.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_devicetopology_0000_0000 */ +/* [local] */ + +#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND) +// +// Flag for clients of IControlChangeNotify::OnNotify to allow those clients to identify hardware initiated notifications +// +#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 'draH' +/* E2C2E9DE-09B1-4B04-84E5-07931225EE04 */ +DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xE2C2E9DE,0x09B1,0x4B04,0x84, 0xE5, 0x07, 0x93, 0x12, 0x25, 0xEE, 0x04); +#define _IKsControl_ +#include "ks.h" +#include "ksmedia.h" +#ifndef _KS_ +typedef /* [public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0001 + { + ULONG FormatSize; + ULONG Flags; + ULONG SampleSize; + ULONG Reserved; + GUID MajorFormat; + GUID SubFormat; + GUID Specifier; + } KSDATAFORMAT; + +typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0001 *PKSDATAFORMAT; + +typedef /* [public][public][public][public][public][public][public][public][public][public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002 + { + union + { + struct + { + GUID Set; + ULONG Id; + ULONG Flags; + } ; + LONGLONG Alignment; + } ; + } KSIDENTIFIER; + +typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002 *PKSIDENTIFIER; + +typedef /* [public][public][public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0005 + { ePcxChanMap_FL_FR = 0, + ePcxChanMap_FC_LFE = ( ePcxChanMap_FL_FR + 1 ) , + ePcxChanMap_BL_BR = ( ePcxChanMap_FC_LFE + 1 ) , + ePcxChanMap_FLC_FRC = ( ePcxChanMap_BL_BR + 1 ) , + ePcxChanMap_SL_SR = ( ePcxChanMap_FLC_FRC + 1 ) , + ePcxChanMap_Unknown = ( ePcxChanMap_SL_SR + 1 ) + } EChannelMapping; + +typedef /* [public][public][public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0006 + { eConnTypeUnknown = 0, + eConnTypeEighth = ( eConnTypeUnknown + 1 ) , + eConnTypeQuarter = ( eConnTypeEighth + 1 ) , + eConnTypeAtapiInternal = ( eConnTypeQuarter + 1 ) , + eConnTypeRCA = ( eConnTypeAtapiInternal + 1 ) , + eConnTypeOptical = ( eConnTypeRCA + 1 ) , + eConnTypeOtherDigital = ( eConnTypeOptical + 1 ) , + eConnTypeOtherAnalog = ( eConnTypeOtherDigital + 1 ) , + eConnTypeMultichannelAnalogDIN = ( eConnTypeOtherAnalog + 1 ) , + eConnTypeXlrProfessional = ( eConnTypeMultichannelAnalogDIN + 1 ) , + eConnTypeRJ11Modem = ( eConnTypeXlrProfessional + 1 ) , + eConnTypeCombination = ( eConnTypeRJ11Modem + 1 ) + } EPcxConnectionType; + +typedef /* [public][public][public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0007 + { eGeoLocRear = 0x1, + eGeoLocFront = ( eGeoLocRear + 1 ) , + eGeoLocLeft = ( eGeoLocFront + 1 ) , + eGeoLocRight = ( eGeoLocLeft + 1 ) , + eGeoLocTop = ( eGeoLocRight + 1 ) , + eGeoLocBottom = ( eGeoLocTop + 1 ) , + eGeoLocRearOPanel = ( eGeoLocBottom + 1 ) , + eGeoLocRiser = ( eGeoLocRearOPanel + 1 ) , + eGeoLocInsideMobileLid = ( eGeoLocRiser + 1 ) , + eGeoLocDrivebay = ( eGeoLocInsideMobileLid + 1 ) , + eGeoLocHDMI = ( eGeoLocDrivebay + 1 ) , + eGeoLocOutsideMobileLid = ( eGeoLocHDMI + 1 ) , + eGeoLocATAPI = ( eGeoLocOutsideMobileLid + 1 ) , + eGeoLocReserved5 = ( eGeoLocATAPI + 1 ) , + eGeoLocReserved6 = ( eGeoLocReserved5 + 1 ) + } EPcxGeoLocation; + +typedef /* [public][public][public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0008 + { eGenLocPrimaryBox = 0, + eGenLocInternal = ( eGenLocPrimaryBox + 1 ) , + eGenLocSeperate = ( eGenLocInternal + 1 ) , + eGenLocOther = ( eGenLocSeperate + 1 ) + } EPcxGenLocation; + +typedef /* [public][public][public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0009 + { ePortConnJack = 0, + ePortConnIntegratedDevice = ( ePortConnJack + 1 ) , + ePortConnBothIntegratedAndJack = ( ePortConnIntegratedDevice + 1 ) , + ePortConnUnknown = ( ePortConnBothIntegratedAndJack + 1 ) + } EPxcPortConnection; + +typedef /* [public][public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0010 + { + EChannelMapping ChannelMapping; + COLORREF Color; + EPcxConnectionType ConnectionType; + EPcxGeoLocation GeoLocation; + EPcxGenLocation GenLocation; + EPxcPortConnection PortConnection; + BOOL IsConnected; + } KSJACK_DESCRIPTION; + +typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0010 *PKSJACK_DESCRIPTION; + +typedef KSIDENTIFIER KSPROPERTY; + +typedef KSIDENTIFIER *PKSPROPERTY; + +typedef KSIDENTIFIER KSMETHOD; + +typedef KSIDENTIFIER *PKSMETHOD; + +typedef KSIDENTIFIER KSEVENT; + +typedef KSIDENTIFIER *PKSEVENT; + +#endif + + + + + + + + +typedef /* [public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0011 + { In = 0, + Out = ( In + 1 ) + } DataFlow; + +typedef /* [public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0012 + { Connector = 0, + Subunit = ( Connector + 1 ) + } PartType; + +#define PARTTYPE_FLAG_CONNECTOR 0x00010000 +#define PARTTYPE_FLAG_SUBUNIT 0x00020000 +#define PARTTYPE_MASK 0x00030000 +#define PARTID_MASK 0x0000ffff +typedef /* [public][public] */ +enum __MIDL___MIDL_itf_devicetopology_0000_0000_0013 + { Unknown_Connector = 0, + Physical_Internal = ( Unknown_Connector + 1 ) , + Physical_External = ( Physical_Internal + 1 ) , + Software_IO = ( Physical_External + 1 ) , + Software_Fixed = ( Software_IO + 1 ) , + Network = ( Software_Fixed + 1 ) + } ConnectorType; + + + +extern RPC_IF_HANDLE __MIDL_itf_devicetopology_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_devicetopology_0000_0000_v0_0_s_ifspec; + +#ifndef __IKsControl_INTERFACE_DEFINED__ +#define __IKsControl_INTERFACE_DEFINED__ + +/* interface IKsControl */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IKsControl; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("28F54685-06FD-11D2-B27A-00A0C9223196") + IKsControl : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE KsProperty( + /* [in] */ PKSPROPERTY Property, + /* [in] */ ULONG PropertyLength, + /* [out][in] */ void *PropertyData, + /* [in] */ ULONG DataLength, + /* [out] */ ULONG *BytesReturned) = 0; + + virtual HRESULT STDMETHODCALLTYPE KsMethod( + /* [in] */ PKSMETHOD Method, + /* [in] */ ULONG MethodLength, + /* [out][in] */ void *MethodData, + /* [in] */ ULONG DataLength, + /* [out] */ ULONG *BytesReturned) = 0; + + virtual HRESULT STDMETHODCALLTYPE KsEvent( + /* [in] */ PKSEVENT Event, + /* [in] */ ULONG EventLength, + /* [out][in] */ void *EventData, + /* [in] */ ULONG DataLength, + /* [out] */ ULONG *BytesReturned) = 0; + + }; + +#else /* C style interface */ + + typedef struct IKsControlVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IKsControl * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IKsControl * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IKsControl * This); + + HRESULT ( STDMETHODCALLTYPE *KsProperty )( + IKsControl * This, + /* [in] */ PKSPROPERTY Property, + /* [in] */ ULONG PropertyLength, + /* [out][in] */ void *PropertyData, + /* [in] */ ULONG DataLength, + /* [out] */ ULONG *BytesReturned); + + HRESULT ( STDMETHODCALLTYPE *KsMethod )( + IKsControl * This, + /* [in] */ PKSMETHOD Method, + /* [in] */ ULONG MethodLength, + /* [out][in] */ void *MethodData, + /* [in] */ ULONG DataLength, + /* [out] */ ULONG *BytesReturned); + + HRESULT ( STDMETHODCALLTYPE *KsEvent )( + IKsControl * This, + /* [in] */ PKSEVENT Event, + /* [in] */ ULONG EventLength, + /* [out][in] */ void *EventData, + /* [in] */ ULONG DataLength, + /* [out] */ ULONG *BytesReturned); + + END_INTERFACE + } IKsControlVtbl; + + interface IKsControl + { + CONST_VTBL struct IKsControlVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IKsControl_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IKsControl_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IKsControl_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IKsControl_KsProperty(This,Property,PropertyLength,PropertyData,DataLength,BytesReturned) \ + ( (This)->lpVtbl -> KsProperty(This,Property,PropertyLength,PropertyData,DataLength,BytesReturned) ) + +#define IKsControl_KsMethod(This,Method,MethodLength,MethodData,DataLength,BytesReturned) \ + ( (This)->lpVtbl -> KsMethod(This,Method,MethodLength,MethodData,DataLength,BytesReturned) ) + +#define IKsControl_KsEvent(This,Event,EventLength,EventData,DataLength,BytesReturned) \ + ( (This)->lpVtbl -> KsEvent(This,Event,EventLength,EventData,DataLength,BytesReturned) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IKsControl_INTERFACE_DEFINED__ */ + + +#ifndef __IPerChannelDbLevel_INTERFACE_DEFINED__ +#define __IPerChannelDbLevel_INTERFACE_DEFINED__ + +/* interface IPerChannelDbLevel */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IPerChannelDbLevel; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C2F8E001-F205-4BC9-99BC-C13B1E048CCB") + IPerChannelDbLevel : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelCount( + /* [out] */ + __out UINT *pcChannels) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevelRange( + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfMinLevelDB, + /* [out] */ + __out float *pfMaxLevelDB, + /* [out] */ + __out float *pfStepping) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevel( + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevel( + /* [in] */ + __in UINT nChannel, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevelUniform( + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevelAllChannels( + /* [size_is][in] */ + __in_ecount(cChannels) float aLevelsDB[ ], + /* [in] */ + __in ULONG cChannels, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPerChannelDbLevelVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPerChannelDbLevel * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPerChannelDbLevel * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPerChannelDbLevel * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IPerChannelDbLevel * This, + /* [out] */ + __out UINT *pcChannels); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( + IPerChannelDbLevel * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfMinLevelDB, + /* [out] */ + __out float *pfMaxLevelDB, + /* [out] */ + __out float *pfStepping); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( + IPerChannelDbLevel * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( + IPerChannelDbLevel * This, + /* [in] */ + __in UINT nChannel, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( + IPerChannelDbLevel * This, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( + IPerChannelDbLevel * This, + /* [size_is][in] */ + __in_ecount(cChannels) float aLevelsDB[ ], + /* [in] */ + __in ULONG cChannels, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IPerChannelDbLevelVtbl; + + interface IPerChannelDbLevel + { + CONST_VTBL struct IPerChannelDbLevelVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPerChannelDbLevel_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPerChannelDbLevel_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPerChannelDbLevel_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPerChannelDbLevel_GetChannelCount(This,pcChannels) \ + ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) + +#define IPerChannelDbLevel_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) \ + ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) + +#define IPerChannelDbLevel_GetLevel(This,nChannel,pfLevelDB) \ + ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) + +#define IPerChannelDbLevel_SetLevel(This,nChannel,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) + +#define IPerChannelDbLevel_SetLevelUniform(This,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) + +#define IPerChannelDbLevel_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPerChannelDbLevel_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioVolumeLevel_INTERFACE_DEFINED__ +#define __IAudioVolumeLevel_INTERFACE_DEFINED__ + +/* interface IAudioVolumeLevel */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioVolumeLevel; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7FB7B48F-531D-44A2-BCB3-5AD5A134B3DC") + IAudioVolumeLevel : public IPerChannelDbLevel + { + public: + }; + +#else /* C style interface */ + + typedef struct IAudioVolumeLevelVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioVolumeLevel * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioVolumeLevel * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioVolumeLevel * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IAudioVolumeLevel * This, + /* [out] */ + __out UINT *pcChannels); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( + IAudioVolumeLevel * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfMinLevelDB, + /* [out] */ + __out float *pfMaxLevelDB, + /* [out] */ + __out float *pfStepping); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( + IAudioVolumeLevel * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( + IAudioVolumeLevel * This, + /* [in] */ + __in UINT nChannel, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( + IAudioVolumeLevel * This, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( + IAudioVolumeLevel * This, + /* [size_is][in] */ + __in_ecount(cChannels) float aLevelsDB[ ], + /* [in] */ + __in ULONG cChannels, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioVolumeLevelVtbl; + + interface IAudioVolumeLevel + { + CONST_VTBL struct IAudioVolumeLevelVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioVolumeLevel_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioVolumeLevel_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioVolumeLevel_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioVolumeLevel_GetChannelCount(This,pcChannels) \ + ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) + +#define IAudioVolumeLevel_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) \ + ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) + +#define IAudioVolumeLevel_GetLevel(This,nChannel,pfLevelDB) \ + ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) + +#define IAudioVolumeLevel_SetLevel(This,nChannel,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) + +#define IAudioVolumeLevel_SetLevelUniform(This,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) + +#define IAudioVolumeLevel_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) + + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioVolumeLevel_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioChannelConfig_INTERFACE_DEFINED__ +#define __IAudioChannelConfig_INTERFACE_DEFINED__ + +/* interface IAudioChannelConfig */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioChannelConfig; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("BB11C46F-EC28-493C-B88A-5DB88062CE98") + IAudioChannelConfig : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetChannelConfig( + /* [in] */ DWORD dwConfig, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelConfig( + /* [retval][out] */ DWORD *pdwConfig) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioChannelConfigVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioChannelConfig * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioChannelConfig * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioChannelConfig * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetChannelConfig )( + IAudioChannelConfig * This, + /* [in] */ DWORD dwConfig, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelConfig )( + IAudioChannelConfig * This, + /* [retval][out] */ DWORD *pdwConfig); + + END_INTERFACE + } IAudioChannelConfigVtbl; + + interface IAudioChannelConfig + { + CONST_VTBL struct IAudioChannelConfigVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioChannelConfig_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioChannelConfig_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioChannelConfig_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioChannelConfig_SetChannelConfig(This,dwConfig,pguidEventContext) \ + ( (This)->lpVtbl -> SetChannelConfig(This,dwConfig,pguidEventContext) ) + +#define IAudioChannelConfig_GetChannelConfig(This,pdwConfig) \ + ( (This)->lpVtbl -> GetChannelConfig(This,pdwConfig) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioChannelConfig_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioLoudness_INTERFACE_DEFINED__ +#define __IAudioLoudness_INTERFACE_DEFINED__ + +/* interface IAudioLoudness */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioLoudness; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7D8B1437-DD53-4350-9C1B-1EE2890BD938") + IAudioLoudness : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetEnabled( + /* [out] */ + __out BOOL *pbEnabled) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetEnabled( + /* [in] */ + __in BOOL bEnable, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioLoudnessVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioLoudness * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioLoudness * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioLoudness * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetEnabled )( + IAudioLoudness * This, + /* [out] */ + __out BOOL *pbEnabled); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetEnabled )( + IAudioLoudness * This, + /* [in] */ + __in BOOL bEnable, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioLoudnessVtbl; + + interface IAudioLoudness + { + CONST_VTBL struct IAudioLoudnessVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioLoudness_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioLoudness_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioLoudness_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioLoudness_GetEnabled(This,pbEnabled) \ + ( (This)->lpVtbl -> GetEnabled(This,pbEnabled) ) + +#define IAudioLoudness_SetEnabled(This,bEnable,pguidEventContext) \ + ( (This)->lpVtbl -> SetEnabled(This,bEnable,pguidEventContext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioLoudness_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioInputSelector_INTERFACE_DEFINED__ +#define __IAudioInputSelector_INTERFACE_DEFINED__ + +/* interface IAudioInputSelector */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioInputSelector; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4F03DC02-5E6E-4653-8F72-A030C123D598") + IAudioInputSelector : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSelection( + /* [out] */ + __out UINT *pnIdSelected) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetSelection( + /* [in] */ + __in UINT nIdSelect, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioInputSelectorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioInputSelector * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioInputSelector * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioInputSelector * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSelection )( + IAudioInputSelector * This, + /* [out] */ + __out UINT *pnIdSelected); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSelection )( + IAudioInputSelector * This, + /* [in] */ + __in UINT nIdSelect, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioInputSelectorVtbl; + + interface IAudioInputSelector + { + CONST_VTBL struct IAudioInputSelectorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioInputSelector_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioInputSelector_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioInputSelector_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioInputSelector_GetSelection(This,pnIdSelected) \ + ( (This)->lpVtbl -> GetSelection(This,pnIdSelected) ) + +#define IAudioInputSelector_SetSelection(This,nIdSelect,pguidEventContext) \ + ( (This)->lpVtbl -> SetSelection(This,nIdSelect,pguidEventContext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioInputSelector_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioOutputSelector_INTERFACE_DEFINED__ +#define __IAudioOutputSelector_INTERFACE_DEFINED__ + +/* interface IAudioOutputSelector */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioOutputSelector; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("BB515F69-94A7-429e-8B9C-271B3F11A3AB") + IAudioOutputSelector : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSelection( + /* [out] */ + __out UINT *pnIdSelected) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetSelection( + /* [in] */ + __in UINT nIdSelect, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioOutputSelectorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioOutputSelector * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioOutputSelector * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioOutputSelector * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSelection )( + IAudioOutputSelector * This, + /* [out] */ + __out UINT *pnIdSelected); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSelection )( + IAudioOutputSelector * This, + /* [in] */ + __in UINT nIdSelect, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioOutputSelectorVtbl; + + interface IAudioOutputSelector + { + CONST_VTBL struct IAudioOutputSelectorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioOutputSelector_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioOutputSelector_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioOutputSelector_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioOutputSelector_GetSelection(This,pnIdSelected) \ + ( (This)->lpVtbl -> GetSelection(This,pnIdSelected) ) + +#define IAudioOutputSelector_SetSelection(This,nIdSelect,pguidEventContext) \ + ( (This)->lpVtbl -> SetSelection(This,nIdSelect,pguidEventContext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioOutputSelector_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioMute_INTERFACE_DEFINED__ +#define __IAudioMute_INTERFACE_DEFINED__ + +/* interface IAudioMute */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioMute; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("DF45AEEA-B74A-4B6B-AFAD-2366B6AA012E") + IAudioMute : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetMute( + /* [in] */ + __in BOOL bMuted, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetMute( + /* [out] */ + __out BOOL *pbMuted) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioMuteVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioMute * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioMute * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioMute * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetMute )( + IAudioMute * This, + /* [in] */ + __in BOOL bMuted, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetMute )( + IAudioMute * This, + /* [out] */ + __out BOOL *pbMuted); + + END_INTERFACE + } IAudioMuteVtbl; + + interface IAudioMute + { + CONST_VTBL struct IAudioMuteVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioMute_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioMute_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioMute_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioMute_SetMute(This,bMuted,pguidEventContext) \ + ( (This)->lpVtbl -> SetMute(This,bMuted,pguidEventContext) ) + +#define IAudioMute_GetMute(This,pbMuted) \ + ( (This)->lpVtbl -> GetMute(This,pbMuted) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioMute_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioBass_INTERFACE_DEFINED__ +#define __IAudioBass_INTERFACE_DEFINED__ + +/* interface IAudioBass */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioBass; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A2B1A1D9-4DB3-425D-A2B2-BD335CB3E2E5") + IAudioBass : public IPerChannelDbLevel + { + public: + }; + +#else /* C style interface */ + + typedef struct IAudioBassVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioBass * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioBass * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioBass * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IAudioBass * This, + /* [out] */ + __out UINT *pcChannels); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( + IAudioBass * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfMinLevelDB, + /* [out] */ + __out float *pfMaxLevelDB, + /* [out] */ + __out float *pfStepping); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( + IAudioBass * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( + IAudioBass * This, + /* [in] */ + __in UINT nChannel, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( + IAudioBass * This, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( + IAudioBass * This, + /* [size_is][in] */ + __in_ecount(cChannels) float aLevelsDB[ ], + /* [in] */ + __in ULONG cChannels, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioBassVtbl; + + interface IAudioBass + { + CONST_VTBL struct IAudioBassVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioBass_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioBass_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioBass_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioBass_GetChannelCount(This,pcChannels) \ + ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) + +#define IAudioBass_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) \ + ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) + +#define IAudioBass_GetLevel(This,nChannel,pfLevelDB) \ + ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) + +#define IAudioBass_SetLevel(This,nChannel,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) + +#define IAudioBass_SetLevelUniform(This,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) + +#define IAudioBass_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) + + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioBass_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioMidrange_INTERFACE_DEFINED__ +#define __IAudioMidrange_INTERFACE_DEFINED__ + +/* interface IAudioMidrange */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioMidrange; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5E54B6D7-B44B-40D9-9A9E-E691D9CE6EDF") + IAudioMidrange : public IPerChannelDbLevel + { + public: + }; + +#else /* C style interface */ + + typedef struct IAudioMidrangeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioMidrange * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioMidrange * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioMidrange * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IAudioMidrange * This, + /* [out] */ + __out UINT *pcChannels); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( + IAudioMidrange * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfMinLevelDB, + /* [out] */ + __out float *pfMaxLevelDB, + /* [out] */ + __out float *pfStepping); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( + IAudioMidrange * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( + IAudioMidrange * This, + /* [in] */ + __in UINT nChannel, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( + IAudioMidrange * This, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( + IAudioMidrange * This, + /* [size_is][in] */ + __in_ecount(cChannels) float aLevelsDB[ ], + /* [in] */ + __in ULONG cChannels, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioMidrangeVtbl; + + interface IAudioMidrange + { + CONST_VTBL struct IAudioMidrangeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioMidrange_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioMidrange_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioMidrange_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioMidrange_GetChannelCount(This,pcChannels) \ + ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) + +#define IAudioMidrange_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) \ + ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) + +#define IAudioMidrange_GetLevel(This,nChannel,pfLevelDB) \ + ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) + +#define IAudioMidrange_SetLevel(This,nChannel,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) + +#define IAudioMidrange_SetLevelUniform(This,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) + +#define IAudioMidrange_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) + + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioMidrange_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioTreble_INTERFACE_DEFINED__ +#define __IAudioTreble_INTERFACE_DEFINED__ + +/* interface IAudioTreble */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioTreble; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0A717812-694E-4907-B74B-BAFA5CFDCA7B") + IAudioTreble : public IPerChannelDbLevel + { + public: + }; + +#else /* C style interface */ + + typedef struct IAudioTrebleVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioTreble * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioTreble * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioTreble * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IAudioTreble * This, + /* [out] */ + __out UINT *pcChannels); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( + IAudioTreble * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfMinLevelDB, + /* [out] */ + __out float *pfMaxLevelDB, + /* [out] */ + __out float *pfStepping); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( + IAudioTreble * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( + IAudioTreble * This, + /* [in] */ + __in UINT nChannel, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( + IAudioTreble * This, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( + IAudioTreble * This, + /* [size_is][in] */ + __in_ecount(cChannels) float aLevelsDB[ ], + /* [in] */ + __in ULONG cChannels, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioTrebleVtbl; + + interface IAudioTreble + { + CONST_VTBL struct IAudioTrebleVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioTreble_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioTreble_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioTreble_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioTreble_GetChannelCount(This,pcChannels) \ + ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) + +#define IAudioTreble_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) \ + ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) + +#define IAudioTreble_GetLevel(This,nChannel,pfLevelDB) \ + ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) + +#define IAudioTreble_SetLevel(This,nChannel,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) + +#define IAudioTreble_SetLevelUniform(This,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) + +#define IAudioTreble_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) \ + ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) + + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioTreble_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioAutoGainControl_INTERFACE_DEFINED__ +#define __IAudioAutoGainControl_INTERFACE_DEFINED__ + +/* interface IAudioAutoGainControl */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioAutoGainControl; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("85401FD4-6DE4-4b9d-9869-2D6753A82F3C") + IAudioAutoGainControl : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetEnabled( + /* [out] */ + __out BOOL *pbEnabled) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetEnabled( + /* [in] */ + __in BOOL bEnable, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioAutoGainControlVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioAutoGainControl * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioAutoGainControl * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioAutoGainControl * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetEnabled )( + IAudioAutoGainControl * This, + /* [out] */ + __out BOOL *pbEnabled); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetEnabled )( + IAudioAutoGainControl * This, + /* [in] */ + __in BOOL bEnable, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IAudioAutoGainControlVtbl; + + interface IAudioAutoGainControl + { + CONST_VTBL struct IAudioAutoGainControlVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioAutoGainControl_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioAutoGainControl_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioAutoGainControl_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioAutoGainControl_GetEnabled(This,pbEnabled) \ + ( (This)->lpVtbl -> GetEnabled(This,pbEnabled) ) + +#define IAudioAutoGainControl_SetEnabled(This,bEnable,pguidEventContext) \ + ( (This)->lpVtbl -> SetEnabled(This,bEnable,pguidEventContext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioAutoGainControl_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioPeakMeter_INTERFACE_DEFINED__ +#define __IAudioPeakMeter_INTERFACE_DEFINED__ + +/* interface IAudioPeakMeter */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioPeakMeter; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("DD79923C-0599-45e0-B8B6-C8DF7DB6E796") + IAudioPeakMeter : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelCount( + /* [out] */ + __out UINT *pcChannels) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevel( + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevel) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioPeakMeterVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioPeakMeter * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioPeakMeter * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioPeakMeter * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IAudioPeakMeter * This, + /* [out] */ + __out UINT *pcChannels); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( + IAudioPeakMeter * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevel); + + END_INTERFACE + } IAudioPeakMeterVtbl; + + interface IAudioPeakMeter + { + CONST_VTBL struct IAudioPeakMeterVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioPeakMeter_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioPeakMeter_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioPeakMeter_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioPeakMeter_GetChannelCount(This,pcChannels) \ + ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) + +#define IAudioPeakMeter_GetLevel(This,nChannel,pfLevel) \ + ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevel) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioPeakMeter_INTERFACE_DEFINED__ */ + + +#ifndef __IDeviceSpecificProperty_INTERFACE_DEFINED__ +#define __IDeviceSpecificProperty_INTERFACE_DEFINED__ + +/* interface IDeviceSpecificProperty */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IDeviceSpecificProperty; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3B22BCBF-2586-4af0-8583-205D391B807C") + IDeviceSpecificProperty : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ + __deref_out VARTYPE *pVType) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ + __out void *pvValue, + /* [out][in] */ + __inout DWORD *pcbValue) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetValue( + /* [in] */ + __in void *pvValue, + /* [in] */ DWORD cbValue, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Get4BRange( + /* [out] */ + __deref_out LONG *plMin, + /* [out] */ + __deref_out LONG *plMax, + /* [out] */ + __deref_out LONG *plStepping) = 0; + + }; + +#else /* C style interface */ + + typedef struct IDeviceSpecificPropertyVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDeviceSpecificProperty * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDeviceSpecificProperty * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDeviceSpecificProperty * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetType )( + IDeviceSpecificProperty * This, + /* [out] */ + __deref_out VARTYPE *pVType); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetValue )( + IDeviceSpecificProperty * This, + /* [out] */ + __out void *pvValue, + /* [out][in] */ + __inout DWORD *pcbValue); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetValue )( + IDeviceSpecificProperty * This, + /* [in] */ + __in void *pvValue, + /* [in] */ DWORD cbValue, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Get4BRange )( + IDeviceSpecificProperty * This, + /* [out] */ + __deref_out LONG *plMin, + /* [out] */ + __deref_out LONG *plMax, + /* [out] */ + __deref_out LONG *plStepping); + + END_INTERFACE + } IDeviceSpecificPropertyVtbl; + + interface IDeviceSpecificProperty + { + CONST_VTBL struct IDeviceSpecificPropertyVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDeviceSpecificProperty_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDeviceSpecificProperty_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDeviceSpecificProperty_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDeviceSpecificProperty_GetType(This,pVType) \ + ( (This)->lpVtbl -> GetType(This,pVType) ) + +#define IDeviceSpecificProperty_GetValue(This,pvValue,pcbValue) \ + ( (This)->lpVtbl -> GetValue(This,pvValue,pcbValue) ) + +#define IDeviceSpecificProperty_SetValue(This,pvValue,cbValue,pguidEventContext) \ + ( (This)->lpVtbl -> SetValue(This,pvValue,cbValue,pguidEventContext) ) + +#define IDeviceSpecificProperty_Get4BRange(This,plMin,plMax,plStepping) \ + ( (This)->lpVtbl -> Get4BRange(This,plMin,plMax,plStepping) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDeviceSpecificProperty_INTERFACE_DEFINED__ */ + + +#ifndef __IKsFormatSupport_INTERFACE_DEFINED__ +#define __IKsFormatSupport_INTERFACE_DEFINED__ + +/* interface IKsFormatSupport */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IKsFormatSupport; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3CB4A69D-BB6F-4D2B-95B7-452D2C155DB5") + IKsFormatSupport : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IsFormatSupported( + /* [size_is][in] */ PKSDATAFORMAT pKsFormat, + /* [in] */ + __in DWORD cbFormat, + /* [out] */ + __out BOOL *pbSupported) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDevicePreferredFormat( + /* [out] */ PKSDATAFORMAT *ppKsFormat) = 0; + + }; + +#else /* C style interface */ + + typedef struct IKsFormatSupportVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IKsFormatSupport * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IKsFormatSupport * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IKsFormatSupport * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *IsFormatSupported )( + IKsFormatSupport * This, + /* [size_is][in] */ PKSDATAFORMAT pKsFormat, + /* [in] */ + __in DWORD cbFormat, + /* [out] */ + __out BOOL *pbSupported); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDevicePreferredFormat )( + IKsFormatSupport * This, + /* [out] */ PKSDATAFORMAT *ppKsFormat); + + END_INTERFACE + } IKsFormatSupportVtbl; + + interface IKsFormatSupport + { + CONST_VTBL struct IKsFormatSupportVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IKsFormatSupport_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IKsFormatSupport_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IKsFormatSupport_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IKsFormatSupport_IsFormatSupported(This,pKsFormat,cbFormat,pbSupported) \ + ( (This)->lpVtbl -> IsFormatSupported(This,pKsFormat,cbFormat,pbSupported) ) + +#define IKsFormatSupport_GetDevicePreferredFormat(This,ppKsFormat) \ + ( (This)->lpVtbl -> GetDevicePreferredFormat(This,ppKsFormat) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IKsFormatSupport_INTERFACE_DEFINED__ */ + + +#ifndef __IKsJackDescription_INTERFACE_DEFINED__ +#define __IKsJackDescription_INTERFACE_DEFINED__ + +/* interface IKsJackDescription */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IKsJackDescription; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4509F757-2D46-4637-8E62-CE7DB944F57B") + IKsJackDescription : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetJackCount( + /* [out] */ + __out UINT *pcJacks) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetJackDescription( + /* [in] */ UINT nJack, + /* [out] */ + __out KSJACK_DESCRIPTION *pDescription) = 0; + + }; + +#else /* C style interface */ + + typedef struct IKsJackDescriptionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IKsJackDescription * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IKsJackDescription * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IKsJackDescription * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetJackCount )( + IKsJackDescription * This, + /* [out] */ + __out UINT *pcJacks); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetJackDescription )( + IKsJackDescription * This, + /* [in] */ UINT nJack, + /* [out] */ + __out KSJACK_DESCRIPTION *pDescription); + + END_INTERFACE + } IKsJackDescriptionVtbl; + + interface IKsJackDescription + { + CONST_VTBL struct IKsJackDescriptionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IKsJackDescription_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IKsJackDescription_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IKsJackDescription_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IKsJackDescription_GetJackCount(This,pcJacks) \ + ( (This)->lpVtbl -> GetJackCount(This,pcJacks) ) + +#define IKsJackDescription_GetJackDescription(This,nJack,pDescription) \ + ( (This)->lpVtbl -> GetJackDescription(This,nJack,pDescription) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IKsJackDescription_INTERFACE_DEFINED__ */ + + +#ifndef __IPartsList_INTERFACE_DEFINED__ +#define __IPartsList_INTERFACE_DEFINED__ + +/* interface IPartsList */ +/* [object][unique][helpstring][uuid][local] */ + + +EXTERN_C const IID IID_IPartsList; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6DAA848C-5EB0-45CC-AEA5-998A2CDA1FFB") + IPartsList : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCount( + /* [out] */ + __out UINT *pCount) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPart( + /* [in] */ + __in UINT nIndex, + /* [out] */ + __out IPart **ppPart) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPartsListVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPartsList * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPartsList * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPartsList * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetCount )( + IPartsList * This, + /* [out] */ + __out UINT *pCount); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPart )( + IPartsList * This, + /* [in] */ + __in UINT nIndex, + /* [out] */ + __out IPart **ppPart); + + END_INTERFACE + } IPartsListVtbl; + + interface IPartsList + { + CONST_VTBL struct IPartsListVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPartsList_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPartsList_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPartsList_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPartsList_GetCount(This,pCount) \ + ( (This)->lpVtbl -> GetCount(This,pCount) ) + +#define IPartsList_GetPart(This,nIndex,ppPart) \ + ( (This)->lpVtbl -> GetPart(This,nIndex,ppPart) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPartsList_INTERFACE_DEFINED__ */ + + +#ifndef __IPart_INTERFACE_DEFINED__ +#define __IPart_INTERFACE_DEFINED__ + +/* interface IPart */ +/* [object][unique][helpstring][uuid][local] */ + + +EXTERN_C const IID IID_IPart; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("AE2DE0E4-5BCA-4F2D-AA46-5D13F8FDB3A9") + IPart : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetName( + /* [out] */ + __deref_out LPWSTR *ppwstrName) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLocalId( + /* [out] */ + __out UINT *pnId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetGlobalId( + /* [out] */ + __deref_out LPWSTR *ppwstrGlobalId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPartType( + /* [out] */ + __out PartType *pPartType) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubType( + /* [out] */ GUID *pSubType) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetControlInterfaceCount( + /* [out] */ + __out UINT *pCount) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetControlInterface( + /* [in] */ + __in UINT nIndex, + /* [out] */ + __out IControlInterface **ppInterfaceDesc) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumPartsIncoming( + /* [out] */ + __out IPartsList **ppParts) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumPartsOutgoing( + /* [out] */ + __out IPartsList **ppParts) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTopologyObject( + /* [out] */ + __out IDeviceTopology **ppTopology) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( + /* [in] */ + __in DWORD dwClsContext, + /* [in] */ + __in REFIID refiid, + /* [iid_is][out] */ + __out_opt void **ppvObject) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeCallback( + /* [in] */ + __in REFGUID riid, + /* [in] */ + __in IControlChangeNotify *pNotify) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeCallback( + /* [in] */ + __in IControlChangeNotify *pNotify) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPartVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPart * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPart * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPart * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetName )( + IPart * This, + /* [out] */ + __deref_out LPWSTR *ppwstrName); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLocalId )( + IPart * This, + /* [out] */ + __out UINT *pnId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetGlobalId )( + IPart * This, + /* [out] */ + __deref_out LPWSTR *ppwstrGlobalId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPartType )( + IPart * This, + /* [out] */ + __out PartType *pPartType); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubType )( + IPart * This, + /* [out] */ GUID *pSubType); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetControlInterfaceCount )( + IPart * This, + /* [out] */ + __out UINT *pCount); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetControlInterface )( + IPart * This, + /* [in] */ + __in UINT nIndex, + /* [out] */ + __out IControlInterface **ppInterfaceDesc); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumPartsIncoming )( + IPart * This, + /* [out] */ + __out IPartsList **ppParts); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumPartsOutgoing )( + IPart * This, + /* [out] */ + __out IPartsList **ppParts); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTopologyObject )( + IPart * This, + /* [out] */ + __out IDeviceTopology **ppTopology); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( + IPart * This, + /* [in] */ + __in DWORD dwClsContext, + /* [in] */ + __in REFIID refiid, + /* [iid_is][out] */ + __out_opt void **ppvObject); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterControlChangeCallback )( + IPart * This, + /* [in] */ + __in REFGUID riid, + /* [in] */ + __in IControlChangeNotify *pNotify); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterControlChangeCallback )( + IPart * This, + /* [in] */ + __in IControlChangeNotify *pNotify); + + END_INTERFACE + } IPartVtbl; + + interface IPart + { + CONST_VTBL struct IPartVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPart_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPart_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPart_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPart_GetName(This,ppwstrName) \ + ( (This)->lpVtbl -> GetName(This,ppwstrName) ) + +#define IPart_GetLocalId(This,pnId) \ + ( (This)->lpVtbl -> GetLocalId(This,pnId) ) + +#define IPart_GetGlobalId(This,ppwstrGlobalId) \ + ( (This)->lpVtbl -> GetGlobalId(This,ppwstrGlobalId) ) + +#define IPart_GetPartType(This,pPartType) \ + ( (This)->lpVtbl -> GetPartType(This,pPartType) ) + +#define IPart_GetSubType(This,pSubType) \ + ( (This)->lpVtbl -> GetSubType(This,pSubType) ) + +#define IPart_GetControlInterfaceCount(This,pCount) \ + ( (This)->lpVtbl -> GetControlInterfaceCount(This,pCount) ) + +#define IPart_GetControlInterface(This,nIndex,ppInterfaceDesc) \ + ( (This)->lpVtbl -> GetControlInterface(This,nIndex,ppInterfaceDesc) ) + +#define IPart_EnumPartsIncoming(This,ppParts) \ + ( (This)->lpVtbl -> EnumPartsIncoming(This,ppParts) ) + +#define IPart_EnumPartsOutgoing(This,ppParts) \ + ( (This)->lpVtbl -> EnumPartsOutgoing(This,ppParts) ) + +#define IPart_GetTopologyObject(This,ppTopology) \ + ( (This)->lpVtbl -> GetTopologyObject(This,ppTopology) ) + +#define IPart_Activate(This,dwClsContext,refiid,ppvObject) \ + ( (This)->lpVtbl -> Activate(This,dwClsContext,refiid,ppvObject) ) + +#define IPart_RegisterControlChangeCallback(This,riid,pNotify) \ + ( (This)->lpVtbl -> RegisterControlChangeCallback(This,riid,pNotify) ) + +#define IPart_UnregisterControlChangeCallback(This,pNotify) \ + ( (This)->lpVtbl -> UnregisterControlChangeCallback(This,pNotify) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPart_INTERFACE_DEFINED__ */ + + +#ifndef __IConnector_INTERFACE_DEFINED__ +#define __IConnector_INTERFACE_DEFINED__ + +/* interface IConnector */ +/* [object][unique][helpstring][uuid][local] */ + + +EXTERN_C const IID IID_IConnector; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9c2c4058-23f5-41de-877a-df3af236a09e") + IConnector : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetType( + /* [out] */ + __out ConnectorType *pType) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDataFlow( + /* [out] */ + __out DataFlow *pFlow) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ConnectTo( + /* [in] */ + __in IConnector *pConnectTo) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Disconnect( void) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IsConnected( + /* [out] */ + __out BOOL *pbConnected) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectedTo( + /* [out] */ + __out IConnector **ppConTo) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectorIdConnectedTo( + /* [out] */ + __deref_out LPWSTR *ppwstrConnectorId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDeviceIdConnectedTo( + /* [out] */ + __deref_out LPWSTR *ppwstrDeviceId) = 0; + + }; + +#else /* C style interface */ + + typedef struct IConnectorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IConnector * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IConnector * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IConnector * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetType )( + IConnector * This, + /* [out] */ + __out ConnectorType *pType); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDataFlow )( + IConnector * This, + /* [out] */ + __out DataFlow *pFlow); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ConnectTo )( + IConnector * This, + /* [in] */ + __in IConnector *pConnectTo); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Disconnect )( + IConnector * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *IsConnected )( + IConnector * This, + /* [out] */ + __out BOOL *pbConnected); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectedTo )( + IConnector * This, + /* [out] */ + __out IConnector **ppConTo); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectorIdConnectedTo )( + IConnector * This, + /* [out] */ + __deref_out LPWSTR *ppwstrConnectorId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDeviceIdConnectedTo )( + IConnector * This, + /* [out] */ + __deref_out LPWSTR *ppwstrDeviceId); + + END_INTERFACE + } IConnectorVtbl; + + interface IConnector + { + CONST_VTBL struct IConnectorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IConnector_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IConnector_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IConnector_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IConnector_GetType(This,pType) \ + ( (This)->lpVtbl -> GetType(This,pType) ) + +#define IConnector_GetDataFlow(This,pFlow) \ + ( (This)->lpVtbl -> GetDataFlow(This,pFlow) ) + +#define IConnector_ConnectTo(This,pConnectTo) \ + ( (This)->lpVtbl -> ConnectTo(This,pConnectTo) ) + +#define IConnector_Disconnect(This) \ + ( (This)->lpVtbl -> Disconnect(This) ) + +#define IConnector_IsConnected(This,pbConnected) \ + ( (This)->lpVtbl -> IsConnected(This,pbConnected) ) + +#define IConnector_GetConnectedTo(This,ppConTo) \ + ( (This)->lpVtbl -> GetConnectedTo(This,ppConTo) ) + +#define IConnector_GetConnectorIdConnectedTo(This,ppwstrConnectorId) \ + ( (This)->lpVtbl -> GetConnectorIdConnectedTo(This,ppwstrConnectorId) ) + +#define IConnector_GetDeviceIdConnectedTo(This,ppwstrDeviceId) \ + ( (This)->lpVtbl -> GetDeviceIdConnectedTo(This,ppwstrDeviceId) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IConnector_INTERFACE_DEFINED__ */ + + +#ifndef __ISubunit_INTERFACE_DEFINED__ +#define __ISubunit_INTERFACE_DEFINED__ + +/* interface ISubunit */ +/* [object][unique][helpstring][uuid][local] */ + + +EXTERN_C const IID IID_ISubunit; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("82149A85-DBA6-4487-86BB-EA8F7FEFCC71") + ISubunit : public IUnknown + { + public: + }; + +#else /* C style interface */ + + typedef struct ISubunitVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ISubunit * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ISubunit * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ISubunit * This); + + END_INTERFACE + } ISubunitVtbl; + + interface ISubunit + { + CONST_VTBL struct ISubunitVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ISubunit_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ISubunit_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ISubunit_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ISubunit_INTERFACE_DEFINED__ */ + + +#ifndef __IControlInterface_INTERFACE_DEFINED__ +#define __IControlInterface_INTERFACE_DEFINED__ + +/* interface IControlInterface */ +/* [object][unique][helpstring][uuid][local] */ + + +EXTERN_C const IID IID_IControlInterface; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("45d37c3f-5140-444a-ae24-400789f3cbf3") + IControlInterface : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetName( + /* [out] */ + __deref_out LPWSTR *ppwstrName) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetIID( + /* [out] */ + __out GUID *pIID) = 0; + + }; + +#else /* C style interface */ + + typedef struct IControlInterfaceVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IControlInterface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IControlInterface * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IControlInterface * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetName )( + IControlInterface * This, + /* [out] */ + __deref_out LPWSTR *ppwstrName); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetIID )( + IControlInterface * This, + /* [out] */ + __out GUID *pIID); + + END_INTERFACE + } IControlInterfaceVtbl; + + interface IControlInterface + { + CONST_VTBL struct IControlInterfaceVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IControlInterface_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IControlInterface_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IControlInterface_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IControlInterface_GetName(This,ppwstrName) \ + ( (This)->lpVtbl -> GetName(This,ppwstrName) ) + +#define IControlInterface_GetIID(This,pIID) \ + ( (This)->lpVtbl -> GetIID(This,pIID) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IControlInterface_INTERFACE_DEFINED__ */ + + +#ifndef __IControlChangeNotify_INTERFACE_DEFINED__ +#define __IControlChangeNotify_INTERFACE_DEFINED__ + +/* interface IControlChangeNotify */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IControlChangeNotify; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A09513ED-C709-4d21-BD7B-5F34C47F3947") + IControlChangeNotify : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnNotify( + /* [in] */ + __in DWORD dwSenderProcessId, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct IControlChangeNotifyVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IControlChangeNotify * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IControlChangeNotify * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IControlChangeNotify * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnNotify )( + IControlChangeNotify * This, + /* [in] */ + __in DWORD dwSenderProcessId, + /* [unique][in] */ + __in_opt LPCGUID pguidEventContext); + + END_INTERFACE + } IControlChangeNotifyVtbl; + + interface IControlChangeNotify + { + CONST_VTBL struct IControlChangeNotifyVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IControlChangeNotify_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IControlChangeNotify_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IControlChangeNotify_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IControlChangeNotify_OnNotify(This,dwSenderProcessId,pguidEventContext) \ + ( (This)->lpVtbl -> OnNotify(This,dwSenderProcessId,pguidEventContext) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IControlChangeNotify_INTERFACE_DEFINED__ */ + + +#ifndef __IDeviceTopology_INTERFACE_DEFINED__ +#define __IDeviceTopology_INTERFACE_DEFINED__ + +/* interface IDeviceTopology */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IDeviceTopology; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2A07407E-6497-4A18-9787-32F79BD0D98F") + IDeviceTopology : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectorCount( + /* [out] */ + __out UINT *pCount) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnector( + /* [in] */ + __in UINT nIndex, + /* [out] */ + __out IConnector **ppConnector) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubunitCount( + /* [out] */ + __out UINT *pCount) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubunit( + /* [in] */ + __in UINT nIndex, + /* [out] */ + __deref_out ISubunit **ppSubunit) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPartById( + /* [in] */ + __in UINT nId, + /* [out] */ + __deref_out IPart **ppPart) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDeviceId( + /* [out] */ + __deref_out LPWSTR *ppwstrDeviceId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSignalPath( + /* [in] */ + __in IPart *pIPartFrom, + /* [in] */ + __in IPart *pIPartTo, + /* [in] */ + __in BOOL bRejectMixedPaths, + /* [out] */ + __deref_out IPartsList **ppParts) = 0; + + }; + +#else /* C style interface */ + + typedef struct IDeviceTopologyVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDeviceTopology * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDeviceTopology * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDeviceTopology * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectorCount )( + IDeviceTopology * This, + /* [out] */ + __out UINT *pCount); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnector )( + IDeviceTopology * This, + /* [in] */ + __in UINT nIndex, + /* [out] */ + __out IConnector **ppConnector); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubunitCount )( + IDeviceTopology * This, + /* [out] */ + __out UINT *pCount); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubunit )( + IDeviceTopology * This, + /* [in] */ + __in UINT nIndex, + /* [out] */ + __deref_out ISubunit **ppSubunit); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPartById )( + IDeviceTopology * This, + /* [in] */ + __in UINT nId, + /* [out] */ + __deref_out IPart **ppPart); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDeviceId )( + IDeviceTopology * This, + /* [out] */ + __deref_out LPWSTR *ppwstrDeviceId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSignalPath )( + IDeviceTopology * This, + /* [in] */ + __in IPart *pIPartFrom, + /* [in] */ + __in IPart *pIPartTo, + /* [in] */ + __in BOOL bRejectMixedPaths, + /* [out] */ + __deref_out IPartsList **ppParts); + + END_INTERFACE + } IDeviceTopologyVtbl; + + interface IDeviceTopology + { + CONST_VTBL struct IDeviceTopologyVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDeviceTopology_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDeviceTopology_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDeviceTopology_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDeviceTopology_GetConnectorCount(This,pCount) \ + ( (This)->lpVtbl -> GetConnectorCount(This,pCount) ) + +#define IDeviceTopology_GetConnector(This,nIndex,ppConnector) \ + ( (This)->lpVtbl -> GetConnector(This,nIndex,ppConnector) ) + +#define IDeviceTopology_GetSubunitCount(This,pCount) \ + ( (This)->lpVtbl -> GetSubunitCount(This,pCount) ) + +#define IDeviceTopology_GetSubunit(This,nIndex,ppSubunit) \ + ( (This)->lpVtbl -> GetSubunit(This,nIndex,ppSubunit) ) + +#define IDeviceTopology_GetPartById(This,nId,ppPart) \ + ( (This)->lpVtbl -> GetPartById(This,nId,ppPart) ) + +#define IDeviceTopology_GetDeviceId(This,ppwstrDeviceId) \ + ( (This)->lpVtbl -> GetDeviceId(This,ppwstrDeviceId) ) + +#define IDeviceTopology_GetSignalPath(This,pIPartFrom,pIPartTo,bRejectMixedPaths,ppParts) \ + ( (This)->lpVtbl -> GetSignalPath(This,pIPartFrom,pIPartTo,bRejectMixedPaths,ppParts) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDeviceTopology_INTERFACE_DEFINED__ */ + + + +#ifndef __DevTopologyLib_LIBRARY_DEFINED__ +#define __DevTopologyLib_LIBRARY_DEFINED__ + +/* library DevTopologyLib */ +/* [helpstring][version][uuid] */ + + + + + + + + + + + + + + + + +EXTERN_C const IID LIBID_DevTopologyLib; + +EXTERN_C const CLSID CLSID_DeviceTopology; + +#ifdef __cplusplus + +class DECLSPEC_UUID("1DF639D0-5EC1-47AA-9379-828DC1AA8C59") +DeviceTopology; +#endif +#endif /* __DevTopologyLib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h new file mode 100644 index 0000000000..81155d7a92 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h @@ -0,0 +1,620 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for endpointvolume.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __endpointvolume_h__ +#define __endpointvolume_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IAudioEndpointVolumeCallback_FWD_DEFINED__ +#define __IAudioEndpointVolumeCallback_FWD_DEFINED__ +typedef interface IAudioEndpointVolumeCallback IAudioEndpointVolumeCallback; +#endif /* __IAudioEndpointVolumeCallback_FWD_DEFINED__ */ + + +#ifndef __IAudioEndpointVolume_FWD_DEFINED__ +#define __IAudioEndpointVolume_FWD_DEFINED__ +typedef interface IAudioEndpointVolume IAudioEndpointVolume; +#endif /* __IAudioEndpointVolume_FWD_DEFINED__ */ + + +#ifndef __IAudioMeterInformation_FWD_DEFINED__ +#define __IAudioMeterInformation_FWD_DEFINED__ +typedef interface IAudioMeterInformation IAudioMeterInformation; +#endif /* __IAudioMeterInformation_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "unknwn.h" +#include "devicetopology.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_endpointvolume_0000_0000 */ +/* [local] */ + +typedef struct AUDIO_VOLUME_NOTIFICATION_DATA + { + GUID guidEventContext; + BOOL bMuted; + float fMasterVolume; + UINT nChannels; + float afChannelVolumes[ 1 ]; + } AUDIO_VOLUME_NOTIFICATION_DATA; + +typedef struct AUDIO_VOLUME_NOTIFICATION_DATA *PAUDIO_VOLUME_NOTIFICATION_DATA; + +#define ENDPOINT_HARDWARE_SUPPORT_VOLUME 0x00000001 +#define ENDPOINT_HARDWARE_SUPPORT_MUTE 0x00000002 +#define ENDPOINT_HARDWARE_SUPPORT_METER 0x00000004 + + +extern RPC_IF_HANDLE __MIDL_itf_endpointvolume_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_endpointvolume_0000_0000_v0_0_s_ifspec; + +#ifndef __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__ +#define __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__ + +/* interface IAudioEndpointVolumeCallback */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioEndpointVolumeCallback; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("657804FA-D6AD-4496-8A60-352752AF4F89") + IAudioEndpointVolumeCallback : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE OnNotify( + PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioEndpointVolumeCallbackVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioEndpointVolumeCallback * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioEndpointVolumeCallback * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioEndpointVolumeCallback * This); + + HRESULT ( STDMETHODCALLTYPE *OnNotify )( + IAudioEndpointVolumeCallback * This, + PAUDIO_VOLUME_NOTIFICATION_DATA pNotify); + + END_INTERFACE + } IAudioEndpointVolumeCallbackVtbl; + + interface IAudioEndpointVolumeCallback + { + CONST_VTBL struct IAudioEndpointVolumeCallbackVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioEndpointVolumeCallback_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioEndpointVolumeCallback_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioEndpointVolumeCallback_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioEndpointVolumeCallback_OnNotify(This,pNotify) \ + ( (This)->lpVtbl -> OnNotify(This,pNotify) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioEndpointVolume_INTERFACE_DEFINED__ +#define __IAudioEndpointVolume_INTERFACE_DEFINED__ + +/* interface IAudioEndpointVolume */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioEndpointVolume; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5CDF2C82-841E-4546-9722-0CF74078229A") + IAudioEndpointVolume : public IUnknown + { + public: + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeNotify( + /* [in] */ + __in IAudioEndpointVolumeCallback *pNotify) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeNotify( + /* [in] */ + __in IAudioEndpointVolumeCallback *pNotify) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelCount( + /* [out] */ + __out UINT *pnChannelCount) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevel( + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevelScalar( + /* [in] */ + __in float fLevel, + /* [unique][in] */ LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevel( + /* [out] */ + __out float *pfLevelDB) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevelScalar( + /* [out] */ + __out float *pfLevel) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevel( + /* [in] */ + __in UINT nChannel, + float fLevelDB, + /* [unique][in] */ LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevelScalar( + /* [in] */ + __in UINT nChannel, + float fLevel, + /* [unique][in] */ LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevel( + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevelScalar( + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevel) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMute( + /* [in] */ + __in BOOL bMute, + /* [unique][in] */ LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMute( + /* [out] */ + __out BOOL *pbMute) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeStepInfo( + /* [out] */ + __out UINT *pnStep, + /* [out] */ + __out UINT *pnStepCount) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepUp( + /* [unique][in] */ LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepDown( + /* [unique][in] */ LPCGUID pguidEventContext) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport( + /* [out] */ + __out DWORD *pdwHardwareSupportMask) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeRange( + /* [out] */ + __out float *pflVolumeMindB, + /* [out] */ + __out float *pflVolumeMaxdB, + /* [out] */ + __out float *pflVolumeIncrementdB) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioEndpointVolumeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioEndpointVolume * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioEndpointVolume * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioEndpointVolume * This); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *RegisterControlChangeNotify )( + IAudioEndpointVolume * This, + /* [in] */ + __in IAudioEndpointVolumeCallback *pNotify); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *UnregisterControlChangeNotify )( + IAudioEndpointVolume * This, + /* [in] */ + __in IAudioEndpointVolumeCallback *pNotify); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( + IAudioEndpointVolume * This, + /* [out] */ + __out UINT *pnChannelCount); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevel )( + IAudioEndpointVolume * This, + /* [in] */ + __in float fLevelDB, + /* [unique][in] */ LPCGUID pguidEventContext); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevelScalar )( + IAudioEndpointVolume * This, + /* [in] */ + __in float fLevel, + /* [unique][in] */ LPCGUID pguidEventContext); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevel )( + IAudioEndpointVolume * This, + /* [out] */ + __out float *pfLevelDB); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevelScalar )( + IAudioEndpointVolume * This, + /* [out] */ + __out float *pfLevel); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevel )( + IAudioEndpointVolume * This, + /* [in] */ + __in UINT nChannel, + float fLevelDB, + /* [unique][in] */ LPCGUID pguidEventContext); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevelScalar )( + IAudioEndpointVolume * This, + /* [in] */ + __in UINT nChannel, + float fLevel, + /* [unique][in] */ LPCGUID pguidEventContext); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevel )( + IAudioEndpointVolume * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevelDB); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevelScalar )( + IAudioEndpointVolume * This, + /* [in] */ + __in UINT nChannel, + /* [out] */ + __out float *pfLevel); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMute )( + IAudioEndpointVolume * This, + /* [in] */ + __in BOOL bMute, + /* [unique][in] */ LPCGUID pguidEventContext); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMute )( + IAudioEndpointVolume * This, + /* [out] */ + __out BOOL *pbMute); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeStepInfo )( + IAudioEndpointVolume * This, + /* [out] */ + __out UINT *pnStep, + /* [out] */ + __out UINT *pnStepCount); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepUp )( + IAudioEndpointVolume * This, + /* [unique][in] */ LPCGUID pguidEventContext); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepDown )( + IAudioEndpointVolume * This, + /* [unique][in] */ LPCGUID pguidEventContext); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )( + IAudioEndpointVolume * This, + /* [out] */ + __out DWORD *pdwHardwareSupportMask); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeRange )( + IAudioEndpointVolume * This, + /* [out] */ + __out float *pflVolumeMindB, + /* [out] */ + __out float *pflVolumeMaxdB, + /* [out] */ + __out float *pflVolumeIncrementdB); + + END_INTERFACE + } IAudioEndpointVolumeVtbl; + + interface IAudioEndpointVolume + { + CONST_VTBL struct IAudioEndpointVolumeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioEndpointVolume_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioEndpointVolume_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioEndpointVolume_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioEndpointVolume_RegisterControlChangeNotify(This,pNotify) \ + ( (This)->lpVtbl -> RegisterControlChangeNotify(This,pNotify) ) + +#define IAudioEndpointVolume_UnregisterControlChangeNotify(This,pNotify) \ + ( (This)->lpVtbl -> UnregisterControlChangeNotify(This,pNotify) ) + +#define IAudioEndpointVolume_GetChannelCount(This,pnChannelCount) \ + ( (This)->lpVtbl -> GetChannelCount(This,pnChannelCount) ) + +#define IAudioEndpointVolume_SetMasterVolumeLevel(This,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetMasterVolumeLevel(This,fLevelDB,pguidEventContext) ) + +#define IAudioEndpointVolume_SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext) \ + ( (This)->lpVtbl -> SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext) ) + +#define IAudioEndpointVolume_GetMasterVolumeLevel(This,pfLevelDB) \ + ( (This)->lpVtbl -> GetMasterVolumeLevel(This,pfLevelDB) ) + +#define IAudioEndpointVolume_GetMasterVolumeLevelScalar(This,pfLevel) \ + ( (This)->lpVtbl -> GetMasterVolumeLevelScalar(This,pfLevel) ) + +#define IAudioEndpointVolume_SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext) \ + ( (This)->lpVtbl -> SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext) ) + +#define IAudioEndpointVolume_SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext) \ + ( (This)->lpVtbl -> SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext) ) + +#define IAudioEndpointVolume_GetChannelVolumeLevel(This,nChannel,pfLevelDB) \ + ( (This)->lpVtbl -> GetChannelVolumeLevel(This,nChannel,pfLevelDB) ) + +#define IAudioEndpointVolume_GetChannelVolumeLevelScalar(This,nChannel,pfLevel) \ + ( (This)->lpVtbl -> GetChannelVolumeLevelScalar(This,nChannel,pfLevel) ) + +#define IAudioEndpointVolume_SetMute(This,bMute,pguidEventContext) \ + ( (This)->lpVtbl -> SetMute(This,bMute,pguidEventContext) ) + +#define IAudioEndpointVolume_GetMute(This,pbMute) \ + ( (This)->lpVtbl -> GetMute(This,pbMute) ) + +#define IAudioEndpointVolume_GetVolumeStepInfo(This,pnStep,pnStepCount) \ + ( (This)->lpVtbl -> GetVolumeStepInfo(This,pnStep,pnStepCount) ) + +#define IAudioEndpointVolume_VolumeStepUp(This,pguidEventContext) \ + ( (This)->lpVtbl -> VolumeStepUp(This,pguidEventContext) ) + +#define IAudioEndpointVolume_VolumeStepDown(This,pguidEventContext) \ + ( (This)->lpVtbl -> VolumeStepDown(This,pguidEventContext) ) + +#define IAudioEndpointVolume_QueryHardwareSupport(This,pdwHardwareSupportMask) \ + ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) ) + +#define IAudioEndpointVolume_GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB) \ + ( (This)->lpVtbl -> GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioEndpointVolume_INTERFACE_DEFINED__ */ + + +#ifndef __IAudioMeterInformation_INTERFACE_DEFINED__ +#define __IAudioMeterInformation_INTERFACE_DEFINED__ + +/* interface IAudioMeterInformation */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IAudioMeterInformation; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C02216F6-8C67-4B5B-9D00-D008E73E0064") + IAudioMeterInformation : public IUnknown + { + public: + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetPeakValue( + /* [out] */ float *pfPeak) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMeteringChannelCount( + /* [out] */ + __out UINT *pnChannelCount) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelsPeakValues( + /* [in] */ UINT32 u32ChannelCount, + /* [size_is][out] */ float *afPeakValues) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport( + /* [out] */ + __out DWORD *pdwHardwareSupportMask) = 0; + + }; + +#else /* C style interface */ + + typedef struct IAudioMeterInformationVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAudioMeterInformation * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAudioMeterInformation * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAudioMeterInformation * This); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetPeakValue )( + IAudioMeterInformation * This, + /* [out] */ float *pfPeak); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMeteringChannelCount )( + IAudioMeterInformation * This, + /* [out] */ + __out UINT *pnChannelCount); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelsPeakValues )( + IAudioMeterInformation * This, + /* [in] */ UINT32 u32ChannelCount, + /* [size_is][out] */ float *afPeakValues); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )( + IAudioMeterInformation * This, + /* [out] */ + __out DWORD *pdwHardwareSupportMask); + + END_INTERFACE + } IAudioMeterInformationVtbl; + + interface IAudioMeterInformation + { + CONST_VTBL struct IAudioMeterInformationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAudioMeterInformation_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAudioMeterInformation_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAudioMeterInformation_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAudioMeterInformation_GetPeakValue(This,pfPeak) \ + ( (This)->lpVtbl -> GetPeakValue(This,pfPeak) ) + +#define IAudioMeterInformation_GetMeteringChannelCount(This,pnChannelCount) \ + ( (This)->lpVtbl -> GetMeteringChannelCount(This,pnChannelCount) ) + +#define IAudioMeterInformation_GetChannelsPeakValues(This,u32ChannelCount,afPeakValues) \ + ( (This)->lpVtbl -> GetChannelsPeakValues(This,u32ChannelCount,afPeakValues) ) + +#define IAudioMeterInformation_QueryHardwareSupport(This,pdwHardwareSupportMask) \ + ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAudioMeterInformation_INTERFACE_DEFINED__ */ + + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h new file mode 100644 index 0000000000..7e07292bf3 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h @@ -0,0 +1,255 @@ +#pragma once + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#ifndef DEFINE_API_PKEY +#include +#endif + +#include + +// FMTID_FD = {904b03a2-471d-423c-a584-f3483238a146} +DEFINE_GUID(FMTID_FD, 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46); +DEFINE_API_PKEY(PKEY_FD_Visibility, VisibilityFlags, 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46, 0x00000001); // VT_UINT +#define FD_Visibility_Default 0 +#define FD_Visibility_Hidden 1 + +// FMTID_Device = {78C34FC8-104A-4aca-9EA4-524D52996E57} +DEFINE_GUID(FMTID_Device, 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57); + +DEFINE_API_PKEY(PKEY_Device_NotPresent, DeviceNotPresent , 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46, 0x00000002); // VT_UINT +DEFINE_API_PKEY(PKEY_Device_QueueSize, DeviceQueueSize , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000024); // VT_UI4 +DEFINE_API_PKEY(PKEY_Device_Status, DeviceStatus , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000025); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_Device_Comment, DeviceComment , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000026); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_Device_Model, DeviceModel , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000027); // VT_LPWSTR + +// Name: System.Device.BIOSVersion -- PKEY_Device_BIOSVersion +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) Legacy code may treat this as VT_BSTR. +// FormatID: EAEE7F1D-6A33-44D1-9441-5F46DEF23198, 9 +DEFINE_PROPERTYKEY(PKEY_Device_BIOSVersion, 0xEAEE7F1D, 0x6A33, 0x44D1, 0x94, 0x41, 0x5F, 0x46, 0xDE, 0xF2, 0x31, 0x98, 9); + +DEFINE_API_PKEY(PKEY_Write_Time, WriteTime , 0xf53b7e1c, 0x77e0, 0x4450, 0x8c, 0x5f, 0xa7, 0x6c, 0xc7, 0xfd, 0xe0, 0x58, 0x00000100); // VT_FILETIME + +#ifdef FD_XP +DEFINE_API_PKEY(PKEY_Device_InstanceId, DeviceInstanceId , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000100); // VT_LPWSTR +#endif +DEFINE_API_PKEY(PKEY_Device_Interface, DeviceInterface , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000101); // VT_CLSID + +DEFINE_API_PKEY(PKEY_ExposedIIDs, ExposedIIDs , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003002); // VT_VECTOR | VT_CLSID +DEFINE_API_PKEY(PKEY_ExposedCLSIDs, ExposedCLSIDs , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003003); // VT_VECTOR | VT_CLSID +DEFINE_API_PKEY(PKEY_InstanceValidatorClsid,InstanceValidator , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003004); // VT_CLSID + +// FMTID_WSD = {92506491-FF95-4724-A05A-5B81885A7C92} +DEFINE_GUID(FMTID_WSD, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92); + +DEFINE_API_PKEY(PKEY_WSD_AddressURI, WSD_AddressURI, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001000); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_WSD_Types, WSD_Types, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001001); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_WSD_Scopes, WSD_Scopes, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001002); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_WSD_MetadataVersion, WSD_MetadataVersion, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001003); //VT_UI8 +DEFINE_API_PKEY(PKEY_WSD_AppSeqInstanceID, WSD_AppSeqInstanceID, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001004); // VT_UI8 +DEFINE_API_PKEY(PKEY_WSD_AppSeqSessionID, WSD_AppSeqSessionID, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001005); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_WSD_AppSeqMessageNumber, WSD_AppSeqMessageNumber, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001006); // VT_UI8 +DEFINE_API_PKEY(PKEY_WSD_XAddrs, WSD_XAddrs, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00002000); // VT_LPWSTR or VT_VECTOR | VT_LPWSTR + +DEFINE_API_PKEY(PKEY_WSD_MetadataClean, WSD_MetadataClean, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00000001); // VT_BOOL +DEFINE_API_PKEY(PKEY_WSD_ServiceInfo, WSD_ServiceInfo, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00000002); // VT_VECTOR|VT_VARIANT (variants are VT_UNKNOWN) + +DEFINE_API_PKEY(PKEY_PUBSVCS_TYPE, PUBSVCS_TYPE, 0xF1B88AD3, 0x109C, 0x4FD2, 0xBA, 0x3F, 0x53, 0x5A, 0x76, 0x5F, 0x82, 0xF4, 0x00005001); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_PUBSVCS_SCOPE, PUBSVCS_SCOPE, 0x2AE2B567, 0xEECB, 0x4A3E, 0xB7, 0x53, 0x54, 0xC7, 0x25, 0x49, 0x43, 0x66, 0x00005002); // VT_LPWSTR | VT_VECTOR +DEFINE_API_PKEY(PKEY_PUBSVCS_METADATA, PUBSVCS_METADATA, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005003); // VT_LPWSTR +DEFINE_API_PKEY(PKEY_PUBSVCS_METADATA_VERSION, PUBSVCS_METADATA_VERSION, 0xC0C96C15, 0x1823, 0x4E5B, 0x93, 0x48, 0xE8, 0x25, 0x19, 0x92, 0x3F, 0x04, 0x00005004); // VT_UI8 +DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_ALLOWED, PUBSVCS_NETWORK_PROFILES_ALLOWED, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005005); // VT_VECTOR | VT_LPWSTR +DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_DENIED, PUBSVCS_NETWORK_PROFILES_DENIED, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005006); // VT_VECTOR | VT_LPWSTR +DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_DEFAULT, PUBSVCS_NETWORK_PROFILES_DEFAULT, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005007); // VT_BOOL + +// FMTID_PNPX = {656A3BB3-ECC0-43FD-8477-4AE0404A96CD} +DEFINE_GUID(FMTID_PNPX, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD); + // from Discovery messages +DEFINE_PROPERTYKEY(PKEY_PNPX_GlobalIdentity, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001000); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_Types, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001001); // VT_LPWSTR | VT_VECTOR +DEFINE_PROPERTYKEY(PKEY_PNPX_Scopes, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001002); // VT_LPWSTR | VT_VECTOR +DEFINE_PROPERTYKEY(PKEY_PNPX_XAddrs, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001003); // VT_LPWSTR | VT_VECTOR +DEFINE_PROPERTYKEY(PKEY_PNPX_MetadataVersion, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001004); // VT_UI8 +DEFINE_PROPERTYKEY(PKEY_PNPX_ID, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001005); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_RootProxy, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001006); // VT_BOOL + + // for Directed Discovery +DEFINE_PROPERTYKEY(PKEY_PNPX_RemoteAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001006); // VT_LPWSTR + + // from ThisModel metadata +DEFINE_PROPERTYKEY(PKEY_PNPX_Manufacturer, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002000); // VT_LPWSTR (localizable) +DEFINE_PROPERTYKEY(PKEY_PNPX_ManufacturerUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002001); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_ModelName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002002); // VT_LPWSTR (localizable) +DEFINE_PROPERTYKEY(PKEY_PNPX_ModelNumber, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002003); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_ModelUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002004); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_Upc, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002005); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_PresentationUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002006); // VT_LPWSTR + // from ThisDevice metadata +DEFINE_PROPERTYKEY(PKEY_PNPX_FriendlyName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003000); // VT_LPWSTR (localizable) +DEFINE_PROPERTYKEY(PKEY_PNPX_FirmwareVersion, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003001); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_SerialNumber, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003002); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_DeviceCategory, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003004); // VT_LPWSTR | VT_VECTOR + // DeviceCategory values +#define PNPX_DEVICECATEGORY_COMPUTER L"Computers" +#define PNPX_DEVICECATEGORY_INPUTDEVICE L"Input" +#define PNPX_DEVICECATEGORY_PRINTER L"Printers" +#define PNPX_DEVICECATEGORY_SCANNER L"Scanners" +#define PNPX_DEVICECATEGORY_FAX L"FAX" +#define PNPX_DEVICECATEGORY_MFP L"MFP" +#define PNPX_DEVICECATEGORY_CAMERA L"Cameras" +#define PNPX_DEVICECATEGORY_STORAGE L"Storage" +#define PNPX_DEVICECATEGORY_NETWORK_INFRASTRUCTURE L"NetworkInfrastructure" +#define PNPX_DEVICECATEGORY_DISPLAYS L"Displays" +#define PNPX_DEVICECATEGORY_MULTIMEDIA_DEVICE L"MediaDevices" +#define PNPX_DEVICECATEGORY_GAMING_DEVICE L"Gaming" +#define PNPX_DEVICECATEGORY_TELEPHONE L"Phones" +#define PNPX_DEVICECATEGORY_HOME_AUTOMATION_SYSTEM L"HomeAutomation" +#define PNPX_DEVICECATEGORY_HOME_SECURITY_SYSTEM L"HomeSecurity" +#define PNPX_DEVICECATEGORY_OTHER L"Other" +DEFINE_PROPERTYKEY(PKEY_PNPX_DeviceCategory_Desc, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003005); // VT_LPWSTR | VT_VECTOR + +DEFINE_PROPERTYKEY(PKEY_PNPX_PhysicalAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003006); // VT_UI1 | VT_VECTOR +DEFINE_PROPERTYKEY(PKEY_PNPX_NetworkInterfaceLuid, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003007); // VT_UI8 +DEFINE_PROPERTYKEY(PKEY_PNPX_NetworkInterfaceGuid, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003008); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_IpAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003009); // VT_LPWSTR | VT_VECTOR + // from Relationship metadata +DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004000); // VT_LPWSTR | VT_VECTOR +DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceId, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004001); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceTypes, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004002); // VT_LPWSTR | VT_VECTOR + // Association DB PKEYs +DEFINE_API_PKEY(PKEY_PNPX_Devnode, PnPXDevNode, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000001); // VT_BOOL +DEFINE_API_PKEY(PKEY_PNPX_AssociationState, AssociationState, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000002); // VT_UINT +DEFINE_API_PKEY(PKEY_PNPX_AssociatedInstanceId, AssociatedInstanceId, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000003); // VT_LPWSTR + // for Computer Discovery +DEFINE_PROPERTYKEY(PKEY_PNPX_DomainName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005000); // VT_LPWSTR +// Use PKEY_ComputerName (propkey.h) DEFINE_PROPERTYKEY(PKEY_PNPX_MachineName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005001); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_PNPX_ShareName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005002); // VT_LPWSTR + + // SSDP Provider custom properties +DEFINE_PROPERTYKEY(PKEY_SSDP_AltLocationInfo, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006000); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_SSDP_DevLifeTime, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006001); // VT_UI4 +DEFINE_PROPERTYKEY(PKEY_SSDP_NetworkInterface, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006002); // VT_BOOL + +// FMTID_PNPXDynamicProperty = {4FC5077E-B686-44BE-93E3-86CAFE368CCD} +DEFINE_GUID(FMTID_PNPXDynamicProperty, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD); + +DEFINE_PROPERTYKEY(PKEY_PNPX_Installable, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000001); // VT_BOOL +DEFINE_PROPERTYKEY(PKEY_PNPX_Associated, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000002); // VT_BOOL +// PKEY_PNPX_Installed to be deprecated in Longhorn Server timeframe +// this PKEY really represents Associated state +#define PKEY_PNPX_Installed PKEY_PNPX_Associated // Deprecated! Please use PKEY_PNPX_Associated +DEFINE_PROPERTYKEY(PKEY_PNPX_CompatibleTypes, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000003); // VT_LPWSTR | VT_VECTOR + + // WNET Provider properties +DEFINE_PROPERTYKEY(PKEY_WNET_Scope, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000001); // VT_UINT +DEFINE_PROPERTYKEY(PKEY_WNET_Type, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000002); // VT_UINT +DEFINE_PROPERTYKEY(PKEY_WNET_DisplayType, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000003); // VT_UINT +DEFINE_PROPERTYKEY(PKEY_WNET_Usage, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000004); // VT_UINT +DEFINE_PROPERTYKEY(PKEY_WNET_LocalName, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000005); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_WNET_RemoteName, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000006); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_WNET_Comment, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000007); // VT_LPWSTR +DEFINE_PROPERTYKEY(PKEY_WNET_Provider, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000008); // VT_LPWSTR + + + // WCN Provider properties + +DEFINE_PROPERTYKEY(PKEY_WCN_Version, 0x88190b80, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000001); // VT_UI1 +DEFINE_PROPERTYKEY(PKEY_WCN_RequestType, 0x88190b81, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000002); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_AuthType, 0x88190b82, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000003); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_EncryptType, 0x88190b83, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000004); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_ConnType, 0x88190b84, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000005); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_ConfigMethods, 0x88190b85, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000006); // VT_INT +// map WCN DeviceType to PKEY_PNPX_DeviceCategory +//DEFINE_PROPERTYKEY(PKEY_WCN_DeviceType, 0x88190b86, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000007); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_RfBand, 0x88190b87, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000008); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_AssocState, 0x88190b88, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000009); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_ConfigError, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000a); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_ConfigState, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000b); // VT_UI1 +DEFINE_PROPERTYKEY(PKEY_WCN_DevicePasswordId, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000c); // VT_INT +DEFINE_PROPERTYKEY(PKEY_WCN_OSVersion, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000d); // VT_UINT +DEFINE_PROPERTYKEY(PKEY_WCN_VendorExtension, 0x88190b8a, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000e); // VT_UI1 | VT_VECTOR +DEFINE_PROPERTYKEY(PKEY_WCN_RegistrarType, 0x88190b8b, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000f); // VT_INT + +//----------------------------------------------------------------------------- +// DriverPackage properties + +#define PKEY_DriverPackage_Model PKEY_DrvPkg_Model +#define PKEY_DriverPackage_VendorWebSite PKEY_DrvPkg_VendorWebSite +#define PKEY_DriverPackage_DetailedDescription PKEY_DrvPkg_DetailedDescription +#define PKEY_DriverPackage_DocumentationLink PKEY_DrvPkg_DocumentationLink +#define PKEY_DriverPackage_Icon PKEY_DrvPkg_Icon +#define PKEY_DriverPackage_BrandingIcon PKEY_DrvPkg_BrandingIcon + +//----------------------------------------------------------------------------- +// Hardware properties + +DEFINE_PROPERTYKEY(PKEY_Hardware_Devinst, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4097); + +// Name: System.Hardware.DisplayAttribute -- PKEY_Hardware_DisplayAttribute +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 5 +DEFINE_PROPERTYKEY(PKEY_Hardware_DisplayAttribute, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 5); + +// Name: System.Hardware.DriverDate -- PKEY_Hardware_DriverDate +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 11 +DEFINE_PROPERTYKEY(PKEY_Hardware_DriverDate, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 11); + +// Name: System.Hardware.DriverProvider -- PKEY_Hardware_DriverProvider +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 10 +DEFINE_PROPERTYKEY(PKEY_Hardware_DriverProvider, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 10); + +// Name: System.Hardware.DriverVersion -- PKEY_Hardware_DriverVersion +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 9 +DEFINE_PROPERTYKEY(PKEY_Hardware_DriverVersion, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 9); + +// Name: System.Hardware.Function -- PKEY_Hardware_Function +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4099 +DEFINE_PROPERTYKEY(PKEY_Hardware_Function, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4099); + +// Name: System.Hardware.Icon -- PKEY_Hardware_Icon +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 3 +DEFINE_PROPERTYKEY(PKEY_Hardware_Icon, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 3); + +// Name: System.Hardware.Image -- PKEY_Hardware_Image +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4098 +DEFINE_PROPERTYKEY(PKEY_Hardware_Image, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4098); + +// Name: System.Hardware.Manufacturer -- PKEY_Hardware_Manufacturer +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 6 +DEFINE_PROPERTYKEY(PKEY_Hardware_Manufacturer, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 6); + +// Name: System.Hardware.Model -- PKEY_Hardware_Model +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 7 +DEFINE_PROPERTYKEY(PKEY_Hardware_Model, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 7); + +// Name: System.Hardware.Name -- PKEY_Hardware_Name +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 2 +DEFINE_PROPERTYKEY(PKEY_Hardware_Name, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 2); + +// Name: System.Hardware.SerialNumber -- PKEY_Hardware_SerialNumber +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 8 +DEFINE_PROPERTYKEY(PKEY_Hardware_SerialNumber, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 8); + +// Name: System.Hardware.ShellAttributes -- PKEY_Hardware_ShellAttributes +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4100 +DEFINE_PROPERTYKEY(PKEY_Hardware_ShellAttributes, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4100); + +// Name: System.Hardware.Status -- PKEY_Hardware_Status +// Type: Unspecified -- VT_NULL +// FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4096 +DEFINE_PROPERTYKEY(PKEY_Hardware_Status, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4096); + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/ks.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ks.h new file mode 100644 index 0000000000..2261e6c273 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ks.h @@ -0,0 +1,3666 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _KS_ +#define _KS_ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#ifndef __MINGW_EXTENSION +#if defined(__GNUC__) || defined(__GNUG__) +#define __MINGW_EXTENSION __extension__ +#else +#define __MINGW_EXTENSION +#endif +#endif + +#ifdef __TCS__ +#define _KS_NO_ANONYMOUS_STRUCTURES_ 1 +#endif + +#ifdef _KS_NO_ANONYMOUS_STRUCTURES_ +#define _KS_ANON_STRUCT(X) struct X +#else +#define _KS_ANON_STRUCT(X) __MINGW_EXTENSION struct +#endif + +#ifndef _NTRTL_ +#ifndef DEFINE_GUIDEX +#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name +#endif +#ifndef STATICGUIDOF +#define STATICGUIDOF(guid) STATIC_##guid +#endif +#endif /* _NTRTL_ */ + +#ifndef SIZEOF_ARRAY +#define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0])) +#endif + +#define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n) +#define DEFINE_GUIDNAMED(n) n + +#define STATIC_GUID_NULL \ + 0x00000000L,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000",GUID_NULL); +#define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL) + +#define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS,0x000,METHOD_NEITHER,FILE_ANY_ACCESS) +#define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x001,METHOD_NEITHER,FILE_ANY_ACCESS) +#define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x002,METHOD_NEITHER,FILE_ANY_ACCESS) +#define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS,0x003,METHOD_NEITHER,FILE_ANY_ACCESS) +#define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS,0x004,METHOD_NEITHER,FILE_WRITE_ACCESS) +#define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS,0x005,METHOD_NEITHER,FILE_READ_ACCESS) +#define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS,0x006,METHOD_NEITHER,FILE_ANY_ACCESS) + +typedef enum { + KSRESET_BEGIN, + KSRESET_END +} KSRESET; + +typedef enum { + KSSTATE_STOP, + KSSTATE_ACQUIRE, + KSSTATE_PAUSE, + KSSTATE_RUN +} KSSTATE,*PKSSTATE; + +#define KSPRIORITY_LOW 0x00000001 +#define KSPRIORITY_NORMAL 0x40000000 +#define KSPRIORITY_HIGH 0x80000000 +#define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF + +typedef struct { + ULONG PriorityClass; + ULONG PrioritySubClass; +} KSPRIORITY,*PKSPRIORITY; + +typedef struct { + __MINGW_EXTENSION union { + _KS_ANON_STRUCT(_IDENTIFIER) + { + GUID Set; + ULONG Id; + ULONG Flags; + }; + LONGLONG Alignment; + }; +} KSIDENTIFIER,*PKSIDENTIFIER; + +typedef KSIDENTIFIER KSPROPERTY,*PKSPROPERTY,KSMETHOD,*PKSMETHOD,KSEVENT,*PKSEVENT; + +#define KSMETHOD_TYPE_NONE 0x00000000 +#define KSMETHOD_TYPE_READ 0x00000001 +#define KSMETHOD_TYPE_WRITE 0x00000002 +#define KSMETHOD_TYPE_MODIFY 0x00000003 +#define KSMETHOD_TYPE_SOURCE 0x00000004 + +#define KSMETHOD_TYPE_SEND 0x00000001 +#define KSMETHOD_TYPE_SETSUPPORT 0x00000100 +#define KSMETHOD_TYPE_BASICSUPPORT 0x00000200 + +#define KSMETHOD_TYPE_TOPOLOGY 0x10000000 + +#define KSPROPERTY_TYPE_GET 0x00000001 +#define KSPROPERTY_TYPE_SET 0x00000002 +#define KSPROPERTY_TYPE_SETSUPPORT 0x00000100 +#define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200 +#define KSPROPERTY_TYPE_RELATIONS 0x00000400 +#define KSPROPERTY_TYPE_SERIALIZESET 0x00000800 +#define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000 +#define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000 +#define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000 +#define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000 +#define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000 + +#define KSPROPERTY_TYPE_TOPOLOGY 0x10000000 + +typedef struct { + KSPROPERTY Property; + ULONG NodeId; + ULONG Reserved; +} KSP_NODE,*PKSP_NODE; + +typedef struct { + KSMETHOD Method; + ULONG NodeId; + ULONG Reserved; +} KSM_NODE,*PKSM_NODE; + +typedef struct { + KSEVENT Event; + ULONG NodeId; + ULONG Reserved; +} KSE_NODE,*PKSE_NODE; + +#define STATIC_KSPROPTYPESETID_General \ + 0x97E99BA0L,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000",KSPROPTYPESETID_General); +#define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General) + +typedef struct { + ULONG Size; + ULONG Count; +} KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM; + +typedef struct { + ULONG AccessFlags; + ULONG DescriptionSize; + KSIDENTIFIER PropTypeSet; + ULONG MembersListCount; + ULONG Reserved; +} KSPROPERTY_DESCRIPTION,*PKSPROPERTY_DESCRIPTION; + +#define KSPROPERTY_MEMBER_RANGES 0x00000001 +#define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002 +#define KSPROPERTY_MEMBER_VALUES 0x00000003 + +#define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001 +#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002 +#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004 + +typedef struct { + ULONG MembersFlags; + ULONG MembersSize; + ULONG MembersCount; + ULONG Flags; +} KSPROPERTY_MEMBERSHEADER,*PKSPROPERTY_MEMBERSHEADER; + +typedef union { + _KS_ANON_STRUCT(_SIGNED) + { + LONG SignedMinimum; + LONG SignedMaximum; + }; + _KS_ANON_STRUCT(_UNSIGNED) + { + ULONG UnsignedMinimum; + ULONG UnsignedMaximum; + }; +} KSPROPERTY_BOUNDS_LONG,*PKSPROPERTY_BOUNDS_LONG; + +typedef union { + _KS_ANON_STRUCT(_SIGNED64) + { + LONGLONG SignedMinimum; + LONGLONG SignedMaximum; + }; + _KS_ANON_STRUCT(_UNSIGNED64) + { + DWORDLONG UnsignedMinimum; + DWORDLONG UnsignedMaximum; + }; +} KSPROPERTY_BOUNDS_LONGLONG,*PKSPROPERTY_BOUNDS_LONGLONG; + +typedef struct { + ULONG SteppingDelta; + ULONG Reserved; + KSPROPERTY_BOUNDS_LONG Bounds; +} KSPROPERTY_STEPPING_LONG,*PKSPROPERTY_STEPPING_LONG; + +typedef struct { + DWORDLONG SteppingDelta; + KSPROPERTY_BOUNDS_LONGLONG Bounds; +} KSPROPERTY_STEPPING_LONGLONG,*PKSPROPERTY_STEPPING_LONGLONG; + +#if defined(_NTDDK_) +typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR; +typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH; +typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE; +typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY; +typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR; +typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH; +typedef struct _KSFILTER KSFILTER, *PKSFILTER; +typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX; +typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, *PKSPIN_DISPATCH; +typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH; +typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH; +typedef struct _KSPIN KSPIN, *PKSPIN; +typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR; +typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET; +typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER; +typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING; +typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN; +typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY; +#endif /* _NTDDK_ */ + +typedef PVOID PKSWORKER; + + +typedef struct { + ULONG NotificationType; + __MINGW_EXTENSION union { + struct { + HANDLE Event; + ULONG_PTR Reserved[2]; + } EventHandle; + struct { + HANDLE Semaphore; + ULONG Reserved; + LONG Adjustment; + } SemaphoreHandle; +#if defined(_NTDDK_) + struct { + PVOID Event; + KPRIORITY Increment; + ULONG_PTR Reserved; + } EventObject; + struct { + PVOID Semaphore; + KPRIORITY Increment; + LONG Adjustment; + } SemaphoreObject; + struct { + PKDPC Dpc; + ULONG ReferenceCount; + ULONG_PTR Reserved; + } Dpc; + struct { + PWORK_QUEUE_ITEM WorkQueueItem; + WORK_QUEUE_TYPE WorkQueueType; + ULONG_PTR Reserved; + } WorkItem; + struct { + PWORK_QUEUE_ITEM WorkQueueItem; + PKSWORKER KsWorkerObject; + ULONG_PTR Reserved; + } KsWorkItem; +#endif /* _NTDDK_ */ + struct { + PVOID Unused; + LONG_PTR Alignment[2]; + } Alignment; + }; +} KSEVENTDATA,*PKSEVENTDATA; + +#define KSEVENTF_EVENT_HANDLE 0x00000001 +#define KSEVENTF_SEMAPHORE_HANDLE 0x00000002 +#if defined(_NTDDK_) +#define KSEVENTF_EVENT_OBJECT 0x00000004 +#define KSEVENTF_SEMAPHORE_OBJECT 0x00000008 +#define KSEVENTF_DPC 0x00000010 +#define KSEVENTF_WORKITEM 0x00000020 +#define KSEVENTF_KSWORKITEM 0x00000080 +#endif /* _NTDDK_ */ + +#define KSEVENT_TYPE_ENABLE 0x00000001 +#define KSEVENT_TYPE_ONESHOT 0x00000002 +#define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004 +#define KSEVENT_TYPE_SETSUPPORT 0x00000100 +#define KSEVENT_TYPE_BASICSUPPORT 0x00000200 +#define KSEVENT_TYPE_QUERYBUFFER 0x00000400 + +#define KSEVENT_TYPE_TOPOLOGY 0x10000000 + +typedef struct { + KSEVENT Event; + PKSEVENTDATA EventData; + PVOID Reserved; +} KSQUERYBUFFER,*PKSQUERYBUFFER; + +typedef struct { + ULONG Size; + ULONG Flags; + __MINGW_EXTENSION union { + HANDLE ObjectHandle; + PVOID ObjectPointer; + }; + PVOID Reserved; + KSEVENT Event; + KSEVENTDATA EventData; +} KSRELATIVEEVENT; + +#define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001 +#define KSRELATIVEEVENT_FLAG_POINTER 0x00000002 + +typedef struct { + KSEVENTDATA EventData; + LONGLONG MarkTime; +} KSEVENT_TIME_MARK,*PKSEVENT_TIME_MARK; + +typedef struct { + KSEVENTDATA EventData; + LONGLONG TimeBase; + LONGLONG Interval; +} KSEVENT_TIME_INTERVAL,*PKSEVENT_TIME_INTERVAL; + +typedef struct { + LONGLONG TimeBase; + LONGLONG Interval; +} KSINTERVAL,*PKSINTERVAL; + +#define STATIC_KSPROPSETID_General \ + 0x1464EDA5L,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196",KSPROPSETID_General); +#define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General) + +typedef enum { + KSPROPERTY_GENERAL_COMPONENTID +} KSPROPERTY_GENERAL; + +typedef struct { + GUID Manufacturer; + GUID Product; + GUID Component; + GUID Name; + ULONG Version; + ULONG Revision; +} KSCOMPONENTID,*PKSCOMPONENTID; + +#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_GENERAL_COMPONENTID, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSCOMPONENTID), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define STATIC_KSMETHODSETID_StreamIo \ + 0x65D003CAL,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196",KSMETHODSETID_StreamIo); +#define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo) + +typedef enum { + KSMETHOD_STREAMIO_READ, + KSMETHOD_STREAMIO_WRITE +} KSMETHOD_STREAMIO; + +#define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler) \ + DEFINE_KSMETHOD_ITEM( \ + KSMETHOD_STREAMIO_READ, \ + KSMETHOD_TYPE_WRITE, \ + (Handler), \ + sizeof(KSMETHOD), \ + 0, \ + NULL) + +#define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler) \ + DEFINE_KSMETHOD_ITEM( \ + KSMETHOD_STREAMIO_WRITE, \ + KSMETHOD_TYPE_READ, \ + (Handler), \ + sizeof(KSMETHOD), \ + 0, \ + NULL) + +#define STATIC_KSPROPSETID_MediaSeeking \ + 0xEE904F0CL,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196",KSPROPSETID_MediaSeeking); +#define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking) + +typedef enum { + KSPROPERTY_MEDIASEEKING_CAPABILITIES, + KSPROPERTY_MEDIASEEKING_FORMATS, + KSPROPERTY_MEDIASEEKING_TIMEFORMAT, + KSPROPERTY_MEDIASEEKING_POSITION, + KSPROPERTY_MEDIASEEKING_STOPPOSITION, + KSPROPERTY_MEDIASEEKING_POSITIONS, + KSPROPERTY_MEDIASEEKING_DURATION, + KSPROPERTY_MEDIASEEKING_AVAILABLE, + KSPROPERTY_MEDIASEEKING_PREROLL, + KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT +} KSPROPERTY_MEDIASEEKING; + +typedef enum { + KS_SEEKING_NoPositioning, + KS_SEEKING_AbsolutePositioning, + KS_SEEKING_RelativePositioning, + KS_SEEKING_IncrementalPositioning, + KS_SEEKING_PositioningBitsMask = 0x3, + KS_SEEKING_SeekToKeyFrame, + KS_SEEKING_ReturnTime = 0x8 +} KS_SEEKING_FLAGS; + +typedef enum { + KS_SEEKING_CanSeekAbsolute = 0x1, + KS_SEEKING_CanSeekForwards = 0x2, + KS_SEEKING_CanSeekBackwards = 0x4, + KS_SEEKING_CanGetCurrentPos = 0x8, + KS_SEEKING_CanGetStopPos = 0x10, + KS_SEEKING_CanGetDuration = 0x20, + KS_SEEKING_CanPlayBackwards = 0x40 +} KS_SEEKING_CAPABILITIES; + +typedef struct { + LONGLONG Current; + LONGLONG Stop; + KS_SEEKING_FLAGS CurrentFlags; + KS_SEEKING_FLAGS StopFlags; +} KSPROPERTY_POSITIONS,*PKSPROPERTY_POSITIONS; + +typedef struct { + LONGLONG Earliest; + LONGLONG Latest; +} KSPROPERTY_MEDIAAVAILABLE,*PKSPROPERTY_MEDIAAVAILABLE; + +typedef struct { + KSPROPERTY Property; + GUID SourceFormat; + GUID TargetFormat; + LONGLONG Time; +} KSP_TIMEFORMAT,*PKSP_TIMEFORMAT; + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_CAPABILITIES, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KS_SEEKING_CAPABILITIES), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_FORMATS, \ + (Handler), \ + sizeof(KSPROPERTY), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_TIMEFORMAT, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(GUID), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_POSITION, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_STOPPOSITION, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_POSITIONS, \ + NULL, \ + sizeof(KSPROPERTY), \ + sizeof(KSPROPERTY_POSITIONS), \ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_DURATION, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_AVAILABLE, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSPROPERTY_MEDIAAVAILABLE), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_PREROLL, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \ + (Handler), \ + sizeof(KSP_TIMEFORMAT), \ + sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define STATIC_KSPROPSETID_Topology \ + 0x720D4AC0L,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000",KSPROPSETID_Topology); +#define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology) + +typedef enum { + KSPROPERTY_TOPOLOGY_CATEGORIES, + KSPROPERTY_TOPOLOGY_NODES, + KSPROPERTY_TOPOLOGY_CONNECTIONS, + KSPROPERTY_TOPOLOGY_NAME +} KSPROPERTY_TOPOLOGY; + +#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_TOPOLOGY_CATEGORIES, \ + (Handler), \ + sizeof(KSPROPERTY), \ + 0, \ + NULL, NULL, 0,NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_TOPOLOGY_NODES, \ + (Handler), \ + sizeof(KSPROPERTY), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_TOPOLOGY_CONNECTIONS, \ + (Handler), \ + sizeof(KSPROPERTY), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_TOPOLOGY_NAME, \ + (Handler), \ + sizeof(KSP_NODE), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet,Handler) \ +DEFINE_KSPROPERTY_TABLE(TopologySet) { \ + DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler), \ + DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler), \ + DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler), \ + DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \ +} + +#define STATIC_KSCATEGORY_BRIDGE \ + 0x085AFF00L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000",KSCATEGORY_BRIDGE); +#define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE) + +#define STATIC_KSCATEGORY_CAPTURE \ + 0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_CAPTURE); +#define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE) + +#define STATIC_KSCATEGORY_RENDER \ + 0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_RENDER); +#define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER) + +#define STATIC_KSCATEGORY_MIXER \ + 0xAD809C00L,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000",KSCATEGORY_MIXER); +#define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER) + +#define STATIC_KSCATEGORY_SPLITTER \ + 0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_SPLITTER); +#define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER) + +#define STATIC_KSCATEGORY_DATACOMPRESSOR \ + 0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATACOMPRESSOR); +#define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR) + +#define STATIC_KSCATEGORY_DATADECOMPRESSOR \ + 0x2721AE20L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATADECOMPRESSOR); +#define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR) + +#define STATIC_KSCATEGORY_DATATRANSFORM \ + 0x2EB07EA0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATATRANSFORM); +#define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM) + +#define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \ + 0xCF1DDA2CL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_COMMUNICATIONSTRANSFORM); +#define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM) + +#define STATIC_KSCATEGORY_INTERFACETRANSFORM \ + 0xCF1DDA2DL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_INTERFACETRANSFORM); +#define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM) + +#define STATIC_KSCATEGORY_MEDIUMTRANSFORM \ + 0xCF1DDA2EL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_MEDIUMTRANSFORM); +#define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM) + +#define STATIC_KSCATEGORY_FILESYSTEM \ + 0x760FED5EL,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196",KSCATEGORY_FILESYSTEM); +#define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM) + +#define STATIC_KSCATEGORY_CLOCK \ + 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSCATEGORY_CLOCK); +#define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK) + +#define STATIC_KSCATEGORY_PROXY \ + 0x97EBAACAL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_PROXY); +#define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY) + +#define STATIC_KSCATEGORY_QUALITY \ + 0x97EBAACBL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_QUALITY); +#define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY) + +typedef struct { + ULONG FromNode; + ULONG FromNodePin; + ULONG ToNode; + ULONG ToNodePin; +} KSTOPOLOGY_CONNECTION,*PKSTOPOLOGY_CONNECTION; + +typedef struct { + ULONG CategoriesCount; + const GUID *Categories; + ULONG TopologyNodesCount; + const GUID *TopologyNodes; + ULONG TopologyConnectionsCount; + const KSTOPOLOGY_CONNECTION *TopologyConnections; + const GUID *TopologyNodesNames; + ULONG Reserved; +} KSTOPOLOGY,*PKSTOPOLOGY; + +#define KSFILTER_NODE ((ULONG)-1) +#define KSALL_NODES ((ULONG)-1) + +typedef struct { + ULONG CreateFlags; + ULONG Node; +} KSNODE_CREATE,*PKSNODE_CREATE; + +#define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL +#define KSTIME_FORMAT_NONE GUID_NULL + +#define STATIC_KSTIME_FORMAT_FRAME \ + 0x7b785570L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 +DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FRAME); +#define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME) + +#define STATIC_KSTIME_FORMAT_BYTE \ + 0x7b785571L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 +DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_BYTE); +#define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE) + +#define STATIC_KSTIME_FORMAT_SAMPLE \ + 0x7b785572L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 +DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_SAMPLE); +#define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE) + +#define STATIC_KSTIME_FORMAT_FIELD \ + 0x7b785573L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 +DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FIELD); +#define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD) + +#define STATIC_KSTIME_FORMAT_MEDIA_TIME \ + 0x7b785574L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 +DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_MEDIA_TIME); +#define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME) + +typedef KSIDENTIFIER KSPIN_INTERFACE,*PKSPIN_INTERFACE; + +#define STATIC_KSINTERFACESETID_Standard \ + 0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000",KSINTERFACESETID_Standard); +#define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard) + +typedef enum { + KSINTERFACE_STANDARD_STREAMING, + KSINTERFACE_STANDARD_LOOPED_STREAMING, + KSINTERFACE_STANDARD_CONTROL +} KSINTERFACE_STANDARD; + +#define STATIC_KSINTERFACESETID_FileIo \ + 0x8C6F932CL,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196",KSINTERFACESETID_FileIo); +#define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo) + +typedef enum { + KSINTERFACE_FILEIO_STREAMING +} KSINTERFACE_FILEIO; + +#define KSMEDIUM_TYPE_ANYINSTANCE 0 + +#define STATIC_KSMEDIUMSETID_Standard \ + 0x4747B320L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000",KSMEDIUMSETID_Standard); +#define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard) + +#define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE + +#define STATIC_KSPROPSETID_Pin \ + 0x8C134960L,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000",KSPROPSETID_Pin); +#define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin) + +typedef enum { + KSPROPERTY_PIN_CINSTANCES, + KSPROPERTY_PIN_CTYPES, + KSPROPERTY_PIN_DATAFLOW, + KSPROPERTY_PIN_DATARANGES, + KSPROPERTY_PIN_DATAINTERSECTION, + KSPROPERTY_PIN_INTERFACES, + KSPROPERTY_PIN_MEDIUMS, + KSPROPERTY_PIN_COMMUNICATION, + KSPROPERTY_PIN_GLOBALCINSTANCES, + KSPROPERTY_PIN_NECESSARYINSTANCES, + KSPROPERTY_PIN_PHYSICALCONNECTION, + KSPROPERTY_PIN_CATEGORY, + KSPROPERTY_PIN_NAME, + KSPROPERTY_PIN_CONSTRAINEDDATARANGES, + KSPROPERTY_PIN_PROPOSEDATAFORMAT +} KSPROPERTY_PIN; + +typedef struct { + KSPROPERTY Property; + ULONG PinId; + ULONG Reserved; +} KSP_PIN,*PKSP_PIN; + +#define KSINSTANCE_INDETERMINATE ((ULONG)-1) + +typedef struct { + ULONG PossibleCount; + ULONG CurrentCount; +} KSPIN_CINSTANCES,*PKSPIN_CINSTANCES; + +typedef enum { + KSPIN_DATAFLOW_IN = 1, + KSPIN_DATAFLOW_OUT +} KSPIN_DATAFLOW,*PKSPIN_DATAFLOW; + +#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0 +#define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION) +#define KSDATAFORMAT_BIT_ATTRIBUTES 1 +#define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES) + +#define KSDATARANGE_BIT_ATTRIBUTES 1 +#define KSDATARANGE_ATTRIBUTES (1 << KSDATARANGE_BIT_ATTRIBUTES) +#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2 +#define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES) + +typedef union { + __MINGW_EXTENSION struct { + ULONG FormatSize; + ULONG Flags; + ULONG SampleSize; + ULONG Reserved; + GUID MajorFormat; + GUID SubFormat; + GUID Specifier; + }; + LONGLONG Alignment; +} KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE; + +#define KSATTRIBUTE_REQUIRED 0x00000001 + +typedef struct { + ULONG Size; + ULONG Flags; + GUID Attribute; +} KSATTRIBUTE,*PKSATTRIBUTE; + +#if defined(_NTDDK_) +typedef struct { + ULONG Count; + PKSATTRIBUTE *Attributes; +} KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST; +#endif /* _NTDDK_ */ + +typedef enum { + KSPIN_COMMUNICATION_NONE, + KSPIN_COMMUNICATION_SINK, + KSPIN_COMMUNICATION_SOURCE, + KSPIN_COMMUNICATION_BOTH, + KSPIN_COMMUNICATION_BRIDGE +} KSPIN_COMMUNICATION,*PKSPIN_COMMUNICATION; + +typedef KSIDENTIFIER KSPIN_MEDIUM,*PKSPIN_MEDIUM; + +typedef struct { + KSPIN_INTERFACE Interface; + KSPIN_MEDIUM Medium; + ULONG PinId; + HANDLE PinToHandle; + KSPRIORITY Priority; +} KSPIN_CONNECT,*PKSPIN_CONNECT; + +typedef struct { + ULONG Size; + ULONG Pin; + WCHAR SymbolicLinkName[1]; +} KSPIN_PHYSICALCONNECTION,*PKSPIN_PHYSICALCONNECTION; + +#if defined(_NTDDK_) +typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin, + PKSDATARANGE DataRange, + PVOID Data); +typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp, + PKSP_PIN Pin, + PKSDATARANGE DataRange, + PKSDATARANGE MatchingDataRange, + ULONG DataBufferSize, + PVOID Data, + PULONG DataSize); +#endif /* _NTDDK_ */ + +#define DEFINE_KSPIN_INTERFACE_TABLE(tablename) \ + const KSPIN_INTERFACE tablename[] = + +#define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace) \ + { \ + STATICGUIDOF(guid), \ + (_interFace), \ + 0 \ + } + +#define DEFINE_KSPIN_MEDIUM_TABLE(tablename) \ + const KSPIN_MEDIUM tablename[] = + +#define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium) \ + DEFINE_KSPIN_INTERFACE_ITEM(guid,medium) + +#define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_CINSTANCES, \ + (Handler), \ + sizeof(KSP_PIN), \ + sizeof(KSPIN_CINSTANCES), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_CTYPES, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(ULONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_DATAFLOW, \ + (Handler), \ + sizeof(KSP_PIN), \ + sizeof(KSPIN_DATAFLOW), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_DATARANGES, \ + (Handler), \ + sizeof(KSP_PIN), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_DATAINTERSECTION, \ + (Handler), \ + sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_INTERFACES, \ + (Handler), \ + sizeof(KSP_PIN), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_MEDIUMS, \ + (Handler), \ + sizeof(KSP_PIN), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_COMMUNICATION, \ + (Handler), \ + sizeof(KSP_PIN), \ + sizeof(KSPIN_COMMUNICATION), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_GLOBALCINSTANCES, \ + (Handler), \ + sizeof(KSP_PIN), \ + sizeof(KSPIN_CINSTANCES), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_NECESSARYINSTANCES, \ + (Handler), \ + sizeof(KSP_PIN), \ + sizeof(ULONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_PHYSICALCONNECTION, \ + (Handler), \ + sizeof(KSP_PIN), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_CATEGORY, \ + (Handler), \ + sizeof(KSP_PIN), \ + sizeof(GUID), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_NAME, \ + (Handler), \ + sizeof(KSP_PIN), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_CONSTRAINEDDATARANGES, \ + (Handler), \ + sizeof(KSP_PIN), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_PIN_PROPOSEDATAFORMAT, \ + NULL, \ + sizeof(KSP_PIN), \ + sizeof(KSDATAFORMAT), \ + (Handler), NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_PINSET(PinSet,PropGeneral,PropInstances,PropIntersection) \ +DEFINE_KSPROPERTY_TABLE(PinSet) { \ + DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \ + DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \ + DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral) \ +} + +#define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,PropGeneral,PropInstances,PropIntersection) \ +DEFINE_KSPROPERTY_TABLE(PinSet) { \ + DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \ + DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \ + DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral), \ + DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral) \ +} + +#define STATIC_KSNAME_Filter \ + 0x9b365890L,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4 +DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4",KSNAME_Filter); +#define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter) + +#define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}" + +#define STATIC_KSNAME_Pin \ + 0x146F1A80L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000",KSNAME_Pin); +#define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin) + +#define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}" + +#define STATIC_KSNAME_Clock \ + 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSNAME_Clock); +#define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock) + +#define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}" + +#define STATIC_KSNAME_Allocator \ + 0x642F5D00L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000",KSNAME_Allocator); +#define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator) + +#define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}" + +#define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}" + +#define STATIC_KSNAME_TopologyNode \ + 0x0621061AL,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196",KSNAME_TopologyNode); +#define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode) + +#define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}" + +#if defined(_NTDDK_) +typedef struct { + ULONG InterfacesCount; + const KSPIN_INTERFACE *Interfaces; + ULONG MediumsCount; + const KSPIN_MEDIUM *Mediums; + ULONG DataRangesCount; + const PKSDATARANGE *DataRanges; + KSPIN_DATAFLOW DataFlow; + KSPIN_COMMUNICATION Communication; + const GUID *Category; + const GUID *Name; + __MINGW_EXTENSION union { + LONGLONG Reserved; + __MINGW_EXTENSION struct { + ULONG ConstrainedDataRangesCount; + PKSDATARANGE *ConstrainedDataRanges; + }; + }; +} KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR; +typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR; + +#define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename) \ + const KSPIN_DESCRIPTOR tablename[] = + +#define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\ +{ \ + InterfacesCount, Interfaces, MediumsCount, Mediums, \ + DataRangesCount, DataRanges, DataFlow, Communication, \ + NULL, NULL, 0 \ +} + +#define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\ +{ \ + InterfacesCount, Interfaces, MediumsCount, Mediums, \ + DataRangesCount, DataRanges, DataFlow, Communication, \ + Category, Name, 0 \ +} +#endif /* _NTDDK_ */ + +#define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL +#define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL + +#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL +#define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL + +#define STATIC_KSDATAFORMAT_TYPE_STREAM \ + 0xE436EB83L,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70 +DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_TYPE_STREAM); +#define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM) + +#define STATIC_KSDATAFORMAT_SUBTYPE_NONE \ + 0xE436EB8EL,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70 +DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_SUBTYPE_NONE); +#define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE) + +#define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL +#define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL + +#define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME \ + 0xAA797B40L,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SPECIFIER_FILENAME); +#define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME) + +#define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE \ + 0x65E8773CL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196",KSDATAFORMAT_SPECIFIER_FILEHANDLE); +#define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE) + +#define STATIC_KSDATAFORMAT_SPECIFIER_NONE \ + 0x0F6417D6L,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196",KSDATAFORMAT_SPECIFIER_NONE); +#define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE) + +#define STATIC_KSPROPSETID_Quality \ + 0xD16AD380L,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000",KSPROPSETID_Quality); +#define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality) + +typedef enum { + KSPROPERTY_QUALITY_REPORT, + KSPROPERTY_QUALITY_ERROR +} KSPROPERTY_QUALITY; + +#define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_QUALITY_REPORT, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(KSQUALITY), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_QUALITY_ERROR, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(KSERROR), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define STATIC_KSPROPSETID_Connection \ + 0x1D58C920L,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000",KSPROPSETID_Connection); +#define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection) + +typedef enum { + KSPROPERTY_CONNECTION_STATE, + KSPROPERTY_CONNECTION_PRIORITY, + KSPROPERTY_CONNECTION_DATAFORMAT, + KSPROPERTY_CONNECTION_ALLOCATORFRAMING, + KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT, + KSPROPERTY_CONNECTION_ACQUIREORDERING, + KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, + KSPROPERTY_CONNECTION_STARTAT +} KSPROPERTY_CONNECTION; + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_STATE, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(KSSTATE), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_PRIORITY, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(KSPRIORITY), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_DATAFORMAT, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + 0, \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_ALLOCATORFRAMING, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSALLOCATOR_FRAMING), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\ + (Handler), \ + sizeof(KSPROPERTY), \ + 0, \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\ + NULL, \ + sizeof(KSPROPERTY), \ + sizeof(KSDATAFORMAT), \ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_ACQUIREORDERING, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(int), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CONNECTION_STARTAT, \ + NULL, \ + sizeof(KSPROPERTY), \ + sizeof(KSRELATIVEEVENT), \ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001 +#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002 +#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004 +#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008 +#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000 + +#define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001 +#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002 +#define KSALLOCATOR_OPTIONF_VALID 0x00000003 + +#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010 +#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020 +#define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040 +#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080 +#define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100 +#define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200 +#define KSALLOCATOR_FLAG_CYCLE 0x00000400 +#define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800 +#define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000 +#define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000 + +typedef struct { + __MINGW_EXTENSION union { + ULONG OptionsFlags; + ULONG RequirementsFlags; + }; +#if defined(_NTDDK_) + POOL_TYPE PoolType; +#else + ULONG PoolType; +#endif /* _NTDDK_ */ + ULONG Frames; + ULONG FrameSize; + ULONG FileAlignment; + ULONG Reserved; +} KSALLOCATOR_FRAMING,*PKSALLOCATOR_FRAMING; + +#if defined(_NTDDK_) +typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context); +typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer); +typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext, + PKSALLOCATOR_FRAMING AllocatorFraming, + PVOID* Context); +typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context); +#endif /* _NTDDK_ */ + +typedef struct { + ULONG MinFrameSize; + ULONG MaxFrameSize; + ULONG Stepping; +} KS_FRAMING_RANGE,*PKS_FRAMING_RANGE; + +typedef struct { + KS_FRAMING_RANGE Range; + ULONG InPlaceWeight; + ULONG NotInPlaceWeight; +} KS_FRAMING_RANGE_WEIGHTED,*PKS_FRAMING_RANGE_WEIGHTED; + +typedef struct { + ULONG RatioNumerator; + ULONG RatioDenominator; + ULONG RatioConstantMargin; +} KS_COMPRESSION,*PKS_COMPRESSION; + +typedef struct { + GUID MemoryType; + GUID BusType; + ULONG MemoryFlags; + ULONG BusFlags; + ULONG Flags; + ULONG Frames; + ULONG FileAlignment; + ULONG MemoryTypeWeight; + KS_FRAMING_RANGE PhysicalRange; + KS_FRAMING_RANGE_WEIGHTED FramingRange; +} KS_FRAMING_ITEM,*PKS_FRAMING_ITEM; + +typedef struct { + ULONG CountItems; + ULONG PinFlags; + KS_COMPRESSION OutputCompression; + ULONG PinWeight; + KS_FRAMING_ITEM FramingItem[1]; +} KSALLOCATOR_FRAMING_EX,*PKSALLOCATOR_FRAMING_EX; + +#define KSMEMORY_TYPE_WILDCARD GUID_NULL +#define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL + +#define KSMEMORY_TYPE_DONT_CARE GUID_NULL +#define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL + +#define KS_TYPE_DONT_CARE GUID_NULL +#define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL + +#define STATIC_KSMEMORY_TYPE_SYSTEM \ + 0x091bb638L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02 +DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_SYSTEM); +#define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM) + +#define STATIC_KSMEMORY_TYPE_USER \ + 0x8cb0fc28L,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 +DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802",KSMEMORY_TYPE_USER); +#define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER) + +#define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \ + 0xd833f8f8L,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 +DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_PAGED); +#define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED) + +#define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \ + 0x4a6d5fc4L,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 +DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_NONPAGED); +#define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED) + +#define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \ + 0x091bb639L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02 +DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_DEVICE_UNKNOWN); +#define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN) + +#define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \ +const KSALLOCATOR_FRAMING_EX FramingExName = \ +{ \ + 1, \ + 0, \ + { \ + 1, \ + 1, \ + 0 \ + }, \ + 0, \ + { \ + { \ + MemoryType, \ + STATIC_KS_TYPE_DONT_CARE, \ + 0, \ + 0, \ + Flags, \ + Frames, \ + Alignment, \ + 0, \ + { \ + 0, \ + (ULONG)-1, \ + 1 \ + }, \ + { \ + { \ + MinFrameSize, \ + MaxFrameSize, \ + 1 \ + }, \ + 0, \ + 0 \ + } \ + } \ + } \ +} + +#define SetDefaultKsCompression(KsCompressionPointer) \ +{ \ + KsCompressionPointer->RatioNumerator = 1; \ + KsCompressionPointer->RatioDenominator = 1; \ + KsCompressionPointer->RatioConstantMargin = 0; \ +} + +#define SetDontCareKsFramingRange(KsFramingRangePointer) \ +{ \ + KsFramingRangePointer->MinFrameSize = 0; \ + KsFramingRangePointer->MaxFrameSize = (ULONG) -1; \ + KsFramingRangePointer->Stepping = 1; \ +} + +#define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \ +{ \ + KsFramingRangePointer->MinFrameSize = P_MinFrameSize; \ + KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize; \ + KsFramingRangePointer->Stepping = 1; \ +} + +#define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \ +{ \ + KS_FRAMING_RANGE *KsFramingRange = \ + &KsFramingRangeWeightedPointer->Range; \ + SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\ + KsFramingRangeWeightedPointer->InPlaceWeight = 0; \ + KsFramingRangeWeightedPointer->NotInPlaceWeight = 0; \ +} + +#define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \ +{ \ + KS_COMPRESSION *KsCompression = \ + &FramingExPointer->OutputCompression; \ + KS_FRAMING_RANGE *KsFramingRange = \ + &FramingExPointer->FramingItem[0].PhysicalRange;\ + KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = \ + &FramingExPointer->FramingItem[0].FramingRange; \ + FramingExPointer->CountItems = 1; \ + FramingExPointer->PinFlags = 0; \ + SetDefaultKsCompression(KsCompression); \ + FramingExPointer->PinWeight = 0; \ + FramingExPointer->FramingItem[0].MemoryType = P_MemoryType; \ + FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE; \ + FramingExPointer->FramingItem[0].MemoryFlags = 0; \ + FramingExPointer->FramingItem[0].BusFlags = 0; \ + FramingExPointer->FramingItem[0].Flags = P_Flags; \ + FramingExPointer->FramingItem[0].Frames = P_Frames; \ + FramingExPointer->FramingItem[0].FileAlignment = P_Alignment; \ + FramingExPointer->FramingItem[0].MemoryTypeWeight = 0; \ + SetDontCareKsFramingRange(KsFramingRange); \ + SetKsFramingRangeWeighted(KsFramingRangeWeighted, \ + P_MinFrameSize,P_MaxFrameSize); \ +} + +#define STATIC_KSEVENTSETID_StreamAllocator \ + 0x75d95571L,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4 +DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4",KSEVENTSETID_StreamAllocator); +#define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator) + +typedef enum { + KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME, + KSEVENT_STREAMALLOCATOR_FREEFRAME +} KSEVENT_STREAMALLOCATOR; + +#define STATIC_KSMETHODSETID_StreamAllocator \ + 0xcf6e4341L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4 +DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4",KSMETHODSETID_StreamAllocator); +#define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator) + +typedef enum { + KSMETHOD_STREAMALLOCATOR_ALLOC, + KSMETHOD_STREAMALLOCATOR_FREE +} KSMETHOD_STREAMALLOCATOR; + +#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler) \ + DEFINE_KSMETHOD_ITEM( \ + KSMETHOD_STREAMALLOCATOR_ALLOC, \ + KSMETHOD_TYPE_WRITE, \ + (Handler), \ + sizeof(KSMETHOD), \ + sizeof(PVOID), \ + NULL) + +#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler) \ + DEFINE_KSMETHOD_ITEM( \ + KSMETHOD_STREAMALLOCATOR_FREE, \ + KSMETHOD_TYPE_READ, \ + (Handler), \ + sizeof(KSMETHOD), \ + sizeof(PVOID), \ + NULL) + +#define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet,MethodAlloc,MethodFree)\ +DEFINE_KSMETHOD_TABLE(AllocatorSet) { \ + DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc), \ + DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree) \ +} + +#define STATIC_KSPROPSETID_StreamAllocator \ + 0xcf6e4342L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4 +DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4",KSPROPSETID_StreamAllocator); +#define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator) + +#if defined(_NTDDK_) +typedef enum { + KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE, + KSPROPERTY_STREAMALLOCATOR_STATUS +} KSPROPERTY_STREAMALLOCATOR; + +#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAMALLOCATOR_STATUS, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSSTREAMALLOCATOR_STATUS), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet,PropFunctionTable,PropStatus)\ +DEFINE_KSPROPERTY_TABLE(AllocatorSet) { \ + DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus), \ + DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\ +} + +typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject, + PVOID *Frame); +typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame); + +typedef struct { + PFNALLOCATOR_ALLOCATEFRAME AllocateFrame; + PFNALLOCATOR_FREEFRAME FreeFrame; +} KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE; +#endif /* _NTDDK_ */ + +typedef struct { + KSALLOCATOR_FRAMING Framing; + ULONG AllocatedFrames; + ULONG Reserved; +} KSSTREAMALLOCATOR_STATUS,*PKSSTREAMALLOCATOR_STATUS; + +typedef struct { + KSALLOCATOR_FRAMING_EX Framing; + ULONG AllocatedFrames; + ULONG Reserved; +} KSSTREAMALLOCATOR_STATUS_EX,*PKSSTREAMALLOCATOR_STATUS_EX; + +#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001 +#define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002 +#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004 +#define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008 +#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010 +#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040 +#define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080 +#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100 +#define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200 +#define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000 + +typedef struct { + LONGLONG Time; + ULONG Numerator; + ULONG Denominator; +} KSTIME,*PKSTIME; + +typedef struct { + ULONG Size; + ULONG TypeSpecificFlags; + KSTIME PresentationTime; + LONGLONG Duration; + ULONG FrameExtent; + ULONG DataUsed; + PVOID Data; + ULONG OptionsFlags; +#ifdef _WIN64 + ULONG Reserved; +#endif +} KSSTREAM_HEADER,*PKSSTREAM_HEADER; + +#define STATIC_KSPROPSETID_StreamInterface \ + 0x1fdd8ee1L,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a +DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a",KSPROPSETID_StreamInterface); +#define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface) + +typedef enum { + KSPROPERTY_STREAMINTERFACE_HEADERSIZE +} KSPROPERTY_STREAMINTERFACE; + +#define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAMINTERFACE_HEADERSIZE, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(ULONG), \ + NULL,NULL,0,NULL,NULL,0) + +#define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \ +DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) { \ + DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\ +} + +#define STATIC_KSPROPSETID_Stream \ + 0x65aaba60L,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4 +DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4",KSPROPSETID_Stream); +#define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream) + +typedef enum { + KSPROPERTY_STREAM_ALLOCATOR, + KSPROPERTY_STREAM_QUALITY, + KSPROPERTY_STREAM_DEGRADATION, + KSPROPERTY_STREAM_MASTERCLOCK, + KSPROPERTY_STREAM_TIMEFORMAT, + KSPROPERTY_STREAM_PRESENTATIONTIME, + KSPROPERTY_STREAM_PRESENTATIONEXTENT, + KSPROPERTY_STREAM_FRAMETIME, + KSPROPERTY_STREAM_RATECAPABILITY, + KSPROPERTY_STREAM_RATE, + KSPROPERTY_STREAM_PIPE_ID +} KSPROPERTY_STREAM; + +#define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_ALLOCATOR, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(HANDLE), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_QUALITY, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSQUALITY_MANAGER), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_DEGRADATION, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + 0, \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_MASTERCLOCK, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(HANDLE), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_TIMEFORMAT, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(GUID), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_PRESENTATIONTIME, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(KSTIME), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_PRESENTATIONEXTENT, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_FRAMETIME, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSFRAMETIME), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_RATECAPABILITY, \ + (Handler), \ + sizeof(KSRATE_CAPABILITY), \ + sizeof(KSRATE), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_RATE, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(KSRATE), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_STREAM_PIPE_ID, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof(HANDLE), \ + (SetHandler), \ + NULL, 0, NULL, NULL, 0) + +typedef struct { + HANDLE QualityManager; + PVOID Context; +} KSQUALITY_MANAGER,*PKSQUALITY_MANAGER; + +typedef struct { + LONGLONG Duration; + ULONG FrameFlags; + ULONG Reserved; +} KSFRAMETIME,*PKSFRAMETIME; + +#define KSFRAMETIME_VARIABLESIZE 0x00000001 + +typedef struct { + LONGLONG PresentationStart; + LONGLONG Duration; + KSPIN_INTERFACE Interface; + LONG Rate; + ULONG Flags; +} KSRATE,*PKSRATE; + +#define KSRATE_NOPRESENTATIONSTART 0x00000001 +#define KSRATE_NOPRESENTATIONDURATION 0x00000002 + +typedef struct { + KSPROPERTY Property; + KSRATE Rate; +} KSRATE_CAPABILITY,*PKSRATE_CAPABILITY; + +#define STATIC_KSPROPSETID_Clock \ + 0xDF12A4C0L,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000",KSPROPSETID_Clock); +#define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock) + +#define NANOSECONDS 10000000 +#define KSCONVERT_PERFORMANCE_TIME(Frequency,PerformanceTime) \ + ((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS / (Frequency)) << 32) + \ + ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS) % (Frequency)) << 32) +\ + ((ULONGLONG)(PerformanceTime).LowPart *NANOSECONDS)) / (Frequency))) + +typedef struct { + ULONG CreateFlags; +} KSCLOCK_CREATE,*PKSCLOCK_CREATE; + +typedef struct { + LONGLONG Time; + LONGLONG SystemTime; +} KSCORRELATED_TIME,*PKSCORRELATED_TIME; + +typedef struct { + LONGLONG Granularity; + LONGLONG Error; +} KSRESOLUTION,*PKSRESOLUTION; + +typedef enum { + KSPROPERTY_CLOCK_TIME, + KSPROPERTY_CLOCK_PHYSICALTIME, + KSPROPERTY_CLOCK_CORRELATEDTIME, + KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, + KSPROPERTY_CLOCK_RESOLUTION, + KSPROPERTY_CLOCK_STATE, +#if defined(_NTDDK_) + KSPROPERTY_CLOCK_FUNCTIONTABLE +#endif /* _NTDDK_ */ +} KSPROPERTY_CLOCK; + +#if defined(_NTDDK_) +typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject); +typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject, + PLONGLONG SystemTime); + +typedef struct { + PFNKSCLOCK_GETTIME GetTime; + PFNKSCLOCK_GETTIME GetPhysicalTime; + PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime; + PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime; +} KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE; + +typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer, + LARGE_INTEGER DueTime, PKDPC Dpc); +typedef BOOLEAN (*PFNKSCANCELTIMER) (PVOID Context, PKTIMER Timer); +typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(PVOID Context, + PLONGLONG SystemTime); + +typedef PVOID PKSDEFAULTCLOCK; + +#define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CLOCK_TIME, \ + (Handler), \ + sizeof(KSPROPERTY), sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CLOCK_PHYSICALTIME, \ + (Handler), \ + sizeof(KSPROPERTY), sizeof(LONGLONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CLOCK_CORRELATEDTIME, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSCORRELATED_TIME), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSCORRELATED_TIME), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CLOCK_RESOLUTION, \ + (Handler), \ + sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CLOCK_STATE, \ + (Handler), \ + sizeof(KSPROPERTY), sizeof(KSSTATE), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_CLOCK_FUNCTIONTABLE, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(KSCLOCK_FUNCTIONTABLE), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,PropTime,PropPhysicalTime,PropCorrelatedTime,PropCorrelatedPhysicalTime,PropResolution,PropState,PropFunctionTable)\ +DEFINE_KSPROPERTY_TABLE(ClockSet) { \ + DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime), \ + DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime), \ + DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\ + DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\ + DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution), \ + DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState), \ + DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable), \ +} +#endif /* _NTDDK_ */ + +#define STATIC_KSEVENTSETID_Clock \ + 0x364D8E20L,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000",KSEVENTSETID_Clock); +#define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock) + +typedef enum { + KSEVENT_CLOCK_INTERVAL_MARK, + KSEVENT_CLOCK_POSITION_MARK +} KSEVENT_CLOCK_POSITION; + +#define STATIC_KSEVENTSETID_Connection \ + 0x7f4bcbe0L,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00 +DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000",KSEVENTSETID_Connection); +#define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection) + +typedef enum { + KSEVENT_CONNECTION_POSITIONUPDATE, + KSEVENT_CONNECTION_DATADISCONTINUITY, + KSEVENT_CONNECTION_TIMEDISCONTINUITY, + KSEVENT_CONNECTION_PRIORITY, + KSEVENT_CONNECTION_ENDOFSTREAM +} KSEVENT_CONNECTION; + +typedef struct { + PVOID Context; + ULONG Proportion; + LONGLONG DeltaTime; +} KSQUALITY,*PKSQUALITY; + +typedef struct { + PVOID Context; + ULONG Status; +} KSERROR,*PKSERROR; + +typedef KSIDENTIFIER KSDEGRADE,*PKSDEGRADE; + +#define STATIC_KSDEGRADESETID_Standard \ + 0x9F564180L,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000",KSDEGRADESETID_Standard); +#define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard) + +typedef enum { + KSDEGRADE_STANDARD_SAMPLE, + KSDEGRADE_STANDARD_QUALITY, + KSDEGRADE_STANDARD_COMPUTATION, + KSDEGRADE_STANDARD_SKIP +} KSDEGRADE_STANDARD; + +#if defined(_NTDDK_) + +#define KSPROBE_STREAMREAD 0x00000000 +#define KSPROBE_STREAMWRITE 0x00000001 +#define KSPROBE_ALLOCATEMDL 0x00000010 +#define KSPROBE_PROBEANDLOCK 0x00000020 +#define KSPROBE_SYSTEMADDRESS 0x00000040 +#define KSPROBE_MODIFY 0x00000200 +#define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE) +#define KSPROBE_ALLOWFORMATCHANGE 0x00000080 +#define KSSTREAM_READ KSPROBE_STREAMREAD +#define KSSTREAM_WRITE KSPROBE_STREAMWRITE +#define KSSTREAM_PAGED_DATA 0x00000000 +#define KSSTREAM_NONPAGED_DATA 0x00000100 +#define KSSTREAM_SYNCHRONOUS 0x00001000 +#define KSSTREAM_FAILUREEXCEPTION 0x00002000 + +typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp); +typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data); +typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject, + PKSIDENTIFIER Request, + ULONG RequestLength, PVOID Data, + ULONG DataLength, + PIO_STATUS_BLOCK IoStatus); +typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize, + BOOLEAN InputOperation); + +typedef struct { + KSPROPERTY_MEMBERSHEADER MembersHeader; + const VOID *Members; +} KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST; + +typedef struct { + KSIDENTIFIER PropTypeSet; + ULONG MembersListCount; + const KSPROPERTY_MEMBERSLIST *MembersList; +} KSPROPERTY_VALUES, *PKSPROPERTY_VALUES; + +#define DEFINE_KSPROPERTY_TABLE(tablename) \ + const KSPROPERTY_ITEM tablename[] = + +#define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\ +{ \ + PropertyId, (PFNKSHANDLER)GetHandler, \ + MinProperty, MinData, \ + (PFNKSHANDLER)SetHandler, \ + (PKSPROPERTY_VALUES)Values, RelationsCount, \ + (PKSPROPERTY)Relations, \ + (PFNKSHANDLER)SupportHandler, \ + (ULONG)SerializedSize \ +} + +typedef struct { + ULONG PropertyId; + __MINGW_EXTENSION union { + PFNKSHANDLER GetPropertyHandler; + BOOLEAN GetSupported; + }; + ULONG MinProperty; + ULONG MinData; + __MINGW_EXTENSION union { + PFNKSHANDLER SetPropertyHandler; + BOOLEAN SetSupported; + }; + const KSPROPERTY_VALUES *Values; + ULONG RelationsCount; + const KSPROPERTY *Relations; + PFNKSHANDLER SupportHandler; + ULONG SerializedSize; +} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM; + +#define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler) \ +{ \ + PropertyId, (PFNKSFASTHANDLER)GetHandler, \ + (PFNKSFASTHANDLER)SetHandler, 0 \ +} + +typedef struct { + ULONG PropertyId; + __MINGW_EXTENSION union { + PFNKSFASTHANDLER GetPropertyHandler; + BOOLEAN GetSupported; + }; + __MINGW_EXTENSION union { + PFNKSFASTHANDLER SetPropertyHandler; + BOOLEAN SetSupported; + }; + ULONG Reserved; +} KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM; + +#define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\ +{ \ + Set, \ + PropertiesCount, PropertyItem, \ + FastIoCount, FastIoTable \ +} + +#define DEFINE_KSPROPERTY_SET_TABLE(tablename) \ + const KSPROPERTY_SET tablename[] = + +typedef struct { + const GUID *Set; + ULONG PropertiesCount; + const KSPROPERTY_ITEM *PropertyItem; + ULONG FastIoCount; + const KSFASTPROPERTY_ITEM *FastIoTable; +} KSPROPERTY_SET, *PKSPROPERTY_SET; + +#define DEFINE_KSMETHOD_TABLE(tablename) \ + const KSMETHOD_ITEM tablename[] = + +#define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\ +{ \ + MethodId, (PFNKSHANDLER)MethodHandler, \ + MinMethod, MinData, \ + SupportHandler, Flags \ +} + +typedef struct { + ULONG MethodId; + __MINGW_EXTENSION union { + PFNKSHANDLER MethodHandler; + BOOLEAN MethodSupported; + }; + ULONG MinMethod; + ULONG MinData; + PFNKSHANDLER SupportHandler; + ULONG Flags; +} KSMETHOD_ITEM, *PKSMETHOD_ITEM; + +#define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler) \ +{ \ + MethodId, (PFNKSFASTHANDLER)MethodHandler \ +} + +typedef struct { + ULONG MethodId; + __MINGW_EXTENSION union { + PFNKSFASTHANDLER MethodHandler; + BOOLEAN MethodSupported; + }; +} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM; + +#define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\ +{ \ + Set, \ + MethodsCount, MethodItem, \ + FastIoCount, FastIoTable \ +} + +#define DEFINE_KSMETHOD_SET_TABLE(tablename) \ + const KSMETHOD_SET tablename[] = + +typedef struct { + const GUID *Set; + ULONG MethodsCount; + const KSMETHOD_ITEM *MethodItem; + ULONG FastIoCount; + const KSFASTMETHOD_ITEM *FastIoTable; +} KSMETHOD_SET, *PKSMETHOD_SET; + +typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY; +typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData, + struct _KSEVENT_ENTRY* EventEntry); +typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject, + struct _KSEVENT_ENTRY* EventEntry); + +#define DEFINE_KSEVENT_TABLE(tablename) \ + const KSEVENT_ITEM tablename[] = + +#define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\ +{ \ + EventId, DataInput, ExtraEntryData, \ + AddHandler, RemoveHandler, SupportHandler \ +} + +typedef struct { + ULONG EventId; + ULONG DataInput; + ULONG ExtraEntryData; + PFNKSADDEVENT AddHandler; + PFNKSREMOVEEVENT RemoveHandler; + PFNKSHANDLER SupportHandler; +} KSEVENT_ITEM, *PKSEVENT_ITEM; + +#define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem) \ +{ \ + Set, EventsCount, EventItem \ +} + +#define DEFINE_KSEVENT_SET_TABLE(tablename) \ + const KSEVENT_SET tablename[] = + +typedef struct { + const GUID *Set; + ULONG EventsCount; + const KSEVENT_ITEM *EventItem; +} KSEVENT_SET, *PKSEVENT_SET; + +typedef struct { + KDPC Dpc; + ULONG ReferenceCount; + KSPIN_LOCK AccessLock; +} KSDPC_ITEM, *PKSDPC_ITEM; + +typedef struct { + KSDPC_ITEM DpcItem; + LIST_ENTRY BufferList; +} KSBUFFER_ITEM, *PKSBUFFER_ITEM; + + +#define KSEVENT_ENTRY_DELETED 1 +#define KSEVENT_ENTRY_ONESHOT 2 +#define KSEVENT_ENTRY_BUFFERED 4 + +struct _KSEVENT_ENTRY { + LIST_ENTRY ListEntry; + PVOID Object; + __MINGW_EXTENSION union { + PKSDPC_ITEM DpcItem; + PKSBUFFER_ITEM BufferItem; + }; + PKSEVENTDATA EventData; + ULONG NotificationType; + const KSEVENT_SET *EventSet; + const KSEVENT_ITEM *EventItem; + PFILE_OBJECT FileObject; + ULONG SemaphoreAdjustment; + ULONG Reserved; + ULONG Flags; +}; + +typedef enum { + KSEVENTS_NONE, + KSEVENTS_SPINLOCK, + KSEVENTS_MUTEX, + KSEVENTS_FMUTEX, + KSEVENTS_FMUTEXUNSAFE, + KSEVENTS_INTERRUPT, + KSEVENTS_ERESOURCE +} KSEVENTS_LOCKTYPE; + +#define KSDISPATCH_FASTIO 0x80000000 + +typedef struct { + PDRIVER_DISPATCH Create; + PVOID Context; + UNICODE_STRING ObjectClass; + PSECURITY_DESCRIPTOR SecurityDescriptor; + ULONG Flags; +} KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM; + +typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem); + +#define KSCREATE_ITEM_SECURITYCHANGED 0x00000001 +#define KSCREATE_ITEM_WILDCARD 0x00000002 +#define KSCREATE_ITEM_NOPARAMETERS 0x00000004 +#define KSCREATE_ITEM_FREEONSTOP 0x00000008 + +#define DEFINE_KSCREATE_DISPATCH_TABLE( tablename ) \ + KSOBJECT_CREATE_ITEM tablename[] = + +#define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context) \ +{ \ + (DispatchCreate), (PVOID)(Context), \ + { \ + sizeof(TypeName) - sizeof(UNICODE_NULL),\ + sizeof(TypeName), \ + (PWCHAR)(TypeName) \ + }, \ + NULL, 0 \ +} + +#define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags) \ +{ \ + (DispatchCreate), \ + (PVOID)(Context), \ + { \ + sizeof(TypeName) - sizeof(UNICODE_NULL),\ + sizeof(TypeName), \ + (PWCHAR)(TypeName) \ + }, \ + NULL, (Flags) \ +} + +#define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context) \ +{ \ + DispatchCreate, Context, \ + { \ + 0, 0, NULL, \ + }, \ + NULL, 0 \ +} + +typedef struct { + ULONG CreateItemsCount; + PKSOBJECT_CREATE_ITEM CreateItemsList; +} KSOBJECT_CREATE, *PKSOBJECT_CREATE; + +typedef struct { + PDRIVER_DISPATCH DeviceIoControl; + PDRIVER_DISPATCH Read; + PDRIVER_DISPATCH Write; + PDRIVER_DISPATCH Flush; + PDRIVER_DISPATCH Close; + PDRIVER_DISPATCH QuerySecurity; + PDRIVER_DISPATCH SetSecurity; + PFAST_IO_DEVICE_CONTROL FastDeviceIoControl; + PFAST_IO_READ FastRead; + PFAST_IO_WRITE FastWrite; +} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE; + +#define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\ + const KSDISPATCH_TABLE tablename = \ + { \ + DeviceIoControl, \ + Read, \ + Write, \ + Flush, \ + Close, \ + QuerySecurity, \ + SetSecurity, \ + FastDeviceIoControl, \ + FastRead, \ + FastWrite, \ + } + +#define KSCREATE_ITEM_IRP_STORAGE(Irp) \ + (*(PKSOBJECT_CREATE_ITEM *)&(Irp)->Tail.Overlay.DriverContext[0]) +#define KSEVENT_SET_IRP_STORAGE(Irp) \ + (*(const KSEVENT_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) +#define KSEVENT_ITEM_IRP_STORAGE(Irp) \ + (*(const KSEVENT_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) +#define KSEVENT_ENTRY_IRP_STORAGE(Irp) \ + (*(PKSEVENT_ENTRY *)&(Irp)->Tail.Overlay.DriverContext[0]) +#define KSMETHOD_SET_IRP_STORAGE(Irp) \ + (*(const KSMETHOD_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) +#define KSMETHOD_ITEM_IRP_STORAGE(Irp) \ + (*(const KSMETHOD_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) +#define KSMETHOD_TYPE_IRP_STORAGE(Irp) \ + (*(ULONG_PTR *)(&(Irp)->Tail.Overlay.DriverContext[2])) +#define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) \ + (*(PKSPIN_LOCK *)&(Irp)->Tail.Overlay.DriverContext[1]) +#define KSPROPERTY_SET_IRP_STORAGE(Irp) \ + (*(const KSPROPERTY_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) +#define KSPROPERTY_ITEM_IRP_STORAGE(Irp) \ + (*(const KSPROPERTY_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) +#define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) \ + (*(PKSATTRIBUTE_LIST *)&(Irp)->Tail.Overlay.DriverContext[2]) + +typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER; + +typedef enum { + KsInvokeOnSuccess = 1, + KsInvokeOnError = 2, + KsInvokeOnCancel = 4 +} KSCOMPLETION_INVOCATION; + +typedef enum { + KsListEntryTail, + KsListEntryHead +} KSLIST_ENTRY_LOCATION; + +typedef enum { + KsAcquireOnly, + KsAcquireAndRemove, + KsAcquireOnlySingleItem, + KsAcquireAndRemoveOnlySingleItem +} KSIRP_REMOVAL_OPERATION; + +typedef enum { + KsStackCopyToNewLocation, + KsStackReuseCurrentLocation, + KsStackUseNewLocation +} KSSTACK_USE; + +typedef enum { + KSTARGET_STATE_DISABLED, + KSTARGET_STATE_ENABLED +} KSTARGET_STATE; + +typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context); +typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context); +typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context); +typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String); + +#define BUS_INTERFACE_REFERENCE_VERSION 0x100 + +typedef struct { + INTERFACE Interface; + + PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; + PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; + PFNQUERYREFERENCESTRING QueryReferenceString; +} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE; + +#define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard +#define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard + +#endif /* _NTDDK_ */ + +#ifndef PACK_PRAGMAS_NOT_SUPPORTED +#include +#endif + +typedef struct { + GUID PropertySet; + ULONG Count; +} KSPROPERTY_SERIALHDR,*PKSPROPERTY_SERIALHDR; + +#ifndef PACK_PRAGMAS_NOT_SUPPORTED +#include +#endif + +typedef struct { + KSIDENTIFIER PropTypeSet; + ULONG Id; + ULONG PropertyLength; +} KSPROPERTY_SERIAL,*PKSPROPERTY_SERIAL; + + +#if defined(_NTDDK_) + +#define IOCTL_KS_HANDSHAKE \ + CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS) + +typedef struct { + GUID ProtocolId; + PVOID Argument1; + PVOID Argument2; +} KSHANDSHAKE, *PKSHANDSHAKE; + +typedef struct _KSGATE KSGATE, *PKSGATE; + +struct _KSGATE { + LONG Count; + PKSGATE NextGate; +}; + +typedef PVOID KSOBJECT_BAG; + + +typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context, + PKSEVENT_ENTRY EventEntry); + +typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device); + +typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp, + PCM_RESOURCE_LIST TranslatedResourceList, + PCM_RESOURCE_LIST UntranslatedResourceList); + +typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device); + +typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp); + +typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp); + +typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp, + PDEVICE_CAPABILITIES Capabilities); + +typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device,PIRP Irp, + DEVICE_POWER_STATE DeviceTo, + DEVICE_POWER_STATE DeviceFrom, + SYSTEM_POWER_STATE SystemTo, + SYSTEM_POWER_STATE SystemFrom, + POWER_ACTION Action); + +typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp, + DEVICE_POWER_STATE To, + DEVICE_POWER_STATE From); + +typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory); + +typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory, + DEVICE_POWER_STATE State); + +typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp); + +typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter, + PKSPROCESSPIN_INDEXENTRY Index); + +typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter); + +typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State); + +typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp); + +typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,KSSTATE ToState, + KSSTATE FromState); + +typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat, + PKSMULTIPLE_ITEM OldAttributeList, + const KSDATARANGE *DataRange, + const KSATTRIBUTE_LIST *AttributeRange); + +typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE In, + PKSHANDSHAKE Out); + +typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin); + +typedef void (*PFNKSPINVOID)(PKSPIN Pin); + +typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State); + +typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer, + LARGE_INTEGER DueTime,PKDPC Dpc); + +typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer); + +typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin, + PLONGLONG SystemTime); + +typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution); + +typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin, + PKSALLOCATOR_FRAMING AllocatorFraming, + PVOID *Context); + +typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer); + + +typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE; + +struct KSAUTOMATION_TABLE_ { + ULONG PropertySetsCount; + ULONG PropertyItemSize; + const KSPROPERTY_SET *PropertySets; + ULONG MethodSetsCount; + ULONG MethodItemSize; + const KSMETHOD_SET *MethodSets; + ULONG EventSetsCount; + ULONG EventItemSize; + const KSEVENT_SET *EventSets; +#ifndef _WIN64 + PVOID Alignment; +#endif +}; + +#define DEFINE_KSAUTOMATION_TABLE(table) \ + const KSAUTOMATION_TABLE table = + +#define DEFINE_KSAUTOMATION_PROPERTIES(table) \ + SIZEOF_ARRAY(table), \ + sizeof(KSPROPERTY_ITEM), \ + table + +#define DEFINE_KSAUTOMATION_METHODS(table) \ + SIZEOF_ARRAY(table), \ + sizeof(KSMETHOD_ITEM), \ + table + +#define DEFINE_KSAUTOMATION_EVENTS(table) \ + SIZEOF_ARRAY(table), \ + sizeof(KSEVENT_ITEM), \ + table + +#define DEFINE_KSAUTOMATION_PROPERTIES_NULL \ + 0, \ + sizeof(KSPROPERTY_ITEM), \ + NULL + +#define DEFINE_KSAUTOMATION_METHODS_NULL \ + 0, \ + sizeof(KSMETHOD_ITEM), \ + NULL + +#define DEFINE_KSAUTOMATION_EVENTS_NULL \ + 0, \ + sizeof(KSEVENT_ITEM), \ + NULL + +#define MIN_DEV_VER_FOR_QI (0x100) + +struct _KSDEVICE_DISPATCH { + PFNKSDEVICECREATE Add; + PFNKSDEVICEPNPSTART Start; + PFNKSDEVICE PostStart; + PFNKSDEVICEIRP QueryStop; + PFNKSDEVICEIRPVOID CancelStop; + PFNKSDEVICEIRPVOID Stop; + PFNKSDEVICEIRP QueryRemove; + PFNKSDEVICEIRPVOID CancelRemove; + PFNKSDEVICEIRPVOID Remove; + PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities; + PFNKSDEVICEIRPVOID SurpriseRemoval; + PFNKSDEVICEQUERYPOWER QueryPower; + PFNKSDEVICESETPOWER SetPower; + PFNKSDEVICEIRP QueryInterface; +}; + +struct _KSFILTER_DISPATCH { + PFNKSFILTERIRP Create; + PFNKSFILTERIRP Close; + PFNKSFILTERPROCESS Process; + PFNKSFILTERVOID Reset; +}; + +struct _KSPIN_DISPATCH { + PFNKSPINIRP Create; + PFNKSPINIRP Close; + PFNKSPIN Process; + PFNKSPINVOID Reset; + PFNKSPINSETDATAFORMAT SetDataFormat; + PFNKSPINSETDEVICESTATE SetDeviceState; + PFNKSPIN Connect; + PFNKSPINVOID Disconnect; + const KSCLOCK_DISPATCH *Clock; + const KSALLOCATOR_DISPATCH *Allocator; +}; + +struct _KSCLOCK_DISPATCH { + PFNKSPINSETTIMER SetTimer; + PFNKSPINCANCELTIMER CancelTimer; + PFNKSPINCORRELATEDTIME CorrelatedTime; + PFNKSPINRESOLUTION Resolution; +}; + +struct _KSALLOCATOR_DISPATCH { + PFNKSPININITIALIZEALLOCATOR InitializeAllocator; + PFNKSDELETEALLOCATOR DeleteAllocator; + PFNKSDEFAULTALLOCATE Allocate; + PFNKSDEFAULTFREE Free; +}; + +#define KSDEVICE_DESCRIPTOR_VERSION (0x100) + +struct _KSDEVICE_DESCRIPTOR { + const KSDEVICE_DISPATCH *Dispatch; + ULONG FilterDescriptorsCount; + const KSFILTER_DESCRIPTOR*const *FilterDescriptors; + ULONG Version; +}; + +struct _KSFILTER_DESCRIPTOR { + const KSFILTER_DISPATCH *Dispatch; + const KSAUTOMATION_TABLE *AutomationTable; + ULONG Version; +#define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1) + ULONG Flags; +#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001 +#define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002 +#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004 +#define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008 +#define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000 + const GUID *ReferenceGuid; + ULONG PinDescriptorsCount; + ULONG PinDescriptorSize; + const KSPIN_DESCRIPTOR_EX *PinDescriptors; + ULONG CategoriesCount; + const GUID *Categories; + ULONG NodeDescriptorsCount; + ULONG NodeDescriptorSize; + const KSNODE_DESCRIPTOR *NodeDescriptors; + ULONG ConnectionsCount; + const KSTOPOLOGY_CONNECTION *Connections; + const KSCOMPONENTID *ComponentId; +}; + +#define DEFINE_KSFILTER_DESCRIPTOR(descriptor) \ + const KSFILTER_DESCRIPTOR descriptor = + +#define DEFINE_KSFILTER_PIN_DESCRIPTORS(table) \ + SIZEOF_ARRAY(table), \ + sizeof(table[0]), \ + table + +#define DEFINE_KSFILTER_CATEGORIES(table) \ + SIZEOF_ARRAY(table), \ + table + +#define DEFINE_KSFILTER_CATEGORY(category) \ + 1, \ + &(category) + +#define DEFINE_KSFILTER_CATEGORIES_NULL \ + 0, \ + NULL + +#define DEFINE_KSFILTER_NODE_DESCRIPTORS(table) \ + SIZEOF_ARRAY(table), \ + sizeof(table[0]), \ + table + +#define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL \ + 0, \ + sizeof(KSNODE_DESCRIPTOR), \ + NULL + +#define DEFINE_KSFILTER_CONNECTIONS(table) \ + SIZEOF_ARRAY(table), \ + table + +#define DEFINE_KSFILTER_DEFAULT_CONNECTIONS \ + 0, \ + NULL + +#define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table) \ + const KSFILTER_DESCRIPTOR*const table[] = + +struct _KSPIN_DESCRIPTOR_EX { + const KSPIN_DISPATCH *Dispatch; + const KSAUTOMATION_TABLE *AutomationTable; + KSPIN_DESCRIPTOR PinDescriptor; + ULONG Flags; +#define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING +#define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING +#define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING +#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008 +#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010 +#define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020 +#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040 +#define KSPIN_FLAG_ENFORCE_FIFO 0x00000080 +#define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100 +#define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200 +#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000 +#define KSPIN_FLAG_SPLITTER 0x00020000 +#define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000 +#define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000 +#define KSPIN_FLAG_FIXED_FORMAT 0x00100000 +#define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000 +#define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS) +#define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000 +#define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000 +#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000 +#define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000 + ULONG InstancesPossible; + ULONG InstancesNecessary; + const KSALLOCATOR_FRAMING_EX *AllocatorFraming; + PFNKSINTERSECTHANDLEREX IntersectHandler; +}; + +#define DEFINE_KSPIN_DEFAULT_INTERFACES \ + 0, \ + NULL + +#define DEFINE_KSPIN_DEFAULT_MEDIUMS \ + 0, \ + NULL + +struct _KSNODE_DESCRIPTOR { + const KSAUTOMATION_TABLE *AutomationTable; + const GUID *Type; + const GUID *Name; +#ifndef _WIN64 + PVOID Alignment; +#endif +}; + +#ifndef _WIN64 +#define DEFINE_NODE_DESCRIPTOR(automation,type,name) \ + { (automation), (type), (name), NULL } +#else +#define DEFINE_NODE_DESCRIPTOR(automation,type,name) \ + { (automation), (type), (name) } +#endif + +struct _KSDEVICE { + const KSDEVICE_DESCRIPTOR *Descriptor; + KSOBJECT_BAG Bag; + PVOID Context; + PDEVICE_OBJECT FunctionalDeviceObject; + PDEVICE_OBJECT PhysicalDeviceObject; + PDEVICE_OBJECT NextDeviceObject; + BOOLEAN Started; + SYSTEM_POWER_STATE SystemPowerState; + DEVICE_POWER_STATE DevicePowerState; +}; + +struct _KSFILTERFACTORY { + const KSFILTER_DESCRIPTOR *FilterDescriptor; + KSOBJECT_BAG Bag; + PVOID Context; +}; + +struct _KSFILTER { + const KSFILTER_DESCRIPTOR *Descriptor; + KSOBJECT_BAG Bag; + PVOID Context; +}; + +struct _KSPIN { + const KSPIN_DESCRIPTOR_EX *Descriptor; + KSOBJECT_BAG Bag; + PVOID Context; + ULONG Id; + KSPIN_COMMUNICATION Communication; + BOOLEAN ConnectionIsExternal; + KSPIN_INTERFACE ConnectionInterface; + KSPIN_MEDIUM ConnectionMedium; + KSPRIORITY ConnectionPriority; + PKSDATAFORMAT ConnectionFormat; + PKSMULTIPLE_ITEM AttributeList; + ULONG StreamHeaderSize; + KSPIN_DATAFLOW DataFlow; + KSSTATE DeviceState; + KSRESET ResetState; + KSSTATE ClientState; +}; + +struct _KSMAPPING { + PHYSICAL_ADDRESS PhysicalAddress; + ULONG ByteCount; + ULONG Alignment; +}; + +struct _KSSTREAM_POINTER_OFFSET +{ +#if defined(_NTDDK_) + __MINGW_EXTENSION union { + PUCHAR Data; + PKSMAPPING Mappings; + }; +#else + PUCHAR Data; +#endif /* _NTDDK_ */ +#ifndef _WIN64 + PVOID Alignment; +#endif + ULONG Count; + ULONG Remaining; +}; + +struct _KSSTREAM_POINTER +{ + PVOID Context; + PKSPIN Pin; + PKSSTREAM_HEADER StreamHeader; + PKSSTREAM_POINTER_OFFSET Offset; + KSSTREAM_POINTER_OFFSET OffsetIn; + KSSTREAM_POINTER_OFFSET OffsetOut; +}; + +struct _KSPROCESSPIN { + PKSPIN Pin; + PKSSTREAM_POINTER StreamPointer; + PKSPROCESSPIN InPlaceCounterpart; + PKSPROCESSPIN DelegateBranch; + PKSPROCESSPIN CopySource; + PVOID Data; + ULONG BytesAvailable; + ULONG BytesUsed; + ULONG Flags; + BOOLEAN Terminate; +}; + +struct _KSPROCESSPIN_INDEXENTRY { + PKSPROCESSPIN *Pins; + ULONG Count; +}; + +typedef enum { + KsObjectTypeDevice, + KsObjectTypeFilterFactory, + KsObjectTypeFilter, + KsObjectTypePin +} KSOBJECTTYPE; + + +typedef void (*PFNKSFREE)(PVOID Data); + +typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl, + PVOID Context,NTSTATUS Status); + +typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp); + + +#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) +#ifndef _IKsControl_ +#define _IKsControl_ + +typedef struct IKsControl *PIKSCONTROL; + +#ifndef DEFINE_ABSTRACT_UNKNOWN +#define DEFINE_ABSTRACT_UNKNOWN() \ + STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ \ + REFIID InterfaceId, \ + PVOID *Interface \ + ) PURE; \ + STDMETHOD_(ULONG,AddRef)(THIS) PURE; \ + STDMETHOD_(ULONG,Release)(THIS) PURE; +#endif + +#undef INTERFACE +#define INTERFACE IKsControl +DECLARE_INTERFACE_(IKsControl,IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + STDMETHOD_(NTSTATUS,KsProperty)(THIS_ + PKSPROPERTY Property, + ULONG PropertyLength, + PVOID PropertyData, + ULONG DataLength, + ULONG *BytesReturned + ) PURE; + STDMETHOD_(NTSTATUS,KsMethod) (THIS_ + PKSMETHOD Method, + ULONG MethodLength, + PVOID MethodData, + ULONG DataLength, + ULONG *BytesReturned + ) PURE; + STDMETHOD_(NTSTATUS,KsEvent) (THIS_ + PKSEVENT Event, + ULONG EventLength, + PVOID EventData, + ULONG DataLength, + ULONG *BytesReturned + ) PURE; +}; +typedef struct IKsReferenceClock *PIKSREFERENCECLOCK; + +#undef INTERFACE +#define INTERFACE IKsReferenceClock +DECLARE_INTERFACE_(IKsReferenceClock,IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + STDMETHOD_(LONGLONG,GetTime) (THIS) PURE; + STDMETHOD_(LONGLONG,GetPhysicalTime) (THIS) PURE; + STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_ + PLONGLONG SystemTime + ) PURE; + STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_ + PLONGLONG SystemTime + ) PURE; + STDMETHOD_(NTSTATUS,GetResolution) (THIS_ + PKSRESOLUTION Resolution + ) PURE; + STDMETHOD_(NTSTATUS,GetState) (THIS_ + PKSSTATE State + ) PURE; +}; +#undef INTERFACE + +#define INTERFACE IKsDeviceFunctions +DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + STDMETHOD_(NTSTATUS,RegisterAdapterObjectEx) (THIS_ + PADAPTER_OBJECT AdapterObject, + PDEVICE_DESCRIPTION DeviceDescription, + ULONG NumberOfMapRegisters, + ULONG MaxMappingsByteCount, + ULONG MappingTableStride + ) PURE; +}; + +#undef INTERFACE +#define STATIC_IID_IKsControl \ + 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUID(IID_IKsControl, + 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96); +#define STATIC_IID_IKsFastClock \ + 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e +DEFINE_GUID(IID_IKsFastClock, + 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e); +#define STATIC_IID_IKsDeviceFunctions \ + 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd +DEFINE_GUID(IID_IKsDeviceFunctions, + 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd); +#endif /* _IKsControl_ */ +#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ + +#endif /* _NTDDK_ */ + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _KSDDK_ +#define KSDDKAPI +#else +#define KSDDKAPI DECLSPEC_IMPORT +#endif + +#if defined(_NTDDK_) + +KSDDKAPI NTSTATUS NTAPI KsEnableEvent + (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet, + PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, + PVOID EventsLock); + +KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator + (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet, + PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, + PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize); + +KSDDKAPI NTSTATUS NTAPI KsDisableEvent + (PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, + PVOID EventsLock); + +KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry); + +KSDDKAPI VOID NTAPI KsFreeEventList + (PFILE_OBJECT FileObject, PLIST_ENTRY EventsList, + KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock); + +KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry); + +KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent + (PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data); + +KSDDKAPI VOID NTAPI KsGenerateEventList + (GUID *Set, ULONG EventId, PLIST_ENTRY EventsList, + KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock); + +KSDDKAPI NTSTATUS NTAPI KsPropertyHandler + (PIRP Irp, ULONG PropertySetsCount, + const KSPROPERTY_SET *PropertySet); + +KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator + (PIRP Irp, ULONG PropertySetsCount, + const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator, + ULONG PropertyItemSize); + +KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler + (PFILE_OBJECT FileObject, PKSPROPERTY Property, + ULONG PropertyLength, PVOID Data, ULONG DataLength, + PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount, + const KSPROPERTY_SET *PropertySet); + +KSDDKAPI NTSTATUS NTAPI KsMethodHandler + (PIRP Irp, ULONG MethodSetsCount, + const KSMETHOD_SET *MethodSet); + +KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator + (PIRP Irp, ULONG MethodSetsCount, + const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator, + ULONG MethodItemSize); + +KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler + (PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength, + PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus, + ULONG MethodSetsCount, const KSMETHOD_SET *MethodSet); + +KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx + (PIRP Irp, PVOID InitializeContext, + PFNKSDEFAULTALLOCATE DefaultAllocate, + PFNKSDEFAULTFREE DefaultFree, + PFNKSINITIALIZEALLOCATOR InitializeAllocator, + PFNKSDELETEALLOCATOR DeleteAllocator); + +KSDDKAPI NTSTATUS NTAPI KsCreateAllocator + (HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming, + PHANDLE AllocatorHandle); + +KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest + (PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming); + +KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx + (PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize, + const KSALLOCATOR_FRAMING_EX *PinFraming); + +KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock); + +KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx + (PKSDEFAULTCLOCK *DefaultClock, PVOID Context, + PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer, + PFNKSCORRELATEDTIME CorrelatedTime, + const KSRESOLUTION *Resolution, ULONG Flags); + +KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock); +KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock); + +KSDDKAPI NTSTATUS NTAPI KsCreateClock + (HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate, + PHANDLE ClockHandle); + +KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest + (PIRP Irp, PKSCLOCK_CREATE *ClockCreate); + +KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (PKSDEFAULTCLOCK DefaultClock); +KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State); +KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (PKSDEFAULTCLOCK DefaultClock); +KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time); + +KSDDKAPI NTSTATUS NTAPI KsCreatePin + (HANDLE FilterHandle, PKSPIN_CONNECT Connect, + ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle); + +KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest + (PIRP Irp, ULONG DescriptorsCount, + const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect); + +KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler + (PIRP Irp, PKSPROPERTY Property, PVOID Data, + ULONG DescriptorsCount, const KSPIN_DESCRIPTOR *Descriptor); + +KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection + (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, + const KSPIN_DESCRIPTOR *Descriptor, + PFNKSINTERSECTHANDLER IntersectHandler); + +KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx + (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, + const KSPIN_DESCRIPTOR *Descriptor, ULONG DescriptorSize, + PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext); + +KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery + (PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize, + const VOID *DataItems); + +#ifndef MAKEINTRESOURCE +#define MAKEINTRESOURCE(r) ((ULONG_PTR) (USHORT) r) +#endif +#ifndef RT_STRING +#define RT_STRING MAKEINTRESOURCE(6) +#define RT_RCDATA MAKEINTRESOURCE(10) +#endif + +KSDDKAPI NTSTATUS NTAPI KsLoadResource + (PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName, + ULONG ResourceType, PVOID *Resource, PULONG ResourceSize); + +KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId + (HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId, + PULONG ValueType); + +KSDDKAPI NTSTATUS NTAPI KsMapModuleName + (PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName, + PUNICODE_STRING ImageName, PULONG_PTR ResourceId, + PULONG ValueType); + +KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject (KSDEVICE_HEADER Header); +KSDDKAPI VOID NTAPI KsDereferenceBusObject (KSDEVICE_HEADER Header); +KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp); +KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp); +KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty (PIRP Irp, PFNKSHANDLER Handler); +KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod (PIRP Irp, PFNKSHANDLER Handler); + +KSDDKAPI NTSTATUS NTAPI KsReadFile + (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, + PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, + ULONG Key, KPROCESSOR_MODE RequestorMode); + +KSDDKAPI NTSTATUS NTAPI KsWriteFile + (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, + PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, + ULONG Key, KPROCESSOR_MODE RequestorMode); + +KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile + (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass); + +KSDDKAPI NTSTATUS NTAPI KsSetInformationFile + (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass); + +KSDDKAPI NTSTATUS NTAPI KsStreamIo + (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, + PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext, + KSCOMPLETION_INVOCATION CompletionInvocationFlags, + PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length, + ULONG Flags, KPROCESSOR_MODE RequestorMode); + +KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize); +KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID *ExtraBuffer); +KSDDKAPI VOID NTAPI KsNullDriverUnload (PDRIVER_OBJECT DriverObject); + +KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler + (PDRIVER_OBJECT DriverObject, ULONG MajorFunction); + +KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest + (PDEVICE_OBJECT DeviceObject, PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion + (PDEVICE_OBJECT DeviceObject, PIRP Irp); + +KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp); + +KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure + (PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer, + ULONG InputBufferLength, PVOID OutputBuffer, + ULONG OutputBufferLength, ULONG IoControlCode, + PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject); + +KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure + (PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset, + ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer, + PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject); + +#define KsDispatchFastWriteFailure KsDispatchFastReadFailure + +KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp); +KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock); +KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel); + +KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue + (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, + KSLIST_ENTRY_LOCATION ListLocation, + KSIRP_REMOVAL_OPERATION RemovalOperation); + +KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue + (PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock, + PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock, + KSLIST_ENTRY_LOCATION ListLocation, + PFNKSIRPLISTCALLBACK ListCallback, PVOID Context); + +KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp); + +KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue + (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp, + KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel); + +KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET *ResetValue); + +KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler + (PIRP Irp, PKSPROPERTY Property, PVOID Data, + const KSTOPOLOGY *Topology); + +KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive); +KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock (KSDEVICE_HEADER Header); +KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp); +KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp); +KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp); + +KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject + (KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject, + PDEVICE_OBJECT BaseObject); + +KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header); +KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header); + +KSDDKAPI VOID NTAPI KsRecalculateStackDepth + (KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation); + +KSDDKAPI VOID NTAPI KsSetTargetState + (KSOBJECT_HEADER Header, KSTARGET_STATE TargetState); + +KSDDKAPI VOID NTAPI KsSetTargetDeviceObject + (KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice); + +KSDDKAPI VOID NTAPI KsSetPowerDispatch + (KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch, + PVOID PowerContext); + +KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header); + +KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader + (KSDEVICE_HEADER *Header, ULONG ItemsCount, + PKSOBJECT_CREATE_ITEM ItemsList); + +KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header); + +KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader + (KSOBJECT_HEADER *Header, ULONG ItemsCount, + PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp, + const KSDISPATCH_TABLE *Table); + +KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header); + +KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader + (KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, + PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor); + +KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader + (KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, + PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor); + +KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem + (KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem, + BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback); + +KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem + (KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem); + +KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext + (KSDEVICE_HEADER Header, PVOID Context); + +KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity + (PSECURITY_DESCRIPTOR ParentSecurity, + PSECURITY_DESCRIPTOR *DefaultSecurity); + +KSDDKAPI NTSTATUS NTAPI KsForwardIrp + (PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation); + +KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp + (PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject, + KSSTACK_USE StackUse); + +KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice + (PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode, + ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer, + ULONG OutSize, PULONG BytesReturned); + +KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry + (PFILE_OBJECT FileObject, HANDLE ParentKey, + PUNICODE_STRING RegistryPath); + +KSDDKAPI NTSTATUS NTAPI KsCacheMedium + (PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium, + ULONG PinDirection); + +KSDDKAPI NTSTATUS NTAPI KsRegisterWorker + (WORK_QUEUE_TYPE WorkQueueType, PKSWORKER *Worker); + +KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker + (WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem, + PKSWORKER *Worker); + +KSDDKAPI VOID NTAPI KsUnregisterWorker (PKSWORKER Worker); +KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem); +KSDDKAPI ULONG NTAPI KsIncrementCountedWorker (PKSWORKER Worker); +KSDDKAPI ULONG NTAPI KsDecrementCountedWorker (PKSWORKER Worker); + +KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode + (HANDLE ParentHandle, PKSNODE_CREATE NodeCreate, + ACCESS_MASK DesiredAccess, PHANDLE NodeHandle); + +KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest + (PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate); + +KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables + (PKSAUTOMATION_TABLE *AutomationTableAB, + PKSAUTOMATION_TABLE AutomationTableA, + PKSAUTOMATION_TABLE AutomationTableB, + KSOBJECT_BAG Bag); + +KSDDKAPI NTSTATUS NTAPI KsInitializeDriver + (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName, + const KSDEVICE_DESCRIPTOR *Descriptor); + +KSDDKAPI NTSTATUS NTAPI KsAddDevice + (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject); + +KSDDKAPI NTSTATUS NTAPI KsCreateDevice + (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject, + const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize, + PKSDEVICE *Device); + +KSDDKAPI NTSTATUS NTAPI KsInitializeDevice + (PDEVICE_OBJECT FunctionalDeviceObject, + PDEVICE_OBJECT PhysicalDeviceObject, + PDEVICE_OBJECT NextDeviceObject, + const KSDEVICE_DESCRIPTOR *Descriptor); + +KSDDKAPI void NTAPI KsTerminateDevice (PDEVICE_OBJECT DeviceObject); +KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject (PDEVICE_OBJECT FunctionalDeviceObject); +KSDDKAPI void NTAPI KsAcquireDevice (PKSDEVICE Device); +KSDDKAPI void NTAPI KsReleaseDevice (PKSDEVICE Device); + +KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject + (PKSDEVICE Device, PADAPTER_OBJECT AdapterObject, + ULONG MaxMappingsByteCount, ULONG MappingTableStride); + +KSDDKAPI ULONG NTAPI KsDeviceGetBusData + (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, + ULONG Length); + +KSDDKAPI ULONG NTAPI KsDeviceSetBusData + (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, + ULONG Length); + +KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory + (PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR *Descriptor, + PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor, + ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback, + PFNKSFILTERFACTORYPOWER WakeCallback, + PKSFILTERFACTORY *FilterFactory); + +#define KsDeleteFilterFactory(FilterFactory) \ + KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)( \ + KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\ + FilterFactory) + +KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData + (PKSFILTERFACTORY FilterFactory, + const KSFILTER_DESCRIPTOR *FilterDescriptor); + +KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem + (PKSFILTERFACTORY FilterFactory, PWSTR RefString, + PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags); + +KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState + (PKSFILTERFACTORY FilterFactory, BOOLEAN NewState); + +KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink + (PKSFILTERFACTORY FilterFactory); + +KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry); + +void __forceinline KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry) +{ + KsAddEvent(Filter, EventEntry); +} + +void __forceinline KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry) +{ + KsAddEvent(Pin, EventEntry); +} + +KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler + (PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry); + +KSDDKAPI void NTAPI KsGenerateEvents + (PVOID Object, const GUID *EventSet, ULONG EventId, + ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, + PVOID CallBackContext); + +void __forceinline KsFilterGenerateEvents + (PKSFILTER Filter, const GUID *EventSet, ULONG EventId, + ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, + PVOID CallBackContext) +{ + KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack, + CallBackContext); +} + +void __forceinline KsPinGenerateEvents + (PKSPIN Pin, const GUID *EventSet, ULONG EventId, + ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, + PVOID CallBackContext) +{ + KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack, + CallBackContext); +} + +typedef enum { + KSSTREAM_POINTER_STATE_UNLOCKED = 0, + KSSTREAM_POINTER_STATE_LOCKED +} KSSTREAM_POINTER_STATE; + +KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount + (PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes); + +KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer + (PKSPIN Pin, KSSTREAM_POINTER_STATE State); + +KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer + (PKSPIN Pin, KSSTREAM_POINTER_STATE State); + +KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode + (PKSSTREAM_POINTER StreamPointer, NTSTATUS Status); + +KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer); +KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject); + +KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock + (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, + BOOLEAN Eject); + +KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer); + +KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone + (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback, + ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer); + +KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets + (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, + BOOLEAN Eject); + +KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer); +KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer); + +KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp + (PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp, + PBOOLEAN LastFrameInIrp); + +KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout + (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback, + ULONGLONG Interval); + +KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer); +KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin); + +KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone + (PKSSTREAM_POINTER StreamPointer); + +KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out); +KSDDKAPI void NTAPI KsCompletePendingRequest (PIRP Irp); +KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp (PIRP Irp); +KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject (PFILE_OBJECT FileObject); +KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject (PFILE_OBJECT FileObject); + +PKSFILTER __forceinline KsGetFilterFromFileObject (PFILE_OBJECT FileObject) +{ + return (PKSFILTER) KsGetObjectFromFileObject(FileObject); +} + +PKSPIN __forceinline KsGetPinFromFileObject (PFILE_OBJECT FileObject) +{ + return (PKSPIN) KsGetObjectFromFileObject(FileObject); +} + +KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate (PKSFILTER Filter); +KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex (PKSFILTER Filter); +KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex (PKSFILTER Filter); +KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous); +KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin); +KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate); +KSDDKAPI void NTAPI KsPinAttachOrGate (PKSPIN Pin, PKSGATE OrGate); +KSDDKAPI void NTAPI KsPinAcquireProcessingMutex (PKSPIN Pin); +KSDDKAPI void NTAPI KsPinReleaseProcessingMutex (PKSPIN Pin); +KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate (PKSPROCESSPIN ProcessPin); + +KSDDKAPI void NTAPI KsPinGetCopyRelationships + (PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch); + +KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous); +KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object); + +PKSDEVICE __forceinline KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory) +{ + return (PKSDEVICE) KsGetParent((PVOID) FilterFactory); +} + +PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory (PKSFILTER Filter) +{ + return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter); +} + +KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin); +KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object); + +PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device) +{ + return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device); +} + +PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory) +{ + return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory); +} + +KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId); +KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId); +KSDDKAPI PVOID NTAPI KsGetNextSibling (PVOID Object); +KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin (PKSPIN Pin); + +PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory + (PKSFILTERFACTORY FilterFactory) +{ + return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory); +} + +PKSFILTER __forceinline KsFilterGetNextSiblingFilter (PKSFILTER Filter) +{ + return (PKSFILTER) KsGetNextSibling((PVOID) Filter); +} + +KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object); + +PKSDEVICE __forceinline KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory) +{ + return KsGetDevice((PVOID) FilterFactory); +} + +PKSDEVICE __forceinline KsFilterGetDevice (PKSFILTER Filter) +{ + return KsGetDevice((PVOID) Filter); +} + +PKSDEVICE __forceinline KsPinGetDevice (PKSPIN Pin) +{ + return KsGetDevice((PVOID) Pin); +} + +KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp (PIRP Irp); +KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp (PIRP Irp); +KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp (PIRP Irp); +KSDDKAPI void NTAPI KsAcquireControl (PVOID Object); +KSDDKAPI void NTAPI KsReleaseControl (PVOID Object); + +void __forceinline KsFilterAcquireControl (PKSFILTER Filter) +{ + KsAcquireControl((PVOID) Filter); +} + +void __forceinline KsFilterReleaseControl (PKSFILTER Filter) +{ + KsReleaseControl((PVOID) Filter); +} + +void __forceinline KsPinAcquireControl (PKSPIN Pin) +{ + KsAcquireControl((PVOID) Pin); +} + +void __forceinline KsPinReleaseControl (PKSPIN Pin) +{ + KsReleaseControl((PVOID) Pin); +} + +KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag + (KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free); + +KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag + (KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free); + +#define KsDiscard(Object,Pointer) \ + KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE) + +KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag); +KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag); + +KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems + (KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource); + +KSDDKAPI NTSTATUS NTAPI _KsEdit + (KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem, + ULONG NewSize, ULONG OldSize, ULONG Tag); + +#define KsEdit(Object, PointerToPointer, Tag) \ + _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), \ + sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag)) + +#define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag) \ + _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag)) + +KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins + (PDEVICE_OBJECT DeviceObject, const GUID *InterfaceClassGUID, + ULONG PinCount, WINBOOL *PinDirection, KSPIN_MEDIUM *MediumList, + GUID *CategoryList); + +KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory + (PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX *const PinDescriptor, + PULONG PinID); + +KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode + (PKSFILTER Filter, const KSNODE_DESCRIPTOR *const NodeDescriptor, + PULONG NodeID); + +KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections + (PKSFILTER Filter, ULONG NewConnectionsCount, + const KSTOPOLOGY_CONNECTION *const NewTopologyConnections); + +KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface + (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface); + +KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin); +KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin); + +KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface + (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface); + +#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) +KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface + (PKSPIN Pin, PIKSREFERENCECLOCK *Interface); +#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ + +KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time); + +KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame + (PKSPIN Pin, PVOID Data, ULONG Size, + PKSSTREAM_HEADER StreamHeader, PVOID Context); + +KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl + (PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader, + PVOID Context); + +KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback + (PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn); + +KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback + (PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion); + +KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback + (PKSPIN Pin, PFNKSPINHANDSHAKE Handshake); + +KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks + (PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake); + +KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks + (PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake); + +#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) +KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown + (PVOID Object, PUNKNOWN ClientUnknown); + +KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object); + +PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown + (PKSDEVICE Device, PUNKNOWN ClientUnknown) +{ + return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown); +} + +PUNKNOWN __forceinline KsDeviceGetOuterUnknown (PKSDEVICE Device) +{ + return KsGetOuterUnknown((PVOID) Device); +} + +PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown + (PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown) +{ + return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown); +} + +PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory) +{ + return KsGetOuterUnknown((PVOID)FilterFactory); +} + +PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown + (PKSFILTER Filter, PUNKNOWN ClientUnknown) +{ + return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown); +} + +PUNKNOWN __forceinline KsFilterGetOuterUnknown (PKSFILTER Filter) +{ + return KsGetOuterUnknown((PVOID)Filter); +} + +PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown + (PKSPIN Pin, PUNKNOWN ClientUnknown) +{ + return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown); +} + +PUNKNOWN __forceinline KsPinGetOuterUnknown (PKSPIN Pin) +{ + return KsGetOuterUnknown((PVOID)Pin); +} +#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ + +#else /* _NTDDK_ */ + +#ifndef KS_NO_CREATE_FUNCTIONS +KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle,PKSALLOCATOR_FRAMING AllocatorFraming,PHANDLE AllocatorHandle); +KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle,PKSCLOCK_CREATE ClockCreate,PHANDLE ClockHandle); +KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle); +KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle,PKSNODE_CREATE NodeCreate,ACCESS_MASK DesiredAccess,PHANDLE NodeHandle); +#endif + +#endif /* _NTDDK_ */ + +#ifdef __cplusplus +} +#endif + +#define DENY_USERMODE_ACCESS(pIrp,CompleteRequest) \ + if(pIrp->RequestorMode!=KernelMode) { \ + pIrp->IoStatus.Information = 0; \ + pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; \ + if(CompleteRequest) \ + IoCompleteRequest (pIrp,IO_NO_INCREMENT); \ + return STATUS_INVALID_DEVICE_REQUEST; \ + } + +#endif /* _KS_ */ + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksguid.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksguid.h new file mode 100644 index 0000000000..f0774d06ce --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksguid.h @@ -0,0 +1,28 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#define INITGUID +#include + +#ifndef DECLSPEC_SELECTANY +#define DECLSPEC_SELECTANY __declspec(selectany) +#endif + +#ifdef DEFINE_GUIDEX +#undef DEFINE_GUIDEX +#endif + +#ifdef __cplusplus +#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID DECLSPEC_SELECTANY name = { STATICGUIDOF(name) } +#else +#define DEFINE_GUIDEX(name) const CDECL GUID DECLSPEC_SELECTANY name = { STATICGUIDOF(name) } +#endif +#ifndef STATICGUIDOF +#define STATICGUIDOF(guid) STATIC_##guid +#endif + +#ifndef DEFINE_WAVEFORMATEX_GUID +#define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x),0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71 +#endif diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h new file mode 100644 index 0000000000..2242c1e03a --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h @@ -0,0 +1,4551 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#if !defined(_KS_) +#warning ks.h must be included before ksmedia.h +#include "ks.h" +#endif + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#if !defined(_KSMEDIA_) +#define _KSMEDIA_ + +typedef struct { + KSPROPERTY Property; + KSMULTIPLE_ITEM MultipleItem; +} KSMULTIPLE_DATA_PROP,*PKSMULTIPLE_DATA_PROP; + +#define STATIC_KSMEDIUMSETID_MidiBus \ + 0x05908040L,0x3246,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("05908040-3246-11D0-A5D6-28DB04C10000",KSMEDIUMSETID_MidiBus); +#define KSMEDIUMSETID_MidiBus DEFINE_GUIDNAMED(KSMEDIUMSETID_MidiBus) + +#define STATIC_KSMEDIUMSETID_VPBus \ + 0xA18C15ECL,0xCE43,0x11D0,0xAB,0xE7,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("A18C15EC-CE43-11D0-ABE7-00A0C9223196",KSMEDIUMSETID_VPBus); +#define KSMEDIUMSETID_VPBus DEFINE_GUIDNAMED(KSMEDIUMSETID_VPBus) + +#define STATIC_KSINTERFACESETID_Media \ + 0x3A13EB40L,0x30A7,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("3A13EB40-30A7-11D0-A5D6-28DB04C10000",KSINTERFACESETID_Media); +#define KSINTERFACESETID_Media DEFINE_GUIDNAMED(KSINTERFACESETID_Media) + +typedef enum { + KSINTERFACE_MEDIA_MUSIC, + KSINTERFACE_MEDIA_WAVE_BUFFERED, + KSINTERFACE_MEDIA_WAVE_QUEUED +} KSINTERFACE_MEDIA; + +#ifndef INIT_USBAUDIO_MID +#define INIT_USBAUDIO_MID(guid,id) \ +{ \ + (guid)->Data1 = 0x4e1cecd2 + (USHORT)(id); \ + (guid)->Data2 = 0x1679; \ + (guid)->Data3 = 0x463b; \ + (guid)->Data4[0] = 0xa7; \ + (guid)->Data4[1] = 0x2f; \ + (guid)->Data4[2] = 0xa5; \ + (guid)->Data4[3] = 0xbf; \ + (guid)->Data4[4] = 0x64; \ + (guid)->Data4[5] = 0xc8; \ + (guid)->Data4[6] = 0x6e; \ + (guid)->Data4[7] = 0xba; \ +} +#define EXTRACT_USBAUDIO_MID(guid) \ + (USHORT)((guid)->Data1 - 0x4e1cecd2) +#define DEFINE_USBAUDIO_MID_GUID(id) \ + 0x4e1cecd2+(USHORT)(id),0x1679,0x463b,0xa7,0x2f,0xa5,0xbf,0x64,0xc8,0x6e,0xba +#define IS_COMPATIBLE_USBAUDIO_MID(guid) \ + (((guid)->Data1 >= 0x4e1cecd2) && \ + ((guid)->Data1 < 0x4e1cecd2 + 0xffff) && \ + ((guid)->Data2 == 0x1679) && \ + ((guid)->Data3 == 0x463b) && \ + ((guid)->Data4[0] == 0xa7) && \ + ((guid)->Data4[1] == 0x2f) && \ + ((guid)->Data4[2] == 0xa5) && \ + ((guid)->Data4[3] == 0xbf) && \ + ((guid)->Data4[4] == 0x64) && \ + ((guid)->Data4[5] == 0xc8) && \ + ((guid)->Data4[6] == 0x6e) && \ + ((guid)->Data4[7] == 0xba) ) +#endif /* INIT_USBAUDIO_MID */ + +#ifndef INIT_USBAUDIO_PID +#define INIT_USBAUDIO_PID(guid,id) \ +{ \ + (guid)->Data1 = 0xabcc5a5e + (USHORT)(id); \ + (guid)->Data2 = 0xc263; \ + (guid)->Data3 = 0x463b; \ + (guid)->Data4[0] = 0xa7; \ + (guid)->Data4[1] = 0x2f; \ + (guid)->Data4[2] = 0xa5; \ + (guid)->Data4[3] = 0xbf; \ + (guid)->Data4[4] = 0x64; \ + (guid)->Data4[5] = 0xc8; \ + (guid)->Data4[6] = 0x6e; \ + (guid)->Data4[7] = 0xba; \ +} +#define EXTRACT_USBAUDIO_PID(guid) \ + (USHORT)((guid)->Data1 - 0xabcc5a5e) +#define DEFINE_USBAUDIO_PID_GUID(id) \ + 0xabcc5a5e+(USHORT)(id),0xc263,0x463b,0xa7,0x2f,0xa5,0xbf,0x64,0xc8,0x6e,0xba +#define IS_COMPATIBLE_USBAUDIO_PID(guid) \ + (((guid)->Data1 >= 0xabcc5a5e) && \ + ((guid)->Data1 < 0xabcc5a5e + 0xffff) && \ + ((guid)->Data2 == 0xc263) && \ + ((guid)->Data3 == 0x463b) && \ + ((guid)->Data4[0] == 0xa7) && \ + ((guid)->Data4[1] == 0x2f) && \ + ((guid)->Data4[2] == 0xa5) && \ + ((guid)->Data4[3] == 0xbf) && \ + ((guid)->Data4[4] == 0x64) && \ + ((guid)->Data4[5] == 0xc8) && \ + ((guid)->Data4[6] == 0x6e) && \ + ((guid)->Data4[7] == 0xba) ) +#endif /* INIT_USBAUDIO_PID */ + +#ifndef INIT_USBAUDIO_PRODUCT_NAME +#define INIT_USBAUDIO_PRODUCT_NAME(guid,vid,pid,strIndex) \ +{ \ + (guid)->Data1 = 0XFC575048 + (USHORT)(vid); \ + (guid)->Data2 = 0x2E08 + (USHORT)(pid); \ + (guid)->Data3 = 0x463B + (USHORT)(strIndex); \ + (guid)->Data4[0] = 0xA7; \ + (guid)->Data4[1] = 0x2F; \ + (guid)->Data4[2] = 0xA5; \ + (guid)->Data4[3] = 0xBF; \ + (guid)->Data4[4] = 0x64; \ + (guid)->Data4[5] = 0xC8; \ + (guid)->Data4[6] = 0x6E; \ + (guid)->Data4[7] = 0xBA; \ +} +#define DEFINE_USBAUDIO_PRODUCT_NAME(vid,pid,strIndex) \ + 0xFC575048+(USHORT)(vid),0x2E08+(USHORT)(pid),0x463B+(USHORT)(strIndex),0xA7,0x2F,0xA5,0xBF,0x64,0xC8,0x6E,0xBA +#endif /* INIT_USBAUDIO_PRODUCT_NAME */ + +#define STATIC_KSCOMPONENTID_USBAUDIO \ + 0x8F1275F0,0x26E9,0x4264,0xBA,0x4D,0x39,0xFF,0xF0,0x1D,0x94,0xAA +DEFINE_GUIDSTRUCT("8F1275F0-26E9-4264-BA4D-39FFF01D94AA",KSCOMPONENTID_USBAUDIO); +#define KSCOMPONENTID_USBAUDIO DEFINE_GUIDNAMED(KSCOMPONENTID_USBAUDIO) + +#define INIT_USB_TERMINAL(guid,id) \ +{ \ + (guid)->Data1 = 0xDFF219E0 + (USHORT)(id); \ + (guid)->Data2 = 0xF70F; \ + (guid)->Data3 = 0x11D0; \ + (guid)->Data4[0] = 0xb9; \ + (guid)->Data4[1] = 0x17; \ + (guid)->Data4[2] = 0x00; \ + (guid)->Data4[3] = 0xa0; \ + (guid)->Data4[4] = 0xc9; \ + (guid)->Data4[5] = 0x22; \ + (guid)->Data4[6] = 0x31; \ + (guid)->Data4[7] = 0x96; \ +} +#define EXTRACT_USB_TERMINAL(guid) \ + (USHORT)((guid)->Data1 - 0xDFF219E0) +#define DEFINE_USB_TERMINAL_GUID(id) \ + 0xDFF219E0+(USHORT)(id),0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 + +#define STATIC_KSNODETYPE_MICROPHONE \ + DEFINE_USB_TERMINAL_GUID(0x0201) +DEFINE_GUIDSTRUCT("DFF21BE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MICROPHONE); +#define KSNODETYPE_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE) + +#define STATIC_KSNODETYPE_DESKTOP_MICROPHONE \ + DEFINE_USB_TERMINAL_GUID(0x0202) +DEFINE_GUIDSTRUCT("DFF21BE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DESKTOP_MICROPHONE); +#define KSNODETYPE_DESKTOP_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_MICROPHONE) + +#define STATIC_KSNODETYPE_PERSONAL_MICROPHONE \ + DEFINE_USB_TERMINAL_GUID(0x0203) +DEFINE_GUIDSTRUCT("DFF21BE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PERSONAL_MICROPHONE); +#define KSNODETYPE_PERSONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_PERSONAL_MICROPHONE) + +#define STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE \ + DEFINE_USB_TERMINAL_GUID(0x0204) +DEFINE_GUIDSTRUCT("DFF21BE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE); +#define KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE) + +#define STATIC_KSNODETYPE_MICROPHONE_ARRAY \ + DEFINE_USB_TERMINAL_GUID(0x0205) +DEFINE_GUIDSTRUCT("DFF21BE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MICROPHONE_ARRAY); +#define KSNODETYPE_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE_ARRAY) + +#define STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY \ + DEFINE_USB_TERMINAL_GUID(0x0206) +DEFINE_GUIDSTRUCT("DFF21BE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PROCESSING_MICROPHONE_ARRAY); +#define KSNODETYPE_PROCESSING_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_PROCESSING_MICROPHONE_ARRAY) + +#define STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR \ + 0x830a44f2,0xa32d,0x476b,0xbe,0x97,0x42,0x84,0x56,0x73,0xb3,0x5a +DEFINE_GUIDSTRUCT("830a44f2-a32d-476b-be97-42845673b35a",KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR); +#define KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR) + +#define STATIC_KSNODETYPE_SPEAKER \ + DEFINE_USB_TERMINAL_GUID(0x0301) +DEFINE_GUIDSTRUCT("DFF21CE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPEAKER); +#define KSNODETYPE_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_SPEAKER) + +#define STATIC_KSNODETYPE_HEADPHONES \ + DEFINE_USB_TERMINAL_GUID(0x0302) +DEFINE_GUIDSTRUCT("DFF21CE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEADPHONES); +#define KSNODETYPE_HEADPHONES DEFINE_GUIDNAMED(KSNODETYPE_HEADPHONES) + +#define STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x0303) +DEFINE_GUIDSTRUCT("DFF21CE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO); +#define KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO) + +#define STATIC_KSNODETYPE_DESKTOP_SPEAKER \ + DEFINE_USB_TERMINAL_GUID(0x0304) +DEFINE_GUIDSTRUCT("DFF21CE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DESKTOP_SPEAKER); +#define KSNODETYPE_DESKTOP_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_SPEAKER) + +#define STATIC_KSNODETYPE_ROOM_SPEAKER \ + DEFINE_USB_TERMINAL_GUID(0x0305) +DEFINE_GUIDSTRUCT("DFF21CE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ROOM_SPEAKER); +#define KSNODETYPE_ROOM_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_ROOM_SPEAKER) + +#define STATIC_KSNODETYPE_COMMUNICATION_SPEAKER \ + DEFINE_USB_TERMINAL_GUID(0x0306) +DEFINE_GUIDSTRUCT("DFF21CE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_COMMUNICATION_SPEAKER); +#define KSNODETYPE_COMMUNICATION_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_COMMUNICATION_SPEAKER) + +#define STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER \ + DEFINE_USB_TERMINAL_GUID(0x0307) +DEFINE_GUIDSTRUCT("DFF21CE7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER); +#define KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER) + +#define STATIC_KSNODETYPE_HANDSET \ + DEFINE_USB_TERMINAL_GUID(0x0401) +DEFINE_GUIDSTRUCT("DFF21DE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HANDSET); +#define KSNODETYPE_HANDSET DEFINE_GUIDNAMED(KSNODETYPE_HANDSET) + +#define STATIC_KSNODETYPE_HEADSET \ + DEFINE_USB_TERMINAL_GUID(0x0402) +DEFINE_GUIDSTRUCT("DFF21DE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEADSET); +#define KSNODETYPE_HEADSET DEFINE_GUIDNAMED(KSNODETYPE_HEADSET) + +#define STATIC_KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION \ + DEFINE_USB_TERMINAL_GUID(0x0403) +DEFINE_GUIDSTRUCT("DFF21DE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION); +#define KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION DEFINE_GUIDNAMED(KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION) + +#define STATIC_KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE \ + DEFINE_USB_TERMINAL_GUID(0x0404) +DEFINE_GUIDSTRUCT("DFF21DE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE); +#define KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE) + +#define STATIC_KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE \ + DEFINE_USB_TERMINAL_GUID(0x0405) +DEFINE_GUIDSTRUCT("DFF21DE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE); +#define KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE) + +#define STATIC_KSNODETYPE_PHONE_LINE \ + DEFINE_USB_TERMINAL_GUID(0x0501) +DEFINE_GUIDSTRUCT("DFF21EE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PHONE_LINE); +#define KSNODETYPE_PHONE_LINE DEFINE_GUIDNAMED(KSNODETYPE_PHONE_LINE) + +#define STATIC_KSNODETYPE_TELEPHONE \ + DEFINE_USB_TERMINAL_GUID(0x0502) +DEFINE_GUIDSTRUCT("DFF21EE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_TELEPHONE); +#define KSNODETYPE_TELEPHONE DEFINE_GUIDNAMED(KSNODETYPE_TELEPHONE) + +#define STATIC_KSNODETYPE_DOWN_LINE_PHONE \ + DEFINE_USB_TERMINAL_GUID(0x0503) +DEFINE_GUIDSTRUCT("DFF21EE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DOWN_LINE_PHONE); +#define KSNODETYPE_DOWN_LINE_PHONE DEFINE_GUIDNAMED(KSNODETYPE_DOWN_LINE_PHONE) + +#define STATIC_KSNODETYPE_ANALOG_CONNECTOR \ + DEFINE_USB_TERMINAL_GUID(0x601) +DEFINE_GUIDSTRUCT("DFF21FE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ANALOG_CONNECTOR); +#define KSNODETYPE_ANALOG_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_CONNECTOR) + +#define STATIC_KSNODETYPE_DIGITAL_AUDIO_INTERFACE \ + DEFINE_USB_TERMINAL_GUID(0x0602) +DEFINE_GUIDSTRUCT("DFF21FE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DIGITAL_AUDIO_INTERFACE); +#define KSNODETYPE_DIGITAL_AUDIO_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_DIGITAL_AUDIO_INTERFACE) + +#define STATIC_KSNODETYPE_LINE_CONNECTOR \ + DEFINE_USB_TERMINAL_GUID(0x0603) +DEFINE_GUIDSTRUCT("DFF21FE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LINE_CONNECTOR); +#define KSNODETYPE_LINE_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LINE_CONNECTOR) + +#define STATIC_KSNODETYPE_LEGACY_AUDIO_CONNECTOR \ + DEFINE_USB_TERMINAL_GUID(0x0604) +DEFINE_GUIDSTRUCT("DFF21FE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LEGACY_AUDIO_CONNECTOR); +#define KSNODETYPE_LEGACY_AUDIO_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LEGACY_AUDIO_CONNECTOR) + +#define STATIC_KSNODETYPE_SPDIF_INTERFACE \ + DEFINE_USB_TERMINAL_GUID(0x0605) +DEFINE_GUIDSTRUCT("DFF21FE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPDIF_INTERFACE); +#define KSNODETYPE_SPDIF_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_SPDIF_INTERFACE) + +#define STATIC_KSNODETYPE_1394_DA_STREAM \ + DEFINE_USB_TERMINAL_GUID(0x0606) +DEFINE_GUIDSTRUCT("DFF21FE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_1394_DA_STREAM); +#define KSNODETYPE_1394_DA_STREAM DEFINE_GUIDNAMED(KSNODETYPE_1394_DA_STREAM) + +#define STATIC_KSNODETYPE_1394_DV_STREAM_SOUNDTRACK \ + DEFINE_USB_TERMINAL_GUID(0x0607) +DEFINE_GUIDSTRUCT("DFF21FE7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_1394_DV_STREAM_SOUNDTRACK); +#define KSNODETYPE_1394_DV_STREAM_SOUNDTRACK DEFINE_GUIDNAMED(KSNODETYPE_1394_DV_STREAM_SOUNDTRACK) + +#define STATIC_KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE \ + DEFINE_USB_TERMINAL_GUID(0x0701) +DEFINE_GUIDSTRUCT("DFF220E1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE); +#define KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE DEFINE_GUIDNAMED(KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE) + +#define STATIC_KSNODETYPE_EQUALIZATION_NOISE \ + DEFINE_USB_TERMINAL_GUID(0x0702) +DEFINE_GUIDSTRUCT("DFF220E2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_EQUALIZATION_NOISE); +#define KSNODETYPE_EQUALIZATION_NOISE DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZATION_NOISE) + +#define STATIC_KSNODETYPE_CD_PLAYER \ + DEFINE_USB_TERMINAL_GUID(0x0703) +DEFINE_GUIDSTRUCT("DFF220E3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_CD_PLAYER); +#define KSNODETYPE_CD_PLAYER DEFINE_GUIDNAMED(KSNODETYPE_CD_PLAYER) + +#define STATIC_KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE \ + DEFINE_USB_TERMINAL_GUID(0x0704) +DEFINE_GUIDSTRUCT("DFF220E4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE); +#define KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE DEFINE_GUIDNAMED(KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE) + +#define STATIC_KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE \ + DEFINE_USB_TERMINAL_GUID(0x0705) +DEFINE_GUIDSTRUCT("DFF220E5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE); +#define KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE DEFINE_GUIDNAMED(KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE) + +#define STATIC_KSNODETYPE_MINIDISK \ + DEFINE_USB_TERMINAL_GUID(0x0706) +DEFINE_GUIDSTRUCT("DFF220E6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MINIDISK); +#define KSNODETYPE_MINIDISK DEFINE_GUIDNAMED(KSNODETYPE_MINIDISK) + +#define STATIC_KSNODETYPE_ANALOG_TAPE \ + DEFINE_USB_TERMINAL_GUID(0x0707) +DEFINE_GUIDSTRUCT("DFF220E7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ANALOG_TAPE); +#define KSNODETYPE_ANALOG_TAPE DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_TAPE) + +#define STATIC_KSNODETYPE_PHONOGRAPH \ + DEFINE_USB_TERMINAL_GUID(0x0708) +DEFINE_GUIDSTRUCT("DFF220E8-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PHONOGRAPH); +#define KSNODETYPE_PHONOGRAPH DEFINE_GUIDNAMED(KSNODETYPE_PHONOGRAPH) + +#define STATIC_KSNODETYPE_VCR_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x0708) +DEFINE_GUIDSTRUCT("DFF220E9-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VCR_AUDIO); +#define KSNODETYPE_VCR_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VCR_AUDIO) + +#define STATIC_KSNODETYPE_VIDEO_DISC_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x070A) +DEFINE_GUIDSTRUCT("DFF220EA-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_DISC_AUDIO); +#define KSNODETYPE_VIDEO_DISC_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_DISC_AUDIO) + +#define STATIC_KSNODETYPE_DVD_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x070B) +DEFINE_GUIDSTRUCT("DFF220EB-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DVD_AUDIO); +#define KSNODETYPE_DVD_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DVD_AUDIO) + +#define STATIC_KSNODETYPE_TV_TUNER_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x070C) +DEFINE_GUIDSTRUCT("DFF220EC-F70F-11D0-B917-00A0C9223196",KSNODETYPE_TV_TUNER_AUDIO); +#define KSNODETYPE_TV_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_TV_TUNER_AUDIO) + +#define STATIC_KSNODETYPE_SATELLITE_RECEIVER_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x070D) +DEFINE_GUIDSTRUCT("DFF220ED-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SATELLITE_RECEIVER_AUDIO); +#define KSNODETYPE_SATELLITE_RECEIVER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_SATELLITE_RECEIVER_AUDIO) + +#define STATIC_KSNODETYPE_CABLE_TUNER_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x070E) +DEFINE_GUIDSTRUCT("DFF220EE-F70F-11D0-B917-00A0C9223196",KSNODETYPE_CABLE_TUNER_AUDIO); +#define KSNODETYPE_CABLE_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_CABLE_TUNER_AUDIO) + +#define STATIC_KSNODETYPE_DSS_AUDIO \ + DEFINE_USB_TERMINAL_GUID(0x070F) +DEFINE_GUIDSTRUCT("DFF220EF-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DSS_AUDIO); +#define KSNODETYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DSS_AUDIO) + +#define STATIC_KSNODETYPE_RADIO_RECEIVER \ + DEFINE_USB_TERMINAL_GUID(0x0710) +DEFINE_GUIDSTRUCT("DFF220F0-F70F-11D0-B917-00A0C9223196",KSNODETYPE_RADIO_RECEIVER); +#define KSNODETYPE_RADIO_RECEIVER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_RECEIVER) + +#define STATIC_KSNODETYPE_RADIO_TRANSMITTER \ + DEFINE_USB_TERMINAL_GUID(0x0711) +DEFINE_GUIDSTRUCT("DFF220F1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_RADIO_TRANSMITTER); +#define KSNODETYPE_RADIO_TRANSMITTER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_TRANSMITTER) + +#define STATIC_KSNODETYPE_MULTITRACK_RECORDER \ + DEFINE_USB_TERMINAL_GUID(0x0712) +DEFINE_GUIDSTRUCT("DFF220F2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MULTITRACK_RECORDER); +#define KSNODETYPE_MULTITRACK_RECORDER DEFINE_GUIDNAMED(KSNODETYPE_MULTITRACK_RECORDER) + +#define STATIC_KSNODETYPE_SYNTHESIZER \ + DEFINE_USB_TERMINAL_GUID(0x0713) +DEFINE_GUIDSTRUCT("DFF220F3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SYNTHESIZER); +#define KSNODETYPE_SYNTHESIZER DEFINE_GUIDNAMED(KSNODETYPE_SYNTHESIZER) + +#define STATIC_KSNODETYPE_SWSYNTH \ + 0x423274A0L,0x8B81,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88 +DEFINE_GUIDSTRUCT("423274A0-8B81-11D1-A050-0000F8004788",KSNODETYPE_SWSYNTH); +#define KSNODETYPE_SWSYNTH DEFINE_GUIDNAMED(KSNODETYPE_SWSYNTH) + +#define STATIC_KSNODETYPE_SWMIDI \ + 0xCB9BEFA0L,0xA251,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88 +DEFINE_GUIDSTRUCT("CB9BEFA0-A251-11D1-A050-0000F8004788",KSNODETYPE_SWMIDI); +#define KSNODETYPE_SWMIDI DEFINE_GUIDNAMED(KSNODETYPE_SWMIDI) + +#define STATIC_KSNODETYPE_DRM_DESCRAMBLE \ + 0xFFBB6E3FL,0xCCFE,0x4D84,0x90,0xD9,0x42,0x14,0x18,0xB0,0x3A,0x8E +DEFINE_GUIDSTRUCT("FFBB6E3F-CCFE-4D84-90D9-421418B03A8E",KSNODETYPE_DRM_DESCRAMBLE); +#define KSNODETYPE_DRM_DESCRAMBLE DEFINE_GUIDNAMED(KSNODETYPE_DRM_DESCRAMBLE) + +#define STATIC_KSCATEGORY_AUDIO \ + 0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("6994AD04-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_AUDIO); +#define KSCATEGORY_AUDIO DEFINE_GUIDNAMED(KSCATEGORY_AUDIO) + +#define STATIC_KSCATEGORY_VIDEO \ + 0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("6994AD05-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_VIDEO); +#define KSCATEGORY_VIDEO DEFINE_GUIDNAMED(KSCATEGORY_VIDEO) + +#define STATIC_KSCATEGORY_TEXT \ + 0x6994AD06L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("6994AD06-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_TEXT); +#define KSCATEGORY_TEXT DEFINE_GUIDNAMED(KSCATEGORY_TEXT) + +#define STATIC_KSCATEGORY_NETWORK \ + 0x67C9CC3CL,0x69C4,0x11D2,0x87,0x59,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("67C9CC3C-69C4-11D2-8759-00A0C9223196",KSCATEGORY_NETWORK); +#define KSCATEGORY_NETWORK DEFINE_GUIDNAMED(KSCATEGORY_NETWORK) + +#define STATIC_KSCATEGORY_TOPOLOGY \ + 0xDDA54A40L,0x1E4C,0x11D1,0xA0,0x50,0x40,0x57,0x05,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("DDA54A40-1E4C-11D1-A050-405705C10000",KSCATEGORY_TOPOLOGY); +#define KSCATEGORY_TOPOLOGY DEFINE_GUIDNAMED(KSCATEGORY_TOPOLOGY) + +#define STATIC_KSCATEGORY_VIRTUAL \ + 0x3503EAC4L,0x1F26,0x11D1,0x8A,0xB0,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("3503EAC4-1F26-11D1-8AB0-00A0C9223196",KSCATEGORY_VIRTUAL); +#define KSCATEGORY_VIRTUAL DEFINE_GUIDNAMED(KSCATEGORY_VIRTUAL) + +#define STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL \ + 0xBF963D80L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("BF963D80-C559-11D0-8A2B-00A0C9255AC1",KSCATEGORY_ACOUSTIC_ECHO_CANCEL); +#define KSCATEGORY_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSCATEGORY_ACOUSTIC_ECHO_CANCEL) + +#define STATIC_KSCATEGORY_SYSAUDIO \ + 0xA7C7A5B1L,0x5AF3,0x11D1,0x9C,0xED,0x00,0xA0,0x24,0xBF,0x04,0x07 +DEFINE_GUIDSTRUCT("A7C7A5B1-5AF3-11D1-9CED-00A024BF0407",KSCATEGORY_SYSAUDIO); +#define KSCATEGORY_SYSAUDIO DEFINE_GUIDNAMED(KSCATEGORY_SYSAUDIO) + +#define STATIC_KSCATEGORY_WDMAUD \ + 0x3E227E76L,0x690D,0x11D2,0x81,0x61,0x00,0x00,0xF8,0x77,0x5B,0xF1 +DEFINE_GUIDSTRUCT("3E227E76-690D-11D2-8161-0000F8775BF1",KSCATEGORY_WDMAUD); +#define KSCATEGORY_WDMAUD DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD) + +#define STATIC_KSCATEGORY_AUDIO_GFX \ + 0x9BAF9572L,0x340C,0x11D3,0xAB,0xDC,0x00,0xA0,0xC9,0x0A,0xB1,0x6F +DEFINE_GUIDSTRUCT("9BAF9572-340C-11D3-ABDC-00A0C90AB16F",KSCATEGORY_AUDIO_GFX); +#define KSCATEGORY_AUDIO_GFX DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_GFX) + +#define STATIC_KSCATEGORY_AUDIO_SPLITTER \ + 0x9EA331FAL,0xB91B,0x45F8,0x92,0x85,0xBD,0x2B,0xC7,0x7A,0xFC,0xDE +DEFINE_GUIDSTRUCT("9EA331FA-B91B-45F8-9285-BD2BC77AFCDE",KSCATEGORY_AUDIO_SPLITTER); +#define KSCATEGORY_AUDIO_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_SPLITTER) + +#define STATIC_KSCATEGORY_SYNTHESIZER STATIC_KSNODETYPE_SYNTHESIZER +#define KSCATEGORY_SYNTHESIZER KSNODETYPE_SYNTHESIZER + +#define STATIC_KSCATEGORY_DRM_DESCRAMBLE STATIC_KSNODETYPE_DRM_DESCRAMBLE +#define KSCATEGORY_DRM_DESCRAMBLE KSNODETYPE_DRM_DESCRAMBLE + +#define STATIC_KSCATEGORY_AUDIO_DEVICE \ + 0xFBF6F530L,0x07B9,0x11D2,0xA7,0x1E,0x00,0x00,0xF8,0x00,0x47,0x88 +DEFINE_GUIDSTRUCT("FBF6F530-07B9-11D2-A71E-0000F8004788",KSCATEGORY_AUDIO_DEVICE); +#define KSCATEGORY_AUDIO_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_DEVICE) + +#define STATIC_KSCATEGORY_PREFERRED_WAVEOUT_DEVICE \ + 0xD6C5066EL,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88 +DEFINE_GUIDSTRUCT("D6C5066E-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_WAVEOUT_DEVICE); +#define KSCATEGORY_PREFERRED_WAVEOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEOUT_DEVICE) + +#define STATIC_KSCATEGORY_PREFERRED_WAVEIN_DEVICE \ + 0xD6C50671L,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88 +DEFINE_GUIDSTRUCT("D6C50671-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_WAVEIN_DEVICE); +#define KSCATEGORY_PREFERRED_WAVEIN_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEIN_DEVICE) + +#define STATIC_KSCATEGORY_PREFERRED_MIDIOUT_DEVICE \ + 0xD6C50674L,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88 +DEFINE_GUIDSTRUCT("D6C50674-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_MIDIOUT_DEVICE); +#define KSCATEGORY_PREFERRED_MIDIOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_MIDIOUT_DEVICE) + +#define STATIC_KSCATEGORY_WDMAUD_USE_PIN_NAME \ + 0x47A4FA20L,0xA251,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88 +DEFINE_GUIDSTRUCT("47A4FA20-A251-11D1-A050-0000F8004788",KSCATEGORY_WDMAUD_USE_PIN_NAME); +#define KSCATEGORY_WDMAUD_USE_PIN_NAME DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD_USE_PIN_NAME) + +#define STATIC_KSCATEGORY_ESCALANTE_PLATFORM_DRIVER \ + 0x74f3aea8L,0x9768,0x11d1,0x8e,0x07,0x00,0xa0,0xc9,0x5e,0xc2,0x2e +DEFINE_GUIDSTRUCT("74f3aea8-9768-11d1-8e07-00a0c95ec22e",KSCATEGORY_ESCALANTE_PLATFORM_DRIVER); +#define KSCATEGORY_ESCALANTE_PLATFORM_DRIVER DEFINE_GUIDNAMED(KSCATEGORY_ESCALANTE_PLATFORM_DRIVER) + +#define STATIC_KSDATAFORMAT_TYPE_VIDEO \ + 0x73646976L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71 +DEFINE_GUIDSTRUCT("73646976-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_VIDEO); +#define KSDATAFORMAT_TYPE_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VIDEO) + +#define STATIC_KSDATAFORMAT_TYPE_AUDIO \ + 0x73647561L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71 +DEFINE_GUIDSTRUCT("73647561-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_AUDIO); +#define KSDATAFORMAT_TYPE_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUDIO) + +#define STATIC_KSDATAFORMAT_TYPE_TEXT \ + 0x73747874L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71 +DEFINE_GUIDSTRUCT("73747874-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_TEXT); +#define KSDATAFORMAT_TYPE_TEXT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_TEXT) + +#if !defined(DEFINE_WAVEFORMATEX_GUID) +#define DEFINE_WAVEFORMATEX_GUID(x) \ + (USHORT)(x),0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71 +#endif + +#define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX \ + 0x00000000L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71 +DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_WAVEFORMATEX); +#define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + +#define INIT_WAVEFORMATEX_GUID(Guid,x) \ +{ \ + *(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX; \ + (Guid)->Data1 = (USHORT)(x); \ +} + +#define EXTRACT_WAVEFORMATEX_ID(Guid) \ + (USHORT)((Guid)->Data1) + +#define IS_VALID_WAVEFORMATEX_GUID(Guid) \ + (!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1,sizeof(GUID) - sizeof(USHORT))) + +#ifndef INIT_MMREG_MID +#define INIT_MMREG_MID(guid,id) \ +{ \ + (guid)->Data1 = 0xd5a47fa7 + (USHORT)(id); \ + (guid)->Data2 = 0x6d98; \ + (guid)->Data3 = 0x11d1; \ + (guid)->Data4[0] = 0xa2; \ + (guid)->Data4[1] = 0x1a; \ + (guid)->Data4[2] = 0x00; \ + (guid)->Data4[3] = 0xa0; \ + (guid)->Data4[4] = 0xc9; \ + (guid)->Data4[5] = 0x22; \ + (guid)->Data4[6] = 0x31; \ + (guid)->Data4[7] = 0x96; \ +} +#define EXTRACT_MMREG_MID(guid) \ + (USHORT)((guid)->Data1 - 0xd5a47fa7) +#define DEFINE_MMREG_MID_GUID(id) \ + 0xd5a47fa7+(USHORT)(id),0x6d98,0x11d1,0xa2,0x1a,0x00,0xa0,0xc9,0x22,0x31,0x96 + +#define IS_COMPATIBLE_MMREG_MID(guid) \ + (((guid)->Data1 >= 0xd5a47fa7) && \ + ((guid)->Data1 < 0xd5a47fa7 + 0xffff) && \ + ((guid)->Data2 == 0x6d98) && \ + ((guid)->Data3 == 0x11d1) && \ + ((guid)->Data4[0] == 0xa2) && \ + ((guid)->Data4[1] == 0x1a) && \ + ((guid)->Data4[2] == 0x00) && \ + ((guid)->Data4[3] == 0xa0) && \ + ((guid)->Data4[4] == 0xc9) && \ + ((guid)->Data4[5] == 0x22) && \ + ((guid)->Data4[6] == 0x31) && \ + ((guid)->Data4[7] == 0x96) ) +#endif /* INIT_MMREG_MID */ + +#ifndef INIT_MMREG_PID +#define INIT_MMREG_PID(guid,id) \ +{ \ + (guid)->Data1 = 0xe36dc2ac + (USHORT)(id); \ + (guid)->Data2 = 0x6d9a; \ + (guid)->Data3 = 0x11d1; \ + (guid)->Data4[0] = 0xa2; \ + (guid)->Data4[1] = 0x1a; \ + (guid)->Data4[2] = 0x00; \ + (guid)->Data4[3] = 0xa0; \ + (guid)->Data4[4] = 0xc9; \ + (guid)->Data4[5] = 0x22; \ + (guid)->Data4[6] = 0x31; \ + (guid)->Data4[7] = 0x96; \ +} +#define EXTRACT_MMREG_PID(guid) \ + (USHORT)((guid)->Data1 - 0xe36dc2ac) +#define DEFINE_MMREG_PID_GUID(id) \ + 0xe36dc2ac+(USHORT)(id),0x6d9a,0x11d1,0xa2,0x1a,0x00,0xa0,0xc9,0x22,0x31,0x96 + +#define IS_COMPATIBLE_MMREG_PID(guid) \ + (((guid)->Data1 >= 0xe36dc2ac) && \ + ((guid)->Data1 < 0xe36dc2ac + 0xffff) && \ + ((guid)->Data2 == 0x6d9a) && \ + ((guid)->Data3 == 0x11d1) && \ + ((guid)->Data4[0] == 0xa2) && \ + ((guid)->Data4[1] == 0x1a) && \ + ((guid)->Data4[2] == 0x00) && \ + ((guid)->Data4[3] == 0xa0) && \ + ((guid)->Data4[4] == 0xc9) && \ + ((guid)->Data4[5] == 0x22) && \ + ((guid)->Data4[6] == 0x31) && \ + ((guid)->Data4[7] == 0x96) ) +#endif /* INIT_MMREG_PID */ + +#define STATIC_KSDATAFORMAT_SUBTYPE_ANALOG \ + 0x6dba3190L,0x67bd,0x11cf,0xa0,0xf7,0x00,0x20,0xaf,0xd1,0x56,0xe4 +DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4",KSDATAFORMAT_SUBTYPE_ANALOG); +#define KSDATAFORMAT_SUBTYPE_ANALOG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ANALOG) + +#define STATIC_KSDATAFORMAT_SUBTYPE_PCM \ + DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM) +DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_PCM); +#define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM) + +#ifdef _INC_MMREG +#define STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT \ + DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_IEEE_FLOAT) +DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_IEEE_FLOAT); +#define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT) + +#define STATIC_KSDATAFORMAT_SUBTYPE_DRM \ + DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DRM) +DEFINE_GUIDSTRUCT("00000009-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_DRM); +#define KSDATAFORMAT_SUBTYPE_DRM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DRM) + +#define STATIC_KSDATAFORMAT_SUBTYPE_ALAW \ + DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ALAW) +DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_ALAW); +#define KSDATAFORMAT_SUBTYPE_ALAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ALAW) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MULAW \ + DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MULAW) +DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_MULAW); +#define KSDATAFORMAT_SUBTYPE_MULAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MULAW) + +#define STATIC_KSDATAFORMAT_SUBTYPE_ADPCM \ + DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ADPCM) +DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_ADPCM); +#define KSDATAFORMAT_SUBTYPE_ADPCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ADPCM) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG \ + DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MPEG) +DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_MPEG); +#define KSDATAFORMAT_SUBTYPE_MPEG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG) +#endif /* _INC_MMREG */ + +#define STATIC_KSDATAFORMAT_SPECIFIER_VC_ID \ + 0xAD98D184L,0xAAC3,0x11D0,0xA4,0x1C,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196",KSDATAFORMAT_SPECIFIER_VC_ID); +#define KSDATAFORMAT_SPECIFIER_VC_ID DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VC_ID) + +#define STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX \ + 0x05589f81L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a +DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_WAVEFORMATEX); +#define KSDATAFORMAT_SPECIFIER_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) + +#define STATIC_KSDATAFORMAT_SPECIFIER_DSOUND \ + 0x518590a2L,0xa184,0x11d0,0x85,0x22,0x00,0xc0,0x4f,0xd9,0xba,0xf3 +DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3",KSDATAFORMAT_SPECIFIER_DSOUND); +#define KSDATAFORMAT_SPECIFIER_DSOUND DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DSOUND) + +#if defined(_INC_MMSYSTEM) || defined(_INC_MMREG) +#if !defined(PACK_PRAGMAS_NOT_SUPPORTED) +#include +#endif +typedef struct { + KSDATAFORMAT DataFormat; + WAVEFORMATEX WaveFormatEx; +} KSDATAFORMAT_WAVEFORMATEX,*PKSDATAFORMAT_WAVEFORMATEX; + +#ifndef _WAVEFORMATEXTENSIBLE_ +#define _WAVEFORMATEXTENSIBLE_ +typedef struct { + WAVEFORMATEX Format; + union { + WORD wValidBitsPerSample; + WORD wSamplesPerBlock; + WORD wReserved; + } Samples; + DWORD dwChannelMask; + + GUID SubFormat; +} WAVEFORMATEXTENSIBLE,*PWAVEFORMATEXTENSIBLE; +#endif /* _WAVEFORMATEXTENSIBLE_ */ + +#if !defined(WAVE_FORMAT_EXTENSIBLE) +#define WAVE_FORMAT_EXTENSIBLE 0xFFFE +#endif + +typedef struct { + ULONG Flags; + ULONG Control; + WAVEFORMATEX WaveFormatEx; +} KSDSOUND_BUFFERDESC,*PKSDSOUND_BUFFERDESC; + +typedef struct { + KSDATAFORMAT DataFormat; + KSDSOUND_BUFFERDESC BufferDesc; +} KSDATAFORMAT_DSOUND,*PKSDATAFORMAT_DSOUND; + +#if !defined(PACK_PRAGMAS_NOT_SUPPORTED) +#include +#endif +#endif /* defined(_INC_MMSYSTEM) || defined(_INC_MMREG) */ + +#define KSDSOUND_BUFFER_PRIMARY 0x00000001 +#define KSDSOUND_BUFFER_STATIC 0x00000002 +#define KSDSOUND_BUFFER_LOCHARDWARE 0x00000004 +#define KSDSOUND_BUFFER_LOCSOFTWARE 0x00000008 + +#define KSDSOUND_BUFFER_CTRL_3D 0x00000001 +#define KSDSOUND_BUFFER_CTRL_FREQUENCY 0x00000002 +#define KSDSOUND_BUFFER_CTRL_PAN 0x00000004 +#define KSDSOUND_BUFFER_CTRL_VOLUME 0x00000008 +#define KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY 0x00000010 + +typedef struct { + DWORDLONG PlayOffset; + DWORDLONG WriteOffset; +} KSAUDIO_POSITION,*PKSAUDIO_POSITION; + +typedef struct _DS3DVECTOR { + __MINGW_EXTENSION union { + FLOAT x; + FLOAT dvX; + }; + __MINGW_EXTENSION union { + FLOAT y; + FLOAT dvY; + }; + __MINGW_EXTENSION union { + FLOAT z; + FLOAT dvZ; + }; +} DS3DVECTOR,*PDS3DVECTOR; + +#define STATIC_KSPROPSETID_DirectSound3DListener \ + 0x437b3414L,0xd060,0x11d0,0x85,0x83,0x00,0xc0,0x4f,0xd9,0xba,0xf3 +DEFINE_GUIDSTRUCT("437b3414-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DListener); +#define KSPROPSETID_DirectSound3DListener DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DListener) + +typedef enum { + KSPROPERTY_DIRECTSOUND3DLISTENER_ALL, + KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION, + KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY, + KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION, + KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR, + KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR, + KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR, + KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH, + KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION +} KSPROPERTY_DIRECTSOUND3DLISTENER; + +typedef struct { + DS3DVECTOR Position; + DS3DVECTOR Velocity; + DS3DVECTOR OrientFront; + DS3DVECTOR OrientTop; + FLOAT DistanceFactor; + FLOAT RolloffFactor; + FLOAT DopplerFactor; +} KSDS3D_LISTENER_ALL,*PKSDS3D_LISTENER_ALL; + +typedef struct { + DS3DVECTOR Front; + DS3DVECTOR Top; +} KSDS3D_LISTENER_ORIENTATION,*PKSDS3D_LISTENER_ORIENTATION; + +#define STATIC_KSPROPSETID_DirectSound3DBuffer \ + 0x437b3411L,0xd060,0x11d0,0x85,0x83,0x00,0xc0,0x4f,0xd9,0xba,0xf3 +DEFINE_GUIDSTRUCT("437b3411-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DBuffer); +#define KSPROPSETID_DirectSound3DBuffer DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DBuffer) + +typedef enum { + KSPROPERTY_DIRECTSOUND3DBUFFER_ALL, + KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION, + KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY, + KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES, + KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION, + KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME, + KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE, + KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE, + KSPROPERTY_DIRECTSOUND3DBUFFER_MODE +} KSPROPERTY_DIRECTSOUND3DBUFFER; + +typedef struct { + DS3DVECTOR Position; + DS3DVECTOR Velocity; + ULONG InsideConeAngle; + ULONG OutsideConeAngle; + DS3DVECTOR ConeOrientation; + LONG ConeOutsideVolume; + FLOAT MinDistance; + FLOAT MaxDistance; + ULONG Mode; +} KSDS3D_BUFFER_ALL,*PKSDS3D_BUFFER_ALL; + +typedef struct { + ULONG InsideConeAngle; + ULONG OutsideConeAngle; +} KSDS3D_BUFFER_CONE_ANGLES,*PKSDS3D_BUFFER_CONE_ANGLES; + +#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE (-1) +#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN 5 +#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW 10 +#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE 20 +#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX 180 + +#define KSDSOUND_3D_MODE_NORMAL 0x00000000 +#define KSDSOUND_3D_MODE_HEADRELATIVE 0x00000001 +#define KSDSOUND_3D_MODE_DISABLE 0x00000002 + +#define KSDSOUND_BUFFER_CTRL_HRTF_3D 0x40000000 + +typedef struct { + ULONG Size; + ULONG Enabled; + WINBOOL SwapChannels; + WINBOOL ZeroAzimuth; + WINBOOL CrossFadeOutput; + ULONG FilterSize; +} KSDS3D_HRTF_PARAMS_MSG,*PKSDS3D_HRTF_PARAMS_MSG; + +typedef enum { + FULL_FILTER, + LIGHT_FILTER, + KSDS3D_FILTER_QUALITY_COUNT +} KSDS3D_HRTF_FILTER_QUALITY; + +typedef struct { + ULONG Size; + KSDS3D_HRTF_FILTER_QUALITY Quality; + FLOAT SampleRate; + ULONG MaxFilterSize; + ULONG FilterTransientMuteLength; + ULONG FilterOverlapBufferLength; + ULONG OutputOverlapBufferLength; + ULONG Reserved; +} KSDS3D_HRTF_INIT_MSG,*PKSDS3D_HRTF_INIT_MSG; + +typedef enum { + FLOAT_COEFF, + SHORT_COEFF, + KSDS3D_COEFF_COUNT +} KSDS3D_HRTF_COEFF_FORMAT; + +typedef enum { + DIRECT_FORM, + CASCADE_FORM, + KSDS3D_FILTER_METHOD_COUNT +} KSDS3D_HRTF_FILTER_METHOD; + +typedef enum { + DS3D_HRTF_VERSION_1 +} KSDS3D_HRTF_FILTER_VERSION; + +typedef struct { + KSDS3D_HRTF_FILTER_METHOD FilterMethod; + KSDS3D_HRTF_COEFF_FORMAT CoeffFormat; + KSDS3D_HRTF_FILTER_VERSION Version; + ULONG Reserved; +} KSDS3D_HRTF_FILTER_FORMAT_MSG,*PKSDS3D_HRTF_FILTER_FORMAT_MSG; + +#define STATIC_KSPROPSETID_Hrtf3d \ + 0xb66decb0L,0xa083,0x11d0,0x85,0x1e,0x00,0xc0,0x4f,0xd9,0xba,0xf3 +DEFINE_GUIDSTRUCT("b66decb0-a083-11d0-851e-00c04fd9baf3",KSPROPSETID_Hrtf3d); +#define KSPROPSETID_Hrtf3d DEFINE_GUIDNAMED(KSPROPSETID_Hrtf3d) + +typedef enum { + KSPROPERTY_HRTF3D_PARAMS = 0, + KSPROPERTY_HRTF3D_INITIALIZE, + KSPROPERTY_HRTF3D_FILTER_FORMAT +} KSPROPERTY_HRTF3D; + +typedef struct { + LONG Channel; + FLOAT VolSmoothScale; + FLOAT TotalDryAttenuation; + FLOAT TotalWetAttenuation; + LONG SmoothFrequency; + LONG Delay; +} KSDS3D_ITD_PARAMS,*PKSDS3D_ITD_PARAMS; + +typedef struct { + ULONG Enabled; + KSDS3D_ITD_PARAMS LeftParams; + KSDS3D_ITD_PARAMS RightParams; + ULONG Reserved; +} KSDS3D_ITD_PARAMS_MSG,*PKSDS3D_ITD_PARAMS_MSG; + +#define STATIC_KSPROPSETID_Itd3d \ + 0x6429f090L,0x9fd9,0x11d0,0xa7,0x5b,0x00,0xa0,0xc9,0x03,0x65,0xe3 +DEFINE_GUIDSTRUCT("6429f090-9fd9-11d0-a75b-00a0c90365e3",KSPROPSETID_Itd3d); +#define KSPROPSETID_Itd3d DEFINE_GUIDNAMED(KSPROPSETID_Itd3d) + +typedef enum { + KSPROPERTY_ITD3D_PARAMS = 0 +} KSPROPERTY_ITD3D; + +typedef struct { + KSDATARANGE DataRange; + ULONG MaximumChannels; + ULONG MinimumBitsPerSample; + ULONG MaximumBitsPerSample; + ULONG MinimumSampleFrequency; + ULONG MaximumSampleFrequency; +} KSDATARANGE_AUDIO,*PKSDATARANGE_AUDIO; + +#define STATIC_KSDATAFORMAT_SUBTYPE_RIFF \ + 0x4995DAEEL,0x9EE6,0x11D0,0xA4,0x0E,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("4995DAEE-9EE6-11D0-A40E-00A0C9223196",KSDATAFORMAT_SUBTYPE_RIFF); +#define KSDATAFORMAT_SUBTYPE_RIFF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFF) + +#define STATIC_KSDATAFORMAT_SUBTYPE_RIFFWAVE \ + 0xe436eb8bL,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70 +DEFINE_GUIDSTRUCT("e436eb8b-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_RIFFWAVE); +#define KSDATAFORMAT_SUBTYPE_RIFFWAVE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFWAVE) + +#define STATIC_KSPROPSETID_Bibliographic \ + 0x07BA150EL,0xE2B1,0x11D0,0xAC,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("07BA150E-E2B1-11D0-AC17-00A0C9223196",KSPROPSETID_Bibliographic); +#define KSPROPSETID_Bibliographic DEFINE_GUIDNAMED(KSPROPSETID_Bibliographic) + +typedef enum { + KSPROPERTY_BIBLIOGRAPHIC_LEADER = 'RDL ', + KSPROPERTY_BIBLIOGRAPHIC_LCCN = '010 ', + KSPROPERTY_BIBLIOGRAPHIC_ISBN = '020 ', + KSPROPERTY_BIBLIOGRAPHIC_ISSN = '220 ', + KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE = '040 ', + KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME = '001 ', + KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY = '011 ', + KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME = '111 ', + KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE = '031 ', + KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE = '042 ', + KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT = '542 ', + KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE = '642 ', + KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION = '062 ', + KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION = '003 ', + KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE = '044 ', + KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT = '094 ', + KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE = '005 ', + KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE = '405 ', + KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE = '505 ', + KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT = '805 ', + KSPROPERTY_BIBLIOGRAPHIC_CITATION = '015 ', + KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT = '115 ', + KSPROPERTY_BIBLIOGRAPHIC_SUMMARY = '025 ', + KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE = '125 ', + KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE = '035 ', + KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS = '835 ', + KSPROPERTY_BIBLIOGRAPHIC_AWARDS = '685 ', + KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME = '006 ', + KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM = '056 ', + KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC = '156 ', + KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE = '556 ', + KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM = '856 ', + KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE = '037 ', + KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED = '047 ', + KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ', + KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 ' +} KSPROPERTY_BIBLIOGRAPHIC; + +#define STATIC_KSPROPSETID_TopologyNode \ + 0x45FFAAA1L,0x6E1B,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00 +DEFINE_GUIDSTRUCT("45FFAAA1-6E1B-11D0-BCF2-444553540000",KSPROPSETID_TopologyNode); +#define KSPROPSETID_TopologyNode DEFINE_GUIDNAMED(KSPROPSETID_TopologyNode) + +typedef enum { + KSPROPERTY_TOPOLOGYNODE_ENABLE = 1, + KSPROPERTY_TOPOLOGYNODE_RESET +} KSPROPERTY_TOPOLOGYNODE; + +#define STATIC_KSPROPSETID_RtAudio \ + 0xa855a48c,0x2f78,0x4729,0x90,0x51,0x19,0x68,0x74,0x6b,0x9e,0xef +DEFINE_GUIDSTRUCT("A855A48C-2F78-4729-9051-1968746B9EEF",KSPROPSETID_RtAudio); +#define KSPROPSETID_RtAudio DEFINE_GUIDNAMED(KSPROPSETID_RtAudio) + +typedef enum { + KSPROPERTY_RTAUDIO_GETPOSITIONFUNCTION +} KSPROPERTY_RTAUDIO; + +#define STATIC_KSPROPSETID_DrmAudioStream \ + 0x2f2c8ddd,0x4198,0x4fac,0xba,0x29,0x61,0xbb,0x5,0xb7,0xde,0x6 +DEFINE_GUIDSTRUCT("2F2C8DDD-4198-4fac-BA29-61BB05B7DE06",KSPROPSETID_DrmAudioStream); +#define KSPROPSETID_DrmAudioStream DEFINE_GUIDNAMED(KSPROPSETID_DrmAudioStream) + +typedef enum { + KSPROPERTY_DRMAUDIOSTREAM_CONTENTID +} KSPROPERTY_DRMAUDIOSTREAM; + +#define STATIC_KSPROPSETID_Audio \ + 0x45FFAAA0L,0x6E1B,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00 +DEFINE_GUIDSTRUCT("45FFAAA0-6E1B-11D0-BCF2-444553540000",KSPROPSETID_Audio); +#define KSPROPSETID_Audio DEFINE_GUIDNAMED(KSPROPSETID_Audio) + +typedef enum { + KSPROPERTY_AUDIO_LATENCY = 1, + KSPROPERTY_AUDIO_COPY_PROTECTION, + KSPROPERTY_AUDIO_CHANNEL_CONFIG, + KSPROPERTY_AUDIO_VOLUMELEVEL, + KSPROPERTY_AUDIO_POSITION, + KSPROPERTY_AUDIO_DYNAMIC_RANGE, + KSPROPERTY_AUDIO_QUALITY, + KSPROPERTY_AUDIO_SAMPLING_RATE, + KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE, + KSPROPERTY_AUDIO_MIX_LEVEL_TABLE, + KSPROPERTY_AUDIO_MIX_LEVEL_CAPS, + KSPROPERTY_AUDIO_MUX_SOURCE, + KSPROPERTY_AUDIO_MUTE, + KSPROPERTY_AUDIO_BASS, + KSPROPERTY_AUDIO_MID, + KSPROPERTY_AUDIO_TREBLE, + KSPROPERTY_AUDIO_BASS_BOOST, + KSPROPERTY_AUDIO_EQ_LEVEL, + KSPROPERTY_AUDIO_NUM_EQ_BANDS, + KSPROPERTY_AUDIO_EQ_BANDS, + KSPROPERTY_AUDIO_AGC, + KSPROPERTY_AUDIO_DELAY, + KSPROPERTY_AUDIO_LOUDNESS, + KSPROPERTY_AUDIO_WIDE_MODE, + KSPROPERTY_AUDIO_WIDENESS, + KSPROPERTY_AUDIO_REVERB_LEVEL, + KSPROPERTY_AUDIO_CHORUS_LEVEL, + KSPROPERTY_AUDIO_DEV_SPECIFIC, + KSPROPERTY_AUDIO_DEMUX_DEST, + KSPROPERTY_AUDIO_STEREO_ENHANCE, + KSPROPERTY_AUDIO_MANUFACTURE_GUID, + KSPROPERTY_AUDIO_PRODUCT_GUID, + KSPROPERTY_AUDIO_CPU_RESOURCES, + KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY, + KSPROPERTY_AUDIO_SURROUND_ENCODE, + KSPROPERTY_AUDIO_3D_INTERFACE, + KSPROPERTY_AUDIO_PEAKMETER, + KSPROPERTY_AUDIO_ALGORITHM_INSTANCE, + KSPROPERTY_AUDIO_FILTER_STATE, + KSPROPERTY_AUDIO_PREFERRED_STATUS +} KSPROPERTY_AUDIO; + +#define KSAUDIO_QUALITY_WORST 0x0 +#define KSAUDIO_QUALITY_PC 0x1 +#define KSAUDIO_QUALITY_BASIC 0x2 +#define KSAUDIO_QUALITY_ADVANCED 0x3 + +#define KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU 0x00000000 +#define KSAUDIO_CPU_RESOURCES_HOST_CPU 0x7FFFFFFF + +typedef struct { + WINBOOL fCopyrighted; + WINBOOL fOriginal; +} KSAUDIO_COPY_PROTECTION,*PKSAUDIO_COPY_PROTECTION; + +typedef struct { + LONG ActiveSpeakerPositions; +} KSAUDIO_CHANNEL_CONFIG,*PKSAUDIO_CHANNEL_CONFIG; + +#define SPEAKER_FRONT_LEFT 0x1 +#define SPEAKER_FRONT_RIGHT 0x2 +#define SPEAKER_FRONT_CENTER 0x4 +#define SPEAKER_LOW_FREQUENCY 0x8 +#define SPEAKER_BACK_LEFT 0x10 +#define SPEAKER_BACK_RIGHT 0x20 +#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 +#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 +#define SPEAKER_BACK_CENTER 0x100 +#define SPEAKER_SIDE_LEFT 0x200 +#define SPEAKER_SIDE_RIGHT 0x400 +#define SPEAKER_TOP_CENTER 0x800 +#define SPEAKER_TOP_FRONT_LEFT 0x1000 +#define SPEAKER_TOP_FRONT_CENTER 0x2000 +#define SPEAKER_TOP_FRONT_RIGHT 0x4000 +#define SPEAKER_TOP_BACK_LEFT 0x8000 +#define SPEAKER_TOP_BACK_CENTER 0x10000 +#define SPEAKER_TOP_BACK_RIGHT 0x20000 + +#define SPEAKER_RESERVED 0x7FFC0000 + +#define SPEAKER_ALL 0x80000000 + +#define KSAUDIO_SPEAKER_DIRECTOUT 0 +#define KSAUDIO_SPEAKER_MONO (SPEAKER_FRONT_CENTER) +#define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT) +#define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT) +#define KSAUDIO_SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER) +#define KSAUDIO_SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT) +#define KSAUDIO_SPEAKER_7POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \ + SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER) +#define KSAUDIO_SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \ + SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT) +#define KSAUDIO_SPEAKER_7POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \ + SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \ + SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \ + SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT) + +#define KSAUDIO_SPEAKER_5POINT1_BACK KSAUDIO_SPEAKER_5POINT1 +#define KSAUDIO_SPEAKER_7POINT1_WIDE KSAUDIO_SPEAKER_7POINT1 + +#define KSAUDIO_SPEAKER_GROUND_FRONT_LEFT SPEAKER_FRONT_LEFT +#define KSAUDIO_SPEAKER_GROUND_FRONT_CENTER SPEAKER_FRONT_CENTER +#define KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT SPEAKER_FRONT_RIGHT +#define KSAUDIO_SPEAKER_GROUND_REAR_LEFT SPEAKER_BACK_LEFT +#define KSAUDIO_SPEAKER_GROUND_REAR_RIGHT SPEAKER_BACK_RIGHT +#define KSAUDIO_SPEAKER_TOP_MIDDLE SPEAKER_TOP_CENTER +#define KSAUDIO_SPEAKER_SUPER_WOOFER SPEAKER_LOW_FREQUENCY + +typedef struct { + ULONG QuietCompression; + ULONG LoudCompression; +} KSAUDIO_DYNAMIC_RANGE,*PKSAUDIO_DYNAMIC_RANGE; + +typedef struct { + WINBOOL Mute; + LONG Level; +} KSAUDIO_MIXLEVEL,*PKSAUDIO_MIXLEVEL; + +typedef struct { + WINBOOL Mute; + LONG Minimum; + LONG Maximum; + LONG Reset; +} KSAUDIO_MIX_CAPS,*PKSAUDIO_MIX_CAPS; + +typedef struct { + ULONG InputChannels; + ULONG OutputChannels; + KSAUDIO_MIX_CAPS Capabilities[1]; +} KSAUDIO_MIXCAP_TABLE,*PKSAUDIO_MIXCAP_TABLE; + +typedef enum { + SE_TECH_NONE, + SE_TECH_ANALOG_DEVICES_PHAT, + SE_TECH_CREATIVE, + SE_TECH_NATIONAL_SEMI, + SE_TECH_YAMAHA_YMERSION, + SE_TECH_BBE, + SE_TECH_CRYSTAL_SEMI, + SE_TECH_QSOUND_QXPANDER, + SE_TECH_SPATIALIZER, + SE_TECH_SRS, + SE_TECH_PLATFORM_TECH, + SE_TECH_AKM, + SE_TECH_AUREAL, + SE_TECH_AZTECH, + SE_TECH_BINAURA, + SE_TECH_ESS_TECH, + SE_TECH_HARMAN_VMAX, + SE_TECH_NVIDEA, + SE_TECH_PHILIPS_INCREDIBLE, + SE_TECH_TEXAS_INST, + SE_TECH_VLSI_TECH +} SE_TECHNIQUE; + +typedef struct { + SE_TECHNIQUE Technique; + ULONG Center; + ULONG Depth; + ULONG Reserved; +} KSAUDIO_STEREO_ENHANCE,*PKSAUDIO_STEREO_ENHANCE; + +typedef enum { + KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT = 0, + KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT, + KSPROPERTY_SYSAUDIO_RECORD_DEFAULT, + KSPROPERTY_SYSAUDIO_MIDI_DEFAULT, + KSPROPERTY_SYSAUDIO_MIXER_DEFAULT +} KSPROPERTY_SYSAUDIO_DEFAULT_TYPE; + +typedef struct { + WINBOOL Enable; + KSPROPERTY_SYSAUDIO_DEFAULT_TYPE DeviceType; + ULONG Flags; + ULONG Reserved; +} KSAUDIO_PREFERRED_STATUS,*PKSAUDIO_PREFERRED_STATUS; + +#define STATIC_KSNODETYPE_DAC \ + 0x507AE360L,0xC554,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("507AE360-C554-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DAC); +#define KSNODETYPE_DAC DEFINE_GUIDNAMED(KSNODETYPE_DAC) + +#define STATIC_KSNODETYPE_ADC \ + 0x4D837FE0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("4D837FE0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_ADC); +#define KSNODETYPE_ADC DEFINE_GUIDNAMED(KSNODETYPE_ADC) + +#define STATIC_KSNODETYPE_SRC \ + 0x9DB7B9E0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SRC); +#define KSNODETYPE_SRC DEFINE_GUIDNAMED(KSNODETYPE_SRC) + +#define STATIC_KSNODETYPE_SUPERMIX \ + 0xE573ADC0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("E573ADC0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SUPERMIX); +#define KSNODETYPE_SUPERMIX DEFINE_GUIDNAMED(KSNODETYPE_SUPERMIX) + +#define STATIC_KSNODETYPE_MUX \ + 0x2CEAF780L,0xC556,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("2CEAF780-C556-11D0-8A2B-00A0C9255AC1",KSNODETYPE_MUX); +#define KSNODETYPE_MUX DEFINE_GUIDNAMED(KSNODETYPE_MUX) + +#define STATIC_KSNODETYPE_DEMUX \ + 0xC0EB67D4L,0xE807,0x11D0,0x95,0x8A,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("C0EB67D4-E807-11D0-958A-00C04FB925D3",KSNODETYPE_DEMUX); +#define KSNODETYPE_DEMUX DEFINE_GUIDNAMED(KSNODETYPE_DEMUX) + +#define STATIC_KSNODETYPE_SUM \ + 0xDA441A60L,0xC556,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("DA441A60-C556-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SUM); +#define KSNODETYPE_SUM DEFINE_GUIDNAMED(KSNODETYPE_SUM) + +#define STATIC_KSNODETYPE_MUTE \ + 0x02B223C0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("02B223C0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_MUTE); +#define KSNODETYPE_MUTE DEFINE_GUIDNAMED(KSNODETYPE_MUTE) + +#define STATIC_KSNODETYPE_VOLUME \ + 0x3A5ACC00L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("3A5ACC00-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_VOLUME); +#define KSNODETYPE_VOLUME DEFINE_GUIDNAMED(KSNODETYPE_VOLUME) + +#define STATIC_KSNODETYPE_TONE \ + 0x7607E580L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("7607E580-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_TONE); +#define KSNODETYPE_TONE DEFINE_GUIDNAMED(KSNODETYPE_TONE) + +#define STATIC_KSNODETYPE_EQUALIZER \ + 0x9D41B4A0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("9D41B4A0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_EQUALIZER); +#define KSNODETYPE_EQUALIZER DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZER) + +#define STATIC_KSNODETYPE_AGC \ + 0xE88C9BA0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("E88C9BA0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_AGC); +#define KSNODETYPE_AGC DEFINE_GUIDNAMED(KSNODETYPE_AGC) + +#define STATIC_KSNODETYPE_NOISE_SUPPRESS \ + 0xe07f903f,0x62fd,0x4e60,0x8c,0xdd,0xde,0xa7,0x23,0x66,0x65,0xb5 +DEFINE_GUIDSTRUCT("E07F903F-62FD-4e60-8CDD-DEA7236665B5",KSNODETYPE_NOISE_SUPPRESS); +#define KSNODETYPE_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSNODETYPE_NOISE_SUPPRESS) + +#define STATIC_KSNODETYPE_DELAY \ + 0x144981E0L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("144981E0-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DELAY); +#define KSNODETYPE_DELAY DEFINE_GUIDNAMED(KSNODETYPE_DELAY) + +#define STATIC_KSNODETYPE_LOUDNESS \ + 0x41887440L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("41887440-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_LOUDNESS); +#define KSNODETYPE_LOUDNESS DEFINE_GUIDNAMED(KSNODETYPE_LOUDNESS) + +#define STATIC_KSNODETYPE_PROLOGIC_DECODER \ + 0x831C2C80L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("831C2C80-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_PROLOGIC_DECODER); +#define KSNODETYPE_PROLOGIC_DECODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_DECODER) + +#define STATIC_KSNODETYPE_STEREO_WIDE \ + 0xA9E69800L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("A9E69800-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_STEREO_WIDE); +#define KSNODETYPE_STEREO_WIDE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_WIDE) + +#define STATIC_KSNODETYPE_STEREO_ENHANCE \ + 0xAF6878ACL,0xE83F,0x11D0,0x95,0x8A,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("AF6878AC-E83F-11D0-958A-00C04FB925D3",KSNODETYPE_STEREO_ENHANCE); +#define KSNODETYPE_STEREO_ENHANCE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_ENHANCE) + +#define STATIC_KSNODETYPE_REVERB \ + 0xEF0328E0L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("EF0328E0-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_REVERB); +#define KSNODETYPE_REVERB DEFINE_GUIDNAMED(KSNODETYPE_REVERB) + +#define STATIC_KSNODETYPE_CHORUS \ + 0x20173F20L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("20173F20-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_CHORUS); +#define KSNODETYPE_CHORUS DEFINE_GUIDNAMED(KSNODETYPE_CHORUS) + +#define STATIC_KSNODETYPE_3D_EFFECTS \ + 0x55515860L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("55515860-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_3D_EFFECTS); +#define KSNODETYPE_3D_EFFECTS DEFINE_GUIDNAMED(KSNODETYPE_3D_EFFECTS) + +#define STATIC_KSNODETYPE_ACOUSTIC_ECHO_CANCEL STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL +#define KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSCATEGORY_ACOUSTIC_ECHO_CANCEL + +#define STATIC_KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL \ + 0x1c22c56dL,0x9879,0x4f5b,0xa3,0x89,0x27,0x99,0x6d,0xdc,0x28,0x10 +DEFINE_GUIDSTRUCT("1C22C56D-9879-4f5b-A389-27996DDC2810",KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL); +#define KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL) + +#define STATIC_KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS \ + 0x5ab0882eL,0x7274,0x4516,0x87,0x7d,0x4e,0xee,0x99,0xba,0x4f,0xd0 +DEFINE_GUIDSTRUCT("5AB0882E-7274-4516-877D-4EEE99BA4FD0",KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS); +#define KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS) + +#define STATIC_KSALGORITHMINSTANCE_SYSTEM_AGC \ + 0x950e55b9L,0x877c,0x4c67,0xbe,0x8,0xe4,0x7b,0x56,0x11,0x13,0xa +DEFINE_GUIDSTRUCT("950E55B9-877C-4c67-BE08-E47B5611130A",KSALGORITHMINSTANCE_SYSTEM_AGC); +#define KSALGORITHMINSTANCE_SYSTEM_AGC DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_AGC) + +#define STATIC_KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR \ + 0xB6F5A0A0L,0x9E61,0x4F8C,0x91,0xE3,0x76,0xCF,0xF,0x3C,0x47,0x1F +DEFINE_GUIDSTRUCT("B6F5A0A0-9E61-4f8c-91E3-76CF0F3C471F",KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR); +#define KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR) + +#define STATIC_KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR +#define KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR + +#define STATIC_KSNODETYPE_DEV_SPECIFIC \ + 0x941C7AC0L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1 +DEFINE_GUIDSTRUCT("941C7AC0-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DEV_SPECIFIC); +#define KSNODETYPE_DEV_SPECIFIC DEFINE_GUIDNAMED(KSNODETYPE_DEV_SPECIFIC) + +#define STATIC_KSNODETYPE_PROLOGIC_ENCODER \ + 0x8074C5B2L,0x3C66,0x11D2,0xB4,0x5A,0x30,0x78,0x30,0x2C,0x20,0x30 +DEFINE_GUIDSTRUCT("8074C5B2-3C66-11D2-B45A-3078302C2030",KSNODETYPE_PROLOGIC_ENCODER); +#define KSNODETYPE_PROLOGIC_ENCODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_ENCODER) +#define KSNODETYPE_SURROUND_ENCODER KSNODETYPE_PROLOGIC_ENCODER + +#define STATIC_KSNODETYPE_PEAKMETER \ + 0xa085651eL,0x5f0d,0x4b36,0xa8,0x69,0xd1,0x95,0xd6,0xab,0x4b,0x9e +DEFINE_GUIDSTRUCT("A085651E-5F0D-4b36-A869-D195D6AB4B9E",KSNODETYPE_PEAKMETER); +#define KSNODETYPE_PEAKMETER DEFINE_GUIDNAMED(KSNODETYPE_PEAKMETER) + +#define STATIC_KSAUDFNAME_BASS \ + 0x185FEDE0L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE0-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_BASS); +#define KSAUDFNAME_BASS DEFINE_GUIDNAMED(KSAUDFNAME_BASS) + +#define STATIC_KSAUDFNAME_TREBLE \ + 0x185FEDE1L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE1-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_TREBLE); +#define KSAUDFNAME_TREBLE DEFINE_GUIDNAMED(KSAUDFNAME_TREBLE) + +#define STATIC_KSAUDFNAME_3D_STEREO \ + 0x185FEDE2L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE2-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_3D_STEREO); +#define KSAUDFNAME_3D_STEREO DEFINE_GUIDNAMED(KSAUDFNAME_3D_STEREO) + +#define STATIC_KSAUDFNAME_MASTER_VOLUME \ + 0x185FEDE3L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE3-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MASTER_VOLUME); +#define KSAUDFNAME_MASTER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_VOLUME) + +#define STATIC_KSAUDFNAME_MASTER_MUTE \ + 0x185FEDE4L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE4-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MASTER_MUTE); +#define KSAUDFNAME_MASTER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_MUTE) + +#define STATIC_KSAUDFNAME_WAVE_VOLUME \ + 0x185FEDE5L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE5-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_VOLUME); +#define KSAUDFNAME_WAVE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_VOLUME) + +#define STATIC_KSAUDFNAME_WAVE_MUTE \ + 0x185FEDE6L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE6-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_MUTE); +#define KSAUDFNAME_WAVE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_MUTE) + +#define STATIC_KSAUDFNAME_MIDI_VOLUME \ + 0x185FEDE7L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE7-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_VOLUME); +#define KSAUDFNAME_MIDI_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_VOLUME) + +#define STATIC_KSAUDFNAME_MIDI_MUTE \ + 0x185FEDE8L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE8-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_MUTE); +#define KSAUDFNAME_MIDI_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_MUTE) + +#define STATIC_KSAUDFNAME_CD_VOLUME \ + 0x185FEDE9L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDE9-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_VOLUME); +#define KSAUDFNAME_CD_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_VOLUME) + +#define STATIC_KSAUDFNAME_CD_MUTE \ + 0x185FEDEAL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDEA-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_MUTE); +#define KSAUDFNAME_CD_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_CD_MUTE) + +#define STATIC_KSAUDFNAME_LINE_VOLUME \ + 0x185FEDEBL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDEB-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_VOLUME); +#define KSAUDFNAME_LINE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_VOLUME) + +#define STATIC_KSAUDFNAME_LINE_MUTE \ + 0x185FEDECL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDEC-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_MUTE); +#define KSAUDFNAME_LINE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_LINE_MUTE) + +#define STATIC_KSAUDFNAME_MIC_VOLUME \ + 0x185FEDEDL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDED-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_VOLUME); +#define KSAUDFNAME_MIC_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_VOLUME) + +#define STATIC_KSAUDFNAME_MIC_MUTE \ + 0x185FEDEEL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDEE-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_MUTE); +#define KSAUDFNAME_MIC_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIC_MUTE) + +#define STATIC_KSAUDFNAME_RECORDING_SOURCE \ + 0x185FEDEFL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDEF-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_RECORDING_SOURCE); +#define KSAUDFNAME_RECORDING_SOURCE DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_SOURCE) + +#define STATIC_KSAUDFNAME_PC_SPEAKER_VOLUME \ + 0x185FEDF0L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF0-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER_VOLUME); +#define KSAUDFNAME_PC_SPEAKER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_VOLUME) + +#define STATIC_KSAUDFNAME_PC_SPEAKER_MUTE \ + 0x185FEDF1L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF1-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER_MUTE); +#define KSAUDFNAME_PC_SPEAKER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_MUTE) + +#define STATIC_KSAUDFNAME_MIDI_IN_VOLUME \ + 0x185FEDF2L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF2-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_IN_VOLUME); +#define KSAUDFNAME_MIDI_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_IN_VOLUME) + +#define STATIC_KSAUDFNAME_CD_IN_VOLUME \ + 0x185FEDF3L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF3-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_IN_VOLUME); +#define KSAUDFNAME_CD_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_IN_VOLUME) + +#define STATIC_KSAUDFNAME_LINE_IN_VOLUME \ + 0x185FEDF4L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF4-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_IN_VOLUME); +#define KSAUDFNAME_LINE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN_VOLUME) + +#define STATIC_KSAUDFNAME_MIC_IN_VOLUME \ + 0x185FEDF5L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF5-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_IN_VOLUME); +#define KSAUDFNAME_MIC_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_IN_VOLUME) + +#define STATIC_KSAUDFNAME_WAVE_IN_VOLUME \ + 0x185FEDF6L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF6-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_IN_VOLUME); +#define KSAUDFNAME_WAVE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_IN_VOLUME) + +#define STATIC_KSAUDFNAME_VOLUME_CONTROL \ + 0x185FEDF7L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF7-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_VOLUME_CONTROL); +#define KSAUDFNAME_VOLUME_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_VOLUME_CONTROL) + +#define STATIC_KSAUDFNAME_MIDI \ + 0x185FEDF8L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF8-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI); +#define KSAUDFNAME_MIDI DEFINE_GUIDNAMED(KSAUDFNAME_MIDI) + +#define STATIC_KSAUDFNAME_LINE_IN \ + 0x185FEDF9L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDF9-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_IN); +#define KSAUDFNAME_LINE_IN DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN) + +#define STATIC_KSAUDFNAME_RECORDING_CONTROL \ + 0x185FEDFAL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDFA-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_RECORDING_CONTROL); +#define KSAUDFNAME_RECORDING_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_CONTROL) + +#define STATIC_KSAUDFNAME_CD_AUDIO \ + 0x185FEDFBL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDFB-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_AUDIO); +#define KSAUDFNAME_CD_AUDIO DEFINE_GUIDNAMED(KSAUDFNAME_CD_AUDIO) + +#define STATIC_KSAUDFNAME_AUX_VOLUME \ + 0x185FEDFCL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDFC-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX_VOLUME); +#define KSAUDFNAME_AUX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_AUX_VOLUME) + +#define STATIC_KSAUDFNAME_AUX_MUTE \ + 0x185FEDFDL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDFD-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX_MUTE); +#define KSAUDFNAME_AUX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_AUX_MUTE) + +#define STATIC_KSAUDFNAME_AUX \ + 0x185FEDFEL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDFE-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX); +#define KSAUDFNAME_AUX DEFINE_GUIDNAMED(KSAUDFNAME_AUX) + +#define STATIC_KSAUDFNAME_PC_SPEAKER \ + 0x185FEDFFL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEDFF-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER); +#define KSAUDFNAME_PC_SPEAKER DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER) + +#define STATIC_KSAUDFNAME_WAVE_OUT_MIX \ + 0x185FEE00L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("185FEE00-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_OUT_MIX); +#define KSAUDFNAME_WAVE_OUT_MIX DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_OUT_MIX) + +#define STATIC_KSAUDFNAME_MONO_OUT \ + 0xf9b41dc3L,0x96e2,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT); +#define KSAUDFNAME_MONO_OUT DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT) + +#define STATIC_KSAUDFNAME_STEREO_MIX \ + 0xdff077L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("00DFF077-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX); +#define KSAUDFNAME_STEREO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX) + +#define STATIC_KSAUDFNAME_MONO_MIX \ + 0xdff078L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("00DFF078-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX); +#define KSAUDFNAME_MONO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX) + +#define STATIC_KSAUDFNAME_MONO_OUT_VOLUME \ + 0x1ad247ebL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("1AD247EB-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT_VOLUME); +#define KSAUDFNAME_MONO_OUT_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_VOLUME) + +#define STATIC_KSAUDFNAME_MONO_OUT_MUTE \ + 0x1ad247ecL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("1AD247EC-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT_MUTE); +#define KSAUDFNAME_MONO_OUT_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_MUTE) + +#define STATIC_KSAUDFNAME_STEREO_MIX_VOLUME \ + 0x1ad247edL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("1AD247ED-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX_VOLUME); +#define KSAUDFNAME_STEREO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_VOLUME) + +#define STATIC_KSAUDFNAME_STEREO_MIX_MUTE \ + 0x22b0eafdL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX_MUTE); +#define KSAUDFNAME_STEREO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_MUTE) + +#define STATIC_KSAUDFNAME_MONO_MIX_VOLUME \ + 0x22b0eafeL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX_VOLUME); +#define KSAUDFNAME_MONO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_VOLUME) + +#define STATIC_KSAUDFNAME_MONO_MIX_MUTE \ + 0x2bc31d69L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("2BC31D69-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX_MUTE); +#define KSAUDFNAME_MONO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_MUTE) + +#define STATIC_KSAUDFNAME_MICROPHONE_BOOST \ + 0x2bc31d6aL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MICROPHONE_BOOST); +#define KSAUDFNAME_MICROPHONE_BOOST DEFINE_GUIDNAMED(KSAUDFNAME_MICROPHONE_BOOST) + +#define STATIC_KSAUDFNAME_ALTERNATE_MICROPHONE \ + 0x2bc31d6bL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_ALTERNATE_MICROPHONE); +#define KSAUDFNAME_ALTERNATE_MICROPHONE DEFINE_GUIDNAMED(KSAUDFNAME_ALTERNATE_MICROPHONE) + +#define STATIC_KSAUDFNAME_3D_DEPTH \ + 0x63ff5747L,0x991f,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("63FF5747-991F-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_3D_DEPTH); +#define KSAUDFNAME_3D_DEPTH DEFINE_GUIDNAMED(KSAUDFNAME_3D_DEPTH) + +#define STATIC_KSAUDFNAME_3D_CENTER \ + 0x9f0670b4L,0x991f,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("9F0670B4-991F-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_3D_CENTER); +#define KSAUDFNAME_3D_CENTER DEFINE_GUIDNAMED(KSAUDFNAME_3D_CENTER) + +#define STATIC_KSAUDFNAME_VIDEO_VOLUME \ + 0x9b46e708L,0x992a,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("9B46E708-992A-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_VIDEO_VOLUME); +#define KSAUDFNAME_VIDEO_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_VOLUME) + +#define STATIC_KSAUDFNAME_VIDEO_MUTE \ + 0x9b46e709L,0x992a,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("9B46E709-992A-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_VIDEO_MUTE); +#define KSAUDFNAME_VIDEO_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_MUTE) + +#define STATIC_KSAUDFNAME_VIDEO \ + 0x915daec4L,0xa434,0x11d2,0xac,0x52,0x0,0xc0,0x4f,0x8e,0xfb,0x68 +DEFINE_GUIDSTRUCT("915DAEC4-A434-11d2-AC52-00C04F8EFB68",KSAUDFNAME_VIDEO); +#define KSAUDFNAME_VIDEO DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO) + +#define STATIC_KSAUDFNAME_PEAKMETER \ + 0x57e24340L,0xfc5b,0x4612,0xa5,0x62,0x72,0xb1,0x1a,0x29,0xdf,0xae +DEFINE_GUIDSTRUCT("57E24340-FC5B-4612-A562-72B11A29DFAE",KSAUDFNAME_PEAKMETER); +#define KSAUDFNAME_PEAKMETER DEFINE_GUIDNAMED(KSAUDFNAME_PEAKMETER) + +#define KSNODEPIN_STANDARD_IN 1 +#define KSNODEPIN_STANDARD_OUT 0 + +#define KSNODEPIN_SUM_MUX_IN 1 +#define KSNODEPIN_SUM_MUX_OUT 0 + +#define KSNODEPIN_DEMUX_IN 0 +#define KSNODEPIN_DEMUX_OUT 1 + +#define KSNODEPIN_AEC_RENDER_IN 1 +#define KSNODEPIN_AEC_RENDER_OUT 0 +#define KSNODEPIN_AEC_CAPTURE_IN 2 +#define KSNODEPIN_AEC_CAPTURE_OUT 3 + +#define STATIC_KSMETHODSETID_Wavetable \ + 0xDCEF31EBL,0xD907,0x11D0,0x95,0x83,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("DCEF31EB-D907-11D0-9583-00C04FB925D3",KSMETHODSETID_Wavetable); +#define KSMETHODSETID_Wavetable DEFINE_GUIDNAMED(KSMETHODSETID_Wavetable) + +typedef enum { + KSMETHOD_WAVETABLE_WAVE_ALLOC, + KSMETHOD_WAVETABLE_WAVE_FREE, + KSMETHOD_WAVETABLE_WAVE_FIND, + KSMETHOD_WAVETABLE_WAVE_WRITE +} KSMETHOD_WAVETABLE; + +typedef struct { + KSIDENTIFIER Identifier; + ULONG Size; + WINBOOL Looped; + ULONG LoopPoint; + WINBOOL InROM; + KSDATAFORMAT Format; +} KSWAVETABLE_WAVE_DESC,*PKSWAVETABLE_WAVE_DESC; + +#define STATIC_KSPROPSETID_Acoustic_Echo_Cancel \ + 0xd7a4af8bL,0x3dc1,0x4902,0x91,0xea,0x8a,0x15,0xc9,0x0e,0x05,0xb2 +DEFINE_GUIDSTRUCT("D7A4AF8B-3DC1-4902-91EA-8A15C90E05B2",KSPROPSETID_Acoustic_Echo_Cancel); +#define KSPROPSETID_Acoustic_Echo_Cancel DEFINE_GUIDNAMED(KSPROPSETID_Acoustic_Echo_Cancel) + +typedef enum { + KSPROPERTY_AEC_NOISE_FILL_ENABLE = 0, + KSPROPERTY_AEC_STATUS, + KSPROPERTY_AEC_MODE +} KSPROPERTY_AEC; + +#define AEC_STATUS_FD_HISTORY_UNINITIALIZED 0x0 +#define AEC_STATUS_FD_HISTORY_CONTINUOUSLY_CONVERGED 0x1 +#define AEC_STATUS_FD_HISTORY_PREVIOUSLY_DIVERGED 0x2 +#define AEC_STATUS_FD_CURRENTLY_CONVERGED 0x8 + +#define AEC_MODE_PASS_THROUGH 0x0 +#define AEC_MODE_HALF_DUPLEX 0x1 +#define AEC_MODE_FULL_DUPLEX 0x2 + +#define STATIC_KSPROPSETID_Wave \ + 0x924e54b0L,0x630f,0x11cf,0xad,0xa7,0x08,0x00,0x3e,0x30,0x49,0x4a +DEFINE_GUIDSTRUCT("924e54b0-630f-11cf-ada7-08003e30494a",KSPROPSETID_Wave); +#define KSPROPSETID_Wave DEFINE_GUIDNAMED(KSPROPSETID_Wave) + +typedef enum { + KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES, + KSPROPERTY_WAVE_INPUT_CAPABILITIES, + KSPROPERTY_WAVE_OUTPUT_CAPABILITIES, + KSPROPERTY_WAVE_BUFFER, + KSPROPERTY_WAVE_FREQUENCY, + KSPROPERTY_WAVE_VOLUME, + KSPROPERTY_WAVE_PAN +} KSPROPERTY_WAVE; + +typedef struct { + ULONG ulDeviceType; +} KSWAVE_COMPATCAPS,*PKSWAVE_COMPATCAPS; + +#define KSWAVE_COMPATCAPS_INPUT 0x00000000 +#define KSWAVE_COMPATCAPS_OUTPUT 0x00000001 + +typedef struct { + ULONG MaximumChannelsPerConnection; + ULONG MinimumBitsPerSample; + ULONG MaximumBitsPerSample; + ULONG MinimumSampleFrequency; + ULONG MaximumSampleFrequency; + ULONG TotalConnections; + ULONG ActiveConnections; +} KSWAVE_INPUT_CAPABILITIES,*PKSWAVE_INPUT_CAPABILITIES; + +typedef struct { + ULONG MaximumChannelsPerConnection; + ULONG MinimumBitsPerSample; + ULONG MaximumBitsPerSample; + ULONG MinimumSampleFrequency; + ULONG MaximumSampleFrequency; + ULONG TotalConnections; + ULONG StaticConnections; + ULONG StreamingConnections; + ULONG ActiveConnections; + ULONG ActiveStaticConnections; + ULONG ActiveStreamingConnections; + ULONG Total3DConnections; + ULONG Static3DConnections; + ULONG Streaming3DConnections; + ULONG Active3DConnections; + ULONG ActiveStatic3DConnections; + ULONG ActiveStreaming3DConnections; + ULONG TotalSampleMemory; + ULONG FreeSampleMemory; + ULONG LargestFreeContiguousSampleMemory; +} KSWAVE_OUTPUT_CAPABILITIES,*PKSWAVE_OUTPUT_CAPABILITIES; + +typedef struct { + LONG LeftAttenuation; + LONG RightAttenuation; +} KSWAVE_VOLUME,*PKSWAVE_VOLUME; + +#define KSWAVE_BUFFER_ATTRIBUTEF_LOOPING 0x00000001 +#define KSWAVE_BUFFER_ATTRIBUTEF_STATIC 0x00000002 + +typedef struct { + ULONG Attributes; + ULONG BufferSize; + PVOID BufferAddress; +} KSWAVE_BUFFER,*PKSWAVE_BUFFER; + +#define STATIC_KSMUSIC_TECHNOLOGY_PORT \ + 0x86C92E60L,0x62E8,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("86C92E60-62E8-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_PORT); +#define KSMUSIC_TECHNOLOGY_PORT DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_PORT) + +#define STATIC_KSMUSIC_TECHNOLOGY_SQSYNTH \ + 0x0ECF4380L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("0ECF4380-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_SQSYNTH); +#define KSMUSIC_TECHNOLOGY_SQSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SQSYNTH) + +#define STATIC_KSMUSIC_TECHNOLOGY_FMSYNTH \ + 0x252C5C80L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("252C5C80-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_FMSYNTH); +#define KSMUSIC_TECHNOLOGY_FMSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_FMSYNTH) + +#define STATIC_KSMUSIC_TECHNOLOGY_WAVETABLE \ + 0x394EC7C0L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("394EC7C0-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_WAVETABLE); +#define KSMUSIC_TECHNOLOGY_WAVETABLE DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_WAVETABLE) + +#define STATIC_KSMUSIC_TECHNOLOGY_SWSYNTH \ + 0x37407736L,0x3620,0x11D1,0x85,0xD3,0x00,0x00,0xF8,0x75,0x43,0x80 +DEFINE_GUIDSTRUCT("37407736-3620-11D1-85D3-0000F8754380",KSMUSIC_TECHNOLOGY_SWSYNTH); +#define KSMUSIC_TECHNOLOGY_SWSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SWSYNTH) + +#define STATIC_KSPROPSETID_WaveTable \ + 0x8539E660L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("8539E660-62E9-11CF-A5D6-28DB04C10000",KSPROPSETID_WaveTable); +#define KSPROPSETID_WaveTable DEFINE_GUIDNAMED(KSPROPSETID_WaveTable) + +typedef enum { + KSPROPERTY_WAVETABLE_LOAD_SAMPLE, + KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE, + KSPROPERTY_WAVETABLE_MEMORY, + KSPROPERTY_WAVETABLE_VERSION +} KSPROPERTY_WAVETABLE; + +typedef struct { + KSDATARANGE DataRange; + GUID Technology; + ULONG Channels; + ULONG Notes; + ULONG ChannelMask; +} KSDATARANGE_MUSIC,*PKSDATARANGE_MUSIC; + +#define STATIC_KSEVENTSETID_Cyclic \ + 0x142C1AC0L,0x072A,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("142C1AC0-072A-11D0-A5D6-28DB04C10000",KSEVENTSETID_Cyclic); +#define KSEVENTSETID_Cyclic DEFINE_GUIDNAMED(KSEVENTSETID_Cyclic) + +typedef enum { + KSEVENT_CYCLIC_TIME_INTERVAL +} KSEVENT_CYCLIC_TIME; + +#define STATIC_KSPROPSETID_Cyclic \ + 0x3FFEAEA0L,0x2BEE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000",KSPROPSETID_Cyclic); +#define KSPROPSETID_Cyclic DEFINE_GUIDNAMED(KSPROPSETID_Cyclic) + +typedef enum { + KSPROPERTY_CYCLIC_POSITION +} KSPROPERTY_CYCLIC; + +#define STATIC_KSEVENTSETID_AudioControlChange \ + 0xE85E9698L,0xFA2F,0x11D1,0x95,0xBD,0x00,0xC0,0x4F,0xB9,0x25,0xD3 +DEFINE_GUIDSTRUCT("E85E9698-FA2F-11D1-95BD-00C04FB925D3",KSEVENTSETID_AudioControlChange); +#define KSEVENTSETID_AudioControlChange DEFINE_GUIDNAMED(KSEVENTSETID_AudioControlChange) + +typedef enum { + KSEVENT_CONTROL_CHANGE +} KSEVENT_AUDIO_CONTROL_CHANGE; + +#define STATIC_KSEVENTSETID_LoopedStreaming \ + 0x4682B940L,0xC6EF,0x11D0,0x96,0xD8,0x00,0xAA,0x00,0x51,0xE5,0x1D +DEFINE_GUIDSTRUCT("4682B940-C6EF-11D0-96D8-00AA0051E51D",KSEVENTSETID_LoopedStreaming); +#define KSEVENTSETID_LoopedStreaming DEFINE_GUIDNAMED(KSEVENTSETID_LoopedStreaming) + +typedef enum { + KSEVENT_LOOPEDSTREAMING_POSITION +} KSEVENT_LOOPEDSTREAMING; + +typedef struct { + KSEVENTDATA KsEventData; + DWORDLONG Position; +} LOOPEDSTREAMING_POSITION_EVENT_DATA,*PLOOPEDSTREAMING_POSITION_EVENT_DATA; + +#define STATIC_KSPROPSETID_Sysaudio \ + 0xCBE3FAA0L,0xCC75,0x11D0,0xB4,0x65,0x00,0x00,0x1A,0x18,0x18,0xE6 +DEFINE_GUIDSTRUCT("CBE3FAA0-CC75-11D0-B465-00001A1818E6",KSPROPSETID_Sysaudio); +#define KSPROPSETID_Sysaudio DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio) + +typedef enum { + KSPROPERTY_SYSAUDIO_DEVICE_COUNT = 1, + KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME = 2, + KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE = 3, + KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME = 4, + KSPROPERTY_SYSAUDIO_SELECT_GRAPH = 5, + KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE = 6, + KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT = 7, + KSPROPERTY_SYSAUDIO_INSTANCE_INFO = 14, + KSPROPERTY_SYSAUDIO_COMPONENT_ID = 16 +} KSPROPERTY_SYSAUDIO; + +typedef struct { + KSPROPERTY Property; + GUID PinCategory; + GUID PinName; +} SYSAUDIO_CREATE_VIRTUAL_SOURCE,*PSYSAUDIO_CREATE_VIRTUAL_SOURCE; + +typedef struct { + KSPROPERTY Property; + ULONG PinId; + ULONG NodeId; + ULONG Flags; + ULONG Reserved; +} SYSAUDIO_SELECT_GRAPH,*PSYSAUDIO_SELECT_GRAPH; + +typedef struct { + KSPROPERTY Property; + ULONG Flags; + ULONG DeviceNumber; +} SYSAUDIO_INSTANCE_INFO,*PSYSAUDIO_INSTANCE_INFO; + +#define SYSAUDIO_FLAGS_DONT_COMBINE_PINS 0x00000001 + +#define STATIC_KSPROPSETID_Sysaudio_Pin \ + 0xA3A53220L,0xC6E4,0x11D0,0xB4,0x65,0x00,0x00,0x1A,0x18,0x18,0xE6 +DEFINE_GUIDSTRUCT("A3A53220-C6E4-11D0-B465-00001A1818E6",KSPROPSETID_Sysaudio_Pin); +#define KSPROPSETID_Sysaudio_Pin DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio_Pin) + +typedef enum { + KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE = 1 +} KSPROPERTY_SYSAUDIO_PIN; + +typedef struct { + KSPROPERTY Property; + ULONG MixerPinId; + ULONG Reserved; +} SYSAUDIO_ATTACH_VIRTUAL_SOURCE,*PSYSAUDIO_ATTACH_VIRTUAL_SOURCE; + +typedef struct { + KSPROPERTY Property; + ULONG NodeId; + ULONG Reserved; +} KSNODEPROPERTY,*PKSNODEPROPERTY; + +typedef struct { + KSNODEPROPERTY NodeProperty; + LONG Channel; + ULONG Reserved; +} KSNODEPROPERTY_AUDIO_CHANNEL,*PKSNODEPROPERTY_AUDIO_CHANNEL; + +typedef struct { + KSNODEPROPERTY NodeProperty; + ULONG DevSpecificId; + ULONG DeviceInfo; + ULONG Length; +} KSNODEPROPERTY_AUDIO_DEV_SPECIFIC,*PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC; + +typedef struct { + KSNODEPROPERTY NodeProperty; + PVOID ListenerId; +#ifndef _WIN64 + ULONG Reserved; +#endif +} KSNODEPROPERTY_AUDIO_3D_LISTENER,*PKSNODEPROPERTY_AUDIO_3D_LISTENER; + +typedef struct { + KSNODEPROPERTY NodeProperty; + PVOID AppContext; + ULONG Length; +#ifndef _WIN64 + ULONG Reserved; +#endif +} KSNODEPROPERTY_AUDIO_PROPERTY,*PKSNODEPROPERTY_AUDIO_PROPERTY; + +#define STATIC_KSPROPSETID_AudioGfx \ + 0x79a9312eL,0x59ae,0x43b0,0xa3,0x50,0x8b,0x5,0x28,0x4c,0xab,0x24 +DEFINE_GUIDSTRUCT("79A9312E-59AE-43b0-A350-8B05284CAB24",KSPROPSETID_AudioGfx); +#define KSPROPSETID_AudioGfx DEFINE_GUIDNAMED(KSPROPSETID_AudioGfx) + +typedef enum { + KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID, + KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID +} KSPROPERTY_AUDIOGFX; + +#define STATIC_KSPROPSETID_Linear \ + 0x5A2FFE80L,0x16B9,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("5A2FFE80-16B9-11D0-A5D6-28DB04C10000",KSPROPSETID_Linear); +#define KSPROPSETID_Linear DEFINE_GUIDNAMED(KSPROPSETID_Linear) + +typedef enum { + KSPROPERTY_LINEAR_POSITION +} KSPROPERTY_LINEAR; + +#define STATIC_KSDATAFORMAT_TYPE_MUSIC \ + 0xE725D360L,0x62CC,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("E725D360-62CC-11CF-A5D6-28DB04C10000",KSDATAFORMAT_TYPE_MUSIC); +#define KSDATAFORMAT_TYPE_MUSIC DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MUSIC) + +#define STATIC_KSDATAFORMAT_TYPE_MIDI \ + 0x7364696DL,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71 +DEFINE_GUIDSTRUCT("7364696D-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_MIDI); +#define KSDATAFORMAT_TYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MIDI) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MIDI \ + 0x1D262760L,0xE957,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("1D262760-E957-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SUBTYPE_MIDI); +#define KSDATAFORMAT_SUBTYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MIDI_BUS \ + 0x2CA15FA0L,0x6CFE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 +DEFINE_GUIDSTRUCT("2CA15FA0-6CFE-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SUBTYPE_MIDI_BUS); +#define KSDATAFORMAT_SUBTYPE_MIDI_BUS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI_BUS) + +#define STATIC_KSDATAFORMAT_SUBTYPE_RIFFMIDI \ + 0x4995DAF0L,0x9EE6,0x11D0,0xA4,0x0E,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("4995DAF0-9EE6-11D0-A40E-00A0C9223196",KSDATAFORMAT_SUBTYPE_RIFFMIDI); +#define KSDATAFORMAT_SUBTYPE_RIFFMIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFMIDI) + +typedef struct { + ULONG TimeDeltaMs; + + ULONG ByteCount; +} KSMUSICFORMAT,*PKSMUSICFORMAT; + +#define STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM \ + 0x36523b11L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B11-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM); +#define KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM) + +#define STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET \ + 0x36523b12L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B12-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_PES_PACKET); +#define KSDATAFORMAT_TYPE_STANDARD_PES_PACKET DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PES_PACKET) + +#define STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER \ + 0x36523b13L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B13-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER); +#define KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER) + +#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO \ + 0x36523b21L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B21-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO); +#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO \ + 0x36523b22L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B22-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO); +#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO \ + 0x36523b23L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B23-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO); +#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO \ + 0x36523b24L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B24-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO); +#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO \ + 0x36523b25L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B25-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO); +#define KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO \ + 0x36523b31L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B31-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO); +#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO \ + 0x36523b32L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B32-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO); +#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO \ + 0x36523b33L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B33-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO); +#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO \ + 0x36523b34L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B34-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO); +#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO \ + 0x36523b35L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a +DEFINE_GUIDSTRUCT("36523B35-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO); +#define KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_DSS_VIDEO \ + 0xa0af4f81L,0xe163,0x11d0,0xba,0xd9,0x00,0x60,0x97,0x44,0x11,0x1a +DEFINE_GUIDSTRUCT("a0af4f81-e163-11d0-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_DSS_VIDEO); +#define KSDATAFORMAT_SUBTYPE_DSS_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_VIDEO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_DSS_AUDIO \ + 0xa0af4f82L,0xe163,0x11d0,0xba,0xd9,0x00,0x60,0x97,0x44,0x11,0x1a +DEFINE_GUIDSTRUCT("a0af4f82-e163-11d0-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_DSS_AUDIO); +#define KSDATAFORMAT_SUBTYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_AUDIO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Packet \ + 0xe436eb80,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70 +DEFINE_GUIDSTRUCT("e436eb80-524f-11ce-9F53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Packet); +#define KSDATAFORMAT_SUBTYPE_MPEG1Packet DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Packet) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Payload \ + 0xe436eb81,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70 +DEFINE_GUIDSTRUCT("e436eb81-524f-11ce-9F53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Payload); +#define KSDATAFORMAT_SUBTYPE_MPEG1Payload DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Payload) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Video \ + 0xe436eb86,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70 +DEFINE_GUIDSTRUCT("e436eb86-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Video); +#define KSDATAFORMAT_SUBTYPE_MPEG1Video DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Video) + +#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO \ + 0x05589f82L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a +DEFINE_GUIDSTRUCT("05589f82-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO); +#define KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO) + +#define STATIC_KSDATAFORMAT_TYPE_MPEG2_PES \ + 0xe06d8020L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d8020-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_PES); +#define KSDATAFORMAT_TYPE_MPEG2_PES DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PES) + +#define STATIC_KSDATAFORMAT_TYPE_MPEG2_PROGRAM \ + 0xe06d8022L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d8022-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_PROGRAM); +#define KSDATAFORMAT_TYPE_MPEG2_PROGRAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PROGRAM) + +#define STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT \ + 0xe06d8023L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d8023-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_TRANSPORT); +#define KSDATAFORMAT_TYPE_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_TRANSPORT) + +#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO \ + 0xe06d8026L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d8026-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO); +#define KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO \ + 0xe06d80e3L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d80e3-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO); +#define KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO) + +#define STATIC_KSPROPSETID_Mpeg2Vid \ + 0xC8E11B60L,0x0CC9,0x11D0,0xBD,0x69,0x00,0x35,0x05,0xC1,0x03,0xA9 +DEFINE_GUIDSTRUCT("C8E11B60-0CC9-11D0-BD69-003505C103A9",KSPROPSETID_Mpeg2Vid); +#define KSPROPSETID_Mpeg2Vid DEFINE_GUIDNAMED(KSPROPSETID_Mpeg2Vid) + +typedef enum { + KSPROPERTY_MPEG2VID_MODES, + KSPROPERTY_MPEG2VID_CUR_MODE, + KSPROPERTY_MPEG2VID_4_3_RECT, + KSPROPERTY_MPEG2VID_16_9_RECT, + KSPROPERTY_MPEG2VID_16_9_PANSCAN +} KSPROPERTY_MPEG2VID; + +#define KSMPEGVIDMODE_PANSCAN 0x0001 +#define KSMPEGVIDMODE_LTRBOX 0x0002 +#define KSMPEGVIDMODE_SCALE 0x0004 + +typedef struct _KSMPEGVID_RECT { + ULONG StartX; + ULONG StartY; + ULONG EndX; + ULONG EndY; +} KSMPEGVID_RECT,*PKSMPEGVID_RECT; + +#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO \ + 0xe06d802bL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d802b-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO); +#define KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO \ + 0xe06d80e5L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d80e5-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO); +#define KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_LPCM_AUDIO \ + 0xe06d8032L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d8032-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_LPCM_AUDIO); +#define KSDATAFORMAT_SUBTYPE_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_LPCM_AUDIO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_LPCM_AUDIO \ + 0xe06d80e6L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d80e6-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_LPCM_AUDIO); +#define KSDATAFORMAT_SPECIFIER_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_LPCM_AUDIO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_AC3_AUDIO \ + 0xe06d802cL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d802c-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_AC3_AUDIO); +#define KSDATAFORMAT_SUBTYPE_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_AC3_AUDIO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_AC3_AUDIO \ + 0xe06d80e4L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d80e4-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_AC3_AUDIO); +#define KSDATAFORMAT_SPECIFIER_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_AC3_AUDIO) + +#define STATIC_KSPROPSETID_AC3 \ + 0xBFABE720L,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00 +DEFINE_GUIDSTRUCT("BFABE720-6E1F-11D0-BCF2-444553540000",KSPROPSETID_AC3); +#define KSPROPSETID_AC3 DEFINE_GUIDNAMED(KSPROPSETID_AC3) + +typedef enum { + KSPROPERTY_AC3_ERROR_CONCEALMENT = 1, + KSPROPERTY_AC3_ALTERNATE_AUDIO, + KSPROPERTY_AC3_DOWNMIX, + KSPROPERTY_AC3_BIT_STREAM_MODE, + KSPROPERTY_AC3_DIALOGUE_LEVEL, + KSPROPERTY_AC3_LANGUAGE_CODE, + KSPROPERTY_AC3_ROOM_TYPE +} KSPROPERTY_AC3; + +typedef struct { + WINBOOL fRepeatPreviousBlock; + WINBOOL fErrorInCurrentBlock; +} KSAC3_ERROR_CONCEALMENT,*PKSAC3_ERROR_CONCEALMENT; + +typedef struct { + WINBOOL fStereo; + ULONG DualMode; +} KSAC3_ALTERNATE_AUDIO,*PKSAC3_ALTERNATE_AUDIO; + +#define KSAC3_ALTERNATE_AUDIO_1 1 +#define KSAC3_ALTERNATE_AUDIO_2 2 +#define KSAC3_ALTERNATE_AUDIO_BOTH 3 + +typedef struct { + WINBOOL fDownMix; + WINBOOL fDolbySurround; +} KSAC3_DOWNMIX,*PKSAC3_DOWNMIX; + +typedef struct { + LONG BitStreamMode; +} KSAC3_BIT_STREAM_MODE,*PKSAC3_BIT_STREAM_MODE; + +#define KSAC3_SERVICE_MAIN_AUDIO 0 +#define KSAC3_SERVICE_NO_DIALOG 1 +#define KSAC3_SERVICE_VISUALLY_IMPAIRED 2 +#define KSAC3_SERVICE_HEARING_IMPAIRED 3 +#define KSAC3_SERVICE_DIALOG_ONLY 4 +#define KSAC3_SERVICE_COMMENTARY 5 +#define KSAC3_SERVICE_EMERGENCY_FLASH 6 +#define KSAC3_SERVICE_VOICE_OVER 7 + +typedef struct { + ULONG DialogueLevel; +} KSAC3_DIALOGUE_LEVEL,*PKSAC3_DIALOGUE_LEVEL; + +typedef struct { + WINBOOL fLargeRoom; +} KSAC3_ROOM_TYPE,*PKSAC3_ROOM_TYPE; + +#define STATIC_KSDATAFORMAT_SUBTYPE_DTS_AUDIO \ + 0xe06d8033L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d8033-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_DTS_AUDIO); +#define KSDATAFORMAT_SUBTYPE_DTS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DTS_AUDIO) + +#define STATIC_KSDATAFORMAT_SUBTYPE_SDDS_AUDIO \ + 0xe06d8034L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d8034-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_SDDS_AUDIO); +#define KSDATAFORMAT_SUBTYPE_SDDS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SDDS_AUDIO) + +#define STATIC_KSPROPSETID_AudioDecoderOut \ + 0x6ca6e020L,0x43bd,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9 +DEFINE_GUIDSTRUCT("6ca6e020-43bd-11d0-bd6a-003505c103a9",KSPROPSETID_AudioDecoderOut); +#define KSPROPSETID_AudioDecoderOut DEFINE_GUIDNAMED(KSPROPSETID_AudioDecoderOut) + +typedef enum { + KSPROPERTY_AUDDECOUT_MODES, + KSPROPERTY_AUDDECOUT_CUR_MODE +} KSPROPERTY_AUDDECOUT; + +#define KSAUDDECOUTMODE_STEREO_ANALOG 0x0001 +#define KSAUDDECOUTMODE_PCM_51 0x0002 +#define KSAUDDECOUTMODE_SPDIFF 0x0004 + +#define STATIC_KSDATAFORMAT_SUBTYPE_SUBPICTURE \ + 0xe06d802dL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea +DEFINE_GUIDSTRUCT("e06d802d-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_SUBPICTURE); +#define KSDATAFORMAT_SUBTYPE_SUBPICTURE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SUBPICTURE) + +#define STATIC_KSPROPSETID_DvdSubPic \ + 0xac390460L,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9 +DEFINE_GUIDSTRUCT("ac390460-43af-11d0-bd6a-003505c103a9",KSPROPSETID_DvdSubPic); +#define KSPROPSETID_DvdSubPic DEFINE_GUIDNAMED(KSPROPSETID_DvdSubPic) + +typedef enum { + KSPROPERTY_DVDSUBPIC_PALETTE, + KSPROPERTY_DVDSUBPIC_HLI, + KSPROPERTY_DVDSUBPIC_COMPOSIT_ON +} KSPROPERTY_DVDSUBPIC; + +typedef struct _KS_DVD_YCrCb { + UCHAR Reserved; + UCHAR Y; + UCHAR Cr; + UCHAR Cb; +} KS_DVD_YCrCb,*PKS_DVD_YCrCb; + +typedef struct _KS_DVD_YUV { + UCHAR Reserved; + UCHAR Y; + UCHAR V; + UCHAR U; +} KS_DVD_YUV,*PKS_DVD_YUV; + +typedef struct _KSPROPERTY_SPPAL { + KS_DVD_YUV sppal[16]; +} KSPROPERTY_SPPAL,*PKSPROPERTY_SPPAL; + +typedef struct _KS_COLCON { + UCHAR emph1col:4; + UCHAR emph2col:4; + UCHAR backcol:4; + UCHAR patcol:4; + UCHAR emph1con:4; + UCHAR emph2con:4; + UCHAR backcon:4; + UCHAR patcon:4; +} KS_COLCON,*PKS_COLCON; + +typedef struct _KSPROPERTY_SPHLI { + USHORT HLISS; + USHORT Reserved; + ULONG StartPTM; + ULONG EndPTM; + USHORT StartX; + USHORT StartY; + USHORT StopX; + USHORT StopY; + KS_COLCON ColCon; +} KSPROPERTY_SPHLI,*PKSPROPERTY_SPHLI; + +typedef WINBOOL KSPROPERTY_COMPOSIT_ON,*PKSPROPERTY_COMPOSIT_ON; + +#define STATIC_KSPROPSETID_CopyProt \ + 0x0E8A0A40L,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3 +DEFINE_GUIDSTRUCT("0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3",KSPROPSETID_CopyProt); +#define KSPROPSETID_CopyProt DEFINE_GUIDNAMED(KSPROPSETID_CopyProt) + +typedef enum { + KSPROPERTY_DVDCOPY_CHLG_KEY = 0x01, + KSPROPERTY_DVDCOPY_DVD_KEY1, + KSPROPERTY_DVDCOPY_DEC_KEY2, + KSPROPERTY_DVDCOPY_TITLE_KEY, + KSPROPERTY_COPY_MACROVISION, + KSPROPERTY_DVDCOPY_REGION, + KSPROPERTY_DVDCOPY_SET_COPY_STATE, + KSPROPERTY_DVDCOPY_DISC_KEY = 0x80 +} KSPROPERTY_COPYPROT; + +typedef struct _KS_DVDCOPY_CHLGKEY { + BYTE ChlgKey[10]; + BYTE Reserved[2]; +} KS_DVDCOPY_CHLGKEY,*PKS_DVDCOPY_CHLGKEY; + +typedef struct _KS_DVDCOPY_BUSKEY { + BYTE BusKey[5]; + BYTE Reserved[1]; +} KS_DVDCOPY_BUSKEY,*PKS_DVDCOPY_BUSKEY; + +typedef struct _KS_DVDCOPY_DISCKEY { + BYTE DiscKey[2048]; +} KS_DVDCOPY_DISCKEY,*PKS_DVDCOPY_DISCKEY; + +typedef struct _KS_DVDCOPY_REGION { + UCHAR Reserved; + UCHAR RegionData; + UCHAR Reserved2[2]; +} KS_DVDCOPY_REGION,*PKS_DVDCOPY_REGION; + +typedef struct _KS_DVDCOPY_TITLEKEY { + ULONG KeyFlags; + ULONG ReservedNT[2]; + UCHAR TitleKey[6]; + UCHAR Reserved[2]; +} KS_DVDCOPY_TITLEKEY,*PKS_DVDCOPY_TITLEKEY; + +typedef struct _KS_COPY_MACROVISION { + ULONG MACROVISIONLevel; +} KS_COPY_MACROVISION,*PKS_COPY_MACROVISION; + +typedef struct _KS_DVDCOPY_SET_COPY_STATE { + ULONG DVDCopyState; +} KS_DVDCOPY_SET_COPY_STATE,*PKS_DVDCOPY_SET_COPY_STATE; + +typedef enum { + KS_DVDCOPYSTATE_INITIALIZE, + KS_DVDCOPYSTATE_INITIALIZE_TITLE, + KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED, + KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED, + KS_DVDCOPYSTATE_DONE +} KS_DVDCOPYSTATE; + +typedef enum { + KS_MACROVISION_DISABLED, + KS_MACROVISION_LEVEL1, + KS_MACROVISION_LEVEL2, + KS_MACROVISION_LEVEL3 +} KS_COPY_MACROVISION_LEVEL,*PKS_COPY_MACROVISION_LEVEL; + +#define KS_DVD_CGMS_RESERVED_MASK 0x00000078 + +#define KS_DVD_CGMS_COPY_PROTECT_MASK 0x00000018 +#define KS_DVD_CGMS_COPY_PERMITTED 0x00000000 +#define KS_DVD_CGMS_COPY_ONCE 0x00000010 +#define KS_DVD_CGMS_NO_COPY 0x00000018 + +#define KS_DVD_COPYRIGHT_MASK 0x00000040 +#define KS_DVD_NOT_COPYRIGHTED 0x00000000 +#define KS_DVD_COPYRIGHTED 0x00000040 + +#define KS_DVD_SECTOR_PROTECT_MASK 0x00000020 +#define KS_DVD_SECTOR_NOT_PROTECTED 0x00000000 +#define KS_DVD_SECTOR_PROTECTED 0x00000020 + +#define STATIC_KSCATEGORY_TVTUNER \ + 0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4 +DEFINE_GUIDSTRUCT("a799a800-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_TVTUNER); +#define KSCATEGORY_TVTUNER DEFINE_GUIDNAMED(KSCATEGORY_TVTUNER) + +#define STATIC_KSCATEGORY_CROSSBAR \ + 0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4 +DEFINE_GUIDSTRUCT("a799a801-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_CROSSBAR); +#define KSCATEGORY_CROSSBAR DEFINE_GUIDNAMED(KSCATEGORY_CROSSBAR) + +#define STATIC_KSCATEGORY_TVAUDIO \ + 0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4 +DEFINE_GUIDSTRUCT("a799a802-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_TVAUDIO); +#define KSCATEGORY_TVAUDIO DEFINE_GUIDNAMED(KSCATEGORY_TVAUDIO) + +#define STATIC_KSCATEGORY_VPMUX \ + 0xa799a803L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4 +DEFINE_GUIDSTRUCT("a799a803-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_VPMUX); +#define KSCATEGORY_VPMUX DEFINE_GUIDNAMED(KSCATEGORY_VPMUX) + +#define STATIC_KSCATEGORY_VBICODEC \ + 0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f +DEFINE_GUIDSTRUCT("07dad660-22f1-11d1-a9f4-00c04fbbde8f",KSCATEGORY_VBICODEC); +#define KSCATEGORY_VBICODEC DEFINE_GUIDNAMED(KSCATEGORY_VBICODEC) + +#define STATIC_KSDATAFORMAT_SUBTYPE_VPVideo \ + 0x5a9b6a40L,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a +DEFINE_GUIDSTRUCT("5a9b6a40-1a22-11d1-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_VPVideo); +#define KSDATAFORMAT_SUBTYPE_VPVideo DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVideo) + +#define STATIC_KSDATAFORMAT_SUBTYPE_VPVBI \ + 0x5a9b6a41L,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a +DEFINE_GUIDSTRUCT("5a9b6a41-1a22-11d1-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_VPVBI); +#define KSDATAFORMAT_SUBTYPE_VPVBI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVBI) + +#define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO \ + 0x05589f80L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a +DEFINE_GUIDSTRUCT("05589f80-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_VIDEOINFO); +#define KSDATAFORMAT_SPECIFIER_VIDEOINFO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO2 \ + 0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("f72a76A0-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SPECIFIER_VIDEOINFO2); +#define KSDATAFORMAT_SPECIFIER_VIDEOINFO2 DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO2) + +#define STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO \ + 0x0482dde1L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65 +DEFINE_GUIDSTRUCT("0482dde1-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_TYPE_ANALOGVIDEO); +#define KSDATAFORMAT_TYPE_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGVIDEO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO \ + 0x0482dde0L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65 +DEFINE_GUIDSTRUCT("0482dde0-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_SPECIFIER_ANALOGVIDEO); +#define KSDATAFORMAT_SPECIFIER_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_ANALOGVIDEO) + +#define STATIC_KSDATAFORMAT_TYPE_ANALOGAUDIO \ + 0x0482dee1L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65 +DEFINE_GUIDSTRUCT("0482DEE1-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_TYPE_ANALOGAUDIO); +#define KSDATAFORMAT_TYPE_ANALOGAUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGAUDIO) + +#define STATIC_KSDATAFORMAT_SPECIFIER_VBI \ + 0xf72a76e0L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("f72a76e0-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SPECIFIER_VBI); +#define KSDATAFORMAT_SPECIFIER_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VBI) + +#define STATIC_KSDATAFORMAT_TYPE_VBI \ + 0xf72a76e1L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("f72a76e1-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_TYPE_VBI); +#define KSDATAFORMAT_TYPE_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VBI) + +#define STATIC_KSDATAFORMAT_SUBTYPE_RAW8 \ + 0xca20d9a0,0x3e3e,0x11d1,0x9b,0xf9,0x0,0xc0,0x4f,0xbb,0xde,0xbf +DEFINE_GUIDSTRUCT("ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf",KSDATAFORMAT_SUBTYPE_RAW8); +#define KSDATAFORMAT_SUBTYPE_RAW8 DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RAW8) + +#define STATIC_KSDATAFORMAT_SUBTYPE_CC \ + 0x33214cc1,0x11f,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe +DEFINE_GUIDSTRUCT("33214CC1-011F-11D2-B4B1-00A0D102CFBE",KSDATAFORMAT_SUBTYPE_CC); +#define KSDATAFORMAT_SUBTYPE_CC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_CC) + +#define STATIC_KSDATAFORMAT_SUBTYPE_NABTS \ + 0xf72a76e2L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("f72a76e2-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SUBTYPE_NABTS); +#define KSDATAFORMAT_SUBTYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS) + +#define STATIC_KSDATAFORMAT_SUBTYPE_TELETEXT \ + 0xf72a76e3L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("f72a76e3-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SUBTYPE_TELETEXT); +#define KSDATAFORMAT_SUBTYPE_TELETEXT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_TELETEXT) + +#define KS_BI_RGB 0L +#define KS_BI_RLE8 1L +#define KS_BI_RLE4 2L +#define KS_BI_BITFIELDS 3L + +typedef struct tagKS_RGBQUAD { + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; + BYTE rgbReserved; +} KS_RGBQUAD,*PKS_RGBQUAD; + +#define KS_iPALETTE_COLORS 256 +#define KS_iEGA_COLORS 16 +#define KS_iMASK_COLORS 3 +#define KS_iTRUECOLOR 16 +#define KS_iRED 0 +#define KS_iGREEN 1 +#define KS_iBLUE 2 +#define KS_iPALETTE 8 +#define KS_iMAXBITS 8 +#define KS_SIZE_EGA_PALETTE (KS_iEGA_COLORS *sizeof(KS_RGBQUAD)) +#define KS_SIZE_PALETTE (KS_iPALETTE_COLORS *sizeof(KS_RGBQUAD)) + +typedef struct tagKS_BITMAPINFOHEADER { + DWORD biSize; + LONG biWidth; + LONG biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + LONG biXPelsPerMeter; + LONG biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; +} KS_BITMAPINFOHEADER,*PKS_BITMAPINFOHEADER; + +typedef struct tag_KS_TRUECOLORINFO { + DWORD dwBitMasks[KS_iMASK_COLORS]; + KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS]; +} KS_TRUECOLORINFO,*PKS_TRUECOLORINFO; + +#define KS_WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8) +#define KS_DIBWIDTHBYTES(bi) (DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth *(DWORD)(bi).biBitCount) +#define KS__DIBSIZE(bi) (KS_DIBWIDTHBYTES(bi) *(DWORD)(bi).biHeight) +#define KS_DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi)) + +typedef LONGLONG REFERENCE_TIME; + +typedef struct tagKS_VIDEOINFOHEADER { + RECT rcSource; + RECT rcTarget; + DWORD dwBitRate; + DWORD dwBitErrorRate; + REFERENCE_TIME AvgTimePerFrame; + KS_BITMAPINFOHEADER bmiHeader; +} KS_VIDEOINFOHEADER,*PKS_VIDEOINFOHEADER; + +typedef struct tagKS_VIDEOINFO { + RECT rcSource; + RECT rcTarget; + DWORD dwBitRate; + DWORD dwBitErrorRate; + REFERENCE_TIME AvgTimePerFrame; + KS_BITMAPINFOHEADER bmiHeader; + __MINGW_EXTENSION union { + KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS]; + DWORD dwBitMasks[KS_iMASK_COLORS]; + KS_TRUECOLORINFO TrueColorInfo; + }; +} KS_VIDEOINFO,*PKS_VIDEOINFO; + +#define KS_SIZE_MASKS (KS_iMASK_COLORS *sizeof(DWORD)) +#define KS_SIZE_PREHEADER (FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader)) + +#define KS_SIZE_VIDEOHEADER(pbmi) ((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER) + +typedef struct tagKS_VBIINFOHEADER { + ULONG StartLine; + ULONG EndLine; + ULONG SamplingFrequency; + ULONG MinLineStartTime; + ULONG MaxLineStartTime; + ULONG ActualLineStartTime; + ULONG ActualLineEndTime; + ULONG VideoStandard; + ULONG SamplesPerLine; + ULONG StrideInBytes; + ULONG BufferSize; +} KS_VBIINFOHEADER,*PKS_VBIINFOHEADER; + +#define KS_VBIDATARATE_NABTS (5727272L) +#define KS_VBIDATARATE_CC (503493L) +#define KS_VBISAMPLINGRATE_4X_NABTS ((long)(4*KS_VBIDATARATE_NABTS)) +#define KS_VBISAMPLINGRATE_47X_NABTS ((long)(27000000)) +#define KS_VBISAMPLINGRATE_5X_NABTS ((long)(5*KS_VBIDATARATE_NABTS)) + +#define KS_47NABTS_SCALER (KS_VBISAMPLINGRATE_47X_NABTS/(double)KS_VBIDATARATE_NABTS) + +typedef struct tagKS_AnalogVideoInfo { + RECT rcSource; + RECT rcTarget; + DWORD dwActiveWidth; + DWORD dwActiveHeight; + REFERENCE_TIME AvgTimePerFrame; +} KS_ANALOGVIDEOINFO,*PKS_ANALOGVIDEOINFO; + +#define KS_TVTUNER_CHANGE_BEGIN_TUNE 0x0001L +#define KS_TVTUNER_CHANGE_END_TUNE 0x0002L + +typedef struct tagKS_TVTUNER_CHANGE_INFO { + DWORD dwFlags; + DWORD dwCountryCode; + DWORD dwAnalogVideoStandard; + DWORD dwChannel; +} KS_TVTUNER_CHANGE_INFO,*PKS_TVTUNER_CHANGE_INFO; + +typedef enum { + KS_MPEG2Level_Low, + KS_MPEG2Level_Main, + KS_MPEG2Level_High1440, + KS_MPEG2Level_High +} KS_MPEG2Level; + +typedef enum { + KS_MPEG2Profile_Simple, + KS_MPEG2Profile_Main, + KS_MPEG2Profile_SNRScalable, + KS_MPEG2Profile_SpatiallyScalable, + KS_MPEG2Profile_High +} KS_MPEG2Profile; + +#define KS_INTERLACE_IsInterlaced 0x00000001 +#define KS_INTERLACE_1FieldPerSample 0x00000002 +#define KS_INTERLACE_Field1First 0x00000004 +#define KS_INTERLACE_UNUSED 0x00000008 +#define KS_INTERLACE_FieldPatternMask 0x00000030 +#define KS_INTERLACE_FieldPatField1Only 0x00000000 +#define KS_INTERLACE_FieldPatField2Only 0x00000010 +#define KS_INTERLACE_FieldPatBothRegular 0x00000020 +#define KS_INTERLACE_FieldPatBothIrregular 0x00000030 +#define KS_INTERLACE_DisplayModeMask 0x000000c0 +#define KS_INTERLACE_DisplayModeBobOnly 0x00000000 +#define KS_INTERLACE_DisplayModeWeaveOnly 0x00000040 +#define KS_INTERLACE_DisplayModeBobOrWeave 0x00000080 + +#define KS_MPEG2_DoPanScan 0x00000001 +#define KS_MPEG2_DVDLine21Field1 0x00000002 +#define KS_MPEG2_DVDLine21Field2 0x00000004 +#define KS_MPEG2_SourceIsLetterboxed 0x00000008 +#define KS_MPEG2_FilmCameraMode 0x00000010 +#define KS_MPEG2_LetterboxAnalogOut 0x00000020 +#define KS_MPEG2_DSS_UserData 0x00000040 +#define KS_MPEG2_DVB_UserData 0x00000080 +#define KS_MPEG2_27MhzTimebase 0x00000100 + +typedef struct tagKS_VIDEOINFOHEADER2 { + RECT rcSource; + RECT rcTarget; + DWORD dwBitRate; + DWORD dwBitErrorRate; + REFERENCE_TIME AvgTimePerFrame; + DWORD dwInterlaceFlags; + DWORD dwCopyProtectFlags; + DWORD dwPictAspectRatioX; + DWORD dwPictAspectRatioY; + DWORD dwReserved1; + DWORD dwReserved2; + KS_BITMAPINFOHEADER bmiHeader; +} KS_VIDEOINFOHEADER2,*PKS_VIDEOINFOHEADER2; + +typedef struct tagKS_MPEG1VIDEOINFO { + KS_VIDEOINFOHEADER hdr; + DWORD dwStartTimeCode; + DWORD cbSequenceHeader; + BYTE bSequenceHeader[1]; +} KS_MPEG1VIDEOINFO,*PKS_MPEG1VIDEOINFO; + +#define KS_MAX_SIZE_MPEG1_SEQUENCE_INFO 140 +#define KS_SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(KS_MPEG1VIDEOINFO,bSequenceHeader[0]) + (pv)->cbSequenceHeader) +#define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader) + +typedef struct tagKS_MPEGVIDEOINFO2 { + KS_VIDEOINFOHEADER2 hdr; + DWORD dwStartTimeCode; + DWORD cbSequenceHeader; + DWORD dwProfile; + DWORD dwLevel; + DWORD dwFlags; + DWORD bSequenceHeader[1]; +} KS_MPEGVIDEOINFO2,*PKS_MPEGVIDEOINFO2; + +#define KS_SIZE_MPEGVIDEOINFO2(pv) (FIELD_OFFSET(KS_MPEGVIDEOINFO2,bSequenceHeader[0]) + (pv)->cbSequenceHeader) +#define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader) + +#define KS_MPEGAUDIOINFO_27MhzTimebase 0x00000001 + +typedef struct tagKS_MPEAUDIOINFO { + DWORD dwFlags; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; +} KS_MPEGAUDIOINFO,*PKS_MPEGAUDIOINFO; + +typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER { + KSDATAFORMAT DataFormat; + KS_VIDEOINFOHEADER VideoInfoHeader; +} KS_DATAFORMAT_VIDEOINFOHEADER,*PKS_DATAFORMAT_VIDEOINFOHEADER; + +typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER2 { + KSDATAFORMAT DataFormat; + KS_VIDEOINFOHEADER2 VideoInfoHeader2; +} KS_DATAFORMAT_VIDEOINFOHEADER2,*PKS_DATAFORMAT_VIDEOINFOHEADER2; + +typedef struct tagKS_DATAFORMAT_VIDEOINFO_PALETTE { + KSDATAFORMAT DataFormat; + KS_VIDEOINFO VideoInfo; +} KS_DATAFORMAT_VIDEOINFO_PALETTE,*PKS_DATAFORMAT_VIDEOINFO_PALETTE; + +typedef struct tagKS_DATAFORMAT_VBIINFOHEADER { + KSDATAFORMAT DataFormat; + KS_VBIINFOHEADER VBIInfoHeader; +} KS_DATAFORMAT_VBIINFOHEADER,*PKS_DATAFORMAT_VBIINFOHEADER; + +typedef struct _KS_VIDEO_STREAM_CONFIG_CAPS { + GUID guid; + ULONG VideoStandard; + SIZE InputSize; + SIZE MinCroppingSize; + SIZE MaxCroppingSize; + int CropGranularityX; + int CropGranularityY; + int CropAlignX; + int CropAlignY; + SIZE MinOutputSize; + SIZE MaxOutputSize; + int OutputGranularityX; + int OutputGranularityY; + int StretchTapsX; + int StretchTapsY; + int ShrinkTapsX; + int ShrinkTapsY; + LONGLONG MinFrameInterval; + LONGLONG MaxFrameInterval; + LONG MinBitsPerSecond; + LONG MaxBitsPerSecond; +} KS_VIDEO_STREAM_CONFIG_CAPS,*PKS_VIDEO_STREAM_CONFIG_CAPS; + +typedef struct tagKS_DATARANGE_VIDEO { + KSDATARANGE DataRange; + WINBOOL bFixedSizeSamples; + WINBOOL bTemporalCompression; + DWORD StreamDescriptionFlags; + DWORD MemoryAllocationFlags; + KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps; + KS_VIDEOINFOHEADER VideoInfoHeader; +} KS_DATARANGE_VIDEO,*PKS_DATARANGE_VIDEO; + +typedef struct tagKS_DATARANGE_VIDEO2 { + KSDATARANGE DataRange; + WINBOOL bFixedSizeSamples; + WINBOOL bTemporalCompression; + DWORD StreamDescriptionFlags; + DWORD MemoryAllocationFlags; + KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps; + KS_VIDEOINFOHEADER2 VideoInfoHeader; +} KS_DATARANGE_VIDEO2,*PKS_DATARANGE_VIDEO2; + +typedef struct tagKS_DATARANGE_MPEG1_VIDEO { + KSDATARANGE DataRange; + WINBOOL bFixedSizeSamples; + WINBOOL bTemporalCompression; + DWORD StreamDescriptionFlags; + DWORD MemoryAllocationFlags; + KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps; + KS_MPEG1VIDEOINFO VideoInfoHeader; +} KS_DATARANGE_MPEG1_VIDEO,*PKS_DATARANGE_MPEG1_VIDEO; + +typedef struct tagKS_DATARANGE_MPEG2_VIDEO { + KSDATARANGE DataRange; + WINBOOL bFixedSizeSamples; + WINBOOL bTemporalCompression; + DWORD StreamDescriptionFlags; + DWORD MemoryAllocationFlags; + KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps; + KS_MPEGVIDEOINFO2 VideoInfoHeader; +} KS_DATARANGE_MPEG2_VIDEO,*PKS_DATARANGE_MPEG2_VIDEO; + +typedef struct tagKS_DATARANGE_VIDEO_PALETTE { + KSDATARANGE DataRange; + WINBOOL bFixedSizeSamples; + WINBOOL bTemporalCompression; + DWORD StreamDescriptionFlags; + DWORD MemoryAllocationFlags; + KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps; + KS_VIDEOINFO VideoInfo; +} KS_DATARANGE_VIDEO_PALETTE,*PKS_DATARANGE_VIDEO_PALETTE; + +typedef struct tagKS_DATARANGE_VIDEO_VBI { + KSDATARANGE DataRange; + WINBOOL bFixedSizeSamples; + WINBOOL bTemporalCompression; + DWORD StreamDescriptionFlags; + DWORD MemoryAllocationFlags; + KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps; + KS_VBIINFOHEADER VBIInfoHeader; +} KS_DATARANGE_VIDEO_VBI,*PKS_DATARANGE_VIDEO_VBI; + +typedef struct tagKS_DATARANGE_ANALOGVIDEO { + KSDATARANGE DataRange; + KS_ANALOGVIDEOINFO AnalogVideoInfo; +} KS_DATARANGE_ANALOGVIDEO,*PKS_DATARANGE_ANALOGVIDEO; + +#define KS_VIDEOSTREAM_PREVIEW 0x0001 +#define KS_VIDEOSTREAM_CAPTURE 0x0002 +#define KS_VIDEOSTREAM_VBI 0x0010 +#define KS_VIDEOSTREAM_NABTS 0x0020 +#define KS_VIDEOSTREAM_CC 0x0100 +#define KS_VIDEOSTREAM_EDS 0x0200 +#define KS_VIDEOSTREAM_TELETEXT 0x0400 +#define KS_VIDEOSTREAM_STILL 0x1000 +#define KS_VIDEOSTREAM_IS_VPE 0x8000 + +#define KS_VIDEO_ALLOC_VPE_SYSTEM 0x0001 +#define KS_VIDEO_ALLOC_VPE_DISPLAY 0x0002 +#define KS_VIDEO_ALLOC_VPE_AGP 0x0004 + +#define STATIC_KSPROPSETID_VBICAP_PROPERTIES \ + 0xf162c607,0x7b35,0x496f,0xad,0x7f,0x2d,0xca,0x3b,0x46,0xb7,0x18 +DEFINE_GUIDSTRUCT("F162C607-7B35-496f-AD7F-2DCA3B46B718",KSPROPSETID_VBICAP_PROPERTIES); +#define KSPROPSETID_VBICAP_PROPERTIES DEFINE_GUIDNAMED(KSPROPSETID_VBICAP_PROPERTIES) + +typedef enum { + KSPROPERTY_VBICAP_PROPERTIES_PROTECTION = 0x01 +} KSPROPERTY_VBICAP; + +typedef struct _VBICAP_PROPERTIES_PROTECTION_S { + KSPROPERTY Property; + ULONG StreamIndex; + ULONG Status; +} VBICAP_PROPERTIES_PROTECTION_S,*PVBICAP_PROPERTIES_PROTECTION_S; + +#define KS_VBICAP_PROTECTION_MV_PRESENT 0x0001L +#define KS_VBICAP_PROTECTION_MV_HARDWARE 0x0002L +#define KS_VBICAP_PROTECTION_MV_DETECTED 0x0004L + +#define KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE 0x800 +#define KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE 0x810 + +#define KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE 0x820 +#define KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE 0x830 + +#define KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE 0x840 +#define KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE 0x850 + +#define KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE 0x860 +#define KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE 0x870 + +#define KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE 0x880 +#define KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE 0x890 + +#define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE 0x8A0 +#define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE 0x8B0 + +#define KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE 0x8F0 + +#define STATIC_KSDATAFORMAT_TYPE_NABTS \ + 0xe757bca0,0x39ac,0x11d1,0xa9,0xf5,0x0,0xc0,0x4f,0xbb,0xde,0x8f +DEFINE_GUIDSTRUCT("E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F",KSDATAFORMAT_TYPE_NABTS); +#define KSDATAFORMAT_TYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_NABTS) + +#define STATIC_KSDATAFORMAT_SUBTYPE_NABTS_FEC \ + 0xe757bca1,0x39ac,0x11d1,0xa9,0xf5,0x0,0xc0,0x4f,0xbb,0xde,0x8f +DEFINE_GUIDSTRUCT("E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F",KSDATAFORMAT_SUBTYPE_NABTS_FEC); +#define KSDATAFORMAT_SUBTYPE_NABTS_FEC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS_FEC) + +#define MAX_NABTS_VBI_LINES_PER_FIELD 11 +#define NABTS_LINES_PER_BUNDLE 16 +#define NABTS_PAYLOAD_PER_LINE 28 +#define NABTS_BYTES_PER_LINE 36 + +typedef struct _NABTSFEC_BUFFER { + ULONG dataSize; + USHORT groupID; + USHORT Reserved; + UCHAR data[NABTS_LINES_PER_BUNDLE *NABTS_PAYLOAD_PER_LINE]; +} NABTSFEC_BUFFER,*PNABTSFEC_BUFFER; + +#define STATIC_KSPROPSETID_VBICodecFiltering \ + 0xcafeb0caL,0x8715,0x11d0,0xbd,0x6a,0x00,0x35,0xc0,0xed,0xba,0xbe +DEFINE_GUIDSTRUCT("cafeb0ca-8715-11d0-bd6a-0035c0edbabe",KSPROPSETID_VBICodecFiltering); +#define KSPROPSETID_VBICodecFiltering DEFINE_GUIDNAMED(KSPROPSETID_VBICodecFiltering) + +typedef enum { + KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY = 0x01, + KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY, + KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY, + KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY, + KSPROPERTY_VBICODECFILTERING_STATISTICS +} KSPROPERTY_VBICODECFILTERING; + +typedef struct _VBICODECFILTERING_SCANLINES { + DWORD DwordBitArray[32]; +} VBICODECFILTERING_SCANLINES,*PVBICODECFILTERING_SCANLINES; + +typedef struct _VBICODECFILTERING_NABTS_SUBSTREAMS { + DWORD SubstreamMask[128]; +} VBICODECFILTERING_NABTS_SUBSTREAMS,*PVBICODECFILTERING_NABTS_SUBSTREAMS; + +typedef struct _VBICODECFILTERING_CC_SUBSTREAMS { + DWORD SubstreamMask; +} VBICODECFILTERING_CC_SUBSTREAMS,*PVBICODECFILTERING_CC_SUBSTREAMS; + +#define KS_CC_SUBSTREAM_ODD 0x0001L +#define KS_CC_SUBSTREAM_EVEN 0x0002L + +#define KS_CC_SUBSTREAM_FIELD1_MASK 0x00F0L +#define KS_CC_SUBSTREAM_SERVICE_CC1 0x0010L +#define KS_CC_SUBSTREAM_SERVICE_CC2 0x0020L +#define KS_CC_SUBSTREAM_SERVICE_T1 0x0040L +#define KS_CC_SUBSTREAM_SERVICE_T2 0x0080L + +#define KS_CC_SUBSTREAM_FIELD2_MASK 0x1F00L +#define KS_CC_SUBSTREAM_SERVICE_CC3 0x0100L +#define KS_CC_SUBSTREAM_SERVICE_CC4 0x0200L +#define KS_CC_SUBSTREAM_SERVICE_T3 0x0400L +#define KS_CC_SUBSTREAM_SERVICE_T4 0x0800L +#define KS_CC_SUBSTREAM_SERVICE_XDS 0x1000L + +#define CC_MAX_HW_DECODE_LINES 12 +typedef struct _CC_BYTE_PAIR { + BYTE Decoded[2]; + USHORT Reserved; +} CC_BYTE_PAIR,*PCC_BYTE_PAIR; + +typedef struct _CC_HW_FIELD { + VBICODECFILTERING_SCANLINES ScanlinesRequested; + ULONG fieldFlags; + LONGLONG PictureNumber; + CC_BYTE_PAIR Lines[CC_MAX_HW_DECODE_LINES]; +} CC_HW_FIELD,*PCC_HW_FIELD; + +#ifndef PACK_PRAGMAS_NOT_SUPPORTED +#include +#endif +typedef struct _NABTS_BUFFER_LINE { + BYTE Confidence; + BYTE Bytes[NABTS_BYTES_PER_LINE]; +} NABTS_BUFFER_LINE,*PNABTS_BUFFER_LINE; + +#define NABTS_BUFFER_PICTURENUMBER_SUPPORT 1 +typedef struct _NABTS_BUFFER { + VBICODECFILTERING_SCANLINES ScanlinesRequested; + LONGLONG PictureNumber; + NABTS_BUFFER_LINE NabtsLines[MAX_NABTS_VBI_LINES_PER_FIELD]; +} NABTS_BUFFER,*PNABTS_BUFFER; +#ifndef PACK_PRAGMAS_NOT_SUPPORTED +#include +#endif + +#define WST_TVTUNER_CHANGE_BEGIN_TUNE 0x1000L +#define WST_TVTUNER_CHANGE_END_TUNE 0x2000L + +#define MAX_WST_VBI_LINES_PER_FIELD 17 +#define WST_BYTES_PER_LINE 42 + +typedef struct _WST_BUFFER_LINE { + BYTE Confidence; + BYTE Bytes[WST_BYTES_PER_LINE]; +} WST_BUFFER_LINE,*PWST_BUFFER_LINE; + +typedef struct _WST_BUFFER { + VBICODECFILTERING_SCANLINES ScanlinesRequested; + WST_BUFFER_LINE WstLines[MAX_WST_VBI_LINES_PER_FIELD]; +} WST_BUFFER,*PWST_BUFFER; + +typedef struct _VBICODECFILTERING_STATISTICS_COMMON { + DWORD InputSRBsProcessed; + DWORD OutputSRBsProcessed; + DWORD SRBsIgnored; + DWORD InputSRBsMissing; + DWORD OutputSRBsMissing; + DWORD OutputFailures; + DWORD InternalErrors; + DWORD ExternalErrors; + DWORD InputDiscontinuities; + DWORD DSPFailures; + DWORD TvTunerChanges; + DWORD VBIHeaderChanges; + DWORD LineConfidenceAvg; + DWORD BytesOutput; +} VBICODECFILTERING_STATISTICS_COMMON,*PVBICODECFILTERING_STATISTICS_COMMON; + +typedef struct _VBICODECFILTERING_STATISTICS_COMMON_PIN { + DWORD SRBsProcessed; + DWORD SRBsIgnored; + DWORD SRBsMissing; + DWORD InternalErrors; + DWORD ExternalErrors; + DWORD Discontinuities; + DWORD LineConfidenceAvg; + DWORD BytesOutput; +} VBICODECFILTERING_STATISTICS_COMMON_PIN,*PVBICODECFILTERING_STATISTICS_COMMON_PIN; + +typedef struct _VBICODECFILTERING_STATISTICS_NABTS { + VBICODECFILTERING_STATISTICS_COMMON Common; + DWORD FECBundleBadLines; + DWORD FECQueueOverflows; + DWORD FECCorrectedLines; + DWORD FECUncorrectableLines; + DWORD BundlesProcessed; + DWORD BundlesSent2IP; + DWORD FilteredLines; +} VBICODECFILTERING_STATISTICS_NABTS,*PVBICODECFILTERING_STATISTICS_NABTS; + +typedef struct _VBICODECFILTERING_STATISTICS_NABTS_PIN { + VBICODECFILTERING_STATISTICS_COMMON_PIN Common; +} VBICODECFILTERING_STATISTICS_NABTS_PIN,*PVBICODECFILTERING_STATISTICS_NABTS_PIN; + +typedef struct _VBICODECFILTERING_STATISTICS_CC { + VBICODECFILTERING_STATISTICS_COMMON Common; +} VBICODECFILTERING_STATISTICS_CC,*PVBICODECFILTERING_STATISTICS_CC; + +typedef struct _VBICODECFILTERING_STATISTICS_CC_PIN { + VBICODECFILTERING_STATISTICS_COMMON_PIN Common; +} VBICODECFILTERING_STATISTICS_CC_PIN,*PVBICODECFILTERING_STATISTICS_CC_PIN; + +typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT { + VBICODECFILTERING_STATISTICS_COMMON Common; +} VBICODECFILTERING_STATISTICS_TELETEXT,*PVBICODECFILTERING_STATISTICS_TELETEXT; + +typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT_PIN { + VBICODECFILTERING_STATISTICS_COMMON_PIN Common; +} VBICODECFILTERING_STATISTICS_TELETEXT_PIN,*PVBICODECFILTERING_STATISTICS_TELETEXT_PIN; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_SCANLINES Scanlines; +} KSPROPERTY_VBICODECFILTERING_SCANLINES_S,*PKSPROPERTY_VBICODECFILTERING_SCANLINES_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_NABTS_SUBSTREAMS Substreams; +} KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S,*PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_CC_SUBSTREAMS Substreams; +} KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S,*PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_STATISTICS_COMMON Statistics; +} KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_STATISTICS_COMMON_PIN Statistics; +} KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_STATISTICS_NABTS Statistics; +} KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_STATISTICS_NABTS_PIN Statistics; +} KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_STATISTICS_CC Statistics; +} KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S; + +typedef struct { + KSPROPERTY Property; + VBICODECFILTERING_STATISTICS_CC_PIN Statistics; +} KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S; + +#define STATIC_PINNAME_VIDEO_CAPTURE \ + 0xfb6c4281,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +#define STATIC_PINNAME_CAPTURE STATIC_PINNAME_VIDEO_CAPTURE +DEFINE_GUIDSTRUCT("FB6C4281-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_CAPTURE); +#define PINNAME_VIDEO_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CAPTURE) +#define PINNAME_CAPTURE PINNAME_VIDEO_CAPTURE + +#define STATIC_PINNAME_VIDEO_CC_CAPTURE \ + 0x1aad8061,0x12d,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe +#define STATIC_PINNAME_CC_CAPTURE STATIC_PINNAME_VIDEO_CC_CAPTURE +DEFINE_GUIDSTRUCT("1AAD8061-012D-11d2-B4B1-00A0D102CFBE",PINNAME_VIDEO_CC_CAPTURE); +#define PINNAME_VIDEO_CC_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CC_CAPTURE) + +#define STATIC_PINNAME_VIDEO_NABTS_CAPTURE \ + 0x29703660,0x498a,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe +#define STATIC_PINNAME_NABTS_CAPTURE STATIC_PINNAME_VIDEO_NABTS_CAPTURE +DEFINE_GUIDSTRUCT("29703660-498A-11d2-B4B1-00A0D102CFBE",PINNAME_VIDEO_NABTS_CAPTURE); +#define PINNAME_VIDEO_NABTS_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS_CAPTURE) + +#define STATIC_PINNAME_VIDEO_PREVIEW \ + 0xfb6c4282,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +#define STATIC_PINNAME_PREVIEW STATIC_PINNAME_VIDEO_PREVIEW +DEFINE_GUIDSTRUCT("FB6C4282-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_PREVIEW); +#define PINNAME_VIDEO_PREVIEW DEFINE_GUIDNAMED(PINNAME_VIDEO_PREVIEW) +#define PINNAME_PREVIEW PINNAME_VIDEO_PREVIEW + +#define STATIC_PINNAME_VIDEO_ANALOGVIDEOIN \ + 0xfb6c4283,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C4283-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_ANALOGVIDEOIN); +#define PINNAME_VIDEO_ANALOGVIDEOIN DEFINE_GUIDNAMED(PINNAME_VIDEO_ANALOGVIDEOIN) + +#define STATIC_PINNAME_VIDEO_VBI \ + 0xfb6c4284,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C4284-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VBI); +#define PINNAME_VIDEO_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VBI) + +#define STATIC_PINNAME_VIDEO_VIDEOPORT \ + 0xfb6c4285,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C4285-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VIDEOPORT); +#define PINNAME_VIDEO_VIDEOPORT DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT) + +#define STATIC_PINNAME_VIDEO_NABTS \ + 0xfb6c4286,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C4286-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_NABTS); +#define PINNAME_VIDEO_NABTS DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS) + +#define STATIC_PINNAME_VIDEO_EDS \ + 0xfb6c4287,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C4287-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_EDS); +#define PINNAME_VIDEO_EDS DEFINE_GUIDNAMED(PINNAME_VIDEO_EDS) + +#define STATIC_PINNAME_VIDEO_TELETEXT \ + 0xfb6c4288,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C4288-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_TELETEXT); +#define PINNAME_VIDEO_TELETEXT DEFINE_GUIDNAMED(PINNAME_VIDEO_TELETEXT) + +#define STATIC_PINNAME_VIDEO_CC \ + 0xfb6c4289,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C4289-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_CC); +#define PINNAME_VIDEO_CC DEFINE_GUIDNAMED(PINNAME_VIDEO_CC) + +#define STATIC_PINNAME_VIDEO_STILL \ + 0xfb6c428A,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C428A-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_STILL); +#define PINNAME_VIDEO_STILL DEFINE_GUIDNAMED(PINNAME_VIDEO_STILL) + +#define STATIC_PINNAME_VIDEO_TIMECODE \ + 0xfb6c428B,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C428B-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_TIMECODE); +#define PINNAME_VIDEO_TIMECODE DEFINE_GUIDNAMED(PINNAME_VIDEO_TIMECODE) + +#define STATIC_PINNAME_VIDEO_VIDEOPORT_VBI \ + 0xfb6c428C,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("FB6C428C-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VIDEOPORT_VBI); +#define PINNAME_VIDEO_VIDEOPORT_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT_VBI) + +#define KS_VIDEO_FLAG_FRAME 0x0000L +#define KS_VIDEO_FLAG_FIELD1 0x0001L +#define KS_VIDEO_FLAG_FIELD2 0x0002L + +#define KS_VIDEO_FLAG_I_FRAME 0x0000L +#define KS_VIDEO_FLAG_P_FRAME 0x0010L +#define KS_VIDEO_FLAG_B_FRAME 0x0020L + +typedef struct tagKS_FRAME_INFO { + ULONG ExtendedHeaderSize; + DWORD dwFrameFlags; + LONGLONG PictureNumber; + LONGLONG DropCount; + HANDLE hDirectDraw; + HANDLE hSurfaceHandle; + RECT DirectDrawRect; + + DWORD Reserved1; + DWORD Reserved2; + DWORD Reserved3; + DWORD Reserved4; +} KS_FRAME_INFO,*PKS_FRAME_INFO; + +#define KS_VBI_FLAG_FIELD1 0x0001L +#define KS_VBI_FLAG_FIELD2 0x0002L + +#define KS_VBI_FLAG_MV_PRESENT 0x0100L +#define KS_VBI_FLAG_MV_HARDWARE 0x0200L +#define KS_VBI_FLAG_MV_DETECTED 0x0400L + +#define KS_VBI_FLAG_TVTUNER_CHANGE 0x0010L +#define KS_VBI_FLAG_VBIINFOHEADER_CHANGE 0x0020L + +typedef struct tagKS_VBI_FRAME_INFO { + ULONG ExtendedHeaderSize; + DWORD dwFrameFlags; + LONGLONG PictureNumber; + LONGLONG DropCount; + DWORD dwSamplingFrequency; + KS_TVTUNER_CHANGE_INFO TvTunerChangeInfo; + KS_VBIINFOHEADER VBIInfoHeader; +} KS_VBI_FRAME_INFO,*PKS_VBI_FRAME_INFO; + +typedef enum +{ + KS_AnalogVideo_None = 0x00000000, + KS_AnalogVideo_NTSC_M = 0x00000001, + KS_AnalogVideo_NTSC_M_J = 0x00000002, + KS_AnalogVideo_NTSC_433 = 0x00000004, + KS_AnalogVideo_PAL_B = 0x00000010, + KS_AnalogVideo_PAL_D = 0x00000020, + KS_AnalogVideo_PAL_G = 0x00000040, + KS_AnalogVideo_PAL_H = 0x00000080, + KS_AnalogVideo_PAL_I = 0x00000100, + KS_AnalogVideo_PAL_M = 0x00000200, + KS_AnalogVideo_PAL_N = 0x00000400, + KS_AnalogVideo_PAL_60 = 0x00000800, + KS_AnalogVideo_SECAM_B = 0x00001000, + KS_AnalogVideo_SECAM_D = 0x00002000, + KS_AnalogVideo_SECAM_G = 0x00004000, + KS_AnalogVideo_SECAM_H = 0x00008000, + KS_AnalogVideo_SECAM_K = 0x00010000, + KS_AnalogVideo_SECAM_K1 = 0x00020000, + KS_AnalogVideo_SECAM_L = 0x00040000, + KS_AnalogVideo_SECAM_L1 = 0x00080000, + KS_AnalogVideo_PAL_N_COMBO = 0x00100000 +} KS_AnalogVideoStandard; + +#define KS_AnalogVideo_NTSC_Mask 0x00000007 +#define KS_AnalogVideo_PAL_Mask 0x00100FF0 +#define KS_AnalogVideo_SECAM_Mask 0x000FF000 + +#define STATIC_PROPSETID_ALLOCATOR_CONTROL \ + 0x53171960,0x148e,0x11d2,0x99,0x79,0x0,0x0,0xc0,0xcc,0x16,0xba +DEFINE_GUIDSTRUCT("53171960-148E-11d2-9979-0000C0CC16BA",PROPSETID_ALLOCATOR_CONTROL); +#define PROPSETID_ALLOCATOR_CONTROL DEFINE_GUIDNAMED(PROPSETID_ALLOCATOR_CONTROL) + +typedef enum { + KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT, + KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE, + KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS, + KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE +} KSPROPERTY_ALLOCATOR_CONTROL; + +typedef struct { + ULONG CX; + ULONG CY; +} KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S,*PKSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S; + +typedef struct { + ULONG InterleavedCapSupported; +} KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S,*PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S; + +typedef struct { + ULONG InterleavedCapPossible; +} KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S,*PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S; + +#define STATIC_PROPSETID_VIDCAP_VIDEOPROCAMP \ + 0xC6E13360L,0x30AC,0x11d0,0xa1,0x8c,0x00,0xA0,0xC9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("C6E13360-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEOPROCAMP); +#define PROPSETID_VIDCAP_VIDEOPROCAMP DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOPROCAMP) + +typedef enum { + KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS, + KSPROPERTY_VIDEOPROCAMP_CONTRAST, + KSPROPERTY_VIDEOPROCAMP_HUE, + KSPROPERTY_VIDEOPROCAMP_SATURATION, + KSPROPERTY_VIDEOPROCAMP_SHARPNESS, + KSPROPERTY_VIDEOPROCAMP_GAMMA, + KSPROPERTY_VIDEOPROCAMP_COLORENABLE, + KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE, + KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION, + KSPROPERTY_VIDEOPROCAMP_GAIN, + KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER, + KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER_LIMIT, + KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT, + KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY +} KSPROPERTY_VIDCAP_VIDEOPROCAMP; + +typedef struct { + KSPROPERTY Property; + LONG Value; + ULONG Flags; + ULONG Capabilities; +} KSPROPERTY_VIDEOPROCAMP_S,*PKSPROPERTY_VIDEOPROCAMP_S; + +typedef struct { + KSP_NODE NodeProperty; + LONG Value; + ULONG Flags; + ULONG Capabilities; +} KSPROPERTY_VIDEOPROCAMP_NODE_S,*PKSPROPERTY_VIDEOPROCAMP_NODE_S; + +typedef struct { + KSPROPERTY Property; + LONG Value1; + ULONG Flags; + ULONG Capabilities; + LONG Value2; +} KSPROPERTY_VIDEOPROCAMP_S2,*PKSPROPERTY_VIDEOPROCAMP_S2; + +typedef struct { + KSP_NODE NodeProperty; + LONG Value1; + ULONG Flags; + ULONG Capabilities; + LONG Value2; +} KSPROPERTY_VIDEOPROCAMP_NODE_S2,*PKSPROPERTY_VIDEOPROCAMP_NODE_S2; + +#define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO 0X0001L +#define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL 0X0002L + +#define STATIC_PROPSETID_VIDCAP_SELECTOR \ + 0x1ABDAECA,0x68B6,0x4F83,0x93,0x71,0xB4,0x13,0x90,0x7C,0x7B,0x9F +DEFINE_GUIDSTRUCT("1ABDAECA-68B6-4F83-9371-B413907C7B9F",PROPSETID_VIDCAP_SELECTOR); +#define PROPSETID_VIDCAP_SELECTOR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_SELECTOR) + +typedef enum { + KSPROPERTY_SELECTOR_SOURCE_NODE_ID, + KSPROPERTY_SELECTOR_NUM_SOURCES +} KSPROPERTY_VIDCAP_SELECTOR,*PKSPROPERTY_VIDCAP_SELECTOR; + +typedef struct { + KSPROPERTY Property; + LONG Value; + ULONG Flags; + ULONG Capabilities; +} KSPROPERTY_SELECTOR_S,*PKSPROPERTY_SELECTOR_S; + +typedef struct { + KSP_NODE NodeProperty; + LONG Value; + ULONG Flags; + ULONG Capabilities; +} KSPROPERTY_SELECTOR_NODE_S,*PKSPROPERTY_SELECTOR_NODE_S; + +#define STATIC_PROPSETID_TUNER \ + 0x6a2e0605L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0605-28e4-11d0-a18c-00a0c9118956",PROPSETID_TUNER); +#define PROPSETID_TUNER DEFINE_GUIDNAMED(PROPSETID_TUNER) + +typedef enum { + KSPROPERTY_TUNER_CAPS, + KSPROPERTY_TUNER_MODE_CAPS, + KSPROPERTY_TUNER_MODE, + KSPROPERTY_TUNER_STANDARD, + KSPROPERTY_TUNER_FREQUENCY, + KSPROPERTY_TUNER_INPUT, + KSPROPERTY_TUNER_STATUS, + KSPROPERTY_TUNER_IF_MEDIUM +} KSPROPERTY_TUNER; + +typedef enum { + KSPROPERTY_TUNER_MODE_TV = 0X0001, + KSPROPERTY_TUNER_MODE_FM_RADIO = 0X0002, + KSPROPERTY_TUNER_MODE_AM_RADIO = 0X0004, + KSPROPERTY_TUNER_MODE_DSS = 0X0008, + KSPROPERTY_TUNER_MODE_ATSC = 0X0010 +} KSPROPERTY_TUNER_MODES; + +typedef enum { + KS_TUNER_TUNING_EXACT = 1, + KS_TUNER_TUNING_FINE, + KS_TUNER_TUNING_COARSE +} KS_TUNER_TUNING_FLAGS; + +typedef enum { + KS_TUNER_STRATEGY_PLL = 0X01, + KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02, + KS_TUNER_STRATEGY_DRIVER_TUNES = 0X04 +} KS_TUNER_STRATEGY; + +typedef struct { + KSPROPERTY Property; + ULONG ModesSupported; + KSPIN_MEDIUM VideoMedium; + KSPIN_MEDIUM TVAudioMedium; + KSPIN_MEDIUM RadioAudioMedium; +} KSPROPERTY_TUNER_CAPS_S,*PKSPROPERTY_TUNER_CAPS_S; + +typedef struct { + KSPROPERTY Property; + KSPIN_MEDIUM IFMedium; +} KSPROPERTY_TUNER_IF_MEDIUM_S,*PKSPROPERTY_TUNER_IF_MEDIUM_S; + +typedef struct { + KSPROPERTY Property; + ULONG Mode; + ULONG StandardsSupported; + ULONG MinFrequency; + ULONG MaxFrequency; + ULONG TuningGranularity; + ULONG NumberOfInputs; + ULONG SettlingTime; + ULONG Strategy; +} KSPROPERTY_TUNER_MODE_CAPS_S,*PKSPROPERTY_TUNER_MODE_CAPS_S; + +typedef struct { + KSPROPERTY Property; + ULONG Mode; +} KSPROPERTY_TUNER_MODE_S,*PKSPROPERTY_TUNER_MODE_S; + +typedef struct { + KSPROPERTY Property; + ULONG Frequency; + ULONG LastFrequency; + ULONG TuningFlags; + ULONG VideoSubChannel; + ULONG AudioSubChannel; + ULONG Channel; + ULONG Country; +} KSPROPERTY_TUNER_FREQUENCY_S,*PKSPROPERTY_TUNER_FREQUENCY_S; + +typedef struct { + KSPROPERTY Property; + ULONG Standard; +} KSPROPERTY_TUNER_STANDARD_S,*PKSPROPERTY_TUNER_STANDARD_S; + +typedef struct { + KSPROPERTY Property; + ULONG InputIndex; +} KSPROPERTY_TUNER_INPUT_S,*PKSPROPERTY_TUNER_INPUT_S; + +typedef struct { + KSPROPERTY Property; + ULONG CurrentFrequency; + ULONG PLLOffset; + ULONG SignalStrength; + ULONG Busy; +} KSPROPERTY_TUNER_STATUS_S,*PKSPROPERTY_TUNER_STATUS_S; + +#define STATIC_EVENTSETID_TUNER \ + 0x6a2e0606L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0606-28e4-11d0-a18c-00a0c9118956",EVENTSETID_TUNER); +#define EVENTSETID_TUNER DEFINE_GUIDNAMED(EVENTSETID_TUNER) + +typedef enum { + KSEVENT_TUNER_CHANGED +} KSEVENT_TUNER; + +#define STATIC_KSNODETYPE_VIDEO_STREAMING \ + 0xDFF229E1L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_STREAMING); +#define KSNODETYPE_VIDEO_STREAMING DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_STREAMING) + +#define STATIC_KSNODETYPE_VIDEO_INPUT_TERMINAL \ + 0xDFF229E2L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_INPUT_TERMINAL); +#define KSNODETYPE_VIDEO_INPUT_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_INPUT_TERMINAL) + +#define STATIC_KSNODETYPE_VIDEO_OUTPUT_TERMINAL \ + 0xDFF229E3L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_OUTPUT_TERMINAL); +#define KSNODETYPE_VIDEO_OUTPUT_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_OUTPUT_TERMINAL) + +#define STATIC_KSNODETYPE_VIDEO_SELECTOR \ + 0xDFF229E4L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_SELECTOR); +#define KSNODETYPE_VIDEO_SELECTOR DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_SELECTOR) + +#define STATIC_KSNODETYPE_VIDEO_PROCESSING \ + 0xDFF229E5L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_PROCESSING); +#define KSNODETYPE_VIDEO_PROCESSING DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_PROCESSING) + +#define STATIC_KSNODETYPE_VIDEO_CAMERA_TERMINAL \ + 0xDFF229E6L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_CAMERA_TERMINAL); +#define KSNODETYPE_VIDEO_CAMERA_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_CAMERA_TERMINAL) + +#define STATIC_KSNODETYPE_VIDEO_INPUT_MTT \ + 0xDFF229E7L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_INPUT_MTT); +#define KSNODETYPE_VIDEO_INPUT_MTT DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_INPUT_MTT) + +#define STATIC_KSNODETYPE_VIDEO_OUTPUT_MTT \ + 0xDFF229E8L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("DFF229E8-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_OUTPUT_MTT); +#define KSNODETYPE_VIDEO_OUTPUT_MTT DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_OUTPUT_MTT) + +#define STATIC_PROPSETID_VIDCAP_VIDEOENCODER \ + 0x6a2e0610L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0610-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_VIDEOENCODER); +#define PROPSETID_VIDCAP_VIDEOENCODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOENCODER) + +typedef enum { + KSPROPERTY_VIDEOENCODER_CAPS, + KSPROPERTY_VIDEOENCODER_STANDARD, + KSPROPERTY_VIDEOENCODER_COPYPROTECTION, + KSPROPERTY_VIDEOENCODER_CC_ENABLE +} KSPROPERTY_VIDCAP_VIDEOENCODER; + +typedef struct { + KSPROPERTY Property; + LONG Value; + ULONG Flags; + ULONG Capabilities; +} KSPROPERTY_VIDEOENCODER_S,*PKSPROPERTY_VIDEOENCODER_S; + +#define STATIC_PROPSETID_VIDCAP_VIDEODECODER \ + 0xC6E13350L,0x30AC,0x11d0,0xA1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("C6E13350-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEODECODER); +#define PROPSETID_VIDCAP_VIDEODECODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEODECODER) + +typedef enum { + KSPROPERTY_VIDEODECODER_CAPS, + KSPROPERTY_VIDEODECODER_STANDARD, + KSPROPERTY_VIDEODECODER_STATUS, + KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE, + KSPROPERTY_VIDEODECODER_VCR_TIMING +} KSPROPERTY_VIDCAP_VIDEODECODER; + +typedef enum { + KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT = 0X0001, + KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = 0X0002, + KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = 0X0004 +} KS_VIDEODECODER_FLAGS; + +typedef struct { + KSPROPERTY Property; + ULONG StandardsSupported; + ULONG Capabilities; + ULONG SettlingTime; + ULONG HSyncPerVSync; +} KSPROPERTY_VIDEODECODER_CAPS_S,*PKSPROPERTY_VIDEODECODER_CAPS_S; + +typedef struct { + KSPROPERTY Property; + ULONG NumberOfLines; + ULONG SignalLocked; +} KSPROPERTY_VIDEODECODER_STATUS_S,*PKSPROPERTY_VIDEODECODER_STATUS_S; + +typedef struct { + KSPROPERTY Property; + ULONG Value; +} KSPROPERTY_VIDEODECODER_S,*PKSPROPERTY_VIDEODECODER_S; + +#define STATIC_EVENTSETID_VIDEODECODER \ + 0x6a2e0621L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0621-28e4-11d0-a18c-00a0c9118956",EVENTSETID_VIDEODECODER); +#define EVENTSETID_VIDEODECODER DEFINE_GUIDNAMED(EVENTSETID_VIDEODECODER) + +typedef enum { + KSEVENT_VIDEODECODER_CHANGED +} KSEVENT_VIDEODECODER; + +#define STATIC_PROPSETID_VIDCAP_CAMERACONTROL \ + 0xC6E13370L,0x30AC,0x11d0,0xa1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("C6E13370-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_CAMERACONTROL); +#define PROPSETID_VIDCAP_CAMERACONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CAMERACONTROL) + +typedef enum { + KSPROPERTY_CAMERACONTROL_PAN, + KSPROPERTY_CAMERACONTROL_TILT, + KSPROPERTY_CAMERACONTROL_ROLL, + KSPROPERTY_CAMERACONTROL_ZOOM, + KSPROPERTY_CAMERACONTROL_EXPOSURE, + KSPROPERTY_CAMERACONTROL_IRIS, + KSPROPERTY_CAMERACONTROL_FOCUS, + KSPROPERTY_CAMERACONTROL_SCANMODE, + KSPROPERTY_CAMERACONTROL_PRIVACY, + KSPROPERTY_CAMERACONTROL_PANTILT, + KSPROPERTY_CAMERACONTROL_PAN_RELATIVE, + KSPROPERTY_CAMERACONTROL_TILT_RELATIVE, + KSPROPERTY_CAMERACONTROL_ROLL_RELATIVE, + KSPROPERTY_CAMERACONTROL_ZOOM_RELATIVE, + KSPROPERTY_CAMERACONTROL_EXPOSURE_RELATIVE, + KSPROPERTY_CAMERACONTROL_IRIS_RELATIVE, + KSPROPERTY_CAMERACONTROL_FOCUS_RELATIVE, + KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE, + KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH +} KSPROPERTY_VIDCAP_CAMERACONTROL; + +typedef struct { + KSPROPERTY Property; + LONG Value; + ULONG Flags; + ULONG Capabilities; +} KSPROPERTY_CAMERACONTROL_S,*PKSPROPERTY_CAMERACONTROL_S; + +typedef struct { + KSP_NODE NodeProperty; + LONG Value; + ULONG Flags; + ULONG Capabilities; +} KSPROPERTY_CAMERACONTROL_NODE_S,PKSPROPERTY_CAMERACONTROL_NODE_S; + +typedef struct { + KSPROPERTY Property; + LONG Value1; + ULONG Flags; + ULONG Capabilities; + LONG Value2; +} KSPROPERTY_CAMERACONTROL_S2,*PKSPROPERTY_CAMERACONTROL_S2; + +typedef struct { + KSP_NODE NodeProperty; + LONG Value1; + ULONG Flags; + ULONG Capabilities; + LONG Value2; +} KSPROPERTY_CAMERACONTROL_NODE_S2,*PKSPROPERTY_CAMERACONTROL_NODE_S2; + +typedef struct { + KSPROPERTY Property; + LONG lOcularFocalLength; + LONG lObjectiveFocalLengthMin; + LONG lObjectiveFocalLengthMax; +} KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S,*PKSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S; + +typedef struct { + KSNODEPROPERTY NodeProperty; + LONG lOcularFocalLength; + LONG lObjectiveFocalLengthMin; + LONG lObjectiveFocalLengthMax; +} KSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S,*PKSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S; + +#define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO 0X0001L +#define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL 0X0002L + +#define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE 0X0000L +#define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE 0X0010L + +#ifndef __EDevCtrl__ +#define __EDevCtrl__ + +#define STATIC_PROPSETID_EXT_DEVICE \ + 0xB5730A90L,0x1A2C,0x11cf,0x8c,0x23,0x00,0xAA,0x00,0x6B,0x68,0x14 +DEFINE_GUIDSTRUCT("B5730A90-1A2C-11cf-8C23-00AA006B6814",PROPSETID_EXT_DEVICE); +#define PROPSETID_EXT_DEVICE DEFINE_GUIDNAMED(PROPSETID_EXT_DEVICE) + +typedef enum { + KSPROPERTY_EXTDEVICE_ID, + KSPROPERTY_EXTDEVICE_VERSION, + KSPROPERTY_EXTDEVICE_POWER_STATE, + KSPROPERTY_EXTDEVICE_PORT, + KSPROPERTY_EXTDEVICE_CAPABILITIES +} KSPROPERTY_EXTDEVICE; + +typedef struct tagDEVCAPS{ + LONG CanRecord; + LONG CanRecordStrobe; + LONG HasAudio; + LONG HasVideo; + LONG UsesFiles; + LONG CanSave; + LONG DeviceType; + LONG TCRead; + LONG TCWrite; + LONG CTLRead; + LONG IndexRead; + LONG Preroll; + LONG Postroll; + LONG SyncAcc; + LONG NormRate; + LONG CanPreview; + LONG CanMonitorSrc; + LONG CanTest; + LONG VideoIn; + LONG AudioIn; + LONG Calibrate; + LONG SeekType; + LONG SimulatedHardware; +} DEVCAPS,*PDEVCAPS; + +typedef struct { + KSPROPERTY Property; + union { + DEVCAPS Capabilities; + ULONG DevPort; + ULONG PowerState; + WCHAR pawchString[MAX_PATH]; + DWORD NodeUniqueID[2]; + } u; +} KSPROPERTY_EXTDEVICE_S,*PKSPROPERTY_EXTDEVICE_S; + +#define STATIC_PROPSETID_EXT_TRANSPORT \ + 0xA03CD5F0L,0x3045,0x11cf,0x8c,0x44,0x00,0xAA,0x00,0x6B,0x68,0x14 +DEFINE_GUIDSTRUCT("A03CD5F0-3045-11cf-8C44-00AA006B6814",PROPSETID_EXT_TRANSPORT); +#define PROPSETID_EXT_TRANSPORT DEFINE_GUIDNAMED(PROPSETID_EXT_TRANSPORT) + +typedef enum { + KSPROPERTY_EXTXPORT_CAPABILITIES, + KSPROPERTY_EXTXPORT_INPUT_SIGNAL_MODE, + KSPROPERTY_EXTXPORT_OUTPUT_SIGNAL_MODE, + KSPROPERTY_EXTXPORT_LOAD_MEDIUM, + KSPROPERTY_EXTXPORT_MEDIUM_INFO, + KSPROPERTY_EXTXPORT_STATE, + KSPROPERTY_EXTXPORT_STATE_NOTIFY, + KSPROPERTY_EXTXPORT_TIMECODE_SEARCH, + KSPROPERTY_EXTXPORT_ATN_SEARCH, + KSPROPERTY_EXTXPORT_RTC_SEARCH, + KSPROPERTY_RAW_AVC_CMD +} KSPROPERTY_EXTXPORT; + +typedef struct tagTRANSPORTSTATUS { + LONG Mode; + LONG LastError; + LONG RecordInhibit; + LONG ServoLock; + LONG MediaPresent; + LONG MediaLength; + LONG MediaSize; + LONG MediaTrackCount; + LONG MediaTrackLength; + LONG MediaTrackSide; + LONG MediaType; + LONG LinkMode; + LONG NotifyOn; +} TRANSPORTSTATUS,*PTRANSPORTSTATUS; + +typedef struct tagTRANSPORTBASICPARMS { + LONG TimeFormat; + LONG TimeReference; + LONG Superimpose; + LONG EndStopAction; + LONG RecordFormat; + LONG StepFrames; + LONG SetpField; + LONG Preroll; + LONG RecPreroll; + LONG Postroll; + LONG EditDelay; + LONG PlayTCDelay; + LONG RecTCDelay; + LONG EditField; + LONG FrameServo; + LONG ColorFrameServo; + LONG ServoRef; + LONG WarnGenlock; + LONG SetTracking; + TCHAR VolumeName[40]; + LONG Ballistic[20]; + LONG Speed; + LONG CounterFormat; + LONG TunerChannel; + LONG TunerNumber; + LONG TimerEvent; + LONG TimerStartDay; + LONG TimerStartTime; + LONG TimerStopDay; + LONG TimerStopTime; +} TRANSPORTBASICPARMS,*PTRANSPORTBASICPARMS; + +typedef struct tagTRANSPORTVIDEOPARMS { + LONG OutputMode; + LONG Input; +} TRANSPORTVIDEOPARMS,*PTRANSPORTVIDEOPARMS; + +typedef struct tagTRANSPORTAUDIOPARMS { + LONG EnableOutput; + LONG EnableRecord; + LONG EnableSelsync; + LONG Input; + LONG MonitorSource; +} TRANSPORTAUDIOPARMS,*PTRANSPORTAUDIOPARMS; + +typedef struct { + WINBOOL MediaPresent; + ULONG MediaType; + WINBOOL RecordInhibit; +} MEDIUM_INFO,*PMEDIUM_INFO; + +typedef struct { + ULONG Mode; + ULONG State; +} TRANSPORT_STATE,*PTRANSPORT_STATE; + +typedef struct { + KSPROPERTY Property; + union { + ULONG Capabilities; + ULONG SignalMode; + ULONG LoadMedium; + MEDIUM_INFO MediumInfo; + TRANSPORT_STATE XPrtState; + struct { + BYTE frame; + BYTE second; + BYTE minute; + BYTE hour; + } Timecode; + DWORD dwTimecode; + DWORD dwAbsTrackNumber; + struct { + ULONG PayloadSize; + BYTE Payload[512]; + } RawAVC; + } u; +} KSPROPERTY_EXTXPORT_S,*PKSPROPERTY_EXTXPORT_S; + +typedef struct { + KSP_NODE NodeProperty; + union { + ULONG Capabilities; + ULONG SignalMode; + ULONG LoadMedium; + MEDIUM_INFO MediumInfo; + TRANSPORT_STATE XPrtState; + struct { + BYTE frame; + BYTE second; + BYTE minute; + BYTE hour; + } Timecode; + DWORD dwTimecode; + DWORD dwAbsTrackNumber; + struct { + ULONG PayloadSize; + BYTE Payload[512]; + } RawAVC; + } u; +} KSPROPERTY_EXTXPORT_NODE_S,*PKSPROPERTY_EXTXPORT_NODE_S; + +#define STATIC_PROPSETID_TIMECODE_READER \ + 0x9B496CE1L,0x811B,0x11cf,0x8C,0x77,0x00,0xAA,0x00,0x6B,0x68,0x14 +DEFINE_GUIDSTRUCT("9B496CE1-811B-11cf-8C77-00AA006B6814",PROPSETID_TIMECODE_READER); +#define PROPSETID_TIMECODE_READER DEFINE_GUIDNAMED(PROPSETID_TIMECODE_READER) + +typedef enum { + KSPROPERTY_TIMECODE_READER, + KSPROPERTY_ATN_READER, + KSPROPERTY_RTC_READER +} KSPROPERTY_TIMECODE; + +#ifndef TIMECODE_DEFINED +#define TIMECODE_DEFINED +typedef union _timecode { + struct { + WORD wFrameRate; + WORD wFrameFract; + DWORD dwFrames; + }; + DWORDLONG qw; +} TIMECODE; +typedef TIMECODE *PTIMECODE; + +typedef struct tagTIMECODE_SAMPLE { + LONGLONG qwTick; + TIMECODE timecode; + DWORD dwUser; + DWORD dwFlags; +} TIMECODE_SAMPLE; + +typedef TIMECODE_SAMPLE *PTIMECODE_SAMPLE; +#endif /* TIMECODE_DEFINED */ + +typedef struct { + KSPROPERTY Property; + TIMECODE_SAMPLE TimecodeSamp; +} KSPROPERTY_TIMECODE_S,*PKSPROPERTY_TIMECODE_S; + +typedef struct { + KSP_NODE NodeProperty; + TIMECODE_SAMPLE TimecodeSamp; +} KSPROPERTY_TIMECODE_NODE_S,*PKSPROPERTY_TIMECODE_NODE_S; + +#define STATIC_KSEVENTSETID_EXTDEV_Command \ + 0x109c7988L,0xb3cb,0x11d2,0xb4,0x8e,0x00,0x60,0x97,0xb3,0x39,0x1b +DEFINE_GUIDSTRUCT("109c7988-b3cb-11d2-b48e-006097b3391b",KSEVENTSETID_EXTDEV_Command); +#define KSEVENTSETID_EXTDEV_Command DEFINE_GUIDNAMED(KSEVENTSETID_EXTDEV_Command) + +typedef enum { + KSEVENT_EXTDEV_COMMAND_NOTIFY_INTERIM_READY, + KSEVENT_EXTDEV_COMMAND_CONTROL_INTERIM_READY, + KSEVENT_EXTDEV_COMMAND_BUSRESET, + KSEVENT_EXTDEV_TIMECODE_UPDATE, + KSEVENT_EXTDEV_OPERATION_MODE_UPDATE, + KSEVENT_EXTDEV_TRANSPORT_STATE_UPDATE, + KSEVENT_EXTDEV_NOTIFY_REMOVAL, + KSEVENT_EXTDEV_NOTIFY_MEDIUM_CHANGE +} KSEVENT_DEVCMD; +#endif /* __EDevCtrl__ */ + +#define STATIC_PROPSETID_VIDCAP_CROSSBAR \ + 0x6a2e0640L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0640-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_CROSSBAR); +#define PROPSETID_VIDCAP_CROSSBAR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CROSSBAR) + +typedef enum { + KSPROPERTY_CROSSBAR_CAPS, + KSPROPERTY_CROSSBAR_PININFO, + KSPROPERTY_CROSSBAR_CAN_ROUTE, + KSPROPERTY_CROSSBAR_ROUTE +} KSPROPERTY_VIDCAP_CROSSBAR; + +typedef struct { + KSPROPERTY Property; + ULONG NumberOfInputs; + ULONG NumberOfOutputs; +} KSPROPERTY_CROSSBAR_CAPS_S,*PKSPROPERTY_CROSSBAR_CAPS_S; + +typedef struct { + KSPROPERTY Property; + KSPIN_DATAFLOW Direction; + ULONG Index; + ULONG PinType; + ULONG RelatedPinIndex; + KSPIN_MEDIUM Medium; +} KSPROPERTY_CROSSBAR_PININFO_S,*PKSPROPERTY_CROSSBAR_PININFO_S; + +typedef struct { + KSPROPERTY Property; + ULONG IndexInputPin; + ULONG IndexOutputPin; + ULONG CanRoute; +} KSPROPERTY_CROSSBAR_ROUTE_S,*PKSPROPERTY_CROSSBAR_ROUTE_S; + +#define STATIC_EVENTSETID_CROSSBAR \ + 0x6a2e0641L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0641-28e4-11d0-a18c-00a0c9118956",EVENTSETID_CROSSBAR); +#define EVENTSETID_CROSSBAR DEFINE_GUIDNAMED(EVENTSETID_CROSSBAR) + +typedef enum { + KSEVENT_CROSSBAR_CHANGED +} KSEVENT_CROSSBAR; + +typedef enum { + KS_PhysConn_Video_Tuner = 1, + KS_PhysConn_Video_Composite, + KS_PhysConn_Video_SVideo, + KS_PhysConn_Video_RGB, + KS_PhysConn_Video_YRYBY, + KS_PhysConn_Video_SerialDigital, + KS_PhysConn_Video_ParallelDigital, + KS_PhysConn_Video_SCSI, + KS_PhysConn_Video_AUX, + KS_PhysConn_Video_1394, + KS_PhysConn_Video_USB, + KS_PhysConn_Video_VideoDecoder, + KS_PhysConn_Video_VideoEncoder, + KS_PhysConn_Video_SCART, + KS_PhysConn_Audio_Tuner = 4096, + KS_PhysConn_Audio_Line, + KS_PhysConn_Audio_Mic, + KS_PhysConn_Audio_AESDigital, + KS_PhysConn_Audio_SPDIFDigital, + KS_PhysConn_Audio_SCSI, + KS_PhysConn_Audio_AUX, + KS_PhysConn_Audio_1394, + KS_PhysConn_Audio_USB, + KS_PhysConn_Audio_AudioDecoder +} KS_PhysicalConnectorType; + +#define STATIC_PROPSETID_VIDCAP_TVAUDIO \ + 0x6a2e0650L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0650-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_TVAUDIO); +#define PROPSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(PROPSETID_VIDCAP_TVAUDIO) + +typedef enum { + KSPROPERTY_TVAUDIO_CAPS, + KSPROPERTY_TVAUDIO_MODE, + KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES +} KSPROPERTY_VIDCAP_TVAUDIO; + +#define KS_TVAUDIO_MODE_MONO 0x0001 +#define KS_TVAUDIO_MODE_STEREO 0x0002 +#define KS_TVAUDIO_MODE_LANG_A 0x0010 +#define KS_TVAUDIO_MODE_LANG_B 0x0020 +#define KS_TVAUDIO_MODE_LANG_C 0x0040 + +typedef struct { + KSPROPERTY Property; + ULONG Capabilities; + KSPIN_MEDIUM InputMedium; + KSPIN_MEDIUM OutputMedium; +} KSPROPERTY_TVAUDIO_CAPS_S,*PKSPROPERTY_TVAUDIO_CAPS_S; + +typedef struct { + KSPROPERTY Property; + ULONG Mode; +} KSPROPERTY_TVAUDIO_S,*PKSPROPERTY_TVAUDIO_S; + +#define STATIC_KSEVENTSETID_VIDCAP_TVAUDIO \ + 0x6a2e0651L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0651-28e4-11d0-a18c-00a0c9118956",KSEVENTSETID_VIDCAP_TVAUDIO); +#define KSEVENTSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAP_TVAUDIO) + +typedef enum { + KSEVENT_TVAUDIO_CHANGED +} KSEVENT_TVAUDIO; + +#define STATIC_PROPSETID_VIDCAP_VIDEOCOMPRESSION \ + 0xC6E13343L,0x30AC,0x11d0,0xA1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("C6E13343-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEOCOMPRESSION); +#define PROPSETID_VIDCAP_VIDEOCOMPRESSION DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCOMPRESSION) + +typedef enum { + KSPROPERTY_VIDEOCOMPRESSION_GETINFO, + KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE, + KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME, + KSPROPERTY_VIDEOCOMPRESSION_QUALITY, + KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME, + KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE, + KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE +} KSPROPERTY_VIDCAP_VIDEOCOMPRESSION; + +typedef enum { + KS_CompressionCaps_CanQuality = 1, + KS_CompressionCaps_CanCrunch = 2, + KS_CompressionCaps_CanKeyFrame = 4, + KS_CompressionCaps_CanBFrame = 8, + KS_CompressionCaps_CanWindow = 0x10 +} KS_CompressionCaps; + +typedef enum { + KS_StreamingHint_FrameInterval = 0x0100, + KS_StreamingHint_KeyFrameRate = 0x0200, + KS_StreamingHint_PFrameRate = 0x0400, + KS_StreamingHint_CompQuality = 0x0800, + KS_StreamingHint_CompWindowSize = 0x1000 +} KS_VideoStreamingHints; + +typedef struct { + KSPROPERTY Property; + ULONG StreamIndex; + LONG DefaultKeyFrameRate; + LONG DefaultPFrameRate; + LONG DefaultQuality; + LONG NumberOfQualitySettings; + LONG Capabilities; +} KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S,*PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S; + +typedef struct { + KSPROPERTY Property; + ULONG StreamIndex; + LONG Value; +} KSPROPERTY_VIDEOCOMPRESSION_S,*PKSPROPERTY_VIDEOCOMPRESSION_S; + +typedef struct { + KSPROPERTY Property; + ULONG StreamIndex; + LONG Value; + ULONG Flags; +} KSPROPERTY_VIDEOCOMPRESSION_S1,*PKSPROPERTY_VIDEOCOMPRESSION_S1; + +#define STATIC_KSDATAFORMAT_SUBTYPE_OVERLAY \ + 0xe436eb7fL,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70 +DEFINE_GUIDSTRUCT("e436eb7f-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_OVERLAY); +#define KSDATAFORMAT_SUBTYPE_OVERLAY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_OVERLAY) + +#define STATIC_KSPROPSETID_OverlayUpdate \ + 0x490EA5CFL,0x7681,0x11D1,0xA2,0x1C,0x00,0xA0,0xC9,0x22,0x31,0x96 +DEFINE_GUIDSTRUCT("490EA5CF-7681-11D1-A21C-00A0C9223196",KSPROPSETID_OverlayUpdate); +#define KSPROPSETID_OverlayUpdate DEFINE_GUIDNAMED(KSPROPSETID_OverlayUpdate) + +typedef enum { + KSPROPERTY_OVERLAYUPDATE_INTERESTS, + KSPROPERTY_OVERLAYUPDATE_CLIPLIST = 0x1, + KSPROPERTY_OVERLAYUPDATE_PALETTE = 0x2, + KSPROPERTY_OVERLAYUPDATE_COLORKEY = 0x4, + KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = 0x8, + KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = 0x10, + KSPROPERTY_OVERLAYUPDATE_COLORREF = 0x10000000 +} KSPROPERTY_OVERLAYUPDATE; + +typedef struct { + ULONG PelsWidth; + ULONG PelsHeight; + ULONG BitsPerPel; + WCHAR DeviceID[1]; +} KSDISPLAYCHANGE,*PKSDISPLAYCHANGE; + +#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_OVERLAYUPDATE_INTERESTS, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(ULONG), \ + NULL, NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_OVERLAYUPDATE_PALETTE, \ + NULL, \ + sizeof(KSPROPERTY), \ + 0, \ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_OVERLAYUPDATE_COLORKEY, \ + NULL, \ + sizeof(KSPROPERTY), \ + sizeof(COLORKEY), \ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_OVERLAYUPDATE_CLIPLIST, \ + NULL, \ + sizeof(KSPROPERTY), \ + 2 *sizeof(RECT) + sizeof(RGNDATAHEADER),\ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION, \ + NULL, \ + sizeof(KSPROPERTY), \ + 2 *sizeof(RECT), \ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE, \ + NULL, \ + sizeof(KSPROPERTY), \ + sizeof(KSDISPLAYCHANGE), \ + (Handler), \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler) \ + DEFINE_KSPROPERTY_ITEM( \ + KSPROPERTY_OVERLAYUPDATE_COLORREF, \ + (Handler), \ + sizeof(KSPROPERTY), \ + sizeof(COLORREF), \ + NULL, \ + NULL, 0, NULL, NULL, 0) + +#define STATIC_PROPSETID_VIDCAP_VIDEOCONTROL \ + 0x6a2e0670L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("6a2e0670-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_VIDEOCONTROL); +#define PROPSETID_VIDCAP_VIDEOCONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCONTROL) + +typedef enum { + KSPROPERTY_VIDEOCONTROL_CAPS, + KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE, + KSPROPERTY_VIDEOCONTROL_FRAME_RATES, + KSPROPERTY_VIDEOCONTROL_MODE +} KSPROPERTY_VIDCAP_VIDEOCONTROL; + +typedef enum { + KS_VideoControlFlag_FlipHorizontal = 0x0001, + KS_VideoControlFlag_FlipVertical = 0x0002, + KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = 0x0010, + KS_Obsolete_VideoControlFlag_Trigger = 0x0020, + KS_VideoControlFlag_ExternalTriggerEnable = 0x0004, + KS_VideoControlFlag_Trigger = 0x0008 +} KS_VideoControlFlags; + +typedef struct { + KSPROPERTY Property; + ULONG StreamIndex; + ULONG VideoControlCaps; +} KSPROPERTY_VIDEOCONTROL_CAPS_S,*PKSPROPERTY_VIDEOCONTROL_CAPS_S; + +typedef struct { + KSPROPERTY Property; + ULONG StreamIndex; + LONG Mode; +} KSPROPERTY_VIDEOCONTROL_MODE_S,*PKSPROPERTY_VIDEOCONTROL_MODE_S; + +typedef struct { + KSPROPERTY Property; + ULONG StreamIndex; + ULONG RangeIndex; + SIZE Dimensions; + LONGLONG CurrentActualFrameRate; + LONGLONG CurrentMaxAvailableFrameRate; +} KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S,*PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S; + +typedef struct { + KSPROPERTY Property; + ULONG StreamIndex; + ULONG RangeIndex; + SIZE Dimensions; +} KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S,*PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S; + +#define STATIC_PROPSETID_VIDCAP_DROPPEDFRAMES \ + 0xC6E13344L,0x30AC,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56 +DEFINE_GUIDSTRUCT("C6E13344-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_DROPPEDFRAMES); +#define PROPSETID_VIDCAP_DROPPEDFRAMES DEFINE_GUIDNAMED(PROPSETID_VIDCAP_DROPPEDFRAMES) + +typedef enum { + KSPROPERTY_DROPPEDFRAMES_CURRENT +} KSPROPERTY_VIDCAP_DROPPEDFRAMES; + +typedef struct { + KSPROPERTY Property; + LONGLONG PictureNumber; + LONGLONG DropCount; + ULONG AverageFrameSize; +} KSPROPERTY_DROPPEDFRAMES_CURRENT_S,*PKSPROPERTY_DROPPEDFRAMES_CURRENT_S; + +#define STATIC_KSPROPSETID_VPConfig \ + 0xbc29a660L,0x30e3,0x11d0,0x9e,0x69,0x00,0xc0,0x4f,0xd7,0xc1,0x5b +DEFINE_GUIDSTRUCT("bc29a660-30e3-11d0-9e69-00c04fd7c15b",KSPROPSETID_VPConfig); +#define KSPROPSETID_VPConfig DEFINE_GUIDNAMED(KSPROPSETID_VPConfig) + +#define STATIC_KSPROPSETID_VPVBIConfig \ + 0xec529b00L,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a +DEFINE_GUIDSTRUCT("ec529b00-1a1f-11d1-bad9-00609744111a",KSPROPSETID_VPVBIConfig); +#define KSPROPSETID_VPVBIConfig DEFINE_GUIDNAMED(KSPROPSETID_VPVBIConfig) + +typedef enum { + KSPROPERTY_VPCONFIG_NUMCONNECTINFO, + KSPROPERTY_VPCONFIG_GETCONNECTINFO, + KSPROPERTY_VPCONFIG_SETCONNECTINFO, + KSPROPERTY_VPCONFIG_VPDATAINFO, + KSPROPERTY_VPCONFIG_MAXPIXELRATE, + KSPROPERTY_VPCONFIG_INFORMVPINPUT, + KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT, + KSPROPERTY_VPCONFIG_GETVIDEOFORMAT, + KSPROPERTY_VPCONFIG_SETVIDEOFORMAT, + KSPROPERTY_VPCONFIG_INVERTPOLARITY, + KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY, + KSPROPERTY_VPCONFIG_SCALEFACTOR, + KSPROPERTY_VPCONFIG_DDRAWHANDLE, + KSPROPERTY_VPCONFIG_VIDEOPORTID, + KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE, + KSPROPERTY_VPCONFIG_SURFACEPARAMS +} KSPROPERTY_VPCONFIG; + +#define STATIC_CLSID_KsIBasicAudioInterfaceHandler \ + 0xb9f8ac3e,0x0f71,0x11d2,0xb7,0x2c,0x00,0xc0,0x4f,0xb6,0xbd,0x3d +DEFINE_GUIDSTRUCT("b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d",CLSID_KsIBasicAudioInterfaceHandler); +#define CLSID_KsIBasicAudioInterfaceHandler DEFINE_GUIDNAMED(CLSID_KsIBasicAudioInterfaceHandler) + +#ifdef __IVPType__ +typedef struct { + AMVPSIZE Size; + DWORD MaxPixelsPerSecond; + DWORD Reserved; +} KSVPMAXPIXELRATE,*PKSVPMAXPIXELRATE; + +typedef struct { + KSPROPERTY Property; + AMVPSIZE Size; +} KSVPSIZE_PROP,*PKSVPSIZE_PROP; + +typedef struct { + DWORD dwPitch; + DWORD dwXOrigin; + DWORD dwYOrigin; +} KSVPSURFACEPARAMS,*PKSVPSURFACEPARAMS; +#else /* __IVPType__ */ + +#ifndef __DDRAW_INCLUDED__ +#define DDPF_FOURCC 0x00000004l + +typedef struct _DDPIXELFORMAT +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwFourCC; + __MINGW_EXTENSION union + { + DWORD dwRGBBitCount; + DWORD dwYUVBitCount; + DWORD dwZBufferBitDepth; + DWORD dwAlphaBitDepth; + }; + __MINGW_EXTENSION union + { + DWORD dwRBitMask; + DWORD dwYBitMask; + }; + __MINGW_EXTENSION union + { + DWORD dwGBitMask; + DWORD dwUBitMask; + }; + __MINGW_EXTENSION union + { + DWORD dwBBitMask; + DWORD dwVBitMask; + }; + __MINGW_EXTENSION union + { + DWORD dwRGBAlphaBitMask; + DWORD dwYUVAlphaBitMask; + DWORD dwRGBZBitMask; + DWORD dwYUVZBitMask; + }; +} DDPIXELFORMAT,*LPDDPIXELFORMAT; +#endif /* __DDRAW_INCLUDED__ */ + +#ifndef __DVP_INCLUDED__ +typedef struct _DDVIDEOPORTCONNECT { + DWORD dwSize; + DWORD dwPortWidth; + GUID guidTypeID; + DWORD dwFlags; + ULONG_PTR dwReserved1; +} DDVIDEOPORTCONNECT,*LPDDVIDEOPORTCONNECT; + +#define DDVPTYPE_E_HREFH_VREFH \ + 0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 + +#define DDVPTYPE_E_HREFL_VREFL \ + 0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 +#endif /* __DVP_INCLUDED__ */ + +typedef enum +{ + KS_PixAspectRatio_NTSC4x3, + KS_PixAspectRatio_NTSC16x9, + KS_PixAspectRatio_PAL4x3, + KS_PixAspectRatio_PAL16x9 +} KS_AMPixAspectRatio; + +typedef enum +{ + KS_AMVP_DO_NOT_CARE, + KS_AMVP_BEST_BANDWIDTH, + KS_AMVP_INPUT_SAME_AS_OUTPUT +} KS_AMVP_SELECTFORMATBY; + +typedef enum +{ + KS_AMVP_MODE_WEAVE, + KS_AMVP_MODE_BOBINTERLEAVED, + KS_AMVP_MODE_BOBNONINTERLEAVED, + KS_AMVP_MODE_SKIPEVEN, + KS_AMVP_MODE_SKIPODD +} KS_AMVP_MODE; + +typedef struct tagKS_AMVPDIMINFO +{ + DWORD dwFieldWidth; + DWORD dwFieldHeight; + DWORD dwVBIWidth; + DWORD dwVBIHeight; + RECT rcValidRegion; +} KS_AMVPDIMINFO,*PKS_AMVPDIMINFO; + +typedef struct tagKS_AMVPDATAINFO +{ + DWORD dwSize; + DWORD dwMicrosecondsPerField; + KS_AMVPDIMINFO amvpDimInfo; + DWORD dwPictAspectRatioX; + DWORD dwPictAspectRatioY; + WINBOOL bEnableDoubleClock; + WINBOOL bEnableVACT; + WINBOOL bDataIsInterlaced; + LONG lHalfLinesOdd; + WINBOOL bFieldPolarityInverted; + DWORD dwNumLinesInVREF; + LONG lHalfLinesEven; + DWORD dwReserved1; +} KS_AMVPDATAINFO,*PKS_AMVPDATAINFO; + +typedef struct tagKS_AMVPSIZE +{ + DWORD dwWidth; + DWORD dwHeight; +} KS_AMVPSIZE,*PKS_AMVPSIZE; + +typedef struct { + KS_AMVPSIZE Size; + DWORD MaxPixelsPerSecond; + DWORD Reserved; +} KSVPMAXPIXELRATE,*PKSVPMAXPIXELRATE; + +typedef struct { + KSPROPERTY Property; + KS_AMVPSIZE Size; +} KSVPSIZE_PROP,*PKSVPSIZE_PROP; + +typedef struct { + DWORD dwPitch; + DWORD dwXOrigin; + DWORD dwYOrigin; +} KSVPSURFACEPARAMS,*PKSVPSURFACEPARAMS; +#endif /* __IVPType__ */ + +#define STATIC_KSEVENTSETID_VPNotify \ + 0x20c5598eL,0xd3c8,0x11d0,0x8d,0xfc,0x00,0xc0,0x4f,0xd7,0xc0,0x8b +DEFINE_GUIDSTRUCT("20c5598e-d3c8-11d0-8dfc-00c04fd7c08b",KSEVENTSETID_VPNotify); +#define KSEVENTSETID_VPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VPNotify) + +typedef enum { + KSEVENT_VPNOTIFY_FORMATCHANGE +} KSEVENT_VPNOTIFY; + +#define STATIC_KSEVENTSETID_VIDCAPTOSTI \ + 0xdb47de20,0xf628,0x11d1,0xba,0x41,0x0,0xa0,0xc9,0xd,0x2b,0x5 +DEFINE_GUIDSTRUCT("DB47DE20-F628-11d1-BA41-00A0C90D2B05",KSEVENTSETID_VIDCAPTOSTI); +#define KSEVENTSETID_VIDCAPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAPTOSTI) + +typedef enum { + KSEVENT_VIDCAPTOSTI_EXT_TRIGGER, + KSEVENT_VIDCAP_AUTO_UPDATE, + KSEVENT_VIDCAP_SEARCH +} KSEVENT_VIDCAPTOSTI; + +typedef enum { + KSPROPERTY_EXTENSION_UNIT_INFO, + KSPROPERTY_EXTENSION_UNIT_CONTROL, + KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH = 0xffff +} KSPROPERTY_EXTENSION_UNIT,*PKSPROPERTY_EXTENSION_UNIT; + +#define STATIC_KSEVENTSETID_VPVBINotify \ + 0xec529b01L,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a +DEFINE_GUIDSTRUCT("ec529b01-1a1f-11d1-bad9-00609744111a",KSEVENTSETID_VPVBINotify); +#define KSEVENTSETID_VPVBINotify DEFINE_GUIDNAMED(KSEVENTSETID_VPVBINotify) + +typedef enum { + KSEVENT_VPVBINOTIFY_FORMATCHANGE +} KSEVENT_VPVBINOTIFY; + +#define STATIC_KSDATAFORMAT_TYPE_AUXLine21Data \ + 0x670aea80L,0x3a82,0x11d0,0xb7,0x9b,0x00,0xaa,0x00,0x37,0x67,0xa7 +DEFINE_GUIDSTRUCT("670aea80-3a82-11d0-b79b-00aa003767a7",KSDATAFORMAT_TYPE_AUXLine21Data); +#define KSDATAFORMAT_TYPE_AUXLine21Data DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUXLine21Data) + +#define STATIC_KSDATAFORMAT_SUBTYPE_Line21_BytePair \ + 0x6e8d4a22L,0x310c,0x11d0,0xb7,0x9a,0x00,0xaa,0x00,0x37,0x67,0xa7 +DEFINE_GUIDSTRUCT("6e8d4a22-310c-11d0-b79a-00aa003767a7",KSDATAFORMAT_SUBTYPE_Line21_BytePair); +#define KSDATAFORMAT_SUBTYPE_Line21_BytePair DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_BytePair) + +#define STATIC_KSDATAFORMAT_SUBTYPE_Line21_GOPPacket \ + 0x6e8d4a23L,0x310c,0x11d0,0xb7,0x9a,0x00,0xaa,0x00,0x37,0x67,0xa7 +DEFINE_GUIDSTRUCT("6e8d4a23-310c-11d0-b79a-00aa003767a7",KSDATAFORMAT_SUBTYPE_Line21_GOPPacket); +#define KSDATAFORMAT_SUBTYPE_Line21_GOPPacket DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_GOPPacket) + +typedef struct _KSGOP_USERDATA { + ULONG sc; + ULONG reserved1; + BYTE cFields; + CHAR l21Data[3]; +} KSGOP_USERDATA,*PKSGOP_USERDATA; + +#define STATIC_KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK \ + 0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x4f,0xc3,0x1d,0x60 +DEFINE_GUIDSTRUCT("ed0b916a-044d-11d1-aa78-00c04fc31d60",KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK); +#define KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK) + +#define KS_AM_UseNewCSSKey 0x1 + +#define STATIC_KSPROPSETID_TSRateChange \ + 0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0 +DEFINE_GUIDSTRUCT("A503C5C0-1D1D-11D1-AD80-444553540000",KSPROPSETID_TSRateChange); +#define KSPROPSETID_TSRateChange DEFINE_GUIDNAMED(KSPROPSETID_TSRateChange) + +typedef enum { + KS_AM_RATE_SimpleRateChange = 1, + KS_AM_RATE_ExactRateChange = 2, + KS_AM_RATE_MaxFullDataRate = 3, + KS_AM_RATE_Step = 4 +} KS_AM_PROPERTY_TS_RATE_CHANGE; + +typedef struct { + REFERENCE_TIME StartTime; + LONG Rate; +} KS_AM_SimpleRateChange,*PKS_AM_SimpleRateChange; + +typedef struct { + REFERENCE_TIME OutputZeroTime; + LONG Rate; +} KS_AM_ExactRateChange,*PKS_AM_ExactRateChange; + +typedef LONG KS_AM_MaxFullDataRate; +typedef DWORD KS_AM_Step; + +#define STATIC_KSCATEGORY_ENCODER \ + 0x19689bf6,0xc384,0x48fd,0xad,0x51,0x90,0xe5,0x8c,0x79,0xf7,0xb +DEFINE_GUIDSTRUCT("19689BF6-C384-48fd-AD51-90E58C79F70B",KSCATEGORY_ENCODER); +#define KSCATEGORY_ENCODER DEFINE_GUIDNAMED(KSCATEGORY_ENCODER) + +#define STATIC_KSCATEGORY_MULTIPLEXER \ + 0x7a5de1d3,0x1a1,0x452c,0xb4,0x81,0x4f,0xa2,0xb9,0x62,0x71,0xe8 +DEFINE_GUIDSTRUCT("7A5DE1D3-01A1-452c-B481-4FA2B96271E8",KSCATEGORY_MULTIPLEXER); +#define KSCATEGORY_MULTIPLEXER DEFINE_GUIDNAMED(KSCATEGORY_MULTIPLEXER) + +#ifndef __ENCODER_API_GUIDS__ +#define __ENCODER_API_GUIDS__ + +#define STATIC_ENCAPIPARAM_BITRATE \ + 0x49cc4c43,0xca83,0x4ad4,0xa9,0xaf,0xf3,0x69,0x6a,0xf6,0x66,0xdf +DEFINE_GUIDSTRUCT("49CC4C43-CA83-4ad4-A9AF-F3696AF666DF",ENCAPIPARAM_BITRATE); +#define ENCAPIPARAM_BITRATE DEFINE_GUIDNAMED(ENCAPIPARAM_BITRATE) + +#define STATIC_ENCAPIPARAM_PEAK_BITRATE \ + 0x703f16a9,0x3d48,0x44a1,0xb0,0x77,0x1,0x8d,0xff,0x91,0x5d,0x19 +DEFINE_GUIDSTRUCT("703F16A9-3D48-44a1-B077-018DFF915D19",ENCAPIPARAM_PEAK_BITRATE); +#define ENCAPIPARAM_PEAK_BITRATE DEFINE_GUIDNAMED(ENCAPIPARAM_PEAK_BITRATE) + +#define STATIC_ENCAPIPARAM_BITRATE_MODE \ + 0xee5fb25c,0xc713,0x40d1,0x9d,0x58,0xc0,0xd7,0x24,0x1e,0x25,0xf +DEFINE_GUIDSTRUCT("EE5FB25C-C713-40d1-9D58-C0D7241E250F",ENCAPIPARAM_BITRATE_MODE); +#define ENCAPIPARAM_BITRATE_MODE DEFINE_GUIDNAMED(ENCAPIPARAM_BITRATE_MODE) + +#define STATIC_CODECAPI_CHANGELISTS \ + 0x62b12acf,0xf6b0,0x47d9,0x94,0x56,0x96,0xf2,0x2c,0x4e,0x0b,0x9d +DEFINE_GUIDSTRUCT("62B12ACF-F6B0-47D9-9456-96F22C4E0B9D",CODECAPI_CHANGELISTS); +#define CODECAPI_CHANGELISTS DEFINE_GUIDNAMED(CODECAPI_CHANGELISTS) + +#define STATIC_CODECAPI_VIDEO_ENCODER \ + 0x7112e8e1,0x3d03,0x47ef,0x8e,0x60,0x03,0xf1,0xcf,0x53,0x73,0x01 +DEFINE_GUIDSTRUCT("7112E8E1-3D03-47EF-8E60-03F1CF537301",CODECAPI_VIDEO_ENCODER); +#define CODECAPI_VIDEO_ENCODER DEFINE_GUIDNAMED(CODECAPI_VIDEO_ENCODER) + +#define STATIC_CODECAPI_AUDIO_ENCODER \ + 0xb9d19a3e,0xf897,0x429c,0xbc,0x46,0x81,0x38,0xb7,0x27,0x2b,0x2d +DEFINE_GUIDSTRUCT("B9D19A3E-F897-429C-BC46-8138B7272B2D",CODECAPI_AUDIO_ENCODER); +#define CODECAPI_AUDIO_ENCODER DEFINE_GUIDNAMED(CODECAPI_AUDIO_ENCODER) + +#define STATIC_CODECAPI_SETALLDEFAULTS \ + 0x6c5e6a7c,0xacf8,0x4f55,0xa9,0x99,0x1a,0x62,0x81,0x09,0x05,0x1b +DEFINE_GUIDSTRUCT("6C5E6A7C-ACF8-4F55-A999-1A628109051B",CODECAPI_SETALLDEFAULTS); +#define CODECAPI_SETALLDEFAULTS DEFINE_GUIDNAMED(CODECAPI_SETALLDEFAULTS) + +#define STATIC_CODECAPI_ALLSETTINGS \ + 0x6a577e92,0x83e1,0x4113,0xad,0xc2,0x4f,0xce,0xc3,0x2f,0x83,0xa1 +DEFINE_GUIDSTRUCT("6A577E92-83E1-4113-ADC2-4FCEC32F83A1",CODECAPI_ALLSETTINGS); +#define CODECAPI_ALLSETTINGS DEFINE_GUIDNAMED(CODECAPI_ALLSETTINGS) + +#define STATIC_CODECAPI_SUPPORTSEVENTS \ + 0x0581af97,0x7693,0x4dbd,0x9d,0xca,0x3f,0x9e,0xbd,0x65,0x85,0xa1 +DEFINE_GUIDSTRUCT("0581AF97-7693-4DBD-9DCA-3F9EBD6585A1",CODECAPI_SUPPORTSEVENTS); +#define CODECAPI_SUPPORTSEVENTS DEFINE_GUIDNAMED(CODECAPI_SUPPORTSEVENTS) + +#define STATIC_CODECAPI_CURRENTCHANGELIST \ + 0x1cb14e83,0x7d72,0x4657,0x83,0xfd,0x47,0xa2,0xc5,0xb9,0xd1,0x3d +DEFINE_GUIDSTRUCT("1CB14E83-7D72-4657-83FD-47A2C5B9D13D",CODECAPI_CURRENTCHANGELIST); +#define CODECAPI_CURRENTCHANGELIST DEFINE_GUIDNAMED(CODECAPI_CURRENTCHANGELIST) +#endif /* __ENCODER_API_GUIDS__ */ + +#ifndef __ENCODER_API_DEFINES__ +#define __ENCODER_API_DEFINES__ +typedef enum { + ConstantBitRate = 0, + VariableBitRateAverage, + VariableBitRatePeak +} VIDEOENCODER_BITRATE_MODE; +#endif /* __ENCODER_API_DEFINES__ */ + +#define STATIC_KSPROPSETID_Jack\ + 0x4509f757, 0x2d46, 0x4637, 0x8e, 0x62, 0xce, 0x7d, 0xb9, 0x44, 0xf5, 0x7b +DEFINE_GUIDSTRUCT("4509F757-2D46-4637-8E62-CE7DB944F57B", KSPROPSETID_Jack); +#define KSPROPSETID_Jack DEFINE_GUIDNAMED(KSPROPSETID_Jack) + +typedef enum { + KSPROPERTY_JACK_DESCRIPTION = 1, + KSPROPERTY_JACK_DESCRIPTION2, + KSPROPERTY_JACK_SINK_INFO +} KSPROPERTY_JACK; + +typedef enum +{ + eConnTypeUnknown, + eConnType3Point5mm, + eConnTypeQuarter, + eConnTypeAtapiInternal, + eConnTypeRCA, + eConnTypeOptical, + eConnTypeOtherDigital, + eConnTypeOtherAnalog, + eConnTypeMultichannelAnalogDIN, + eConnTypeXlrProfessional, + eConnTypeRJ11Modem, + eConnTypeCombination +} EPcxConnectionType; + +typedef enum +{ + eGeoLocRear = 0x1, + eGeoLocFront, + eGeoLocLeft, + eGeoLocRight, + eGeoLocTop, + eGeoLocBottom, + eGeoLocRearPanel, + eGeoLocRiser, + eGeoLocInsideMobileLid, + eGeoLocDrivebay, + eGeoLocHDMI, + eGeoLocOutsideMobileLid, + eGeoLocATAPI, + eGeoLocReserved5, + eGeoLocReserved6, + EPcxGeoLocation_enum_count +} EPcxGeoLocation; + +typedef enum +{ + eGenLocPrimaryBox = 0, + eGenLocInternal, + eGenLocSeparate, + eGenLocOther, + EPcxGenLocation_enum_count +} EPcxGenLocation; + +typedef enum +{ + ePortConnJack = 0, + ePortConnIntegratedDevice, + ePortConnBothIntegratedAndJack, + ePortConnUnknown +} EPxcPortConnection; + +typedef struct +{ + DWORD ChannelMapping; + COLORREF Color; + EPcxConnectionType ConnectionType; + EPcxGeoLocation GeoLocation; + EPcxGenLocation GenLocation; + EPxcPortConnection PortConnection; + BOOL IsConnected; +} KSJACK_DESCRIPTION, *PKSJACK_DESCRIPTION; + +typedef enum +{ + KSJACK_SINK_CONNECTIONTYPE_HDMI = 0, + KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT, +} KSJACK_SINK_CONNECTIONTYPE; + +#define MAX_SINK_DESCRIPTION_NAME_LENGTH 32 +typedef struct _tagKSJACK_SINK_INFORMATION +{ + KSJACK_SINK_CONNECTIONTYPE ConnType; + WORD ManufacturerId; + WORD ProductId; + WORD AudioLatency; + BOOL HDCPCapable; + BOOL AICapable; + UCHAR SinkDescriptionLength; + WCHAR SinkDescription[MAX_SINK_DESCRIPTION_NAME_LENGTH]; + LUID PortId; +} KSJACK_SINK_INFORMATION, *PKSJACK_SINK_INFORMATION; + +#define JACKDESC2_PRESENCE_DETECT_CAPABILITY 0x00000001 +#define JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY 0x00000002 + +typedef struct _tagKSJACK_DESCRIPTION2 +{ + DWORD DeviceStateInfo; + DWORD JackCapabilities; +} KSJACK_DESCRIPTION2, *PKSJACK_DESCRIPTION2; + +#endif /* _KSMEDIA_ */ + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h new file mode 100644 index 0000000000..e6e049dabd --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h @@ -0,0 +1,639 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef __KSPROXY__ +#define __KSPROXY__ + +#ifdef __cplusplus +extern "C" { +#endif + +#undef KSDDKAPI +#ifdef _KSDDK_ +#define KSDDKAPI +#else +#define KSDDKAPI DECLSPEC_IMPORT +#endif + +#define STATIC_IID_IKsObject \ + 0x423c13a2L,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1 + +#define STATIC_IID_IKsPinEx \ + 0x7bb38260L,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e + +#define STATIC_IID_IKsPin \ + 0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1 + +#define STATIC_IID_IKsPinPipe \ + 0xe539cd90L,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02 + +#define STATIC_IID_IKsDataTypeHandler \ + 0x5ffbaa02L,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1 + +#define STATIC_IID_IKsDataTypeCompletion \ + 0x827D1A0EL,0x0F73,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 + +#define STATIC_IID_IKsInterfaceHandler \ + 0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96 + +#define STATIC_IID_IKsClockPropertySet \ + 0x5C5CBD84L,0xE755,0x11D0,0xAC,0x18,0x00,0xA0,0xC9,0x22,0x31,0x96 + +#define STATIC_IID_IKsAllocator \ + 0x8da64899L,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a + +#define STATIC_IID_IKsAllocatorEx \ + 0x091bb63aL,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02 + +#ifndef STATIC_IID_IKsPropertySet +#define STATIC_IID_IKsPropertySet \ + 0x31EFAC30L,0x515C,0x11d0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93 +#endif + +#define STATIC_IID_IKsTopology \ + 0x28F54683L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 + +#ifndef STATIC_IID_IKsControl +#define STATIC_IID_IKsControl \ + 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 +#endif + +#define STATIC_IID_IKsAggregateControl \ + 0x7F40EAC0L,0x3947,0x11D2,0x87,0x4E,0x00,0xA0,0xC9,0x22,0x31,0x96 + +#define STATIC_CLSID_Proxy \ + 0x17CCA71BL,0xECD7,0x11D0,0xB9,0x08,0x00,0xA0,0xC9,0x22,0x31,0x96 + +#ifdef _KS_ + +DEFINE_GUIDEX(IID_IKsObject); + +DEFINE_GUIDEX(IID_IKsPin); + +DEFINE_GUIDEX(IID_IKsPinEx); + +DEFINE_GUIDEX(IID_IKsPinPipe); + +DEFINE_GUIDEX(IID_IKsDataTypeHandler); + +DEFINE_GUIDEX(IID_IKsDataTypeCompletion); + +DEFINE_GUIDEX(IID_IKsInterfaceHandler); + +DEFINE_GUIDEX(IID_IKsClockPropertySet); + +DEFINE_GUIDEX(IID_IKsAllocator); + +DEFINE_GUIDEX(IID_IKsAllocatorEx); + +#define IID_IKsQualityForwarder KSCATEGORY_QUALITY +#define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY + +typedef enum { + KsAllocatorMode_User, + KsAllocatorMode_Kernel +} KSALLOCATORMODE; + +typedef enum { + FramingProp_Uninitialized, + FramingProp_None, + FramingProp_Old, + FramingProp_Ex +} FRAMING_PROP; + +typedef FRAMING_PROP *PFRAMING_PROP; + +typedef enum { + Framing_Cache_Update, + Framing_Cache_ReadLast, + Framing_Cache_ReadOrig, + Framing_Cache_Write +} FRAMING_CACHE_OPS; + +typedef struct { + LONGLONG MinTotalNominator; + LONGLONG MaxTotalNominator; + LONGLONG TotalDenominator; +} OPTIMAL_WEIGHT_TOTALS; + +typedef struct IPin IPin; +typedef struct IKsPin IKsPin; +typedef struct IKsAllocator IKsAllocator; +typedef struct IKsAllocatorEx IKsAllocatorEx; + +#define AllocatorStrategy_DontCare 0 +#define AllocatorStrategy_MinimizeNumberOfFrames 0x00000001 +#define AllocatorStrategy_MinimizeFrameSize 0x00000002 +#define AllocatorStrategy_MinimizeNumberOfAllocators 0x00000004 +#define AllocatorStrategy_MaximizeSpeed 0x00000008 + +#define PipeFactor_None 0 +#define PipeFactor_UserModeUpstream 0x00000001 +#define PipeFactor_UserModeDownstream 0x00000002 +#define PipeFactor_MemoryTypes 0x00000004 +#define PipeFactor_Flags 0x00000008 +#define PipeFactor_PhysicalRanges 0x00000010 +#define PipeFactor_OptimalRanges 0x00000020 +#define PipeFactor_FixedCompression 0x00000040 +#define PipeFactor_UnknownCompression 0x00000080 + +#define PipeFactor_Buffers 0x00000100 +#define PipeFactor_Align 0x00000200 +#define PipeFactor_PhysicalEnd 0x00000400 +#define PipeFactor_LogicalEnd 0x00000800 + +typedef enum { + PipeState_DontCare, + PipeState_RangeNotFixed, + PipeState_RangeFixed, + PipeState_CompressionUnknown, + PipeState_Finalized +} PIPE_STATE; + +typedef struct _PIPE_DIMENSIONS { + KS_COMPRESSION AllocatorPin; + KS_COMPRESSION MaxExpansionPin; + KS_COMPRESSION EndPin; +} PIPE_DIMENSIONS,*PPIPE_DIMENSIONS; + +typedef enum { + Pipe_Allocator_None, + Pipe_Allocator_FirstPin, + Pipe_Allocator_LastPin, + Pipe_Allocator_MiddlePin +} PIPE_ALLOCATOR_PLACE; + +typedef PIPE_ALLOCATOR_PLACE *PPIPE_ALLOCATOR_PLACE; + +typedef enum { + KS_MemoryTypeDontCare = 0, + KS_MemoryTypeKernelPaged, + KS_MemoryTypeKernelNonPaged, + KS_MemoryTypeDeviceHostMapped, + KS_MemoryTypeDeviceSpecific, + KS_MemoryTypeUser, + KS_MemoryTypeAnyHost +} KS_LogicalMemoryType; + +typedef KS_LogicalMemoryType *PKS_LogicalMemoryType; + +typedef struct _PIPE_TERMINATION { + ULONG Flags; + ULONG OutsideFactors; + ULONG Weigth; + KS_FRAMING_RANGE PhysicalRange; + KS_FRAMING_RANGE_WEIGHTED OptimalRange; + KS_COMPRESSION Compression; +} PIPE_TERMINATION; + +typedef struct _ALLOCATOR_PROPERTIES_EX +{ + long cBuffers; + long cbBuffer; + long cbAlign; + long cbPrefix; + + GUID MemoryType; + GUID BusType; + PIPE_STATE State; + PIPE_TERMINATION Input; + PIPE_TERMINATION Output; + ULONG Strategy; + ULONG Flags; + ULONG Weight; + KS_LogicalMemoryType LogicalMemoryType; + PIPE_ALLOCATOR_PLACE AllocatorPlace; + PIPE_DIMENSIONS Dimensions; + KS_FRAMING_RANGE PhysicalRange; + IKsAllocatorEx *PrevSegment; + ULONG CountNextSegments; + IKsAllocatorEx **NextSegments; + ULONG InsideFactors; + ULONG NumberPins; +} ALLOCATOR_PROPERTIES_EX; + +typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX; + +#ifdef __STREAMS__ + +struct IKsClockPropertySet; +#undef INTERFACE +#define INTERFACE IKsClockPropertySet +DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown) +{ + STDMETHOD(KsGetTime) (THIS_ + LONGLONG *Time + ) PURE; + STDMETHOD(KsSetTime) (THIS_ + LONGLONG Time + ) PURE; + STDMETHOD(KsGetPhysicalTime) (THIS_ + LONGLONG *Time + ) PURE; + STDMETHOD(KsSetPhysicalTime) (THIS_ + LONGLONG Time + ) PURE; + STDMETHOD(KsGetCorrelatedTime) (THIS_ + KSCORRELATED_TIME *CorrelatedTime + ) PURE; + STDMETHOD(KsSetCorrelatedTime) (THIS_ + KSCORRELATED_TIME *CorrelatedTime + ) PURE; + STDMETHOD(KsGetCorrelatedPhysicalTime)(THIS_ + KSCORRELATED_TIME *CorrelatedTime + ) PURE; + STDMETHOD(KsSetCorrelatedPhysicalTime)(THIS_ + KSCORRELATED_TIME *CorrelatedTime + ) PURE; + STDMETHOD(KsGetResolution) (THIS_ + KSRESOLUTION *Resolution + ) PURE; + STDMETHOD(KsGetState) (THIS_ + KSSTATE *State + ) PURE; +}; + +struct IKsAllocator; +#undef INTERFACE +#define INTERFACE IKsAllocator +DECLARE_INTERFACE_(IKsAllocator,IUnknown) +{ + STDMETHOD_(HANDLE,KsGetAllocatorHandle)(THIS) PURE; + STDMETHOD_(KSALLOCATORMODE,KsGetAllocatorMode)(THIS) PURE; + STDMETHOD(KsGetAllocatorStatus) (THIS_ + PKSSTREAMALLOCATOR_STATUS AllocatorStatus + ) PURE; + STDMETHOD_(VOID,KsSetAllocatorMode) (THIS_ + KSALLOCATORMODE Mode + ) PURE; +}; + +struct IKsAllocatorEx; +#undef INTERFACE +#define INTERFACE IKsAllocatorEx +DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator) +{ + STDMETHOD_(PALLOCATOR_PROPERTIES_EX,KsGetProperties)(THIS) PURE; + STDMETHOD_(VOID,KsSetProperties) (THIS_ + PALLOCATOR_PROPERTIES_EX + ) PURE; + STDMETHOD_(VOID,KsSetAllocatorHandle) (THIS_ + HANDLE AllocatorHandle + ) PURE; + STDMETHOD_(HANDLE,KsCreateAllocatorAndGetHandle)(THIS_ + IKsPin *KsPin + ) PURE; +}; + +typedef enum { + KsPeekOperation_PeekOnly, + KsPeekOperation_AddRef +} KSPEEKOPERATION; + +typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT; +struct IKsPin; + +#undef INTERFACE +#define INTERFACE IKsPin +DECLARE_INTERFACE_(IKsPin,IUnknown) +{ + STDMETHOD(KsQueryMediums) (THIS_ + PKSMULTIPLE_ITEM *MediumList + ) PURE; + STDMETHOD(KsQueryInterfaces) (THIS_ + PKSMULTIPLE_ITEM *InterfaceList + ) PURE; + STDMETHOD(KsCreateSinkPinHandle) (THIS_ + KSPIN_INTERFACE& Interface, + KSPIN_MEDIUM& Medium + ) PURE; + STDMETHOD(KsGetCurrentCommunication) (THIS_ + KSPIN_COMMUNICATION *Communication, + KSPIN_INTERFACE *Interface, + KSPIN_MEDIUM *Medium + ) PURE; + STDMETHOD(KsPropagateAcquire) (THIS) PURE; + STDMETHOD(KsDeliver) (THIS_ + IMediaSample *Sample, + ULONG Flags + ) PURE; + STDMETHOD(KsMediaSamplesCompleted) (THIS_ + PKSSTREAM_SEGMENT StreamSegment + ) PURE; + STDMETHOD_(IMemAllocator *,KsPeekAllocator)(THIS_ + KSPEEKOPERATION Operation + ) PURE; + STDMETHOD(KsReceiveAllocator) (THIS_ + IMemAllocator *MemAllocator + ) PURE; + STDMETHOD(KsRenegotiateAllocator) (THIS) PURE; + STDMETHOD_(LONG,KsIncrementPendingIoCount)(THIS) PURE; + STDMETHOD_(LONG,KsDecrementPendingIoCount)(THIS) PURE; + STDMETHOD(KsQualityNotify) (THIS_ + ULONG Proportion, + REFERENCE_TIME TimeDelta + ) PURE; +}; + +struct IKsPinEx; +#undef INTERFACE +#define INTERFACE IKsPinEx +DECLARE_INTERFACE_(IKsPinEx,IKsPin) +{ + STDMETHOD_(VOID,KsNotifyError) (THIS_ + IMediaSample *Sample, + HRESULT hr + ) PURE; +}; + +struct IKsPinPipe; +#undef INTERFACE +#define INTERFACE IKsPinPipe +DECLARE_INTERFACE_(IKsPinPipe,IUnknown) +{ + STDMETHOD(KsGetPinFramingCache) (THIS_ + PKSALLOCATOR_FRAMING_EX *FramingEx, + PFRAMING_PROP FramingProp, + FRAMING_CACHE_OPS Option + ) PURE; + STDMETHOD(KsSetPinFramingCache) (THIS_ + PKSALLOCATOR_FRAMING_EX FramingEx, + PFRAMING_PROP FramingProp, + FRAMING_CACHE_OPS Option + ) PURE; + STDMETHOD_(IPin*,KsGetConnectedPin) (THIS) PURE; + STDMETHOD_(IKsAllocatorEx*,KsGetPipe) (THIS_ + KSPEEKOPERATION Operation + ) PURE; + STDMETHOD(KsSetPipe) (THIS_ + IKsAllocatorEx *KsAllocator + ) PURE; + STDMETHOD_(ULONG,KsGetPipeAllocatorFlag)(THIS) PURE; + STDMETHOD(KsSetPipeAllocatorFlag) (THIS_ + ULONG Flag + ) PURE; + STDMETHOD_(GUID,KsGetPinBusCache) (THIS) PURE; + STDMETHOD(KsSetPinBusCache) (THIS_ + GUID Bus + ) PURE; + STDMETHOD_(PWCHAR,KsGetPinName) (THIS) PURE; + STDMETHOD_(PWCHAR,KsGetFilterName) (THIS) PURE; +}; + +struct IKsPinFactory; +#undef INTERFACE +#define INTERFACE IKsPinFactory +DECLARE_INTERFACE_(IKsPinFactory,IUnknown) +{ + STDMETHOD(KsPinFactory) (THIS_ + ULONG *PinFactory + ) PURE; +}; + +typedef enum { + KsIoOperation_Write, + KsIoOperation_Read +} KSIOOPERATION; + +struct IKsDataTypeHandler; +#undef INTERFACE +#define INTERFACE IKsDataTypeHandler +DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown) +{ + STDMETHOD(KsCompleteIoOperation) (THIS_ + IMediaSample *Sample, + PVOID StreamHeader, + KSIOOPERATION IoOperation, + WINBOOL Cancelled + ) PURE; + STDMETHOD(KsIsMediaTypeInRanges) (THIS_ + PVOID DataRanges + ) PURE; + STDMETHOD(KsPrepareIoOperation) (THIS_ + IMediaSample *Sample, + PVOID StreamHeader, + KSIOOPERATION IoOperation + ) PURE; + STDMETHOD(KsQueryExtendedSize) (THIS_ + ULONG *ExtendedSize + ) PURE; + STDMETHOD(KsSetMediaType) (THIS_ + const AM_MEDIA_TYPE *AmMediaType + ) PURE; +}; + +struct IKsDataTypeCompletion; +#undef INTERFACE +#define INTERFACE IKsDataTypeCompletion +DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown) +{ + STDMETHOD(KsCompleteMediaType) (THIS_ + HANDLE FilterHandle, + ULONG PinFactoryId, + AM_MEDIA_TYPE *AmMediaType + ) PURE; +}; + +struct IKsInterfaceHandler; +#undef INTERFACE +#define INTERFACE IKsInterfaceHandler +DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown) +{ + STDMETHOD(KsSetPin) (THIS_ + IKsPin *KsPin + ) PURE; + STDMETHOD(KsProcessMediaSamples) (THIS_ + IKsDataTypeHandler *KsDataTypeHandler, + IMediaSample **SampleList, + PLONG SampleCount, + KSIOOPERATION IoOperation, + PKSSTREAM_SEGMENT *StreamSegment + ) PURE; + STDMETHOD(KsCompleteIo) (THIS_ + PKSSTREAM_SEGMENT StreamSegment + ) PURE; +}; + +typedef struct _KSSTREAM_SEGMENT { + IKsInterfaceHandler *KsInterfaceHandler; + IKsDataTypeHandler *KsDataTypeHandler; + KSIOOPERATION IoOperation; + HANDLE CompletionEvent; +} KSSTREAM_SEGMENT; + +struct IKsObject; +#undef INTERFACE +#define INTERFACE IKsObject +DECLARE_INTERFACE_(IKsObject,IUnknown) +{ + STDMETHOD_(HANDLE,KsGetObjectHandle) (THIS) PURE; +}; + +struct IKsQualityForwarder; +#undef INTERFACE +#define INTERFACE IKsQualityForwarder +DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject) +{ + STDMETHOD_(VOID,KsFlushClient) (THIS_ + IKsPin *Pin + ) PURE; +}; + +struct IKsNotifyEvent; +#undef INTERFACE +#define INTERFACE IKsNotifyEvent +DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown) +{ + STDMETHOD(KsNotifyEvent) (THIS_ + ULONG Event, + ULONG_PTR lParam1, + ULONG_PTR lParam2 + ) PURE; +}; + +KSDDKAPI HRESULT WINAPI KsResolveRequiredAttributes(PKSDATARANGE DataRange,PKSMULTIPLE_ITEM Attributes); +KSDDKAPI HRESULT WINAPI KsOpenDefaultDevice(REFGUID Category,ACCESS_MASK Access,PHANDLE DeviceHandle); +KSDDKAPI HRESULT WINAPI KsSynchronousDeviceControl(HANDLE Handle,ULONG IoControl,PVOID InBuffer,ULONG InLength,PVOID OutBuffer,ULONG OutLength,PULONG BytesReturned); +KSDDKAPI HRESULT WINAPI KsGetMultiplePinFactoryItems(HANDLE FilterHandle,ULONG PinFactoryId,ULONG PropertyId,PVOID *Items); +KSDDKAPI HRESULT WINAPI KsGetMediaTypeCount(HANDLE FilterHandle,ULONG PinFactoryId,ULONG *MediaTypeCount); +KSDDKAPI HRESULT WINAPI KsGetMediaType(int Position,AM_MEDIA_TYPE *AmMediaType,HANDLE FilterHandle,ULONG PinFactoryId); +#endif /* __STREAMS__ */ + +#ifndef _IKsPropertySet_ +DEFINE_GUIDEX(IID_IKsPropertySet); +#endif + +#ifndef _IKsControl_ +DEFINE_GUIDEX(IID_IKsControl); +#endif + +DEFINE_GUIDEX(IID_IKsAggregateControl); +#ifndef _IKsTopology_ +DEFINE_GUIDEX(IID_IKsTopology); +#endif +DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196",CLSID_Proxy); +#define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy) + +#else /* _KS_ */ + +#ifndef _IKsPropertySet_ +DEFINE_GUID(IID_IKsPropertySet,STATIC_IID_IKsPropertySet); +#endif + +DEFINE_GUID(CLSID_Proxy,STATIC_CLSID_Proxy); + +#endif /* _KS_ */ + +#ifndef _IKsPropertySet_ +#define _IKsPropertySet_ +#define KSPROPERTY_SUPPORT_GET 1 +#define KSPROPERTY_SUPPORT_SET 2 + +#ifdef DECLARE_INTERFACE_ +struct IKsPropertySet; +#undef INTERFACE +#define INTERFACE IKsPropertySet +DECLARE_INTERFACE_(IKsPropertySet,IUnknown) +{ + STDMETHOD(Set) (THIS_ + REFGUID PropSet, + ULONG Id, + LPVOID InstanceData, + ULONG InstanceLength, + LPVOID PropertyData, + ULONG DataLength + ) PURE; + STDMETHOD(Get) (THIS_ + REFGUID PropSet, + ULONG Id, + LPVOID InstanceData, + ULONG InstanceLength, + LPVOID PropertyData, + ULONG DataLength, + ULONG *BytesReturned + ) PURE; + STDMETHOD(QuerySupported) (THIS_ + REFGUID PropSet, + ULONG Id, + ULONG *TypeSupport + ) PURE; +}; +#endif /* DECLARE_INTERFACE_ */ +#endif /* _IKsPropertySet_ */ + +#ifndef _IKsControl_ +#define _IKsControl_ +#ifdef DECLARE_INTERFACE_ +struct IKsControl; +#undef INTERFACE +#define INTERFACE IKsControl +DECLARE_INTERFACE_(IKsControl,IUnknown) +{ + STDMETHOD(KsProperty) (THIS_ + PKSPROPERTY Property, + ULONG PropertyLength, + LPVOID PropertyData, + ULONG DataLength, + ULONG *BytesReturned + ) PURE; + STDMETHOD(KsMethod) (THIS_ + PKSMETHOD Method, + ULONG MethodLength, + LPVOID MethodData, + ULONG DataLength, + ULONG *BytesReturned + ) PURE; + STDMETHOD(KsEvent) (THIS_ + PKSEVENT Event, + ULONG EventLength, + LPVOID EventData, + ULONG DataLength, + ULONG *BytesReturned + ) PURE; +}; +#endif /* DECLARE_INTERFACE_ */ +#endif /* _IKsControl_ */ + +#ifdef DECLARE_INTERFACE_ +struct IKsAggregateControl; +#undef INTERFACE +#define INTERFACE IKsAggregateControl +DECLARE_INTERFACE_(IKsAggregateControl,IUnknown) +{ + STDMETHOD(KsAddAggregate) (THIS_ + REFGUID AggregateClass + ) PURE; + STDMETHOD(KsRemoveAggregate) (THIS_ + REFGUID AggregateClass + ) PURE; +}; +#endif /* DECLARE_INTERFACE_ */ + +#ifndef _IKsTopology_ +#define _IKsTopology_ +#ifdef DECLARE_INTERFACE_ +struct IKsTopology; +#undef INTERFACE +#define INTERFACE IKsTopology +DECLARE_INTERFACE_(IKsTopology,IUnknown) +{ + STDMETHOD(CreateNodeInstance) (THIS_ + ULONG NodeId, + ULONG Flags, + ACCESS_MASK DesiredAccess, + IUnknown *UnkOuter, + REFGUID InterfaceId, + LPVOID *Interface + ) PURE; +}; +#endif /* DECLARE_INTERFACE_ */ +#endif /* _IKsTopology_ */ + +#ifdef __cplusplus +} +#endif + +#endif /* __KSPROXY__ */ + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h new file mode 100644 index 0000000000..7d0efff65c --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h @@ -0,0 +1,159 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PACK, + 0x36523B13,0x8EE5,0x11d1,0x8C,0xA3,0x00,0x60,0xB0,0x57,0x66,0x4A) + +OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PES, + 0xe06d8020,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIATYPE_MPEG2_SECTIONS, + 0x455f176c,0x4b06,0x47ce,0x9a,0xef,0x8c,0xae,0xf7,0x3d,0xf7,0xb5) + +OUR_GUID_ENTRY(MEDIASUBTYPE_ATSC_SI, + 0xb3c7397c,0xd303,0x414d,0xb3,0x3c,0x4e,0xd2,0xc9,0xd2,0x97,0x33) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SI, + 0xe9dd31a3,0x221d,0x4adb,0x85,0x32,0x9a,0xf3,0x9,0xc1,0xa4,0x8) + +OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2DATA, + 0xc892e55b,0x252d,0x42b5,0xa3,0x16,0xd9,0x97,0xe7,0xa5,0xd9,0x95) + +OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VIDEO, + 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(FORMAT_MPEG2_VIDEO, + 0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(FORMAT_VIDEOINFO2, + 0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x0,0x0,0xc0,0xcc,0x16,0xba) + +OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PROGRAM, + 0xe06d8022,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT, + 0xe06d8023,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE, + 0x138aa9a4,0x1ee2,0x4c5b,0x98,0x8e,0x19,0xab,0xfd,0xbc,0x8a,0x11) + +OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_AUDIO, + 0xe06d802b,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3, + 0xe06d802c,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_SUBPICTURE, + 0xe06d802d,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_LPCM_AUDIO, + 0xe06d8032,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DTS, + 0xe06d8033,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_SDDS, + 0xe06d8034,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIATYPE_DVD_ENCRYPTED_PACK, + 0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x04f,0xc3,0x1d,0x60) + +OUR_GUID_ENTRY(MEDIATYPE_DVD_NAVIGATION, + 0xe06d802e,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PCI, + 0xe06d802f,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_DSI, + 0xe06d8030,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER, + 0xe06d8031,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(FORMAT_MPEG2Video, + 0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(FORMAT_DolbyAC3, + 0xe06d80e4,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(FORMAT_MPEG2Audio, + 0xe06d80e5,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(FORMAT_DVD_LPCMAudio, + 0xe06d80e6,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) + +OUR_GUID_ENTRY(AM_KSPROPSETID_AC3, + 0xBFABE720,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00) + +OUR_GUID_ENTRY(AM_KSPROPSETID_DvdSubPic, + 0xac390460,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9) + +OUR_GUID_ENTRY(AM_KSPROPSETID_CopyProt, + 0x0E8A0A40,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3) + +OUR_GUID_ENTRY(AM_KSPROPSETID_TSRateChange, + 0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0) + +OUR_GUID_ENTRY(AM_KSPROPSETID_DVD_RateChange, + 0x3577eb09,0x9582,0x477f,0xb2,0x9c,0xb0,0xc4,0x52,0xa4,0xff,0x9a) + +OUR_GUID_ENTRY(AM_KSPROPSETID_DvdKaraoke, + 0xae4720ae,0xaa71,0x42d8,0xb8,0x2a,0xff,0xfd,0xf5,0x8b,0x76,0xfd) + +OUR_GUID_ENTRY(AM_KSPROPSETID_FrameStep, + 0xc830acbd,0xab07,0x492f,0x88,0x52,0x45,0xb6,0x98,0x7c,0x29,0x79) + +OUR_GUID_ENTRY(AM_KSCATEGORY_CAPTURE, + 0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96) + +OUR_GUID_ENTRY(AM_KSCATEGORY_RENDER, + 0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96) + +OUR_GUID_ENTRY(AM_KSCATEGORY_DATACOMPRESSOR, + 0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00) + +OUR_GUID_ENTRY(AM_KSCATEGORY_AUDIO, + 0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96) + +OUR_GUID_ENTRY(AM_KSCATEGORY_VIDEO, + 0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96) + +OUR_GUID_ENTRY(AM_KSCATEGORY_TVTUNER, + 0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4) + +OUR_GUID_ENTRY(AM_KSCATEGORY_CROSSBAR, + 0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4) + +OUR_GUID_ENTRY(AM_KSCATEGORY_TVAUDIO, + 0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4) + +OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC, + 0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f) + +OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC_MI, + 0x9c24a977,0x951,0x451a,0x80,0x6,0xe,0x49,0xbd,0x28,0xcd,0x5f) + +OUR_GUID_ENTRY(AM_KSCATEGORY_SPLITTER, + 0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00) + +OUR_GUID_ENTRY(IID_IKsInterfaceHandler, + 0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96) + +OUR_GUID_ENTRY(IID_IKsDataTypeHandler, + 0x5FFBAA02L,0x49A3,0x11D0,0x9F,0x36,0x00,0xAA,0x00,0xA2,0x16,0xA1) + +OUR_GUID_ENTRY(IID_IKsPin, + 0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1) + +OUR_GUID_ENTRY(IID_IKsControl, + 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96) + +OUR_GUID_ENTRY(IID_IKsPinFactory, + 0xCD5EBE6BL,0x8B6E,0x11D1,0x8A,0xE0,0x00,0xA0,0xC9,0x22,0x31,0x96) + +OUR_GUID_ENTRY(AM_INTERFACESETID_Standard, + 0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00) + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h new file mode 100644 index 0000000000..a75e4758ed --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h @@ -0,0 +1,929 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for mmdeviceapi.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __mmdeviceapi_h__ +#define __mmdeviceapi_h__ + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IMMNotificationClient_FWD_DEFINED__ +#define __IMMNotificationClient_FWD_DEFINED__ +typedef interface IMMNotificationClient IMMNotificationClient; +#endif /* __IMMNotificationClient_FWD_DEFINED__ */ + + +#ifndef __IMMDevice_FWD_DEFINED__ +#define __IMMDevice_FWD_DEFINED__ +typedef interface IMMDevice IMMDevice; +#endif /* __IMMDevice_FWD_DEFINED__ */ + + +#ifndef __IMMDeviceCollection_FWD_DEFINED__ +#define __IMMDeviceCollection_FWD_DEFINED__ +typedef interface IMMDeviceCollection IMMDeviceCollection; +#endif /* __IMMDeviceCollection_FWD_DEFINED__ */ + + +#ifndef __IMMEndpoint_FWD_DEFINED__ +#define __IMMEndpoint_FWD_DEFINED__ +typedef interface IMMEndpoint IMMEndpoint; +#endif /* __IMMEndpoint_FWD_DEFINED__ */ + + +#ifndef __IMMDeviceEnumerator_FWD_DEFINED__ +#define __IMMDeviceEnumerator_FWD_DEFINED__ +typedef interface IMMDeviceEnumerator IMMDeviceEnumerator; +#endif /* __IMMDeviceEnumerator_FWD_DEFINED__ */ + + +#ifndef __IMMDeviceActivator_FWD_DEFINED__ +#define __IMMDeviceActivator_FWD_DEFINED__ +typedef interface IMMDeviceActivator IMMDeviceActivator; +#endif /* __IMMDeviceActivator_FWD_DEFINED__ */ + + +#ifndef __MMDeviceEnumerator_FWD_DEFINED__ +#define __MMDeviceEnumerator_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class MMDeviceEnumerator MMDeviceEnumerator; +#else +typedef struct MMDeviceEnumerator MMDeviceEnumerator; +#endif /* __cplusplus */ + +#endif /* __MMDeviceEnumerator_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "unknwn.h" +#include "propsys.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_mmdeviceapi_0000_0000 */ +/* [local] */ + +#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND) +#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE) +#define DEVICE_STATE_ACTIVE 0x00000001 +#define DEVICE_STATE_DISABLED 0x00000002 +#define DEVICE_STATE_NOTPRESENT 0x00000004 +#define DEVICE_STATE_UNPLUGGED 0x00000008 +#define DEVICE_STATEMASK_ALL 0x0000000f +#ifdef DEFINE_PROPERTYKEY +#undef DEFINE_PROPERTYKEY +#endif +#ifdef INITGUID +#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } +#else +#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name +#endif // INITGUID +DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 0); +DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 1); +DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 2); +DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 3); +DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 4); +DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 5); +#define ENDPOINT_SYSFX_ENABLED 0x00000000 // System Effects are enabled. +#define ENDPOINT_SYSFX_DISABLED 0x00000001 // System Effects are disabled. +DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 6); +DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); +typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS + { + DWORD cbDirectXAudioActivationParams; + GUID guidAudioSession; + DWORD dwAudioStreamFlags; + } DIRECTX_AUDIO_ACTIVATION_PARAMS; + +typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS *PDIRECTX_AUDIO_ACTIVATION_PARAMS; + +typedef /* [public][public][public][public][public] */ +enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0001 + { eRender = 0, + eCapture = ( eRender + 1 ) , + eAll = ( eCapture + 1 ) , + EDataFlow_enum_count = ( eAll + 1 ) + } EDataFlow; + +typedef /* [public][public][public] */ +enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0002 + { eConsole = 0, + eMultimedia = ( eConsole + 1 ) , + eCommunications = ( eMultimedia + 1 ) , + ERole_enum_count = ( eCommunications + 1 ) + } ERole; + +typedef /* [public] */ +enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0003 + { RemoteNetworkDevice = 0, + Speakers = ( RemoteNetworkDevice + 1 ) , + LineLevel = ( Speakers + 1 ) , + Headphones = ( LineLevel + 1 ) , + Microphone = ( Headphones + 1 ) , + Headset = ( Microphone + 1 ) , + Handset = ( Headset + 1 ) , + UnknownDigitalPassthrough = ( Handset + 1 ) , + SPDIF = ( UnknownDigitalPassthrough + 1 ) , + HDMI = ( SPDIF + 1 ) , + UnknownFormFactor = ( HDMI + 1 ) + } EndpointFormFactor; + + + +extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0000_v0_0_s_ifspec; + +#ifndef __IMMNotificationClient_INTERFACE_DEFINED__ +#define __IMMNotificationClient_INTERFACE_DEFINED__ + +/* interface IMMNotificationClient */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IMMNotificationClient; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7991EEC9-7E89-4D85-8390-6C703CEC60C0") + IMMNotificationClient : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceStateChanged( + /* [in] */ + __in LPCWSTR pwstrDeviceId, + /* [in] */ + __in DWORD dwNewState) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceAdded( + /* [in] */ + __in LPCWSTR pwstrDeviceId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceRemoved( + /* [in] */ + __in LPCWSTR pwstrDeviceId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged( + /* [in] */ + __in EDataFlow flow, + /* [in] */ + __in ERole role, + /* [in] */ + __in LPCWSTR pwstrDefaultDeviceId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnPropertyValueChanged( + /* [in] */ + __in LPCWSTR pwstrDeviceId, + /* [in] */ + __in const PROPERTYKEY key) = 0; + + }; + +#else /* C style interface */ + + typedef struct IMMNotificationClientVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IMMNotificationClient * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IMMNotificationClient * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IMMNotificationClient * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceStateChanged )( + IMMNotificationClient * This, + /* [in] */ + __in LPCWSTR pwstrDeviceId, + /* [in] */ + __in DWORD dwNewState); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceAdded )( + IMMNotificationClient * This, + /* [in] */ + __in LPCWSTR pwstrDeviceId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceRemoved )( + IMMNotificationClient * This, + /* [in] */ + __in LPCWSTR pwstrDeviceId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDefaultDeviceChanged )( + IMMNotificationClient * This, + /* [in] */ + __in EDataFlow flow, + /* [in] */ + __in ERole role, + /* [in] */ + __in LPCWSTR pwstrDefaultDeviceId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnPropertyValueChanged )( + IMMNotificationClient * This, + /* [in] */ + __in LPCWSTR pwstrDeviceId, + /* [in] */ + __in const PROPERTYKEY key); + + END_INTERFACE + } IMMNotificationClientVtbl; + + interface IMMNotificationClient + { + CONST_VTBL struct IMMNotificationClientVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IMMNotificationClient_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IMMNotificationClient_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IMMNotificationClient_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IMMNotificationClient_OnDeviceStateChanged(This,pwstrDeviceId,dwNewState) \ + ( (This)->lpVtbl -> OnDeviceStateChanged(This,pwstrDeviceId,dwNewState) ) + +#define IMMNotificationClient_OnDeviceAdded(This,pwstrDeviceId) \ + ( (This)->lpVtbl -> OnDeviceAdded(This,pwstrDeviceId) ) + +#define IMMNotificationClient_OnDeviceRemoved(This,pwstrDeviceId) \ + ( (This)->lpVtbl -> OnDeviceRemoved(This,pwstrDeviceId) ) + +#define IMMNotificationClient_OnDefaultDeviceChanged(This,flow,role,pwstrDefaultDeviceId) \ + ( (This)->lpVtbl -> OnDefaultDeviceChanged(This,flow,role,pwstrDefaultDeviceId) ) + +#define IMMNotificationClient_OnPropertyValueChanged(This,pwstrDeviceId,key) \ + ( (This)->lpVtbl -> OnPropertyValueChanged(This,pwstrDeviceId,key) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IMMNotificationClient_INTERFACE_DEFINED__ */ + + +#ifndef __IMMDevice_INTERFACE_DEFINED__ +#define __IMMDevice_INTERFACE_DEFINED__ + +/* interface IMMDevice */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IMMDevice; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("D666063F-1587-4E43-81F1-B948E807363F") + IMMDevice : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( + /* [in] */ + __in REFIID iid, + /* [in] */ + __in DWORD dwClsCtx, + /* [unique][in] */ + __in_opt PROPVARIANT *pActivationParams, + /* [iid_is][out] */ + __out void **ppInterface) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OpenPropertyStore( + /* [in] */ + __in DWORD stgmAccess, + /* [out] */ + __out IPropertyStore **ppProperties) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetId( + /* [out] */ + __deref_out LPWSTR *ppstrId) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetState( + /* [out] */ + __out DWORD *pdwState) = 0; + + }; + +#else /* C style interface */ + + typedef struct IMMDeviceVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IMMDevice * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IMMDevice * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IMMDevice * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( + IMMDevice * This, + /* [in] */ + __in REFIID iid, + /* [in] */ + __in DWORD dwClsCtx, + /* [unique][in] */ + __in_opt PROPVARIANT *pActivationParams, + /* [iid_is][out] */ + __out void **ppInterface); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OpenPropertyStore )( + IMMDevice * This, + /* [in] */ + __in DWORD stgmAccess, + /* [out] */ + __out IPropertyStore **ppProperties); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetId )( + IMMDevice * This, + /* [out] */ + __deref_out LPWSTR *ppstrId); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetState )( + IMMDevice * This, + /* [out] */ + __out DWORD *pdwState); + + END_INTERFACE + } IMMDeviceVtbl; + + interface IMMDevice + { + CONST_VTBL struct IMMDeviceVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IMMDevice_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IMMDevice_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IMMDevice_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IMMDevice_Activate(This,iid,dwClsCtx,pActivationParams,ppInterface) \ + ( (This)->lpVtbl -> Activate(This,iid,dwClsCtx,pActivationParams,ppInterface) ) + +#define IMMDevice_OpenPropertyStore(This,stgmAccess,ppProperties) \ + ( (This)->lpVtbl -> OpenPropertyStore(This,stgmAccess,ppProperties) ) + +#define IMMDevice_GetId(This,ppstrId) \ + ( (This)->lpVtbl -> GetId(This,ppstrId) ) + +#define IMMDevice_GetState(This,pdwState) \ + ( (This)->lpVtbl -> GetState(This,pdwState) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IMMDevice_INTERFACE_DEFINED__ */ + + +#ifndef __IMMDeviceCollection_INTERFACE_DEFINED__ +#define __IMMDeviceCollection_INTERFACE_DEFINED__ + +/* interface IMMDeviceCollection */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IMMDeviceCollection; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0BD7A1BE-7A1A-44DB-8397-CC5392387B5E") + IMMDeviceCollection : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCount( + /* [out] */ + __out UINT *pcDevices) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Item( + /* [in] */ + __in UINT nDevice, + /* [out] */ + __out IMMDevice **ppDevice) = 0; + + }; + +#else /* C style interface */ + + typedef struct IMMDeviceCollectionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IMMDeviceCollection * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IMMDeviceCollection * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IMMDeviceCollection * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetCount )( + IMMDeviceCollection * This, + /* [out] */ + __out UINT *pcDevices); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Item )( + IMMDeviceCollection * This, + /* [in] */ + __in UINT nDevice, + /* [out] */ + __out IMMDevice **ppDevice); + + END_INTERFACE + } IMMDeviceCollectionVtbl; + + interface IMMDeviceCollection + { + CONST_VTBL struct IMMDeviceCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IMMDeviceCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IMMDeviceCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IMMDeviceCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IMMDeviceCollection_GetCount(This,pcDevices) \ + ( (This)->lpVtbl -> GetCount(This,pcDevices) ) + +#define IMMDeviceCollection_Item(This,nDevice,ppDevice) \ + ( (This)->lpVtbl -> Item(This,nDevice,ppDevice) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IMMDeviceCollection_INTERFACE_DEFINED__ */ + + +#ifndef __IMMEndpoint_INTERFACE_DEFINED__ +#define __IMMEndpoint_INTERFACE_DEFINED__ + +/* interface IMMEndpoint */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IMMEndpoint; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1BE09788-6894-4089-8586-9A2A6C265AC5") + IMMEndpoint : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDataFlow( + /* [out] */ + __out EDataFlow *pDataFlow) = 0; + + }; + +#else /* C style interface */ + + typedef struct IMMEndpointVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IMMEndpoint * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IMMEndpoint * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IMMEndpoint * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDataFlow )( + IMMEndpoint * This, + /* [out] */ + __out EDataFlow *pDataFlow); + + END_INTERFACE + } IMMEndpointVtbl; + + interface IMMEndpoint + { + CONST_VTBL struct IMMEndpointVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IMMEndpoint_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IMMEndpoint_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IMMEndpoint_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IMMEndpoint_GetDataFlow(This,pDataFlow) \ + ( (This)->lpVtbl -> GetDataFlow(This,pDataFlow) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IMMEndpoint_INTERFACE_DEFINED__ */ + + +#ifndef __IMMDeviceEnumerator_INTERFACE_DEFINED__ +#define __IMMDeviceEnumerator_INTERFACE_DEFINED__ + +/* interface IMMDeviceEnumerator */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IMMDeviceEnumerator; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A95664D2-9614-4F35-A746-DE8DB63617E6") + IMMDeviceEnumerator : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumAudioEndpoints( + /* [in] */ + __in EDataFlow dataFlow, + /* [in] */ + __in DWORD dwStateMask, + /* [out] */ + __out IMMDeviceCollection **ppDevices) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDefaultAudioEndpoint( + /* [in] */ + __in EDataFlow dataFlow, + /* [in] */ + __in ERole role, + /* [out] */ + __out IMMDevice **ppEndpoint) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDevice( + /* */ + __in LPCWSTR pwstrId, + /* [out] */ + __out IMMDevice **ppDevice) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterEndpointNotificationCallback( + /* [in] */ + __in IMMNotificationClient *pClient) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterEndpointNotificationCallback( + /* [in] */ + __in IMMNotificationClient *pClient) = 0; + + }; + +#else /* C style interface */ + + typedef struct IMMDeviceEnumeratorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IMMDeviceEnumerator * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IMMDeviceEnumerator * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IMMDeviceEnumerator * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumAudioEndpoints )( + IMMDeviceEnumerator * This, + /* [in] */ + __in EDataFlow dataFlow, + /* [in] */ + __in DWORD dwStateMask, + /* [out] */ + __out IMMDeviceCollection **ppDevices); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDefaultAudioEndpoint )( + IMMDeviceEnumerator * This, + /* [in] */ + __in EDataFlow dataFlow, + /* [in] */ + __in ERole role, + /* [out] */ + __out IMMDevice **ppEndpoint); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDevice )( + IMMDeviceEnumerator * This, + /* */ + __in LPCWSTR pwstrId, + /* [out] */ + __out IMMDevice **ppDevice); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterEndpointNotificationCallback )( + IMMDeviceEnumerator * This, + /* [in] */ + __in IMMNotificationClient *pClient); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterEndpointNotificationCallback )( + IMMDeviceEnumerator * This, + /* [in] */ + __in IMMNotificationClient *pClient); + + END_INTERFACE + } IMMDeviceEnumeratorVtbl; + + interface IMMDeviceEnumerator + { + CONST_VTBL struct IMMDeviceEnumeratorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IMMDeviceEnumerator_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IMMDeviceEnumerator_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IMMDeviceEnumerator_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IMMDeviceEnumerator_EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices) \ + ( (This)->lpVtbl -> EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices) ) + +#define IMMDeviceEnumerator_GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint) \ + ( (This)->lpVtbl -> GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint) ) + +#define IMMDeviceEnumerator_GetDevice(This,pwstrId,ppDevice) \ + ( (This)->lpVtbl -> GetDevice(This,pwstrId,ppDevice) ) + +#define IMMDeviceEnumerator_RegisterEndpointNotificationCallback(This,pClient) \ + ( (This)->lpVtbl -> RegisterEndpointNotificationCallback(This,pClient) ) + +#define IMMDeviceEnumerator_UnregisterEndpointNotificationCallback(This,pClient) \ + ( (This)->lpVtbl -> UnregisterEndpointNotificationCallback(This,pClient) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IMMDeviceEnumerator_INTERFACE_DEFINED__ */ + + +#ifndef __IMMDeviceActivator_INTERFACE_DEFINED__ +#define __IMMDeviceActivator_INTERFACE_DEFINED__ + +/* interface IMMDeviceActivator */ +/* [unique][helpstring][nonextensible][uuid][local][object] */ + + +EXTERN_C const IID IID_IMMDeviceActivator; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3B0D0EA4-D0A9-4B0E-935B-09516746FAC0") + IMMDeviceActivator : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( + /* [in] */ + __in REFIID iid, + /* [in] */ + __in IMMDevice *pDevice, + /* [in] */ + __in_opt PROPVARIANT *pActivationParams, + /* [iid_is][out] */ + __out void **ppInterface) = 0; + + }; + +#else /* C style interface */ + + typedef struct IMMDeviceActivatorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IMMDeviceActivator * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IMMDeviceActivator * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IMMDeviceActivator * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( + IMMDeviceActivator * This, + /* [in] */ + __in REFIID iid, + /* [in] */ + __in IMMDevice *pDevice, + /* [in] */ + __in_opt PROPVARIANT *pActivationParams, + /* [iid_is][out] */ + __out void **ppInterface); + + END_INTERFACE + } IMMDeviceActivatorVtbl; + + interface IMMDeviceActivator + { + CONST_VTBL struct IMMDeviceActivatorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IMMDeviceActivator_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IMMDeviceActivator_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IMMDeviceActivator_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IMMDeviceActivator_Activate(This,iid,pDevice,pActivationParams,ppInterface) \ + ( (This)->lpVtbl -> Activate(This,iid,pDevice,pActivationParams,ppInterface) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IMMDeviceActivator_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_mmdeviceapi_0000_0006 */ +/* [local] */ + +typedef /* [public] */ struct __MIDL___MIDL_itf_mmdeviceapi_0000_0006_0001 + { + LPARAM AddPageParam; + IMMDevice *pEndpoint; + IMMDevice *pPnpInterface; + IMMDevice *pPnpDevnode; + } AudioExtensionParams; + + + +extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0006_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0006_v0_0_s_ifspec; + + +#ifndef __MMDeviceAPILib_LIBRARY_DEFINED__ +#define __MMDeviceAPILib_LIBRARY_DEFINED__ + +/* library MMDeviceAPILib */ +/* [helpstring][version][uuid] */ + + +EXTERN_C const IID LIBID_MMDeviceAPILib; + +EXTERN_C const CLSID CLSID_MMDeviceEnumerator; + +#ifdef __cplusplus + +class DECLSPEC_UUID("BCDE0395-E52F-467C-8E3D-C4579291692E") +MMDeviceEnumerator; +#endif +#endif /* __MMDeviceAPILib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/propidl.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propidl.h new file mode 100644 index 0000000000..96298650b1 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propidl.h @@ -0,0 +1,1275 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for propidl.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __propidl_h__ +#define __propidl_h__ + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#define interface struct +#include "sal.h" +#include "rpcsal.h" + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IPropertyStorage_FWD_DEFINED__ +#define __IPropertyStorage_FWD_DEFINED__ +typedef interface IPropertyStorage IPropertyStorage; +#endif /* __IPropertyStorage_FWD_DEFINED__ */ + + +#ifndef __IPropertySetStorage_FWD_DEFINED__ +#define __IPropertySetStorage_FWD_DEFINED__ +typedef interface IPropertySetStorage IPropertySetStorage; +#endif /* __IPropertySetStorage_FWD_DEFINED__ */ + + +#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__ +#define __IEnumSTATPROPSTG_FWD_DEFINED__ +typedef interface IEnumSTATPROPSTG IEnumSTATPROPSTG; +#endif /* __IEnumSTATPROPSTG_FWD_DEFINED__ */ + + +#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__ +#define __IEnumSTATPROPSETSTG_FWD_DEFINED__ +typedef interface IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG; +#endif /* __IEnumSTATPROPSETSTG_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "objidl.h" +#include "oaidl.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_propidl_0000_0000 */ +/* [local] */ + +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//-------------------------------------------------------------------------- +#if ( _MSC_VER >= 800 ) +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4201) /* Nameless struct/union */ +#pragma warning(disable:4237) /* obsolete member named 'bool' */ +#endif +#if ( _MSC_VER >= 1020 ) +#pragma once +#endif + + + +typedef struct tagVersionedStream + { + GUID guidVersion; + IStream *pStream; + } VERSIONEDSTREAM; + +typedef struct tagVersionedStream *LPVERSIONEDSTREAM; + + +// Flags for IPropertySetStorage::Create +#define PROPSETFLAG_DEFAULT ( 0 ) + +#define PROPSETFLAG_NONSIMPLE ( 1 ) + +#define PROPSETFLAG_ANSI ( 2 ) + +// (This flag is only supported on StgCreatePropStg & StgOpenPropStg +#define PROPSETFLAG_UNBUFFERED ( 4 ) + +// (This flag causes a version-1 property set to be created +#define PROPSETFLAG_CASE_SENSITIVE ( 8 ) + + +// Flags for the reservied PID_BEHAVIOR property +#define PROPSET_BEHAVIOR_CASE_SENSITIVE ( 1 ) + +#ifdef MIDL_PASS +// This is the PROPVARIANT definition for marshaling. +typedef struct tag_inner_PROPVARIANT PROPVARIANT; + +#else +// This is the standard C layout of the PROPVARIANT. +typedef struct tagPROPVARIANT PROPVARIANT; +#endif +typedef struct tagCAC + { + ULONG cElems; + CHAR *pElems; + } CAC; +#ifdef WIN64 +typedef struct tagCAUB + { + ULONG cElems; + UCHAR *pElems; + } CAUB; + +typedef struct tagCAI + { + ULONG cElems; + SHORT *pElems; + } CAI; + +typedef struct tagCAUI + { + ULONG cElems; + USHORT *pElems; + } CAUI; + +typedef struct tagCAL + { + ULONG cElems; + LONG *pElems; + } CAL; + +typedef struct tagCAUL + { + ULONG cElems; + ULONG *pElems; + } CAUL; + +typedef struct tagCAFLT + { + ULONG cElems; + FLOAT *pElems; + } CAFLT; + +typedef struct tagCADBL + { + ULONG cElems; + DOUBLE *pElems; + } CADBL; + +typedef struct tagCACY + { + ULONG cElems; + CY *pElems; + } CACY; + +typedef struct tagCADATE + { + ULONG cElems; + DATE *pElems; + } CADATE; + +typedef struct tagCABSTR + { + ULONG cElems; + BSTR *pElems; + } CABSTR; + +typedef struct tagCABSTRBLOB + { + ULONG cElems; + BSTRBLOB *pElems; + } CABSTRBLOB; + +typedef struct tagCABOOL + { + ULONG cElems; + VARIANT_BOOL *pElems; + } CABOOL; + +typedef struct tagCASCODE + { + ULONG cElems; + SCODE *pElems; + } CASCODE; + +typedef struct tagCAPROPVARIANT + { + ULONG cElems; + PROPVARIANT *pElems; + } CAPROPVARIANT; + +typedef struct tagCAH + { + ULONG cElems; + LARGE_INTEGER *pElems; + } CAH; + +typedef struct tagCAUH + { + ULONG cElems; + ULARGE_INTEGER *pElems; + } CAUH; + +typedef struct tagCALPSTR + { + ULONG cElems; + LPSTR *pElems; + } CALPSTR; + +typedef struct tagCALPWSTR + { + ULONG cElems; + LPWSTR *pElems; + } CALPWSTR; + +typedef struct tagCAFILETIME + { + ULONG cElems; + FILETIME *pElems; + } CAFILETIME; + +typedef struct tagCACLIPDATA + { + ULONG cElems; + CLIPDATA *pElems; + } CACLIPDATA; + +typedef struct tagCACLSID + { + ULONG cElems; + CLSID *pElems; + } CACLSID; +#endif +#ifdef MIDL_PASS +// This is the PROPVARIANT padding layout for marshaling. +typedef BYTE PROPVAR_PAD1; + +typedef BYTE PROPVAR_PAD2; + +typedef ULONG PROPVAR_PAD3; + +#else +// This is the standard C layout of the structure. +typedef WORD PROPVAR_PAD1; +typedef WORD PROPVAR_PAD2; +typedef WORD PROPVAR_PAD3; +#define tag_inner_PROPVARIANT +#endif +#ifdef WIN64 +#ifndef MIDL_PASS +struct tagPROPVARIANT { + union { +#endif +struct tag_inner_PROPVARIANT + { + VARTYPE vt; + PROPVAR_PAD1 wReserved1; + PROPVAR_PAD2 wReserved2; + PROPVAR_PAD3 wReserved3; + /* [switch_type] */ union + { + /* Empty union arm */ + CHAR cVal; + UCHAR bVal; + SHORT iVal; + USHORT uiVal; + LONG lVal; + ULONG ulVal; + INT intVal; + UINT uintVal; + LARGE_INTEGER hVal; + ULARGE_INTEGER uhVal; + FLOAT fltVal; + DOUBLE dblVal; + VARIANT_BOOL boolVal; + //_VARIANT_BOOL bool; + SCODE scode; + CY cyVal; + DATE date; + FILETIME filetime; + CLSID *puuid; + CLIPDATA *pclipdata; + BSTR bstrVal; + BSTRBLOB bstrblobVal; + BLOB blob; + LPSTR pszVal; + LPWSTR pwszVal; + IUnknown *punkVal; + IDispatch *pdispVal; + IStream *pStream; + IStorage *pStorage; + LPVERSIONEDSTREAM pVersionedStream; + LPSAFEARRAY parray; + CAC cac; + CAUB caub; + CAI cai; + CAUI caui; + CAL cal; + CAUL caul; + CAH cah; + CAUH cauh; + CAFLT caflt; + CADBL cadbl; + CABOOL cabool; + CASCODE cascode; + CACY cacy; + CADATE cadate; + CAFILETIME cafiletime; + CACLSID cauuid; + CACLIPDATA caclipdata; + CABSTR cabstr; + CABSTRBLOB cabstrblob; + CALPSTR calpstr; + CALPWSTR calpwstr; + CAPROPVARIANT capropvar; + CHAR *pcVal; + UCHAR *pbVal; + SHORT *piVal; + USHORT *puiVal; + LONG *plVal; + ULONG *pulVal; + INT *pintVal; + UINT *puintVal; + FLOAT *pfltVal; + DOUBLE *pdblVal; + VARIANT_BOOL *pboolVal; + DECIMAL *pdecVal; + SCODE *pscode; + CY *pcyVal; + DATE *pdate; + BSTR *pbstrVal; + IUnknown **ppunkVal; + IDispatch **ppdispVal; + LPSAFEARRAY *pparray; + PROPVARIANT *pvarVal; + } ; + } ; +#ifndef MIDL_PASS + DECIMAL decVal; + }; +}; +#endif +#endif +#ifdef MIDL_PASS +// This is the LPPROPVARIANT definition for marshaling. +typedef struct tag_inner_PROPVARIANT *LPPROPVARIANT; + +typedef const PROPVARIANT *REFPROPVARIANT; + +#else + +// This is the standard C layout of the PROPVARIANT. +#ifdef WIN64 +typedef struct tagPROPVARIANT * LPPROPVARIANT; +#endif + +#ifndef _REFPROPVARIANT_DEFINED +#define _REFPROPVARIANT_DEFINED +#ifdef __cplusplus +#define REFPROPVARIANT const PROPVARIANT & +#else +#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST +#endif +#endif + +#endif // MIDL_PASS + +// Reserved global Property IDs +#define PID_DICTIONARY ( 0 ) + +#define PID_CODEPAGE ( 0x1 ) + +#define PID_FIRST_USABLE ( 0x2 ) + +#define PID_FIRST_NAME_DEFAULT ( 0xfff ) + +#define PID_LOCALE ( 0x80000000 ) + +#define PID_MODIFY_TIME ( 0x80000001 ) + +#define PID_SECURITY ( 0x80000002 ) + +#define PID_BEHAVIOR ( 0x80000003 ) + +#define PID_ILLEGAL ( 0xffffffff ) + +// Range which is read-only to downlevel implementations +#define PID_MIN_READONLY ( 0x80000000 ) + +#define PID_MAX_READONLY ( 0xbfffffff ) + +// Property IDs for the DiscardableInformation Property Set + +#define PIDDI_THUMBNAIL 0x00000002L // VT_BLOB + +// Property IDs for the SummaryInformation Property Set + +#define PIDSI_TITLE 0x00000002L // VT_LPSTR +#define PIDSI_SUBJECT 0x00000003L // VT_LPSTR +#define PIDSI_AUTHOR 0x00000004L // VT_LPSTR +#define PIDSI_KEYWORDS 0x00000005L // VT_LPSTR +#define PIDSI_COMMENTS 0x00000006L // VT_LPSTR +#define PIDSI_TEMPLATE 0x00000007L // VT_LPSTR +#define PIDSI_LASTAUTHOR 0x00000008L // VT_LPSTR +#define PIDSI_REVNUMBER 0x00000009L // VT_LPSTR +#define PIDSI_EDITTIME 0x0000000aL // VT_FILETIME (UTC) +#define PIDSI_LASTPRINTED 0x0000000bL // VT_FILETIME (UTC) +#define PIDSI_CREATE_DTM 0x0000000cL // VT_FILETIME (UTC) +#define PIDSI_LASTSAVE_DTM 0x0000000dL // VT_FILETIME (UTC) +#define PIDSI_PAGECOUNT 0x0000000eL // VT_I4 +#define PIDSI_WORDCOUNT 0x0000000fL // VT_I4 +#define PIDSI_CHARCOUNT 0x00000010L // VT_I4 +#define PIDSI_THUMBNAIL 0x00000011L // VT_CF +#define PIDSI_APPNAME 0x00000012L // VT_LPSTR +#define PIDSI_DOC_SECURITY 0x00000013L // VT_I4 + +// Property IDs for the DocSummaryInformation Property Set + +#define PIDDSI_CATEGORY 0x00000002 // VT_LPSTR +#define PIDDSI_PRESFORMAT 0x00000003 // VT_LPSTR +#define PIDDSI_BYTECOUNT 0x00000004 // VT_I4 +#define PIDDSI_LINECOUNT 0x00000005 // VT_I4 +#define PIDDSI_PARCOUNT 0x00000006 // VT_I4 +#define PIDDSI_SLIDECOUNT 0x00000007 // VT_I4 +#define PIDDSI_NOTECOUNT 0x00000008 // VT_I4 +#define PIDDSI_HIDDENCOUNT 0x00000009 // VT_I4 +#define PIDDSI_MMCLIPCOUNT 0x0000000A // VT_I4 +#define PIDDSI_SCALE 0x0000000B // VT_BOOL +#define PIDDSI_HEADINGPAIR 0x0000000C // VT_VARIANT | VT_VECTOR +#define PIDDSI_DOCPARTS 0x0000000D // VT_LPSTR | VT_VECTOR +#define PIDDSI_MANAGER 0x0000000E // VT_LPSTR +#define PIDDSI_COMPANY 0x0000000F // VT_LPSTR +#define PIDDSI_LINKSDIRTY 0x00000010 // VT_BOOL + + +// FMTID_MediaFileSummaryInfo - Property IDs + +#define PIDMSI_EDITOR 0x00000002L // VT_LPWSTR +#define PIDMSI_SUPPLIER 0x00000003L // VT_LPWSTR +#define PIDMSI_SOURCE 0x00000004L // VT_LPWSTR +#define PIDMSI_SEQUENCE_NO 0x00000005L // VT_LPWSTR +#define PIDMSI_PROJECT 0x00000006L // VT_LPWSTR +#define PIDMSI_STATUS 0x00000007L // VT_UI4 +#define PIDMSI_OWNER 0x00000008L // VT_LPWSTR +#define PIDMSI_RATING 0x00000009L // VT_LPWSTR +#define PIDMSI_PRODUCTION 0x0000000AL // VT_FILETIME (UTC) +#define PIDMSI_COPYRIGHT 0x0000000BL // VT_LPWSTR + +// PIDMSI_STATUS value definitions + +enum PIDMSI_STATUS_VALUE + { PIDMSI_STATUS_NORMAL = 0, + PIDMSI_STATUS_NEW = ( PIDMSI_STATUS_NORMAL + 1 ) , + PIDMSI_STATUS_PRELIM = ( PIDMSI_STATUS_NEW + 1 ) , + PIDMSI_STATUS_DRAFT = ( PIDMSI_STATUS_PRELIM + 1 ) , + PIDMSI_STATUS_INPROGRESS = ( PIDMSI_STATUS_DRAFT + 1 ) , + PIDMSI_STATUS_EDIT = ( PIDMSI_STATUS_INPROGRESS + 1 ) , + PIDMSI_STATUS_REVIEW = ( PIDMSI_STATUS_EDIT + 1 ) , + PIDMSI_STATUS_PROOF = ( PIDMSI_STATUS_REVIEW + 1 ) , + PIDMSI_STATUS_FINAL = ( PIDMSI_STATUS_PROOF + 1 ) , + PIDMSI_STATUS_OTHER = 0x7fff + } ; +#define PRSPEC_INVALID ( 0xffffffff ) + +#define PRSPEC_LPWSTR ( 0 ) + +#define PRSPEC_PROPID ( 1 ) + +#ifdef WIN64 +typedef struct tagPROPSPEC + { + ULONG ulKind; + /* [switch_type] */ union + { + PROPID propid; + LPOLESTR lpwstr; + /* Empty union arm */ + } ; + } PROPSPEC; + +typedef struct tagSTATPROPSTG + { + LPOLESTR lpwstrName; + PROPID propid; + VARTYPE vt; + } STATPROPSTG; +#endif + +// Macros for parsing the OS Version of the Property Set Header +#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD( (dwOSVer) ) +#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD( (dwOSVer) )) +#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD( (dwOSVer) )) +#define PROPSETHDR_OSVERSION_UNKNOWN 0xFFFFFFFF +#ifdef WIN64 +typedef struct tagSTATPROPSETSTG + { + FMTID fmtid; + CLSID clsid; + DWORD grfFlags; + FILETIME mtime; + FILETIME ctime; + FILETIME atime; + DWORD dwOSVersion; + } STATPROPSETSTG; +#endif + + +extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_s_ifspec; + +#ifndef __IPropertyStorage_INTERFACE_DEFINED__ +#define __IPropertyStorage_INTERFACE_DEFINED__ + +/* interface IPropertyStorage */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_IPropertyStorage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("00000138-0000-0000-C000-000000000046") + IPropertyStorage : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE ReadMultiple( + /* [in] */ ULONG cpspec, + /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[ ], + /* [size_is][out] */ __RPC__out_ecount_full(cpspec) PROPVARIANT rgpropvar[ ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE WriteMultiple( + /* [in] */ ULONG cpspec, + /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[ ], + /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPVARIANT rgpropvar[ ], + /* [in] */ PROPID propidNameFirst) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeleteMultiple( + /* [in] */ ULONG cpspec, + /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[ ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames( + /* [in] */ ULONG cpropid, + /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[ ], + /* [size_is][out] */ __RPC__out_ecount_full(cpropid) LPOLESTR rglpwstrName[ ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE WritePropertyNames( + /* [in] */ ULONG cpropid, + /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[ ], + /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const LPOLESTR rglpwstrName[ ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames( + /* [in] */ ULONG cpropid, + /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[ ]) = 0; + + virtual HRESULT STDMETHODCALLTYPE Commit( + /* [in] */ DWORD grfCommitFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE Revert( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Enum( + /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetTimes( + /* [in] */ __RPC__in const FILETIME *pctime, + /* [in] */ __RPC__in const FILETIME *patime, + /* [in] */ __RPC__in const FILETIME *pmtime) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetClass( + /* [in] */ __RPC__in REFCLSID clsid) = 0; + + virtual HRESULT STDMETHODCALLTYPE Stat( + /* [out] */ __RPC__out STATPROPSETSTG *pstatpsstg) = 0; + + }; + +#else /* C style interface */ + +// typedef struct IPropertyStorageVtbl +// { +// BEGIN_INTERFACE +// +// HRESULT ( STDMETHODCALLTYPE *QueryInterface )( +// IPropertyStorage * This, +// /* [in] */ __RPC__in REFIID riid, +// /* [iid_is][out] */ +// __RPC__deref_out void **ppvObject); +// +// ULONG ( STDMETHODCALLTYPE *AddRef )( +// IPropertyStorage * This); +// +// ULONG ( STDMETHODCALLTYPE *Release )( +// IPropertyStorage * This); +// +// HRESULT ( STDMETHODCALLTYPE *ReadMultiple )( +// IPropertyStorage * This, +// /* [in] */ ULONG cpspec, +// /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[ ], +// /* [size_is][out] */ __RPC__out_ecount_full(cpspec) PROPVARIANT rgpropvar[ ]); +// +// HRESULT ( STDMETHODCALLTYPE *WriteMultiple )( +// IPropertyStorage * This, +// /* [in] */ ULONG cpspec, +// /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[ ], +// /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPVARIANT rgpropvar[ ], +// /* [in] */ PROPID propidNameFirst); +// +// HRESULT ( STDMETHODCALLTYPE *DeleteMultiple )( +// IPropertyStorage * This, +// /* [in] */ ULONG cpspec, +// /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[ ]); +// +// HRESULT ( STDMETHODCALLTYPE *ReadPropertyNames )( +// IPropertyStorage * This, +// /* [in] */ ULONG cpropid, +// /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[ ], +// /* [size_is][out] */ __RPC__out_ecount_full(cpropid) LPOLESTR rglpwstrName[ ]); +// +// HRESULT ( STDMETHODCALLTYPE *WritePropertyNames )( +// IPropertyStorage * This, +// /* [in] */ ULONG cpropid, +// /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[ ], +// /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const LPOLESTR rglpwstrName[ ]); +// +// HRESULT ( STDMETHODCALLTYPE *DeletePropertyNames )( +// IPropertyStorage * This, +// /* [in] */ ULONG cpropid, +// /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[ ]); +// +// HRESULT ( STDMETHODCALLTYPE *Commit )( +// IPropertyStorage * This, +// /* [in] */ DWORD grfCommitFlags); +// +// HRESULT ( STDMETHODCALLTYPE *Revert )( +// IPropertyStorage * This); +// +// HRESULT ( STDMETHODCALLTYPE *Enum )( +// IPropertyStorage * This, +// /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum); +// +// HRESULT ( STDMETHODCALLTYPE *SetTimes )( +// IPropertyStorage * This, +// /* [in] */ __RPC__in const FILETIME *pctime, +// /* [in] */ __RPC__in const FILETIME *patime, +// /* [in] */ __RPC__in const FILETIME *pmtime); +// +// HRESULT ( STDMETHODCALLTYPE *SetClass )( +// IPropertyStorage * This, +// /* [in] */ __RPC__in REFCLSID clsid); +// +// HRESULT ( STDMETHODCALLTYPE *Stat )( +// IPropertyStorage * This, +// /* [out] */ __RPC__out STATPROPSETSTG *pstatpsstg); +// +// END_INTERFACE +// } IPropertyStorageVtbl; +// +// interface IPropertyStorage +// { +// CONST_VTBL struct IPropertyStorageVtbl *lpVtbl; +// }; + + + +#ifdef COBJMACROS + + +#define IPropertyStorage_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyStorage_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyStorage_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyStorage_ReadMultiple(This,cpspec,rgpspec,rgpropvar) \ + ( (This)->lpVtbl -> ReadMultiple(This,cpspec,rgpspec,rgpropvar) ) + +#define IPropertyStorage_WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst) \ + ( (This)->lpVtbl -> WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst) ) + +#define IPropertyStorage_DeleteMultiple(This,cpspec,rgpspec) \ + ( (This)->lpVtbl -> DeleteMultiple(This,cpspec,rgpspec) ) + +#define IPropertyStorage_ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName) \ + ( (This)->lpVtbl -> ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName) ) + +#define IPropertyStorage_WritePropertyNames(This,cpropid,rgpropid,rglpwstrName) \ + ( (This)->lpVtbl -> WritePropertyNames(This,cpropid,rgpropid,rglpwstrName) ) + +#define IPropertyStorage_DeletePropertyNames(This,cpropid,rgpropid) \ + ( (This)->lpVtbl -> DeletePropertyNames(This,cpropid,rgpropid) ) + +#define IPropertyStorage_Commit(This,grfCommitFlags) \ + ( (This)->lpVtbl -> Commit(This,grfCommitFlags) ) + +#define IPropertyStorage_Revert(This) \ + ( (This)->lpVtbl -> Revert(This) ) + +#define IPropertyStorage_Enum(This,ppenum) \ + ( (This)->lpVtbl -> Enum(This,ppenum) ) + +#define IPropertyStorage_SetTimes(This,pctime,patime,pmtime) \ + ( (This)->lpVtbl -> SetTimes(This,pctime,patime,pmtime) ) + +#define IPropertyStorage_SetClass(This,clsid) \ + ( (This)->lpVtbl -> SetClass(This,clsid) ) + +#define IPropertyStorage_Stat(This,pstatpsstg) \ + ( (This)->lpVtbl -> Stat(This,pstatpsstg) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyStorage_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertySetStorage_INTERFACE_DEFINED__ +#define __IPropertySetStorage_INTERFACE_DEFINED__ + +/* interface IPropertySetStorage */ +/* [unique][uuid][object] */ + +typedef /* [unique] */ __RPC_unique_pointer IPropertySetStorage *LPPROPERTYSETSTORAGE; + + +EXTERN_C const IID IID_IPropertySetStorage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0000013A-0000-0000-C000-000000000046") + IPropertySetStorage : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Create( + /* [in] */ __RPC__in REFFMTID rfmtid, + /* [unique][in] */ __RPC__in_opt const CLSID *pclsid, + /* [in] */ DWORD grfFlags, + /* [in] */ DWORD grfMode, + /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg) = 0; + + virtual HRESULT STDMETHODCALLTYPE Open( + /* [in] */ __RPC__in REFFMTID rfmtid, + /* [in] */ DWORD grfMode, + /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg) = 0; + + virtual HRESULT STDMETHODCALLTYPE Delete( + /* [in] */ __RPC__in REFFMTID rfmtid) = 0; + + virtual HRESULT STDMETHODCALLTYPE Enum( + /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum) = 0; + + }; + +#else /* C style interface */ + +// typedef struct IPropertySetStorageVtbl +// { +// BEGIN_INTERFACE +// +// HRESULT ( STDMETHODCALLTYPE *QueryInterface )( +// IPropertySetStorage * This, +// /* [in] */ __RPC__in REFIID riid, +// /* [iid_is][out] */ +// __RPC__deref_out void **ppvObject); +// +// ULONG ( STDMETHODCALLTYPE *AddRef )( +// IPropertySetStorage * This); +// +// ULONG ( STDMETHODCALLTYPE *Release )( +// IPropertySetStorage * This); +// +// HRESULT ( STDMETHODCALLTYPE *Create )( +// IPropertySetStorage * This, +// /* [in] */ __RPC__in REFFMTID rfmtid, +// /* [unique][in] */ __RPC__in_opt const CLSID *pclsid, +// /* [in] */ DWORD grfFlags, +// /* [in] */ DWORD grfMode, +// /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg); +// +// HRESULT ( STDMETHODCALLTYPE *Open )( +// IPropertySetStorage * This, +// /* [in] */ __RPC__in REFFMTID rfmtid, +// /* [in] */ DWORD grfMode, +// /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg); +// +// HRESULT ( STDMETHODCALLTYPE *Delete )( +// IPropertySetStorage * This, +// /* [in] */ __RPC__in REFFMTID rfmtid); +// +// HRESULT ( STDMETHODCALLTYPE *Enum )( +// IPropertySetStorage * This, +// /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum); +// +// END_INTERFACE +// } IPropertySetStorageVtbl; +// +// interface IPropertySetStorage +// { +// CONST_VTBL struct IPropertySetStorageVtbl *lpVtbl; +// }; + + + +#ifdef COBJMACROS + + +#define IPropertySetStorage_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertySetStorage_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertySetStorage_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertySetStorage_Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg) \ + ( (This)->lpVtbl -> Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg) ) + +#define IPropertySetStorage_Open(This,rfmtid,grfMode,ppprstg) \ + ( (This)->lpVtbl -> Open(This,rfmtid,grfMode,ppprstg) ) + +#define IPropertySetStorage_Delete(This,rfmtid) \ + ( (This)->lpVtbl -> Delete(This,rfmtid) ) + +#define IPropertySetStorage_Enum(This,ppenum) \ + ( (This)->lpVtbl -> Enum(This,ppenum) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertySetStorage_INTERFACE_DEFINED__ */ + + +#ifndef __IEnumSTATPROPSTG_INTERFACE_DEFINED__ +#define __IEnumSTATPROPSTG_INTERFACE_DEFINED__ + +/* interface IEnumSTATPROPSTG */ +/* [unique][uuid][object] */ + +//typedef /* [unique] */ __RPC_unique_pointer IEnumSTATPROPSTG *LPENUMSTATPROPSTG; + + +EXTERN_C const IID IID_IEnumSTATPROPSTG; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("00000139-0000-0000-C000-000000000046") + IEnumSTATPROPSTG : public IUnknown + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ STATPROPSTG *rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum) = 0; + + }; + +#else /* C style interface */ + +// typedef struct IEnumSTATPROPSTGVtbl +// { +// BEGIN_INTERFACE +// +// HRESULT ( STDMETHODCALLTYPE *QueryInterface )( +// IEnumSTATPROPSTG * This, +// /* [in] */ __RPC__in REFIID riid, +// /* [iid_is][out] */ +// __RPC__deref_out void **ppvObject); +// +// ULONG ( STDMETHODCALLTYPE *AddRef )( +// IEnumSTATPROPSTG * This); +// +// ULONG ( STDMETHODCALLTYPE *Release )( +// IEnumSTATPROPSTG * This); +// +// /* [local] */ HRESULT ( STDMETHODCALLTYPE *Next )( +// IEnumSTATPROPSTG * This, +// /* [in] */ ULONG celt, +// /* [length_is][size_is][out] */ STATPROPSTG *rgelt, +// /* [out] */ ULONG *pceltFetched); +// +// HRESULT ( STDMETHODCALLTYPE *Skip )( +// IEnumSTATPROPSTG * This, +// /* [in] */ ULONG celt); +// +// HRESULT ( STDMETHODCALLTYPE *Reset )( +// IEnumSTATPROPSTG * This); +// +// HRESULT ( STDMETHODCALLTYPE *Clone )( +// IEnumSTATPROPSTG * This, +// /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum); +// +// END_INTERFACE +// } IEnumSTATPROPSTGVtbl; +// +// interface IEnumSTATPROPSTG +// { +// CONST_VTBL struct IEnumSTATPROPSTGVtbl *lpVtbl; +// }; + + + +#ifdef COBJMACROS + + +#define IEnumSTATPROPSTG_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IEnumSTATPROPSTG_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IEnumSTATPROPSTG_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IEnumSTATPROPSTG_Next(This,celt,rgelt,pceltFetched) \ + ( (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) ) + +#define IEnumSTATPROPSTG_Skip(This,celt) \ + ( (This)->lpVtbl -> Skip(This,celt) ) + +#define IEnumSTATPROPSTG_Reset(This) \ + ( (This)->lpVtbl -> Reset(This) ) + +#define IEnumSTATPROPSTG_Clone(This,ppenum) \ + ( (This)->lpVtbl -> Clone(This,ppenum) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_RemoteNext_Proxy( + IEnumSTATPROPSTG * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSTG *rgelt, + /* [out] */ __RPC__out ULONG *pceltFetched); + + +void __RPC_STUB IEnumSTATPROPSTG_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumSTATPROPSTG_INTERFACE_DEFINED__ */ + + +#ifndef __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ +#define __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ + +/* interface IEnumSTATPROPSETSTG */ +/* [unique][uuid][object] */ + +typedef /* [unique] */ __RPC_unique_pointer IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG; + + +EXTERN_C const IID IID_IEnumSTATPROPSETSTG; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0000013B-0000-0000-C000-000000000046") + IEnumSTATPROPSETSTG : public IUnknown + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum) = 0; + + }; + +#else /* C style interface */ + +// typedef struct IEnumSTATPROPSETSTGVtbl +// { +// BEGIN_INTERFACE +// +// HRESULT ( STDMETHODCALLTYPE *QueryInterface )( +// IEnumSTATPROPSETSTG * This, +// /* [in] */ __RPC__in REFIID riid, +// /* [iid_is][out] */ +// __RPC__deref_out void **ppvObject); +// +// ULONG ( STDMETHODCALLTYPE *AddRef )( +// IEnumSTATPROPSETSTG * This); +// +// ULONG ( STDMETHODCALLTYPE *Release )( +// IEnumSTATPROPSETSTG * This); +// +// /* [local] */ HRESULT ( STDMETHODCALLTYPE *Next )( +// IEnumSTATPROPSETSTG * This, +// /* [in] */ ULONG celt, +// /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt, +// /* [out] */ ULONG *pceltFetched); +// +// HRESULT ( STDMETHODCALLTYPE *Skip )( +// IEnumSTATPROPSETSTG * This, +// /* [in] */ ULONG celt); +// +// HRESULT ( STDMETHODCALLTYPE *Reset )( +// IEnumSTATPROPSETSTG * This); +// +// HRESULT ( STDMETHODCALLTYPE *Clone )( +// IEnumSTATPROPSETSTG * This, +// /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum); +// +// END_INTERFACE +// } IEnumSTATPROPSETSTGVtbl; +// +// interface IEnumSTATPROPSETSTG +// { +// CONST_VTBL struct IEnumSTATPROPSETSTGVtbl *lpVtbl; +// }; + + + +#ifdef COBJMACROS + + +#define IEnumSTATPROPSETSTG_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IEnumSTATPROPSETSTG_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IEnumSTATPROPSETSTG_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IEnumSTATPROPSETSTG_Next(This,celt,rgelt,pceltFetched) \ + ( (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) ) + +#define IEnumSTATPROPSETSTG_Skip(This,celt) \ + ( (This)->lpVtbl -> Skip(This,celt) ) + +#define IEnumSTATPROPSETSTG_Reset(This) \ + ( (This)->lpVtbl -> Reset(This) ) + +#define IEnumSTATPROPSETSTG_Clone(This,ppenum) \ + ( (This)->lpVtbl -> Clone(This,ppenum) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_RemoteNext_Proxy( + IEnumSTATPROPSETSTG * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSETSTG *rgelt, + /* [out] */ __RPC__out ULONG *pceltFetched); + + +void __RPC_STUB IEnumSTATPROPSETSTG_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_propidl_0000_0004 */ +/* [local] */ + +typedef /* [unique] */ __RPC_unique_pointer IPropertyStorage *LPPROPERTYSTORAGE; + +WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc ); +WINOLEAPI PropVariantClear ( PROPVARIANT * pvar ); +WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars ); + +#define _PROPVARIANTINIT_DEFINED_ +# ifdef __cplusplus +inline void PropVariantInit ( PROPVARIANT * pvar ) +{ + memset ( pvar, 0, sizeof(PROPVARIANT) ); +} +# else +# define PropVariantInit(pvar) memset ( (pvar), 0, sizeof(PROPVARIANT) ) +# endif + + +#ifndef _STGCREATEPROPSTG_DEFINED_ +WINOLEAPI StgCreatePropStg( IUnknown* pUnk, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg ); +WINOLEAPI StgOpenPropStg( IUnknown* pUnk, REFFMTID fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg ); +WINOLEAPI StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg); + +#define CCH_MAX_PROPSTG_NAME 31 +__checkReturn WINOLEAPI FmtIdToPropStgName( const FMTID *pfmtid, __out_ecount(CCH_MAX_PROPSTG_NAME+1) LPOLESTR oszName ); +WINOLEAPI PropStgNameToFmtId( __in __nullterminated const LPOLESTR oszName, FMTID *pfmtid ); +#endif +#ifndef _SERIALIZEDPROPERTYVALUE_DEFINED_ +#define _SERIALIZEDPROPERTYVALUE_DEFINED_ +typedef struct tagSERIALIZEDPROPERTYVALUE // prop +{ + DWORD dwType; + BYTE rgb[1]; +} SERIALIZEDPROPERTYVALUE; +#endif + +EXTERN_C SERIALIZEDPROPERTYVALUE* __stdcall +StgConvertVariantToProperty( + __in const PROPVARIANT* pvar, + USHORT CodePage, + __out_bcount_opt(*pcb) SERIALIZEDPROPERTYVALUE* pprop, + __inout ULONG* pcb, + PROPID pid, + __reserved BOOLEAN fReserved, + __out_opt ULONG* pcIndirect); + +#ifdef __cplusplus +class PMemoryAllocator; + +EXTERN_C BOOLEAN __stdcall +StgConvertPropertyToVariant( + __in const SERIALIZEDPROPERTYVALUE* pprop, + USHORT CodePage, + __out PROPVARIANT* pvar, + __in PMemoryAllocator* pma); +#endif +#if _MSC_VER >= 1200 +#pragma warning(pop) +#else +#pragma warning(default:4201) /* Nameless struct/union */ +#pragma warning(default:4237) /* keywords bool, true, false, etc.. */ +#endif + + +extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_s_ifspec; + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); + +unsigned long __RPC_USER LPSAFEARRAY_UserSize( unsigned long *, unsigned long , LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal( unsigned long *, unsigned char *, LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); +void __RPC_USER LPSAFEARRAY_UserFree( unsigned long *, LPSAFEARRAY * ); + +unsigned long __RPC_USER BSTR_UserSize64( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal64( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree64( unsigned long *, BSTR * ); + +unsigned long __RPC_USER LPSAFEARRAY_UserSize64( unsigned long *, unsigned long , LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal64( unsigned long *, unsigned char *, LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * ); +void __RPC_USER LPSAFEARRAY_UserFree64( unsigned long *, LPSAFEARRAY * ); + +/* [local] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Next_Proxy( + IEnumSTATPROPSTG * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ STATPROPSTG *rgelt, + /* [out] */ ULONG *pceltFetched); + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Next_Stub( + IEnumSTATPROPSTG * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSTG *rgelt, + /* [out] */ __RPC__out ULONG *pceltFetched); + +/* [local] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Next_Proxy( + IEnumSTATPROPSETSTG * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt, + /* [out] */ ULONG *pceltFetched); + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Next_Stub( + IEnumSTATPROPSETSTG * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSETSTG *rgelt, + /* [out] */ __RPC__out ULONG *pceltFetched); + + + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/propkey.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propkey.h new file mode 100644 index 0000000000..69e71a5191 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propkey.h @@ -0,0 +1,4274 @@ +//=========================================================================== +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//=========================================================================== + + +#ifndef _INC_PROPKEY +#define _INC_PROPKEY + +#ifndef DEFINE_API_PKEY +#define DEFINE_API_PKEY(name, managed_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ + DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) +#endif + +#include + +#ifndef _WIN32_IE +#define _WIN32_IE 0x0501 +#else +#if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500) +#error _WIN32_IE setting conflicts with _WIN32_WINNT setting +#endif +#endif + + +//----------------------------------------------------------------------------- +// Audio properties + +// Name: System.Audio.ChannelCount -- PKEY_Audio_ChannelCount +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 7 (PIDASI_CHANNEL_COUNT) +// +// Indicates the channel count for the audio file. Values: 1 (mono), 2 (stereo). +DEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7); + +// Possible discrete values for PKEY_Audio_ChannelCount are: +#define AUDIO_CHANNELCOUNT_MONO 1ul +#define AUDIO_CHANNELCOUNT_STEREO 2ul + +// Name: System.Audio.Compression -- PKEY_Audio_Compression +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 10 (PIDASI_COMPRESSION) +// +// +DEFINE_PROPERTYKEY(PKEY_Audio_Compression, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10); + +// Name: System.Audio.EncodingBitrate -- PKEY_Audio_EncodingBitrate +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 4 (PIDASI_AVG_DATA_RATE) +// +// Indicates the average data rate in Hz for the audio file in "bits per second". +DEFINE_PROPERTYKEY(PKEY_Audio_EncodingBitrate, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4); + +// Name: System.Audio.Format -- PKEY_Audio_Format +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) Legacy code may treat this as VT_BSTR. +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 2 (PIDASI_FORMAT) +// +// Indicates the format of the audio file. +DEFINE_PROPERTYKEY(PKEY_Audio_Format, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2); + +// Name: System.Audio.IsVariableBitRate -- PKEY_Audio_IsVariableBitRate +// Type: Boolean -- VT_BOOL +// FormatID: E6822FEE-8C17-4D62-823C-8E9CFCBD1D5C, 100 +DEFINE_PROPERTYKEY(PKEY_Audio_IsVariableBitRate, 0xE6822FEE, 0x8C17, 0x4D62, 0x82, 0x3C, 0x8E, 0x9C, 0xFC, 0xBD, 0x1D, 0x5C, 100); + +// Name: System.Audio.PeakValue -- PKEY_Audio_PeakValue +// Type: UInt32 -- VT_UI4 +// FormatID: 2579E5D0-1116-4084-BD9A-9B4F7CB4DF5E, 100 +DEFINE_PROPERTYKEY(PKEY_Audio_PeakValue, 0x2579E5D0, 0x1116, 0x4084, 0xBD, 0x9A, 0x9B, 0x4F, 0x7C, 0xB4, 0xDF, 0x5E, 100); + +// Name: System.Audio.SampleRate -- PKEY_Audio_SampleRate +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 5 (PIDASI_SAMPLE_RATE) +// +// Indicates the audio sample rate for the audio file in "samples per second". +DEFINE_PROPERTYKEY(PKEY_Audio_SampleRate, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5); + +// Name: System.Audio.SampleSize -- PKEY_Audio_SampleSize +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 6 (PIDASI_SAMPLE_SIZE) +// +// Indicates the audio sample size for the audio file in "bits per sample". +DEFINE_PROPERTYKEY(PKEY_Audio_SampleSize, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6); + +// Name: System.Audio.StreamName -- PKEY_Audio_StreamName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 9 (PIDASI_STREAM_NAME) +// +// +DEFINE_PROPERTYKEY(PKEY_Audio_StreamName, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9); + +// Name: System.Audio.StreamNumber -- PKEY_Audio_StreamNumber +// Type: UInt16 -- VT_UI2 +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 8 (PIDASI_STREAM_NUMBER) +// +// +DEFINE_PROPERTYKEY(PKEY_Audio_StreamNumber, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8); + + + +//----------------------------------------------------------------------------- +// Calendar properties + +// Name: System.Calendar.Duration -- PKEY_Calendar_Duration +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 293CA35A-09AA-4DD2-B180-1FE245728A52, 100 +// +// The duration as specified in a string. +DEFINE_PROPERTYKEY(PKEY_Calendar_Duration, 0x293CA35A, 0x09AA, 0x4DD2, 0xB1, 0x80, 0x1F, 0xE2, 0x45, 0x72, 0x8A, 0x52, 100); + +// Name: System.Calendar.IsOnline -- PKEY_Calendar_IsOnline +// Type: Boolean -- VT_BOOL +// FormatID: BFEE9149-E3E2-49A7-A862-C05988145CEC, 100 +// +// Identifies if the event is an online event. +DEFINE_PROPERTYKEY(PKEY_Calendar_IsOnline, 0xBFEE9149, 0xE3E2, 0x49A7, 0xA8, 0x62, 0xC0, 0x59, 0x88, 0x14, 0x5C, 0xEC, 100); + +// Name: System.Calendar.IsRecurring -- PKEY_Calendar_IsRecurring +// Type: Boolean -- VT_BOOL +// FormatID: 315B9C8D-80A9-4EF9-AE16-8E746DA51D70, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_IsRecurring, 0x315B9C8D, 0x80A9, 0x4EF9, 0xAE, 0x16, 0x8E, 0x74, 0x6D, 0xA5, 0x1D, 0x70, 100); + +// Name: System.Calendar.Location -- PKEY_Calendar_Location +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F6272D18-CECC-40B1-B26A-3911717AA7BD, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_Location, 0xF6272D18, 0xCECC, 0x40B1, 0xB2, 0x6A, 0x39, 0x11, 0x71, 0x7A, 0xA7, 0xBD, 100); + +// Name: System.Calendar.OptionalAttendeeAddresses -- PKEY_Calendar_OptionalAttendeeAddresses +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: D55BAE5A-3892-417A-A649-C6AC5AAAEAB3, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_OptionalAttendeeAddresses, 0xD55BAE5A, 0x3892, 0x417A, 0xA6, 0x49, 0xC6, 0xAC, 0x5A, 0xAA, 0xEA, 0xB3, 100); + +// Name: System.Calendar.OptionalAttendeeNames -- PKEY_Calendar_OptionalAttendeeNames +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: 09429607-582D-437F-84C3-DE93A2B24C3C, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_OptionalAttendeeNames, 0x09429607, 0x582D, 0x437F, 0x84, 0xC3, 0xDE, 0x93, 0xA2, 0xB2, 0x4C, 0x3C, 100); + +// Name: System.Calendar.OrganizerAddress -- PKEY_Calendar_OrganizerAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 744C8242-4DF5-456C-AB9E-014EFB9021E3, 100 +// +// Address of the organizer organizing the event. +DEFINE_PROPERTYKEY(PKEY_Calendar_OrganizerAddress, 0x744C8242, 0x4DF5, 0x456C, 0xAB, 0x9E, 0x01, 0x4E, 0xFB, 0x90, 0x21, 0xE3, 100); + +// Name: System.Calendar.OrganizerName -- PKEY_Calendar_OrganizerName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: AAA660F9-9865-458E-B484-01BC7FE3973E, 100 +// +// Name of the organizer organizing the event. +DEFINE_PROPERTYKEY(PKEY_Calendar_OrganizerName, 0xAAA660F9, 0x9865, 0x458E, 0xB4, 0x84, 0x01, 0xBC, 0x7F, 0xE3, 0x97, 0x3E, 100); + +// Name: System.Calendar.ReminderTime -- PKEY_Calendar_ReminderTime +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 72FC5BA4-24F9-4011-9F3F-ADD27AFAD818, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_ReminderTime, 0x72FC5BA4, 0x24F9, 0x4011, 0x9F, 0x3F, 0xAD, 0xD2, 0x7A, 0xFA, 0xD8, 0x18, 100); + +// Name: System.Calendar.RequiredAttendeeAddresses -- PKEY_Calendar_RequiredAttendeeAddresses +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: 0BA7D6C3-568D-4159-AB91-781A91FB71E5, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_RequiredAttendeeAddresses, 0x0BA7D6C3, 0x568D, 0x4159, 0xAB, 0x91, 0x78, 0x1A, 0x91, 0xFB, 0x71, 0xE5, 100); + +// Name: System.Calendar.RequiredAttendeeNames -- PKEY_Calendar_RequiredAttendeeNames +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: B33AF30B-F552-4584-936C-CB93E5CDA29F, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_RequiredAttendeeNames, 0xB33AF30B, 0xF552, 0x4584, 0x93, 0x6C, 0xCB, 0x93, 0xE5, 0xCD, 0xA2, 0x9F, 100); + +// Name: System.Calendar.Resources -- PKEY_Calendar_Resources +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: 00F58A38-C54B-4C40-8696-97235980EAE1, 100 +DEFINE_PROPERTYKEY(PKEY_Calendar_Resources, 0x00F58A38, 0xC54B, 0x4C40, 0x86, 0x96, 0x97, 0x23, 0x59, 0x80, 0xEA, 0xE1, 100); + +// Name: System.Calendar.ShowTimeAs -- PKEY_Calendar_ShowTimeAs +// Type: UInt16 -- VT_UI2 +// FormatID: 5BF396D4-5EB2-466F-BDE9-2FB3F2361D6E, 100 +// +// +DEFINE_PROPERTYKEY(PKEY_Calendar_ShowTimeAs, 0x5BF396D4, 0x5EB2, 0x466F, 0xBD, 0xE9, 0x2F, 0xB3, 0xF2, 0x36, 0x1D, 0x6E, 100); + +// Possible discrete values for PKEY_Calendar_ShowTimeAs are: +#define CALENDAR_SHOWTIMEAS_FREE 0u +#define CALENDAR_SHOWTIMEAS_TENTATIVE 1u +#define CALENDAR_SHOWTIMEAS_BUSY 2u +#define CALENDAR_SHOWTIMEAS_OOF 3u + +// Name: System.Calendar.ShowTimeAsText -- PKEY_Calendar_ShowTimeAsText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 53DA57CF-62C0-45C4-81DE-7610BCEFD7F5, 100 +// +// This is the user-friendly form of System.Calendar.ShowTimeAs. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Calendar_ShowTimeAsText, 0x53DA57CF, 0x62C0, 0x45C4, 0x81, 0xDE, 0x76, 0x10, 0xBC, 0xEF, 0xD7, 0xF5, 100); + +//----------------------------------------------------------------------------- +// Communication properties + + + +// Name: System.Communication.AccountName -- PKEY_Communication_AccountName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 9 +// +// Account Name +DEFINE_PROPERTYKEY(PKEY_Communication_AccountName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 9); + +// Name: System.Communication.Suffix -- PKEY_Communication_Suffix +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 807B653A-9E91-43EF-8F97-11CE04EE20C5, 100 +DEFINE_PROPERTYKEY(PKEY_Communication_Suffix, 0x807B653A, 0x9E91, 0x43EF, 0x8F, 0x97, 0x11, 0xCE, 0x04, 0xEE, 0x20, 0xC5, 100); + +// Name: System.Communication.TaskStatus -- PKEY_Communication_TaskStatus +// Type: UInt16 -- VT_UI2 +// FormatID: BE1A72C6-9A1D-46B7-AFE7-AFAF8CEF4999, 100 +DEFINE_PROPERTYKEY(PKEY_Communication_TaskStatus, 0xBE1A72C6, 0x9A1D, 0x46B7, 0xAF, 0xE7, 0xAF, 0xAF, 0x8C, 0xEF, 0x49, 0x99, 100); + +// Possible discrete values for PKEY_Communication_TaskStatus are: +#define TASKSTATUS_NOTSTARTED 0u +#define TASKSTATUS_INPROGRESS 1u +#define TASKSTATUS_COMPLETE 2u +#define TASKSTATUS_WAITING 3u +#define TASKSTATUS_DEFERRED 4u + +// Name: System.Communication.TaskStatusText -- PKEY_Communication_TaskStatusText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A6744477-C237-475B-A075-54F34498292A, 100 +// +// This is the user-friendly form of System.Communication.TaskStatus. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Communication_TaskStatusText, 0xA6744477, 0xC237, 0x475B, 0xA0, 0x75, 0x54, 0xF3, 0x44, 0x98, 0x29, 0x2A, 100); + +//----------------------------------------------------------------------------- +// Computer properties + + + +// Name: System.Computer.DecoratedFreeSpace -- PKEY_Computer_DecoratedFreeSpace +// Type: Multivalue UInt64 -- VT_VECTOR | VT_UI8 (For variants: VT_ARRAY | VT_UI8) +// FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 7 (Filesystem Volume Properties) +// +// Free space and total space: "%s free of %s" +DEFINE_PROPERTYKEY(PKEY_Computer_DecoratedFreeSpace, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 7); + +//----------------------------------------------------------------------------- +// Contact properties + + + +// Name: System.Contact.Anniversary -- PKEY_Contact_Anniversary +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 9AD5BADB-CEA7-4470-A03D-B84E51B9949E, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Anniversary, 0x9AD5BADB, 0xCEA7, 0x4470, 0xA0, 0x3D, 0xB8, 0x4E, 0x51, 0xB9, 0x94, 0x9E, 100); + +// Name: System.Contact.AssistantName -- PKEY_Contact_AssistantName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CD102C9C-5540-4A88-A6F6-64E4981C8CD1, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_AssistantName, 0xCD102C9C, 0x5540, 0x4A88, 0xA6, 0xF6, 0x64, 0xE4, 0x98, 0x1C, 0x8C, 0xD1, 100); + +// Name: System.Contact.AssistantTelephone -- PKEY_Contact_AssistantTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 9A93244D-A7AD-4FF8-9B99-45EE4CC09AF6, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_AssistantTelephone, 0x9A93244D, 0xA7AD, 0x4FF8, 0x9B, 0x99, 0x45, 0xEE, 0x4C, 0xC0, 0x9A, 0xF6, 100); + +// Name: System.Contact.Birthday -- PKEY_Contact_Birthday +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 47 +DEFINE_PROPERTYKEY(PKEY_Contact_Birthday, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 47); + +// Name: System.Contact.BusinessAddress -- PKEY_Contact_BusinessAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 730FB6DD-CF7C-426B-A03F-BD166CC9EE24, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddress, 0x730FB6DD, 0xCF7C, 0x426B, 0xA0, 0x3F, 0xBD, 0x16, 0x6C, 0xC9, 0xEE, 0x24, 100); + +// Name: System.Contact.BusinessAddressCity -- PKEY_Contact_BusinessAddressCity +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 402B5934-EC5A-48C3-93E6-85E86A2D934E, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressCity, 0x402B5934, 0xEC5A, 0x48C3, 0x93, 0xE6, 0x85, 0xE8, 0x6A, 0x2D, 0x93, 0x4E, 100); + +// Name: System.Contact.BusinessAddressCountry -- PKEY_Contact_BusinessAddressCountry +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: B0B87314-FCF6-4FEB-8DFF-A50DA6AF561C, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressCountry, 0xB0B87314, 0xFCF6, 0x4FEB, 0x8D, 0xFF, 0xA5, 0x0D, 0xA6, 0xAF, 0x56, 0x1C, 100); + +// Name: System.Contact.BusinessAddressPostalCode -- PKEY_Contact_BusinessAddressPostalCode +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E1D4A09E-D758-4CD1-B6EC-34A8B5A73F80, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressPostalCode, 0xE1D4A09E, 0xD758, 0x4CD1, 0xB6, 0xEC, 0x34, 0xA8, 0xB5, 0xA7, 0x3F, 0x80, 100); + +// Name: System.Contact.BusinessAddressPostOfficeBox -- PKEY_Contact_BusinessAddressPostOfficeBox +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: BC4E71CE-17F9-48D5-BEE9-021DF0EA5409, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressPostOfficeBox, 0xBC4E71CE, 0x17F9, 0x48D5, 0xBE, 0xE9, 0x02, 0x1D, 0xF0, 0xEA, 0x54, 0x09, 100); + +// Name: System.Contact.BusinessAddressState -- PKEY_Contact_BusinessAddressState +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 446F787F-10C4-41CB-A6C4-4D0343551597, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressState, 0x446F787F, 0x10C4, 0x41CB, 0xA6, 0xC4, 0x4D, 0x03, 0x43, 0x55, 0x15, 0x97, 100); + +// Name: System.Contact.BusinessAddressStreet -- PKEY_Contact_BusinessAddressStreet +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: DDD1460F-C0BF-4553-8CE4-10433C908FB0, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressStreet, 0xDDD1460F, 0xC0BF, 0x4553, 0x8C, 0xE4, 0x10, 0x43, 0x3C, 0x90, 0x8F, 0xB0, 100); + +// Name: System.Contact.BusinessFaxNumber -- PKEY_Contact_BusinessFaxNumber +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 91EFF6F3-2E27-42CA-933E-7C999FBE310B, 100 +// +// Business fax number of the contact. +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessFaxNumber, 0x91EFF6F3, 0x2E27, 0x42CA, 0x93, 0x3E, 0x7C, 0x99, 0x9F, 0xBE, 0x31, 0x0B, 100); + +// Name: System.Contact.BusinessHomePage -- PKEY_Contact_BusinessHomePage +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 56310920-2491-4919-99CE-EADB06FAFDB2, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessHomePage, 0x56310920, 0x2491, 0x4919, 0x99, 0xCE, 0xEA, 0xDB, 0x06, 0xFA, 0xFD, 0xB2, 100); + +// Name: System.Contact.BusinessTelephone -- PKEY_Contact_BusinessTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6A15E5A0-0A1E-4CD7-BB8C-D2F1B0C929BC, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_BusinessTelephone, 0x6A15E5A0, 0x0A1E, 0x4CD7, 0xBB, 0x8C, 0xD2, 0xF1, 0xB0, 0xC9, 0x29, 0xBC, 100); + +// Name: System.Contact.CallbackTelephone -- PKEY_Contact_CallbackTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: BF53D1C3-49E0-4F7F-8567-5A821D8AC542, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_CallbackTelephone, 0xBF53D1C3, 0x49E0, 0x4F7F, 0x85, 0x67, 0x5A, 0x82, 0x1D, 0x8A, 0xC5, 0x42, 100); + +// Name: System.Contact.CarTelephone -- PKEY_Contact_CarTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 8FDC6DEA-B929-412B-BA90-397A257465FE, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_CarTelephone, 0x8FDC6DEA, 0xB929, 0x412B, 0xBA, 0x90, 0x39, 0x7A, 0x25, 0x74, 0x65, 0xFE, 100); + +// Name: System.Contact.Children -- PKEY_Contact_Children +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: D4729704-8EF1-43EF-9024-2BD381187FD5, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Children, 0xD4729704, 0x8EF1, 0x43EF, 0x90, 0x24, 0x2B, 0xD3, 0x81, 0x18, 0x7F, 0xD5, 100); + +// Name: System.Contact.CompanyMainTelephone -- PKEY_Contact_CompanyMainTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 8589E481-6040-473D-B171-7FA89C2708ED, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_CompanyMainTelephone, 0x8589E481, 0x6040, 0x473D, 0xB1, 0x71, 0x7F, 0xA8, 0x9C, 0x27, 0x08, 0xED, 100); + +// Name: System.Contact.Department -- PKEY_Contact_Department +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: FC9F7306-FF8F-4D49-9FB6-3FFE5C0951EC, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Department, 0xFC9F7306, 0xFF8F, 0x4D49, 0x9F, 0xB6, 0x3F, 0xFE, 0x5C, 0x09, 0x51, 0xEC, 100); + +// Name: System.Contact.EmailAddress -- PKEY_Contact_EmailAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F8FA7FA3-D12B-4785-8A4E-691A94F7A3E7, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress, 0xF8FA7FA3, 0xD12B, 0x4785, 0x8A, 0x4E, 0x69, 0x1A, 0x94, 0xF7, 0xA3, 0xE7, 100); + +// Name: System.Contact.EmailAddress2 -- PKEY_Contact_EmailAddress2 +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 38965063-EDC8-4268-8491-B7723172CF29, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress2, 0x38965063, 0xEDC8, 0x4268, 0x84, 0x91, 0xB7, 0x72, 0x31, 0x72, 0xCF, 0x29, 100); + +// Name: System.Contact.EmailAddress3 -- PKEY_Contact_EmailAddress3 +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 644D37B4-E1B3-4BAD-B099-7E7C04966ACA, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress3, 0x644D37B4, 0xE1B3, 0x4BAD, 0xB0, 0x99, 0x7E, 0x7C, 0x04, 0x96, 0x6A, 0xCA, 100); + +// Name: System.Contact.EmailAddresses -- PKEY_Contact_EmailAddresses +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: 84D8F337-981D-44B3-9615-C7596DBA17E3, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddresses, 0x84D8F337, 0x981D, 0x44B3, 0x96, 0x15, 0xC7, 0x59, 0x6D, 0xBA, 0x17, 0xE3, 100); + +// Name: System.Contact.EmailName -- PKEY_Contact_EmailName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CC6F4F24-6083-4BD4-8754-674D0DE87AB8, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_EmailName, 0xCC6F4F24, 0x6083, 0x4BD4, 0x87, 0x54, 0x67, 0x4D, 0x0D, 0xE8, 0x7A, 0xB8, 100); + +// Name: System.Contact.FileAsName -- PKEY_Contact_FileAsName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F1A24AA7-9CA7-40F6-89EC-97DEF9FFE8DB, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_FileAsName, 0xF1A24AA7, 0x9CA7, 0x40F6, 0x89, 0xEC, 0x97, 0xDE, 0xF9, 0xFF, 0xE8, 0xDB, 100); + +// Name: System.Contact.FirstName -- PKEY_Contact_FirstName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 14977844-6B49-4AAD-A714-A4513BF60460, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_FirstName, 0x14977844, 0x6B49, 0x4AAD, 0xA7, 0x14, 0xA4, 0x51, 0x3B, 0xF6, 0x04, 0x60, 100); + +// Name: System.Contact.FullName -- PKEY_Contact_FullName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 635E9051-50A5-4BA2-B9DB-4ED056C77296, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_FullName, 0x635E9051, 0x50A5, 0x4BA2, 0xB9, 0xDB, 0x4E, 0xD0, 0x56, 0xC7, 0x72, 0x96, 100); + +// Name: System.Contact.Gender -- PKEY_Contact_Gender +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 3C8CEE58-D4F0-4CF9-B756-4E5D24447BCD, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Gender, 0x3C8CEE58, 0xD4F0, 0x4CF9, 0xB7, 0x56, 0x4E, 0x5D, 0x24, 0x44, 0x7B, 0xCD, 100); + +// Name: System.Contact.Hobbies -- PKEY_Contact_Hobbies +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: 5DC2253F-5E11-4ADF-9CFE-910DD01E3E70, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Hobbies, 0x5DC2253F, 0x5E11, 0x4ADF, 0x9C, 0xFE, 0x91, 0x0D, 0xD0, 0x1E, 0x3E, 0x70, 100); + +// Name: System.Contact.HomeAddress -- PKEY_Contact_HomeAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 98F98354-617A-46B8-8560-5B1B64BF1F89, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddress, 0x98F98354, 0x617A, 0x46B8, 0x85, 0x60, 0x5B, 0x1B, 0x64, 0xBF, 0x1F, 0x89, 100); + +// Name: System.Contact.HomeAddressCity -- PKEY_Contact_HomeAddressCity +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 65 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressCity, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 65); + +// Name: System.Contact.HomeAddressCountry -- PKEY_Contact_HomeAddressCountry +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 08A65AA1-F4C9-43DD-9DDF-A33D8E7EAD85, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressCountry, 0x08A65AA1, 0xF4C9, 0x43DD, 0x9D, 0xDF, 0xA3, 0x3D, 0x8E, 0x7E, 0xAD, 0x85, 100); + +// Name: System.Contact.HomeAddressPostalCode -- PKEY_Contact_HomeAddressPostalCode +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 8AFCC170-8A46-4B53-9EEE-90BAE7151E62, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressPostalCode, 0x8AFCC170, 0x8A46, 0x4B53, 0x9E, 0xEE, 0x90, 0xBA, 0xE7, 0x15, 0x1E, 0x62, 100); + +// Name: System.Contact.HomeAddressPostOfficeBox -- PKEY_Contact_HomeAddressPostOfficeBox +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 7B9F6399-0A3F-4B12-89BD-4ADC51C918AF, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressPostOfficeBox, 0x7B9F6399, 0x0A3F, 0x4B12, 0x89, 0xBD, 0x4A, 0xDC, 0x51, 0xC9, 0x18, 0xAF, 100); + +// Name: System.Contact.HomeAddressState -- PKEY_Contact_HomeAddressState +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C89A23D0-7D6D-4EB8-87D4-776A82D493E5, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressState, 0xC89A23D0, 0x7D6D, 0x4EB8, 0x87, 0xD4, 0x77, 0x6A, 0x82, 0xD4, 0x93, 0xE5, 100); + +// Name: System.Contact.HomeAddressStreet -- PKEY_Contact_HomeAddressStreet +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 0ADEF160-DB3F-4308-9A21-06237B16FA2A, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressStreet, 0x0ADEF160, 0xDB3F, 0x4308, 0x9A, 0x21, 0x06, 0x23, 0x7B, 0x16, 0xFA, 0x2A, 100); + +// Name: System.Contact.HomeFaxNumber -- PKEY_Contact_HomeFaxNumber +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 660E04D6-81AB-4977-A09F-82313113AB26, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeFaxNumber, 0x660E04D6, 0x81AB, 0x4977, 0xA0, 0x9F, 0x82, 0x31, 0x31, 0x13, 0xAB, 0x26, 100); + +// Name: System.Contact.HomeTelephone -- PKEY_Contact_HomeTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 20 +DEFINE_PROPERTYKEY(PKEY_Contact_HomeTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 20); + +// Name: System.Contact.IMAddress -- PKEY_Contact_IMAddress +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: D68DBD8A-3374-4B81-9972-3EC30682DB3D, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_IMAddress, 0xD68DBD8A, 0x3374, 0x4B81, 0x99, 0x72, 0x3E, 0xC3, 0x06, 0x82, 0xDB, 0x3D, 100); + +// Name: System.Contact.Initials -- PKEY_Contact_Initials +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F3D8F40D-50CB-44A2-9718-40CB9119495D, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Initials, 0xF3D8F40D, 0x50CB, 0x44A2, 0x97, 0x18, 0x40, 0xCB, 0x91, 0x19, 0x49, 0x5D, 100); + +// Name: System.Contact.JA.CompanyNamePhonetic -- PKEY_Contact_JA_CompanyNamePhonetic +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 2 +// +// +DEFINE_PROPERTYKEY(PKEY_Contact_JA_CompanyNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 2); + +// Name: System.Contact.JA.FirstNamePhonetic -- PKEY_Contact_JA_FirstNamePhonetic +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 3 +// +// +DEFINE_PROPERTYKEY(PKEY_Contact_JA_FirstNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 3); + +// Name: System.Contact.JA.LastNamePhonetic -- PKEY_Contact_JA_LastNamePhonetic +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 4 +// +// +DEFINE_PROPERTYKEY(PKEY_Contact_JA_LastNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 4); + +// Name: System.Contact.JobTitle -- PKEY_Contact_JobTitle +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 6 +DEFINE_PROPERTYKEY(PKEY_Contact_JobTitle, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 6); + +// Name: System.Contact.Label -- PKEY_Contact_Label +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 97B0AD89-DF49-49CC-834E-660974FD755B, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Label, 0x97B0AD89, 0xDF49, 0x49CC, 0x83, 0x4E, 0x66, 0x09, 0x74, 0xFD, 0x75, 0x5B, 100); + +// Name: System.Contact.LastName -- PKEY_Contact_LastName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 8F367200-C270-457C-B1D4-E07C5BCD90C7, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_LastName, 0x8F367200, 0xC270, 0x457C, 0xB1, 0xD4, 0xE0, 0x7C, 0x5B, 0xCD, 0x90, 0xC7, 100); + +// Name: System.Contact.MailingAddress -- PKEY_Contact_MailingAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C0AC206A-827E-4650-95AE-77E2BB74FCC9, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_MailingAddress, 0xC0AC206A, 0x827E, 0x4650, 0x95, 0xAE, 0x77, 0xE2, 0xBB, 0x74, 0xFC, 0xC9, 100); + +// Name: System.Contact.MiddleName -- PKEY_Contact_MiddleName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 71 +DEFINE_PROPERTYKEY(PKEY_Contact_MiddleName, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 71); + +// Name: System.Contact.MobileTelephone -- PKEY_Contact_MobileTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 35 +DEFINE_PROPERTYKEY(PKEY_Contact_MobileTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 35); + +// Name: System.Contact.NickName -- PKEY_Contact_NickName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 74 +DEFINE_PROPERTYKEY(PKEY_Contact_NickName, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 74); + +// Name: System.Contact.OfficeLocation -- PKEY_Contact_OfficeLocation +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 7 +DEFINE_PROPERTYKEY(PKEY_Contact_OfficeLocation, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 7); + +// Name: System.Contact.OtherAddress -- PKEY_Contact_OtherAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 508161FA-313B-43D5-83A1-C1ACCF68622C, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddress, 0x508161FA, 0x313B, 0x43D5, 0x83, 0xA1, 0xC1, 0xAC, 0xCF, 0x68, 0x62, 0x2C, 100); + +// Name: System.Contact.OtherAddressCity -- PKEY_Contact_OtherAddressCity +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6E682923-7F7B-4F0C-A337-CFCA296687BF, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressCity, 0x6E682923, 0x7F7B, 0x4F0C, 0xA3, 0x37, 0xCF, 0xCA, 0x29, 0x66, 0x87, 0xBF, 100); + +// Name: System.Contact.OtherAddressCountry -- PKEY_Contact_OtherAddressCountry +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 8F167568-0AAE-4322-8ED9-6055B7B0E398, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressCountry, 0x8F167568, 0x0AAE, 0x4322, 0x8E, 0xD9, 0x60, 0x55, 0xB7, 0xB0, 0xE3, 0x98, 100); + +// Name: System.Contact.OtherAddressPostalCode -- PKEY_Contact_OtherAddressPostalCode +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 95C656C1-2ABF-4148-9ED3-9EC602E3B7CD, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressPostalCode, 0x95C656C1, 0x2ABF, 0x4148, 0x9E, 0xD3, 0x9E, 0xC6, 0x02, 0xE3, 0xB7, 0xCD, 100); + +// Name: System.Contact.OtherAddressPostOfficeBox -- PKEY_Contact_OtherAddressPostOfficeBox +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 8B26EA41-058F-43F6-AECC-4035681CE977, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressPostOfficeBox, 0x8B26EA41, 0x058F, 0x43F6, 0xAE, 0xCC, 0x40, 0x35, 0x68, 0x1C, 0xE9, 0x77, 100); + +// Name: System.Contact.OtherAddressState -- PKEY_Contact_OtherAddressState +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 71B377D6-E570-425F-A170-809FAE73E54E, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressState, 0x71B377D6, 0xE570, 0x425F, 0xA1, 0x70, 0x80, 0x9F, 0xAE, 0x73, 0xE5, 0x4E, 100); + +// Name: System.Contact.OtherAddressStreet -- PKEY_Contact_OtherAddressStreet +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: FF962609-B7D6-4999-862D-95180D529AEA, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressStreet, 0xFF962609, 0xB7D6, 0x4999, 0x86, 0x2D, 0x95, 0x18, 0x0D, 0x52, 0x9A, 0xEA, 100); + +// Name: System.Contact.PagerTelephone -- PKEY_Contact_PagerTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: D6304E01-F8F5-4F45-8B15-D024A6296789, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_PagerTelephone, 0xD6304E01, 0xF8F5, 0x4F45, 0x8B, 0x15, 0xD0, 0x24, 0xA6, 0x29, 0x67, 0x89, 100); + +// Name: System.Contact.PersonalTitle -- PKEY_Contact_PersonalTitle +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 69 +DEFINE_PROPERTYKEY(PKEY_Contact_PersonalTitle, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 69); + +// Name: System.Contact.PrimaryAddressCity -- PKEY_Contact_PrimaryAddressCity +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C8EA94F0-A9E3-4969-A94B-9C62A95324E0, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressCity, 0xC8EA94F0, 0xA9E3, 0x4969, 0xA9, 0x4B, 0x9C, 0x62, 0xA9, 0x53, 0x24, 0xE0, 100); + +// Name: System.Contact.PrimaryAddressCountry -- PKEY_Contact_PrimaryAddressCountry +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E53D799D-0F3F-466E-B2FF-74634A3CB7A4, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressCountry, 0xE53D799D, 0x0F3F, 0x466E, 0xB2, 0xFF, 0x74, 0x63, 0x4A, 0x3C, 0xB7, 0xA4, 100); + +// Name: System.Contact.PrimaryAddressPostalCode -- PKEY_Contact_PrimaryAddressPostalCode +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 18BBD425-ECFD-46EF-B612-7B4A6034EDA0, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressPostalCode, 0x18BBD425, 0xECFD, 0x46EF, 0xB6, 0x12, 0x7B, 0x4A, 0x60, 0x34, 0xED, 0xA0, 100); + +// Name: System.Contact.PrimaryAddressPostOfficeBox -- PKEY_Contact_PrimaryAddressPostOfficeBox +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: DE5EF3C7-46E1-484E-9999-62C5308394C1, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressPostOfficeBox, 0xDE5EF3C7, 0x46E1, 0x484E, 0x99, 0x99, 0x62, 0xC5, 0x30, 0x83, 0x94, 0xC1, 100); + +// Name: System.Contact.PrimaryAddressState -- PKEY_Contact_PrimaryAddressState +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F1176DFE-7138-4640-8B4C-AE375DC70A6D, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressState, 0xF1176DFE, 0x7138, 0x4640, 0x8B, 0x4C, 0xAE, 0x37, 0x5D, 0xC7, 0x0A, 0x6D, 100); + +// Name: System.Contact.PrimaryAddressStreet -- PKEY_Contact_PrimaryAddressStreet +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 63C25B20-96BE-488F-8788-C09C407AD812, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressStreet, 0x63C25B20, 0x96BE, 0x488F, 0x87, 0x88, 0xC0, 0x9C, 0x40, 0x7A, 0xD8, 0x12, 100); + +// Name: System.Contact.PrimaryEmailAddress -- PKEY_Contact_PrimaryEmailAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 48 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryEmailAddress, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 48); + +// Name: System.Contact.PrimaryTelephone -- PKEY_Contact_PrimaryTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 25 +DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 25); + +// Name: System.Contact.Profession -- PKEY_Contact_Profession +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 7268AF55-1CE4-4F6E-A41F-B6E4EF10E4A9, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_Profession, 0x7268AF55, 0x1CE4, 0x4F6E, 0xA4, 0x1F, 0xB6, 0xE4, 0xEF, 0x10, 0xE4, 0xA9, 100); + +// Name: System.Contact.SpouseName -- PKEY_Contact_SpouseName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 9D2408B6-3167-422B-82B0-F583B7A7CFE3, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_SpouseName, 0x9D2408B6, 0x3167, 0x422B, 0x82, 0xB0, 0xF5, 0x83, 0xB7, 0xA7, 0xCF, 0xE3, 100); + +// Name: System.Contact.Suffix -- PKEY_Contact_Suffix +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 73 +DEFINE_PROPERTYKEY(PKEY_Contact_Suffix, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 73); + +// Name: System.Contact.TelexNumber -- PKEY_Contact_TelexNumber +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C554493C-C1F7-40C1-A76C-EF8C0614003E, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_TelexNumber, 0xC554493C, 0xC1F7, 0x40C1, 0xA7, 0x6C, 0xEF, 0x8C, 0x06, 0x14, 0x00, 0x3E, 100); + +// Name: System.Contact.TTYTDDTelephone -- PKEY_Contact_TTYTDDTelephone +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: AAF16BAC-2B55-45E6-9F6D-415EB94910DF, 100 +DEFINE_PROPERTYKEY(PKEY_Contact_TTYTDDTelephone, 0xAAF16BAC, 0x2B55, 0x45E6, 0x9F, 0x6D, 0x41, 0x5E, 0xB9, 0x49, 0x10, 0xDF, 100); + +// Name: System.Contact.WebPage -- PKEY_Contact_WebPage +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 18 +DEFINE_PROPERTYKEY(PKEY_Contact_WebPage, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 18); + +//----------------------------------------------------------------------------- +// Core properties + + + +// Name: System.AcquisitionID -- PKEY_AcquisitionID +// Type: Int32 -- VT_I4 +// FormatID: 65A98875-3C80-40AB-ABBC-EFDAF77DBEE2, 100 +// +// Hash to determine acquisition session. +DEFINE_PROPERTYKEY(PKEY_AcquisitionID, 0x65A98875, 0x3C80, 0x40AB, 0xAB, 0xBC, 0xEF, 0xDA, 0xF7, 0x7D, 0xBE, 0xE2, 100); + +// Name: System.ApplicationName -- PKEY_ApplicationName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) Legacy code may treat this as VT_LPSTR. +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 18 (PIDSI_APPNAME) +// +// +DEFINE_PROPERTYKEY(PKEY_ApplicationName, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 18); + +// Name: System.Author -- PKEY_Author +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) Legacy code may treat this as VT_LPSTR. +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 4 (PIDSI_AUTHOR) +// +// +DEFINE_PROPERTYKEY(PKEY_Author, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 4); + +// Name: System.Capacity -- PKEY_Capacity +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 3 (PID_VOLUME_CAPACITY) (Filesystem Volume Properties) +// +// The amount of total space in bytes. +DEFINE_PROPERTYKEY(PKEY_Capacity, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 3); + +// Name: System.Category -- PKEY_Category +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 2 (PIDDSI_CATEGORY) +// +// Legacy code treats this as VT_LPSTR. +DEFINE_PROPERTYKEY(PKEY_Category, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 2); + +// Name: System.Comment -- PKEY_Comment +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) Legacy code may treat this as VT_LPSTR. +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 6 (PIDSI_COMMENTS) +// +// Comments. +DEFINE_PROPERTYKEY(PKEY_Comment, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 6); + +// Name: System.Company -- PKEY_Company +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 15 (PIDDSI_COMPANY) +// +// The company or publisher. +DEFINE_PROPERTYKEY(PKEY_Company, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 15); + +// Name: System.ComputerName -- PKEY_ComputerName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 5 (PID_COMPUTERNAME) +// +// +DEFINE_PROPERTYKEY(PKEY_ComputerName, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 5); + +// Name: System.ContainedItems -- PKEY_ContainedItems +// Type: Multivalue Guid -- VT_VECTOR | VT_CLSID (For variants: VT_ARRAY | VT_CLSID) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 29 +// +// The list of type of items, this item contains. For example, this item contains urls, attachments etc. +// This is represented as a vector array of GUIDs where each GUID represents certain type. +DEFINE_PROPERTYKEY(PKEY_ContainedItems, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 29); + +// Name: System.ContentStatus -- PKEY_ContentStatus +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 27 +DEFINE_PROPERTYKEY(PKEY_ContentStatus, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 27); + +// Name: System.ContentType -- PKEY_ContentType +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 26 +DEFINE_PROPERTYKEY(PKEY_ContentType, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 26); + +// Name: System.Copyright -- PKEY_Copyright +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 11 (PIDMSI_COPYRIGHT) +// +// +DEFINE_PROPERTYKEY(PKEY_Copyright, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11); + +// Name: System.DateAccessed -- PKEY_DateAccessed +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 16 (PID_STG_ACCESSTIME) +// +// The time of the last access to the item. The Indexing Service friendly name is 'access'. +DEFINE_PROPERTYKEY(PKEY_DateAccessed, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 16); + +// Name: System.DateAcquired -- PKEY_DateAcquired +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 2CBAA8F5-D81F-47CA-B17A-F8D822300131, 100 +// +// The time the file entered the system via acquisition. This is not the same as System.DateImported. +// Examples are when pictures are acquired from a camera, or when music is purchased online. +DEFINE_PROPERTYKEY(PKEY_DateAcquired, 0x2CBAA8F5, 0xD81F, 0x47CA, 0xB1, 0x7A, 0xF8, 0xD8, 0x22, 0x30, 0x01, 0x31, 100); + +// Name: System.DateArchived -- PKEY_DateArchived +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 43F8D7B7-A444-4F87-9383-52271C9B915C, 100 +DEFINE_PROPERTYKEY(PKEY_DateArchived, 0x43F8D7B7, 0xA444, 0x4F87, 0x93, 0x83, 0x52, 0x27, 0x1C, 0x9B, 0x91, 0x5C, 100); + +// Name: System.DateCompleted -- PKEY_DateCompleted +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 72FAB781-ACDA-43E5-B155-B2434F85E678, 100 +DEFINE_PROPERTYKEY(PKEY_DateCompleted, 0x72FAB781, 0xACDA, 0x43E5, 0xB1, 0x55, 0xB2, 0x43, 0x4F, 0x85, 0xE6, 0x78, 100); + +// Name: System.DateCreated -- PKEY_DateCreated +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 15 (PID_STG_CREATETIME) +// +// The date and time the item was created. The Indexing Service friendly name is 'create'. +DEFINE_PROPERTYKEY(PKEY_DateCreated, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 15); + +// Name: System.DateImported -- PKEY_DateImported +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 18258 +// +// The time the file is imported into a separate database. This is not the same as System.DateAcquired. (Eg, 2003:05:22 13:55:04) +DEFINE_PROPERTYKEY(PKEY_DateImported, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18258); + +// Name: System.DateModified -- PKEY_DateModified +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 14 (PID_STG_WRITETIME) +// +// The date and time of the last write to the item. The Indexing Service friendly name is 'write'. +DEFINE_PROPERTYKEY(PKEY_DateModified, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 14); + +// Name: System.DueDate -- PKEY_DueDate +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 3F8472B5-E0AF-4DB2-8071-C53FE76AE7CE, 100 +DEFINE_PROPERTYKEY(PKEY_DueDate, 0x3F8472B5, 0xE0AF, 0x4DB2, 0x80, 0x71, 0xC5, 0x3F, 0xE7, 0x6A, 0xE7, 0xCE, 100); + +// Name: System.EndDate -- PKEY_EndDate +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: C75FAA05-96FD-49E7-9CB4-9F601082D553, 100 +DEFINE_PROPERTYKEY(PKEY_EndDate, 0xC75FAA05, 0x96FD, 0x49E7, 0x9C, 0xB4, 0x9F, 0x60, 0x10, 0x82, 0xD5, 0x53, 100); + +// Name: System.FileAllocationSize -- PKEY_FileAllocationSize +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 18 (PID_STG_ALLOCSIZE) +// +// +DEFINE_PROPERTYKEY(PKEY_FileAllocationSize, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 18); + +// Name: System.FileAttributes -- PKEY_FileAttributes +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 13 (PID_STG_ATTRIBUTES) +// +// This is the WIN32_FIND_DATA dwFileAttributes for the file-based item. +DEFINE_PROPERTYKEY(PKEY_FileAttributes, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 13); + +// Name: System.FileCount -- PKEY_FileCount +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 12 +// +// +DEFINE_PROPERTYKEY(PKEY_FileCount, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 12); + +// Name: System.FileDescription -- PKEY_FileDescription +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 3 (PIDVSI_FileDescription) +// +// This is a user-friendly description of the file. +DEFINE_PROPERTYKEY(PKEY_FileDescription, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 3); + +// Name: System.FileExtension -- PKEY_FileExtension +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E4F10A3C-49E6-405D-8288-A23BD4EEAA6C, 100 +// +// This is the file extension of the file based item, including the leading period. +// +// If System.FileName is VT_EMPTY, then this property should be too. Otherwise, it should be derived +// appropriately by the data source from System.FileName. If System.FileName does not have a file +// extension, this value should be VT_EMPTY. +// +// To obtain the type of any item (including an item that is not a file), use System.ItemType. +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" ".txt" +// "\\server\share\mydir\goodnews.doc" ".doc" +// "\\server\share\numbers.xls" ".xls" +// "\\server\share\folder" VT_EMPTY +// "c:\foo\MyFolder" VT_EMPTY +// [desktop] VT_EMPTY +DEFINE_PROPERTYKEY(PKEY_FileExtension, 0xE4F10A3C, 0x49E6, 0x405D, 0x82, 0x88, 0xA2, 0x3B, 0xD4, 0xEE, 0xAA, 0x6C, 100); + +// Name: System.FileFRN -- PKEY_FileFRN +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 21 (PID_STG_FRN) +// +// This is the unique file ID, also known as the File Reference Number. For a given file, this is the same value +// as is found in the structure variable FILE_ID_BOTH_DIR_INFO.FileId, via GetFileInformationByHandleEx(). +DEFINE_PROPERTYKEY(PKEY_FileFRN, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 21); + +// Name: System.FileName -- PKEY_FileName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 41CF5AE0-F75A-4806-BD87-59C7D9248EB9, 100 +// +// This is the file name (including extension) of the file. +// +// It is possible that the item might not exist on a filesystem (ie, it may not be opened +// using CreateFile). Nonetheless, if the item is represented as a file from the logical sense +// (and its name follows standard Win32 file-naming syntax), then the data source should emit this property. +// +// If an item is not a file, then the value for this property is VT_EMPTY. See +// System.ItemNameDisplay. +// +// This has the same value as System.ParsingName for items that are provided by the Shell's file folder. +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" "hello.txt" +// "\\server\share\mydir\goodnews.doc" "goodnews.doc" +// "\\server\share\numbers.xls" "numbers.xls" +// "c:\foo\MyFolder" "MyFolder" +// (email message) VT_EMPTY +// (song on portable device) "song.wma" +DEFINE_PROPERTYKEY(PKEY_FileName, 0x41CF5AE0, 0xF75A, 0x4806, 0xBD, 0x87, 0x59, 0xC7, 0xD9, 0x24, 0x8E, 0xB9, 100); + +// Name: System.FileOwner -- PKEY_FileOwner +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_Misc) 9B174B34-40FF-11D2-A27E-00C04FC30871, 4 (PID_MISC_OWNER) +// +// This is the owner of the file, according to the file system. +DEFINE_PROPERTYKEY(PKEY_FileOwner, 0x9B174B34, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4); + +// Name: System.FileVersion -- PKEY_FileVersion +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 4 (PIDVSI_FileVersion) +// +// +DEFINE_PROPERTYKEY(PKEY_FileVersion, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 4); + +// Name: System.FindData -- PKEY_FindData +// Type: Buffer -- VT_VECTOR | VT_UI1 (For variants: VT_ARRAY | VT_UI1) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 0 (PID_FINDDATA) +// +// WIN32_FIND_DATAW in buffer of bytes. +DEFINE_PROPERTYKEY(PKEY_FindData, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 0); + +// Name: System.FlagColor -- PKEY_FlagColor +// Type: UInt16 -- VT_UI2 +// FormatID: 67DF94DE-0CA7-4D6F-B792-053A3E4F03CF, 100 +// +// +DEFINE_PROPERTYKEY(PKEY_FlagColor, 0x67DF94DE, 0x0CA7, 0x4D6F, 0xB7, 0x92, 0x05, 0x3A, 0x3E, 0x4F, 0x03, 0xCF, 100); + +// Possible discrete values for PKEY_FlagColor are: +#define FLAGCOLOR_PURPLE 1u +#define FLAGCOLOR_ORANGE 2u +#define FLAGCOLOR_GREEN 3u +#define FLAGCOLOR_YELLOW 4u +#define FLAGCOLOR_BLUE 5u +#define FLAGCOLOR_RED 6u + +// Name: System.FlagColorText -- PKEY_FlagColorText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 45EAE747-8E2A-40AE-8CBF-CA52ABA6152A, 100 +// +// This is the user-friendly form of System.FlagColor. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_FlagColorText, 0x45EAE747, 0x8E2A, 0x40AE, 0x8C, 0xBF, 0xCA, 0x52, 0xAB, 0xA6, 0x15, 0x2A, 100); + +// Name: System.FlagStatus -- PKEY_FlagStatus +// Type: Int32 -- VT_I4 +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 12 +// +// Status of Flag. Values: (0=none 1=white 2=Red). cdoPR_FLAG_STATUS +DEFINE_PROPERTYKEY(PKEY_FlagStatus, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 12); + +// Possible discrete values for PKEY_FlagStatus are: +#define FLAGSTATUS_NOTFLAGGED 0l +#define FLAGSTATUS_COMPLETED 1l +#define FLAGSTATUS_FOLLOWUP 2l + +// Name: System.FlagStatusText -- PKEY_FlagStatusText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: DC54FD2E-189D-4871-AA01-08C2F57A4ABC, 100 +// +// This is the user-friendly form of System.FlagStatus. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_FlagStatusText, 0xDC54FD2E, 0x189D, 0x4871, 0xAA, 0x01, 0x08, 0xC2, 0xF5, 0x7A, 0x4A, 0xBC, 100); + +// Name: System.FreeSpace -- PKEY_FreeSpace +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 2 (PID_VOLUME_FREE) (Filesystem Volume Properties) +// +// The amount of free space in bytes. +DEFINE_PROPERTYKEY(PKEY_FreeSpace, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 2); + +// Name: System.Identity -- PKEY_Identity +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A26F4AFC-7346-4299-BE47-EB1AE613139F, 100 +DEFINE_PROPERTYKEY(PKEY_Identity, 0xA26F4AFC, 0x7346, 0x4299, 0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F, 100); + +// Name: System.Importance -- PKEY_Importance +// Type: Int32 -- VT_I4 +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 11 +DEFINE_PROPERTYKEY(PKEY_Importance, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 11); + +// Possible range of values for PKEY_Importance are: +#define IMPORTANCE_LOW_MIN 0l +#define IMPORTANCE_LOW_SET 1l +#define IMPORTANCE_LOW_MAX 1l + +#define IMPORTANCE_NORMAL_MIN 2l +#define IMPORTANCE_NORMAL_SET 3l +#define IMPORTANCE_NORMAL_MAX 4l + +#define IMPORTANCE_HIGH_MIN 5l +#define IMPORTANCE_HIGH_SET 5l +#define IMPORTANCE_HIGH_MAX 5l + + +// Name: System.ImportanceText -- PKEY_ImportanceText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A3B29791-7713-4E1D-BB40-17DB85F01831, 100 +// +// This is the user-friendly form of System.Importance. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_ImportanceText, 0xA3B29791, 0x7713, 0x4E1D, 0xBB, 0x40, 0x17, 0xDB, 0x85, 0xF0, 0x18, 0x31, 100); + +// Name: System.IsAttachment -- PKEY_IsAttachment +// Type: Boolean -- VT_BOOL +// FormatID: F23F425C-71A1-4FA8-922F-678EA4A60408, 100 +// +// Identifies if this item is an attachment. +DEFINE_PROPERTYKEY(PKEY_IsAttachment, 0xF23F425C, 0x71A1, 0x4FA8, 0x92, 0x2F, 0x67, 0x8E, 0xA4, 0xA6, 0x04, 0x08, 100); + +// Name: System.IsDeleted -- PKEY_IsDeleted +// Type: Boolean -- VT_BOOL +// FormatID: 5CDA5FC8-33EE-4FF3-9094-AE7BD8868C4D, 100 +DEFINE_PROPERTYKEY(PKEY_IsDeleted, 0x5CDA5FC8, 0x33EE, 0x4FF3, 0x90, 0x94, 0xAE, 0x7B, 0xD8, 0x86, 0x8C, 0x4D, 100); + +// Name: System.IsFlagged -- PKEY_IsFlagged +// Type: Boolean -- VT_BOOL +// FormatID: 5DA84765-E3FF-4278-86B0-A27967FBDD03, 100 +DEFINE_PROPERTYKEY(PKEY_IsFlagged, 0x5DA84765, 0xE3FF, 0x4278, 0x86, 0xB0, 0xA2, 0x79, 0x67, 0xFB, 0xDD, 0x03, 100); + +// Name: System.IsFlaggedComplete -- PKEY_IsFlaggedComplete +// Type: Boolean -- VT_BOOL +// FormatID: A6F360D2-55F9-48DE-B909-620E090A647C, 100 +DEFINE_PROPERTYKEY(PKEY_IsFlaggedComplete, 0xA6F360D2, 0x55F9, 0x48DE, 0xB9, 0x09, 0x62, 0x0E, 0x09, 0x0A, 0x64, 0x7C, 100); + +// Name: System.IsIncomplete -- PKEY_IsIncomplete +// Type: Boolean -- VT_BOOL +// FormatID: 346C8BD1-2E6A-4C45-89A4-61B78E8E700F, 100 +// +// Identifies if the message was not completely received for some error condition. +DEFINE_PROPERTYKEY(PKEY_IsIncomplete, 0x346C8BD1, 0x2E6A, 0x4C45, 0x89, 0xA4, 0x61, 0xB7, 0x8E, 0x8E, 0x70, 0x0F, 100); + +// Name: System.IsRead -- PKEY_IsRead +// Type: Boolean -- VT_BOOL +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 10 +// +// Has the item been read? +DEFINE_PROPERTYKEY(PKEY_IsRead, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 10); + +// Name: System.IsSendToTarget -- PKEY_IsSendToTarget +// Type: Boolean -- VT_BOOL +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 33 +// +// Provided by certain shell folders. Return TRUE if the folder is a valid Send To target. +DEFINE_PROPERTYKEY(PKEY_IsSendToTarget, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 33); + +// Name: System.IsShared -- PKEY_IsShared +// Type: Boolean -- VT_BOOL +// FormatID: EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902, 100 +// +// Is this item shared? +DEFINE_PROPERTYKEY(PKEY_IsShared, 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 100); + +// Name: System.ItemAuthors -- PKEY_ItemAuthors +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: D0A04F0A-462A-48A4-BB2F-3706E88DBD7D, 100 +// +// This is the generic list of authors associated with an item. +// +// For example, the artist name for a track is the item author. +DEFINE_PROPERTYKEY(PKEY_ItemAuthors, 0xD0A04F0A, 0x462A, 0x48A4, 0xBB, 0x2F, 0x37, 0x06, 0xE8, 0x8D, 0xBD, 0x7D, 100); + +// Name: System.ItemDate -- PKEY_ItemDate +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: F7DB74B4-4287-4103-AFBA-F1B13DCD75CF, 100 +// +// This is the main date for an item. The date of interest. +// +// For example, for photos this maps to System.Photo.DateTaken. +DEFINE_PROPERTYKEY(PKEY_ItemDate, 0xF7DB74B4, 0x4287, 0x4103, 0xAF, 0xBA, 0xF1, 0xB1, 0x3D, 0xCD, 0x75, 0xCF, 100); + +// Name: System.ItemFolderNameDisplay -- PKEY_ItemFolderNameDisplay +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 2 (PID_STG_DIRECTORY) +// +// This is the user-friendly display name of the parent folder of an item. +// +// If System.ItemFolderPathDisplay is VT_EMPTY, then this property should be too. Otherwise, it +// should be derived appropriately by the data source from System.ItemFolderPathDisplay. +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" "bar" +// "\\server\share\mydir\goodnews.doc" "mydir" +// "\\server\share\numbers.xls" "share" +// "c:\foo\MyFolder" "foo" +// "/Mailbox Account/Inbox/'Re: Hello!'" "Inbox" +DEFINE_PROPERTYKEY(PKEY_ItemFolderNameDisplay, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 2); + +// Name: System.ItemFolderPathDisplay -- PKEY_ItemFolderPathDisplay +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 6 +// +// This is the user-friendly display path of the parent folder of an item. +// +// If System.ItemPathDisplay is VT_EMPTY, then this property should be too. Otherwise, it should +// be derived appropriately by the data source from System.ItemPathDisplay. +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" "c:\foo\bar" +// "\\server\share\mydir\goodnews.doc" "\\server\share\mydir" +// "\\server\share\numbers.xls" "\\server\share" +// "c:\foo\MyFolder" "c:\foo" +// "/Mailbox Account/Inbox/'Re: Hello!'" "/Mailbox Account/Inbox" +DEFINE_PROPERTYKEY(PKEY_ItemFolderPathDisplay, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 6); + +// Name: System.ItemFolderPathDisplayNarrow -- PKEY_ItemFolderPathDisplayNarrow +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: DABD30ED-0043-4789-A7F8-D013A4736622, 100 +// +// This is the user-friendly display path of the parent folder of an item. The format of the string +// should be tailored such that the folder name comes first, to optimize for a narrow viewing column. +// +// If the folder is a file folder, the value includes localized names if they are present. +// +// If System.ItemFolderPathDisplay is VT_EMPTY, then this property should be too. Otherwise, it should +// be derived appropriately by the data source from System.ItemFolderPathDisplay. +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" "bar (c:\foo)" +// "\\server\share\mydir\goodnews.doc" "mydir (\\server\share)" +// "\\server\share\numbers.xls" "share (\\server)" +// "c:\foo\MyFolder" "foo (c:\)" +// "/Mailbox Account/Inbox/'Re: Hello!'" "Inbox (/Mailbox Account)" +DEFINE_PROPERTYKEY(PKEY_ItemFolderPathDisplayNarrow, 0xDABD30ED, 0x0043, 0x4789, 0xA7, 0xF8, 0xD0, 0x13, 0xA4, 0x73, 0x66, 0x22, 100); + +// Name: System.ItemName -- PKEY_ItemName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6B8DA074-3B5C-43BC-886F-0A2CDCE00B6F, 100 +// +// This is the base-name of the System.ItemNameDisplay. +// +// If the item is a file this property +// includes the extension in all cases, and will be localized if a localized name is available. +// +// If the item is a message, then the value of this property does not include the forwarding or +// reply prefixes (see System.ItemNamePrefix). +DEFINE_PROPERTYKEY(PKEY_ItemName, 0x6B8DA074, 0x3B5C, 0x43BC, 0x88, 0x6F, 0x0A, 0x2C, 0xDC, 0xE0, 0x0B, 0x6F, 100); + +// Name: System.ItemNameDisplay -- PKEY_ItemNameDisplay +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 10 (PID_STG_NAME) +// +// This is the display name in "most complete" form. This is the best effort unique representation +// of the name of an item that makes sense for end users to read. It is the concatentation of +// System.ItemNamePrefix and System.ItemName. +// +// If the item is a file this property +// includes the extension in all cases, and will be localized if a localized name is available. +// +// There are acceptable cases when System.FileName is not VT_EMPTY, yet the value of this property +// is completely different. Email messages are a key example. If the item is an email message, +// the item name is likely the subject. In that case, the value must be the concatenation of the +// System.ItemNamePrefix and System.ItemName. Since the value of System.ItemNamePrefix excludes +// any trailing whitespace, the concatenation must include a whitespace when generating System.ItemNameDisplay. +// +// Note that this property is not guaranteed to be unique, but the idea is to promote the most likely +// candidate that can be unique and also makes sense for end users. For example, for documents, you +// might think about using System.Title as the System.ItemNameDisplay, but in practice the title of +// the documents may not be useful or unique enough to be of value as the sole System.ItemNameDisplay. +// Instead, providing the value of System.FileName as the value of System.ItemNameDisplay is a better +// candidate. In Windows Mail, the emails are stored in the file system as .eml files and the +// System.FileName for those files are not human-friendly as they contain GUIDs. In this example, +// promoting System.Subject as System.ItemNameDisplay makes more sense. +// +// Compatibility notes: +// +// Shell folder implementations on Vista: use PKEY_ItemNameDisplay for the name column when +// you want Explorer to call ISF::GetDisplayNameOf(SHGDN_NORMAL) to get the value of the name. Use +// another PKEY (like PKEY_ItemName) when you want Explorer to call either the folder's property store or +// ISF2::GetDetailsEx in order to get the value of the name. +// +// Shell folder implementations on XP: the first column needs to be the name column, and Explorer +// will call ISF::GetDisplayNameOf to get the value of the name. The PKEY/SCID does not matter. +// +// Example values: +// +// File: "hello.txt" +// Message: "Re: Let's talk about Tom's argyle socks!" +// Device folder: "song.wma" +// Folder: "Documents" +DEFINE_PROPERTYKEY(PKEY_ItemNameDisplay, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 10); + +// Name: System.ItemNamePrefix -- PKEY_ItemNamePrefix +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: D7313FF1-A77A-401C-8C99-3DBDD68ADD36, 100 +// +// This is the prefix of an item, used for email messages. +// where the subject begins with "Re:" which is the prefix. +// +// If the item is a file, then the value of this property is VT_EMPTY. +// +// If the item is a message, then the value of this property is the forwarding or reply +// prefixes (including delimiting colon, but no whitespace), or VT_EMPTY if there is no prefix. +// +// Example values: +// +// System.ItemNamePrefix System.ItemName System.ItemNameDisplay +// --------------------- ------------------- ---------------------- +// VT_EMPTY "Great day" "Great day" +// "Re:" "Great day" "Re: Great day" +// "Fwd: " "Monthly budget" "Fwd: Monthly budget" +// VT_EMPTY "accounts.xls" "accounts.xls" +DEFINE_PROPERTYKEY(PKEY_ItemNamePrefix, 0xD7313FF1, 0xA77A, 0x401C, 0x8C, 0x99, 0x3D, 0xBD, 0xD6, 0x8A, 0xDD, 0x36, 100); + +// Name: System.ItemParticipants -- PKEY_ItemParticipants +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: D4D0AA16-9948-41A4-AA85-D97FF9646993, 100 +// +// This is the generic list of people associated with an item and who contributed +// to the item. +// +// For example, this is the combination of people in the To list, Cc list and +// sender of an email message. +DEFINE_PROPERTYKEY(PKEY_ItemParticipants, 0xD4D0AA16, 0x9948, 0x41A4, 0xAA, 0x85, 0xD9, 0x7F, 0xF9, 0x64, 0x69, 0x93, 100); + +// Name: System.ItemPathDisplay -- PKEY_ItemPathDisplay +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 7 +// +// This is the user-friendly display path to the item. +// +// If the item is a file or folder this property +// includes the extension in all cases, and will be localized if a localized name is available. +// +// For other items,this is the user-friendly equivalent, assuming the item exists in hierarchical storage. +// +// Unlike System.ItemUrl, this property value does not include the URL scheme. +// +// To parse an item path, use System.ItemUrl or System.ParsingPath. To reference shell +// namespace items using shell APIs, use System.ParsingPath. +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" "c:\foo\bar\hello.txt" +// "\\server\share\mydir\goodnews.doc" "\\server\share\mydir\goodnews.doc" +// "\\server\share\numbers.xls" "\\server\share\numbers.xls" +// "c:\foo\MyFolder" "c:\foo\MyFolder" +// "/Mailbox Account/Inbox/'Re: Hello!'" "/Mailbox Account/Inbox/'Re: Hello!'" +DEFINE_PROPERTYKEY(PKEY_ItemPathDisplay, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 7); + +// Name: System.ItemPathDisplayNarrow -- PKEY_ItemPathDisplayNarrow +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 8 +// +// This is the user-friendly display path to the item. The format of the string should be +// tailored such that the name comes first, to optimize for a narrow viewing column. +// +// If the item is a file, the value excludes the file extension, and includes localized names if they are present. +// If the item is a message, the value includes the System.ItemNamePrefix. +// +// To parse an item path, use System.ItemUrl or System.ParsingPath. +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" "hello (c:\foo\bar)" +// "\\server\share\mydir\goodnews.doc" "goodnews (\\server\share\mydir)" +// "\\server\share\folder" "folder (\\server\share)" +// "c:\foo\MyFolder" "MyFolder (c:\foo)" +// "/Mailbox Account/Inbox/'Re: Hello!'" "Re: Hello! (/Mailbox Account/Inbox)" +DEFINE_PROPERTYKEY(PKEY_ItemPathDisplayNarrow, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 8); + +// Name: System.ItemType -- PKEY_ItemType +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 11 +// +// This is the canonical type of the item and is intended to be programmatically +// parsed. +// +// If there is no canonical type, the value is VT_EMPTY. +// +// If the item is a file (ie, System.FileName is not VT_EMPTY), the value is the same as +// System.FileExtension. +// +// Use System.ItemTypeText when you want to display the type to end users in a view. (If +// the item is a file, passing the System.ItemType value to PSFormatForDisplay will +// result in the same value as System.ItemTypeText.) +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" ".txt" +// "\\server\share\mydir\goodnews.doc" ".doc" +// "\\server\share\folder" "Directory" +// "c:\foo\MyFolder" "Directory" +// [desktop] "Folder" +// "/Mailbox Account/Inbox/'Re: Hello!'" "MAPI/IPM.Message" +DEFINE_PROPERTYKEY(PKEY_ItemType, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 11); + +// Name: System.ItemTypeText -- PKEY_ItemTypeText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 4 (PID_STG_STORAGETYPE) +// +// This is the user friendly type name of the item. This is not intended to be +// programmatically parsed. +// +// If System.ItemType is VT_EMPTY, the value of this property is also VT_EMPTY. +// +// If the item is a file, the value of this property is the same as if you passed the +// file's System.ItemType value to PSFormatForDisplay. +// +// This property should not be confused with System.Kind, where System.Kind is a high-level +// user friendly kind name. For example, for a document, System.Kind = "Document" and +// System.Item.Type = ".doc" and System.Item.TypeText = "Microsoft Word Document" +// +// Example values: +// +// If the path is... The property value is... +// ----------------- ------------------------ +// "c:\foo\bar\hello.txt" "Text File" +// "\\server\share\mydir\goodnews.doc" "Microsoft Word Document" +// "\\server\share\folder" "File Folder" +// "c:\foo\MyFolder" "File Folder" +// "/Mailbox Account/Inbox/'Re: Hello!'" "Outlook E-Mail Message" +DEFINE_PROPERTYKEY(PKEY_ItemTypeText, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 4); + +// Name: System.ItemUrl -- PKEY_ItemUrl +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 9 (PROPID_QUERY_VIRTUALPATH) +// +// This always represents a well formed URL that points to the item. +// +// To reference shell namespace items using shell APIs, use System.ParsingPath. +// +// Example values: +// +// Files: "file:///c:/foo/bar/hello.txt" +// "csc://{GUID}/..." +// Messages: "mapi://..." +DEFINE_PROPERTYKEY(PKEY_ItemUrl, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 9); + +// Name: System.Keywords -- PKEY_Keywords +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) Legacy code may treat this as VT_LPSTR. +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 5 (PIDSI_KEYWORDS) +// +// The keywords for the item. Also referred to as tags. +DEFINE_PROPERTYKEY(PKEY_Keywords, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 5); + +// Name: System.Kind -- PKEY_Kind +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: 1E3EE840-BC2B-476C-8237-2ACD1A839B22, 3 +// +// System.Kind is used to map extensions to various .Search folders. +// Extensions are mapped to Kinds at HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\KindMap +// The list of kinds is not extensible. +DEFINE_PROPERTYKEY(PKEY_Kind, 0x1E3EE840, 0xBC2B, 0x476C, 0x82, 0x37, 0x2A, 0xCD, 0x1A, 0x83, 0x9B, 0x22, 3); + +// Possible discrete values for PKEY_Kind are: +#define KIND_CALENDAR L"calendar" +#define KIND_COMMUNICATION L"communication" +#define KIND_CONTACT L"contact" +#define KIND_DOCUMENT L"document" +#define KIND_EMAIL L"email" +#define KIND_FEED L"feed" +#define KIND_FOLDER L"folder" +#define KIND_GAME L"game" +#define KIND_INSTANTMESSAGE L"instantmessage" +#define KIND_JOURNAL L"journal" +#define KIND_LINK L"link" +#define KIND_MOVIE L"movie" +#define KIND_MUSIC L"music" +#define KIND_NOTE L"note" +#define KIND_PICTURE L"picture" +#define KIND_PROGRAM L"program" +#define KIND_RECORDEDTV L"recordedtv" +#define KIND_SEARCHFOLDER L"searchfolder" +#define KIND_TASK L"task" +#define KIND_VIDEO L"video" +#define KIND_WEBHISTORY L"webhistory" + +// Name: System.KindText -- PKEY_KindText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F04BEF95-C585-4197-A2B7-DF46FDC9EE6D, 100 +// +// This is the user-friendly form of System.Kind. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_KindText, 0xF04BEF95, 0xC585, 0x4197, 0xA2, 0xB7, 0xDF, 0x46, 0xFD, 0xC9, 0xEE, 0x6D, 100); + +// Name: System.Language -- PKEY_Language +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 28 +// +// +DEFINE_PROPERTYKEY(PKEY_Language, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 28); + +// Name: System.MileageInformation -- PKEY_MileageInformation +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: FDF84370-031A-4ADD-9E91-0D775F1C6605, 100 +DEFINE_PROPERTYKEY(PKEY_MileageInformation, 0xFDF84370, 0x031A, 0x4ADD, 0x9E, 0x91, 0x0D, 0x77, 0x5F, 0x1C, 0x66, 0x05, 100); + +// Name: System.MIMEType -- PKEY_MIMEType +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 0B63E350-9CCC-11D0-BCDB-00805FCCCE04, 5 +// +// The MIME type. Eg, for EML files: 'message/rfc822'. +DEFINE_PROPERTYKEY(PKEY_MIMEType, 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 5); + +// Name: System.Null -- PKEY_Null +// Type: Null -- VT_NULL +// FormatID: 00000000-0000-0000-0000-000000000000, 0 +DEFINE_PROPERTYKEY(PKEY_Null, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0); + +// Name: System.OfflineAvailability -- PKEY_OfflineAvailability +// Type: UInt32 -- VT_UI4 +// FormatID: A94688B6-7D9F-4570-A648-E3DFC0AB2B3F, 100 +DEFINE_PROPERTYKEY(PKEY_OfflineAvailability, 0xA94688B6, 0x7D9F, 0x4570, 0xA6, 0x48, 0xE3, 0xDF, 0xC0, 0xAB, 0x2B, 0x3F, 100); + +// Possible discrete values for PKEY_OfflineAvailability are: +#define OFFLINEAVAILABILITY_NOT_AVAILABLE 0ul +#define OFFLINEAVAILABILITY_AVAILABLE 1ul +#define OFFLINEAVAILABILITY_ALWAYS_AVAILABLE 2ul + +// Name: System.OfflineStatus -- PKEY_OfflineStatus +// Type: UInt32 -- VT_UI4 +// FormatID: 6D24888F-4718-4BDA-AFED-EA0FB4386CD8, 100 +DEFINE_PROPERTYKEY(PKEY_OfflineStatus, 0x6D24888F, 0x4718, 0x4BDA, 0xAF, 0xED, 0xEA, 0x0F, 0xB4, 0x38, 0x6C, 0xD8, 100); + +// Possible discrete values for PKEY_OfflineStatus are: +#define OFFLINESTATUS_ONLINE 0ul +#define OFFLINESTATUS_OFFLINE 1ul +#define OFFLINESTATUS_OFFLINE_FORCED 2ul +#define OFFLINESTATUS_OFFLINE_SLOW 3ul +#define OFFLINESTATUS_OFFLINE_ERROR 4ul +#define OFFLINESTATUS_OFFLINE_ITEM_VERSION_CONFLICT 5ul +#define OFFLINESTATUS_OFFLINE_SUSPENDED 6ul + +// Name: System.OriginalFileName -- PKEY_OriginalFileName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 6 +// +// +DEFINE_PROPERTYKEY(PKEY_OriginalFileName, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 6); + +// Name: System.ParentalRating -- PKEY_ParentalRating +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 21 (PIDMSI_PARENTAL_RATING) +// +// +DEFINE_PROPERTYKEY(PKEY_ParentalRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 21); + +// Name: System.ParentalRatingReason -- PKEY_ParentalRatingReason +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 10984E0A-F9F2-4321-B7EF-BAF195AF4319, 100 +DEFINE_PROPERTYKEY(PKEY_ParentalRatingReason, 0x10984E0A, 0xF9F2, 0x4321, 0xB7, 0xEF, 0xBA, 0xF1, 0x95, 0xAF, 0x43, 0x19, 100); + +// Name: System.ParentalRatingsOrganization -- PKEY_ParentalRatingsOrganization +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A7FE0840-1344-46F0-8D37-52ED712A4BF9, 100 +DEFINE_PROPERTYKEY(PKEY_ParentalRatingsOrganization, 0xA7FE0840, 0x1344, 0x46F0, 0x8D, 0x37, 0x52, 0xED, 0x71, 0x2A, 0x4B, 0xF9, 100); + +// Name: System.ParsingBindContext -- PKEY_ParsingBindContext +// Type: Any -- VT_NULL Legacy code may treat this as VT_UNKNOWN. +// FormatID: DFB9A04D-362F-4CA3-B30B-0254B17B5B84, 100 +// +// used to get the IBindCtx for an item for parsing +DEFINE_PROPERTYKEY(PKEY_ParsingBindContext, 0xDFB9A04D, 0x362F, 0x4CA3, 0xB3, 0x0B, 0x02, 0x54, 0xB1, 0x7B, 0x5B, 0x84, 100); + +// Name: System.ParsingName -- PKEY_ParsingName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 24 +// +// The shell namespace name of an item relative to a parent folder. This name may be passed to +// IShellFolder::ParseDisplayName() of the parent shell folder. +DEFINE_PROPERTYKEY(PKEY_ParsingName, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 24); + +// Name: System.ParsingPath -- PKEY_ParsingPath +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 30 +// +// This is the shell namespace path to the item. This path may be passed to +// SHParseDisplayName to parse the path to the correct shell folder. +// +// If the item is a file, the value is identical to System.ItemPathDisplay. +// +// If the item cannot be accessed through the shell namespace, this value is VT_EMPTY. +DEFINE_PROPERTYKEY(PKEY_ParsingPath, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 30); + +// Name: System.PerceivedType -- PKEY_PerceivedType +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 9 +// +// The perceived type of a shell item, based upon its canonical type. +DEFINE_PROPERTYKEY(PKEY_PerceivedType, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 9); + +// For the enumerated values of PKEY_PerceivedType, see the PERCEIVED_TYPE_* values in shtypes.idl. + +// Name: System.PercentFull -- PKEY_PercentFull +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 5 (Filesystem Volume Properties) +// +// The amount filled as a percentage, multiplied by 100 (ie, the valid range is 0 through 100). +DEFINE_PROPERTYKEY(PKEY_PercentFull, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 5); + +// Name: System.Priority -- PKEY_Priority +// Type: UInt16 -- VT_UI2 +// FormatID: 9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4, 5 +// +// +DEFINE_PROPERTYKEY(PKEY_Priority, 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 5); + +// Possible discrete values for PKEY_Priority are: +#define PRIORITY_PROP_LOW 0u +#define PRIORITY_PROP_NORMAL 1u +#define PRIORITY_PROP_HIGH 2u + +// Name: System.PriorityText -- PKEY_PriorityText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: D98BE98B-B86B-4095-BF52-9D23B2E0A752, 100 +// +// This is the user-friendly form of System.Priority. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_PriorityText, 0xD98BE98B, 0xB86B, 0x4095, 0xBF, 0x52, 0x9D, 0x23, 0xB2, 0xE0, 0xA7, 0x52, 100); + +// Name: System.Project -- PKEY_Project +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 39A7F922-477C-48DE-8BC8-B28441E342E3, 100 +DEFINE_PROPERTYKEY(PKEY_Project, 0x39A7F922, 0x477C, 0x48DE, 0x8B, 0xC8, 0xB2, 0x84, 0x41, 0xE3, 0x42, 0xE3, 100); + +// Name: System.ProviderItemID -- PKEY_ProviderItemID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F21D9941-81F0-471A-ADEE-4E74B49217ED, 100 +// +// +DEFINE_PROPERTYKEY(PKEY_ProviderItemID, 0xF21D9941, 0x81F0, 0x471A, 0xAD, 0xEE, 0x4E, 0x74, 0xB4, 0x92, 0x17, 0xED, 100); + +// Name: System.Rating -- PKEY_Rating +// Type: UInt32 -- VT_UI4 +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 9 (PIDMSI_RATING) +// +// Indicates the users preference rating of an item on a scale of 0-99 (0 = unrated, 1-12 = One Star, +// 13-37 = Two Stars, 38-62 = Three Stars, 63-87 = Four Stars, 88-99 = Five Stars). +DEFINE_PROPERTYKEY(PKEY_Rating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9); + +// Use the following constants to convert between visual stars and the ratings value: +#define RATING_UNRATED_MIN 0ul +#define RATING_UNRATED_SET 0ul +#define RATING_UNRATED_MAX 0ul + +#define RATING_ONE_STAR_MIN 1ul +#define RATING_ONE_STAR_SET 1ul +#define RATING_ONE_STAR_MAX 12ul + +#define RATING_TWO_STARS_MIN 13ul +#define RATING_TWO_STARS_SET 25ul +#define RATING_TWO_STARS_MAX 37ul + +#define RATING_THREE_STARS_MIN 38ul +#define RATING_THREE_STARS_SET 50ul +#define RATING_THREE_STARS_MAX 62ul + +#define RATING_FOUR_STARS_MIN 63ul +#define RATING_FOUR_STARS_SET 75ul +#define RATING_FOUR_STARS_MAX 87ul + +#define RATING_FIVE_STARS_MIN 88ul +#define RATING_FIVE_STARS_SET 99ul +#define RATING_FIVE_STARS_MAX 99ul + + +// Name: System.RatingText -- PKEY_RatingText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 90197CA7-FD8F-4E8C-9DA3-B57E1E609295, 100 +// +// This is the user-friendly form of System.Rating. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_RatingText, 0x90197CA7, 0xFD8F, 0x4E8C, 0x9D, 0xA3, 0xB5, 0x7E, 0x1E, 0x60, 0x92, 0x95, 100); + +// Name: System.Sensitivity -- PKEY_Sensitivity +// Type: UInt16 -- VT_UI2 +// FormatID: F8D3F6AC-4874-42CB-BE59-AB454B30716A, 100 +// +// +DEFINE_PROPERTYKEY(PKEY_Sensitivity, 0xF8D3F6AC, 0x4874, 0x42CB, 0xBE, 0x59, 0xAB, 0x45, 0x4B, 0x30, 0x71, 0x6A, 100); + +// Possible discrete values for PKEY_Sensitivity are: +#define SENSITIVITY_PROP_NORMAL 0u +#define SENSITIVITY_PROP_PERSONAL 1u +#define SENSITIVITY_PROP_PRIVATE 2u +#define SENSITIVITY_PROP_CONFIDENTIAL 3u + +// Name: System.SensitivityText -- PKEY_SensitivityText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: D0C7F054-3F72-4725-8527-129A577CB269, 100 +// +// This is the user-friendly form of System.Sensitivity. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_SensitivityText, 0xD0C7F054, 0x3F72, 0x4725, 0x85, 0x27, 0x12, 0x9A, 0x57, 0x7C, 0xB2, 0x69, 100); + +// Name: System.SFGAOFlags -- PKEY_SFGAOFlags +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 25 +// +// IShellFolder::GetAttributesOf flags, with SFGAO_PKEYSFGAOMASK attributes masked out. +DEFINE_PROPERTYKEY(PKEY_SFGAOFlags, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 25); + +// Name: System.SharedWith -- PKEY_SharedWith +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902, 200 +// +// Who is the item shared with? +DEFINE_PROPERTYKEY(PKEY_SharedWith, 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 200); + +// Name: System.ShareUserRating -- PKEY_ShareUserRating +// Type: UInt32 -- VT_UI4 +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 12 (PIDMSI_SHARE_USER_RATING) +// +// +DEFINE_PROPERTYKEY(PKEY_ShareUserRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12); + +// Name: System.Shell.OmitFromView -- PKEY_Shell_OmitFromView +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: DE35258C-C695-4CBC-B982-38B0AD24CED0, 2 +// +// Set this to a string value of 'True' to omit this item from shell views +DEFINE_PROPERTYKEY(PKEY_Shell_OmitFromView, 0xDE35258C, 0xC695, 0x4CBC, 0xB9, 0x82, 0x38, 0xB0, 0xAD, 0x24, 0xCE, 0xD0, 2); + +// Name: System.SimpleRating -- PKEY_SimpleRating +// Type: UInt32 -- VT_UI4 +// FormatID: A09F084E-AD41-489F-8076-AA5BE3082BCA, 100 +// +// Indicates the users preference rating of an item on a scale of 0-5 (0=unrated, 1=One Star, 2=Two Stars, 3=Three Stars, +// 4=Four Stars, 5=Five Stars) +DEFINE_PROPERTYKEY(PKEY_SimpleRating, 0xA09F084E, 0xAD41, 0x489F, 0x80, 0x76, 0xAA, 0x5B, 0xE3, 0x08, 0x2B, 0xCA, 100); + +// Name: System.Size -- PKEY_Size +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 12 (PID_STG_SIZE) +// +// +DEFINE_PROPERTYKEY(PKEY_Size, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 12); + +// Name: System.SoftwareUsed -- PKEY_SoftwareUsed +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 305 +// +// PropertyTagSoftwareUsed +DEFINE_PROPERTYKEY(PKEY_SoftwareUsed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 305); + +// Name: System.SourceItem -- PKEY_SourceItem +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 668CDFA5-7A1B-4323-AE4B-E527393A1D81, 100 +DEFINE_PROPERTYKEY(PKEY_SourceItem, 0x668CDFA5, 0x7A1B, 0x4323, 0xAE, 0x4B, 0xE5, 0x27, 0x39, 0x3A, 0x1D, 0x81, 100); + +// Name: System.StartDate -- PKEY_StartDate +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 48FD6EC8-8A12-4CDF-A03E-4EC5A511EDDE, 100 +DEFINE_PROPERTYKEY(PKEY_StartDate, 0x48FD6EC8, 0x8A12, 0x4CDF, 0xA0, 0x3E, 0x4E, 0xC5, 0xA5, 0x11, 0xED, 0xDE, 100); + +// Name: System.Status -- PKEY_Status +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_IntSite) 000214A1-0000-0000-C000-000000000046, 9 +DEFINE_PROPERTYKEY(PKEY_Status, 0x000214A1, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 9); + +// Name: System.Subject -- PKEY_Subject +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 3 (PIDSI_SUBJECT) +// +// +DEFINE_PROPERTYKEY(PKEY_Subject, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 3); + +// Name: System.Thumbnail -- PKEY_Thumbnail +// Type: Clipboard -- VT_CF +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 17 (PIDSI_THUMBNAIL) +// +// A data that represents the thumbnail in VT_CF format. +DEFINE_PROPERTYKEY(PKEY_Thumbnail, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 17); + +// Name: System.ThumbnailCacheId -- PKEY_ThumbnailCacheId +// Type: UInt64 -- VT_UI8 +// FormatID: 446D16B1-8DAD-4870-A748-402EA43D788C, 100 +// +// Unique value that can be used as a key to cache thumbnails. The value changes when the name, volume, or data modified +// of an item changes. +DEFINE_PROPERTYKEY(PKEY_ThumbnailCacheId, 0x446D16B1, 0x8DAD, 0x4870, 0xA7, 0x48, 0x40, 0x2E, 0xA4, 0x3D, 0x78, 0x8C, 100); + +// Name: System.ThumbnailStream -- PKEY_ThumbnailStream +// Type: Stream -- VT_STREAM +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 27 +// +// Data that represents the thumbnail in VT_STREAM format that GDI+/WindowsCodecs supports (jpg, png, etc). +DEFINE_PROPERTYKEY(PKEY_ThumbnailStream, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 27); + +// Name: System.Title -- PKEY_Title +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) Legacy code may treat this as VT_LPSTR. +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 2 (PIDSI_TITLE) +// +// Title of item. +DEFINE_PROPERTYKEY(PKEY_Title, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 2); + +// Name: System.TotalFileSize -- PKEY_TotalFileSize +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 14 +// +// +DEFINE_PROPERTYKEY(PKEY_TotalFileSize, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 14); + +// Name: System.Trademarks -- PKEY_Trademarks +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 9 (PIDVSI_Trademarks) +// +// +DEFINE_PROPERTYKEY(PKEY_Trademarks, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 9); + +//----------------------------------------------------------------------------- +// Document properties + + + +// Name: System.Document.ByteCount -- PKEY_Document_ByteCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 4 (PIDDSI_BYTECOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_ByteCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 4); + +// Name: System.Document.CharacterCount -- PKEY_Document_CharacterCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 16 (PIDSI_CHARCOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_CharacterCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 16); + +// Name: System.Document.ClientID -- PKEY_Document_ClientID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 276D7BB0-5B34-4FB0-AA4B-158ED12A1809, 100 +DEFINE_PROPERTYKEY(PKEY_Document_ClientID, 0x276D7BB0, 0x5B34, 0x4FB0, 0xAA, 0x4B, 0x15, 0x8E, 0xD1, 0x2A, 0x18, 0x09, 100); + +// Name: System.Document.Contributor -- PKEY_Document_Contributor +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: F334115E-DA1B-4509-9B3D-119504DC7ABB, 100 +DEFINE_PROPERTYKEY(PKEY_Document_Contributor, 0xF334115E, 0xDA1B, 0x4509, 0x9B, 0x3D, 0x11, 0x95, 0x04, 0xDC, 0x7A, 0xBB, 100); + +// Name: System.Document.DateCreated -- PKEY_Document_DateCreated +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 12 (PIDSI_CREATE_DTM) +// +// This property is stored in the document, not obtained from the file system. +DEFINE_PROPERTYKEY(PKEY_Document_DateCreated, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 12); + +// Name: System.Document.DatePrinted -- PKEY_Document_DatePrinted +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 11 (PIDSI_LASTPRINTED) +// +// Legacy name: "DocLastPrinted". +DEFINE_PROPERTYKEY(PKEY_Document_DatePrinted, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 11); + +// Name: System.Document.DateSaved -- PKEY_Document_DateSaved +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 13 (PIDSI_LASTSAVE_DTM) +// +// Legacy name: "DocLastSavedTm". +DEFINE_PROPERTYKEY(PKEY_Document_DateSaved, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 13); + +// Name: System.Document.Division -- PKEY_Document_Division +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 1E005EE6-BF27-428B-B01C-79676ACD2870, 100 +DEFINE_PROPERTYKEY(PKEY_Document_Division, 0x1E005EE6, 0xBF27, 0x428B, 0xB0, 0x1C, 0x79, 0x67, 0x6A, 0xCD, 0x28, 0x70, 100); + +// Name: System.Document.DocumentID -- PKEY_Document_DocumentID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E08805C8-E395-40DF-80D2-54F0D6C43154, 100 +DEFINE_PROPERTYKEY(PKEY_Document_DocumentID, 0xE08805C8, 0xE395, 0x40DF, 0x80, 0xD2, 0x54, 0xF0, 0xD6, 0xC4, 0x31, 0x54, 100); + +// Name: System.Document.HiddenSlideCount -- PKEY_Document_HiddenSlideCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 9 (PIDDSI_HIDDENCOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_HiddenSlideCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 9); + +// Name: System.Document.LastAuthor -- PKEY_Document_LastAuthor +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 8 (PIDSI_LASTAUTHOR) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_LastAuthor, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 8); + +// Name: System.Document.LineCount -- PKEY_Document_LineCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 5 (PIDDSI_LINECOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_LineCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 5); + +// Name: System.Document.Manager -- PKEY_Document_Manager +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 14 (PIDDSI_MANAGER) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_Manager, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 14); + +// Name: System.Document.MultimediaClipCount -- PKEY_Document_MultimediaClipCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 10 (PIDDSI_MMCLIPCOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_MultimediaClipCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 10); + +// Name: System.Document.NoteCount -- PKEY_Document_NoteCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 8 (PIDDSI_NOTECOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_NoteCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 8); + +// Name: System.Document.PageCount -- PKEY_Document_PageCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 14 (PIDSI_PAGECOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_PageCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 14); + +// Name: System.Document.ParagraphCount -- PKEY_Document_ParagraphCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 6 (PIDDSI_PARCOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_ParagraphCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 6); + +// Name: System.Document.PresentationFormat -- PKEY_Document_PresentationFormat +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 3 (PIDDSI_PRESFORMAT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_PresentationFormat, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 3); + +// Name: System.Document.RevisionNumber -- PKEY_Document_RevisionNumber +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 9 (PIDSI_REVNUMBER) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_RevisionNumber, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 9); + +// Name: System.Document.Security -- PKEY_Document_Security +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 19 +// +// Access control information, from SummaryInfo propset +DEFINE_PROPERTYKEY(PKEY_Document_Security, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 19); + +// Name: System.Document.SlideCount -- PKEY_Document_SlideCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 7 (PIDDSI_SLIDECOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_SlideCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 7); + +// Name: System.Document.Template -- PKEY_Document_Template +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 7 (PIDSI_TEMPLATE) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_Template, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 7); + +// Name: System.Document.TotalEditingTime -- PKEY_Document_TotalEditingTime +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 10 (PIDSI_EDITTIME) +// +// 100ns units, not milliseconds. VT_FILETIME for IPropertySetStorage handlers (legacy) +DEFINE_PROPERTYKEY(PKEY_Document_TotalEditingTime, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 10); + +// Name: System.Document.Version -- PKEY_Document_Version +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 29 +DEFINE_PROPERTYKEY(PKEY_Document_Version, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 29); + +// Name: System.Document.WordCount -- PKEY_Document_WordCount +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 15 (PIDSI_WORDCOUNT) +// +// +DEFINE_PROPERTYKEY(PKEY_Document_WordCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 15); + + + +//----------------------------------------------------------------------------- +// DRM properties + +// Name: System.DRM.DatePlayExpires -- PKEY_DRM_DatePlayExpires +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 6 (PIDDRSI_PLAYEXPIRES) +// +// Indicates when play expires for digital rights management. +DEFINE_PROPERTYKEY(PKEY_DRM_DatePlayExpires, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 6); + +// Name: System.DRM.DatePlayStarts -- PKEY_DRM_DatePlayStarts +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 5 (PIDDRSI_PLAYSTARTS) +// +// Indicates when play starts for digital rights management. +DEFINE_PROPERTYKEY(PKEY_DRM_DatePlayStarts, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 5); + +// Name: System.DRM.Description -- PKEY_DRM_Description +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 3 (PIDDRSI_DESCRIPTION) +// +// Displays the description for digital rights management. +DEFINE_PROPERTYKEY(PKEY_DRM_Description, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 3); + +// Name: System.DRM.IsProtected -- PKEY_DRM_IsProtected +// Type: Boolean -- VT_BOOL +// FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 2 (PIDDRSI_PROTECTED) +// +// +DEFINE_PROPERTYKEY(PKEY_DRM_IsProtected, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 2); + +// Name: System.DRM.PlayCount -- PKEY_DRM_PlayCount +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 4 (PIDDRSI_PLAYCOUNT) +// +// Indicates the play count for digital rights management. +DEFINE_PROPERTYKEY(PKEY_DRM_PlayCount, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 4); + +//----------------------------------------------------------------------------- +// GPS properties + +// Name: System.GPS.Altitude -- PKEY_GPS_Altitude +// Type: Double -- VT_R8 +// FormatID: 827EDB4F-5B73-44A7-891D-FDFFABEA35CA, 100 +// +// Indicates the altitude based on the reference in PKEY_GPS_AltitudeRef. Calculated from PKEY_GPS_AltitudeNumerator and +// PKEY_GPS_AltitudeDenominator +DEFINE_PROPERTYKEY(PKEY_GPS_Altitude, 0x827EDB4F, 0x5B73, 0x44A7, 0x89, 0x1D, 0xFD, 0xFF, 0xAB, 0xEA, 0x35, 0xCA, 100); + +// Name: System.GPS.AltitudeDenominator -- PKEY_GPS_AltitudeDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 78342DCB-E358-4145-AE9A-6BFE4E0F9F51, 100 +// +// Denominator of PKEY_GPS_Altitude +DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeDenominator, 0x78342DCB, 0xE358, 0x4145, 0xAE, 0x9A, 0x6B, 0xFE, 0x4E, 0x0F, 0x9F, 0x51, 100); + +// Name: System.GPS.AltitudeNumerator -- PKEY_GPS_AltitudeNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 2DAD1EB7-816D-40D3-9EC3-C9773BE2AADE, 100 +// +// Numerator of PKEY_GPS_Altitude +DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeNumerator, 0x2DAD1EB7, 0x816D, 0x40D3, 0x9E, 0xC3, 0xC9, 0x77, 0x3B, 0xE2, 0xAA, 0xDE, 100); + +// Name: System.GPS.AltitudeRef -- PKEY_GPS_AltitudeRef +// Type: Byte -- VT_UI1 +// FormatID: 46AC629D-75EA-4515-867F-6DC4321C5844, 100 +// +// Indicates the reference for the altitude property. (eg: above sea level, below sea level, absolute value) +DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeRef, 0x46AC629D, 0x75EA, 0x4515, 0x86, 0x7F, 0x6D, 0xC4, 0x32, 0x1C, 0x58, 0x44, 100); + +// Name: System.GPS.AreaInformation -- PKEY_GPS_AreaInformation +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 972E333E-AC7E-49F1-8ADF-A70D07A9BCAB, 100 +// +// Represents the name of the GPS area +DEFINE_PROPERTYKEY(PKEY_GPS_AreaInformation, 0x972E333E, 0xAC7E, 0x49F1, 0x8A, 0xDF, 0xA7, 0x0D, 0x07, 0xA9, 0xBC, 0xAB, 100); + +// Name: System.GPS.Date -- PKEY_GPS_Date +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 3602C812-0F3B-45F0-85AD-603468D69423, 100 +// +// Date and time of the GPS record +DEFINE_PROPERTYKEY(PKEY_GPS_Date, 0x3602C812, 0x0F3B, 0x45F0, 0x85, 0xAD, 0x60, 0x34, 0x68, 0xD6, 0x94, 0x23, 100); + +// Name: System.GPS.DestBearing -- PKEY_GPS_DestBearing +// Type: Double -- VT_R8 +// FormatID: C66D4B3C-E888-47CC-B99F-9DCA3EE34DEA, 100 +// +// Indicates the bearing to the destination point. Calculated from PKEY_GPS_DestBearingNumerator and +// PKEY_GPS_DestBearingDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_DestBearing, 0xC66D4B3C, 0xE888, 0x47CC, 0xB9, 0x9F, 0x9D, 0xCA, 0x3E, 0xE3, 0x4D, 0xEA, 100); + +// Name: System.GPS.DestBearingDenominator -- PKEY_GPS_DestBearingDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 7ABCF4F8-7C3F-4988-AC91-8D2C2E97ECA5, 100 +// +// Denominator of PKEY_GPS_DestBearing +DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingDenominator, 0x7ABCF4F8, 0x7C3F, 0x4988, 0xAC, 0x91, 0x8D, 0x2C, 0x2E, 0x97, 0xEC, 0xA5, 100); + +// Name: System.GPS.DestBearingNumerator -- PKEY_GPS_DestBearingNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: BA3B1DA9-86EE-4B5D-A2A4-A271A429F0CF, 100 +// +// Numerator of PKEY_GPS_DestBearing +DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingNumerator, 0xBA3B1DA9, 0x86EE, 0x4B5D, 0xA2, 0xA4, 0xA2, 0x71, 0xA4, 0x29, 0xF0, 0xCF, 100); + +// Name: System.GPS.DestBearingRef -- PKEY_GPS_DestBearingRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 9AB84393-2A0F-4B75-BB22-7279786977CB, 100 +// +// Indicates the reference used for the giving the bearing to the destination point. (eg: true direction, magnetic direction) +DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingRef, 0x9AB84393, 0x2A0F, 0x4B75, 0xBB, 0x22, 0x72, 0x79, 0x78, 0x69, 0x77, 0xCB, 100); + +// Name: System.GPS.DestDistance -- PKEY_GPS_DestDistance +// Type: Double -- VT_R8 +// FormatID: A93EAE04-6804-4F24-AC81-09B266452118, 100 +// +// Indicates the distance to the destination point. Calculated from PKEY_GPS_DestDistanceNumerator and +// PKEY_GPS_DestDistanceDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_DestDistance, 0xA93EAE04, 0x6804, 0x4F24, 0xAC, 0x81, 0x09, 0xB2, 0x66, 0x45, 0x21, 0x18, 100); + +// Name: System.GPS.DestDistanceDenominator -- PKEY_GPS_DestDistanceDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 9BC2C99B-AC71-4127-9D1C-2596D0D7DCB7, 100 +// +// Denominator of PKEY_GPS_DestDistance +DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceDenominator, 0x9BC2C99B, 0xAC71, 0x4127, 0x9D, 0x1C, 0x25, 0x96, 0xD0, 0xD7, 0xDC, 0xB7, 100); + +// Name: System.GPS.DestDistanceNumerator -- PKEY_GPS_DestDistanceNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 2BDA47DA-08C6-4FE1-80BC-A72FC517C5D0, 100 +// +// Numerator of PKEY_GPS_DestDistance +DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceNumerator, 0x2BDA47DA, 0x08C6, 0x4FE1, 0x80, 0xBC, 0xA7, 0x2F, 0xC5, 0x17, 0xC5, 0xD0, 100); + +// Name: System.GPS.DestDistanceRef -- PKEY_GPS_DestDistanceRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: ED4DF2D3-8695-450B-856F-F5C1C53ACB66, 100 +// +// Indicates the unit used to express the distance to the destination. (eg: kilometers, miles, knots) +DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceRef, 0xED4DF2D3, 0x8695, 0x450B, 0x85, 0x6F, 0xF5, 0xC1, 0xC5, 0x3A, 0xCB, 0x66, 100); + +// Name: System.GPS.DestLatitude -- PKEY_GPS_DestLatitude +// Type: Multivalue Double -- VT_VECTOR | VT_R8 (For variants: VT_ARRAY | VT_R8) +// FormatID: 9D1D7CC5-5C39-451C-86B3-928E2D18CC47, 100 +// +// Indicates the latitude of the destination point. This is an array of three values. Index 0 is the degrees, index 1 +// is the minutes, index 2 is the seconds. Each is calculated from the values in PKEY_GPS_DestLatitudeNumerator and +// PKEY_GPS_DestLatitudeDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitude, 0x9D1D7CC5, 0x5C39, 0x451C, 0x86, 0xB3, 0x92, 0x8E, 0x2D, 0x18, 0xCC, 0x47, 100); + +// Name: System.GPS.DestLatitudeDenominator -- PKEY_GPS_DestLatitudeDenominator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: 3A372292-7FCA-49A7-99D5-E47BB2D4E7AB, 100 +// +// Denominator of PKEY_GPS_DestLatitude +DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeDenominator, 0x3A372292, 0x7FCA, 0x49A7, 0x99, 0xD5, 0xE4, 0x7B, 0xB2, 0xD4, 0xE7, 0xAB, 100); + +// Name: System.GPS.DestLatitudeNumerator -- PKEY_GPS_DestLatitudeNumerator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: ECF4B6F6-D5A6-433C-BB92-4076650FC890, 100 +// +// Numerator of PKEY_GPS_DestLatitude +DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeNumerator, 0xECF4B6F6, 0xD5A6, 0x433C, 0xBB, 0x92, 0x40, 0x76, 0x65, 0x0F, 0xC8, 0x90, 100); + +// Name: System.GPS.DestLatitudeRef -- PKEY_GPS_DestLatitudeRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CEA820B9-CE61-4885-A128-005D9087C192, 100 +// +// Indicates whether the latitude destination point is north or south latitude +DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeRef, 0xCEA820B9, 0xCE61, 0x4885, 0xA1, 0x28, 0x00, 0x5D, 0x90, 0x87, 0xC1, 0x92, 100); + +// Name: System.GPS.DestLongitude -- PKEY_GPS_DestLongitude +// Type: Multivalue Double -- VT_VECTOR | VT_R8 (For variants: VT_ARRAY | VT_R8) +// FormatID: 47A96261-CB4C-4807-8AD3-40B9D9DBC6BC, 100 +// +// Indicates the latitude of the destination point. This is an array of three values. Index 0 is the degrees, index 1 +// is the minutes, index 2 is the seconds. Each is calculated from the values in PKEY_GPS_DestLongitudeNumerator and +// PKEY_GPS_DestLongitudeDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitude, 0x47A96261, 0xCB4C, 0x4807, 0x8A, 0xD3, 0x40, 0xB9, 0xD9, 0xDB, 0xC6, 0xBC, 100); + +// Name: System.GPS.DestLongitudeDenominator -- PKEY_GPS_DestLongitudeDenominator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: 425D69E5-48AD-4900-8D80-6EB6B8D0AC86, 100 +// +// Denominator of PKEY_GPS_DestLongitude +DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeDenominator, 0x425D69E5, 0x48AD, 0x4900, 0x8D, 0x80, 0x6E, 0xB6, 0xB8, 0xD0, 0xAC, 0x86, 100); + +// Name: System.GPS.DestLongitudeNumerator -- PKEY_GPS_DestLongitudeNumerator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: A3250282-FB6D-48D5-9A89-DBCACE75CCCF, 100 +// +// Numerator of PKEY_GPS_DestLongitude +DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeNumerator, 0xA3250282, 0xFB6D, 0x48D5, 0x9A, 0x89, 0xDB, 0xCA, 0xCE, 0x75, 0xCC, 0xCF, 100); + +// Name: System.GPS.DestLongitudeRef -- PKEY_GPS_DestLongitudeRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 182C1EA6-7C1C-4083-AB4B-AC6C9F4ED128, 100 +// +// Indicates whether the longitude destination point is east or west longitude +DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeRef, 0x182C1EA6, 0x7C1C, 0x4083, 0xAB, 0x4B, 0xAC, 0x6C, 0x9F, 0x4E, 0xD1, 0x28, 100); + +// Name: System.GPS.Differential -- PKEY_GPS_Differential +// Type: UInt16 -- VT_UI2 +// FormatID: AAF4EE25-BD3B-4DD7-BFC4-47F77BB00F6D, 100 +// +// Indicates whether differential correction was applied to the GPS receiver +DEFINE_PROPERTYKEY(PKEY_GPS_Differential, 0xAAF4EE25, 0xBD3B, 0x4DD7, 0xBF, 0xC4, 0x47, 0xF7, 0x7B, 0xB0, 0x0F, 0x6D, 100); + +// Name: System.GPS.DOP -- PKEY_GPS_DOP +// Type: Double -- VT_R8 +// FormatID: 0CF8FB02-1837-42F1-A697-A7017AA289B9, 100 +// +// Indicates the GPS DOP (data degree of precision). Calculated from PKEY_GPS_DOPNumerator and PKEY_GPS_DOPDenominator +DEFINE_PROPERTYKEY(PKEY_GPS_DOP, 0x0CF8FB02, 0x1837, 0x42F1, 0xA6, 0x97, 0xA7, 0x01, 0x7A, 0xA2, 0x89, 0xB9, 100); + +// Name: System.GPS.DOPDenominator -- PKEY_GPS_DOPDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: A0BE94C5-50BA-487B-BD35-0654BE8881ED, 100 +// +// Denominator of PKEY_GPS_DOP +DEFINE_PROPERTYKEY(PKEY_GPS_DOPDenominator, 0xA0BE94C5, 0x50BA, 0x487B, 0xBD, 0x35, 0x06, 0x54, 0xBE, 0x88, 0x81, 0xED, 100); + +// Name: System.GPS.DOPNumerator -- PKEY_GPS_DOPNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 47166B16-364F-4AA0-9F31-E2AB3DF449C3, 100 +// +// Numerator of PKEY_GPS_DOP +DEFINE_PROPERTYKEY(PKEY_GPS_DOPNumerator, 0x47166B16, 0x364F, 0x4AA0, 0x9F, 0x31, 0xE2, 0xAB, 0x3D, 0xF4, 0x49, 0xC3, 100); + +// Name: System.GPS.ImgDirection -- PKEY_GPS_ImgDirection +// Type: Double -- VT_R8 +// FormatID: 16473C91-D017-4ED9-BA4D-B6BAA55DBCF8, 100 +// +// Indicates direction of the image when it was captured. Calculated from PKEY_GPS_ImgDirectionNumerator and +// PKEY_GPS_ImgDirectionDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirection, 0x16473C91, 0xD017, 0x4ED9, 0xBA, 0x4D, 0xB6, 0xBA, 0xA5, 0x5D, 0xBC, 0xF8, 100); + +// Name: System.GPS.ImgDirectionDenominator -- PKEY_GPS_ImgDirectionDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 10B24595-41A2-4E20-93C2-5761C1395F32, 100 +// +// Denominator of PKEY_GPS_ImgDirection +DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionDenominator, 0x10B24595, 0x41A2, 0x4E20, 0x93, 0xC2, 0x57, 0x61, 0xC1, 0x39, 0x5F, 0x32, 100); + +// Name: System.GPS.ImgDirectionNumerator -- PKEY_GPS_ImgDirectionNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: DC5877C7-225F-45F7-BAC7-E81334B6130A, 100 +// +// Numerator of PKEY_GPS_ImgDirection +DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionNumerator, 0xDC5877C7, 0x225F, 0x45F7, 0xBA, 0xC7, 0xE8, 0x13, 0x34, 0xB6, 0x13, 0x0A, 100); + +// Name: System.GPS.ImgDirectionRef -- PKEY_GPS_ImgDirectionRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A4AAA5B7-1AD0-445F-811A-0F8F6E67F6B5, 100 +// +// Indicates reference for giving the direction of the image when it was captured. (eg: true direction, magnetic direction) +DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionRef, 0xA4AAA5B7, 0x1AD0, 0x445F, 0x81, 0x1A, 0x0F, 0x8F, 0x6E, 0x67, 0xF6, 0xB5, 100); + +// Name: System.GPS.Latitude -- PKEY_GPS_Latitude +// Type: Multivalue Double -- VT_VECTOR | VT_R8 (For variants: VT_ARRAY | VT_R8) +// FormatID: 8727CFFF-4868-4EC6-AD5B-81B98521D1AB, 100 +// +// Indicates the latitude. This is an array of three values. Index 0 is the degrees, index 1 is the minutes, index 2 +// is the seconds. Each is calculated from the values in PKEY_GPS_LatitudeNumerator and PKEY_GPS_LatitudeDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_Latitude, 0x8727CFFF, 0x4868, 0x4EC6, 0xAD, 0x5B, 0x81, 0xB9, 0x85, 0x21, 0xD1, 0xAB, 100); + +// Name: System.GPS.LatitudeDenominator -- PKEY_GPS_LatitudeDenominator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: 16E634EE-2BFF-497B-BD8A-4341AD39EEB9, 100 +// +// Denominator of PKEY_GPS_Latitude +DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeDenominator, 0x16E634EE, 0x2BFF, 0x497B, 0xBD, 0x8A, 0x43, 0x41, 0xAD, 0x39, 0xEE, 0xB9, 100); + +// Name: System.GPS.LatitudeNumerator -- PKEY_GPS_LatitudeNumerator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: 7DDAAAD1-CCC8-41AE-B750-B2CB8031AEA2, 100 +// +// Numerator of PKEY_GPS_Latitude +DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeNumerator, 0x7DDAAAD1, 0xCCC8, 0x41AE, 0xB7, 0x50, 0xB2, 0xCB, 0x80, 0x31, 0xAE, 0xA2, 100); + +// Name: System.GPS.LatitudeRef -- PKEY_GPS_LatitudeRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 029C0252-5B86-46C7-ACA0-2769FFC8E3D4, 100 +// +// Indicates whether latitude is north or south latitude +DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeRef, 0x029C0252, 0x5B86, 0x46C7, 0xAC, 0xA0, 0x27, 0x69, 0xFF, 0xC8, 0xE3, 0xD4, 100); + +// Name: System.GPS.Longitude -- PKEY_GPS_Longitude +// Type: Multivalue Double -- VT_VECTOR | VT_R8 (For variants: VT_ARRAY | VT_R8) +// FormatID: C4C4DBB2-B593-466B-BBDA-D03D27D5E43A, 100 +// +// Indicates the longitude. This is an array of three values. Index 0 is the degrees, index 1 is the minutes, index 2 +// is the seconds. Each is calculated from the values in PKEY_GPS_LongitudeNumerator and PKEY_GPS_LongitudeDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_Longitude, 0xC4C4DBB2, 0xB593, 0x466B, 0xBB, 0xDA, 0xD0, 0x3D, 0x27, 0xD5, 0xE4, 0x3A, 100); + +// Name: System.GPS.LongitudeDenominator -- PKEY_GPS_LongitudeDenominator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: BE6E176C-4534-4D2C-ACE5-31DEDAC1606B, 100 +// +// Denominator of PKEY_GPS_Longitude +DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeDenominator, 0xBE6E176C, 0x4534, 0x4D2C, 0xAC, 0xE5, 0x31, 0xDE, 0xDA, 0xC1, 0x60, 0x6B, 100); + +// Name: System.GPS.LongitudeNumerator -- PKEY_GPS_LongitudeNumerator +// Type: Multivalue UInt32 -- VT_VECTOR | VT_UI4 (For variants: VT_ARRAY | VT_UI4) +// FormatID: 02B0F689-A914-4E45-821D-1DDA452ED2C4, 100 +// +// Numerator of PKEY_GPS_Longitude +DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeNumerator, 0x02B0F689, 0xA914, 0x4E45, 0x82, 0x1D, 0x1D, 0xDA, 0x45, 0x2E, 0xD2, 0xC4, 100); + +// Name: System.GPS.LongitudeRef -- PKEY_GPS_LongitudeRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 33DCF22B-28D5-464C-8035-1EE9EFD25278, 100 +// +// Indicates whether longitude is east or west longitude +DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeRef, 0x33DCF22B, 0x28D5, 0x464C, 0x80, 0x35, 0x1E, 0xE9, 0xEF, 0xD2, 0x52, 0x78, 100); + +// Name: System.GPS.MapDatum -- PKEY_GPS_MapDatum +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 2CA2DAE6-EDDC-407D-BEF1-773942ABFA95, 100 +// +// Indicates the geodetic survey data used by the GPS receiver +DEFINE_PROPERTYKEY(PKEY_GPS_MapDatum, 0x2CA2DAE6, 0xEDDC, 0x407D, 0xBE, 0xF1, 0x77, 0x39, 0x42, 0xAB, 0xFA, 0x95, 100); + +// Name: System.GPS.MeasureMode -- PKEY_GPS_MeasureMode +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A015ED5D-AAEA-4D58-8A86-3C586920EA0B, 100 +// +// Indicates the GPS measurement mode. (eg: 2-dimensional, 3-dimensional) +DEFINE_PROPERTYKEY(PKEY_GPS_MeasureMode, 0xA015ED5D, 0xAAEA, 0x4D58, 0x8A, 0x86, 0x3C, 0x58, 0x69, 0x20, 0xEA, 0x0B, 100); + +// Name: System.GPS.ProcessingMethod -- PKEY_GPS_ProcessingMethod +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 59D49E61-840F-4AA9-A939-E2099B7F6399, 100 +// +// Indicates the name of the method used for location finding +DEFINE_PROPERTYKEY(PKEY_GPS_ProcessingMethod, 0x59D49E61, 0x840F, 0x4AA9, 0xA9, 0x39, 0xE2, 0x09, 0x9B, 0x7F, 0x63, 0x99, 100); + +// Name: System.GPS.Satellites -- PKEY_GPS_Satellites +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 467EE575-1F25-4557-AD4E-B8B58B0D9C15, 100 +// +// Indicates the GPS satellites used for measurements +DEFINE_PROPERTYKEY(PKEY_GPS_Satellites, 0x467EE575, 0x1F25, 0x4557, 0xAD, 0x4E, 0xB8, 0xB5, 0x8B, 0x0D, 0x9C, 0x15, 100); + +// Name: System.GPS.Speed -- PKEY_GPS_Speed +// Type: Double -- VT_R8 +// FormatID: DA5D0862-6E76-4E1B-BABD-70021BD25494, 100 +// +// Indicates the speed of the GPS receiver movement. Calculated from PKEY_GPS_SpeedNumerator and +// PKEY_GPS_SpeedDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_Speed, 0xDA5D0862, 0x6E76, 0x4E1B, 0xBA, 0xBD, 0x70, 0x02, 0x1B, 0xD2, 0x54, 0x94, 100); + +// Name: System.GPS.SpeedDenominator -- PKEY_GPS_SpeedDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 7D122D5A-AE5E-4335-8841-D71E7CE72F53, 100 +// +// Denominator of PKEY_GPS_Speed +DEFINE_PROPERTYKEY(PKEY_GPS_SpeedDenominator, 0x7D122D5A, 0xAE5E, 0x4335, 0x88, 0x41, 0xD7, 0x1E, 0x7C, 0xE7, 0x2F, 0x53, 100); + +// Name: System.GPS.SpeedNumerator -- PKEY_GPS_SpeedNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: ACC9CE3D-C213-4942-8B48-6D0820F21C6D, 100 +// +// Numerator of PKEY_GPS_Speed +DEFINE_PROPERTYKEY(PKEY_GPS_SpeedNumerator, 0xACC9CE3D, 0xC213, 0x4942, 0x8B, 0x48, 0x6D, 0x08, 0x20, 0xF2, 0x1C, 0x6D, 100); + +// Name: System.GPS.SpeedRef -- PKEY_GPS_SpeedRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: ECF7F4C9-544F-4D6D-9D98-8AD79ADAF453, 100 +// +// Indicates the unit used to express the speed of the GPS receiver movement. (eg: kilometers per hour, +// miles per hour, knots). +DEFINE_PROPERTYKEY(PKEY_GPS_SpeedRef, 0xECF7F4C9, 0x544F, 0x4D6D, 0x9D, 0x98, 0x8A, 0xD7, 0x9A, 0xDA, 0xF4, 0x53, 100); + +// Name: System.GPS.Status -- PKEY_GPS_Status +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 125491F4-818F-46B2-91B5-D537753617B2, 100 +// +// Indicates the status of the GPS receiver when the image was recorded. (eg: measurement in progress, +// measurement interoperability). +DEFINE_PROPERTYKEY(PKEY_GPS_Status, 0x125491F4, 0x818F, 0x46B2, 0x91, 0xB5, 0xD5, 0x37, 0x75, 0x36, 0x17, 0xB2, 100); + +// Name: System.GPS.Track -- PKEY_GPS_Track +// Type: Double -- VT_R8 +// FormatID: 76C09943-7C33-49E3-9E7E-CDBA872CFADA, 100 +// +// Indicates the direction of the GPS receiver movement. Calculated from PKEY_GPS_TrackNumerator and +// PKEY_GPS_TrackDenominator. +DEFINE_PROPERTYKEY(PKEY_GPS_Track, 0x76C09943, 0x7C33, 0x49E3, 0x9E, 0x7E, 0xCD, 0xBA, 0x87, 0x2C, 0xFA, 0xDA, 100); + +// Name: System.GPS.TrackDenominator -- PKEY_GPS_TrackDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: C8D1920C-01F6-40C0-AC86-2F3A4AD00770, 100 +// +// Denominator of PKEY_GPS_Track +DEFINE_PROPERTYKEY(PKEY_GPS_TrackDenominator, 0xC8D1920C, 0x01F6, 0x40C0, 0xAC, 0x86, 0x2F, 0x3A, 0x4A, 0xD0, 0x07, 0x70, 100); + +// Name: System.GPS.TrackNumerator -- PKEY_GPS_TrackNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 702926F4-44A6-43E1-AE71-45627116893B, 100 +// +// Numerator of PKEY_GPS_Track +DEFINE_PROPERTYKEY(PKEY_GPS_TrackNumerator, 0x702926F4, 0x44A6, 0x43E1, 0xAE, 0x71, 0x45, 0x62, 0x71, 0x16, 0x89, 0x3B, 100); + +// Name: System.GPS.TrackRef -- PKEY_GPS_TrackRef +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 35DBE6FE-44C3-4400-AAAE-D2C799C407E8, 100 +// +// Indicates reference for the direction of the GPS receiver movement. (eg: true direction, magnetic direction) +DEFINE_PROPERTYKEY(PKEY_GPS_TrackRef, 0x35DBE6FE, 0x44C3, 0x4400, 0xAA, 0xAE, 0xD2, 0xC7, 0x99, 0xC4, 0x07, 0xE8, 100); + +// Name: System.GPS.VersionID -- PKEY_GPS_VersionID +// Type: Buffer -- VT_VECTOR | VT_UI1 (For variants: VT_ARRAY | VT_UI1) +// FormatID: 22704DA4-C6B2-4A99-8E56-F16DF8C92599, 100 +// +// Indicates the version of the GPS information +DEFINE_PROPERTYKEY(PKEY_GPS_VersionID, 0x22704DA4, 0xC6B2, 0x4A99, 0x8E, 0x56, 0xF1, 0x6D, 0xF8, 0xC9, 0x25, 0x99, 100); + +//----------------------------------------------------------------------------- +// Image properties + + + +// Name: System.Image.BitDepth -- PKEY_Image_BitDepth +// Type: UInt32 -- VT_UI4 +// FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 7 (PIDISI_BITDEPTH) +// +// +DEFINE_PROPERTYKEY(PKEY_Image_BitDepth, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7); + +// Name: System.Image.ColorSpace -- PKEY_Image_ColorSpace +// Type: UInt16 -- VT_UI2 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 40961 +// +// PropertyTagExifColorSpace +DEFINE_PROPERTYKEY(PKEY_Image_ColorSpace, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 40961); + +// Possible discrete values for PKEY_Image_ColorSpace are: +#define IMAGE_COLORSPACE_SRGB 1u +#define IMAGE_COLORSPACE_UNCALIBRATED 0xFFFFu + +// Name: System.Image.CompressedBitsPerPixel -- PKEY_Image_CompressedBitsPerPixel +// Type: Double -- VT_R8 +// FormatID: 364B6FA9-37AB-482A-BE2B-AE02F60D4318, 100 +// +// Calculated from PKEY_Image_CompressedBitsPerPixelNumerator and PKEY_Image_CompressedBitsPerPixelDenominator. +DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixel, 0x364B6FA9, 0x37AB, 0x482A, 0xBE, 0x2B, 0xAE, 0x02, 0xF6, 0x0D, 0x43, 0x18, 100); + +// Name: System.Image.CompressedBitsPerPixelDenominator -- PKEY_Image_CompressedBitsPerPixelDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 1F8844E1-24AD-4508-9DFD-5326A415CE02, 100 +// +// Denominator of PKEY_Image_CompressedBitsPerPixel. +DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixelDenominator, 0x1F8844E1, 0x24AD, 0x4508, 0x9D, 0xFD, 0x53, 0x26, 0xA4, 0x15, 0xCE, 0x02, 100); + +// Name: System.Image.CompressedBitsPerPixelNumerator -- PKEY_Image_CompressedBitsPerPixelNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: D21A7148-D32C-4624-8900-277210F79C0F, 100 +// +// Numerator of PKEY_Image_CompressedBitsPerPixel. +DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixelNumerator, 0xD21A7148, 0xD32C, 0x4624, 0x89, 0x00, 0x27, 0x72, 0x10, 0xF7, 0x9C, 0x0F, 100); + +// Name: System.Image.Compression -- PKEY_Image_Compression +// Type: UInt16 -- VT_UI2 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 259 +// +// Indicates the image compression level. PropertyTagCompression. +DEFINE_PROPERTYKEY(PKEY_Image_Compression, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 259); + +// Possible discrete values for PKEY_Image_Compression are: +#define IMAGE_COMPRESSION_UNCOMPRESSED 1u +#define IMAGE_COMPRESSION_CCITT_T3 2u +#define IMAGE_COMPRESSION_CCITT_T4 3u +#define IMAGE_COMPRESSION_CCITT_T6 4u +#define IMAGE_COMPRESSION_LZW 5u +#define IMAGE_COMPRESSION_JPEG 6u +#define IMAGE_COMPRESSION_PACKBITS 32773u + +// Name: System.Image.CompressionText -- PKEY_Image_CompressionText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 3F08E66F-2F44-4BB9-A682-AC35D2562322, 100 +// +// This is the user-friendly form of System.Image.Compression. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Image_CompressionText, 0x3F08E66F, 0x2F44, 0x4BB9, 0xA6, 0x82, 0xAC, 0x35, 0xD2, 0x56, 0x23, 0x22, 100); + +// Name: System.Image.Dimensions -- PKEY_Image_Dimensions +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 13 (PIDISI_DIMENSIONS) +// +// Indicates the dimensions of the image. +DEFINE_PROPERTYKEY(PKEY_Image_Dimensions, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13); + +// Name: System.Image.HorizontalResolution -- PKEY_Image_HorizontalResolution +// Type: Double -- VT_R8 +// FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 5 (PIDISI_RESOLUTIONX) +// +// +DEFINE_PROPERTYKEY(PKEY_Image_HorizontalResolution, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5); + +// Name: System.Image.HorizontalSize -- PKEY_Image_HorizontalSize +// Type: UInt32 -- VT_UI4 +// FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 3 (PIDISI_CX) +// +// +DEFINE_PROPERTYKEY(PKEY_Image_HorizontalSize, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3); + +// Name: System.Image.ImageID -- PKEY_Image_ImageID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 10DABE05-32AA-4C29-BF1A-63E2D220587F, 100 +DEFINE_PROPERTYKEY(PKEY_Image_ImageID, 0x10DABE05, 0x32AA, 0x4C29, 0xBF, 0x1A, 0x63, 0xE2, 0xD2, 0x20, 0x58, 0x7F, 100); + +// Name: System.Image.ResolutionUnit -- PKEY_Image_ResolutionUnit +// Type: Int16 -- VT_I2 +// FormatID: 19B51FA6-1F92-4A5C-AB48-7DF0ABD67444, 100 +DEFINE_PROPERTYKEY(PKEY_Image_ResolutionUnit, 0x19B51FA6, 0x1F92, 0x4A5C, 0xAB, 0x48, 0x7D, 0xF0, 0xAB, 0xD6, 0x74, 0x44, 100); + +// Name: System.Image.VerticalResolution -- PKEY_Image_VerticalResolution +// Type: Double -- VT_R8 +// FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 6 (PIDISI_RESOLUTIONY) +// +// +DEFINE_PROPERTYKEY(PKEY_Image_VerticalResolution, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6); + +// Name: System.Image.VerticalSize -- PKEY_Image_VerticalSize +// Type: UInt32 -- VT_UI4 +// FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 4 (PIDISI_CY) +// +// +DEFINE_PROPERTYKEY(PKEY_Image_VerticalSize, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4); + + + +//----------------------------------------------------------------------------- +// Journal properties + +// Name: System.Journal.Contacts -- PKEY_Journal_Contacts +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: DEA7C82C-1D89-4A66-9427-A4E3DEBABCB1, 100 +DEFINE_PROPERTYKEY(PKEY_Journal_Contacts, 0xDEA7C82C, 0x1D89, 0x4A66, 0x94, 0x27, 0xA4, 0xE3, 0xDE, 0xBA, 0xBC, 0xB1, 100); + +// Name: System.Journal.EntryType -- PKEY_Journal_EntryType +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 95BEB1FC-326D-4644-B396-CD3ED90E6DDF, 100 +DEFINE_PROPERTYKEY(PKEY_Journal_EntryType, 0x95BEB1FC, 0x326D, 0x4644, 0xB3, 0x96, 0xCD, 0x3E, 0xD9, 0x0E, 0x6D, 0xDF, 100); + +//----------------------------------------------------------------------------- +// Link properties + + + +// Name: System.Link.Comment -- PKEY_Link_Comment +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 5 +DEFINE_PROPERTYKEY(PKEY_Link_Comment, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 5); + +// Name: System.Link.DateVisited -- PKEY_Link_DateVisited +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 23 (PKEYs relating to URLs. Used by IE History.) +DEFINE_PROPERTYKEY(PKEY_Link_DateVisited, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 23); + +// Name: System.Link.Description -- PKEY_Link_Description +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 21 (PKEYs relating to URLs. Used by IE History.) +DEFINE_PROPERTYKEY(PKEY_Link_Description, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 21); + +// Name: System.Link.Status -- PKEY_Link_Status +// Type: Int32 -- VT_I4 +// FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 3 (PID_LINK_TARGET_TYPE) +// +// +DEFINE_PROPERTYKEY(PKEY_Link_Status, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 3); + +// Possible discrete values for PKEY_Link_Status are: +#define LINK_STATUS_RESOLVED 1l +#define LINK_STATUS_BROKEN 2l + +// Name: System.Link.TargetExtension -- PKEY_Link_TargetExtension +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: 7A7D76F4-B630-4BD7-95FF-37CC51A975C9, 2 +// +// The file extension of the link target. See System.File.Extension +DEFINE_PROPERTYKEY(PKEY_Link_TargetExtension, 0x7A7D76F4, 0xB630, 0x4BD7, 0x95, 0xFF, 0x37, 0xCC, 0x51, 0xA9, 0x75, 0xC9, 2); + +// Name: System.Link.TargetParsingPath -- PKEY_Link_TargetParsingPath +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 2 (PID_LINK_TARGET) +// +// This is the shell namespace path to the target of the link item. This path may be passed to +// SHParseDisplayName to parse the path to the correct shell folder. +// +// If the target item is a file, the value is identical to System.ItemPathDisplay. +// +// If the target item cannot be accessed through the shell namespace, this value is VT_EMPTY. +DEFINE_PROPERTYKEY(PKEY_Link_TargetParsingPath, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 2); + +// Name: System.Link.TargetSFGAOFlags -- PKEY_Link_TargetSFGAOFlags +// Type: UInt32 -- VT_UI4 +// FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 8 +// +// IShellFolder::GetAttributesOf flags for the target of a link, with SFGAO_PKEYSFGAOMASK +// attributes masked out. +DEFINE_PROPERTYKEY(PKEY_Link_TargetSFGAOFlags, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 8); + +//----------------------------------------------------------------------------- +// Media properties + + + +// Name: System.Media.AuthorUrl -- PKEY_Media_AuthorUrl +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 32 (PIDMSI_AUTHOR_URL) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_AuthorUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 32); + +// Name: System.Media.AverageLevel -- PKEY_Media_AverageLevel +// Type: UInt32 -- VT_UI4 +// FormatID: 09EDD5B6-B301-43C5-9990-D00302EFFD46, 100 +DEFINE_PROPERTYKEY(PKEY_Media_AverageLevel, 0x09EDD5B6, 0xB301, 0x43C5, 0x99, 0x90, 0xD0, 0x03, 0x02, 0xEF, 0xFD, 0x46, 100); + +// Name: System.Media.ClassPrimaryID -- PKEY_Media_ClassPrimaryID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 13 (PIDMSI_CLASS_PRIMARY_ID) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_ClassPrimaryID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13); + +// Name: System.Media.ClassSecondaryID -- PKEY_Media_ClassSecondaryID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 14 (PIDMSI_CLASS_SECONDARY_ID) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_ClassSecondaryID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 14); + +// Name: System.Media.CollectionGroupID -- PKEY_Media_CollectionGroupID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 24 (PIDMSI_COLLECTION_GROUP_ID) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_CollectionGroupID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 24); + +// Name: System.Media.CollectionID -- PKEY_Media_CollectionID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 25 (PIDMSI_COLLECTION_ID) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_CollectionID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 25); + +// Name: System.Media.ContentDistributor -- PKEY_Media_ContentDistributor +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 18 (PIDMSI_CONTENTDISTRIBUTOR) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_ContentDistributor, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 18); + +// Name: System.Media.ContentID -- PKEY_Media_ContentID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 26 (PIDMSI_CONTENT_ID) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_ContentID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 26); + +// Name: System.Media.CreatorApplication -- PKEY_Media_CreatorApplication +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 27 (PIDMSI_TOOL_NAME) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_CreatorApplication, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 27); + +// Name: System.Media.CreatorApplicationVersion -- PKEY_Media_CreatorApplicationVersion +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 28 (PIDMSI_TOOL_VERSION) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_CreatorApplicationVersion, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 28); + +// Name: System.Media.DateEncoded -- PKEY_Media_DateEncoded +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 2E4B640D-5019-46D8-8881-55414CC5CAA0, 100 +// +// DateTime is in UTC (in the doc, not file system). +DEFINE_PROPERTYKEY(PKEY_Media_DateEncoded, 0x2E4B640D, 0x5019, 0x46D8, 0x88, 0x81, 0x55, 0x41, 0x4C, 0xC5, 0xCA, 0xA0, 100); + +// Name: System.Media.DateReleased -- PKEY_Media_DateReleased +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: DE41CC29-6971-4290-B472-F59F2E2F31E2, 100 +DEFINE_PROPERTYKEY(PKEY_Media_DateReleased, 0xDE41CC29, 0x6971, 0x4290, 0xB4, 0x72, 0xF5, 0x9F, 0x2E, 0x2F, 0x31, 0xE2, 100); + +// Name: System.Media.Duration -- PKEY_Media_Duration +// Type: UInt64 -- VT_UI8 +// FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 3 (PIDASI_TIMELENGTH) +// +// 100ns units, not milliseconds +DEFINE_PROPERTYKEY(PKEY_Media_Duration, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3); + +// Name: System.Media.DVDID -- PKEY_Media_DVDID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 15 (PIDMSI_DVDID) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_DVDID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 15); + +// Name: System.Media.EncodedBy -- PKEY_Media_EncodedBy +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 36 (PIDMSI_ENCODED_BY) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_EncodedBy, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 36); + +// Name: System.Media.EncodingSettings -- PKEY_Media_EncodingSettings +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 37 (PIDMSI_ENCODING_SETTINGS) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_EncodingSettings, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 37); + +// Name: System.Media.FrameCount -- PKEY_Media_FrameCount +// Type: UInt32 -- VT_UI4 +// FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 12 (PIDISI_FRAMECOUNT) +// +// Indicates the frame count for the image. +DEFINE_PROPERTYKEY(PKEY_Media_FrameCount, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12); + +// Name: System.Media.MCDI -- PKEY_Media_MCDI +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 16 (PIDMSI_MCDI) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_MCDI, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 16); + +// Name: System.Media.MetadataContentProvider -- PKEY_Media_MetadataContentProvider +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 17 (PIDMSI_PROVIDER) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_MetadataContentProvider, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 17); + +// Name: System.Media.Producer -- PKEY_Media_Producer +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 22 (PIDMSI_PRODUCER) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_Producer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 22); + +// Name: System.Media.PromotionUrl -- PKEY_Media_PromotionUrl +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 33 (PIDMSI_PROMOTION_URL) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_PromotionUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 33); + +// Name: System.Media.ProtectionType -- PKEY_Media_ProtectionType +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 38 +// +// If media is protected, how is it protected? +DEFINE_PROPERTYKEY(PKEY_Media_ProtectionType, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 38); + +// Name: System.Media.ProviderRating -- PKEY_Media_ProviderRating +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 39 +// +// Rating (0 - 99) supplied by metadata provider +DEFINE_PROPERTYKEY(PKEY_Media_ProviderRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 39); + +// Name: System.Media.ProviderStyle -- PKEY_Media_ProviderStyle +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 40 +// +// Style of music or video, supplied by metadata provider +DEFINE_PROPERTYKEY(PKEY_Media_ProviderStyle, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 40); + +// Name: System.Media.Publisher -- PKEY_Media_Publisher +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 30 (PIDMSI_PUBLISHER) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_Publisher, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 30); + +// Name: System.Media.SubscriptionContentId -- PKEY_Media_SubscriptionContentId +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 9AEBAE7A-9644-487D-A92C-657585ED751A, 100 +DEFINE_PROPERTYKEY(PKEY_Media_SubscriptionContentId, 0x9AEBAE7A, 0x9644, 0x487D, 0xA9, 0x2C, 0x65, 0x75, 0x85, 0xED, 0x75, 0x1A, 100); + +// Name: System.Media.SubTitle -- PKEY_Media_SubTitle +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 38 (PIDSI_MUSIC_SUB_TITLE) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_SubTitle, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 38); + +// Name: System.Media.UniqueFileIdentifier -- PKEY_Media_UniqueFileIdentifier +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 35 (PIDMSI_UNIQUE_FILE_IDENTIFIER) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_UniqueFileIdentifier, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 35); + +// Name: System.Media.UserNoAutoInfo -- PKEY_Media_UserNoAutoInfo +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 41 +// +// If true, do NOT alter this file's metadata. Set by user. +DEFINE_PROPERTYKEY(PKEY_Media_UserNoAutoInfo, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 41); + +// Name: System.Media.UserWebUrl -- PKEY_Media_UserWebUrl +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 34 (PIDMSI_USER_WEB_URL) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_UserWebUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 34); + +// Name: System.Media.Writer -- PKEY_Media_Writer +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 23 (PIDMSI_WRITER) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_Writer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 23); + +// Name: System.Media.Year -- PKEY_Media_Year +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 5 (PIDSI_MUSIC_YEAR) +// +// +DEFINE_PROPERTYKEY(PKEY_Media_Year, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 5); + +//----------------------------------------------------------------------------- +// Message properties + + + +// Name: System.Message.AttachmentContents -- PKEY_Message_AttachmentContents +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 3143BF7C-80A8-4854-8880-E2E40189BDD0, 100 +DEFINE_PROPERTYKEY(PKEY_Message_AttachmentContents, 0x3143BF7C, 0x80A8, 0x4854, 0x88, 0x80, 0xE2, 0xE4, 0x01, 0x89, 0xBD, 0xD0, 100); + +// Name: System.Message.AttachmentNames -- PKEY_Message_AttachmentNames +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 21 +// +// The names of the attachments in a message +DEFINE_PROPERTYKEY(PKEY_Message_AttachmentNames, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 21); + +// Name: System.Message.BccAddress -- PKEY_Message_BccAddress +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 2 +// +// Addresses in Bcc: field +DEFINE_PROPERTYKEY(PKEY_Message_BccAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 2); + +// Name: System.Message.BccName -- PKEY_Message_BccName +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 3 +// +// person names in Bcc: field +DEFINE_PROPERTYKEY(PKEY_Message_BccName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 3); + +// Name: System.Message.CcAddress -- PKEY_Message_CcAddress +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 4 +// +// Addresses in Cc: field +DEFINE_PROPERTYKEY(PKEY_Message_CcAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 4); + +// Name: System.Message.CcName -- PKEY_Message_CcName +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 5 +// +// person names in Cc: field +DEFINE_PROPERTYKEY(PKEY_Message_CcName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 5); + +// Name: System.Message.ConversationID -- PKEY_Message_ConversationID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: DC8F80BD-AF1E-4289-85B6-3DFC1B493992, 100 +DEFINE_PROPERTYKEY(PKEY_Message_ConversationID, 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 100); + +// Name: System.Message.ConversationIndex -- PKEY_Message_ConversationIndex +// Type: Buffer -- VT_VECTOR | VT_UI1 (For variants: VT_ARRAY | VT_UI1) +// FormatID: DC8F80BD-AF1E-4289-85B6-3DFC1B493992, 101 +// +// +DEFINE_PROPERTYKEY(PKEY_Message_ConversationIndex, 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 101); + +// Name: System.Message.DateReceived -- PKEY_Message_DateReceived +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 20 +// +// Date and Time communication was received +DEFINE_PROPERTYKEY(PKEY_Message_DateReceived, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 20); + +// Name: System.Message.DateSent -- PKEY_Message_DateSent +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 19 +// +// Date and Time communication was sent +DEFINE_PROPERTYKEY(PKEY_Message_DateSent, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 19); + +// Name: System.Message.FromAddress -- PKEY_Message_FromAddress +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 13 +DEFINE_PROPERTYKEY(PKEY_Message_FromAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 13); + +// Name: System.Message.FromName -- PKEY_Message_FromName +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 14 +// +// Address in from field as person name +DEFINE_PROPERTYKEY(PKEY_Message_FromName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 14); + +// Name: System.Message.HasAttachments -- PKEY_Message_HasAttachments +// Type: Boolean -- VT_BOOL +// FormatID: 9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4, 8 +// +// +DEFINE_PROPERTYKEY(PKEY_Message_HasAttachments, 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 8); + +// Name: System.Message.IsFwdOrReply -- PKEY_Message_IsFwdOrReply +// Type: Int32 -- VT_I4 +// FormatID: 9A9BC088-4F6D-469E-9919-E705412040F9, 100 +DEFINE_PROPERTYKEY(PKEY_Message_IsFwdOrReply, 0x9A9BC088, 0x4F6D, 0x469E, 0x99, 0x19, 0xE7, 0x05, 0x41, 0x20, 0x40, 0xF9, 100); + +// Name: System.Message.MessageClass -- PKEY_Message_MessageClass +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CD9ED458-08CE-418F-A70E-F912C7BB9C5C, 103 +// +// What type of outlook msg this is (meeting, task, mail, etc.) +DEFINE_PROPERTYKEY(PKEY_Message_MessageClass, 0xCD9ED458, 0x08CE, 0x418F, 0xA7, 0x0E, 0xF9, 0x12, 0xC7, 0xBB, 0x9C, 0x5C, 103); + +// Name: System.Message.SenderAddress -- PKEY_Message_SenderAddress +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 0BE1C8E7-1981-4676-AE14-FDD78F05A6E7, 100 +DEFINE_PROPERTYKEY(PKEY_Message_SenderAddress, 0x0BE1C8E7, 0x1981, 0x4676, 0xAE, 0x14, 0xFD, 0xD7, 0x8F, 0x05, 0xA6, 0xE7, 100); + +// Name: System.Message.SenderName -- PKEY_Message_SenderName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 0DA41CFA-D224-4A18-AE2F-596158DB4B3A, 100 +DEFINE_PROPERTYKEY(PKEY_Message_SenderName, 0x0DA41CFA, 0xD224, 0x4A18, 0xAE, 0x2F, 0x59, 0x61, 0x58, 0xDB, 0x4B, 0x3A, 100); + +// Name: System.Message.Store -- PKEY_Message_Store +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 15 +// +// The store (aka protocol handler) FILE, MAIL, OUTLOOKEXPRESS +DEFINE_PROPERTYKEY(PKEY_Message_Store, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 15); + +// Name: System.Message.ToAddress -- PKEY_Message_ToAddress +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 16 +// +// Addresses in To: field +DEFINE_PROPERTYKEY(PKEY_Message_ToAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 16); + +// Name: System.Message.ToDoTitle -- PKEY_Message_ToDoTitle +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: BCCC8A3C-8CEF-42E5-9B1C-C69079398BC7, 100 +DEFINE_PROPERTYKEY(PKEY_Message_ToDoTitle, 0xBCCC8A3C, 0x8CEF, 0x42E5, 0x9B, 0x1C, 0xC6, 0x90, 0x79, 0x39, 0x8B, 0xC7, 100); + +// Name: System.Message.ToName -- PKEY_Message_ToName +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 17 +// +// Person names in To: field +DEFINE_PROPERTYKEY(PKEY_Message_ToName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 17); + +//----------------------------------------------------------------------------- +// Music properties + +// Name: System.Music.AlbumArtist -- PKEY_Music_AlbumArtist +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 13 (PIDSI_MUSIC_ALBUM_ARTIST) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_AlbumArtist, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 13); + +// Name: System.Music.AlbumTitle -- PKEY_Music_AlbumTitle +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 4 (PIDSI_MUSIC_ALBUM) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_AlbumTitle, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 4); + +// Name: System.Music.Artist -- PKEY_Music_Artist +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 2 (PIDSI_MUSIC_ARTIST) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_Artist, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 2); + +// Name: System.Music.BeatsPerMinute -- PKEY_Music_BeatsPerMinute +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 35 (PIDSI_MUSIC_BEATS_PER_MINUTE) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_BeatsPerMinute, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 35); + +// Name: System.Music.Composer -- PKEY_Music_Composer +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 19 (PIDMSI_COMPOSER) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_Composer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 19); + +// Name: System.Music.Conductor -- PKEY_Music_Conductor +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 36 (PIDSI_MUSIC_CONDUCTOR) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_Conductor, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 36); + +// Name: System.Music.ContentGroupDescription -- PKEY_Music_ContentGroupDescription +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 33 (PIDSI_MUSIC_CONTENT_GROUP_DESCRIPTION) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_ContentGroupDescription, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 33); + +// Name: System.Music.Genre -- PKEY_Music_Genre +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 11 (PIDSI_MUSIC_GENRE) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_Genre, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 11); + +// Name: System.Music.InitialKey -- PKEY_Music_InitialKey +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 34 (PIDSI_MUSIC_INITIAL_KEY) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_InitialKey, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 34); + +// Name: System.Music.Lyrics -- PKEY_Music_Lyrics +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 12 (PIDSI_MUSIC_LYRICS) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_Lyrics, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 12); + +// Name: System.Music.Mood -- PKEY_Music_Mood +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 39 (PIDSI_MUSIC_MOOD) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_Mood, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 39); + +// Name: System.Music.PartOfSet -- PKEY_Music_PartOfSet +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 37 (PIDSI_MUSIC_PART_OF_SET) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_PartOfSet, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 37); + +// Name: System.Music.Period -- PKEY_Music_Period +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 31 (PIDMSI_PERIOD) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_Period, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 31); + +// Name: System.Music.SynchronizedLyrics -- PKEY_Music_SynchronizedLyrics +// Type: Blob -- VT_BLOB +// FormatID: 6B223B6A-162E-4AA9-B39F-05D678FC6D77, 100 +DEFINE_PROPERTYKEY(PKEY_Music_SynchronizedLyrics, 0x6B223B6A, 0x162E, 0x4AA9, 0xB3, 0x9F, 0x05, 0xD6, 0x78, 0xFC, 0x6D, 0x77, 100); + +// Name: System.Music.TrackNumber -- PKEY_Music_TrackNumber +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 7 (PIDSI_MUSIC_TRACK) +// +// +DEFINE_PROPERTYKEY(PKEY_Music_TrackNumber, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 7); + + + +//----------------------------------------------------------------------------- +// Note properties + +// Name: System.Note.Color -- PKEY_Note_Color +// Type: UInt16 -- VT_UI2 +// FormatID: 4776CAFA-BCE4-4CB1-A23E-265E76D8EB11, 100 +DEFINE_PROPERTYKEY(PKEY_Note_Color, 0x4776CAFA, 0xBCE4, 0x4CB1, 0xA2, 0x3E, 0x26, 0x5E, 0x76, 0xD8, 0xEB, 0x11, 100); + +// Possible discrete values for PKEY_Note_Color are: +#define NOTE_COLOR_BLUE 0u +#define NOTE_COLOR_GREEN 1u +#define NOTE_COLOR_PINK 2u +#define NOTE_COLOR_YELLOW 3u +#define NOTE_COLOR_WHITE 4u +#define NOTE_COLOR_LIGHTGREEN 5u + +// Name: System.Note.ColorText -- PKEY_Note_ColorText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 46B4E8DE-CDB2-440D-885C-1658EB65B914, 100 +// +// This is the user-friendly form of System.Note.Color. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Note_ColorText, 0x46B4E8DE, 0xCDB2, 0x440D, 0x88, 0x5C, 0x16, 0x58, 0xEB, 0x65, 0xB9, 0x14, 100); + +//----------------------------------------------------------------------------- +// Photo properties + + + +// Name: System.Photo.Aperture -- PKEY_Photo_Aperture +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37378 +// +// PropertyTagExifAperture. Calculated from PKEY_Photo_ApertureNumerator and PKEY_Photo_ApertureDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_Aperture, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37378); + +// Name: System.Photo.ApertureDenominator -- PKEY_Photo_ApertureDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: E1A9A38B-6685-46BD-875E-570DC7AD7320, 100 +// +// Denominator of PKEY_Photo_Aperture +DEFINE_PROPERTYKEY(PKEY_Photo_ApertureDenominator, 0xE1A9A38B, 0x6685, 0x46BD, 0x87, 0x5E, 0x57, 0x0D, 0xC7, 0xAD, 0x73, 0x20, 100); + +// Name: System.Photo.ApertureNumerator -- PKEY_Photo_ApertureNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 0337ECEC-39FB-4581-A0BD-4C4CC51E9914, 100 +// +// Numerator of PKEY_Photo_Aperture +DEFINE_PROPERTYKEY(PKEY_Photo_ApertureNumerator, 0x0337ECEC, 0x39FB, 0x4581, 0xA0, 0xBD, 0x4C, 0x4C, 0xC5, 0x1E, 0x99, 0x14, 100); + +// Name: System.Photo.Brightness -- PKEY_Photo_Brightness +// Type: Double -- VT_R8 +// FormatID: 1A701BF6-478C-4361-83AB-3701BB053C58, 100 (PropertyTagExifBrightness) +// +// This is the brightness of the photo. +// +// Calculated from PKEY_Photo_BrightnessNumerator and PKEY_Photo_BrightnessDenominator. +// +// The units are "APEX", normally in the range of -99.99 to 99.99. If the numerator of +// the recorded value is FFFFFFFF.H, "Unknown" should be indicated. +DEFINE_PROPERTYKEY(PKEY_Photo_Brightness, 0x1A701BF6, 0x478C, 0x4361, 0x83, 0xAB, 0x37, 0x01, 0xBB, 0x05, 0x3C, 0x58, 100); + +// Name: System.Photo.BrightnessDenominator -- PKEY_Photo_BrightnessDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 6EBE6946-2321-440A-90F0-C043EFD32476, 100 +// +// Denominator of PKEY_Photo_Brightness +DEFINE_PROPERTYKEY(PKEY_Photo_BrightnessDenominator, 0x6EBE6946, 0x2321, 0x440A, 0x90, 0xF0, 0xC0, 0x43, 0xEF, 0xD3, 0x24, 0x76, 100); + +// Name: System.Photo.BrightnessNumerator -- PKEY_Photo_BrightnessNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 9E7D118F-B314-45A0-8CFB-D654B917C9E9, 100 +// +// Numerator of PKEY_Photo_Brightness +DEFINE_PROPERTYKEY(PKEY_Photo_BrightnessNumerator, 0x9E7D118F, 0xB314, 0x45A0, 0x8C, 0xFB, 0xD6, 0x54, 0xB9, 0x17, 0xC9, 0xE9, 100); + +// Name: System.Photo.CameraManufacturer -- PKEY_Photo_CameraManufacturer +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 271 (PropertyTagEquipMake) +// +// +DEFINE_PROPERTYKEY(PKEY_Photo_CameraManufacturer, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 271); + +// Name: System.Photo.CameraModel -- PKEY_Photo_CameraModel +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 272 (PropertyTagEquipModel) +// +// +DEFINE_PROPERTYKEY(PKEY_Photo_CameraModel, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 272); + +// Name: System.Photo.CameraSerialNumber -- PKEY_Photo_CameraSerialNumber +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 273 +// +// Serial number of camera that produced this photo +DEFINE_PROPERTYKEY(PKEY_Photo_CameraSerialNumber, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 273); + +// Name: System.Photo.Contrast -- PKEY_Photo_Contrast +// Type: UInt32 -- VT_UI4 +// FormatID: 2A785BA9-8D23-4DED-82E6-60A350C86A10, 100 +// +// This indicates the direction of contrast processing applied by the camera +// when the image was shot. +DEFINE_PROPERTYKEY(PKEY_Photo_Contrast, 0x2A785BA9, 0x8D23, 0x4DED, 0x82, 0xE6, 0x60, 0xA3, 0x50, 0xC8, 0x6A, 0x10, 100); + +// Possible discrete values for PKEY_Photo_Contrast are: +#define PHOTO_CONTRAST_NORMAL 0ul +#define PHOTO_CONTRAST_SOFT 1ul +#define PHOTO_CONTRAST_HARD 2ul + +// Name: System.Photo.ContrastText -- PKEY_Photo_ContrastText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 59DDE9F2-5253-40EA-9A8B-479E96C6249A, 100 +// +// This is the user-friendly form of System.Photo.Contrast. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_ContrastText, 0x59DDE9F2, 0x5253, 0x40EA, 0x9A, 0x8B, 0x47, 0x9E, 0x96, 0xC6, 0x24, 0x9A, 100); + +// Name: System.Photo.DateTaken -- PKEY_Photo_DateTaken +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 36867 +// +// PropertyTagExifDTOrig +DEFINE_PROPERTYKEY(PKEY_Photo_DateTaken, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 36867); + +// Name: System.Photo.DigitalZoom -- PKEY_Photo_DigitalZoom +// Type: Double -- VT_R8 +// FormatID: F85BF840-A925-4BC2-B0C4-8E36B598679E, 100 +// +// PropertyTagExifDigitalZoom. Calculated from PKEY_Photo_DigitalZoomNumerator and PKEY_Photo_DigitalZoomDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoom, 0xF85BF840, 0xA925, 0x4BC2, 0xB0, 0xC4, 0x8E, 0x36, 0xB5, 0x98, 0x67, 0x9E, 100); + +// Name: System.Photo.DigitalZoomDenominator -- PKEY_Photo_DigitalZoomDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 745BAF0E-E5C1-4CFB-8A1B-D031A0A52393, 100 +// +// Denominator of PKEY_Photo_DigitalZoom +DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoomDenominator, 0x745BAF0E, 0xE5C1, 0x4CFB, 0x8A, 0x1B, 0xD0, 0x31, 0xA0, 0xA5, 0x23, 0x93, 100); + +// Name: System.Photo.DigitalZoomNumerator -- PKEY_Photo_DigitalZoomNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 16CBB924-6500-473B-A5BE-F1599BCBE413, 100 +// +// Numerator of PKEY_Photo_DigitalZoom +DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoomNumerator, 0x16CBB924, 0x6500, 0x473B, 0xA5, 0xBE, 0xF1, 0x59, 0x9B, 0xCB, 0xE4, 0x13, 100); + +// Name: System.Photo.Event -- PKEY_Photo_Event +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 18248 +// +// The event at which the photo was taken +DEFINE_PROPERTYKEY(PKEY_Photo_Event, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18248); + +// Name: System.Photo.EXIFVersion -- PKEY_Photo_EXIFVersion +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: D35F743A-EB2E-47F2-A286-844132CB1427, 100 +// +// The EXIF version. +DEFINE_PROPERTYKEY(PKEY_Photo_EXIFVersion, 0xD35F743A, 0xEB2E, 0x47F2, 0xA2, 0x86, 0x84, 0x41, 0x32, 0xCB, 0x14, 0x27, 100); + +// Name: System.Photo.ExposureBias -- PKEY_Photo_ExposureBias +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37380 +// +// PropertyTagExifExposureBias. Calculated from PKEY_Photo_ExposureBiasNumerator and PKEY_Photo_ExposureBiasDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBias, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37380); + +// Name: System.Photo.ExposureBiasDenominator -- PKEY_Photo_ExposureBiasDenominator +// Type: Int32 -- VT_I4 +// FormatID: AB205E50-04B7-461C-A18C-2F233836E627, 100 +// +// Denominator of PKEY_Photo_ExposureBias +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBiasDenominator, 0xAB205E50, 0x04B7, 0x461C, 0xA1, 0x8C, 0x2F, 0x23, 0x38, 0x36, 0xE6, 0x27, 100); + +// Name: System.Photo.ExposureBiasNumerator -- PKEY_Photo_ExposureBiasNumerator +// Type: Int32 -- VT_I4 +// FormatID: 738BF284-1D87-420B-92CF-5834BF6EF9ED, 100 +// +// Numerator of PKEY_Photo_ExposureBias +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBiasNumerator, 0x738BF284, 0x1D87, 0x420B, 0x92, 0xCF, 0x58, 0x34, 0xBF, 0x6E, 0xF9, 0xED, 100); + +// Name: System.Photo.ExposureIndex -- PKEY_Photo_ExposureIndex +// Type: Double -- VT_R8 +// FormatID: 967B5AF8-995A-46ED-9E11-35B3C5B9782D, 100 +// +// PropertyTagExifExposureIndex. Calculated from PKEY_Photo_ExposureIndexNumerator and PKEY_Photo_ExposureIndexDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndex, 0x967B5AF8, 0x995A, 0x46ED, 0x9E, 0x11, 0x35, 0xB3, 0xC5, 0xB9, 0x78, 0x2D, 100); + +// Name: System.Photo.ExposureIndexDenominator -- PKEY_Photo_ExposureIndexDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 93112F89-C28B-492F-8A9D-4BE2062CEE8A, 100 +// +// Denominator of PKEY_Photo_ExposureIndex +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndexDenominator, 0x93112F89, 0xC28B, 0x492F, 0x8A, 0x9D, 0x4B, 0xE2, 0x06, 0x2C, 0xEE, 0x8A, 100); + +// Name: System.Photo.ExposureIndexNumerator -- PKEY_Photo_ExposureIndexNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: CDEDCF30-8919-44DF-8F4C-4EB2FFDB8D89, 100 +// +// Numerator of PKEY_Photo_ExposureIndex +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndexNumerator, 0xCDEDCF30, 0x8919, 0x44DF, 0x8F, 0x4C, 0x4E, 0xB2, 0xFF, 0xDB, 0x8D, 0x89, 100); + +// Name: System.Photo.ExposureProgram -- PKEY_Photo_ExposureProgram +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 34850 (PropertyTagExifExposureProg) +// +// +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureProgram, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34850); + +// Possible discrete values for PKEY_Photo_ExposureProgram are: +#define PHOTO_EXPOSUREPROGRAM_UNKNOWN 0ul +#define PHOTO_EXPOSUREPROGRAM_MANUAL 1ul +#define PHOTO_EXPOSUREPROGRAM_NORMAL 2ul +#define PHOTO_EXPOSUREPROGRAM_APERTURE 3ul +#define PHOTO_EXPOSUREPROGRAM_SHUTTER 4ul +#define PHOTO_EXPOSUREPROGRAM_CREATIVE 5ul +#define PHOTO_EXPOSUREPROGRAM_ACTION 6ul +#define PHOTO_EXPOSUREPROGRAM_PORTRAIT 7ul +#define PHOTO_EXPOSUREPROGRAM_LANDSCAPE 8ul + +// Name: System.Photo.ExposureProgramText -- PKEY_Photo_ExposureProgramText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: FEC690B7-5F30-4646-AE47-4CAAFBA884A3, 100 +// +// This is the user-friendly form of System.Photo.ExposureProgram. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureProgramText, 0xFEC690B7, 0x5F30, 0x4646, 0xAE, 0x47, 0x4C, 0xAA, 0xFB, 0xA8, 0x84, 0xA3, 100); + +// Name: System.Photo.ExposureTime -- PKEY_Photo_ExposureTime +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 33434 +// +// PropertyTagExifExposureTime. Calculated from PKEY_Photo_ExposureTimeNumerator and PKEY_Photo_ExposureTimeDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTime, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33434); + +// Name: System.Photo.ExposureTimeDenominator -- PKEY_Photo_ExposureTimeDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 55E98597-AD16-42E0-B624-21599A199838, 100 +// +// Denominator of PKEY_Photo_ExposureTime +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTimeDenominator, 0x55E98597, 0xAD16, 0x42E0, 0xB6, 0x24, 0x21, 0x59, 0x9A, 0x19, 0x98, 0x38, 100); + +// Name: System.Photo.ExposureTimeNumerator -- PKEY_Photo_ExposureTimeNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 257E44E2-9031-4323-AC38-85C552871B2E, 100 +// +// Numerator of PKEY_Photo_ExposureTime +DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTimeNumerator, 0x257E44E2, 0x9031, 0x4323, 0xAC, 0x38, 0x85, 0xC5, 0x52, 0x87, 0x1B, 0x2E, 100); + +// Name: System.Photo.Flash -- PKEY_Photo_Flash +// Type: Byte -- VT_UI1 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37385 +// +// PropertyTagExifFlash +DEFINE_PROPERTYKEY(PKEY_Photo_Flash, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37385); + +// Possible discrete values for PKEY_Photo_Flash are: +#define PHOTO_FLASH_NONE 0 +#define PHOTO_FLASH_FLASH 1 +#define PHOTO_FLASH_WITHOUTSTROBE 5 +#define PHOTO_FLASH_WITHSTROBE 7 + +// Name: System.Photo.FlashEnergy -- PKEY_Photo_FlashEnergy +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 41483 +// +// PropertyTagExifFlashEnergy. Calculated from PKEY_Photo_FlashEnergyNumerator and PKEY_Photo_FlashEnergyDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergy, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 41483); + +// Name: System.Photo.FlashEnergyDenominator -- PKEY_Photo_FlashEnergyDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: D7B61C70-6323-49CD-A5FC-C84277162C97, 100 +// +// Denominator of PKEY_Photo_FlashEnergy +DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergyDenominator, 0xD7B61C70, 0x6323, 0x49CD, 0xA5, 0xFC, 0xC8, 0x42, 0x77, 0x16, 0x2C, 0x97, 100); + +// Name: System.Photo.FlashEnergyNumerator -- PKEY_Photo_FlashEnergyNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: FCAD3D3D-0858-400F-AAA3-2F66CCE2A6BC, 100 +// +// Numerator of PKEY_Photo_FlashEnergy +DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergyNumerator, 0xFCAD3D3D, 0x0858, 0x400F, 0xAA, 0xA3, 0x2F, 0x66, 0xCC, 0xE2, 0xA6, 0xBC, 100); + +// Name: System.Photo.FlashManufacturer -- PKEY_Photo_FlashManufacturer +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: AABAF6C9-E0C5-4719-8585-57B103E584FE, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_FlashManufacturer, 0xAABAF6C9, 0xE0C5, 0x4719, 0x85, 0x85, 0x57, 0xB1, 0x03, 0xE5, 0x84, 0xFE, 100); + +// Name: System.Photo.FlashModel -- PKEY_Photo_FlashModel +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: FE83BB35-4D1A-42E2-916B-06F3E1AF719E, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_FlashModel, 0xFE83BB35, 0x4D1A, 0x42E2, 0x91, 0x6B, 0x06, 0xF3, 0xE1, 0xAF, 0x71, 0x9E, 100); + +// Name: System.Photo.FlashText -- PKEY_Photo_FlashText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6B8B68F6-200B-47EA-8D25-D8050F57339F, 100 +// +// This is the user-friendly form of System.Photo.Flash. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_FlashText, 0x6B8B68F6, 0x200B, 0x47EA, 0x8D, 0x25, 0xD8, 0x05, 0x0F, 0x57, 0x33, 0x9F, 100); + +// Name: System.Photo.FNumber -- PKEY_Photo_FNumber +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 33437 +// +// PropertyTagExifFNumber. Calculated from PKEY_Photo_FNumberNumerator and PKEY_Photo_FNumberDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_FNumber, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33437); + +// Name: System.Photo.FNumberDenominator -- PKEY_Photo_FNumberDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: E92A2496-223B-4463-A4E3-30EABBA79D80, 100 +// +// Denominator of PKEY_Photo_FNumber +DEFINE_PROPERTYKEY(PKEY_Photo_FNumberDenominator, 0xE92A2496, 0x223B, 0x4463, 0xA4, 0xE3, 0x30, 0xEA, 0xBB, 0xA7, 0x9D, 0x80, 100); + +// Name: System.Photo.FNumberNumerator -- PKEY_Photo_FNumberNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 1B97738A-FDFC-462F-9D93-1957E08BE90C, 100 +// +// Numerator of PKEY_Photo_FNumber +DEFINE_PROPERTYKEY(PKEY_Photo_FNumberNumerator, 0x1B97738A, 0xFDFC, 0x462F, 0x9D, 0x93, 0x19, 0x57, 0xE0, 0x8B, 0xE9, 0x0C, 100); + +// Name: System.Photo.FocalLength -- PKEY_Photo_FocalLength +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37386 +// +// PropertyTagExifFocalLength. Calculated from PKEY_Photo_FocalLengthNumerator and PKEY_Photo_FocalLengthDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_FocalLength, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37386); + +// Name: System.Photo.FocalLengthDenominator -- PKEY_Photo_FocalLengthDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 305BC615-DCA1-44A5-9FD4-10C0BA79412E, 100 +// +// Denominator of PKEY_Photo_FocalLength +DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthDenominator, 0x305BC615, 0xDCA1, 0x44A5, 0x9F, 0xD4, 0x10, 0xC0, 0xBA, 0x79, 0x41, 0x2E, 100); + +// Name: System.Photo.FocalLengthInFilm -- PKEY_Photo_FocalLengthInFilm +// Type: UInt16 -- VT_UI2 +// FormatID: A0E74609-B84D-4F49-B860-462BD9971F98, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthInFilm, 0xA0E74609, 0xB84D, 0x4F49, 0xB8, 0x60, 0x46, 0x2B, 0xD9, 0x97, 0x1F, 0x98, 100); + +// Name: System.Photo.FocalLengthNumerator -- PKEY_Photo_FocalLengthNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 776B6B3B-1E3D-4B0C-9A0E-8FBAF2A8492A, 100 +// +// Numerator of PKEY_Photo_FocalLength +DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthNumerator, 0x776B6B3B, 0x1E3D, 0x4B0C, 0x9A, 0x0E, 0x8F, 0xBA, 0xF2, 0xA8, 0x49, 0x2A, 100); + +// Name: System.Photo.FocalPlaneXResolution -- PKEY_Photo_FocalPlaneXResolution +// Type: Double -- VT_R8 +// FormatID: CFC08D97-C6F7-4484-89DD-EBEF4356FE76, 100 +// +// PropertyTagExifFocalXRes. Calculated from PKEY_Photo_FocalPlaneXResolutionNumerator and +// PKEY_Photo_FocalPlaneXResolutionDenominator. +DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolution, 0xCFC08D97, 0xC6F7, 0x4484, 0x89, 0xDD, 0xEB, 0xEF, 0x43, 0x56, 0xFE, 0x76, 100); + +// Name: System.Photo.FocalPlaneXResolutionDenominator -- PKEY_Photo_FocalPlaneXResolutionDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 0933F3F5-4786-4F46-A8E8-D64DD37FA521, 100 +// +// Denominator of PKEY_Photo_FocalPlaneXResolution +DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolutionDenominator, 0x0933F3F5, 0x4786, 0x4F46, 0xA8, 0xE8, 0xD6, 0x4D, 0xD3, 0x7F, 0xA5, 0x21, 100); + +// Name: System.Photo.FocalPlaneXResolutionNumerator -- PKEY_Photo_FocalPlaneXResolutionNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: DCCB10AF-B4E2-4B88-95F9-031B4D5AB490, 100 +// +// Numerator of PKEY_Photo_FocalPlaneXResolution +DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolutionNumerator, 0xDCCB10AF, 0xB4E2, 0x4B88, 0x95, 0xF9, 0x03, 0x1B, 0x4D, 0x5A, 0xB4, 0x90, 100); + +// Name: System.Photo.FocalPlaneYResolution -- PKEY_Photo_FocalPlaneYResolution +// Type: Double -- VT_R8 +// FormatID: 4FFFE4D0-914F-4AC4-8D6F-C9C61DE169B1, 100 +// +// PropertyTagExifFocalYRes. Calculated from PKEY_Photo_FocalPlaneYResolutionNumerator and +// PKEY_Photo_FocalPlaneYResolutionDenominator. +DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolution, 0x4FFFE4D0, 0x914F, 0x4AC4, 0x8D, 0x6F, 0xC9, 0xC6, 0x1D, 0xE1, 0x69, 0xB1, 100); + +// Name: System.Photo.FocalPlaneYResolutionDenominator -- PKEY_Photo_FocalPlaneYResolutionDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 1D6179A6-A876-4031-B013-3347B2B64DC8, 100 +// +// Denominator of PKEY_Photo_FocalPlaneYResolution +DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolutionDenominator, 0x1D6179A6, 0xA876, 0x4031, 0xB0, 0x13, 0x33, 0x47, 0xB2, 0xB6, 0x4D, 0xC8, 100); + +// Name: System.Photo.FocalPlaneYResolutionNumerator -- PKEY_Photo_FocalPlaneYResolutionNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: A2E541C5-4440-4BA8-867E-75CFC06828CD, 100 +// +// Numerator of PKEY_Photo_FocalPlaneYResolution +DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolutionNumerator, 0xA2E541C5, 0x4440, 0x4BA8, 0x86, 0x7E, 0x75, 0xCF, 0xC0, 0x68, 0x28, 0xCD, 100); + +// Name: System.Photo.GainControl -- PKEY_Photo_GainControl +// Type: Double -- VT_R8 +// FormatID: FA304789-00C7-4D80-904A-1E4DCC7265AA, 100 (PropertyTagExifGainControl) +// +// This indicates the degree of overall image gain adjustment. +// +// Calculated from PKEY_Photo_GainControlNumerator and PKEY_Photo_GainControlDenominator. +DEFINE_PROPERTYKEY(PKEY_Photo_GainControl, 0xFA304789, 0x00C7, 0x4D80, 0x90, 0x4A, 0x1E, 0x4D, 0xCC, 0x72, 0x65, 0xAA, 100); + +// Possible discrete values for PKEY_Photo_GainControl are: +#define PHOTO_GAINCONTROL_NONE 0.0 +#define PHOTO_GAINCONTROL_LOWGAINUP 1.0 +#define PHOTO_GAINCONTROL_HIGHGAINUP 2.0 +#define PHOTO_GAINCONTROL_LOWGAINDOWN 3.0 +#define PHOTO_GAINCONTROL_HIGHGAINDOWN 4.0 + +// Name: System.Photo.GainControlDenominator -- PKEY_Photo_GainControlDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 42864DFD-9DA4-4F77-BDED-4AAD7B256735, 100 +// +// Denominator of PKEY_Photo_GainControl +DEFINE_PROPERTYKEY(PKEY_Photo_GainControlDenominator, 0x42864DFD, 0x9DA4, 0x4F77, 0xBD, 0xED, 0x4A, 0xAD, 0x7B, 0x25, 0x67, 0x35, 100); + +// Name: System.Photo.GainControlNumerator -- PKEY_Photo_GainControlNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 8E8ECF7C-B7B8-4EB8-A63F-0EE715C96F9E, 100 +// +// Numerator of PKEY_Photo_GainControl +DEFINE_PROPERTYKEY(PKEY_Photo_GainControlNumerator, 0x8E8ECF7C, 0xB7B8, 0x4EB8, 0xA6, 0x3F, 0x0E, 0xE7, 0x15, 0xC9, 0x6F, 0x9E, 100); + +// Name: System.Photo.GainControlText -- PKEY_Photo_GainControlText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C06238B2-0BF9-4279-A723-25856715CB9D, 100 +// +// This is the user-friendly form of System.Photo.GainControl. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_GainControlText, 0xC06238B2, 0x0BF9, 0x4279, 0xA7, 0x23, 0x25, 0x85, 0x67, 0x15, 0xCB, 0x9D, 100); + +// Name: System.Photo.ISOSpeed -- PKEY_Photo_ISOSpeed +// Type: UInt16 -- VT_UI2 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 34855 +// +// PropertyTagExifISOSpeed +DEFINE_PROPERTYKEY(PKEY_Photo_ISOSpeed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34855); + +// Name: System.Photo.LensManufacturer -- PKEY_Photo_LensManufacturer +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E6DDCAF7-29C5-4F0A-9A68-D19412EC7090, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_LensManufacturer, 0xE6DDCAF7, 0x29C5, 0x4F0A, 0x9A, 0x68, 0xD1, 0x94, 0x12, 0xEC, 0x70, 0x90, 100); + +// Name: System.Photo.LensModel -- PKEY_Photo_LensModel +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: E1277516-2B5F-4869-89B1-2E585BD38B7A, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_LensModel, 0xE1277516, 0x2B5F, 0x4869, 0x89, 0xB1, 0x2E, 0x58, 0x5B, 0xD3, 0x8B, 0x7A, 100); + +// Name: System.Photo.LightSource -- PKEY_Photo_LightSource +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37384 +// +// PropertyTagExifLightSource +DEFINE_PROPERTYKEY(PKEY_Photo_LightSource, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37384); + +// Possible discrete values for PKEY_Photo_LightSource are: +#define PHOTO_LIGHTSOURCE_UNKNOWN 0ul +#define PHOTO_LIGHTSOURCE_DAYLIGHT 1ul +#define PHOTO_LIGHTSOURCE_FLUORESCENT 2ul +#define PHOTO_LIGHTSOURCE_TUNGSTEN 3ul +#define PHOTO_LIGHTSOURCE_STANDARD_A 17ul +#define PHOTO_LIGHTSOURCE_STANDARD_B 18ul +#define PHOTO_LIGHTSOURCE_STANDARD_C 19ul +#define PHOTO_LIGHTSOURCE_D55 20ul +#define PHOTO_LIGHTSOURCE_D65 21ul +#define PHOTO_LIGHTSOURCE_D75 22ul + +// Name: System.Photo.MakerNote -- PKEY_Photo_MakerNote +// Type: Buffer -- VT_VECTOR | VT_UI1 (For variants: VT_ARRAY | VT_UI1) +// FormatID: FA303353-B659-4052-85E9-BCAC79549B84, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_MakerNote, 0xFA303353, 0xB659, 0x4052, 0x85, 0xE9, 0xBC, 0xAC, 0x79, 0x54, 0x9B, 0x84, 100); + +// Name: System.Photo.MakerNoteOffset -- PKEY_Photo_MakerNoteOffset +// Type: UInt64 -- VT_UI8 +// FormatID: 813F4124-34E6-4D17-AB3E-6B1F3C2247A1, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_MakerNoteOffset, 0x813F4124, 0x34E6, 0x4D17, 0xAB, 0x3E, 0x6B, 0x1F, 0x3C, 0x22, 0x47, 0xA1, 100); + +// Name: System.Photo.MaxAperture -- PKEY_Photo_MaxAperture +// Type: Double -- VT_R8 +// FormatID: 08F6D7C2-E3F2-44FC-AF1E-5AA5C81A2D3E, 100 +// +// Calculated from PKEY_Photo_MaxApertureNumerator and PKEY_Photo_MaxApertureDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_MaxAperture, 0x08F6D7C2, 0xE3F2, 0x44FC, 0xAF, 0x1E, 0x5A, 0xA5, 0xC8, 0x1A, 0x2D, 0x3E, 100); + +// Name: System.Photo.MaxApertureDenominator -- PKEY_Photo_MaxApertureDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: C77724D4-601F-46C5-9B89-C53F93BCEB77, 100 +// +// Denominator of PKEY_Photo_MaxAperture +DEFINE_PROPERTYKEY(PKEY_Photo_MaxApertureDenominator, 0xC77724D4, 0x601F, 0x46C5, 0x9B, 0x89, 0xC5, 0x3F, 0x93, 0xBC, 0xEB, 0x77, 100); + +// Name: System.Photo.MaxApertureNumerator -- PKEY_Photo_MaxApertureNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: C107E191-A459-44C5-9AE6-B952AD4B906D, 100 +// +// Numerator of PKEY_Photo_MaxAperture +DEFINE_PROPERTYKEY(PKEY_Photo_MaxApertureNumerator, 0xC107E191, 0xA459, 0x44C5, 0x9A, 0xE6, 0xB9, 0x52, 0xAD, 0x4B, 0x90, 0x6D, 100); + +// Name: System.Photo.MeteringMode -- PKEY_Photo_MeteringMode +// Type: UInt16 -- VT_UI2 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37383 +// +// PropertyTagExifMeteringMode +DEFINE_PROPERTYKEY(PKEY_Photo_MeteringMode, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37383); + +// Possible discrete values for PKEY_Photo_MeteringMode are: +#define PHOTO_METERINGMODE_UNKNOWN 0u +#define PHOTO_METERINGMODE_AVERAGE 1u +#define PHOTO_METERINGMODE_CENTER 2u +#define PHOTO_METERINGMODE_SPOT 3u +#define PHOTO_METERINGMODE_MULTISPOT 4u +#define PHOTO_METERINGMODE_PATTERN 5u +#define PHOTO_METERINGMODE_PARTIAL 6u + +// Name: System.Photo.MeteringModeText -- PKEY_Photo_MeteringModeText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: F628FD8C-7BA8-465A-A65B-C5AA79263A9E, 100 +// +// This is the user-friendly form of System.Photo.MeteringMode. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_MeteringModeText, 0xF628FD8C, 0x7BA8, 0x465A, 0xA6, 0x5B, 0xC5, 0xAA, 0x79, 0x26, 0x3A, 0x9E, 100); + +// Name: System.Photo.Orientation -- PKEY_Photo_Orientation +// Type: UInt16 -- VT_UI2 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 274 (PropertyTagOrientation) +// +// This is the image orientation viewed in terms of rows and columns. +DEFINE_PROPERTYKEY(PKEY_Photo_Orientation, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 274); + +// Possible discrete values for PKEY_Photo_Orientation are: +#define PHOTO_ORIENTATION_NORMAL 1u +#define PHOTO_ORIENTATION_FLIPHORIZONTAL 2u +#define PHOTO_ORIENTATION_ROTATE180 3u +#define PHOTO_ORIENTATION_FLIPVERTICAL 4u +#define PHOTO_ORIENTATION_TRANSPOSE 5u +#define PHOTO_ORIENTATION_ROTATE270 6u +#define PHOTO_ORIENTATION_TRANSVERSE 7u +#define PHOTO_ORIENTATION_ROTATE90 8u + +// Name: System.Photo.OrientationText -- PKEY_Photo_OrientationText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A9EA193C-C511-498A-A06B-58E2776DCC28, 100 +// +// This is the user-friendly form of System.Photo.Orientation. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_OrientationText, 0xA9EA193C, 0xC511, 0x498A, 0xA0, 0x6B, 0x58, 0xE2, 0x77, 0x6D, 0xCC, 0x28, 100); + +// Name: System.Photo.PhotometricInterpretation -- PKEY_Photo_PhotometricInterpretation +// Type: UInt16 -- VT_UI2 +// FormatID: 341796F1-1DF9-4B1C-A564-91BDEFA43877, 100 +// +// This is the pixel composition. In JPEG compressed data, a JPEG marker is used +// instead of this property. +DEFINE_PROPERTYKEY(PKEY_Photo_PhotometricInterpretation, 0x341796F1, 0x1DF9, 0x4B1C, 0xA5, 0x64, 0x91, 0xBD, 0xEF, 0xA4, 0x38, 0x77, 100); + +// Possible discrete values for PKEY_Photo_PhotometricInterpretation are: +#define PHOTO_PHOTOMETRIC_RGB 2u +#define PHOTO_PHOTOMETRIC_YCBCR 6u + +// Name: System.Photo.PhotometricInterpretationText -- PKEY_Photo_PhotometricInterpretationText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 821437D6-9EAB-4765-A589-3B1CBBD22A61, 100 +// +// This is the user-friendly form of System.Photo.PhotometricInterpretation. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_PhotometricInterpretationText, 0x821437D6, 0x9EAB, 0x4765, 0xA5, 0x89, 0x3B, 0x1C, 0xBB, 0xD2, 0x2A, 0x61, 100); + +// Name: System.Photo.ProgramMode -- PKEY_Photo_ProgramMode +// Type: UInt32 -- VT_UI4 +// FormatID: 6D217F6D-3F6A-4825-B470-5F03CA2FBE9B, 100 +// +// This is the class of the program used by the camera to set exposure when the +// picture is taken. +DEFINE_PROPERTYKEY(PKEY_Photo_ProgramMode, 0x6D217F6D, 0x3F6A, 0x4825, 0xB4, 0x70, 0x5F, 0x03, 0xCA, 0x2F, 0xBE, 0x9B, 100); + +// Possible discrete values for PKEY_Photo_ProgramMode are: +#define PHOTO_PROGRAMMODE_NOTDEFINED 0ul +#define PHOTO_PROGRAMMODE_MANUAL 1ul +#define PHOTO_PROGRAMMODE_NORMAL 2ul +#define PHOTO_PROGRAMMODE_APERTURE 3ul +#define PHOTO_PROGRAMMODE_SHUTTER 4ul +#define PHOTO_PROGRAMMODE_CREATIVE 5ul +#define PHOTO_PROGRAMMODE_ACTION 6ul +#define PHOTO_PROGRAMMODE_PORTRAIT 7ul +#define PHOTO_PROGRAMMODE_LANDSCAPE 8ul + +// Name: System.Photo.ProgramModeText -- PKEY_Photo_ProgramModeText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 7FE3AA27-2648-42F3-89B0-454E5CB150C3, 100 +// +// This is the user-friendly form of System.Photo.ProgramMode. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_ProgramModeText, 0x7FE3AA27, 0x2648, 0x42F3, 0x89, 0xB0, 0x45, 0x4E, 0x5C, 0xB1, 0x50, 0xC3, 100); + +// Name: System.Photo.RelatedSoundFile -- PKEY_Photo_RelatedSoundFile +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 318A6B45-087F-4DC2-B8CC-05359551FC9E, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_RelatedSoundFile, 0x318A6B45, 0x087F, 0x4DC2, 0xB8, 0xCC, 0x05, 0x35, 0x95, 0x51, 0xFC, 0x9E, 100); + +// Name: System.Photo.Saturation -- PKEY_Photo_Saturation +// Type: UInt32 -- VT_UI4 +// FormatID: 49237325-A95A-4F67-B211-816B2D45D2E0, 100 +// +// This indicates the direction of saturation processing applied by the camera when +// the image was shot. +DEFINE_PROPERTYKEY(PKEY_Photo_Saturation, 0x49237325, 0xA95A, 0x4F67, 0xB2, 0x11, 0x81, 0x6B, 0x2D, 0x45, 0xD2, 0xE0, 100); + +// Possible discrete values for PKEY_Photo_Saturation are: +#define PHOTO_SATURATION_NORMAL 0ul +#define PHOTO_SATURATION_LOW 1ul +#define PHOTO_SATURATION_HIGH 2ul + +// Name: System.Photo.SaturationText -- PKEY_Photo_SaturationText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 61478C08-B600-4A84-BBE4-E99C45F0A072, 100 +// +// This is the user-friendly form of System.Photo.Saturation. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_SaturationText, 0x61478C08, 0xB600, 0x4A84, 0xBB, 0xE4, 0xE9, 0x9C, 0x45, 0xF0, 0xA0, 0x72, 100); + +// Name: System.Photo.Sharpness -- PKEY_Photo_Sharpness +// Type: UInt32 -- VT_UI4 +// FormatID: FC6976DB-8349-4970-AE97-B3C5316A08F0, 100 +// +// This indicates the direction of sharpness processing applied by the camera when +// the image was shot. +DEFINE_PROPERTYKEY(PKEY_Photo_Sharpness, 0xFC6976DB, 0x8349, 0x4970, 0xAE, 0x97, 0xB3, 0xC5, 0x31, 0x6A, 0x08, 0xF0, 100); + +// Possible discrete values for PKEY_Photo_Sharpness are: +#define PHOTO_SHARPNESS_NORMAL 0ul +#define PHOTO_SHARPNESS_SOFT 1ul +#define PHOTO_SHARPNESS_HARD 2ul + +// Name: System.Photo.SharpnessText -- PKEY_Photo_SharpnessText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 51EC3F47-DD50-421D-8769-334F50424B1E, 100 +// +// This is the user-friendly form of System.Photo.Sharpness. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_SharpnessText, 0x51EC3F47, 0xDD50, 0x421D, 0x87, 0x69, 0x33, 0x4F, 0x50, 0x42, 0x4B, 0x1E, 100); + +// Name: System.Photo.ShutterSpeed -- PKEY_Photo_ShutterSpeed +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37377 +// +// PropertyTagExifShutterSpeed. Calculated from PKEY_Photo_ShutterSpeedNumerator and PKEY_Photo_ShutterSpeedDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37377); + +// Name: System.Photo.ShutterSpeedDenominator -- PKEY_Photo_ShutterSpeedDenominator +// Type: Int32 -- VT_I4 +// FormatID: E13D8975-81C7-4948-AE3F-37CAE11E8FF7, 100 +// +// Denominator of PKEY_Photo_ShutterSpeed +DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeedDenominator, 0xE13D8975, 0x81C7, 0x4948, 0xAE, 0x3F, 0x37, 0xCA, 0xE1, 0x1E, 0x8F, 0xF7, 100); + +// Name: System.Photo.ShutterSpeedNumerator -- PKEY_Photo_ShutterSpeedNumerator +// Type: Int32 -- VT_I4 +// FormatID: 16EA4042-D6F4-4BCA-8349-7C78D30FB333, 100 +// +// Numerator of PKEY_Photo_ShutterSpeed +DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeedNumerator, 0x16EA4042, 0xD6F4, 0x4BCA, 0x83, 0x49, 0x7C, 0x78, 0xD3, 0x0F, 0xB3, 0x33, 100); + +// Name: System.Photo.SubjectDistance -- PKEY_Photo_SubjectDistance +// Type: Double -- VT_R8 +// FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37382 +// +// PropertyTagExifSubjectDist. Calculated from PKEY_Photo_SubjectDistanceNumerator and PKEY_Photo_SubjectDistanceDenominator +DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistance, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37382); + +// Name: System.Photo.SubjectDistanceDenominator -- PKEY_Photo_SubjectDistanceDenominator +// Type: UInt32 -- VT_UI4 +// FormatID: 0C840A88-B043-466D-9766-D4B26DA3FA77, 100 +// +// Denominator of PKEY_Photo_SubjectDistance +DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistanceDenominator, 0x0C840A88, 0xB043, 0x466D, 0x97, 0x66, 0xD4, 0xB2, 0x6D, 0xA3, 0xFA, 0x77, 100); + +// Name: System.Photo.SubjectDistanceNumerator -- PKEY_Photo_SubjectDistanceNumerator +// Type: UInt32 -- VT_UI4 +// FormatID: 8AF4961C-F526-43E5-AA81-DB768219178D, 100 +// +// Numerator of PKEY_Photo_SubjectDistance +DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistanceNumerator, 0x8AF4961C, 0xF526, 0x43E5, 0xAA, 0x81, 0xDB, 0x76, 0x82, 0x19, 0x17, 0x8D, 100); + +// Name: System.Photo.TranscodedForSync -- PKEY_Photo_TranscodedForSync +// Type: Boolean -- VT_BOOL +// FormatID: 9A8EBB75-6458-4E82-BACB-35C0095B03BB, 100 +DEFINE_PROPERTYKEY(PKEY_Photo_TranscodedForSync, 0x9A8EBB75, 0x6458, 0x4E82, 0xBA, 0xCB, 0x35, 0xC0, 0x09, 0x5B, 0x03, 0xBB, 100); + +// Name: System.Photo.WhiteBalance -- PKEY_Photo_WhiteBalance +// Type: UInt32 -- VT_UI4 +// FormatID: EE3D3D8A-5381-4CFA-B13B-AAF66B5F4EC9, 100 +// +// This indicates the white balance mode set when the image was shot. +DEFINE_PROPERTYKEY(PKEY_Photo_WhiteBalance, 0xEE3D3D8A, 0x5381, 0x4CFA, 0xB1, 0x3B, 0xAA, 0xF6, 0x6B, 0x5F, 0x4E, 0xC9, 100); + +// Possible discrete values for PKEY_Photo_WhiteBalance are: +#define PHOTO_WHITEBALANCE_AUTO 0ul +#define PHOTO_WHITEBALANCE_MANUAL 1ul + +// Name: System.Photo.WhiteBalanceText -- PKEY_Photo_WhiteBalanceText +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6336B95E-C7A7-426D-86FD-7AE3D39C84B4, 100 +// +// This is the user-friendly form of System.Photo.WhiteBalance. Not intended to be parsed +// programmatically. +DEFINE_PROPERTYKEY(PKEY_Photo_WhiteBalanceText, 0x6336B95E, 0xC7A7, 0x426D, 0x86, 0xFD, 0x7A, 0xE3, 0xD3, 0x9C, 0x84, 0xB4, 100); + +//----------------------------------------------------------------------------- +// PropGroup properties + +// Name: System.PropGroup.Advanced -- PKEY_PropGroup_Advanced +// Type: Null -- VT_NULL +// FormatID: 900A403B-097B-4B95-8AE2-071FDAEEB118, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Advanced, 0x900A403B, 0x097B, 0x4B95, 0x8A, 0xE2, 0x07, 0x1F, 0xDA, 0xEE, 0xB1, 0x18, 100); + +// Name: System.PropGroup.Audio -- PKEY_PropGroup_Audio +// Type: Null -- VT_NULL +// FormatID: 2804D469-788F-48AA-8570-71B9C187E138, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Audio, 0x2804D469, 0x788F, 0x48AA, 0x85, 0x70, 0x71, 0xB9, 0xC1, 0x87, 0xE1, 0x38, 100); + +// Name: System.PropGroup.Calendar -- PKEY_PropGroup_Calendar +// Type: Null -- VT_NULL +// FormatID: 9973D2B5-BFD8-438A-BA94-5349B293181A, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Calendar, 0x9973D2B5, 0xBFD8, 0x438A, 0xBA, 0x94, 0x53, 0x49, 0xB2, 0x93, 0x18, 0x1A, 100); + +// Name: System.PropGroup.Camera -- PKEY_PropGroup_Camera +// Type: Null -- VT_NULL +// FormatID: DE00DE32-547E-4981-AD4B-542F2E9007D8, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Camera, 0xDE00DE32, 0x547E, 0x4981, 0xAD, 0x4B, 0x54, 0x2F, 0x2E, 0x90, 0x07, 0xD8, 100); + +// Name: System.PropGroup.Contact -- PKEY_PropGroup_Contact +// Type: Null -- VT_NULL +// FormatID: DF975FD3-250A-4004-858F-34E29A3E37AA, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Contact, 0xDF975FD3, 0x250A, 0x4004, 0x85, 0x8F, 0x34, 0xE2, 0x9A, 0x3E, 0x37, 0xAA, 100); + +// Name: System.PropGroup.Content -- PKEY_PropGroup_Content +// Type: Null -- VT_NULL +// FormatID: D0DAB0BA-368A-4050-A882-6C010FD19A4F, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Content, 0xD0DAB0BA, 0x368A, 0x4050, 0xA8, 0x82, 0x6C, 0x01, 0x0F, 0xD1, 0x9A, 0x4F, 100); + +// Name: System.PropGroup.Description -- PKEY_PropGroup_Description +// Type: Null -- VT_NULL +// FormatID: 8969B275-9475-4E00-A887-FF93B8B41E44, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Description, 0x8969B275, 0x9475, 0x4E00, 0xA8, 0x87, 0xFF, 0x93, 0xB8, 0xB4, 0x1E, 0x44, 100); + +// Name: System.PropGroup.FileSystem -- PKEY_PropGroup_FileSystem +// Type: Null -- VT_NULL +// FormatID: E3A7D2C1-80FC-4B40-8F34-30EA111BDC2E, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_FileSystem, 0xE3A7D2C1, 0x80FC, 0x4B40, 0x8F, 0x34, 0x30, 0xEA, 0x11, 0x1B, 0xDC, 0x2E, 100); + +// Name: System.PropGroup.General -- PKEY_PropGroup_General +// Type: Null -- VT_NULL +// FormatID: CC301630-B192-4C22-B372-9F4C6D338E07, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_General, 0xCC301630, 0xB192, 0x4C22, 0xB3, 0x72, 0x9F, 0x4C, 0x6D, 0x33, 0x8E, 0x07, 100); + +// Name: System.PropGroup.GPS -- PKEY_PropGroup_GPS +// Type: Null -- VT_NULL +// FormatID: F3713ADA-90E3-4E11-AAE5-FDC17685B9BE, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_GPS, 0xF3713ADA, 0x90E3, 0x4E11, 0xAA, 0xE5, 0xFD, 0xC1, 0x76, 0x85, 0xB9, 0xBE, 100); + +// Name: System.PropGroup.Image -- PKEY_PropGroup_Image +// Type: Null -- VT_NULL +// FormatID: E3690A87-0FA8-4A2A-9A9F-FCE8827055AC, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Image, 0xE3690A87, 0x0FA8, 0x4A2A, 0x9A, 0x9F, 0xFC, 0xE8, 0x82, 0x70, 0x55, 0xAC, 100); + +// Name: System.PropGroup.Media -- PKEY_PropGroup_Media +// Type: Null -- VT_NULL +// FormatID: 61872CF7-6B5E-4B4B-AC2D-59DA84459248, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Media, 0x61872CF7, 0x6B5E, 0x4B4B, 0xAC, 0x2D, 0x59, 0xDA, 0x84, 0x45, 0x92, 0x48, 100); + +// Name: System.PropGroup.MediaAdvanced -- PKEY_PropGroup_MediaAdvanced +// Type: Null -- VT_NULL +// FormatID: 8859A284-DE7E-4642-99BA-D431D044B1EC, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_MediaAdvanced, 0x8859A284, 0xDE7E, 0x4642, 0x99, 0xBA, 0xD4, 0x31, 0xD0, 0x44, 0xB1, 0xEC, 100); + +// Name: System.PropGroup.Message -- PKEY_PropGroup_Message +// Type: Null -- VT_NULL +// FormatID: 7FD7259D-16B4-4135-9F97-7C96ECD2FA9E, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Message, 0x7FD7259D, 0x16B4, 0x4135, 0x9F, 0x97, 0x7C, 0x96, 0xEC, 0xD2, 0xFA, 0x9E, 100); + +// Name: System.PropGroup.Music -- PKEY_PropGroup_Music +// Type: Null -- VT_NULL +// FormatID: 68DD6094-7216-40F1-A029-43FE7127043F, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Music, 0x68DD6094, 0x7216, 0x40F1, 0xA0, 0x29, 0x43, 0xFE, 0x71, 0x27, 0x04, 0x3F, 100); + +// Name: System.PropGroup.Origin -- PKEY_PropGroup_Origin +// Type: Null -- VT_NULL +// FormatID: 2598D2FB-5569-4367-95DF-5CD3A177E1A5, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Origin, 0x2598D2FB, 0x5569, 0x4367, 0x95, 0xDF, 0x5C, 0xD3, 0xA1, 0x77, 0xE1, 0xA5, 100); + +// Name: System.PropGroup.PhotoAdvanced -- PKEY_PropGroup_PhotoAdvanced +// Type: Null -- VT_NULL +// FormatID: 0CB2BF5A-9EE7-4A86-8222-F01E07FDADAF, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_PhotoAdvanced, 0x0CB2BF5A, 0x9EE7, 0x4A86, 0x82, 0x22, 0xF0, 0x1E, 0x07, 0xFD, 0xAD, 0xAF, 100); + +// Name: System.PropGroup.RecordedTV -- PKEY_PropGroup_RecordedTV +// Type: Null -- VT_NULL +// FormatID: E7B33238-6584-4170-A5C0-AC25EFD9DA56, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_RecordedTV, 0xE7B33238, 0x6584, 0x4170, 0xA5, 0xC0, 0xAC, 0x25, 0xEF, 0xD9, 0xDA, 0x56, 100); + +// Name: System.PropGroup.Video -- PKEY_PropGroup_Video +// Type: Null -- VT_NULL +// FormatID: BEBE0920-7671-4C54-A3EB-49FDDFC191EE, 100 +DEFINE_PROPERTYKEY(PKEY_PropGroup_Video, 0xBEBE0920, 0x7671, 0x4C54, 0xA3, 0xEB, 0x49, 0xFD, 0xDF, 0xC1, 0x91, 0xEE, 100); + +//----------------------------------------------------------------------------- +// PropList properties + + + +// Name: System.PropList.ConflictPrompt -- PKEY_PropList_ConflictPrompt +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 11 +// +// The list of properties to show in the file operation conflict resolution dialog. Properties with empty +// values will not be displayed. Register under the regvalue of "ConflictPrompt". +DEFINE_PROPERTYKEY(PKEY_PropList_ConflictPrompt, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 11); + +// Name: System.PropList.ExtendedTileInfo -- PKEY_PropList_ExtendedTileInfo +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 9 +// +// The list of properties to show in the listview on extended tiles. Register under the regvalue of +// "ExtendedTileInfo". +DEFINE_PROPERTYKEY(PKEY_PropList_ExtendedTileInfo, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 9); + +// Name: System.PropList.FileOperationPrompt -- PKEY_PropList_FileOperationPrompt +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 10 +// +// The list of properties to show in the file operation confirmation dialog. Properties with empty values +// will not be displayed. If this list is not specified, then the InfoTip property list is used instead. +// Register under the regvalue of "FileOperationPrompt". +DEFINE_PROPERTYKEY(PKEY_PropList_FileOperationPrompt, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 10); + +// Name: System.PropList.FullDetails -- PKEY_PropList_FullDetails +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 2 +// +// The list of all the properties to show in the details page. Property groups can be included in this list +// in order to more easily organize the UI. Register under the regvalue of "FullDetails". +DEFINE_PROPERTYKEY(PKEY_PropList_FullDetails, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 2); + +// Name: System.PropList.InfoTip -- PKEY_PropList_InfoTip +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 4 (PID_PROPLIST_INFOTIP) +// +// The list of properties to show in the infotip. Properties with empty values will not be displayed. Register +// under the regvalue of "InfoTip". +DEFINE_PROPERTYKEY(PKEY_PropList_InfoTip, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 4); + +// Name: System.PropList.NonPersonal -- PKEY_PropList_NonPersonal +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 49D1091F-082E-493F-B23F-D2308AA9668C, 100 +// +// The list of properties that are considered 'non-personal'. When told to remove all non-personal properties +// from a given file, the system will leave these particular properties untouched. Register under the regvalue +// of "NonPersonal". +DEFINE_PROPERTYKEY(PKEY_PropList_NonPersonal, 0x49D1091F, 0x082E, 0x493F, 0xB2, 0x3F, 0xD2, 0x30, 0x8A, 0xA9, 0x66, 0x8C, 100); + +// Name: System.PropList.PreviewDetails -- PKEY_PropList_PreviewDetails +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 8 +// +// The list of properties to display in the preview pane. Register under the regvalue of "PreviewDetails". +DEFINE_PROPERTYKEY(PKEY_PropList_PreviewDetails, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 8); + +// Name: System.PropList.PreviewTitle -- PKEY_PropList_PreviewTitle +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 6 +// +// The one or two properties to display in the preview pane title section. The optional second property is +// displayed as a subtitle. Register under the regvalue of "PreviewTitle". +DEFINE_PROPERTYKEY(PKEY_PropList_PreviewTitle, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 6); + +// Name: System.PropList.QuickTip -- PKEY_PropList_QuickTip +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 5 (PID_PROPLIST_QUICKTIP) +// +// The list of properties to show in the infotip when the item is on a slow network. Properties with empty +// values will not be displayed. Register under the regvalue of "QuickTip". +DEFINE_PROPERTYKEY(PKEY_PropList_QuickTip, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 5); + +// Name: System.PropList.TileInfo -- PKEY_PropList_TileInfo +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 3 (PID_PROPLIST_TILEINFO) +// +// The list of properties to show in the listview on tiles. Register under the regvalue of "TileInfo". +DEFINE_PROPERTYKEY(PKEY_PropList_TileInfo, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 3); + +// Name: System.PropList.XPDetailsPanel -- PKEY_PropList_XPDetailsPanel +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_WebView) F2275480-F782-4291-BD94-F13693513AEC, 0 (PID_DISPLAY_PROPERTIES) +// +// The list of properties to display in the XP webview details panel. Obsolete. +DEFINE_PROPERTYKEY(PKEY_PropList_XPDetailsPanel, 0xF2275480, 0xF782, 0x4291, 0xBD, 0x94, 0xF1, 0x36, 0x93, 0x51, 0x3A, 0xEC, 0); + +//----------------------------------------------------------------------------- +// RecordedTV properties + + + +// Name: System.RecordedTV.ChannelNumber -- PKEY_RecordedTV_ChannelNumber +// Type: UInt32 -- VT_UI4 +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 7 +// +// Example: 42 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_ChannelNumber, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 7); + +// Name: System.RecordedTV.Credits -- PKEY_RecordedTV_Credits +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 4 +// +// Example: "Don Messick/Frank Welker/Casey Kasem/Heather North/Nicole Jaffe;;;" +DEFINE_PROPERTYKEY(PKEY_RecordedTV_Credits, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 4); + +// Name: System.RecordedTV.DateContentExpires -- PKEY_RecordedTV_DateContentExpires +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 15 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_DateContentExpires, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 15); + +// Name: System.RecordedTV.EpisodeName -- PKEY_RecordedTV_EpisodeName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 2 +// +// Example: "Nowhere to Hyde" +DEFINE_PROPERTYKEY(PKEY_RecordedTV_EpisodeName, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 2); + +// Name: System.RecordedTV.IsATSCContent -- PKEY_RecordedTV_IsATSCContent +// Type: Boolean -- VT_BOOL +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 16 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsATSCContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 16); + +// Name: System.RecordedTV.IsClosedCaptioningAvailable -- PKEY_RecordedTV_IsClosedCaptioningAvailable +// Type: Boolean -- VT_BOOL +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 12 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsClosedCaptioningAvailable, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 12); + +// Name: System.RecordedTV.IsDTVContent -- PKEY_RecordedTV_IsDTVContent +// Type: Boolean -- VT_BOOL +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 17 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsDTVContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 17); + +// Name: System.RecordedTV.IsHDContent -- PKEY_RecordedTV_IsHDContent +// Type: Boolean -- VT_BOOL +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 18 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsHDContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 18); + +// Name: System.RecordedTV.IsRepeatBroadcast -- PKEY_RecordedTV_IsRepeatBroadcast +// Type: Boolean -- VT_BOOL +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 13 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsRepeatBroadcast, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 13); + +// Name: System.RecordedTV.IsSAP -- PKEY_RecordedTV_IsSAP +// Type: Boolean -- VT_BOOL +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 14 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsSAP, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 14); + +// Name: System.RecordedTV.NetworkAffiliation -- PKEY_RecordedTV_NetworkAffiliation +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 2C53C813-FB63-4E22-A1AB-0B331CA1E273, 100 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_NetworkAffiliation, 0x2C53C813, 0xFB63, 0x4E22, 0xA1, 0xAB, 0x0B, 0x33, 0x1C, 0xA1, 0xE2, 0x73, 100); + +// Name: System.RecordedTV.OriginalBroadcastDate -- PKEY_RecordedTV_OriginalBroadcastDate +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 4684FE97-8765-4842-9C13-F006447B178C, 100 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_OriginalBroadcastDate, 0x4684FE97, 0x8765, 0x4842, 0x9C, 0x13, 0xF0, 0x06, 0x44, 0x7B, 0x17, 0x8C, 100); + +// Name: System.RecordedTV.ProgramDescription -- PKEY_RecordedTV_ProgramDescription +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 3 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_ProgramDescription, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 3); + +// Name: System.RecordedTV.RecordingTime -- PKEY_RecordedTV_RecordingTime +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: A5477F61-7A82-4ECA-9DDE-98B69B2479B3, 100 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_RecordingTime, 0xA5477F61, 0x7A82, 0x4ECA, 0x9D, 0xDE, 0x98, 0xB6, 0x9B, 0x24, 0x79, 0xB3, 100); + +// Name: System.RecordedTV.StationCallSign -- PKEY_RecordedTV_StationCallSign +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 5 +// +// Example: "TOONP" +DEFINE_PROPERTYKEY(PKEY_RecordedTV_StationCallSign, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 5); + +// Name: System.RecordedTV.StationName -- PKEY_RecordedTV_StationName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 1B5439E7-EBA1-4AF8-BDD7-7AF1D4549493, 100 +DEFINE_PROPERTYKEY(PKEY_RecordedTV_StationName, 0x1B5439E7, 0xEBA1, 0x4AF8, 0xBD, 0xD7, 0x7A, 0xF1, 0xD4, 0x54, 0x94, 0x93, 100); + +//----------------------------------------------------------------------------- +// Search properties + + + +// Name: System.Search.AutoSummary -- PKEY_Search_AutoSummary +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 560C36C0-503A-11CF-BAA1-00004C752A9A, 2 +// +// General Summary of the document. +DEFINE_PROPERTYKEY(PKEY_Search_AutoSummary, 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 2); + +// Name: System.Search.ContainerHash -- PKEY_Search_ContainerHash +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: BCEEE283-35DF-4D53-826A-F36A3EEFC6BE, 100 +// +// Hash code used to identify attachments to be deleted based on a common container url +DEFINE_PROPERTYKEY(PKEY_Search_ContainerHash, 0xBCEEE283, 0x35DF, 0x4D53, 0x82, 0x6A, 0xF3, 0x6A, 0x3E, 0xEF, 0xC6, 0xBE, 100); + +// Name: System.Search.Contents -- PKEY_Search_Contents +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 19 (PID_STG_CONTENTS) +// +// The contents of the item. This property is for query restrictions only; it cannot be retrieved in a +// query result. The Indexing Service friendly name is 'contents'. +DEFINE_PROPERTYKEY(PKEY_Search_Contents, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 19); + +// Name: System.Search.EntryID -- PKEY_Search_EntryID +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 5 (PROPID_QUERY_WORKID) +// +// The entry ID for an item within a given catalog in the Windows Search Index. +// This value may be recycled, and therefore is not considered unique over time. +DEFINE_PROPERTYKEY(PKEY_Search_EntryID, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 5); + +// Name: System.Search.GatherTime -- PKEY_Search_GatherTime +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 0B63E350-9CCC-11D0-BCDB-00805FCCCE04, 8 +// +// The Datetime that the Windows Search Gatherer process last pushed properties of this document to the Windows Search Gatherer Plugins. +DEFINE_PROPERTYKEY(PKEY_Search_GatherTime, 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 8); + +// Name: System.Search.IsClosedDirectory -- PKEY_Search_IsClosedDirectory +// Type: Boolean -- VT_BOOL +// FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 23 +// +// If this property is emitted with a value of TRUE, then it indicates that this URL's last modified time applies to all of it's children, and if this URL is deleted then all of it's children are deleted as well. For example, this would be emitted as TRUE when emitting the URL of an email so that all attachments are tied to the last modified time of that email. +DEFINE_PROPERTYKEY(PKEY_Search_IsClosedDirectory, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 23); + +// Name: System.Search.IsFullyContained -- PKEY_Search_IsFullyContained +// Type: Boolean -- VT_BOOL +// FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 24 +// +// Any child URL of a URL which has System.Search.IsClosedDirectory=TRUE must emit System.Search.IsFullyContained=TRUE. This ensures that the URL is not deleted at the end of a crawl because it hasn't been visited (which is the normal mechanism for detecting deletes). For example an email attachment would emit this property +DEFINE_PROPERTYKEY(PKEY_Search_IsFullyContained, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 24); + +// Name: System.Search.QueryFocusedSummary -- PKEY_Search_QueryFocusedSummary +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 560C36C0-503A-11CF-BAA1-00004C752A9A, 3 +// +// Query Focused Summary of the document. +DEFINE_PROPERTYKEY(PKEY_Search_QueryFocusedSummary, 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 3); + +// Name: System.Search.Rank -- PKEY_Search_Rank +// Type: Int32 -- VT_I4 +// FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 3 (PROPID_QUERY_RANK) +// +// Relevance rank of row. Ranges from 0-1000. Larger numbers = better matches. Query-time only, not +// defined in Search schema, retrievable but not searchable. +DEFINE_PROPERTYKEY(PKEY_Search_Rank, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 3); + +// Name: System.Search.Store -- PKEY_Search_Store +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: A06992B3-8CAF-4ED7-A547-B259E32AC9FC, 100 +// +// The identifier for the protocol handler that produced this item. (E.g. MAPI, CSC, FILE etc.) +DEFINE_PROPERTYKEY(PKEY_Search_Store, 0xA06992B3, 0x8CAF, 0x4ED7, 0xA5, 0x47, 0xB2, 0x59, 0xE3, 0x2A, 0xC9, 0xFC, 100); + +// Name: System.Search.UrlToIndex -- PKEY_Search_UrlToIndex +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 2 +// +// This property should be emitted by a container IFilter for each child URL within the container. The children will eventually be crawled by the indexer if they are within scope. +DEFINE_PROPERTYKEY(PKEY_Search_UrlToIndex, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 2); + +// Name: System.Search.UrlToIndexWithModificationTime -- PKEY_Search_UrlToIndexWithModificationTime +// Type: Multivalue Any -- VT_VECTOR | VT_NULL (For variants: VT_ARRAY | VT_NULL) +// FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 12 +// +// This property is the same as System.Search.UrlToIndex except that it includes the time the URL was last modified. This is an optimization for the indexer as it doesn't have to call back into the protocol handler to ask for this information to determine if the content needs to be indexed again. The property is a vector with two elements, a VT_LPWSTR with the URL and a VT_FILETIME for the last modified time. +DEFINE_PROPERTYKEY(PKEY_Search_UrlToIndexWithModificationTime, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 12); + +//----------------------------------------------------------------------------- +// Shell properties + + + +// Name: System.DescriptionID -- PKEY_DescriptionID +// Type: Buffer -- VT_VECTOR | VT_UI1 (For variants: VT_ARRAY | VT_UI1) +// FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 2 (PID_DESCRIPTIONID) +// +// The contents of a SHDESCRIPTIONID structure as a buffer of bytes. +DEFINE_PROPERTYKEY(PKEY_DescriptionID, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 2); + +// Name: System.Link.TargetSFGAOFlagsStrings -- PKEY_Link_TargetSFGAOFlagsStrings +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: D6942081-D53B-443D-AD47-5E059D9CD27A, 3 +// +// Expresses the SFGAO flags of a link as string values and is used as a query optimization. See +// PKEY_Shell_SFGAOFlagsStrings for possible values of this. +DEFINE_PROPERTYKEY(PKEY_Link_TargetSFGAOFlagsStrings, 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 3); + +// Name: System.Link.TargetUrl -- PKEY_Link_TargetUrl +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 2 (PKEYs relating to URLs. Used by IE History.) +DEFINE_PROPERTYKEY(PKEY_Link_TargetUrl, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 2); + +// Name: System.Shell.SFGAOFlagsStrings -- PKEY_Shell_SFGAOFlagsStrings +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: D6942081-D53B-443D-AD47-5E059D9CD27A, 2 +// +// Expresses the SFGAO flags as string values and is used as a query optimization. +DEFINE_PROPERTYKEY(PKEY_Shell_SFGAOFlagsStrings, 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 2); + +// Possible discrete values for PKEY_Shell_SFGAOFlagsStrings are: +#define SFGAOSTR_FILESYS L"filesys" // SFGAO_FILESYSTEM +#define SFGAOSTR_FILEANC L"fileanc" // SFGAO_FILESYSANCESTOR +#define SFGAOSTR_STORAGEANC L"storageanc" // SFGAO_STORAGEANCESTOR +#define SFGAOSTR_STREAM L"stream" // SFGAO_STREAM +#define SFGAOSTR_LINK L"link" // SFGAO_LINK +#define SFGAOSTR_HIDDEN L"hidden" // SFGAO_HIDDEN +#define SFGAOSTR_FOLDER L"folder" // SFGAO_FOLDER +#define SFGAOSTR_NONENUM L"nonenum" // SFGAO_NONENUMERATED +#define SFGAOSTR_BROWSABLE L"browsable" // SFGAO_BROWSABLE + +//----------------------------------------------------------------------------- +// Software properties + + + +// Name: System.Software.DateLastUsed -- PKEY_Software_DateLastUsed +// Type: DateTime -- VT_FILETIME (For variants: VT_DATE) +// FormatID: 841E4F90-FF59-4D16-8947-E81BBFFAB36D, 16 +// +// +DEFINE_PROPERTYKEY(PKEY_Software_DateLastUsed, 0x841E4F90, 0xFF59, 0x4D16, 0x89, 0x47, 0xE8, 0x1B, 0xBF, 0xFA, 0xB3, 0x6D, 16); + +// Name: System.Software.ProductName -- PKEY_Software_ProductName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 7 +// +// +DEFINE_PROPERTYKEY(PKEY_Software_ProductName, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 7); + +//----------------------------------------------------------------------------- +// Sync properties + + + +// Name: System.Sync.Comments -- PKEY_Sync_Comments +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 13 +DEFINE_PROPERTYKEY(PKEY_Sync_Comments, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 13); + +// Name: System.Sync.ConflictDescription -- PKEY_Sync_ConflictDescription +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 4 +DEFINE_PROPERTYKEY(PKEY_Sync_ConflictDescription, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 4); + +// Name: System.Sync.ConflictFirstLocation -- PKEY_Sync_ConflictFirstLocation +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 6 +DEFINE_PROPERTYKEY(PKEY_Sync_ConflictFirstLocation, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 6); + +// Name: System.Sync.ConflictSecondLocation -- PKEY_Sync_ConflictSecondLocation +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 7 +DEFINE_PROPERTYKEY(PKEY_Sync_ConflictSecondLocation, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 7); + +// Name: System.Sync.HandlerCollectionID -- PKEY_Sync_HandlerCollectionID +// Type: Guid -- VT_CLSID +// FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 2 +DEFINE_PROPERTYKEY(PKEY_Sync_HandlerCollectionID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 2); + +// Name: System.Sync.HandlerID -- PKEY_Sync_HandlerID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 3 +DEFINE_PROPERTYKEY(PKEY_Sync_HandlerID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 3); + +// Name: System.Sync.HandlerName -- PKEY_Sync_HandlerName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 2 +DEFINE_PROPERTYKEY(PKEY_Sync_HandlerName, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 2); + +// Name: System.Sync.HandlerType -- PKEY_Sync_HandlerType +// Type: UInt32 -- VT_UI4 +// FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 8 +// +// +DEFINE_PROPERTYKEY(PKEY_Sync_HandlerType, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 8); + +// Possible discrete values for PKEY_Sync_HandlerType are: +#define SYNC_HANDLERTYPE_OTHER 0ul +#define SYNC_HANDLERTYPE_PROGRAMS 1ul +#define SYNC_HANDLERTYPE_DEVICES 2ul +#define SYNC_HANDLERTYPE_FOLDERS 3ul +#define SYNC_HANDLERTYPE_WEBSERVICES 4ul +#define SYNC_HANDLERTYPE_COMPUTERS 5ul + +// Name: System.Sync.HandlerTypeLabel -- PKEY_Sync_HandlerTypeLabel +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 9 +// +// +DEFINE_PROPERTYKEY(PKEY_Sync_HandlerTypeLabel, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 9); + +// Name: System.Sync.ItemID -- PKEY_Sync_ItemID +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 6 +DEFINE_PROPERTYKEY(PKEY_Sync_ItemID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 6); + +// Name: System.Sync.ItemName -- PKEY_Sync_ItemName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 3 +DEFINE_PROPERTYKEY(PKEY_Sync_ItemName, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 3); + +//----------------------------------------------------------------------------- +// Task properties + +// Name: System.Task.BillingInformation -- PKEY_Task_BillingInformation +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: D37D52C6-261C-4303-82B3-08B926AC6F12, 100 +DEFINE_PROPERTYKEY(PKEY_Task_BillingInformation, 0xD37D52C6, 0x261C, 0x4303, 0x82, 0xB3, 0x08, 0xB9, 0x26, 0xAC, 0x6F, 0x12, 100); + +// Name: System.Task.CompletionStatus -- PKEY_Task_CompletionStatus +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 084D8A0A-E6D5-40DE-BF1F-C8820E7C877C, 100 +DEFINE_PROPERTYKEY(PKEY_Task_CompletionStatus, 0x084D8A0A, 0xE6D5, 0x40DE, 0xBF, 0x1F, 0xC8, 0x82, 0x0E, 0x7C, 0x87, 0x7C, 100); + +// Name: System.Task.Owner -- PKEY_Task_Owner +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: 08C7CC5F-60F2-4494-AD75-55E3E0B5ADD0, 100 +DEFINE_PROPERTYKEY(PKEY_Task_Owner, 0x08C7CC5F, 0x60F2, 0x4494, 0xAD, 0x75, 0x55, 0xE3, 0xE0, 0xB5, 0xAD, 0xD0, 100); + + + +//----------------------------------------------------------------------------- +// Video properties + +// Name: System.Video.Compression -- PKEY_Video_Compression +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 10 (PIDVSI_COMPRESSION) +// +// Indicates the level of compression for the video stream. "Compression". +DEFINE_PROPERTYKEY(PKEY_Video_Compression, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10); + +// Name: System.Video.Director -- PKEY_Video_Director +// Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) +// FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 20 (PIDMSI_DIRECTOR) +// +// +DEFINE_PROPERTYKEY(PKEY_Video_Director, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 20); + +// Name: System.Video.EncodingBitrate -- PKEY_Video_EncodingBitrate +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 8 (PIDVSI_DATA_RATE) +// +// Indicates the data rate in "bits per second" for the video stream. "DataRate". +DEFINE_PROPERTYKEY(PKEY_Video_EncodingBitrate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8); + +// Name: System.Video.FourCC -- PKEY_Video_FourCC +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 44 +// +// Indicates the 4CC for the video stream. +DEFINE_PROPERTYKEY(PKEY_Video_FourCC, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 44); + +// Name: System.Video.FrameHeight -- PKEY_Video_FrameHeight +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 4 +// +// Indicates the frame height for the video stream. +DEFINE_PROPERTYKEY(PKEY_Video_FrameHeight, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4); + +// Name: System.Video.FrameRate -- PKEY_Video_FrameRate +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 6 (PIDVSI_FRAME_RATE) +// +// Indicates the frame rate in "frames per millisecond" for the video stream. "FrameRate". +DEFINE_PROPERTYKEY(PKEY_Video_FrameRate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6); + +// Name: System.Video.FrameWidth -- PKEY_Video_FrameWidth +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 3 +// +// Indicates the frame width for the video stream. +DEFINE_PROPERTYKEY(PKEY_Video_FrameWidth, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3); + +// Name: System.Video.HorizontalAspectRatio -- PKEY_Video_HorizontalAspectRatio +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 42 +// +// Indicates the horizontal portion of the aspect ratio. The X portion of XX:YY, +// like 16:9. +DEFINE_PROPERTYKEY(PKEY_Video_HorizontalAspectRatio, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 42); + +// Name: System.Video.SampleSize -- PKEY_Video_SampleSize +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 9 (PIDVSI_SAMPLE_SIZE) +// +// Indicates the sample size in bits for the video stream. "SampleSize". +DEFINE_PROPERTYKEY(PKEY_Video_SampleSize, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9); + +// Name: System.Video.StreamName -- PKEY_Video_StreamName +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 2 (PIDVSI_STREAM_NAME) +// +// Indicates the name for the video stream. "StreamName". +DEFINE_PROPERTYKEY(PKEY_Video_StreamName, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2); + +// Name: System.Video.StreamNumber -- PKEY_Video_StreamNumber +// Type: UInt16 -- VT_UI2 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 11 (PIDVSI_STREAM_NUMBER) +// +// "Stream Number". +DEFINE_PROPERTYKEY(PKEY_Video_StreamNumber, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11); + +// Name: System.Video.TotalBitrate -- PKEY_Video_TotalBitrate +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 43 (PIDVSI_TOTAL_BITRATE) +// +// Indicates the total data rate in "bits per second" for all video and audio streams. +DEFINE_PROPERTYKEY(PKEY_Video_TotalBitrate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 43); + +// Name: System.Video.VerticalAspectRatio -- PKEY_Video_VerticalAspectRatio +// Type: UInt32 -- VT_UI4 +// FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 45 +// +// Indicates the vertical portion of the aspect ratio. The Y portion of +// XX:YY, like 16:9. +DEFINE_PROPERTYKEY(PKEY_Video_VerticalAspectRatio, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 45); + + + +//----------------------------------------------------------------------------- +// Volume properties + +// Name: System.Volume.FileSystem -- PKEY_Volume_FileSystem +// Type: String -- VT_LPWSTR (For variants: VT_BSTR) +// FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 4 (PID_VOLUME_FILESYSTEM) (Filesystem Volume Properties) +// +// Indicates the filesystem of the volume. +DEFINE_PROPERTYKEY(PKEY_Volume_FileSystem, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4); + +// Name: System.Volume.IsMappedDrive -- PKEY_Volume_IsMappedDrive +// Type: Boolean -- VT_BOOL +// FormatID: 149C0B69-2C2D-48FC-808F-D318D78C4636, 2 +DEFINE_PROPERTYKEY(PKEY_Volume_IsMappedDrive, 0x149C0B69, 0x2C2D, 0x48FC, 0x80, 0x8F, 0xD3, 0x18, 0xD7, 0x8C, 0x46, 0x36, 2); + +// Name: System.Volume.IsRoot -- PKEY_Volume_IsRoot +// Type: Boolean -- VT_BOOL +// FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 10 (Filesystem Volume Properties) +// +// +DEFINE_PROPERTYKEY(PKEY_Volume_IsRoot, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 10); + +#endif /* _INC_PROPKEY */ + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h new file mode 100644 index 0000000000..a361044e56 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h @@ -0,0 +1,26 @@ +#ifndef PID_FIRST_USABLE +#define PID_FIRST_USABLE 2 +#endif + +#ifndef REFPROPERTYKEY +#ifdef __cplusplus +#define REFPROPERTYKEY const PROPERTYKEY & +#else // !__cplusplus +#define REFPROPERTYKEY const PROPERTYKEY * __MIDL_CONST +#endif // __cplusplus +#endif //REFPROPERTYKEY + +#ifdef DEFINE_PROPERTYKEY +#undef DEFINE_PROPERTYKEY +#endif + +#ifdef INITGUID +#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } +#else +#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name +#endif // INITGUID + +#ifndef IsEqualPropertyKey +#define IsEqualPropertyKey(a, b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid, (b).fmtid) ) +#endif // IsEqualPropertyKey + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/propsys.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propsys.h new file mode 100644 index 0000000000..5ed560803f --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/propsys.h @@ -0,0 +1,3605 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for propsys.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __propsys_h__ +#define __propsys_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IInitializeWithFile_FWD_DEFINED__ +#define __IInitializeWithFile_FWD_DEFINED__ +typedef interface IInitializeWithFile IInitializeWithFile; +#endif /* __IInitializeWithFile_FWD_DEFINED__ */ + + +#ifndef __IInitializeWithStream_FWD_DEFINED__ +#define __IInitializeWithStream_FWD_DEFINED__ +typedef interface IInitializeWithStream IInitializeWithStream; +#endif /* __IInitializeWithStream_FWD_DEFINED__ */ + + +#ifndef __IPropertyStore_FWD_DEFINED__ +#define __IPropertyStore_FWD_DEFINED__ +typedef interface IPropertyStore IPropertyStore; +#endif /* __IPropertyStore_FWD_DEFINED__ */ + + +#ifndef __INamedPropertyStore_FWD_DEFINED__ +#define __INamedPropertyStore_FWD_DEFINED__ +typedef interface INamedPropertyStore INamedPropertyStore; +#endif /* __INamedPropertyStore_FWD_DEFINED__ */ + + +#ifndef __IObjectWithPropertyKey_FWD_DEFINED__ +#define __IObjectWithPropertyKey_FWD_DEFINED__ +typedef interface IObjectWithPropertyKey IObjectWithPropertyKey; +#endif /* __IObjectWithPropertyKey_FWD_DEFINED__ */ + + +#ifndef __IPropertyChange_FWD_DEFINED__ +#define __IPropertyChange_FWD_DEFINED__ +typedef interface IPropertyChange IPropertyChange; +#endif /* __IPropertyChange_FWD_DEFINED__ */ + + +#ifndef __IPropertyChangeArray_FWD_DEFINED__ +#define __IPropertyChangeArray_FWD_DEFINED__ +typedef interface IPropertyChangeArray IPropertyChangeArray; +#endif /* __IPropertyChangeArray_FWD_DEFINED__ */ + + +#ifndef __IPropertyStoreCapabilities_FWD_DEFINED__ +#define __IPropertyStoreCapabilities_FWD_DEFINED__ +typedef interface IPropertyStoreCapabilities IPropertyStoreCapabilities; +#endif /* __IPropertyStoreCapabilities_FWD_DEFINED__ */ + + +#ifndef __IPropertyStoreCache_FWD_DEFINED__ +#define __IPropertyStoreCache_FWD_DEFINED__ +typedef interface IPropertyStoreCache IPropertyStoreCache; +#endif /* __IPropertyStoreCache_FWD_DEFINED__ */ + + +#ifndef __IPropertyEnumType_FWD_DEFINED__ +#define __IPropertyEnumType_FWD_DEFINED__ +typedef interface IPropertyEnumType IPropertyEnumType; +#endif /* __IPropertyEnumType_FWD_DEFINED__ */ + + +#ifndef __IPropertyEnumTypeList_FWD_DEFINED__ +#define __IPropertyEnumTypeList_FWD_DEFINED__ +typedef interface IPropertyEnumTypeList IPropertyEnumTypeList; +#endif /* __IPropertyEnumTypeList_FWD_DEFINED__ */ + + +#ifndef __IPropertyDescription_FWD_DEFINED__ +#define __IPropertyDescription_FWD_DEFINED__ +typedef interface IPropertyDescription IPropertyDescription; +#endif /* __IPropertyDescription_FWD_DEFINED__ */ + + +#ifndef __IPropertyDescriptionAliasInfo_FWD_DEFINED__ +#define __IPropertyDescriptionAliasInfo_FWD_DEFINED__ +typedef interface IPropertyDescriptionAliasInfo IPropertyDescriptionAliasInfo; +#endif /* __IPropertyDescriptionAliasInfo_FWD_DEFINED__ */ + + +#ifndef __IPropertyDescriptionSearchInfo_FWD_DEFINED__ +#define __IPropertyDescriptionSearchInfo_FWD_DEFINED__ +typedef interface IPropertyDescriptionSearchInfo IPropertyDescriptionSearchInfo; +#endif /* __IPropertyDescriptionSearchInfo_FWD_DEFINED__ */ + + +#ifndef __IPropertySystem_FWD_DEFINED__ +#define __IPropertySystem_FWD_DEFINED__ +typedef interface IPropertySystem IPropertySystem; +#endif /* __IPropertySystem_FWD_DEFINED__ */ + + +#ifndef __IPropertyDescriptionList_FWD_DEFINED__ +#define __IPropertyDescriptionList_FWD_DEFINED__ +typedef interface IPropertyDescriptionList IPropertyDescriptionList; +#endif /* __IPropertyDescriptionList_FWD_DEFINED__ */ + + +#ifndef __IPropertyStoreFactory_FWD_DEFINED__ +#define __IPropertyStoreFactory_FWD_DEFINED__ +typedef interface IPropertyStoreFactory IPropertyStoreFactory; +#endif /* __IPropertyStoreFactory_FWD_DEFINED__ */ + + +#ifndef __IDelayedPropertyStoreFactory_FWD_DEFINED__ +#define __IDelayedPropertyStoreFactory_FWD_DEFINED__ +typedef interface IDelayedPropertyStoreFactory IDelayedPropertyStoreFactory; +#endif /* __IDelayedPropertyStoreFactory_FWD_DEFINED__ */ + + +#ifndef __IPersistSerializedPropStorage_FWD_DEFINED__ +#define __IPersistSerializedPropStorage_FWD_DEFINED__ +typedef interface IPersistSerializedPropStorage IPersistSerializedPropStorage; +#endif /* __IPersistSerializedPropStorage_FWD_DEFINED__ */ + + +#ifndef __IPropertySystemChangeNotify_FWD_DEFINED__ +#define __IPropertySystemChangeNotify_FWD_DEFINED__ +typedef interface IPropertySystemChangeNotify IPropertySystemChangeNotify; +#endif /* __IPropertySystemChangeNotify_FWD_DEFINED__ */ + + +#ifndef __ICreateObject_FWD_DEFINED__ +#define __ICreateObject_FWD_DEFINED__ +typedef interface ICreateObject ICreateObject; +#endif /* __ICreateObject_FWD_DEFINED__ */ + + +#ifndef __InMemoryPropertyStore_FWD_DEFINED__ +#define __InMemoryPropertyStore_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class InMemoryPropertyStore InMemoryPropertyStore; +#else +typedef struct InMemoryPropertyStore InMemoryPropertyStore; +#endif /* __cplusplus */ + +#endif /* __InMemoryPropertyStore_FWD_DEFINED__ */ + + +#ifndef __PropertySystem_FWD_DEFINED__ +#define __PropertySystem_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class PropertySystem PropertySystem; +#else +typedef struct PropertySystem PropertySystem; +#endif /* __cplusplus */ + +#endif /* __PropertySystem_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "objidl.h" +#include "oleidl.h" +#include "ocidl.h" +#include "shtypes.h" +#include "structuredquery.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_propsys_0000_0000 */ +/* [local] */ + +#ifndef PSSTDAPI +#if defined(_PROPSYS_) +#define PSSTDAPI STDAPI +#define PSSTDAPI_(type) STDAPI_(type) +#else +#define PSSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE +#define PSSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE +#endif +#endif // PSSTDAPI +#if 0 +typedef PROPERTYKEY *REFPROPERTYKEY; + +#endif // 0 +#include + + +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0000_v0_0_s_ifspec; + +#ifndef __IInitializeWithFile_INTERFACE_DEFINED__ +#define __IInitializeWithFile_INTERFACE_DEFINED__ + +/* interface IInitializeWithFile */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IInitializeWithFile; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b7d14566-0509-4cce-a71f-0a554233bd9b") + IInitializeWithFile : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Initialize( + /* [string][in] */ __RPC__in LPCWSTR pszFilePath, + /* [in] */ DWORD grfMode) = 0; + + }; + +#else /* C style interface */ + + typedef struct IInitializeWithFileVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IInitializeWithFile * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IInitializeWithFile * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IInitializeWithFile * This); + + HRESULT ( STDMETHODCALLTYPE *Initialize )( + IInitializeWithFile * This, + /* [string][in] */ __RPC__in LPCWSTR pszFilePath, + /* [in] */ DWORD grfMode); + + END_INTERFACE + } IInitializeWithFileVtbl; + + interface IInitializeWithFile + { + CONST_VTBL struct IInitializeWithFileVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IInitializeWithFile_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IInitializeWithFile_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IInitializeWithFile_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IInitializeWithFile_Initialize(This,pszFilePath,grfMode) \ + ( (This)->lpVtbl -> Initialize(This,pszFilePath,grfMode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IInitializeWithFile_INTERFACE_DEFINED__ */ + + +#ifndef __IInitializeWithStream_INTERFACE_DEFINED__ +#define __IInitializeWithStream_INTERFACE_DEFINED__ + +/* interface IInitializeWithStream */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IInitializeWithStream; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b824b49d-22ac-4161-ac8a-9916e8fa3f7f") + IInitializeWithStream : public IUnknown + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE Initialize( + /* [in] */ IStream *pstream, + /* [in] */ DWORD grfMode) = 0; + + }; + +#else /* C style interface */ + + typedef struct IInitializeWithStreamVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IInitializeWithStream * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IInitializeWithStream * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IInitializeWithStream * This); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Initialize )( + IInitializeWithStream * This, + /* [in] */ IStream *pstream, + /* [in] */ DWORD grfMode); + + END_INTERFACE + } IInitializeWithStreamVtbl; + + interface IInitializeWithStream + { + CONST_VTBL struct IInitializeWithStreamVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IInitializeWithStream_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IInitializeWithStream_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IInitializeWithStream_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IInitializeWithStream_Initialize(This,pstream,grfMode) \ + ( (This)->lpVtbl -> Initialize(This,pstream,grfMode) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_RemoteInitialize_Proxy( + IInitializeWithStream * This, + /* [in] */ __RPC__in_opt IStream *pstream, + /* [in] */ DWORD grfMode); + + +void __RPC_STUB IInitializeWithStream_RemoteInitialize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IInitializeWithStream_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyStore_INTERFACE_DEFINED__ +#define __IPropertyStore_INTERFACE_DEFINED__ + +/* interface IPropertyStore */ +/* [unique][object][helpstring][uuid] */ + + +EXTERN_C const IID IID_IPropertyStore; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99") + IPropertyStore : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCount( + /* [out] */ __RPC__out DWORD *cProps) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAt( + /* [in] */ DWORD iProp, + /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [out] */ __RPC__out PROPVARIANT *pv) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetValue( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0; + + virtual HRESULT STDMETHODCALLTYPE Commit( void) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyStoreVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyStore * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyStore * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyStore * This); + + HRESULT ( STDMETHODCALLTYPE *GetCount )( + IPropertyStore * This, + /* [out] */ __RPC__out DWORD *cProps); + + HRESULT ( STDMETHODCALLTYPE *GetAt )( + IPropertyStore * This, + /* [in] */ DWORD iProp, + /* [out] */ __RPC__out PROPERTYKEY *pkey); + + HRESULT ( STDMETHODCALLTYPE *GetValue )( + IPropertyStore * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [out] */ __RPC__out PROPVARIANT *pv); + + HRESULT ( STDMETHODCALLTYPE *SetValue )( + IPropertyStore * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ __RPC__in REFPROPVARIANT propvar); + + HRESULT ( STDMETHODCALLTYPE *Commit )( + IPropertyStore * This); + + END_INTERFACE + } IPropertyStoreVtbl; + + interface IPropertyStore + { + CONST_VTBL struct IPropertyStoreVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyStore_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyStore_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyStore_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyStore_GetCount(This,cProps) \ + ( (This)->lpVtbl -> GetCount(This,cProps) ) + +#define IPropertyStore_GetAt(This,iProp,pkey) \ + ( (This)->lpVtbl -> GetAt(This,iProp,pkey) ) + +#define IPropertyStore_GetValue(This,key,pv) \ + ( (This)->lpVtbl -> GetValue(This,key,pv) ) + +#define IPropertyStore_SetValue(This,key,propvar) \ + ( (This)->lpVtbl -> SetValue(This,key,propvar) ) + +#define IPropertyStore_Commit(This) \ + ( (This)->lpVtbl -> Commit(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyStore_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_propsys_0000_0003 */ +/* [local] */ + +typedef /* [unique] */ __RPC_unique_pointer IPropertyStore *LPPROPERTYSTORE; + + + +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0003_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0003_v0_0_s_ifspec; + +#ifndef __INamedPropertyStore_INTERFACE_DEFINED__ +#define __INamedPropertyStore_INTERFACE_DEFINED__ + +/* interface INamedPropertyStore */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_INamedPropertyStore; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("71604b0f-97b0-4764-8577-2f13e98a1422") + INamedPropertyStore : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetNamedValue( + /* [string][in] */ __RPC__in LPCWSTR pszName, + /* [out] */ __RPC__out PROPVARIANT *ppropvar) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetNamedValue( + /* [string][in] */ __RPC__in LPCWSTR pszName, + /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetNameCount( + /* [out] */ __RPC__out DWORD *pdwCount) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetNameAt( + /* [in] */ DWORD iProp, + /* [out] */ __RPC__deref_out_opt BSTR *pbstrName) = 0; + + }; + +#else /* C style interface */ + + typedef struct INamedPropertyStoreVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INamedPropertyStore * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INamedPropertyStore * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INamedPropertyStore * This); + + HRESULT ( STDMETHODCALLTYPE *GetNamedValue )( + INamedPropertyStore * This, + /* [string][in] */ __RPC__in LPCWSTR pszName, + /* [out] */ __RPC__out PROPVARIANT *ppropvar); + + HRESULT ( STDMETHODCALLTYPE *SetNamedValue )( + INamedPropertyStore * This, + /* [string][in] */ __RPC__in LPCWSTR pszName, + /* [in] */ __RPC__in REFPROPVARIANT propvar); + + HRESULT ( STDMETHODCALLTYPE *GetNameCount )( + INamedPropertyStore * This, + /* [out] */ __RPC__out DWORD *pdwCount); + + HRESULT ( STDMETHODCALLTYPE *GetNameAt )( + INamedPropertyStore * This, + /* [in] */ DWORD iProp, + /* [out] */ __RPC__deref_out_opt BSTR *pbstrName); + + END_INTERFACE + } INamedPropertyStoreVtbl; + + interface INamedPropertyStore + { + CONST_VTBL struct INamedPropertyStoreVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INamedPropertyStore_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define INamedPropertyStore_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define INamedPropertyStore_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define INamedPropertyStore_GetNamedValue(This,pszName,ppropvar) \ + ( (This)->lpVtbl -> GetNamedValue(This,pszName,ppropvar) ) + +#define INamedPropertyStore_SetNamedValue(This,pszName,propvar) \ + ( (This)->lpVtbl -> SetNamedValue(This,pszName,propvar) ) + +#define INamedPropertyStore_GetNameCount(This,pdwCount) \ + ( (This)->lpVtbl -> GetNameCount(This,pdwCount) ) + +#define INamedPropertyStore_GetNameAt(This,iProp,pbstrName) \ + ( (This)->lpVtbl -> GetNameAt(This,iProp,pbstrName) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __INamedPropertyStore_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_propsys_0000_0004 */ +/* [local] */ + +/* [v1_enum] */ +enum tagGETPROPERTYSTOREFLAGS + { GPS_DEFAULT = 0, + GPS_HANDLERPROPERTIESONLY = 0x1, + GPS_READWRITE = 0x2, + GPS_TEMPORARY = 0x4, + GPS_FASTPROPERTIESONLY = 0x8, + GPS_OPENSLOWITEM = 0x10, + GPS_DELAYCREATION = 0x20, + GPS_BESTEFFORT = 0x40, + GPS_MASK_VALID = 0x7f + } ; +typedef int GETPROPERTYSTOREFLAGS; + + + +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0004_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0004_v0_0_s_ifspec; + +#ifndef __IObjectWithPropertyKey_INTERFACE_DEFINED__ +#define __IObjectWithPropertyKey_INTERFACE_DEFINED__ + +/* interface IObjectWithPropertyKey */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IObjectWithPropertyKey; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fc0ca0a7-c316-4fd2-9031-3e628e6d4f23") + IObjectWithPropertyKey : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SetPropertyKey( + /* [in] */ __RPC__in REFPROPERTYKEY key) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPropertyKey( + /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0; + + }; + +#else /* C style interface */ + + typedef struct IObjectWithPropertyKeyVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IObjectWithPropertyKey * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IObjectWithPropertyKey * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IObjectWithPropertyKey * This); + + HRESULT ( STDMETHODCALLTYPE *SetPropertyKey )( + IObjectWithPropertyKey * This, + /* [in] */ __RPC__in REFPROPERTYKEY key); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( + IObjectWithPropertyKey * This, + /* [out] */ __RPC__out PROPERTYKEY *pkey); + + END_INTERFACE + } IObjectWithPropertyKeyVtbl; + + interface IObjectWithPropertyKey + { + CONST_VTBL struct IObjectWithPropertyKeyVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IObjectWithPropertyKey_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IObjectWithPropertyKey_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IObjectWithPropertyKey_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IObjectWithPropertyKey_SetPropertyKey(This,key) \ + ( (This)->lpVtbl -> SetPropertyKey(This,key) ) + +#define IObjectWithPropertyKey_GetPropertyKey(This,pkey) \ + ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IObjectWithPropertyKey_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_propsys_0000_0005 */ +/* [local] */ + +typedef /* [v1_enum] */ +enum tagPKA_FLAGS + { PKA_SET = 0, + PKA_APPEND = ( PKA_SET + 1 ) , + PKA_DELETE = ( PKA_APPEND + 1 ) + } PKA_FLAGS; + + + +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0005_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0005_v0_0_s_ifspec; + +#ifndef __IPropertyChange_INTERFACE_DEFINED__ +#define __IPropertyChange_INTERFACE_DEFINED__ + +/* interface IPropertyChange */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertyChange; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f917bc8a-1bba-4478-a245-1bde03eb9431") + IPropertyChange : public IObjectWithPropertyKey + { + public: + virtual HRESULT STDMETHODCALLTYPE ApplyToPropVariant( + /* [in] */ __RPC__in REFPROPVARIANT propvarIn, + /* [out] */ __RPC__out PROPVARIANT *ppropvarOut) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyChangeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyChange * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyChange * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyChange * This); + + HRESULT ( STDMETHODCALLTYPE *SetPropertyKey )( + IPropertyChange * This, + /* [in] */ __RPC__in REFPROPERTYKEY key); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( + IPropertyChange * This, + /* [out] */ __RPC__out PROPERTYKEY *pkey); + + HRESULT ( STDMETHODCALLTYPE *ApplyToPropVariant )( + IPropertyChange * This, + /* [in] */ __RPC__in REFPROPVARIANT propvarIn, + /* [out] */ __RPC__out PROPVARIANT *ppropvarOut); + + END_INTERFACE + } IPropertyChangeVtbl; + + interface IPropertyChange + { + CONST_VTBL struct IPropertyChangeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyChange_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyChange_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyChange_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyChange_SetPropertyKey(This,key) \ + ( (This)->lpVtbl -> SetPropertyKey(This,key) ) + +#define IPropertyChange_GetPropertyKey(This,pkey) \ + ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) + + +#define IPropertyChange_ApplyToPropVariant(This,propvarIn,ppropvarOut) \ + ( (This)->lpVtbl -> ApplyToPropVariant(This,propvarIn,ppropvarOut) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyChange_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyChangeArray_INTERFACE_DEFINED__ +#define __IPropertyChangeArray_INTERFACE_DEFINED__ + +/* interface IPropertyChangeArray */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertyChangeArray; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("380f5cad-1b5e-42f2-805d-637fd392d31e") + IPropertyChangeArray : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCount( + /* [out] */ __RPC__out UINT *pcOperations) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAt( + /* [in] */ UINT iIndex, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE InsertAt( + /* [in] */ UINT iIndex, + /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0; + + virtual HRESULT STDMETHODCALLTYPE Append( + /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0; + + virtual HRESULT STDMETHODCALLTYPE AppendOrReplace( + /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveAt( + /* [in] */ UINT iIndex) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsKeyInArray( + /* [in] */ __RPC__in REFPROPERTYKEY key) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyChangeArrayVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyChangeArray * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyChangeArray * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyChangeArray * This); + + HRESULT ( STDMETHODCALLTYPE *GetCount )( + IPropertyChangeArray * This, + /* [out] */ __RPC__out UINT *pcOperations); + + HRESULT ( STDMETHODCALLTYPE *GetAt )( + IPropertyChangeArray * This, + /* [in] */ UINT iIndex, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *InsertAt )( + IPropertyChangeArray * This, + /* [in] */ UINT iIndex, + /* [in] */ __RPC__in_opt IPropertyChange *ppropChange); + + HRESULT ( STDMETHODCALLTYPE *Append )( + IPropertyChangeArray * This, + /* [in] */ __RPC__in_opt IPropertyChange *ppropChange); + + HRESULT ( STDMETHODCALLTYPE *AppendOrReplace )( + IPropertyChangeArray * This, + /* [in] */ __RPC__in_opt IPropertyChange *ppropChange); + + HRESULT ( STDMETHODCALLTYPE *RemoveAt )( + IPropertyChangeArray * This, + /* [in] */ UINT iIndex); + + HRESULT ( STDMETHODCALLTYPE *IsKeyInArray )( + IPropertyChangeArray * This, + /* [in] */ __RPC__in REFPROPERTYKEY key); + + END_INTERFACE + } IPropertyChangeArrayVtbl; + + interface IPropertyChangeArray + { + CONST_VTBL struct IPropertyChangeArrayVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyChangeArray_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyChangeArray_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyChangeArray_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyChangeArray_GetCount(This,pcOperations) \ + ( (This)->lpVtbl -> GetCount(This,pcOperations) ) + +#define IPropertyChangeArray_GetAt(This,iIndex,riid,ppv) \ + ( (This)->lpVtbl -> GetAt(This,iIndex,riid,ppv) ) + +#define IPropertyChangeArray_InsertAt(This,iIndex,ppropChange) \ + ( (This)->lpVtbl -> InsertAt(This,iIndex,ppropChange) ) + +#define IPropertyChangeArray_Append(This,ppropChange) \ + ( (This)->lpVtbl -> Append(This,ppropChange) ) + +#define IPropertyChangeArray_AppendOrReplace(This,ppropChange) \ + ( (This)->lpVtbl -> AppendOrReplace(This,ppropChange) ) + +#define IPropertyChangeArray_RemoveAt(This,iIndex) \ + ( (This)->lpVtbl -> RemoveAt(This,iIndex) ) + +#define IPropertyChangeArray_IsKeyInArray(This,key) \ + ( (This)->lpVtbl -> IsKeyInArray(This,key) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyChangeArray_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyStoreCapabilities_INTERFACE_DEFINED__ +#define __IPropertyStoreCapabilities_INTERFACE_DEFINED__ + +/* interface IPropertyStoreCapabilities */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertyStoreCapabilities; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c8e2d566-186e-4d49-bf41-6909ead56acc") + IPropertyStoreCapabilities : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE IsPropertyWritable( + /* [in] */ __RPC__in REFPROPERTYKEY key) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyStoreCapabilitiesVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyStoreCapabilities * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyStoreCapabilities * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyStoreCapabilities * This); + + HRESULT ( STDMETHODCALLTYPE *IsPropertyWritable )( + IPropertyStoreCapabilities * This, + /* [in] */ __RPC__in REFPROPERTYKEY key); + + END_INTERFACE + } IPropertyStoreCapabilitiesVtbl; + + interface IPropertyStoreCapabilities + { + CONST_VTBL struct IPropertyStoreCapabilitiesVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyStoreCapabilities_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyStoreCapabilities_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyStoreCapabilities_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyStoreCapabilities_IsPropertyWritable(This,key) \ + ( (This)->lpVtbl -> IsPropertyWritable(This,key) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyStoreCapabilities_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyStoreCache_INTERFACE_DEFINED__ +#define __IPropertyStoreCache_INTERFACE_DEFINED__ + +/* interface IPropertyStoreCache */ +/* [unique][object][uuid] */ + +typedef /* [v1_enum] */ +enum _PSC_STATE + { PSC_NORMAL = 0, + PSC_NOTINSOURCE = 1, + PSC_DIRTY = 2, + PSC_READONLY = 3 + } PSC_STATE; + + +EXTERN_C const IID IID_IPropertyStoreCache; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3017056d-9a91-4e90-937d-746c72abbf4f") + IPropertyStoreCache : public IPropertyStore + { + public: + virtual HRESULT STDMETHODCALLTYPE GetState( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [out] */ __RPC__out PSC_STATE *pstate) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueAndState( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [out] */ __RPC__out PROPVARIANT *ppropvar, + /* [out] */ __RPC__out PSC_STATE *pstate) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetState( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ PSC_STATE state) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetValueAndState( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [unique][in] */ __RPC__in_opt const PROPVARIANT *ppropvar, + /* [in] */ PSC_STATE state) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyStoreCacheVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyStoreCache * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyStoreCache * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyStoreCache * This); + + HRESULT ( STDMETHODCALLTYPE *GetCount )( + IPropertyStoreCache * This, + /* [out] */ __RPC__out DWORD *cProps); + + HRESULT ( STDMETHODCALLTYPE *GetAt )( + IPropertyStoreCache * This, + /* [in] */ DWORD iProp, + /* [out] */ __RPC__out PROPERTYKEY *pkey); + + HRESULT ( STDMETHODCALLTYPE *GetValue )( + IPropertyStoreCache * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [out] */ __RPC__out PROPVARIANT *pv); + + HRESULT ( STDMETHODCALLTYPE *SetValue )( + IPropertyStoreCache * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ __RPC__in REFPROPVARIANT propvar); + + HRESULT ( STDMETHODCALLTYPE *Commit )( + IPropertyStoreCache * This); + + HRESULT ( STDMETHODCALLTYPE *GetState )( + IPropertyStoreCache * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [out] */ __RPC__out PSC_STATE *pstate); + + HRESULT ( STDMETHODCALLTYPE *GetValueAndState )( + IPropertyStoreCache * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [out] */ __RPC__out PROPVARIANT *ppropvar, + /* [out] */ __RPC__out PSC_STATE *pstate); + + HRESULT ( STDMETHODCALLTYPE *SetState )( + IPropertyStoreCache * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ PSC_STATE state); + + HRESULT ( STDMETHODCALLTYPE *SetValueAndState )( + IPropertyStoreCache * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [unique][in] */ __RPC__in_opt const PROPVARIANT *ppropvar, + /* [in] */ PSC_STATE state); + + END_INTERFACE + } IPropertyStoreCacheVtbl; + + interface IPropertyStoreCache + { + CONST_VTBL struct IPropertyStoreCacheVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyStoreCache_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyStoreCache_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyStoreCache_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyStoreCache_GetCount(This,cProps) \ + ( (This)->lpVtbl -> GetCount(This,cProps) ) + +#define IPropertyStoreCache_GetAt(This,iProp,pkey) \ + ( (This)->lpVtbl -> GetAt(This,iProp,pkey) ) + +#define IPropertyStoreCache_GetValue(This,key,pv) \ + ( (This)->lpVtbl -> GetValue(This,key,pv) ) + +#define IPropertyStoreCache_SetValue(This,key,propvar) \ + ( (This)->lpVtbl -> SetValue(This,key,propvar) ) + +#define IPropertyStoreCache_Commit(This) \ + ( (This)->lpVtbl -> Commit(This) ) + + +#define IPropertyStoreCache_GetState(This,key,pstate) \ + ( (This)->lpVtbl -> GetState(This,key,pstate) ) + +#define IPropertyStoreCache_GetValueAndState(This,key,ppropvar,pstate) \ + ( (This)->lpVtbl -> GetValueAndState(This,key,ppropvar,pstate) ) + +#define IPropertyStoreCache_SetState(This,key,state) \ + ( (This)->lpVtbl -> SetState(This,key,state) ) + +#define IPropertyStoreCache_SetValueAndState(This,key,ppropvar,state) \ + ( (This)->lpVtbl -> SetValueAndState(This,key,ppropvar,state) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyStoreCache_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyEnumType_INTERFACE_DEFINED__ +#define __IPropertyEnumType_INTERFACE_DEFINED__ + +/* interface IPropertyEnumType */ +/* [unique][object][uuid] */ + +/* [v1_enum] */ +enum tagPROPENUMTYPE + { PET_DISCRETEVALUE = 0, + PET_RANGEDVALUE = 1, + PET_DEFAULTVALUE = 2, + PET_ENDRANGE = 3 + } ; +typedef enum tagPROPENUMTYPE PROPENUMTYPE; + + +EXTERN_C const IID IID_IPropertyEnumType; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("11e1fbf9-2d56-4a6b-8db3-7cd193a471f2") + IPropertyEnumType : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetEnumType( + /* [out] */ __RPC__out PROPENUMTYPE *penumtype) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [out] */ __RPC__out PROPVARIANT *ppropvar) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetRangeMinValue( + /* [out] */ __RPC__out PROPVARIANT *ppropvarMin) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetRangeSetValue( + /* [out] */ __RPC__out PROPVARIANT *ppropvarSet) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDisplayText( + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszDisplay) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyEnumTypeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyEnumType * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyEnumType * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyEnumType * This); + + HRESULT ( STDMETHODCALLTYPE *GetEnumType )( + IPropertyEnumType * This, + /* [out] */ __RPC__out PROPENUMTYPE *penumtype); + + HRESULT ( STDMETHODCALLTYPE *GetValue )( + IPropertyEnumType * This, + /* [out] */ __RPC__out PROPVARIANT *ppropvar); + + HRESULT ( STDMETHODCALLTYPE *GetRangeMinValue )( + IPropertyEnumType * This, + /* [out] */ __RPC__out PROPVARIANT *ppropvarMin); + + HRESULT ( STDMETHODCALLTYPE *GetRangeSetValue )( + IPropertyEnumType * This, + /* [out] */ __RPC__out PROPVARIANT *ppropvarSet); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayText )( + IPropertyEnumType * This, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszDisplay); + + END_INTERFACE + } IPropertyEnumTypeVtbl; + + interface IPropertyEnumType + { + CONST_VTBL struct IPropertyEnumTypeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyEnumType_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyEnumType_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyEnumType_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyEnumType_GetEnumType(This,penumtype) \ + ( (This)->lpVtbl -> GetEnumType(This,penumtype) ) + +#define IPropertyEnumType_GetValue(This,ppropvar) \ + ( (This)->lpVtbl -> GetValue(This,ppropvar) ) + +#define IPropertyEnumType_GetRangeMinValue(This,ppropvarMin) \ + ( (This)->lpVtbl -> GetRangeMinValue(This,ppropvarMin) ) + +#define IPropertyEnumType_GetRangeSetValue(This,ppropvarSet) \ + ( (This)->lpVtbl -> GetRangeSetValue(This,ppropvarSet) ) + +#define IPropertyEnumType_GetDisplayText(This,ppszDisplay) \ + ( (This)->lpVtbl -> GetDisplayText(This,ppszDisplay) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyEnumType_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyEnumTypeList_INTERFACE_DEFINED__ +#define __IPropertyEnumTypeList_INTERFACE_DEFINED__ + +/* interface IPropertyEnumTypeList */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertyEnumTypeList; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a99400f4-3d84-4557-94ba-1242fb2cc9a6") + IPropertyEnumTypeList : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCount( + /* [out] */ __RPC__out UINT *pctypes) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAt( + /* [in] */ UINT itype, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetConditionAt( + /* [in] */ UINT nIndex, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindMatchingIndex( + /* [in] */ __RPC__in REFPROPVARIANT propvarCmp, + /* [out] */ __RPC__out UINT *pnIndex) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyEnumTypeListVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyEnumTypeList * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyEnumTypeList * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyEnumTypeList * This); + + HRESULT ( STDMETHODCALLTYPE *GetCount )( + IPropertyEnumTypeList * This, + /* [out] */ __RPC__out UINT *pctypes); + + HRESULT ( STDMETHODCALLTYPE *GetAt )( + IPropertyEnumTypeList * This, + /* [in] */ UINT itype, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *GetConditionAt )( + IPropertyEnumTypeList * This, + /* [in] */ UINT nIndex, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *FindMatchingIndex )( + IPropertyEnumTypeList * This, + /* [in] */ __RPC__in REFPROPVARIANT propvarCmp, + /* [out] */ __RPC__out UINT *pnIndex); + + END_INTERFACE + } IPropertyEnumTypeListVtbl; + + interface IPropertyEnumTypeList + { + CONST_VTBL struct IPropertyEnumTypeListVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyEnumTypeList_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyEnumTypeList_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyEnumTypeList_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyEnumTypeList_GetCount(This,pctypes) \ + ( (This)->lpVtbl -> GetCount(This,pctypes) ) + +#define IPropertyEnumTypeList_GetAt(This,itype,riid,ppv) \ + ( (This)->lpVtbl -> GetAt(This,itype,riid,ppv) ) + +#define IPropertyEnumTypeList_GetConditionAt(This,nIndex,riid,ppv) \ + ( (This)->lpVtbl -> GetConditionAt(This,nIndex,riid,ppv) ) + +#define IPropertyEnumTypeList_FindMatchingIndex(This,propvarCmp,pnIndex) \ + ( (This)->lpVtbl -> FindMatchingIndex(This,propvarCmp,pnIndex) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyEnumTypeList_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyDescription_INTERFACE_DEFINED__ +#define __IPropertyDescription_INTERFACE_DEFINED__ + +/* interface IPropertyDescription */ +/* [unique][object][uuid] */ + +/* [v1_enum] */ +enum tagPROPDESC_TYPE_FLAGS + { PDTF_DEFAULT = 0, + PDTF_MULTIPLEVALUES = 0x1, + PDTF_ISINNATE = 0x2, + PDTF_ISGROUP = 0x4, + PDTF_CANGROUPBY = 0x8, + PDTF_CANSTACKBY = 0x10, + PDTF_ISTREEPROPERTY = 0x20, + PDTF_INCLUDEINFULLTEXTQUERY = 0x40, + PDTF_ISVIEWABLE = 0x80, + PDTF_ISQUERYABLE = 0x100, + PDTF_ISSYSTEMPROPERTY = 0x80000000, + PDTF_MASK_ALL = 0x800001ff + } ; +typedef int PROPDESC_TYPE_FLAGS; + +/* [v1_enum] */ +enum tagPROPDESC_VIEW_FLAGS + { PDVF_DEFAULT = 0, + PDVF_CENTERALIGN = 0x1, + PDVF_RIGHTALIGN = 0x2, + PDVF_BEGINNEWGROUP = 0x4, + PDVF_FILLAREA = 0x8, + PDVF_SORTDESCENDING = 0x10, + PDVF_SHOWONLYIFPRESENT = 0x20, + PDVF_SHOWBYDEFAULT = 0x40, + PDVF_SHOWINPRIMARYLIST = 0x80, + PDVF_SHOWINSECONDARYLIST = 0x100, + PDVF_HIDELABEL = 0x200, + PDVF_HIDDEN = 0x800, + PDVF_CANWRAP = 0x1000, + PDVF_MASK_ALL = 0x1bff + } ; +typedef int PROPDESC_VIEW_FLAGS; + +/* [v1_enum] */ +enum tagPROPDESC_DISPLAYTYPE + { PDDT_STRING = 0, + PDDT_NUMBER = 1, + PDDT_BOOLEAN = 2, + PDDT_DATETIME = 3, + PDDT_ENUMERATED = 4 + } ; +typedef enum tagPROPDESC_DISPLAYTYPE PROPDESC_DISPLAYTYPE; + +/* [v1_enum] */ +enum tagPROPDESC_GROUPING_RANGE + { PDGR_DISCRETE = 0, + PDGR_ALPHANUMERIC = 1, + PDGR_SIZE = 2, + PDGR_DYNAMIC = 3, + PDGR_DATE = 4, + PDGR_PERCENT = 5, + PDGR_ENUMERATED = 6 + } ; +typedef enum tagPROPDESC_GROUPING_RANGE PROPDESC_GROUPING_RANGE; + +/* [v1_enum] */ +enum tagPROPDESC_FORMAT_FLAGS + { PDFF_DEFAULT = 0, + PDFF_PREFIXNAME = 0x1, + PDFF_FILENAME = 0x2, + PDFF_ALWAYSKB = 0x4, + PDFF_RESERVED_RIGHTTOLEFT = 0x8, + PDFF_SHORTTIME = 0x10, + PDFF_LONGTIME = 0x20, + PDFF_HIDETIME = 0x40, + PDFF_SHORTDATE = 0x80, + PDFF_LONGDATE = 0x100, + PDFF_HIDEDATE = 0x200, + PDFF_RELATIVEDATE = 0x400, + PDFF_USEEDITINVITATION = 0x800, + PDFF_READONLY = 0x1000, + PDFF_NOAUTOREADINGORDER = 0x2000 + } ; +typedef int PROPDESC_FORMAT_FLAGS; + +/* [v1_enum] */ +enum tagPROPDESC_SORTDESCRIPTION + { PDSD_GENERAL = 0, + PDSD_A_Z = 1, + PDSD_LOWEST_HIGHEST = 2, + PDSD_SMALLEST_BIGGEST = 3, + PDSD_OLDEST_NEWEST = 4 + } ; +typedef enum tagPROPDESC_SORTDESCRIPTION PROPDESC_SORTDESCRIPTION; + +/* [v1_enum] */ +enum tagPROPDESC_RELATIVEDESCRIPTION_TYPE + { PDRDT_GENERAL = 0, + PDRDT_DATE = 1, + PDRDT_SIZE = 2, + PDRDT_COUNT = 3, + PDRDT_REVISION = 4, + PDRDT_LENGTH = 5, + PDRDT_DURATION = 6, + PDRDT_SPEED = 7, + PDRDT_RATE = 8, + PDRDT_RATING = 9, + PDRDT_PRIORITY = 10 + } ; +typedef enum tagPROPDESC_RELATIVEDESCRIPTION_TYPE PROPDESC_RELATIVEDESCRIPTION_TYPE; + +/* [v1_enum] */ +enum tagPROPDESC_AGGREGATION_TYPE + { PDAT_DEFAULT = 0, + PDAT_FIRST = 1, + PDAT_SUM = 2, + PDAT_AVERAGE = 3, + PDAT_DATERANGE = 4, + PDAT_UNION = 5, + PDAT_MAX = 6, + PDAT_MIN = 7 + } ; +typedef enum tagPROPDESC_AGGREGATION_TYPE PROPDESC_AGGREGATION_TYPE; + +/* [v1_enum] */ +enum tagPROPDESC_CONDITION_TYPE + { PDCOT_NONE = 0, + PDCOT_STRING = 1, + PDCOT_SIZE = 2, + PDCOT_DATETIME = 3, + PDCOT_BOOLEAN = 4, + PDCOT_NUMBER = 5 + } ; +typedef enum tagPROPDESC_CONDITION_TYPE PROPDESC_CONDITION_TYPE; + + +EXTERN_C const IID IID_IPropertyDescription; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6f79d558-3e96-4549-a1d1-7d75d2288814") + IPropertyDescription : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetPropertyKey( + /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCanonicalName( + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPropertyType( + /* [out] */ __RPC__out VARTYPE *pvartype) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDisplayName( + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetEditInvitation( + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetTypeFlags( + /* [in] */ PROPDESC_TYPE_FLAGS mask, + /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetViewFlags( + /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnWidth( + /* [out] */ __RPC__out UINT *pcxChars) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDisplayType( + /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetColumnState( + /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetGroupingRange( + /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetRelativeDescriptionType( + /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetRelativeDescription( + /* [in] */ __RPC__in REFPROPVARIANT propvar1, + /* [in] */ __RPC__in REFPROPVARIANT propvar2, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetSortDescription( + /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetSortDescriptionLabel( + /* [in] */ BOOL fDescending, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAggregationType( + /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetConditionType( + /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype, + /* [out] */ __RPC__out CONDITION_OPERATION *popDefault) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetEnumTypeList( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE CoerceToCanonicalValue( + /* [out][in] */ PROPVARIANT *ppropvar) = 0; + + virtual HRESULT STDMETHODCALLTYPE FormatForDisplay( + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsValueCanonical( + /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyDescriptionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyDescription * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyDescription * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyDescription * This); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPERTYKEY *pkey); + + HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( + IPropertyDescription * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( + IPropertyDescription * This, + /* [out] */ __RPC__out VARTYPE *pvartype); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( + IPropertyDescription * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( + IPropertyDescription * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite); + + HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( + IPropertyDescription * This, + /* [in] */ PROPDESC_TYPE_FLAGS mask, + /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags); + + HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags); + + HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( + IPropertyDescription * This, + /* [out] */ __RPC__out UINT *pcxChars); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype); + + HRESULT ( STDMETHODCALLTYPE *GetColumnState )( + IPropertyDescription * This, + /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags); + + HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr); + + HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt); + + HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( + IPropertyDescription * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar1, + /* [in] */ __RPC__in REFPROPVARIANT propvar2, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2); + + HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd); + + HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( + IPropertyDescription * This, + /* [in] */ BOOL fDescending, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription); + + HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype); + + HRESULT ( STDMETHODCALLTYPE *GetConditionType )( + IPropertyDescription * This, + /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype, + /* [out] */ __RPC__out CONDITION_OPERATION *popDefault); + + HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( + IPropertyDescription * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( + IPropertyDescription * This, + /* [out][in] */ PROPVARIANT *ppropvar); + + HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( + IPropertyDescription * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay); + + HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( + IPropertyDescription * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar); + + END_INTERFACE + } IPropertyDescriptionVtbl; + + interface IPropertyDescription + { + CONST_VTBL struct IPropertyDescriptionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyDescription_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyDescription_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyDescription_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyDescription_GetPropertyKey(This,pkey) \ + ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) + +#define IPropertyDescription_GetCanonicalName(This,ppszName) \ + ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) + +#define IPropertyDescription_GetPropertyType(This,pvartype) \ + ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) + +#define IPropertyDescription_GetDisplayName(This,ppszName) \ + ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) + +#define IPropertyDescription_GetEditInvitation(This,ppszInvite) \ + ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) + +#define IPropertyDescription_GetTypeFlags(This,mask,ppdtFlags) \ + ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) + +#define IPropertyDescription_GetViewFlags(This,ppdvFlags) \ + ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) + +#define IPropertyDescription_GetDefaultColumnWidth(This,pcxChars) \ + ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) + +#define IPropertyDescription_GetDisplayType(This,pdisplaytype) \ + ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) + +#define IPropertyDescription_GetColumnState(This,pcsFlags) \ + ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) + +#define IPropertyDescription_GetGroupingRange(This,pgr) \ + ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) + +#define IPropertyDescription_GetRelativeDescriptionType(This,prdt) \ + ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) + +#define IPropertyDescription_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) \ + ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) + +#define IPropertyDescription_GetSortDescription(This,psd) \ + ( (This)->lpVtbl -> GetSortDescription(This,psd) ) + +#define IPropertyDescription_GetSortDescriptionLabel(This,fDescending,ppszDescription) \ + ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) + +#define IPropertyDescription_GetAggregationType(This,paggtype) \ + ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) + +#define IPropertyDescription_GetConditionType(This,pcontype,popDefault) \ + ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) + +#define IPropertyDescription_GetEnumTypeList(This,riid,ppv) \ + ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) + +#define IPropertyDescription_CoerceToCanonicalValue(This,ppropvar) \ + ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) + +#define IPropertyDescription_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) \ + ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) + +#define IPropertyDescription_IsValueCanonical(This,propvar) \ + ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_RemoteCoerceToCanonicalValue_Proxy( + IPropertyDescription * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [out] */ __RPC__out PROPVARIANT *ppropvar); + + +void __RPC_STUB IPropertyDescription_RemoteCoerceToCanonicalValue_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPropertyDescription_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__ +#define __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__ + +/* interface IPropertyDescriptionAliasInfo */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertyDescriptionAliasInfo; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f67104fc-2af9-46fd-b32d-243c1404f3d1") + IPropertyDescriptionAliasInfo : public IPropertyDescription + { + public: + virtual HRESULT STDMETHODCALLTYPE GetSortByAlias( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAdditionalSortByAliases( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyDescriptionAliasInfoVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyDescriptionAliasInfo * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyDescriptionAliasInfo * This); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPERTYKEY *pkey); + + HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( + IPropertyDescriptionAliasInfo * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out VARTYPE *pvartype); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( + IPropertyDescriptionAliasInfo * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( + IPropertyDescriptionAliasInfo * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite); + + HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ PROPDESC_TYPE_FLAGS mask, + /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags); + + HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags); + + HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out UINT *pcxChars); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype); + + HRESULT ( STDMETHODCALLTYPE *GetColumnState )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags); + + HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr); + + HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt); + + HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar1, + /* [in] */ __RPC__in REFPROPVARIANT propvar2, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2); + + HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd); + + HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ BOOL fDescending, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription); + + HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype); + + HRESULT ( STDMETHODCALLTYPE *GetConditionType )( + IPropertyDescriptionAliasInfo * This, + /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype, + /* [out] */ __RPC__out CONDITION_OPERATION *popDefault); + + HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( + IPropertyDescriptionAliasInfo * This, + /* [out][in] */ PROPVARIANT *ppropvar); + + HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay); + + HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar); + + HRESULT ( STDMETHODCALLTYPE *GetSortByAlias )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *GetAdditionalSortByAliases )( + IPropertyDescriptionAliasInfo * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + END_INTERFACE + } IPropertyDescriptionAliasInfoVtbl; + + interface IPropertyDescriptionAliasInfo + { + CONST_VTBL struct IPropertyDescriptionAliasInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyDescriptionAliasInfo_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyDescriptionAliasInfo_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyDescriptionAliasInfo_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyDescriptionAliasInfo_GetPropertyKey(This,pkey) \ + ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) + +#define IPropertyDescriptionAliasInfo_GetCanonicalName(This,ppszName) \ + ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) + +#define IPropertyDescriptionAliasInfo_GetPropertyType(This,pvartype) \ + ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) + +#define IPropertyDescriptionAliasInfo_GetDisplayName(This,ppszName) \ + ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) + +#define IPropertyDescriptionAliasInfo_GetEditInvitation(This,ppszInvite) \ + ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) + +#define IPropertyDescriptionAliasInfo_GetTypeFlags(This,mask,ppdtFlags) \ + ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) + +#define IPropertyDescriptionAliasInfo_GetViewFlags(This,ppdvFlags) \ + ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) + +#define IPropertyDescriptionAliasInfo_GetDefaultColumnWidth(This,pcxChars) \ + ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) + +#define IPropertyDescriptionAliasInfo_GetDisplayType(This,pdisplaytype) \ + ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) + +#define IPropertyDescriptionAliasInfo_GetColumnState(This,pcsFlags) \ + ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) + +#define IPropertyDescriptionAliasInfo_GetGroupingRange(This,pgr) \ + ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) + +#define IPropertyDescriptionAliasInfo_GetRelativeDescriptionType(This,prdt) \ + ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) + +#define IPropertyDescriptionAliasInfo_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) \ + ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) + +#define IPropertyDescriptionAliasInfo_GetSortDescription(This,psd) \ + ( (This)->lpVtbl -> GetSortDescription(This,psd) ) + +#define IPropertyDescriptionAliasInfo_GetSortDescriptionLabel(This,fDescending,ppszDescription) \ + ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) + +#define IPropertyDescriptionAliasInfo_GetAggregationType(This,paggtype) \ + ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) + +#define IPropertyDescriptionAliasInfo_GetConditionType(This,pcontype,popDefault) \ + ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) + +#define IPropertyDescriptionAliasInfo_GetEnumTypeList(This,riid,ppv) \ + ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) + +#define IPropertyDescriptionAliasInfo_CoerceToCanonicalValue(This,ppropvar) \ + ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) + +#define IPropertyDescriptionAliasInfo_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) \ + ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) + +#define IPropertyDescriptionAliasInfo_IsValueCanonical(This,propvar) \ + ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) + + +#define IPropertyDescriptionAliasInfo_GetSortByAlias(This,riid,ppv) \ + ( (This)->lpVtbl -> GetSortByAlias(This,riid,ppv) ) + +#define IPropertyDescriptionAliasInfo_GetAdditionalSortByAliases(This,riid,ppv) \ + ( (This)->lpVtbl -> GetAdditionalSortByAliases(This,riid,ppv) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__ +#define __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__ + +/* interface IPropertyDescriptionSearchInfo */ +/* [unique][object][uuid] */ + +/* [v1_enum] */ +enum tagPROPDESC_SEARCHINFO_FLAGS + { PDSIF_DEFAULT = 0, + PDSIF_ININVERTEDINDEX = 0x1, + PDSIF_ISCOLUMN = 0x2, + PDSIF_ISCOLUMNSPARSE = 0x4 + } ; +typedef int PROPDESC_SEARCHINFO_FLAGS; + +typedef /* [v1_enum] */ +enum tagPROPDESC_COLUMNINDEX_TYPE + { PDCIT_NONE = 0, + PDCIT_ONDISK = 1, + PDCIT_INMEMORY = 2 + } PROPDESC_COLUMNINDEX_TYPE; + + +EXTERN_C const IID IID_IPropertyDescriptionSearchInfo; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("078f91bd-29a2-440f-924e-46a291524520") + IPropertyDescriptionSearchInfo : public IPropertyDescription + { + public: + virtual HRESULT STDMETHODCALLTYPE GetSearchInfoFlags( + /* [out] */ __RPC__out PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetColumnIndexType( + /* [out] */ __RPC__out PROPDESC_COLUMNINDEX_TYPE *ppdciType) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetProjectionString( + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszProjection) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetMaxSize( + /* [out] */ __RPC__out UINT *pcbMaxSize) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyDescriptionSearchInfoVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyDescriptionSearchInfo * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyDescriptionSearchInfo * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyDescriptionSearchInfo * This); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPERTYKEY *pkey); + + HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( + IPropertyDescriptionSearchInfo * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out VARTYPE *pvartype); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( + IPropertyDescriptionSearchInfo * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( + IPropertyDescriptionSearchInfo * This, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite); + + HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( + IPropertyDescriptionSearchInfo * This, + /* [in] */ PROPDESC_TYPE_FLAGS mask, + /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags); + + HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags); + + HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out UINT *pcxChars); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype); + + HRESULT ( STDMETHODCALLTYPE *GetColumnState )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags); + + HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr); + + HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt); + + HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( + IPropertyDescriptionSearchInfo * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar1, + /* [in] */ __RPC__in REFPROPVARIANT propvar2, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2); + + HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd); + + HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( + IPropertyDescriptionSearchInfo * This, + /* [in] */ BOOL fDescending, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription); + + HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype); + + HRESULT ( STDMETHODCALLTYPE *GetConditionType )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype, + /* [out] */ __RPC__out CONDITION_OPERATION *popDefault); + + HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( + IPropertyDescriptionSearchInfo * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( + IPropertyDescriptionSearchInfo * This, + /* [out][in] */ PROPVARIANT *ppropvar); + + HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( + IPropertyDescriptionSearchInfo * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay); + + HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( + IPropertyDescriptionSearchInfo * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar); + + HRESULT ( STDMETHODCALLTYPE *GetSearchInfoFlags )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags); + + HRESULT ( STDMETHODCALLTYPE *GetColumnIndexType )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out PROPDESC_COLUMNINDEX_TYPE *ppdciType); + + HRESULT ( STDMETHODCALLTYPE *GetProjectionString )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszProjection); + + HRESULT ( STDMETHODCALLTYPE *GetMaxSize )( + IPropertyDescriptionSearchInfo * This, + /* [out] */ __RPC__out UINT *pcbMaxSize); + + END_INTERFACE + } IPropertyDescriptionSearchInfoVtbl; + + interface IPropertyDescriptionSearchInfo + { + CONST_VTBL struct IPropertyDescriptionSearchInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyDescriptionSearchInfo_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyDescriptionSearchInfo_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyDescriptionSearchInfo_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyDescriptionSearchInfo_GetPropertyKey(This,pkey) \ + ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) + +#define IPropertyDescriptionSearchInfo_GetCanonicalName(This,ppszName) \ + ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) + +#define IPropertyDescriptionSearchInfo_GetPropertyType(This,pvartype) \ + ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) + +#define IPropertyDescriptionSearchInfo_GetDisplayName(This,ppszName) \ + ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) + +#define IPropertyDescriptionSearchInfo_GetEditInvitation(This,ppszInvite) \ + ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) + +#define IPropertyDescriptionSearchInfo_GetTypeFlags(This,mask,ppdtFlags) \ + ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) + +#define IPropertyDescriptionSearchInfo_GetViewFlags(This,ppdvFlags) \ + ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) + +#define IPropertyDescriptionSearchInfo_GetDefaultColumnWidth(This,pcxChars) \ + ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) + +#define IPropertyDescriptionSearchInfo_GetDisplayType(This,pdisplaytype) \ + ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) + +#define IPropertyDescriptionSearchInfo_GetColumnState(This,pcsFlags) \ + ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) + +#define IPropertyDescriptionSearchInfo_GetGroupingRange(This,pgr) \ + ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) + +#define IPropertyDescriptionSearchInfo_GetRelativeDescriptionType(This,prdt) \ + ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) + +#define IPropertyDescriptionSearchInfo_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) \ + ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) + +#define IPropertyDescriptionSearchInfo_GetSortDescription(This,psd) \ + ( (This)->lpVtbl -> GetSortDescription(This,psd) ) + +#define IPropertyDescriptionSearchInfo_GetSortDescriptionLabel(This,fDescending,ppszDescription) \ + ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) + +#define IPropertyDescriptionSearchInfo_GetAggregationType(This,paggtype) \ + ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) + +#define IPropertyDescriptionSearchInfo_GetConditionType(This,pcontype,popDefault) \ + ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) + +#define IPropertyDescriptionSearchInfo_GetEnumTypeList(This,riid,ppv) \ + ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) + +#define IPropertyDescriptionSearchInfo_CoerceToCanonicalValue(This,ppropvar) \ + ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) + +#define IPropertyDescriptionSearchInfo_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) \ + ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) + +#define IPropertyDescriptionSearchInfo_IsValueCanonical(This,propvar) \ + ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) + + +#define IPropertyDescriptionSearchInfo_GetSearchInfoFlags(This,ppdsiFlags) \ + ( (This)->lpVtbl -> GetSearchInfoFlags(This,ppdsiFlags) ) + +#define IPropertyDescriptionSearchInfo_GetColumnIndexType(This,ppdciType) \ + ( (This)->lpVtbl -> GetColumnIndexType(This,ppdciType) ) + +#define IPropertyDescriptionSearchInfo_GetProjectionString(This,ppszProjection) \ + ( (This)->lpVtbl -> GetProjectionString(This,ppszProjection) ) + +#define IPropertyDescriptionSearchInfo_GetMaxSize(This,pcbMaxSize) \ + ( (This)->lpVtbl -> GetMaxSize(This,pcbMaxSize) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_propsys_0000_0014 */ +/* [local] */ + +/* [v1_enum] */ +enum tagPROPDESC_ENUMFILTER + { PDEF_ALL = 0, + PDEF_SYSTEM = 1, + PDEF_NONSYSTEM = 2, + PDEF_VIEWABLE = 3, + PDEF_QUERYABLE = 4, + PDEF_INFULLTEXTQUERY = 5, + PDEF_COLUMN = 6 + } ; +typedef enum tagPROPDESC_ENUMFILTER PROPDESC_ENUMFILTER; + + + +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0014_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0014_v0_0_s_ifspec; + +#ifndef __IPropertySystem_INTERFACE_DEFINED__ +#define __IPropertySystem_INTERFACE_DEFINED__ + +/* interface IPropertySystem */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertySystem; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ca724e8a-c3e6-442b-88a4-6fb0db8035a3") + IPropertySystem : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetPropertyDescription( + /* [in] */ __RPC__in REFPROPERTYKEY propkey, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPropertyDescriptionByName( + /* [string][in] */ __RPC__in LPCWSTR pszCanonicalName, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPropertyDescriptionListFromString( + /* [string][in] */ __RPC__in LPCWSTR pszPropList, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumeratePropertyDescriptions( + /* [in] */ PROPDESC_ENUMFILTER filterOn, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE FormatForDisplay( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdff, + /* [size_is][string][out] */ __RPC__out_ecount_full_string(cchText) LPWSTR pszText, + /* [in] */ DWORD cchText) = 0; + + virtual HRESULT STDMETHODCALLTYPE FormatForDisplayAlloc( + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdff, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay) = 0; + + virtual HRESULT STDMETHODCALLTYPE RegisterPropertySchema( + /* [string][in] */ __RPC__in LPCWSTR pszPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE UnregisterPropertySchema( + /* [string][in] */ __RPC__in LPCWSTR pszPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE RefreshPropertySchema( void) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertySystemVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertySystem * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertySystem * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertySystem * This); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyDescription )( + IPropertySystem * This, + /* [in] */ __RPC__in REFPROPERTYKEY propkey, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyDescriptionByName )( + IPropertySystem * This, + /* [string][in] */ __RPC__in LPCWSTR pszCanonicalName, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyDescriptionListFromString )( + IPropertySystem * This, + /* [string][in] */ __RPC__in LPCWSTR pszPropList, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *EnumeratePropertyDescriptions )( + IPropertySystem * This, + /* [in] */ PROPDESC_ENUMFILTER filterOn, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( + IPropertySystem * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdff, + /* [size_is][string][out] */ __RPC__out_ecount_full_string(cchText) LPWSTR pszText, + /* [in] */ DWORD cchText); + + HRESULT ( STDMETHODCALLTYPE *FormatForDisplayAlloc )( + IPropertySystem * This, + /* [in] */ __RPC__in REFPROPERTYKEY key, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [in] */ PROPDESC_FORMAT_FLAGS pdff, + /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay); + + HRESULT ( STDMETHODCALLTYPE *RegisterPropertySchema )( + IPropertySystem * This, + /* [string][in] */ __RPC__in LPCWSTR pszPath); + + HRESULT ( STDMETHODCALLTYPE *UnregisterPropertySchema )( + IPropertySystem * This, + /* [string][in] */ __RPC__in LPCWSTR pszPath); + + HRESULT ( STDMETHODCALLTYPE *RefreshPropertySchema )( + IPropertySystem * This); + + END_INTERFACE + } IPropertySystemVtbl; + + interface IPropertySystem + { + CONST_VTBL struct IPropertySystemVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertySystem_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertySystem_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertySystem_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertySystem_GetPropertyDescription(This,propkey,riid,ppv) \ + ( (This)->lpVtbl -> GetPropertyDescription(This,propkey,riid,ppv) ) + +#define IPropertySystem_GetPropertyDescriptionByName(This,pszCanonicalName,riid,ppv) \ + ( (This)->lpVtbl -> GetPropertyDescriptionByName(This,pszCanonicalName,riid,ppv) ) + +#define IPropertySystem_GetPropertyDescriptionListFromString(This,pszPropList,riid,ppv) \ + ( (This)->lpVtbl -> GetPropertyDescriptionListFromString(This,pszPropList,riid,ppv) ) + +#define IPropertySystem_EnumeratePropertyDescriptions(This,filterOn,riid,ppv) \ + ( (This)->lpVtbl -> EnumeratePropertyDescriptions(This,filterOn,riid,ppv) ) + +#define IPropertySystem_FormatForDisplay(This,key,propvar,pdff,pszText,cchText) \ + ( (This)->lpVtbl -> FormatForDisplay(This,key,propvar,pdff,pszText,cchText) ) + +#define IPropertySystem_FormatForDisplayAlloc(This,key,propvar,pdff,ppszDisplay) \ + ( (This)->lpVtbl -> FormatForDisplayAlloc(This,key,propvar,pdff,ppszDisplay) ) + +#define IPropertySystem_RegisterPropertySchema(This,pszPath) \ + ( (This)->lpVtbl -> RegisterPropertySchema(This,pszPath) ) + +#define IPropertySystem_UnregisterPropertySchema(This,pszPath) \ + ( (This)->lpVtbl -> UnregisterPropertySchema(This,pszPath) ) + +#define IPropertySystem_RefreshPropertySchema(This) \ + ( (This)->lpVtbl -> RefreshPropertySchema(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertySystem_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyDescriptionList_INTERFACE_DEFINED__ +#define __IPropertyDescriptionList_INTERFACE_DEFINED__ + +/* interface IPropertyDescriptionList */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertyDescriptionList; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1f9fc1d0-c39b-4b26-817f-011967d3440e") + IPropertyDescriptionList : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCount( + /* [out] */ __RPC__out UINT *pcElem) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetAt( + /* [in] */ UINT iElem, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyDescriptionListVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyDescriptionList * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyDescriptionList * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyDescriptionList * This); + + HRESULT ( STDMETHODCALLTYPE *GetCount )( + IPropertyDescriptionList * This, + /* [out] */ __RPC__out UINT *pcElem); + + HRESULT ( STDMETHODCALLTYPE *GetAt )( + IPropertyDescriptionList * This, + /* [in] */ UINT iElem, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + END_INTERFACE + } IPropertyDescriptionListVtbl; + + interface IPropertyDescriptionList + { + CONST_VTBL struct IPropertyDescriptionListVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyDescriptionList_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyDescriptionList_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyDescriptionList_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyDescriptionList_GetCount(This,pcElem) \ + ( (This)->lpVtbl -> GetCount(This,pcElem) ) + +#define IPropertyDescriptionList_GetAt(This,iElem,riid,ppv) \ + ( (This)->lpVtbl -> GetAt(This,iElem,riid,ppv) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyDescriptionList_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertyStoreFactory_INTERFACE_DEFINED__ +#define __IPropertyStoreFactory_INTERFACE_DEFINED__ + +/* interface IPropertyStoreFactory */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertyStoreFactory; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bc110b6d-57e8-4148-a9c6-91015ab2f3a5") + IPropertyStoreFactory : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetPropertyStore( + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPropertyStoreForKeys( + /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys, + /* [in] */ UINT cKeys, + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertyStoreFactoryVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertyStoreFactory * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertyStoreFactory * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertyStoreFactory * This); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyStore )( + IPropertyStoreFactory * This, + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyStoreForKeys )( + IPropertyStoreFactory * This, + /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys, + /* [in] */ UINT cKeys, + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + END_INTERFACE + } IPropertyStoreFactoryVtbl; + + interface IPropertyStoreFactory + { + CONST_VTBL struct IPropertyStoreFactoryVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertyStoreFactory_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertyStoreFactory_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertyStoreFactory_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertyStoreFactory_GetPropertyStore(This,flags,pUnkFactory,riid,ppv) \ + ( (This)->lpVtbl -> GetPropertyStore(This,flags,pUnkFactory,riid,ppv) ) + +#define IPropertyStoreFactory_GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) \ + ( (This)->lpVtbl -> GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertyStoreFactory_INTERFACE_DEFINED__ */ + + +#ifndef __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__ +#define __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__ + +/* interface IDelayedPropertyStoreFactory */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IDelayedPropertyStoreFactory; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("40d4577f-e237-4bdb-bd69-58f089431b6a") + IDelayedPropertyStoreFactory : public IPropertyStoreFactory + { + public: + virtual HRESULT STDMETHODCALLTYPE GetDelayedPropertyStore( + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [in] */ DWORD dwStoreId, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + }; + +#else /* C style interface */ + + typedef struct IDelayedPropertyStoreFactoryVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDelayedPropertyStoreFactory * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDelayedPropertyStoreFactory * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDelayedPropertyStoreFactory * This); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyStore )( + IDelayedPropertyStoreFactory * This, + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyStoreForKeys )( + IDelayedPropertyStoreFactory * This, + /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys, + /* [in] */ UINT cKeys, + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + HRESULT ( STDMETHODCALLTYPE *GetDelayedPropertyStore )( + IDelayedPropertyStoreFactory * This, + /* [in] */ GETPROPERTYSTOREFLAGS flags, + /* [in] */ DWORD dwStoreId, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + END_INTERFACE + } IDelayedPropertyStoreFactoryVtbl; + + interface IDelayedPropertyStoreFactory + { + CONST_VTBL struct IDelayedPropertyStoreFactoryVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDelayedPropertyStoreFactory_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDelayedPropertyStoreFactory_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDelayedPropertyStoreFactory_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDelayedPropertyStoreFactory_GetPropertyStore(This,flags,pUnkFactory,riid,ppv) \ + ( (This)->lpVtbl -> GetPropertyStore(This,flags,pUnkFactory,riid,ppv) ) + +#define IDelayedPropertyStoreFactory_GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) \ + ( (This)->lpVtbl -> GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) ) + + +#define IDelayedPropertyStoreFactory_GetDelayedPropertyStore(This,flags,dwStoreId,riid,ppv) \ + ( (This)->lpVtbl -> GetDelayedPropertyStore(This,flags,dwStoreId,riid,ppv) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_propsys_0000_0018 */ +/* [local] */ + +/* [v1_enum] */ +enum tagPERSIST_SPROPSTORE_FLAGS + { FPSPS_READONLY = 0x1 + } ; +typedef int PERSIST_SPROPSTORE_FLAGS; + +typedef struct tagSERIALIZEDPROPSTORAGE SERIALIZEDPROPSTORAGE; + +typedef SERIALIZEDPROPSTORAGE __unaligned *PUSERIALIZEDPROPSTORAGE; + +typedef const SERIALIZEDPROPSTORAGE __unaligned *PCUSERIALIZEDPROPSTORAGE; + + + +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0018_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0018_v0_0_s_ifspec; + +#ifndef __IPersistSerializedPropStorage_INTERFACE_DEFINED__ +#define __IPersistSerializedPropStorage_INTERFACE_DEFINED__ + +/* interface IPersistSerializedPropStorage */ +/* [object][local][unique][uuid] */ + + +EXTERN_C const IID IID_IPersistSerializedPropStorage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e318ad57-0aa0-450f-aca5-6fab7103d917") + IPersistSerializedPropStorage : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SetFlags( + /* [in] */ PERSIST_SPROPSTORE_FLAGS flags) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetPropertyStorage( + /* [in] */ + __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, + /* [in] */ + __in DWORD cb) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPropertyStorage( + /* [out] */ + __deref_out_bcount(*pcb) SERIALIZEDPROPSTORAGE **ppsps, + /* [out] */ + __out DWORD *pcb) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPersistSerializedPropStorageVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPersistSerializedPropStorage * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPersistSerializedPropStorage * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPersistSerializedPropStorage * This); + + HRESULT ( STDMETHODCALLTYPE *SetFlags )( + IPersistSerializedPropStorage * This, + /* [in] */ PERSIST_SPROPSTORE_FLAGS flags); + + HRESULT ( STDMETHODCALLTYPE *SetPropertyStorage )( + IPersistSerializedPropStorage * This, + /* [in] */ + __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, + /* [in] */ + __in DWORD cb); + + HRESULT ( STDMETHODCALLTYPE *GetPropertyStorage )( + IPersistSerializedPropStorage * This, + /* [out] */ + __deref_out_bcount(*pcb) SERIALIZEDPROPSTORAGE **ppsps, + /* [out] */ + __out DWORD *pcb); + + END_INTERFACE + } IPersistSerializedPropStorageVtbl; + + interface IPersistSerializedPropStorage + { + CONST_VTBL struct IPersistSerializedPropStorageVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPersistSerializedPropStorage_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPersistSerializedPropStorage_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPersistSerializedPropStorage_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPersistSerializedPropStorage_SetFlags(This,flags) \ + ( (This)->lpVtbl -> SetFlags(This,flags) ) + +#define IPersistSerializedPropStorage_SetPropertyStorage(This,psps,cb) \ + ( (This)->lpVtbl -> SetPropertyStorage(This,psps,cb) ) + +#define IPersistSerializedPropStorage_GetPropertyStorage(This,ppsps,pcb) \ + ( (This)->lpVtbl -> GetPropertyStorage(This,ppsps,pcb) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPersistSerializedPropStorage_INTERFACE_DEFINED__ */ + + +#ifndef __IPropertySystemChangeNotify_INTERFACE_DEFINED__ +#define __IPropertySystemChangeNotify_INTERFACE_DEFINED__ + +/* interface IPropertySystemChangeNotify */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IPropertySystemChangeNotify; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fa955fd9-38be-4879-a6ce-824cf52d609f") + IPropertySystemChangeNotify : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SchemaRefreshed( void) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPropertySystemChangeNotifyVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPropertySystemChangeNotify * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPropertySystemChangeNotify * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPropertySystemChangeNotify * This); + + HRESULT ( STDMETHODCALLTYPE *SchemaRefreshed )( + IPropertySystemChangeNotify * This); + + END_INTERFACE + } IPropertySystemChangeNotifyVtbl; + + interface IPropertySystemChangeNotify + { + CONST_VTBL struct IPropertySystemChangeNotifyVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPropertySystemChangeNotify_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPropertySystemChangeNotify_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPropertySystemChangeNotify_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPropertySystemChangeNotify_SchemaRefreshed(This) \ + ( (This)->lpVtbl -> SchemaRefreshed(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPropertySystemChangeNotify_INTERFACE_DEFINED__ */ + + +#ifndef __ICreateObject_INTERFACE_DEFINED__ +#define __ICreateObject_INTERFACE_DEFINED__ + +/* interface ICreateObject */ +/* [object][unique][uuid] */ + + +EXTERN_C const IID IID_ICreateObject; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("75121952-e0d0-43e5-9380-1d80483acf72") + ICreateObject : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateObject( + /* [in] */ __RPC__in REFCLSID clsid, + /* [unique][in] */ __RPC__in_opt IUnknown *pUnkOuter, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0; + + }; + +#else /* C style interface */ + + typedef struct ICreateObjectVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICreateObject * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICreateObject * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICreateObject * This); + + HRESULT ( STDMETHODCALLTYPE *CreateObject )( + ICreateObject * This, + /* [in] */ __RPC__in REFCLSID clsid, + /* [unique][in] */ __RPC__in_opt IUnknown *pUnkOuter, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ __RPC__deref_out_opt void **ppv); + + END_INTERFACE + } ICreateObjectVtbl; + + interface ICreateObject + { + CONST_VTBL struct ICreateObjectVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICreateObject_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICreateObject_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICreateObject_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICreateObject_CreateObject(This,clsid,pUnkOuter,riid,ppv) \ + ( (This)->lpVtbl -> CreateObject(This,clsid,pUnkOuter,riid,ppv) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICreateObject_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_propsys_0000_0021 */ +/* [local] */ + +// Format a property value for display purposes +PSSTDAPI PSFormatForDisplay( + __in REFPROPERTYKEY propkey, + __in REFPROPVARIANT propvar, + __in PROPDESC_FORMAT_FLAGS pdfFlags, + __out_ecount(cchText) LPWSTR pwszText, + __in DWORD cchText); + +PSSTDAPI PSFormatForDisplayAlloc( + __in REFPROPERTYKEY key, + __in REFPROPVARIANT propvar, + __in PROPDESC_FORMAT_FLAGS pdff, + __deref_out PWSTR *ppszDisplay); + +PSSTDAPI PSFormatPropertyValue( + __in IPropertyStore *pps, + __in IPropertyDescription *ppd, + __in PROPDESC_FORMAT_FLAGS pdff, + __deref_out LPWSTR *ppszDisplay); + + +#define PKEY_PIDSTR_MAX 10 // will take care of any long integer value +#define GUIDSTRING_MAX (1 + 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1) // "{12345678-1234-1234-1234-123456789012}" +#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX) + +// Convert a PROPERTYKEY to and from a PWSTR +PSSTDAPI PSStringFromPropertyKey( + __in REFPROPERTYKEY pkey, + __out_ecount(cch) LPWSTR psz, + __in UINT cch); + +PSSTDAPI PSPropertyKeyFromString( + __in LPCWSTR pszString, + __out PROPERTYKEY *pkey); + + +// Creates an in-memory property store +// Returns an IPropertyStore, IPersistSerializedPropStorage, and related interfaces interface +PSSTDAPI PSCreateMemoryPropertyStore( + __in REFIID riid, + __deref_out void **ppv); + + +// Create a read-only, delay-bind multiplexing property store +// Returns an IPropertyStore interface or related interfaces +PSSTDAPI PSCreateDelayedMultiplexPropertyStore( + __in GETPROPERTYSTOREFLAGS flags, + __in IDelayedPropertyStoreFactory *pdpsf, + __in_ecount(cStores) const DWORD *rgStoreIds, + __in DWORD cStores, + __in REFIID riid, + __deref_out void **ppv); + + +// Create a read-only property store from one or more sources (which each must support either IPropertyStore or IPropertySetStorage) +// Returns an IPropertyStore interface or related interfaces +PSSTDAPI PSCreateMultiplexPropertyStore( + __in_ecount(cStores) IUnknown **prgpunkStores, + __in DWORD cStores, + __in REFIID riid, + __deref_out void **ppv); + + +// Create a container for IPropertyChanges +// Returns an IPropertyChangeArray interface +PSSTDAPI PSCreatePropertyChangeArray( + __in_ecount_opt(cChanges) const PROPERTYKEY *rgpropkey, + __in_ecount_opt(cChanges) const PKA_FLAGS *rgflags, + __in_ecount_opt(cChanges) const PROPVARIANT *rgpropvar, + __in UINT cChanges, + __in REFIID riid, + __deref_out void **ppv); + + +// Create a simple property change +// Returns an IPropertyChange interface +PSSTDAPI PSCreateSimplePropertyChange( + __in PKA_FLAGS flags, + __in REFPROPERTYKEY key, + __in REFPROPVARIANT propvar, + __in REFIID riid, + __deref_out void **ppv); + + +// Get a property description +// Returns an IPropertyDescription interface +PSSTDAPI PSGetPropertyDescription( + __in REFPROPERTYKEY propkey, + __in REFIID riid, + __deref_out void **ppv); + +PSSTDAPI PSGetPropertyDescriptionByName( + __in LPCWSTR pszCanonicalName, + __in REFIID riid, + __deref_out void **ppv); + + +// Lookup a per-machine registered file property handler +PSSTDAPI PSLookupPropertyHandlerCLSID( + __in PCWSTR pszFilePath, + __out CLSID *pclsid); +// Get a property handler, on Vista or downlevel to XP +// punkItem is a shell item created with an SHCreateItemXXX API +// Returns an IPropertyStore +PSSTDAPI PSGetItemPropertyHandler( + __in IUnknown *punkItem, + __in BOOL fReadWrite, + __in REFIID riid, + __deref_out void **ppv); + + +// Get a property handler, on Vista or downlevel to XP +// punkItem is a shell item created with an SHCreateItemXXX API +// punkCreateObject supports ICreateObject +// Returns an IPropertyStore +PSSTDAPI PSGetItemPropertyHandlerWithCreateObject( + __in IUnknown *punkItem, + __in BOOL fReadWrite, + __in IUnknown *punkCreateObject, + __in REFIID riid, + __deref_out void **ppv); + + +// Get or set a property value from a store +PSSTDAPI PSGetPropertyValue( + __in IPropertyStore *pps, + __in IPropertyDescription *ppd, + __out PROPVARIANT *ppropvar); + +PSSTDAPI PSSetPropertyValue( + __in IPropertyStore *pps, + __in IPropertyDescription *ppd, + __in REFPROPVARIANT propvar); + + +// Interact with the set of property descriptions +PSSTDAPI PSRegisterPropertySchema( + __in PCWSTR pszPath); + +PSSTDAPI PSUnregisterPropertySchema( + __in PCWSTR pszPath); + +PSSTDAPI PSRefreshPropertySchema(); + +// Returns either: IPropertyDescriptionList or IEnumUnknown interfaces +PSSTDAPI PSEnumeratePropertyDescriptions( + __in PROPDESC_ENUMFILTER filterOn, + __in REFIID riid, + __deref_out void **ppv); + + +// Convert between a PROPERTYKEY and its canonical name +PSSTDAPI PSGetPropertyKeyFromName( + __in PCWSTR pszName, + __out PROPERTYKEY *ppropkey); + +PSSTDAPI PSGetNameFromPropertyKey( + __in REFPROPERTYKEY propkey, + __deref_out PWSTR *ppszCanonicalName); + + +// Coerce and canonicalize a property value +PSSTDAPI PSCoerceToCanonicalValue( + __in REFPROPERTYKEY key, + __inout PROPVARIANT *ppropvar); + + +// Convert a 'prop:' string into a list of property descriptions +// Returns an IPropertyDescriptionList interface +PSSTDAPI PSGetPropertyDescriptionListFromString( + __in LPCWSTR pszPropList, + __in REFIID riid, + __deref_out void **ppv); + + +// Wrap an IPropertySetStorage interface in an IPropertyStore interface +// Returns an IPropertyStore or related interface +PSSTDAPI PSCreatePropertyStoreFromPropertySetStorage( + __in IPropertySetStorage *ppss, + DWORD grfMode, + REFIID riid, + __deref_out void **ppv); + + +// punkSource must support IPropertyStore or IPropertySetStorage +// On success, the returned ppv is guaranteed to support IPropertyStore. +// If punkSource already supports IPropertyStore, no wrapper is created. +PSSTDAPI PSCreatePropertyStoreFromObject( + __in IUnknown *punk, + __in DWORD grfMode, + __in REFIID riid, + __deref_out void **ppv); + + +// punkSource must support IPropertyStore +// riid may be IPropertyStore, IPropertySetStorage, IPropertyStoreCapabilities, or IObjectProvider +PSSTDAPI PSCreateAdapterFromPropertyStore( + __in IPropertyStore *pps, + __in REFIID riid, + __deref_out void **ppv); + + +// Talk to the property system using an interface +// Returns an IPropertySystem interface +PSSTDAPI PSGetPropertySystem( + __in REFIID riid, + __deref_out void **ppv); + + +// Obtain a value from serialized property storage +PSSTDAPI PSGetPropertyFromPropertyStorage( + __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, + __in DWORD cb, + __in REFPROPERTYKEY rpkey, + __out PROPVARIANT *ppropvar); + + +// Obtain a named value from serialized property storage +PSSTDAPI PSGetNamedPropertyFromPropertyStorage( + __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, + __in DWORD cb, + __in LPCWSTR pszName, + __out PROPVARIANT *ppropvar); + + + + +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0021_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0021_v0_0_s_ifspec; + + +#ifndef __PropSysObjects_LIBRARY_DEFINED__ +#define __PropSysObjects_LIBRARY_DEFINED__ + +/* library PropSysObjects */ +/* [version][lcid][uuid] */ + + +EXTERN_C const IID LIBID_PropSysObjects; + +EXTERN_C const CLSID CLSID_InMemoryPropertyStore; + +#ifdef __cplusplus + +class DECLSPEC_UUID("9a02e012-6303-4e1e-b9a1-630f802592c5") +InMemoryPropertyStore; +#endif + +EXTERN_C const CLSID CLSID_PropertySystem; + +#ifdef __cplusplus + +class DECLSPEC_UUID("b8967f85-58ae-4f46-9fb2-5d7904798f4b") +PropertySystem; +#endif +#endif /* __PropSysObjects_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); + +unsigned long __RPC_USER LPSAFEARRAY_UserSize( unsigned long *, unsigned long , LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal( unsigned long *, unsigned char *, LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); +void __RPC_USER LPSAFEARRAY_UserFree( unsigned long *, LPSAFEARRAY * ); + +unsigned long __RPC_USER BSTR_UserSize64( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal64( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree64( unsigned long *, BSTR * ); + +unsigned long __RPC_USER LPSAFEARRAY_UserSize64( unsigned long *, unsigned long , LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal64( unsigned long *, unsigned char *, LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * ); +void __RPC_USER LPSAFEARRAY_UserFree64( unsigned long *, LPSAFEARRAY * ); + +/* [local] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_Initialize_Proxy( + IInitializeWithStream * This, + /* [in] */ IStream *pstream, + /* [in] */ DWORD grfMode); + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_Initialize_Stub( + IInitializeWithStream * This, + /* [in] */ __RPC__in_opt IStream *pstream, + /* [in] */ DWORD grfMode); + +/* [local] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_CoerceToCanonicalValue_Proxy( + IPropertyDescription * This, + /* [out][in] */ PROPVARIANT *ppropvar); + + +/* [call_as] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_CoerceToCanonicalValue_Stub( + IPropertyDescription * This, + /* [in] */ __RPC__in REFPROPVARIANT propvar, + /* [out] */ __RPC__out PROPVARIANT *ppropvar); + + + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h new file mode 100644 index 0000000000..ba9836a84a --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h @@ -0,0 +1,113 @@ +#pragma once + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#define RPC_range(min,max) + +#define __RPC__in +#define __RPC__in_string +#define __RPC__in_opt_string +#define __RPC__deref_opt_in_opt +#define __RPC__opt_in_opt_string +#define __RPC__in_ecount(size) +#define __RPC__in_ecount_full(size) +#define __RPC__in_ecount_full_string(size) +#define __RPC__in_ecount_part(size, length) +#define __RPC__in_ecount_full_opt(size) +#define __RPC__in_ecount_full_opt_string(size) +#define __RPC__inout_ecount_full_opt_string(size) +#define __RPC__in_ecount_part_opt(size, length) + +#define __RPC__deref_in +#define __RPC__deref_in_string +#define __RPC__deref_opt_in +#define __RPC__deref_in_opt +#define __RPC__deref_in_ecount(size) +#define __RPC__deref_in_ecount_part(size, length) +#define __RPC__deref_in_ecount_full(size) +#define __RPC__deref_in_ecount_full_opt(size) +#define __RPC__deref_in_ecount_full_string(size) +#define __RPC__deref_in_ecount_full_opt_string(size) +#define __RPC__deref_in_ecount_opt(size) +#define __RPC__deref_in_ecount_opt_string(size) +#define __RPC__deref_in_ecount_part_opt(size, length) + +// [out] +#define __RPC__out +#define __RPC__out_ecount(size) +#define __RPC__out_ecount_part(size, length) +#define __RPC__out_ecount_full(size) +#define __RPC__out_ecount_full_string(size) + +// [in,out] +#define __RPC__inout +#define __RPC__inout_string +#define __RPC__opt_inout +#define __RPC__inout_ecount(size) +#define __RPC__inout_ecount_part(size, length) +#define __RPC__inout_ecount_full(size) +#define __RPC__inout_ecount_full_string(size) + +// [in,unique] +#define __RPC__in_opt +#define __RPC__in_ecount_opt(size) + + +// [in,out,unique] +#define __RPC__inout_opt +#define __RPC__inout_ecount_opt(size) +#define __RPC__inout_ecount_part_opt(size, length) +#define __RPC__inout_ecount_full_opt(size) +#define __RPC__inout_ecount_full_string(size) + +// [out] ** +#define __RPC__deref_out +#define __RPC__deref_out_string +#define __RPC__deref_out_opt +#define __RPC__deref_out_opt_string +#define __RPC__deref_out_ecount(size) +#define __RPC__deref_out_ecount_part(size, length) +#define __RPC__deref_out_ecount_full(size) +#define __RPC__deref_out_ecount_full_string(size) + + +// [in,out] **, second pointer decoration. +#define __RPC__deref_inout +#define __RPC__deref_inout_string +#define __RPC__deref_inout_opt +#define __RPC__deref_inout_opt_string +#define __RPC__deref_inout_ecount_full(size) +#define __RPC__deref_inout_ecount_full_string(size) +#define __RPC__deref_inout_ecount_opt(size) +#define __RPC__deref_inout_ecount_part_opt(size, length) +#define __RPC__deref_inout_ecount_full_opt(size) +#define __RPC__deref_inout_ecount_full_opt_string(size) + +// #define __RPC_out_opt out_opt is not allowed in rpc + +// [in,out,unique] +#define __RPC__deref_opt_inout +#define __RPC__deref_opt_inout_string +#define __RPC__deref_opt_inout_ecount(size) +#define __RPC__deref_opt_inout_ecount_part(size, length) +#define __RPC__deref_opt_inout_ecount_full(size) +#define __RPC__deref_opt_inout_ecount_full_string(size) + +#define __RPC__deref_out_ecount_opt(size) +#define __RPC__deref_out_ecount_part_opt(size, length) +#define __RPC__deref_out_ecount_full_opt(size) +#define __RPC__deref_out_ecount_full_opt_string(size) + +#define __RPC__deref_opt_inout_opt +#define __RPC__deref_opt_inout_opt_string +#define __RPC__deref_opt_inout_ecount_opt(size) +#define __RPC__deref_opt_inout_ecount_part_opt(size, length) +#define __RPC__deref_opt_inout_ecount_full_opt(size) +#define __RPC__deref_opt_inout_ecount_full_opt_string(size) + +#define __RPC_full_pointer +#define __RPC_unique_pointer +#define __RPC_ref_pointer +#define __RPC_string diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/sal.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/sal.h new file mode 100644 index 0000000000..3f99ab9a92 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/sal.h @@ -0,0 +1,252 @@ +#pragma once + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +/*#define __null*/ // << Conflicts with GCC internal type __null +#define __notnull +#define __maybenull +#define __readonly +#define __notreadonly +#define __maybereadonly +#define __valid +#define __notvalid +#define __maybevalid +#define __readableTo(extent) +#define __elem_readableTo(size) +#define __byte_readableTo(size) +#define __writableTo(size) +#define __elem_writableTo(size) +#define __byte_writableTo(size) +#define __deref +#define __pre +#define __post +#define __precond(expr) +#define __postcond(expr) +#define __exceptthat +#define __execeptthat +#define __inner_success(expr) +#define __inner_checkReturn +#define __inner_typefix(ctype) +#define __inner_override +#define __inner_callback +#define __inner_blocksOn(resource) +#define __inner_fallthrough_dec +#define __inner_fallthrough +#define __refparam +#define __inner_control_entrypoint(category) +#define __inner_data_entrypoint(category) + +#define __ecount(size) +#define __bcount(size) +#define __in +#define __in_ecount(size) +#define __in_bcount(size) +#define __in_z +#define __in_ecount_z(size) +#define __in_bcount_z(size) +#define __in_nz +#define __in_ecount_nz(size) +#define __in_bcount_nz(size) +#define __out +#define __out_ecount(size) +#define __out_bcount(size) +#define __out_ecount_part(size,length) +#define __out_bcount_part(size,length) +#define __out_ecount_full(size) +#define __out_bcount_full(size) +#define __out_z +#define __out_z_opt +#define __out_ecount_z(size) +#define __out_bcount_z(size) +#define __out_ecount_part_z(size,length) +#define __out_bcount_part_z(size,length) +#define __out_ecount_full_z(size) +#define __out_bcount_full_z(size) +#define __out_nz +#define __out_nz_opt +#define __out_ecount_nz(size) +#define __out_bcount_nz(size) +#define __inout +#define __inout_ecount(size) +#define __inout_bcount(size) +#define __inout_ecount_part(size,length) +#define __inout_bcount_part(size,length) +#define __inout_ecount_full(size) +#define __inout_bcount_full(size) +#define __inout_z +#define __inout_ecount_z(size) +#define __inout_bcount_z(size) +#define __inout_nz +#define __inout_ecount_nz(size) +#define __inout_bcount_nz(size) +#define __ecount_opt(size) +#define __bcount_opt(size) +#define __in_opt +#define __in_ecount_opt(size) +#define __in_bcount_opt(size) +#define __in_z_opt +#define __in_ecount_z_opt(size) +#define __in_bcount_z_opt(size) +#define __in_nz_opt +#define __in_ecount_nz_opt(size) +#define __in_bcount_nz_opt(size) +#define __out_opt +#define __out_ecount_opt(size) +#define __out_bcount_opt(size) +#define __out_ecount_part_opt(size,length) +#define __out_bcount_part_opt(size,length) +#define __out_ecount_full_opt(size) +#define __out_bcount_full_opt(size) +#define __out_ecount_z_opt(size) +#define __out_bcount_z_opt(size) +#define __out_ecount_part_z_opt(size,length) +#define __out_bcount_part_z_opt(size,length) +#define __out_ecount_full_z_opt(size) +#define __out_bcount_full_z_opt(size) +#define __out_ecount_nz_opt(size) +#define __out_bcount_nz_opt(size) +#define __inout_opt +#define __inout_ecount_opt(size) +#define __inout_bcount_opt(size) +#define __inout_ecount_part_opt(size,length) +#define __inout_bcount_part_opt(size,length) +#define __inout_ecount_full_opt(size) +#define __inout_bcount_full_opt(size) +#define __inout_z_opt +#define __inout_ecount_z_opt(size) +#define __inout_ecount_z_opt(size) +#define __inout_bcount_z_opt(size) +#define __inout_nz_opt +#define __inout_ecount_nz_opt(size) +#define __inout_bcount_nz_opt(size) +#define __deref_ecount(size) +#define __deref_bcount(size) +#define __deref_out +#define __deref_out_ecount(size) +#define __deref_out_bcount(size) +#define __deref_out_ecount_part(size,length) +#define __deref_out_bcount_part(size,length) +#define __deref_out_ecount_full(size) +#define __deref_out_bcount_full(size) +#define __deref_out_z +#define __deref_out_ecount_z(size) +#define __deref_out_bcount_z(size) +#define __deref_out_nz +#define __deref_out_ecount_nz(size) +#define __deref_out_bcount_nz(size) +#define __deref_inout +#define __deref_inout_z +#define __deref_inout_ecount(size) +#define __deref_inout_bcount(size) +#define __deref_inout_ecount_part(size,length) +#define __deref_inout_bcount_part(size,length) +#define __deref_inout_ecount_full(size) +#define __deref_inout_bcount_full(size) +#define __deref_inout_z +#define __deref_inout_ecount_z(size) +#define __deref_inout_bcount_z(size) +#define __deref_inout_nz +#define __deref_inout_ecount_nz(size) +#define __deref_inout_bcount_nz(size) +#define __deref_ecount_opt(size) +#define __deref_bcount_opt(size) +#define __deref_out_opt +#define __deref_out_ecount_opt(size) +#define __deref_out_bcount_opt(size) +#define __deref_out_ecount_part_opt(size,length) +#define __deref_out_bcount_part_opt(size,length) +#define __deref_out_ecount_full_opt(size) +#define __deref_out_bcount_full_opt(size) +#define __deref_out_z_opt +#define __deref_out_ecount_z_opt(size) +#define __deref_out_bcount_z_opt(size) +#define __deref_out_nz_opt +#define __deref_out_ecount_nz_opt(size) +#define __deref_out_bcount_nz_opt(size) +#define __deref_inout_opt +#define __deref_inout_ecount_opt(size) +#define __deref_inout_bcount_opt(size) +#define __deref_inout_ecount_part_opt(size,length) +#define __deref_inout_bcount_part_opt(size,length) +#define __deref_inout_ecount_full_opt(size) +#define __deref_inout_bcount_full_opt(size) +#define __deref_inout_z_opt +#define __deref_inout_ecount_z_opt(size) +#define __deref_inout_bcount_z_opt(size) +#define __deref_inout_nz_opt +#define __deref_inout_ecount_nz_opt(size) +#define __deref_inout_bcount_nz_opt(size) +#define __deref_opt_ecount(size) +#define __deref_opt_bcount(size) +#define __deref_opt_out +#define __deref_opt_out_z +#define __deref_opt_out_ecount(size) +#define __deref_opt_out_bcount(size) +#define __deref_opt_out_ecount_part(size,length) +#define __deref_opt_out_bcount_part(size,length) +#define __deref_opt_out_ecount_full(size) +#define __deref_opt_out_bcount_full(size) +#define __deref_opt_inout +#define __deref_opt_inout_ecount(size) +#define __deref_opt_inout_bcount(size) +#define __deref_opt_inout_ecount_part(size,length) +#define __deref_opt_inout_bcount_part(size,length) +#define __deref_opt_inout_ecount_full(size) +#define __deref_opt_inout_bcount_full(size) +#define __deref_opt_inout_z +#define __deref_opt_inout_ecount_z(size) +#define __deref_opt_inout_bcount_z(size) +#define __deref_opt_inout_nz +#define __deref_opt_inout_ecount_nz(size) +#define __deref_opt_inout_bcount_nz(size) +#define __deref_opt_ecount_opt(size) +#define __deref_opt_bcount_opt(size) +#define __deref_opt_out_opt +#define __deref_opt_out_ecount_opt(size) +#define __deref_opt_out_bcount_opt(size) +#define __deref_opt_out_ecount_part_opt(size,length) +#define __deref_opt_out_bcount_part_opt(size,length) +#define __deref_opt_out_ecount_full_opt(size) +#define __deref_opt_out_bcount_full_opt(size) +#define __deref_opt_out_z_opt +#define __deref_opt_out_ecount_z_opt(size) +#define __deref_opt_out_bcount_z_opt(size) +#define __deref_opt_out_nz_opt +#define __deref_opt_out_ecount_nz_opt(size) +#define __deref_opt_out_bcount_nz_opt(size) +#define __deref_opt_inout_opt +#define __deref_opt_inout_ecount_opt(size) +#define __deref_opt_inout_bcount_opt(size) +#define __deref_opt_inout_ecount_part_opt(size,length) +#define __deref_opt_inout_bcount_part_opt(size,length) +#define __deref_opt_inout_ecount_full_opt(size) +#define __deref_opt_inout_bcount_full_opt(size) +#define __deref_opt_inout_z_opt +#define __deref_opt_inout_ecount_z_opt(size) +#define __deref_opt_inout_bcount_z_opt(size) +#define __deref_opt_inout_nz_opt +#define __deref_opt_inout_ecount_nz_opt(size) +#define __deref_opt_inout_bcount_nz_opt(size) + +#define __success(expr) +#define __nullterminated +#define __nullnullterminated +#define __reserved +#define __checkReturn +#define __typefix(ctype) +#define __override +#define __callback +#define __format_string +#define __blocksOn(resource) +#define __control_entrypoint(category) +#define __data_entrypoint(category) + +#ifndef __fallthrough + #define __fallthrough __inner_fallthrough +#endif + +#ifndef __analysis_assume + #define __analysis_assume(expr) +#endif diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h new file mode 100644 index 0000000000..bc9008659a --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h @@ -0,0 +1,225 @@ +/* + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + sdkddkver.h + +Abstract: + + Master include file for versioning windows SDK/DDK. + +*/ + +#ifndef _INC_SDKDDKVER +#define _INC_SDKDDKVER + +#pragma once + +// +// _WIN32_WINNT version constants +// +#define _WIN32_WINNT_NT4 0x0400 +#define _WIN32_WINNT_WIN2K 0x0500 +#define _WIN32_WINNT_WINXP 0x0501 +#define _WIN32_WINNT_WS03 0x0502 +#define _WIN32_WINNT_LONGHORN 0x0600 + +// +// _WIN32_IE_ version constants +// +#define _WIN32_IE_IE20 0x0200 +#define _WIN32_IE_IE30 0x0300 +#define _WIN32_IE_IE302 0x0302 +#define _WIN32_IE_IE40 0x0400 +#define _WIN32_IE_IE401 0x0401 +#define _WIN32_IE_IE50 0x0500 +#define _WIN32_IE_IE501 0x0501 +#define _WIN32_IE_IE55 0x0550 +#define _WIN32_IE_IE60 0x0600 +#define _WIN32_IE_IE60SP1 0x0601 +#define _WIN32_IE_IE60SP2 0x0603 +#define _WIN32_IE_IE70 0x0700 + +// +// IE <-> OS version mapping +// +// NT4 supports IE versions 2.0 -> 6.0 SP1 +#define _WIN32_IE_NT4 _WIN32_IE_IE20 +#define _WIN32_IE_NT4SP1 _WIN32_IE_IE20 +#define _WIN32_IE_NT4SP2 _WIN32_IE_IE20 +#define _WIN32_IE_NT4SP3 _WIN32_IE_IE302 +#define _WIN32_IE_NT4SP4 _WIN32_IE_IE401 +#define _WIN32_IE_NT4SP5 _WIN32_IE_IE401 +#define _WIN32_IE_NT4SP6 _WIN32_IE_IE50 +// Win98 supports IE versions 4.01 -> 6.0 SP1 +#define _WIN32_IE_WIN98 _WIN32_IE_IE401 +// Win98SE supports IE versions 5.0 -> 6.0 SP1 +#define _WIN32_IE_WIN98SE _WIN32_IE_IE50 +// WinME supports IE versions 5.5 -> 6.0 SP1 +#define _WIN32_IE_WINME _WIN32_IE_IE55 +// Win2k supports IE versions 5.01 -> 6.0 SP1 +#define _WIN32_IE_WIN2K _WIN32_IE_IE501 +#define _WIN32_IE_WIN2KSP1 _WIN32_IE_IE501 +#define _WIN32_IE_WIN2KSP2 _WIN32_IE_IE501 +#define _WIN32_IE_WIN2KSP3 _WIN32_IE_IE501 +#define _WIN32_IE_WIN2KSP4 _WIN32_IE_IE501 +#define _WIN32_IE_XP _WIN32_IE_IE60 +#define _WIN32_IE_XPSP1 _WIN32_IE_IE60SP1 +#define _WIN32_IE_XPSP2 _WIN32_IE_IE60SP2 +#define _WIN32_IE_WS03 0x0602 +#define _WIN32_IE_WS03SP1 _WIN32_IE_IE60SP2 +#define _WIN32_IE_LONGHORN _WIN32_IE_IE70 + + +// +// NTDDI version constants +// +#define NTDDI_WIN2K 0x05000000 +#define NTDDI_WIN2KSP1 0x05000100 +#define NTDDI_WIN2KSP2 0x05000200 +#define NTDDI_WIN2KSP3 0x05000300 +#define NTDDI_WIN2KSP4 0x05000400 + +#define NTDDI_WINXP 0x05010000 +#define NTDDI_WINXPSP1 0x05010100 +#define NTDDI_WINXPSP2 0x05010200 + +#define NTDDI_WS03 0x05020000 +#define NTDDI_WS03SP1 0x05020100 + +#define NTDDI_LONGHORN 0x06000000 + +// +// masks for version macros +// +#define OSVERSION_MASK 0xFFFF0000 +#define SPVERSION_MASK 0x0000FF00 +#define SUBVERSION_MASK 0x000000FF + + +// +// macros to extract various version fields from the NTDDI version +// +#define OSVER(Version) ((Version) & OSVERSION_MASK) +#define SPVER(Version) (((Version) & SPVERSION_MASK) >> 8) +#define SUBVER(Version) (((Version) & SUBVERSION_MASK) ) + + +#if defined(DECLSPEC_DEPRECATED_DDK) + +// deprecate in 2k or later +#if (NTDDI_VERSION >= NTDDI_WIN2K) +#define DECLSPEC_DEPRECATED_DDK_WIN2K DECLSPEC_DEPRECATED_DDK +#else +#define DECLSPEC_DEPRECATED_DDK_WIN2K +#endif + +// deprecate in XP or later +#if (NTDDI_VERSION >= NTDDI_WINXP) +#define DECLSPEC_DEPRECATED_DDK_WINXP DECLSPEC_DEPRECATED_DDK +#else +#define DECLSPEC_DEPRECATED_DDK_WINXP +#endif + +// deprecate in WS03 or later +#if (NTDDI_VERSION >= NTDDI_WS03) +#define DECLSPEC_DEPRECATED_DDK_WIN2003 DECLSPEC_DEPRECATED_DDK +#else +#define DECLSPEC_DEPRECATED_DDK_WIN2003 +#endif + +// deprecate in WS03 or later +#if (NTDDI_VERSION >= NTDDI_LONGHORN) +#define DECLSPEC_DEPRECATED_DDK_LONGHORN DECLSPEC_DEPRECATED_DDK +#else +#define DECLSPEC_DEPRECATED_DDK_LONGHORN +#endif + +#endif // defined(DECLSPEC_DEPRECATED_DDK) + + +// +// if versions aren't already defined, default to most current +// + +#define NTDDI_VERSION_FROM_WIN32_WINNT2(ver) ver##0000 +#define NTDDI_VERSION_FROM_WIN32_WINNT(ver) NTDDI_VERSION_FROM_WIN32_WINNT2(ver) + +#if !defined(_WIN32_WINNT) && !defined(_CHICAGO_) +#define _WIN32_WINNT 0x0600 +#endif + +#ifndef NTDDI_VERSION +#ifdef _WIN32_WINNT +// set NTDDI_VERSION based on _WIN32_WINNT +#define NTDDI_VERSION NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT) +#else +#define NTDDI_VERSION 0x06000000 +#endif +#endif + +#ifndef WINVER +#ifdef _WIN32_WINNT +// set WINVER based on _WIN32_WINNT +#define WINVER _WIN32_WINNT +#else +#define WINVER 0x0600 +#endif +#endif + +#ifndef _WIN32_IE +#ifdef _WIN32_WINNT +// set _WIN32_IE based on _WIN32_WINNT +#if (_WIN32_WINNT <= _WIN32_WINNT_NT4) +#define _WIN32_IE _WIN32_IE_IE50 +#elif (_WIN32_WINNT <= _WIN32_WINNT_WIN2K) +#define _WIN32_IE _WIN32_IE_IE501 +#elif (_WIN32_WINNT <= _WIN32_WINNT_WINXP) +#define _WIN32_IE _WIN32_IE_IE60 +#elif (_WIN32_WINNT <= _WIN32_WINNT_WS03) +#define _WIN32_IE 0x0602 +#else +#define _WIN32_IE 0x0700 +#endif +#else +#define _WIN32_IE 0x0700 +#endif +#endif + +// +// Sanity check for compatible versions +// +#if defined(_WIN32_WINNT) && !defined(MIDL_PASS) && !defined(RC_INVOKED) + +#if (defined(WINVER) && (WINVER < 0x0400) && (_WIN32_WINNT > 0x0400)) +#error WINVER setting conflicts with _WIN32_WINNT setting +#endif + +#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WIN2K) && (_WIN32_WINNT != _WIN32_WINNT_WIN2K)) +#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting +#endif + +#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WINXP) && (_WIN32_WINNT != _WIN32_WINNT_WINXP)) +#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting +#endif + +#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WS03) && (_WIN32_WINNT != _WIN32_WINNT_WS03)) +#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting +#endif + +#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_LONGHORN) && (_WIN32_WINNT != _WIN32_WINNT_LONGHORN)) +#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting +#endif + +#if ((_WIN32_WINNT < _WIN32_WINNT_WIN2K) && (_WIN32_IE > _WIN32_IE_IE60SP1)) +#error _WIN32_WINNT settings conflicts with _WIN32_IE setting +#endif + +#endif // defined(_WIN32_WINNT) && !defined(MIDL_PASS) && !defined(_WINRESRC_) + + +#endif // !_INC_SDKDDKVER + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/shtypes.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/shtypes.h new file mode 100644 index 0000000000..5221d060f5 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/shtypes.h @@ -0,0 +1,468 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for shtypes.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + + +#ifndef __shtypes_h__ +#define __shtypes_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +/* header files for imported files */ +#include "wtypes.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_shtypes_0000_0000 */ +/* [local] */ + +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//-------------------------------------------------------------------------- +//=========================================================================== +// +// Object identifiers in the explorer's name space (ItemID and IDList) +// +// All the items that the user can browse with the explorer (such as files, +// directories, servers, work-groups, etc.) has an identifier which is unique +// among items within the parent folder. Those identifiers are called item +// IDs (SHITEMID). Since all its parent folders have their own item IDs, +// any items can be uniquely identified by a list of item IDs, which is called +// an ID list (ITEMIDLIST). +// +// ID lists are almost always allocated by the task allocator (see some +// description below as well as OLE 2.0 SDK) and may be passed across +// some of shell interfaces (such as IShellFolder). Each item ID in an ID list +// is only meaningful to its parent folder (which has generated it), and all +// the clients must treat it as an opaque binary data except the first two +// bytes, which indicates the size of the item ID. +// +// When a shell extension -- which implements the IShellFolder interace -- +// generates an item ID, it may put any information in it, not only the data +// with that it needs to identifies the item, but also some additional +// information, which would help implementing some other functions efficiently. +// For example, the shell's IShellFolder implementation of file system items +// stores the primary (long) name of a file or a directory as the item +// identifier, but it also stores its alternative (short) name, size and date +// etc. +// +// When an ID list is passed to one of shell APIs (such as SHGetPathFromIDList), +// it is always an absolute path -- relative from the root of the name space, +// which is the desktop folder. When an ID list is passed to one of IShellFolder +// member function, it is always a relative path from the folder (unless it +// is explicitly specified). +// +//=========================================================================== +// +// SHITEMID -- Item ID (mkid) +// USHORT cb; // Size of the ID (including cb itself) +// BYTE abID[]; // The item ID (variable length) +// +#include +typedef struct _SHITEMID + { + USHORT cb; + BYTE abID[ 1 ]; + } SHITEMID; + +#include +#if defined(_M_IX86) +#define __unaligned +#endif // __unaligned +typedef SHITEMID __unaligned *LPSHITEMID; + +typedef const SHITEMID __unaligned *LPCSHITEMID; + +// +// ITEMIDLIST -- List if item IDs (combined with 0-terminator) +// +#include +typedef struct _ITEMIDLIST + { + SHITEMID mkid; + } ITEMIDLIST; + +#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) +typedef struct _ITEMIDLIST_RELATIVE : ITEMIDLIST {} ITEMIDLIST_RELATIVE; +typedef struct _ITEMID_CHILD : ITEMIDLIST_RELATIVE {} ITEMID_CHILD; +typedef struct _ITEMIDLIST_ABSOLUTE : ITEMIDLIST_RELATIVE {} ITEMIDLIST_ABSOLUTE; +#else // !(defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)) +typedef ITEMIDLIST ITEMIDLIST_RELATIVE; + +typedef ITEMIDLIST ITEMID_CHILD; + +typedef ITEMIDLIST ITEMIDLIST_ABSOLUTE; + +#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) +#include +typedef /* [unique] */ __RPC_unique_pointer BYTE_BLOB *wirePIDL; + +typedef /* [wire_marshal] */ ITEMIDLIST __unaligned *LPITEMIDLIST; + +typedef /* [wire_marshal] */ const ITEMIDLIST __unaligned *LPCITEMIDLIST; + +#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) +typedef /* [wire_marshal] */ ITEMIDLIST_ABSOLUTE *PIDLIST_ABSOLUTE; + +typedef /* [wire_marshal] */ const ITEMIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE; + +typedef /* [wire_marshal] */ const ITEMIDLIST_ABSOLUTE __unaligned *PCUIDLIST_ABSOLUTE; + +typedef /* [wire_marshal] */ ITEMIDLIST_RELATIVE *PIDLIST_RELATIVE; + +typedef /* [wire_marshal] */ const ITEMIDLIST_RELATIVE *PCIDLIST_RELATIVE; + +typedef /* [wire_marshal] */ ITEMIDLIST_RELATIVE __unaligned *PUIDLIST_RELATIVE; + +typedef /* [wire_marshal] */ const ITEMIDLIST_RELATIVE __unaligned *PCUIDLIST_RELATIVE; + +typedef /* [wire_marshal] */ ITEMID_CHILD *PITEMID_CHILD; + +typedef /* [wire_marshal] */ const ITEMID_CHILD *PCITEMID_CHILD; + +typedef /* [wire_marshal] */ ITEMID_CHILD __unaligned *PUITEMID_CHILD; + +typedef /* [wire_marshal] */ const ITEMID_CHILD __unaligned *PCUITEMID_CHILD; + +typedef const PCUITEMID_CHILD *PCUITEMID_CHILD_ARRAY; + +typedef const PCUIDLIST_RELATIVE *PCUIDLIST_RELATIVE_ARRAY; + +typedef const PCIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE_ARRAY; + +typedef const PCUIDLIST_ABSOLUTE *PCUIDLIST_ABSOLUTE_ARRAY; + +#else // !(defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)) +#define PIDLIST_ABSOLUTE LPITEMIDLIST +#define PCIDLIST_ABSOLUTE LPCITEMIDLIST +#define PCUIDLIST_ABSOLUTE LPCITEMIDLIST +#define PIDLIST_RELATIVE LPITEMIDLIST +#define PCIDLIST_RELATIVE LPCITEMIDLIST +#define PUIDLIST_RELATIVE LPITEMIDLIST +#define PCUIDLIST_RELATIVE LPCITEMIDLIST +#define PITEMID_CHILD LPITEMIDLIST +#define PCITEMID_CHILD LPCITEMIDLIST +#define PUITEMID_CHILD LPITEMIDLIST +#define PCUITEMID_CHILD LPCITEMIDLIST +#define PCUITEMID_CHILD_ARRAY LPCITEMIDLIST * +#define PCUIDLIST_RELATIVE_ARRAY LPCITEMIDLIST * +#define PCIDLIST_ABSOLUTE_ARRAY LPCITEMIDLIST * +#define PCUIDLIST_ABSOLUTE_ARRAY LPCITEMIDLIST * +#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) +#ifdef MIDL_PASS +typedef struct _WIN32_FIND_DATAA + { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD dwReserved0; + DWORD dwReserved1; + CHAR cFileName[ 260 ]; + CHAR cAlternateFileName[ 14 ]; + } WIN32_FIND_DATAA; + +typedef struct _WIN32_FIND_DATAA *PWIN32_FIND_DATAA; + +typedef struct _WIN32_FIND_DATAA *LPWIN32_FIND_DATAA; + +typedef struct _WIN32_FIND_DATAW + { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD dwReserved0; + DWORD dwReserved1; + WCHAR cFileName[ 260 ]; + WCHAR cAlternateFileName[ 14 ]; + } WIN32_FIND_DATAW; + +typedef struct _WIN32_FIND_DATAW *PWIN32_FIND_DATAW; + +typedef struct _WIN32_FIND_DATAW *LPWIN32_FIND_DATAW; + +#endif // MIDL_PASS +//------------------------------------------------------------------------- +// +// struct STRRET +// +// structure for returning strings from IShellFolder member functions +// +//------------------------------------------------------------------------- +// +// uType indicate which union member to use +// STRRET_WSTR Use STRRET.pOleStr must be freed by caller of GetDisplayNameOf +// STRRET_OFFSET Use STRRET.uOffset Offset into SHITEMID for ANSI string +// STRRET_CSTR Use STRRET.cStr ANSI Buffer +// +typedef /* [v1_enum] */ +enum tagSTRRET_TYPE + { STRRET_WSTR = 0, + STRRET_OFFSET = 0x1, + STRRET_CSTR = 0x2 + } STRRET_TYPE; + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma warning(push) +#pragma warning(disable:4201) /* nonstandard extension used : nameless struct/union */ +#pragma once +#endif +#include +typedef struct _STRRET + { + UINT uType; + union + { + LPWSTR pOleStr; + UINT uOffset; + char cStr[ 260 ]; + } DUMMYUNIONNAME; + } STRRET; + +#include +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma warning(pop) +#endif +typedef STRRET *LPSTRRET; + +//------------------------------------------------------------------------- +// +// struct SHELLDETAILS +// +// structure for returning strings from IShellDetails +// +//------------------------------------------------------------------------- +// +// fmt; // LVCFMT_* value (header only) +// cxChar; // Number of 'average' characters (header only) +// str; // String information +// +#include +typedef struct _SHELLDETAILS + { + int fmt; + int cxChar; + STRRET str; + } SHELLDETAILS; + +typedef struct _SHELLDETAILS *LPSHELLDETAILS; + +#include + +#if (_WIN32_IE >= _WIN32_IE_IE60SP2) +typedef /* [v1_enum] */ +enum tagPERCEIVED + { PERCEIVED_TYPE_FIRST = -3, + PERCEIVED_TYPE_CUSTOM = -3, + PERCEIVED_TYPE_UNSPECIFIED = -2, + PERCEIVED_TYPE_FOLDER = -1, + PERCEIVED_TYPE_UNKNOWN = 0, + PERCEIVED_TYPE_TEXT = 1, + PERCEIVED_TYPE_IMAGE = 2, + PERCEIVED_TYPE_AUDIO = 3, + PERCEIVED_TYPE_VIDEO = 4, + PERCEIVED_TYPE_COMPRESSED = 5, + PERCEIVED_TYPE_DOCUMENT = 6, + PERCEIVED_TYPE_SYSTEM = 7, + PERCEIVED_TYPE_APPLICATION = 8, + PERCEIVED_TYPE_GAMEMEDIA = 9, + PERCEIVED_TYPE_CONTACTS = 10, + PERCEIVED_TYPE_LAST = 10 + } PERCEIVED; + +#define PERCEIVEDFLAG_UNDEFINED 0x0000 +#define PERCEIVEDFLAG_SOFTCODED 0x0001 +#define PERCEIVEDFLAG_HARDCODED 0x0002 +#define PERCEIVEDFLAG_NATIVESUPPORT 0x0004 +#define PERCEIVEDFLAG_GDIPLUS 0x0010 +#define PERCEIVEDFLAG_WMSDK 0x0020 +#define PERCEIVEDFLAG_ZIPFOLDER 0x0040 +typedef DWORD PERCEIVEDFLAG; + +#endif // _WIN32_IE_IE60SP2 + +#if (NTDDI_VERSION >= NTDDI_LONGHORN) +typedef struct _COMDLG_FILTERSPEC + { + LPCWSTR pszName; + LPCWSTR pszSpec; + } COMDLG_FILTERSPEC; + +typedef struct tagMACHINE_ID + { + char szName[ 16 ]; + } MACHINE_ID; + +typedef struct tagDOMAIN_RELATIVE_OBJECTID + { + GUID guidVolume; + GUID guidObject; + } DOMAIN_RELATIVE_OBJECTID; + +typedef GUID KNOWNFOLDERID; + +#if 0 +typedef KNOWNFOLDERID *REFKNOWNFOLDERID; + +#endif // 0 +#ifdef __cplusplus +#define REFKNOWNFOLDERID const KNOWNFOLDERID & +#else // !__cplusplus +#define REFKNOWNFOLDERID const KNOWNFOLDERID * __MIDL_CONST +#endif // __cplusplus +#endif // NTDDI_LONGHORN +typedef GUID FOLDERTYPEID; + +#if 0 +typedef FOLDERTYPEID *REFFOLDERTYPEID; + +#endif // 0 +#ifdef __cplusplus +#define REFFOLDERTYPEID const FOLDERTYPEID & +#else // !__cplusplus +#define REFFOLDERTYPEID const FOLDERTYPEID * __MIDL_CONST +#endif // __cplusplus +typedef GUID TASKOWNERID; + +#if 0 +typedef TASKOWNERID *REFTASKOWNERID; + +#endif // 0 +#ifdef __cplusplus +#define REFTASKOWNERID const TASKOWNERID & +#else // !__cplusplus +#define REFTASKOWNERID const TASKOWNERID * __MIDL_CONST +#endif // __cplusplus +#ifndef LF_FACESIZE +typedef struct tagLOGFONTA + { + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + CHAR lfFaceName[ 32 ]; + } LOGFONTA; + +typedef struct tagLOGFONTW + { + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + WCHAR lfFaceName[ 32 ]; + } LOGFONTW; + +typedef LOGFONTA LOGFONT; + +#endif // LF_FACESIZE +typedef /* [v1_enum] */ +enum tagSHCOLSTATE + { SHCOLSTATE_TYPE_STR = 0x1, + SHCOLSTATE_TYPE_INT = 0x2, + SHCOLSTATE_TYPE_DATE = 0x3, + SHCOLSTATE_TYPEMASK = 0xf, + SHCOLSTATE_ONBYDEFAULT = 0x10, + SHCOLSTATE_SLOW = 0x20, + SHCOLSTATE_EXTENDED = 0x40, + SHCOLSTATE_SECONDARYUI = 0x80, + SHCOLSTATE_HIDDEN = 0x100, + SHCOLSTATE_PREFER_VARCMP = 0x200, + SHCOLSTATE_PREFER_FMTCMP = 0x400, + SHCOLSTATE_NOSORTBYFOLDERNESS = 0x800, + SHCOLSTATE_VIEWONLY = 0x10000, + SHCOLSTATE_BATCHREAD = 0x20000, + SHCOLSTATE_NO_GROUPBY = 0x40000, + SHCOLSTATE_FIXED_WIDTH = 0x1000, + SHCOLSTATE_NODPISCALE = 0x2000, + SHCOLSTATE_FIXED_RATIO = 0x4000, + SHCOLSTATE_DISPLAYMASK = 0xf000 + } SHCOLSTATE; + +typedef DWORD SHCOLSTATEF; + +typedef PROPERTYKEY SHCOLUMNID; + +typedef const SHCOLUMNID *LPCSHCOLUMNID; + + + +extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_0000_v0_0_s_ifspec; + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h b/Externals/portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h new file mode 100644 index 0000000000..bca20a9ada --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h @@ -0,0 +1,2478 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 7.00.0499 */ +/* Compiler settings for structuredquery.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __structuredquery_h__ +#define __structuredquery_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IQueryParser_FWD_DEFINED__ +#define __IQueryParser_FWD_DEFINED__ +typedef interface IQueryParser IQueryParser; +#endif /* __IQueryParser_FWD_DEFINED__ */ + + +#ifndef __IConditionFactory_FWD_DEFINED__ +#define __IConditionFactory_FWD_DEFINED__ +typedef interface IConditionFactory IConditionFactory; +#endif /* __IConditionFactory_FWD_DEFINED__ */ + + +#ifndef __IQuerySolution_FWD_DEFINED__ +#define __IQuerySolution_FWD_DEFINED__ +typedef interface IQuerySolution IQuerySolution; +#endif /* __IQuerySolution_FWD_DEFINED__ */ + + +#ifndef __ICondition_FWD_DEFINED__ +#define __ICondition_FWD_DEFINED__ +typedef interface ICondition ICondition; +#endif /* __ICondition_FWD_DEFINED__ */ + + +#ifndef __IConditionGenerator_FWD_DEFINED__ +#define __IConditionGenerator_FWD_DEFINED__ +typedef interface IConditionGenerator IConditionGenerator; +#endif /* __IConditionGenerator_FWD_DEFINED__ */ + + +#ifndef __IRichChunk_FWD_DEFINED__ +#define __IRichChunk_FWD_DEFINED__ +typedef interface IRichChunk IRichChunk; +#endif /* __IRichChunk_FWD_DEFINED__ */ + + +#ifndef __IInterval_FWD_DEFINED__ +#define __IInterval_FWD_DEFINED__ +typedef interface IInterval IInterval; +#endif /* __IInterval_FWD_DEFINED__ */ + + +#ifndef __IMetaData_FWD_DEFINED__ +#define __IMetaData_FWD_DEFINED__ +typedef interface IMetaData IMetaData; +#endif /* __IMetaData_FWD_DEFINED__ */ + + +#ifndef __IEntity_FWD_DEFINED__ +#define __IEntity_FWD_DEFINED__ +typedef interface IEntity IEntity; +#endif /* __IEntity_FWD_DEFINED__ */ + + +#ifndef __IRelationship_FWD_DEFINED__ +#define __IRelationship_FWD_DEFINED__ +typedef interface IRelationship IRelationship; +#endif /* __IRelationship_FWD_DEFINED__ */ + + +#ifndef __INamedEntity_FWD_DEFINED__ +#define __INamedEntity_FWD_DEFINED__ +typedef interface INamedEntity INamedEntity; +#endif /* __INamedEntity_FWD_DEFINED__ */ + + +#ifndef __ISchemaProvider_FWD_DEFINED__ +#define __ISchemaProvider_FWD_DEFINED__ +typedef interface ISchemaProvider ISchemaProvider; +#endif /* __ISchemaProvider_FWD_DEFINED__ */ + + +#ifndef __ITokenCollection_FWD_DEFINED__ +#define __ITokenCollection_FWD_DEFINED__ +typedef interface ITokenCollection ITokenCollection; +#endif /* __ITokenCollection_FWD_DEFINED__ */ + + +#ifndef __INamedEntityCollector_FWD_DEFINED__ +#define __INamedEntityCollector_FWD_DEFINED__ +typedef interface INamedEntityCollector INamedEntityCollector; +#endif /* __INamedEntityCollector_FWD_DEFINED__ */ + + +#ifndef __ISchemaLocalizerSupport_FWD_DEFINED__ +#define __ISchemaLocalizerSupport_FWD_DEFINED__ +typedef interface ISchemaLocalizerSupport ISchemaLocalizerSupport; +#endif /* __ISchemaLocalizerSupport_FWD_DEFINED__ */ + + +#ifndef __IQueryParserManager_FWD_DEFINED__ +#define __IQueryParserManager_FWD_DEFINED__ +typedef interface IQueryParserManager IQueryParserManager; +#endif /* __IQueryParserManager_FWD_DEFINED__ */ + + +#ifndef __QueryParser_FWD_DEFINED__ +#define __QueryParser_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class QueryParser QueryParser; +#else +typedef struct QueryParser QueryParser; +#endif /* __cplusplus */ + +#endif /* __QueryParser_FWD_DEFINED__ */ + + +#ifndef __NegationCondition_FWD_DEFINED__ +#define __NegationCondition_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class NegationCondition NegationCondition; +#else +typedef struct NegationCondition NegationCondition; +#endif /* __cplusplus */ + +#endif /* __NegationCondition_FWD_DEFINED__ */ + + +#ifndef __CompoundCondition_FWD_DEFINED__ +#define __CompoundCondition_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CompoundCondition CompoundCondition; +#else +typedef struct CompoundCondition CompoundCondition; +#endif /* __cplusplus */ + +#endif /* __CompoundCondition_FWD_DEFINED__ */ + + +#ifndef __LeafCondition_FWD_DEFINED__ +#define __LeafCondition_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class LeafCondition LeafCondition; +#else +typedef struct LeafCondition LeafCondition; +#endif /* __cplusplus */ + +#endif /* __LeafCondition_FWD_DEFINED__ */ + + +#ifndef __ConditionFactory_FWD_DEFINED__ +#define __ConditionFactory_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class ConditionFactory ConditionFactory; +#else +typedef struct ConditionFactory ConditionFactory; +#endif /* __cplusplus */ + +#endif /* __ConditionFactory_FWD_DEFINED__ */ + + +#ifndef __Interval_FWD_DEFINED__ +#define __Interval_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Interval Interval; +#else +typedef struct Interval Interval; +#endif /* __cplusplus */ + +#endif /* __Interval_FWD_DEFINED__ */ + + +#ifndef __QueryParserManager_FWD_DEFINED__ +#define __QueryParserManager_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class QueryParserManager QueryParserManager; +#else +typedef struct QueryParserManager QueryParserManager; +#endif /* __cplusplus */ + +#endif /* __QueryParserManager_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" +#include "propidl.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_structuredquery_0000_0000 */ +/* [local] */ + + + + + + + + + + + +typedef /* [v1_enum] */ +enum tagCONDITION_TYPE + { CT_AND_CONDITION = 0, + CT_OR_CONDITION = ( CT_AND_CONDITION + 1 ) , + CT_NOT_CONDITION = ( CT_OR_CONDITION + 1 ) , + CT_LEAF_CONDITION = ( CT_NOT_CONDITION + 1 ) + } CONDITION_TYPE; + +typedef /* [v1_enum] */ +enum tagCONDITION_OPERATION + { COP_IMPLICIT = 0, + COP_EQUAL = ( COP_IMPLICIT + 1 ) , + COP_NOTEQUAL = ( COP_EQUAL + 1 ) , + COP_LESSTHAN = ( COP_NOTEQUAL + 1 ) , + COP_GREATERTHAN = ( COP_LESSTHAN + 1 ) , + COP_LESSTHANOREQUAL = ( COP_GREATERTHAN + 1 ) , + COP_GREATERTHANOREQUAL = ( COP_LESSTHANOREQUAL + 1 ) , + COP_VALUE_STARTSWITH = ( COP_GREATERTHANOREQUAL + 1 ) , + COP_VALUE_ENDSWITH = ( COP_VALUE_STARTSWITH + 1 ) , + COP_VALUE_CONTAINS = ( COP_VALUE_ENDSWITH + 1 ) , + COP_VALUE_NOTCONTAINS = ( COP_VALUE_CONTAINS + 1 ) , + COP_DOSWILDCARDS = ( COP_VALUE_NOTCONTAINS + 1 ) , + COP_WORD_EQUAL = ( COP_DOSWILDCARDS + 1 ) , + COP_WORD_STARTSWITH = ( COP_WORD_EQUAL + 1 ) , + COP_APPLICATION_SPECIFIC = ( COP_WORD_STARTSWITH + 1 ) + } CONDITION_OPERATION; + +typedef /* [v1_enum] */ +enum tagSTRUCTURED_QUERY_SINGLE_OPTION + { SQSO_SCHEMA = 0, + SQSO_LOCALE_WORD_BREAKING = ( SQSO_SCHEMA + 1 ) , + SQSO_WORD_BREAKER = ( SQSO_LOCALE_WORD_BREAKING + 1 ) , + SQSO_NATURAL_SYNTAX = ( SQSO_WORD_BREAKER + 1 ) , + SQSO_AUTOMATIC_WILDCARD = ( SQSO_NATURAL_SYNTAX + 1 ) , + SQSO_TRACE_LEVEL = ( SQSO_AUTOMATIC_WILDCARD + 1 ) , + SQSO_LANGUAGE_KEYWORDS = ( SQSO_TRACE_LEVEL + 1 ) + } STRUCTURED_QUERY_SINGLE_OPTION; + +typedef /* [v1_enum] */ +enum tagSTRUCTURED_QUERY_MULTIOPTION + { SQMO_VIRTUAL_PROPERTY = 0, + SQMO_DEFAULT_PROPERTY = ( SQMO_VIRTUAL_PROPERTY + 1 ) , + SQMO_GENERATOR_FOR_TYPE = ( SQMO_DEFAULT_PROPERTY + 1 ) + } STRUCTURED_QUERY_MULTIOPTION; + +typedef /* [v1_enum] */ +enum tagSTRUCTURED_QUERY_PARSE_ERROR + { SQPE_NONE = 0, + SQPE_EXTRA_OPENING_PARENTHESIS = ( SQPE_NONE + 1 ) , + SQPE_EXTRA_CLOSING_PARENTHESIS = ( SQPE_EXTRA_OPENING_PARENTHESIS + 1 ) , + SQPE_IGNORED_MODIFIER = ( SQPE_EXTRA_CLOSING_PARENTHESIS + 1 ) , + SQPE_IGNORED_CONNECTOR = ( SQPE_IGNORED_MODIFIER + 1 ) , + SQPE_IGNORED_KEYWORD = ( SQPE_IGNORED_CONNECTOR + 1 ) , + SQPE_UNHANDLED = ( SQPE_IGNORED_KEYWORD + 1 ) + } STRUCTURED_QUERY_PARSE_ERROR; + +/* [v1_enum] */ +enum tagSTRUCTURED_QUERY_RESOLVE_OPTION + { SQRO_DONT_RESOLVE_DATETIME = 0x1, + SQRO_ALWAYS_ONE_INTERVAL = 0x2, + SQRO_DONT_SIMPLIFY_CONDITION_TREES = 0x4, + SQRO_DONT_MAP_RELATIONS = 0x8, + SQRO_DONT_RESOLVE_RANGES = 0x10, + SQRO_DONT_REMOVE_UNRESTRICTED_KEYWORDS = 0x20, + SQRO_DONT_SPLIT_WORDS = 0x40, + SQRO_IGNORE_PHRASE_ORDER = 0x80 + } ; +typedef int STRUCTURED_QUERY_RESOLVE_OPTION; + +typedef /* [v1_enum] */ +enum tagINTERVAL_LIMIT_KIND + { ILK_EXPLICIT_INCLUDED = 0, + ILK_EXPLICIT_EXCLUDED = ( ILK_EXPLICIT_INCLUDED + 1 ) , + ILK_NEGATIVE_INFINITY = ( ILK_EXPLICIT_EXCLUDED + 1 ) , + ILK_POSITIVE_INFINITY = ( ILK_NEGATIVE_INFINITY + 1 ) + } INTERVAL_LIMIT_KIND; + +typedef /* [v1_enum] */ +enum tagQUERY_PARSER_MANAGER_OPTION + { QPMO_SCHEMA_BINARY_NAME = 0, + QPMO_PRELOCALIZED_SCHEMA_BINARY_PATH = ( QPMO_SCHEMA_BINARY_NAME + 1 ) , + QPMO_UNLOCALIZED_SCHEMA_BINARY_PATH = ( QPMO_PRELOCALIZED_SCHEMA_BINARY_PATH + 1 ) , + QPMO_LOCALIZED_SCHEMA_BINARY_PATH = ( QPMO_UNLOCALIZED_SCHEMA_BINARY_PATH + 1 ) , + QPMO_APPEND_LCID_TO_LOCALIZED_PATH = ( QPMO_LOCALIZED_SCHEMA_BINARY_PATH + 1 ) , + QPMO_LOCALIZER_SUPPORT = ( QPMO_APPEND_LCID_TO_LOCALIZED_PATH + 1 ) + } QUERY_PARSER_MANAGER_OPTION; + + + +extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0000_v0_0_s_ifspec; + +#ifndef __IQueryParser_INTERFACE_DEFINED__ +#define __IQueryParser_INTERFACE_DEFINED__ + +/* interface IQueryParser */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_IQueryParser; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2EBDEE67-3505-43f8-9946-EA44ABC8E5B0") + IQueryParser : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Parse( + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [in] */ __RPC__in_opt IEnumUnknown *pCustomProperties, + /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetOption( + /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option, + /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetOption( + /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option, + /* [retval][out] */ __RPC__out PROPVARIANT *pOptionValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetMultiOption( + /* [in] */ STRUCTURED_QUERY_MULTIOPTION option, + /* [in] */ __RPC__in LPCWSTR pszOptionKey, + /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetSchemaProvider( + /* [retval][out] */ __RPC__deref_out_opt ISchemaProvider **ppSchemaProvider) = 0; + + virtual HRESULT STDMETHODCALLTYPE RestateToString( + /* [in] */ __RPC__in_opt ICondition *pCondition, + /* [in] */ BOOL fUseEnglish, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString) = 0; + + virtual HRESULT STDMETHODCALLTYPE ParsePropertyValue( + /* [in] */ __RPC__in LPCWSTR pszPropertyName, + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution) = 0; + + virtual HRESULT STDMETHODCALLTYPE RestatePropertyValueToString( + /* [in] */ __RPC__in_opt ICondition *pCondition, + /* [in] */ BOOL fUseEnglish, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszPropertyName, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString) = 0; + + }; + +#else /* C style interface */ + + typedef struct IQueryParserVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IQueryParser * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IQueryParser * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IQueryParser * This); + + HRESULT ( STDMETHODCALLTYPE *Parse )( + IQueryParser * This, + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [in] */ __RPC__in_opt IEnumUnknown *pCustomProperties, + /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution); + + HRESULT ( STDMETHODCALLTYPE *SetOption )( + IQueryParser * This, + /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option, + /* [in] */ __RPC__in const PROPVARIANT *pOptionValue); + + HRESULT ( STDMETHODCALLTYPE *GetOption )( + IQueryParser * This, + /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option, + /* [retval][out] */ __RPC__out PROPVARIANT *pOptionValue); + + HRESULT ( STDMETHODCALLTYPE *SetMultiOption )( + IQueryParser * This, + /* [in] */ STRUCTURED_QUERY_MULTIOPTION option, + /* [in] */ __RPC__in LPCWSTR pszOptionKey, + /* [in] */ __RPC__in const PROPVARIANT *pOptionValue); + + HRESULT ( STDMETHODCALLTYPE *GetSchemaProvider )( + IQueryParser * This, + /* [retval][out] */ __RPC__deref_out_opt ISchemaProvider **ppSchemaProvider); + + HRESULT ( STDMETHODCALLTYPE *RestateToString )( + IQueryParser * This, + /* [in] */ __RPC__in_opt ICondition *pCondition, + /* [in] */ BOOL fUseEnglish, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString); + + HRESULT ( STDMETHODCALLTYPE *ParsePropertyValue )( + IQueryParser * This, + /* [in] */ __RPC__in LPCWSTR pszPropertyName, + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution); + + HRESULT ( STDMETHODCALLTYPE *RestatePropertyValueToString )( + IQueryParser * This, + /* [in] */ __RPC__in_opt ICondition *pCondition, + /* [in] */ BOOL fUseEnglish, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszPropertyName, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString); + + END_INTERFACE + } IQueryParserVtbl; + + interface IQueryParser + { + CONST_VTBL struct IQueryParserVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IQueryParser_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IQueryParser_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IQueryParser_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IQueryParser_Parse(This,pszInputString,pCustomProperties,ppSolution) \ + ( (This)->lpVtbl -> Parse(This,pszInputString,pCustomProperties,ppSolution) ) + +#define IQueryParser_SetOption(This,option,pOptionValue) \ + ( (This)->lpVtbl -> SetOption(This,option,pOptionValue) ) + +#define IQueryParser_GetOption(This,option,pOptionValue) \ + ( (This)->lpVtbl -> GetOption(This,option,pOptionValue) ) + +#define IQueryParser_SetMultiOption(This,option,pszOptionKey,pOptionValue) \ + ( (This)->lpVtbl -> SetMultiOption(This,option,pszOptionKey,pOptionValue) ) + +#define IQueryParser_GetSchemaProvider(This,ppSchemaProvider) \ + ( (This)->lpVtbl -> GetSchemaProvider(This,ppSchemaProvider) ) + +#define IQueryParser_RestateToString(This,pCondition,fUseEnglish,ppszQueryString) \ + ( (This)->lpVtbl -> RestateToString(This,pCondition,fUseEnglish,ppszQueryString) ) + +#define IQueryParser_ParsePropertyValue(This,pszPropertyName,pszInputString,ppSolution) \ + ( (This)->lpVtbl -> ParsePropertyValue(This,pszPropertyName,pszInputString,ppSolution) ) + +#define IQueryParser_RestatePropertyValueToString(This,pCondition,fUseEnglish,ppszPropertyName,ppszQueryString) \ + ( (This)->lpVtbl -> RestatePropertyValueToString(This,pCondition,fUseEnglish,ppszPropertyName,ppszQueryString) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IQueryParser_INTERFACE_DEFINED__ */ + + +#ifndef __IConditionFactory_INTERFACE_DEFINED__ +#define __IConditionFactory_INTERFACE_DEFINED__ + +/* interface IConditionFactory */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_IConditionFactory; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A5EFE073-B16F-474f-9F3E-9F8B497A3E08") + IConditionFactory : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE MakeNot( + /* [in] */ __RPC__in_opt ICondition *pSubCondition, + /* [in] */ BOOL simplify, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0; + + virtual HRESULT STDMETHODCALLTYPE MakeAndOr( + /* [in] */ CONDITION_TYPE nodeType, + /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions, + /* [in] */ BOOL simplify, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0; + + virtual HRESULT STDMETHODCALLTYPE MakeLeaf( + /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName, + /* [in] */ CONDITION_OPERATION op, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType, + /* [in] */ __RPC__in const PROPVARIANT *pValue, + /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm, + /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm, + /* [in] */ __RPC__in_opt IRichChunk *pValueTerm, + /* [in] */ BOOL expand, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE Resolve( + /* [in] */ + __in ICondition *pConditionTree, + /* [in] */ + __in STRUCTURED_QUERY_RESOLVE_OPTION sqro, + /* [ref][in] */ + __in_opt const SYSTEMTIME *pstReferenceTime, + /* [retval][out] */ + __out ICondition **ppResolvedConditionTree) = 0; + + }; + +#else /* C style interface */ + + typedef struct IConditionFactoryVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IConditionFactory * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IConditionFactory * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IConditionFactory * This); + + HRESULT ( STDMETHODCALLTYPE *MakeNot )( + IConditionFactory * This, + /* [in] */ __RPC__in_opt ICondition *pSubCondition, + /* [in] */ BOOL simplify, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery); + + HRESULT ( STDMETHODCALLTYPE *MakeAndOr )( + IConditionFactory * This, + /* [in] */ CONDITION_TYPE nodeType, + /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions, + /* [in] */ BOOL simplify, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery); + + HRESULT ( STDMETHODCALLTYPE *MakeLeaf )( + IConditionFactory * This, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName, + /* [in] */ CONDITION_OPERATION op, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType, + /* [in] */ __RPC__in const PROPVARIANT *pValue, + /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm, + /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm, + /* [in] */ __RPC__in_opt IRichChunk *pValueTerm, + /* [in] */ BOOL expand, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Resolve )( + IConditionFactory * This, + /* [in] */ + __in ICondition *pConditionTree, + /* [in] */ + __in STRUCTURED_QUERY_RESOLVE_OPTION sqro, + /* [ref][in] */ + __in_opt const SYSTEMTIME *pstReferenceTime, + /* [retval][out] */ + __out ICondition **ppResolvedConditionTree); + + END_INTERFACE + } IConditionFactoryVtbl; + + interface IConditionFactory + { + CONST_VTBL struct IConditionFactoryVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IConditionFactory_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IConditionFactory_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IConditionFactory_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IConditionFactory_MakeNot(This,pSubCondition,simplify,ppResultQuery) \ + ( (This)->lpVtbl -> MakeNot(This,pSubCondition,simplify,ppResultQuery) ) + +#define IConditionFactory_MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) \ + ( (This)->lpVtbl -> MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) ) + +#define IConditionFactory_MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) \ + ( (This)->lpVtbl -> MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) ) + +#define IConditionFactory_Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) \ + ( (This)->lpVtbl -> Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IConditionFactory_INTERFACE_DEFINED__ */ + + +#ifndef __IQuerySolution_INTERFACE_DEFINED__ +#define __IQuerySolution_INTERFACE_DEFINED__ + +/* interface IQuerySolution */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_IQuerySolution; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("D6EBC66B-8921-4193-AFDD-A1789FB7FF57") + IQuerySolution : public IConditionFactory + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetQuery( + /* [out] */ + __out_opt ICondition **ppQueryNode, + /* [out] */ + __out_opt IEntity **ppMainType) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetErrors( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppParseErrors) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetLexicalData( + /* [out] */ + __deref_opt_out LPWSTR *ppszInputString, + /* [out] */ + __out_opt ITokenCollection **ppTokens, + /* [out] */ + __out_opt LCID *pLocale, + /* [out] */ + __out_opt IUnknown **ppWordBreaker) = 0; + + }; + +#else /* C style interface */ + + typedef struct IQuerySolutionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IQuerySolution * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IQuerySolution * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IQuerySolution * This); + + HRESULT ( STDMETHODCALLTYPE *MakeNot )( + IQuerySolution * This, + /* [in] */ __RPC__in_opt ICondition *pSubCondition, + /* [in] */ BOOL simplify, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery); + + HRESULT ( STDMETHODCALLTYPE *MakeAndOr )( + IQuerySolution * This, + /* [in] */ CONDITION_TYPE nodeType, + /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions, + /* [in] */ BOOL simplify, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery); + + HRESULT ( STDMETHODCALLTYPE *MakeLeaf )( + IQuerySolution * This, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName, + /* [in] */ CONDITION_OPERATION op, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType, + /* [in] */ __RPC__in const PROPVARIANT *pValue, + /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm, + /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm, + /* [in] */ __RPC__in_opt IRichChunk *pValueTerm, + /* [in] */ BOOL expand, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Resolve )( + IQuerySolution * This, + /* [in] */ + __in ICondition *pConditionTree, + /* [in] */ + __in STRUCTURED_QUERY_RESOLVE_OPTION sqro, + /* [ref][in] */ + __in_opt const SYSTEMTIME *pstReferenceTime, + /* [retval][out] */ + __out ICondition **ppResolvedConditionTree); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetQuery )( + IQuerySolution * This, + /* [out] */ + __out_opt ICondition **ppQueryNode, + /* [out] */ + __out_opt IEntity **ppMainType); + + HRESULT ( STDMETHODCALLTYPE *GetErrors )( + IQuerySolution * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppParseErrors); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetLexicalData )( + IQuerySolution * This, + /* [out] */ + __deref_opt_out LPWSTR *ppszInputString, + /* [out] */ + __out_opt ITokenCollection **ppTokens, + /* [out] */ + __out_opt LCID *pLocale, + /* [out] */ + __out_opt IUnknown **ppWordBreaker); + + END_INTERFACE + } IQuerySolutionVtbl; + + interface IQuerySolution + { + CONST_VTBL struct IQuerySolutionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IQuerySolution_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IQuerySolution_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IQuerySolution_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IQuerySolution_MakeNot(This,pSubCondition,simplify,ppResultQuery) \ + ( (This)->lpVtbl -> MakeNot(This,pSubCondition,simplify,ppResultQuery) ) + +#define IQuerySolution_MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) \ + ( (This)->lpVtbl -> MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) ) + +#define IQuerySolution_MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) \ + ( (This)->lpVtbl -> MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) ) + +#define IQuerySolution_Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) \ + ( (This)->lpVtbl -> Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) ) + + +#define IQuerySolution_GetQuery(This,ppQueryNode,ppMainType) \ + ( (This)->lpVtbl -> GetQuery(This,ppQueryNode,ppMainType) ) + +#define IQuerySolution_GetErrors(This,riid,ppParseErrors) \ + ( (This)->lpVtbl -> GetErrors(This,riid,ppParseErrors) ) + +#define IQuerySolution_GetLexicalData(This,ppszInputString,ppTokens,pLocale,ppWordBreaker) \ + ( (This)->lpVtbl -> GetLexicalData(This,ppszInputString,ppTokens,pLocale,ppWordBreaker) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IQuerySolution_INTERFACE_DEFINED__ */ + + +#ifndef __ICondition_INTERFACE_DEFINED__ +#define __ICondition_INTERFACE_DEFINED__ + +/* interface ICondition */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_ICondition; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0FC988D4-C935-4b97-A973-46282EA175C8") + ICondition : public IPersistStream + { + public: + virtual HRESULT STDMETHODCALLTYPE GetConditionType( + /* [retval][out] */ __RPC__out CONDITION_TYPE *pNodeType) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetSubConditions( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppv) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetComparisonInfo( + /* [out] */ + __deref_opt_out LPWSTR *ppszPropertyName, + /* [out] */ + __out_opt CONDITION_OPERATION *pOperation, + /* [out] */ + __out_opt PROPVARIANT *pValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueType( + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValueTypeName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetValueNormalization( + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszNormalization) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetInputTerms( + /* [out] */ + __out_opt IRichChunk **ppPropertyTerm, + /* [out] */ + __out_opt IRichChunk **ppOperationTerm, + /* [out] */ + __out_opt IRichChunk **ppValueTerm) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppc) = 0; + + }; + +#else /* C style interface */ + + typedef struct IConditionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICondition * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICondition * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICondition * This); + + HRESULT ( STDMETHODCALLTYPE *GetClassID )( + ICondition * This, + /* [out] */ __RPC__out CLSID *pClassID); + + HRESULT ( STDMETHODCALLTYPE *IsDirty )( + ICondition * This); + + HRESULT ( STDMETHODCALLTYPE *Load )( + ICondition * This, + /* [unique][in] */ __RPC__in_opt IStream *pStm); + + HRESULT ( STDMETHODCALLTYPE *Save )( + ICondition * This, + /* [unique][in] */ __RPC__in_opt IStream *pStm, + /* [in] */ BOOL fClearDirty); + + HRESULT ( STDMETHODCALLTYPE *GetSizeMax )( + ICondition * This, + /* [out] */ __RPC__out ULARGE_INTEGER *pcbSize); + + HRESULT ( STDMETHODCALLTYPE *GetConditionType )( + ICondition * This, + /* [retval][out] */ __RPC__out CONDITION_TYPE *pNodeType); + + HRESULT ( STDMETHODCALLTYPE *GetSubConditions )( + ICondition * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppv); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetComparisonInfo )( + ICondition * This, + /* [out] */ + __deref_opt_out LPWSTR *ppszPropertyName, + /* [out] */ + __out_opt CONDITION_OPERATION *pOperation, + /* [out] */ + __out_opt PROPVARIANT *pValue); + + HRESULT ( STDMETHODCALLTYPE *GetValueType )( + ICondition * This, + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValueTypeName); + + HRESULT ( STDMETHODCALLTYPE *GetValueNormalization )( + ICondition * This, + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszNormalization); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetInputTerms )( + ICondition * This, + /* [out] */ + __out_opt IRichChunk **ppPropertyTerm, + /* [out] */ + __out_opt IRichChunk **ppOperationTerm, + /* [out] */ + __out_opt IRichChunk **ppValueTerm); + + HRESULT ( STDMETHODCALLTYPE *Clone )( + ICondition * This, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppc); + + END_INTERFACE + } IConditionVtbl; + + interface ICondition + { + CONST_VTBL struct IConditionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICondition_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICondition_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICondition_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICondition_GetClassID(This,pClassID) \ + ( (This)->lpVtbl -> GetClassID(This,pClassID) ) + + +#define ICondition_IsDirty(This) \ + ( (This)->lpVtbl -> IsDirty(This) ) + +#define ICondition_Load(This,pStm) \ + ( (This)->lpVtbl -> Load(This,pStm) ) + +#define ICondition_Save(This,pStm,fClearDirty) \ + ( (This)->lpVtbl -> Save(This,pStm,fClearDirty) ) + +#define ICondition_GetSizeMax(This,pcbSize) \ + ( (This)->lpVtbl -> GetSizeMax(This,pcbSize) ) + + +#define ICondition_GetConditionType(This,pNodeType) \ + ( (This)->lpVtbl -> GetConditionType(This,pNodeType) ) + +#define ICondition_GetSubConditions(This,riid,ppv) \ + ( (This)->lpVtbl -> GetSubConditions(This,riid,ppv) ) + +#define ICondition_GetComparisonInfo(This,ppszPropertyName,pOperation,pValue) \ + ( (This)->lpVtbl -> GetComparisonInfo(This,ppszPropertyName,pOperation,pValue) ) + +#define ICondition_GetValueType(This,ppszValueTypeName) \ + ( (This)->lpVtbl -> GetValueType(This,ppszValueTypeName) ) + +#define ICondition_GetValueNormalization(This,ppszNormalization) \ + ( (This)->lpVtbl -> GetValueNormalization(This,ppszNormalization) ) + +#define ICondition_GetInputTerms(This,ppPropertyTerm,ppOperationTerm,ppValueTerm) \ + ( (This)->lpVtbl -> GetInputTerms(This,ppPropertyTerm,ppOperationTerm,ppValueTerm) ) + +#define ICondition_Clone(This,ppc) \ + ( (This)->lpVtbl -> Clone(This,ppc) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICondition_INTERFACE_DEFINED__ */ + + +#ifndef __IConditionGenerator_INTERFACE_DEFINED__ +#define __IConditionGenerator_INTERFACE_DEFINED__ + +/* interface IConditionGenerator */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_IConditionGenerator; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("92D2CC58-4386-45a3-B98C-7E0CE64A4117") + IConditionGenerator : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Initialize( + /* [in] */ __RPC__in_opt ISchemaProvider *pSchemaProvider) = 0; + + virtual HRESULT STDMETHODCALLTYPE RecognizeNamedEntities( + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [in] */ LCID lcid, + /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection, + /* [out][in] */ __RPC__inout_opt INamedEntityCollector *pNamedEntities) = 0; + + virtual HRESULT STDMETHODCALLTYPE GenerateForLeaf( + /* [in] */ __RPC__in_opt IConditionFactory *pConditionFactory, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName, + /* [in] */ CONDITION_OPERATION op, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType, + /* [in] */ __RPC__in LPCWSTR pszValue, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszValue2, + /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm, + /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm, + /* [in] */ __RPC__in_opt IRichChunk *pValueTerm, + /* [in] */ BOOL automaticWildcard, + /* [out] */ __RPC__out BOOL *pNoStringQuery, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppQueryExpression) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( + /* [unique][in] */ LPCWSTR pszValueType, + /* [in] */ const PROPVARIANT *ppropvar, + /* [in] */ BOOL fUseEnglish, + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase) = 0; + + }; + +#else /* C style interface */ + + typedef struct IConditionGeneratorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IConditionGenerator * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IConditionGenerator * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IConditionGenerator * This); + + HRESULT ( STDMETHODCALLTYPE *Initialize )( + IConditionGenerator * This, + /* [in] */ __RPC__in_opt ISchemaProvider *pSchemaProvider); + + HRESULT ( STDMETHODCALLTYPE *RecognizeNamedEntities )( + IConditionGenerator * This, + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [in] */ LCID lcid, + /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection, + /* [out][in] */ __RPC__inout_opt INamedEntityCollector *pNamedEntities); + + HRESULT ( STDMETHODCALLTYPE *GenerateForLeaf )( + IConditionGenerator * This, + /* [in] */ __RPC__in_opt IConditionFactory *pConditionFactory, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName, + /* [in] */ CONDITION_OPERATION op, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType, + /* [in] */ __RPC__in LPCWSTR pszValue, + /* [unique][in] */ __RPC__in_opt LPCWSTR pszValue2, + /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm, + /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm, + /* [in] */ __RPC__in_opt IRichChunk *pValueTerm, + /* [in] */ BOOL automaticWildcard, + /* [out] */ __RPC__out BOOL *pNoStringQuery, + /* [retval][out] */ __RPC__deref_out_opt ICondition **ppQueryExpression); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( + IConditionGenerator * This, + /* [unique][in] */ LPCWSTR pszValueType, + /* [in] */ const PROPVARIANT *ppropvar, + /* [in] */ BOOL fUseEnglish, + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase); + + END_INTERFACE + } IConditionGeneratorVtbl; + + interface IConditionGenerator + { + CONST_VTBL struct IConditionGeneratorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IConditionGenerator_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IConditionGenerator_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IConditionGenerator_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IConditionGenerator_Initialize(This,pSchemaProvider) \ + ( (This)->lpVtbl -> Initialize(This,pSchemaProvider) ) + +#define IConditionGenerator_RecognizeNamedEntities(This,pszInputString,lcid,pTokenCollection,pNamedEntities) \ + ( (This)->lpVtbl -> RecognizeNamedEntities(This,pszInputString,lcid,pTokenCollection,pNamedEntities) ) + +#define IConditionGenerator_GenerateForLeaf(This,pConditionFactory,pszPropertyName,op,pszValueType,pszValue,pszValue2,pPropertyNameTerm,pOperationTerm,pValueTerm,automaticWildcard,pNoStringQuery,ppQueryExpression) \ + ( (This)->lpVtbl -> GenerateForLeaf(This,pConditionFactory,pszPropertyName,op,pszValueType,pszValue,pszValue2,pPropertyNameTerm,pOperationTerm,pValueTerm,automaticWildcard,pNoStringQuery,ppQueryExpression) ) + +#define IConditionGenerator_DefaultPhrase(This,pszValueType,ppropvar,fUseEnglish,ppszPhrase) \ + ( (This)->lpVtbl -> DefaultPhrase(This,pszValueType,ppropvar,fUseEnglish,ppszPhrase) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IConditionGenerator_INTERFACE_DEFINED__ */ + + +#ifndef __IRichChunk_INTERFACE_DEFINED__ +#define __IRichChunk_INTERFACE_DEFINED__ + +/* interface IRichChunk */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_IRichChunk; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4FDEF69C-DBC9-454e-9910-B34F3C64B510") + IRichChunk : public IUnknown + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetData( + /* [out] */ + __out_opt ULONG *pFirstPos, + /* [out] */ + __out_opt ULONG *pLength, + /* [out] */ + __deref_opt_out LPWSTR *ppsz, + /* [out] */ + __out_opt PROPVARIANT *pValue) = 0; + + }; + +#else /* C style interface */ + + typedef struct IRichChunkVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IRichChunk * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IRichChunk * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IRichChunk * This); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetData )( + IRichChunk * This, + /* [out] */ + __out_opt ULONG *pFirstPos, + /* [out] */ + __out_opt ULONG *pLength, + /* [out] */ + __deref_opt_out LPWSTR *ppsz, + /* [out] */ + __out_opt PROPVARIANT *pValue); + + END_INTERFACE + } IRichChunkVtbl; + + interface IRichChunk + { + CONST_VTBL struct IRichChunkVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IRichChunk_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IRichChunk_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IRichChunk_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IRichChunk_GetData(This,pFirstPos,pLength,ppsz,pValue) \ + ( (This)->lpVtbl -> GetData(This,pFirstPos,pLength,ppsz,pValue) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IRichChunk_INTERFACE_DEFINED__ */ + + +#ifndef __IInterval_INTERFACE_DEFINED__ +#define __IInterval_INTERFACE_DEFINED__ + +/* interface IInterval */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_IInterval; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6BF0A714-3C18-430b-8B5D-83B1C234D3DB") + IInterval : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetLimits( + /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkLower, + /* [out] */ __RPC__out PROPVARIANT *ppropvarLower, + /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkUpper, + /* [out] */ __RPC__out PROPVARIANT *ppropvarUpper) = 0; + + }; + +#else /* C style interface */ + + typedef struct IIntervalVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IInterval * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IInterval * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IInterval * This); + + HRESULT ( STDMETHODCALLTYPE *GetLimits )( + IInterval * This, + /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkLower, + /* [out] */ __RPC__out PROPVARIANT *ppropvarLower, + /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkUpper, + /* [out] */ __RPC__out PROPVARIANT *ppropvarUpper); + + END_INTERFACE + } IIntervalVtbl; + + interface IInterval + { + CONST_VTBL struct IIntervalVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IInterval_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IInterval_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IInterval_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IInterval_GetLimits(This,pilkLower,ppropvarLower,pilkUpper,ppropvarUpper) \ + ( (This)->lpVtbl -> GetLimits(This,pilkLower,ppropvarLower,pilkUpper,ppropvarUpper) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IInterval_INTERFACE_DEFINED__ */ + + +#ifndef __IMetaData_INTERFACE_DEFINED__ +#define __IMetaData_INTERFACE_DEFINED__ + +/* interface IMetaData */ +/* [unique][uuid][object][helpstring] */ + + +EXTERN_C const IID IID_IMetaData; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("780102B0-C43B-4876-BC7B-5E9BA5C88794") + IMetaData : public IUnknown + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetData( + /* [out] */ + __deref_opt_out LPWSTR *ppszKey, + /* [out] */ + __deref_opt_out LPWSTR *ppszValue) = 0; + + }; + +#else /* C style interface */ + + typedef struct IMetaDataVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IMetaData * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IMetaData * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IMetaData * This); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetData )( + IMetaData * This, + /* [out] */ + __deref_opt_out LPWSTR *ppszKey, + /* [out] */ + __deref_opt_out LPWSTR *ppszValue); + + END_INTERFACE + } IMetaDataVtbl; + + interface IMetaData + { + CONST_VTBL struct IMetaDataVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IMetaData_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IMetaData_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IMetaData_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IMetaData_GetData(This,ppszKey,ppszValue) \ + ( (This)->lpVtbl -> GetData(This,ppszKey,ppszValue) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IMetaData_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_structuredquery_0000_0008 */ +/* [local] */ + + + + +extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0008_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0008_v0_0_s_ifspec; + +#ifndef __IEntity_INTERFACE_DEFINED__ +#define __IEntity_INTERFACE_DEFINED__ + +/* interface IEntity */ +/* [unique][object][uuid][helpstring] */ + + +EXTERN_C const IID IID_IEntity; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("24264891-E80B-4fd3-B7CE-4FF2FAE8931F") + IEntity : public IUnknown + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE Name( + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszName) = 0; + + virtual HRESULT STDMETHODCALLTYPE Base( + /* [retval][out] */ __RPC__deref_out_opt IEntity **pBaseEntity) = 0; + + virtual HRESULT STDMETHODCALLTYPE Relationships( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pRelationships) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetRelationship( + /* [in] */ __RPC__in LPCWSTR pszRelationName, + /* [retval][out] */ __RPC__deref_out_opt IRelationship **pRelationship) = 0; + + virtual HRESULT STDMETHODCALLTYPE MetaData( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0; + + virtual HRESULT STDMETHODCALLTYPE NamedEntities( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pNamedEntities) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetNamedEntity( + /* [in] */ __RPC__in LPCWSTR pszValue, + /* [retval][out] */ __RPC__deref_out_opt INamedEntity **ppNamedEntity) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase) = 0; + + }; + +#else /* C style interface */ + + typedef struct IEntityVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IEntity * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IEntity * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IEntity * This); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Name )( + IEntity * This, + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *Base )( + IEntity * This, + /* [retval][out] */ __RPC__deref_out_opt IEntity **pBaseEntity); + + HRESULT ( STDMETHODCALLTYPE *Relationships )( + IEntity * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pRelationships); + + HRESULT ( STDMETHODCALLTYPE *GetRelationship )( + IEntity * This, + /* [in] */ __RPC__in LPCWSTR pszRelationName, + /* [retval][out] */ __RPC__deref_out_opt IRelationship **pRelationship); + + HRESULT ( STDMETHODCALLTYPE *MetaData )( + IEntity * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData); + + HRESULT ( STDMETHODCALLTYPE *NamedEntities )( + IEntity * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pNamedEntities); + + HRESULT ( STDMETHODCALLTYPE *GetNamedEntity )( + IEntity * This, + /* [in] */ __RPC__in LPCWSTR pszValue, + /* [retval][out] */ __RPC__deref_out_opt INamedEntity **ppNamedEntity); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( + IEntity * This, + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase); + + END_INTERFACE + } IEntityVtbl; + + interface IEntity + { + CONST_VTBL struct IEntityVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IEntity_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IEntity_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IEntity_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IEntity_Name(This,ppszName) \ + ( (This)->lpVtbl -> Name(This,ppszName) ) + +#define IEntity_Base(This,pBaseEntity) \ + ( (This)->lpVtbl -> Base(This,pBaseEntity) ) + +#define IEntity_Relationships(This,riid,pRelationships) \ + ( (This)->lpVtbl -> Relationships(This,riid,pRelationships) ) + +#define IEntity_GetRelationship(This,pszRelationName,pRelationship) \ + ( (This)->lpVtbl -> GetRelationship(This,pszRelationName,pRelationship) ) + +#define IEntity_MetaData(This,riid,pMetaData) \ + ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) + +#define IEntity_NamedEntities(This,riid,pNamedEntities) \ + ( (This)->lpVtbl -> NamedEntities(This,riid,pNamedEntities) ) + +#define IEntity_GetNamedEntity(This,pszValue,ppNamedEntity) \ + ( (This)->lpVtbl -> GetNamedEntity(This,pszValue,ppNamedEntity) ) + +#define IEntity_DefaultPhrase(This,ppszPhrase) \ + ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IEntity_INTERFACE_DEFINED__ */ + + +#ifndef __IRelationship_INTERFACE_DEFINED__ +#define __IRelationship_INTERFACE_DEFINED__ + +/* interface IRelationship */ +/* [unique][object][uuid][helpstring] */ + + +EXTERN_C const IID IID_IRelationship; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2769280B-5108-498c-9C7F-A51239B63147") + IRelationship : public IUnknown + { + public: + virtual /* [local] */ HRESULT STDMETHODCALLTYPE Name( + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszName) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsReal( + /* [retval][out] */ __RPC__out BOOL *pIsReal) = 0; + + virtual HRESULT STDMETHODCALLTYPE Destination( + /* [retval][out] */ __RPC__deref_out_opt IEntity **pDestinationEntity) = 0; + + virtual HRESULT STDMETHODCALLTYPE MetaData( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase) = 0; + + }; + +#else /* C style interface */ + + typedef struct IRelationshipVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IRelationship * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IRelationship * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IRelationship * This); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Name )( + IRelationship * This, + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszName); + + HRESULT ( STDMETHODCALLTYPE *IsReal )( + IRelationship * This, + /* [retval][out] */ __RPC__out BOOL *pIsReal); + + HRESULT ( STDMETHODCALLTYPE *Destination )( + IRelationship * This, + /* [retval][out] */ __RPC__deref_out_opt IEntity **pDestinationEntity); + + HRESULT ( STDMETHODCALLTYPE *MetaData )( + IRelationship * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( + IRelationship * This, + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase); + + END_INTERFACE + } IRelationshipVtbl; + + interface IRelationship + { + CONST_VTBL struct IRelationshipVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IRelationship_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IRelationship_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IRelationship_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IRelationship_Name(This,ppszName) \ + ( (This)->lpVtbl -> Name(This,ppszName) ) + +#define IRelationship_IsReal(This,pIsReal) \ + ( (This)->lpVtbl -> IsReal(This,pIsReal) ) + +#define IRelationship_Destination(This,pDestinationEntity) \ + ( (This)->lpVtbl -> Destination(This,pDestinationEntity) ) + +#define IRelationship_MetaData(This,riid,pMetaData) \ + ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) + +#define IRelationship_DefaultPhrase(This,ppszPhrase) \ + ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IRelationship_INTERFACE_DEFINED__ */ + + +#ifndef __INamedEntity_INTERFACE_DEFINED__ +#define __INamedEntity_INTERFACE_DEFINED__ + +/* interface INamedEntity */ +/* [unique][uuid][object][helpstring] */ + + +EXTERN_C const IID IID_INamedEntity; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ABDBD0B1-7D54-49fb-AB5C-BFF4130004CD") + INamedEntity : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetValue( + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValue) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase) = 0; + + }; + +#else /* C style interface */ + + typedef struct INamedEntityVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INamedEntity * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INamedEntity * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INamedEntity * This); + + HRESULT ( STDMETHODCALLTYPE *GetValue )( + INamedEntity * This, + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValue); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( + INamedEntity * This, + /* [retval][out] */ + __deref_opt_out LPWSTR *ppszPhrase); + + END_INTERFACE + } INamedEntityVtbl; + + interface INamedEntity + { + CONST_VTBL struct INamedEntityVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INamedEntity_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define INamedEntity_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define INamedEntity_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define INamedEntity_GetValue(This,ppszValue) \ + ( (This)->lpVtbl -> GetValue(This,ppszValue) ) + +#define INamedEntity_DefaultPhrase(This,ppszPhrase) \ + ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __INamedEntity_INTERFACE_DEFINED__ */ + + +#ifndef __ISchemaProvider_INTERFACE_DEFINED__ +#define __ISchemaProvider_INTERFACE_DEFINED__ + +/* interface ISchemaProvider */ +/* [unique][object][uuid][helpstring] */ + + +EXTERN_C const IID IID_ISchemaProvider; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8CF89BCB-394C-49b2-AE28-A59DD4ED7F68") + ISchemaProvider : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Entities( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pEntities) = 0; + + virtual HRESULT STDMETHODCALLTYPE RootEntity( + /* [retval][out] */ __RPC__deref_out_opt IEntity **pRootEntity) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetEntity( + /* [in] */ __RPC__in LPCWSTR pszEntityName, + /* [retval][out] */ __RPC__deref_out_opt IEntity **pEntity) = 0; + + virtual HRESULT STDMETHODCALLTYPE MetaData( + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0; + + virtual HRESULT STDMETHODCALLTYPE Localize( + /* [in] */ LCID lcid, + /* [in] */ __RPC__in_opt ISchemaLocalizerSupport *pSchemaLocalizerSupport) = 0; + + virtual HRESULT STDMETHODCALLTYPE SaveBinary( + /* [in] */ __RPC__in LPCWSTR pszSchemaBinaryPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE LookupAuthoredNamedEntity( + /* [in] */ __RPC__in_opt IEntity *pEntity, + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection, + /* [in] */ ULONG cTokensBegin, + /* [out] */ __RPC__out ULONG *pcTokensLength, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszValue) = 0; + + }; + +#else /* C style interface */ + + typedef struct ISchemaProviderVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ISchemaProvider * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ISchemaProvider * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ISchemaProvider * This); + + HRESULT ( STDMETHODCALLTYPE *Entities )( + ISchemaProvider * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pEntities); + + HRESULT ( STDMETHODCALLTYPE *RootEntity )( + ISchemaProvider * This, + /* [retval][out] */ __RPC__deref_out_opt IEntity **pRootEntity); + + HRESULT ( STDMETHODCALLTYPE *GetEntity )( + ISchemaProvider * This, + /* [in] */ __RPC__in LPCWSTR pszEntityName, + /* [retval][out] */ __RPC__deref_out_opt IEntity **pEntity); + + HRESULT ( STDMETHODCALLTYPE *MetaData )( + ISchemaProvider * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData); + + HRESULT ( STDMETHODCALLTYPE *Localize )( + ISchemaProvider * This, + /* [in] */ LCID lcid, + /* [in] */ __RPC__in_opt ISchemaLocalizerSupport *pSchemaLocalizerSupport); + + HRESULT ( STDMETHODCALLTYPE *SaveBinary )( + ISchemaProvider * This, + /* [in] */ __RPC__in LPCWSTR pszSchemaBinaryPath); + + HRESULT ( STDMETHODCALLTYPE *LookupAuthoredNamedEntity )( + ISchemaProvider * This, + /* [in] */ __RPC__in_opt IEntity *pEntity, + /* [in] */ __RPC__in LPCWSTR pszInputString, + /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection, + /* [in] */ ULONG cTokensBegin, + /* [out] */ __RPC__out ULONG *pcTokensLength, + /* [out] */ __RPC__deref_out_opt LPWSTR *ppszValue); + + END_INTERFACE + } ISchemaProviderVtbl; + + interface ISchemaProvider + { + CONST_VTBL struct ISchemaProviderVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ISchemaProvider_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ISchemaProvider_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ISchemaProvider_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ISchemaProvider_Entities(This,riid,pEntities) \ + ( (This)->lpVtbl -> Entities(This,riid,pEntities) ) + +#define ISchemaProvider_RootEntity(This,pRootEntity) \ + ( (This)->lpVtbl -> RootEntity(This,pRootEntity) ) + +#define ISchemaProvider_GetEntity(This,pszEntityName,pEntity) \ + ( (This)->lpVtbl -> GetEntity(This,pszEntityName,pEntity) ) + +#define ISchemaProvider_MetaData(This,riid,pMetaData) \ + ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) + +#define ISchemaProvider_Localize(This,lcid,pSchemaLocalizerSupport) \ + ( (This)->lpVtbl -> Localize(This,lcid,pSchemaLocalizerSupport) ) + +#define ISchemaProvider_SaveBinary(This,pszSchemaBinaryPath) \ + ( (This)->lpVtbl -> SaveBinary(This,pszSchemaBinaryPath) ) + +#define ISchemaProvider_LookupAuthoredNamedEntity(This,pEntity,pszInputString,pTokenCollection,cTokensBegin,pcTokensLength,ppszValue) \ + ( (This)->lpVtbl -> LookupAuthoredNamedEntity(This,pEntity,pszInputString,pTokenCollection,cTokensBegin,pcTokensLength,ppszValue) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ISchemaProvider_INTERFACE_DEFINED__ */ + + +#ifndef __ITokenCollection_INTERFACE_DEFINED__ +#define __ITokenCollection_INTERFACE_DEFINED__ + +/* interface ITokenCollection */ +/* [unique][object][uuid][helpstring] */ + + +EXTERN_C const IID IID_ITokenCollection; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("22D8B4F2-F577-4adb-A335-C2AE88416FAB") + ITokenCollection : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE NumberOfTokens( + __RPC__in ULONG *pCount) = 0; + + virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetToken( + /* [in] */ ULONG i, + /* [out] */ + __out_opt ULONG *pBegin, + /* [out] */ + __out_opt ULONG *pLength, + /* [out] */ + __deref_opt_out LPWSTR *ppsz) = 0; + + }; + +#else /* C style interface */ + + typedef struct ITokenCollectionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ITokenCollection * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ITokenCollection * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ITokenCollection * This); + + HRESULT ( STDMETHODCALLTYPE *NumberOfTokens )( + ITokenCollection * This, + __RPC__in ULONG *pCount); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetToken )( + ITokenCollection * This, + /* [in] */ ULONG i, + /* [out] */ + __out_opt ULONG *pBegin, + /* [out] */ + __out_opt ULONG *pLength, + /* [out] */ + __deref_opt_out LPWSTR *ppsz); + + END_INTERFACE + } ITokenCollectionVtbl; + + interface ITokenCollection + { + CONST_VTBL struct ITokenCollectionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ITokenCollection_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ITokenCollection_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ITokenCollection_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ITokenCollection_NumberOfTokens(This,pCount) \ + ( (This)->lpVtbl -> NumberOfTokens(This,pCount) ) + +#define ITokenCollection_GetToken(This,i,pBegin,pLength,ppsz) \ + ( (This)->lpVtbl -> GetToken(This,i,pBegin,pLength,ppsz) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ITokenCollection_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_structuredquery_0000_0013 */ +/* [local] */ + +typedef /* [public][public][v1_enum] */ +enum __MIDL___MIDL_itf_structuredquery_0000_0013_0001 + { NEC_LOW = 0, + NEC_MEDIUM = ( NEC_LOW + 1 ) , + NEC_HIGH = ( NEC_MEDIUM + 1 ) + } NAMED_ENTITY_CERTAINTY; + + + +extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0013_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0013_v0_0_s_ifspec; + +#ifndef __INamedEntityCollector_INTERFACE_DEFINED__ +#define __INamedEntityCollector_INTERFACE_DEFINED__ + +/* interface INamedEntityCollector */ +/* [unique][object][uuid][helpstring] */ + + +EXTERN_C const IID IID_INamedEntityCollector; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("AF2440F6-8AFC-47d0-9A7F-396A0ACFB43D") + INamedEntityCollector : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Add( + /* [in] */ ULONG beginSpan, + /* [in] */ ULONG endSpan, + /* [in] */ ULONG beginActual, + /* [in] */ ULONG endActual, + /* [in] */ __RPC__in_opt IEntity *pType, + /* [in] */ __RPC__in LPCWSTR pszValue, + /* [in] */ NAMED_ENTITY_CERTAINTY certainty) = 0; + + }; + +#else /* C style interface */ + + typedef struct INamedEntityCollectorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INamedEntityCollector * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INamedEntityCollector * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INamedEntityCollector * This); + + HRESULT ( STDMETHODCALLTYPE *Add )( + INamedEntityCollector * This, + /* [in] */ ULONG beginSpan, + /* [in] */ ULONG endSpan, + /* [in] */ ULONG beginActual, + /* [in] */ ULONG endActual, + /* [in] */ __RPC__in_opt IEntity *pType, + /* [in] */ __RPC__in LPCWSTR pszValue, + /* [in] */ NAMED_ENTITY_CERTAINTY certainty); + + END_INTERFACE + } INamedEntityCollectorVtbl; + + interface INamedEntityCollector + { + CONST_VTBL struct INamedEntityCollectorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INamedEntityCollector_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define INamedEntityCollector_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define INamedEntityCollector_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define INamedEntityCollector_Add(This,beginSpan,endSpan,beginActual,endActual,pType,pszValue,certainty) \ + ( (This)->lpVtbl -> Add(This,beginSpan,endSpan,beginActual,endActual,pType,pszValue,certainty) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __INamedEntityCollector_INTERFACE_DEFINED__ */ + + +#ifndef __ISchemaLocalizerSupport_INTERFACE_DEFINED__ +#define __ISchemaLocalizerSupport_INTERFACE_DEFINED__ + +/* interface ISchemaLocalizerSupport */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_ISchemaLocalizerSupport; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("CA3FDCA2-BFBE-4eed-90D7-0CAEF0A1BDA1") + ISchemaLocalizerSupport : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Localize( + /* [in] */ __RPC__in LPCWSTR pszGlobalString, + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszLocalString) = 0; + + }; + +#else /* C style interface */ + + typedef struct ISchemaLocalizerSupportVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ISchemaLocalizerSupport * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ISchemaLocalizerSupport * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ISchemaLocalizerSupport * This); + + HRESULT ( STDMETHODCALLTYPE *Localize )( + ISchemaLocalizerSupport * This, + /* [in] */ __RPC__in LPCWSTR pszGlobalString, + /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszLocalString); + + END_INTERFACE + } ISchemaLocalizerSupportVtbl; + + interface ISchemaLocalizerSupport + { + CONST_VTBL struct ISchemaLocalizerSupportVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ISchemaLocalizerSupport_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ISchemaLocalizerSupport_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ISchemaLocalizerSupport_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ISchemaLocalizerSupport_Localize(This,pszGlobalString,ppszLocalString) \ + ( (This)->lpVtbl -> Localize(This,pszGlobalString,ppszLocalString) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ISchemaLocalizerSupport_INTERFACE_DEFINED__ */ + + +#ifndef __IQueryParserManager_INTERFACE_DEFINED__ +#define __IQueryParserManager_INTERFACE_DEFINED__ + +/* interface IQueryParserManager */ +/* [unique][object][uuid] */ + + +EXTERN_C const IID IID_IQueryParserManager; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A879E3C4-AF77-44fb-8F37-EBD1487CF920") + IQueryParserManager : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateLoadedParser( + /* [in] */ __RPC__in LPCWSTR pszCatalog, + /* [in] */ LANGID langidForKeywords, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppQueryParser) = 0; + + virtual HRESULT STDMETHODCALLTYPE InitializeOptions( + /* [in] */ BOOL fUnderstandNQS, + /* [in] */ BOOL fAutoWildCard, + /* [in] */ __RPC__in_opt IQueryParser *pQueryParser) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetOption( + /* [in] */ QUERY_PARSER_MANAGER_OPTION option, + /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0; + + }; + +#else /* C style interface */ + + typedef struct IQueryParserManagerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IQueryParserManager * This, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][out] */ + __RPC__deref_out void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IQueryParserManager * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IQueryParserManager * This); + + HRESULT ( STDMETHODCALLTYPE *CreateLoadedParser )( + IQueryParserManager * This, + /* [in] */ __RPC__in LPCWSTR pszCatalog, + /* [in] */ LANGID langidForKeywords, + /* [in] */ __RPC__in REFIID riid, + /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppQueryParser); + + HRESULT ( STDMETHODCALLTYPE *InitializeOptions )( + IQueryParserManager * This, + /* [in] */ BOOL fUnderstandNQS, + /* [in] */ BOOL fAutoWildCard, + /* [in] */ __RPC__in_opt IQueryParser *pQueryParser); + + HRESULT ( STDMETHODCALLTYPE *SetOption )( + IQueryParserManager * This, + /* [in] */ QUERY_PARSER_MANAGER_OPTION option, + /* [in] */ __RPC__in const PROPVARIANT *pOptionValue); + + END_INTERFACE + } IQueryParserManagerVtbl; + + interface IQueryParserManager + { + CONST_VTBL struct IQueryParserManagerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IQueryParserManager_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IQueryParserManager_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IQueryParserManager_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IQueryParserManager_CreateLoadedParser(This,pszCatalog,langidForKeywords,riid,ppQueryParser) \ + ( (This)->lpVtbl -> CreateLoadedParser(This,pszCatalog,langidForKeywords,riid,ppQueryParser) ) + +#define IQueryParserManager_InitializeOptions(This,fUnderstandNQS,fAutoWildCard,pQueryParser) \ + ( (This)->lpVtbl -> InitializeOptions(This,fUnderstandNQS,fAutoWildCard,pQueryParser) ) + +#define IQueryParserManager_SetOption(This,option,pOptionValue) \ + ( (This)->lpVtbl -> SetOption(This,option,pOptionValue) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IQueryParserManager_INTERFACE_DEFINED__ */ + + + +#ifndef __StructuredQuery1_LIBRARY_DEFINED__ +#define __StructuredQuery1_LIBRARY_DEFINED__ + +/* library StructuredQuery1 */ +/* [version][uuid] */ + + +EXTERN_C const IID LIBID_StructuredQuery1; + +EXTERN_C const CLSID CLSID_QueryParser; + +#ifdef __cplusplus + +class DECLSPEC_UUID("B72F8FD8-0FAB-4dd9-BDBF-245A6CE1485B") +QueryParser; +#endif + +EXTERN_C const CLSID CLSID_NegationCondition; + +#ifdef __cplusplus + +class DECLSPEC_UUID("8DE9C74C-605A-4acd-BEE3-2B222AA2D23D") +NegationCondition; +#endif + +EXTERN_C const CLSID CLSID_CompoundCondition; + +#ifdef __cplusplus + +class DECLSPEC_UUID("116F8D13-101E-4fa5-84D4-FF8279381935") +CompoundCondition; +#endif + +EXTERN_C const CLSID CLSID_LeafCondition; + +#ifdef __cplusplus + +class DECLSPEC_UUID("52F15C89-5A17-48e1-BBCD-46A3F89C7CC2") +LeafCondition; +#endif + +EXTERN_C const CLSID CLSID_ConditionFactory; + +#ifdef __cplusplus + +class DECLSPEC_UUID("E03E85B0-7BE3-4000-BA98-6C13DE9FA486") +ConditionFactory; +#endif + +EXTERN_C const CLSID CLSID_Interval; + +#ifdef __cplusplus + +class DECLSPEC_UUID("D957171F-4BF9-4de2-BCD5-C70A7CA55836") +Interval; +#endif + +EXTERN_C const CLSID CLSID_QueryParserManager; + +#ifdef __cplusplus + +class DECLSPEC_UUID("5088B39A-29B4-4d9d-8245-4EE289222F66") +QueryParserManager; +#endif +#endif /* __StructuredQuery1_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); + +unsigned long __RPC_USER LPSAFEARRAY_UserSize( unsigned long *, unsigned long , LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal( unsigned long *, unsigned char *, LPSAFEARRAY * ); +unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); +void __RPC_USER LPSAFEARRAY_UserFree( unsigned long *, LPSAFEARRAY * ); + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/Externals/portaudio/src/hostapi/wasapi/pa_win_wasapi.c b/Externals/portaudio/src/hostapi/wasapi/pa_win_wasapi.c new file mode 100644 index 0000000000..0172e47144 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/pa_win_wasapi.c @@ -0,0 +1,5156 @@ +/* + * Portable Audio I/O Library WASAPI implementation + * Copyright (c) 2006-2010 David Viens, Dmitry Kostjuchenko + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup hostapi_src + @brief WASAPI implementation of support for a host API. + @note pa_wasapi currently requires minimum VC 2005, and the latest Vista SDK +*/ + +#define WIN32_LEAN_AND_MEAN // exclude rare headers +#include +#include +#include +#include +#include +#include // must be before other Wasapi headers +#if defined(_MSC_VER) && (_MSC_VER >= 1400) + #include + #define COBJMACROS + #include + #include + #define INITGUID // Avoid additional linkage of static libs, excessive code will be optimized out by the compiler + #include + #include + #include // Used to get IKsJackDescription interface + #undef INITGUID +#endif +#ifndef __MWERKS__ +#include +#include +#endif /* __MWERKS__ */ + +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "pa_win_wasapi.h" +#include "pa_debugprint.h" +#include "pa_ringbuffer.h" + +#include "pa_win_coinitialize.h" + +#ifndef NTDDI_VERSION + + #undef WINVER + #undef _WIN32_WINNT + #define WINVER 0x0600 // VISTA + #define _WIN32_WINNT WINVER + + #ifndef _AVRT_ //<< fix MinGW dummy compile by defining missing type: AVRT_PRIORITY + typedef enum _AVRT_PRIORITY + { + AVRT_PRIORITY_LOW = -1, + AVRT_PRIORITY_NORMAL, + AVRT_PRIORITY_HIGH, + AVRT_PRIORITY_CRITICAL + } AVRT_PRIORITY, *PAVRT_PRIORITY; + #endif + + #include // << for IID/CLSID + #include + #include + + #ifndef __LPCGUID_DEFINED__ + #define __LPCGUID_DEFINED__ + typedef const GUID *LPCGUID; + #endif + + #ifndef PROPERTYKEY_DEFINED + #define PROPERTYKEY_DEFINED + typedef struct _tagpropertykey + { + GUID fmtid; + DWORD pid; + } PROPERTYKEY; + #endif + + #ifdef __midl_proxy + #define __MIDL_CONST + #else + #define __MIDL_CONST const + #endif + + #ifdef WIN64 + #include + typedef LONG NTSTATUS; + #define FASTCALL + #include + #include + #else + typedef struct _BYTE_BLOB + { + unsigned long clSize; + unsigned char abData[ 1 ]; + } BYTE_BLOB; + typedef /* [unique] */ __RPC_unique_pointer BYTE_BLOB *UP_BYTE_BLOB; + typedef LONGLONG REFERENCE_TIME; + #define NONAMELESSUNION + #endif + + #ifndef WAVE_FORMAT_IEEE_FLOAT + #define WAVE_FORMAT_IEEE_FLOAT 0x0003 // 32-bit floating-point + #endif + + #ifndef __MINGW_EXTENSION + #if defined(__GNUC__) || defined(__GNUG__) + #define __MINGW_EXTENSION __extension__ + #else + #define __MINGW_EXTENSION + #endif + #endif + + #include + #include + #define COBJMACROS + #define INITGUID // Avoid additional linkage of static libs, excessive code will be optimized out by the compiler + #include + #include + #include + #include + #include // Used to get IKsJackDescription interface + #undef INITGUID + +#endif // NTDDI_VERSION + +#ifndef GUID_SECT + #define GUID_SECT +#endif + +#define __DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} +#define __DEFINE_IID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const IID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} +#define __DEFINE_CLSID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const CLSID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} +#define PA_DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + __DEFINE_CLSID(pa_CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) +#define PA_DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + __DEFINE_IID(pa_IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) + +// "1CB9AD4C-DBFA-4c32-B178-C2F568A703B2" +PA_DEFINE_IID(IAudioClient, 1cb9ad4c, dbfa, 4c32, b1, 78, c2, f5, 68, a7, 03, b2); +// "1BE09788-6894-4089-8586-9A2A6C265AC5" +PA_DEFINE_IID(IMMEndpoint, 1be09788, 6894, 4089, 85, 86, 9a, 2a, 6c, 26, 5a, c5); +// "A95664D2-9614-4F35-A746-DE8DB63617E6" +PA_DEFINE_IID(IMMDeviceEnumerator, a95664d2, 9614, 4f35, a7, 46, de, 8d, b6, 36, 17, e6); +// "BCDE0395-E52F-467C-8E3D-C4579291692E" +PA_DEFINE_CLSID(IMMDeviceEnumerator,bcde0395, e52f, 467c, 8e, 3d, c4, 57, 92, 91, 69, 2e); +// "F294ACFC-3146-4483-A7BF-ADDCA7C260E2" +PA_DEFINE_IID(IAudioRenderClient, f294acfc, 3146, 4483, a7, bf, ad, dc, a7, c2, 60, e2); +// "C8ADBD64-E71E-48a0-A4DE-185C395CD317" +PA_DEFINE_IID(IAudioCaptureClient, c8adbd64, e71e, 48a0, a4, de, 18, 5c, 39, 5c, d3, 17); +// *2A07407E-6497-4A18-9787-32F79BD0D98F* Or this?? +PA_DEFINE_IID(IDeviceTopology, 2A07407E, 6497, 4A18, 97, 87, 32, f7, 9b, d0, d9, 8f); +// *AE2DE0E4-5BCA-4F2D-AA46-5D13F8FDB3A9* +PA_DEFINE_IID(IPart, AE2DE0E4, 5BCA, 4F2D, aa, 46, 5d, 13, f8, fd, b3, a9); +// *4509F757-2D46-4637-8E62-CE7DB944F57B* +PA_DEFINE_IID(IKsJackDescription, 4509F757, 2D46, 4637, 8e, 62, ce, 7d, b9, 44, f5, 7b); +// Media formats: +__DEFINE_GUID(pa_KSDATAFORMAT_SUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); +__DEFINE_GUID(pa_KSDATAFORMAT_SUBTYPE_ADPCM, 0x00000002, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); +__DEFINE_GUID(pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); + +/* use CreateThread for CYGWIN/Windows Mobile, _beginthreadex for all others */ +#if !defined(__CYGWIN__) && !defined(_WIN32_WCE) + #define CREATE_THREAD(PROC) (HANDLE)_beginthreadex( NULL, 0, (PROC), stream, 0, &stream->dwThreadId ) + #define PA_THREAD_FUNC static unsigned WINAPI + #define PA_THREAD_ID unsigned +#else + #define CREATE_THREAD(PROC) CreateThread( NULL, 0, (PROC), stream, 0, &stream->dwThreadId ) + #define PA_THREAD_FUNC static DWORD WINAPI + #define PA_THREAD_ID DWORD +#endif + +// Thread function forward decl. +PA_THREAD_FUNC ProcThreadEvent(void *param); +PA_THREAD_FUNC ProcThreadPoll(void *param); + +// Availabe from Windows 7 +#ifndef AUDCLNT_E_BUFFER_ERROR + #define AUDCLNT_E_BUFFER_ERROR AUDCLNT_ERR(0x018) +#endif +#ifndef AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED + #define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x019) +#endif +#ifndef AUDCLNT_E_INVALID_DEVICE_PERIOD + #define AUDCLNT_E_INVALID_DEVICE_PERIOD AUDCLNT_ERR(0x020) +#endif + +#define MAX_STR_LEN 512 + +enum { S_INPUT = 0, S_OUTPUT = 1, S_COUNT = 2, S_FULLDUPLEX = 0 }; + +// Number of packets which compose single contignous buffer. With trial and error it was calculated +// that WASAPI Input sub-system uses 6 packets per whole buffer. Please provide more information +// or corrections if available. +enum { WASAPI_PACKETS_PER_INPUT_BUFFER = 6 }; + +#define STATIC_ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0])) + +#define PRINT(x) PA_DEBUG(x); + +#define PA_SKELETON_SET_LAST_HOST_ERROR( errorCode, errorText ) \ + PaUtil_SetLastHostErrorInfo( paWASAPI, errorCode, errorText ) + +#define PA_WASAPI__IS_FULLDUPLEX(STREAM) ((STREAM)->in.clientProc && (STREAM)->out.clientProc) + +#ifndef IF_FAILED_JUMP +#define IF_FAILED_JUMP(hr, label) if(FAILED(hr)) goto label; +#endif + +#ifndef IF_FAILED_INTERNAL_ERROR_JUMP +#define IF_FAILED_INTERNAL_ERROR_JUMP(hr, error, label) if(FAILED(hr)) { error = paInternalError; goto label; } +#endif + +#define SAFE_CLOSE(h) if ((h) != NULL) { CloseHandle((h)); (h) = NULL; } +#define SAFE_RELEASE(punk) if ((punk) != NULL) { (punk)->lpVtbl->Release((punk)); (punk) = NULL; } + +// Mixer function +typedef void (*MixMonoToStereoF) (void *__to, void *__from, UINT32 count); + +// AVRT is the new "multimedia schedulling stuff" +typedef BOOL (WINAPI *FAvRtCreateThreadOrderingGroup) (PHANDLE,PLARGE_INTEGER,GUID*,PLARGE_INTEGER); +typedef BOOL (WINAPI *FAvRtDeleteThreadOrderingGroup) (HANDLE); +typedef BOOL (WINAPI *FAvRtWaitOnThreadOrderingGroup) (HANDLE); +typedef HANDLE (WINAPI *FAvSetMmThreadCharacteristics) (LPCTSTR,LPDWORD); +typedef BOOL (WINAPI *FAvRevertMmThreadCharacteristics)(HANDLE); +typedef BOOL (WINAPI *FAvSetMmThreadPriority) (HANDLE,AVRT_PRIORITY); + +static HMODULE hDInputDLL = 0; +FAvRtCreateThreadOrderingGroup pAvRtCreateThreadOrderingGroup = NULL; +FAvRtDeleteThreadOrderingGroup pAvRtDeleteThreadOrderingGroup = NULL; +FAvRtWaitOnThreadOrderingGroup pAvRtWaitOnThreadOrderingGroup = NULL; +FAvSetMmThreadCharacteristics pAvSetMmThreadCharacteristics = NULL; +FAvRevertMmThreadCharacteristics pAvRevertMmThreadCharacteristics = NULL; +FAvSetMmThreadPriority pAvSetMmThreadPriority = NULL; + +#define _GetProc(fun, type, name) { \ + fun = (type) GetProcAddress(hDInputDLL,name); \ + if (fun == NULL) { \ + PRINT(("GetProcAddr failed for %s" ,name)); \ + return FALSE; \ + } \ + } \ + +// ------------------------------------------------------------------------------------------ +/* prototypes for functions declared in this file */ +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +#ifdef __cplusplus +} +#endif /* __cplusplus */ +// dummy entry point for other compilers and sdks +// currently built using RC1 SDK (5600) +//#if _MSC_VER < 1400 +//PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +//{ + //return paNoError; +//} +//#else + +// ------------------------------------------------------------------------------------------ +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream* stream ); +static signed long GetStreamWriteAvailable( PaStream* stream ); + +// ------------------------------------------------------------------------------------------ +/* + These are fields that can be gathered from IDevice and IAudioDevice PRIOR to Initialize, and + done in first pass i assume that neither of these will cause the Driver to "load", but again, + who knows how they implement their stuff + */ +typedef struct PaWasapiDeviceInfo +{ + // Device + IMMDevice *device; + + // from GetId + WCHAR szDeviceID[MAX_STR_LEN]; + + // from GetState + DWORD state; + + // Fields filled from IMMEndpoint'sGetDataFlow + EDataFlow flow; + + // Fields filled from IAudioDevice (_prior_ to Initialize) + // from GetDevicePeriod( + REFERENCE_TIME DefaultDevicePeriod; + REFERENCE_TIME MinimumDevicePeriod; + + // from GetMixFormat + // WAVEFORMATEX *MixFormat;//needs to be CoTaskMemFree'd after use! + + // Default format (setup through Control Panel by user) + WAVEFORMATEXTENSIBLE DefaultFormat; + + // Formfactor + EndpointFormFactor formFactor; +} +PaWasapiDeviceInfo; + +// ------------------------------------------------------------------------------------------ +/* PaWasapiHostApiRepresentation - host api datastructure specific to this implementation */ +typedef struct +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + /* implementation specific data goes here */ + + PaWinUtilComInitializationResult comInitializationResult; + + //in case we later need the synch + IMMDeviceEnumerator *enumerator; + + //this is the REAL number of devices, whether they are usefull to PA or not! + UINT32 deviceCount; + + WCHAR defaultRenderer [MAX_STR_LEN]; + WCHAR defaultCapturer [MAX_STR_LEN]; + + PaWasapiDeviceInfo *devInfo; + + // Is true when WOW64 Vista/7 Workaround is needed + BOOL useWOW64Workaround; +} +PaWasapiHostApiRepresentation; + +// ------------------------------------------------------------------------------------------ +/* PaWasapiAudioClientParams - audio client parameters */ +typedef struct PaWasapiAudioClientParams +{ + PaWasapiDeviceInfo *device_info; + PaStreamParameters stream_params; + PaWasapiStreamInfo wasapi_params; + UINT32 frames_per_buffer; + double sample_rate; + BOOL blocking; + BOOL full_duplex; + BOOL wow64_workaround; +} +PaWasapiAudioClientParams; + +// ------------------------------------------------------------------------------------------ +/* PaWasapiStream - a stream data structure specifically for this implementation */ +typedef struct PaWasapiSubStream +{ + IAudioClient *clientParent; + IStream *clientStream; + IAudioClient *clientProc; + + WAVEFORMATEXTENSIBLE wavex; + UINT32 bufferSize; + REFERENCE_TIME deviceLatency; + REFERENCE_TIME period; + double latencySeconds; + UINT32 framesPerHostCallback; + AUDCLNT_SHAREMODE shareMode; + UINT32 streamFlags; // AUDCLNT_STREAMFLAGS_EVENTCALLBACK, ... + UINT32 flags; + PaWasapiAudioClientParams params; //!< parameters + + // Buffers + UINT32 buffers; //!< number of buffers used (from host side) + UINT32 framesPerBuffer; //!< number of frames per 1 buffer + BOOL userBufferAndHostMatch; + + // Used for Mono >> Stereo workaround, if driver does not support it + // (in Exclusive mode WASAPI usually refuses to operate with Mono (1-ch) + void *monoBuffer; //!< pointer to buffer + UINT32 monoBufferSize; //!< buffer size in bytes + MixMonoToStereoF monoMixer; //!< pointer to mixer function + + PaUtilRingBuffer *tailBuffer; //!< buffer with trailing sample for blocking mode operations (only for Input) + void *tailBufferMemory; //!< tail buffer memory region +} +PaWasapiSubStream; + +// ------------------------------------------------------------------------------------------ +/* PaWasapiHostProcessor - redirects processing data */ +typedef struct PaWasapiHostProcessor +{ + PaWasapiHostProcessorCallback processor; + void *userData; +} +PaWasapiHostProcessor; + +// ------------------------------------------------------------------------------------------ +typedef struct PaWasapiStream +{ + /* IMPLEMENT ME: rename this */ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + // input + PaWasapiSubStream in; + IAudioCaptureClient *captureClientParent; + IStream *captureClientStream; + IAudioCaptureClient *captureClient; + IAudioEndpointVolume *inVol; + + // output + PaWasapiSubStream out; + IAudioRenderClient *renderClientParent; + IStream *renderClientStream; + IAudioRenderClient *renderClient; + IAudioEndpointVolume *outVol; + + // event handles for event-driven processing mode + HANDLE event[S_COUNT]; + + // buffer mode + PaUtilHostBufferSizeMode bufferMode; + + // must be volatile to avoid race condition on user query while + // thread is being started + volatile BOOL running; + + PA_THREAD_ID dwThreadId; + HANDLE hThread; + HANDLE hCloseRequest; + HANDLE hThreadStart; //!< signalled by thread on start + HANDLE hThreadExit; //!< signalled by thread on exit + HANDLE hBlockingOpStreamRD; + HANDLE hBlockingOpStreamWR; + + // Host callback Output overrider + PaWasapiHostProcessor hostProcessOverrideOutput; + + // Host callback Input overrider + PaWasapiHostProcessor hostProcessOverrideInput; + + // Defines blocking/callback interface used + BOOL bBlocking; + + // Av Task (MM thread management) + HANDLE hAvTask; + + // Thread priority level + PaWasapiThreadPriority nThreadPriority; +} +PaWasapiStream; + +// Local stream methods +void _StreamOnStop(PaWasapiStream *stream); +void _StreamFinish(PaWasapiStream *stream); +void _StreamCleanup(PaWasapiStream *stream); +HRESULT _PollGetOutputFramesAvailable(PaWasapiStream *stream, UINT32 *available); +HRESULT _PollGetInputFramesAvailable(PaWasapiStream *stream, UINT32 *available); +void *PaWasapi_ReallocateMemory(void *ptr, size_t size); +void PaWasapi_FreeMemory(void *ptr); + +// Local statics + +// ------------------------------------------------------------------------------------------ +#define LogHostError(HRES) __LogHostError(HRES, __FUNCTION__, __FILE__, __LINE__) +static HRESULT __LogHostError(HRESULT res, const char *func, const char *file, int line) +{ + const char *text = NULL; + switch (res) + { + case S_OK: return res; + case E_POINTER :text ="E_POINTER"; break; + case E_INVALIDARG :text ="E_INVALIDARG"; break; + + case AUDCLNT_E_NOT_INITIALIZED :text ="AUDCLNT_E_NOT_INITIALIZED"; break; + case AUDCLNT_E_ALREADY_INITIALIZED :text ="AUDCLNT_E_ALREADY_INITIALIZED"; break; + case AUDCLNT_E_WRONG_ENDPOINT_TYPE :text ="AUDCLNT_E_WRONG_ENDPOINT_TYPE"; break; + case AUDCLNT_E_DEVICE_INVALIDATED :text ="AUDCLNT_E_DEVICE_INVALIDATED"; break; + case AUDCLNT_E_NOT_STOPPED :text ="AUDCLNT_E_NOT_STOPPED"; break; + case AUDCLNT_E_BUFFER_TOO_LARGE :text ="AUDCLNT_E_BUFFER_TOO_LARGE"; break; + case AUDCLNT_E_OUT_OF_ORDER :text ="AUDCLNT_E_OUT_OF_ORDER"; break; + case AUDCLNT_E_UNSUPPORTED_FORMAT :text ="AUDCLNT_E_UNSUPPORTED_FORMAT"; break; + case AUDCLNT_E_INVALID_SIZE :text ="AUDCLNT_E_INVALID_SIZE"; break; + case AUDCLNT_E_DEVICE_IN_USE :text ="AUDCLNT_E_DEVICE_IN_USE"; break; + case AUDCLNT_E_BUFFER_OPERATION_PENDING :text ="AUDCLNT_E_BUFFER_OPERATION_PENDING"; break; + case AUDCLNT_E_THREAD_NOT_REGISTERED :text ="AUDCLNT_E_THREAD_NOT_REGISTERED"; break; + case AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED :text ="AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED"; break; + case AUDCLNT_E_ENDPOINT_CREATE_FAILED :text ="AUDCLNT_E_ENDPOINT_CREATE_FAILED"; break; + case AUDCLNT_E_SERVICE_NOT_RUNNING :text ="AUDCLNT_E_SERVICE_NOT_RUNNING"; break; + case AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED :text ="AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED"; break; + case AUDCLNT_E_EXCLUSIVE_MODE_ONLY :text ="AUDCLNT_E_EXCLUSIVE_MODE_ONLY"; break; + case AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL :text ="AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL"; break; + case AUDCLNT_E_EVENTHANDLE_NOT_SET :text ="AUDCLNT_E_EVENTHANDLE_NOT_SET"; break; + case AUDCLNT_E_INCORRECT_BUFFER_SIZE :text ="AUDCLNT_E_INCORRECT_BUFFER_SIZE"; break; + case AUDCLNT_E_BUFFER_SIZE_ERROR :text ="AUDCLNT_E_BUFFER_SIZE_ERROR"; break; + case AUDCLNT_E_CPUUSAGE_EXCEEDED :text ="AUDCLNT_E_CPUUSAGE_EXCEEDED"; break; + case AUDCLNT_E_BUFFER_ERROR :text ="AUDCLNT_E_BUFFER_ERROR"; break; + case AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED :text ="AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED"; break; + case AUDCLNT_E_INVALID_DEVICE_PERIOD :text ="AUDCLNT_E_INVALID_DEVICE_PERIOD"; break; + + case AUDCLNT_S_BUFFER_EMPTY :text ="AUDCLNT_S_BUFFER_EMPTY"; break; + case AUDCLNT_S_THREAD_ALREADY_REGISTERED :text ="AUDCLNT_S_THREAD_ALREADY_REGISTERED"; break; + case AUDCLNT_S_POSITION_STALLED :text ="AUDCLNT_S_POSITION_STALLED"; break; + + // other windows common errors: + case CO_E_NOTINITIALIZED :text ="CO_E_NOTINITIALIZED: you must call CoInitialize() before Pa_OpenStream()"; break; + + default: + text = "UNKNOWN ERROR"; + } + PRINT(("WASAPI ERROR HRESULT: 0x%X : %s\n [FUNCTION: %s FILE: %s {LINE: %d}]\n", res, text, func, file, line)); + PA_SKELETON_SET_LAST_HOST_ERROR(res, text); + return res; +} + +// ------------------------------------------------------------------------------------------ +#define LogPaError(PAERR) __LogPaError(PAERR, __FUNCTION__, __FILE__, __LINE__) +static PaError __LogPaError(PaError err, const char *func, const char *file, int line) +{ + if (err == paNoError) + return err; + PRINT(("WASAPI ERROR PAERROR: %i : %s\n [FUNCTION: %s FILE: %s {LINE: %d}]\n", err, Pa_GetErrorText(err), func, file, line)); + return err; +} + +// ------------------------------------------------------------------------------------------ +/*! \class ThreadSleepScheduler + Allows to emulate thread sleep of less than 1 millisecond under Windows. Scheduler + calculates number of times the thread must run untill next sleep of 1 millisecond. + It does not make thread sleeping for real number of microseconds but rather controls + how many of imaginary microseconds the thread task can allow thread to sleep. +*/ +typedef struct ThreadIdleScheduler +{ + UINT32 m_idle_microseconds; //!< number of microseconds to sleep + UINT32 m_next_sleep; //!< next sleep round + UINT32 m_i; //!< current round iterator position + UINT32 m_resolution; //!< resolution in number of milliseconds +} +ThreadIdleScheduler; +//! Setup scheduler. +static void ThreadIdleScheduler_Setup(ThreadIdleScheduler *sched, UINT32 resolution, UINT32 microseconds) +{ + assert(microseconds != 0); + assert(resolution != 0); + assert((resolution * 1000) >= microseconds); + + memset(sched, 0, sizeof(*sched)); + + sched->m_idle_microseconds = microseconds; + sched->m_resolution = resolution; + sched->m_next_sleep = (resolution * 1000) / microseconds; +} +//! Iterate and check if can sleep. +static UINT32 ThreadIdleScheduler_NextSleep(ThreadIdleScheduler *sched) +{ + // advance and check if thread can sleep + if (++ sched->m_i == sched->m_next_sleep) + { + sched->m_i = 0; + return sched->m_resolution; + } + return 0; +} + +// ------------------------------------------------------------------------------------------ +/*static double nano100ToMillis(REFERENCE_TIME ref) +{ + // 1 nano = 0.000000001 seconds + //100 nano = 0.0000001 seconds + //100 nano = 0.0001 milliseconds + return ((double)ref)*0.0001; +}*/ + +// ------------------------------------------------------------------------------------------ +static double nano100ToSeconds(REFERENCE_TIME ref) +{ + // 1 nano = 0.000000001 seconds + //100 nano = 0.0000001 seconds + //100 nano = 0.0001 milliseconds + return ((double)ref)*0.0000001; +} + +// ------------------------------------------------------------------------------------------ +/*static REFERENCE_TIME MillisTonano100(double ref) +{ + // 1 nano = 0.000000001 seconds + //100 nano = 0.0000001 seconds + //100 nano = 0.0001 milliseconds + return (REFERENCE_TIME)(ref/0.0001); +}*/ + +// ------------------------------------------------------------------------------------------ +static REFERENCE_TIME SecondsTonano100(double ref) +{ + // 1 nano = 0.000000001 seconds + //100 nano = 0.0000001 seconds + //100 nano = 0.0001 milliseconds + return (REFERENCE_TIME)(ref/0.0000001); +} + +// ------------------------------------------------------------------------------------------ +// Makes Hns period from frames and sample rate +static REFERENCE_TIME MakeHnsPeriod(UINT32 nFrames, DWORD nSamplesPerSec) +{ + return (REFERENCE_TIME)((10000.0 * 1000 / nSamplesPerSec * nFrames) + 0.5); +} + +// ------------------------------------------------------------------------------------------ +// Converts PaSampleFormat to bits per sample value +static WORD PaSampleFormatToBitsPerSample(PaSampleFormat format_id) +{ + switch (format_id & ~paNonInterleaved) + { + case paFloat32: + case paInt32: return 32; + case paInt24: return 24; + case paInt16: return 16; + case paInt8: + case paUInt8: return 8; + } + return 0; +} + +// ------------------------------------------------------------------------------------------ +// Converts PaSampleFormat to bits per sample value +/*static WORD PaSampleFormatToBytesPerSample(PaSampleFormat format_id) +{ + return PaSampleFormatToBitsPerSample(format_id) >> 3; // 'bits/8' +}*/ + +// ------------------------------------------------------------------------------------------ +// Converts Hns period into number of frames +static UINT32 MakeFramesFromHns(REFERENCE_TIME hnsPeriod, UINT32 nSamplesPerSec) +{ + UINT32 nFrames = (UINT32)( // frames = + 1.0 * hnsPeriod * // hns * + nSamplesPerSec / // (frames / s) / + 1000 / // (ms / s) / + 10000 // (hns / s) / + + 0.5 // rounding + ); + return nFrames; +} + +// Aligning function type +typedef UINT32 (*ALIGN_FUNC) (UINT32 v, UINT32 align); + +// ------------------------------------------------------------------------------------------ +// Aligns 'v' backwards +static UINT32 ALIGN_BWD(UINT32 v, UINT32 align) +{ + return ((v - (align ? v % align : 0))); +} + +// ------------------------------------------------------------------------------------------ +// Aligns 'v' forward +static UINT32 ALIGN_FWD(UINT32 v, UINT32 align) +{ + UINT32 remainder = (align ? (v % align) : 0); + if (remainder == 0) + return v; + return v + (align - remainder); +} + +// ------------------------------------------------------------------------------------------ +// Get next value power of 2 +UINT32 ALIGN_NEXT_POW2(UINT32 v) +{ + UINT32 v2 = 1; + while (v > (v2 <<= 1)) { } + v = v2; + return v; +} + +// ------------------------------------------------------------------------------------------ +// Aligns WASAPI buffer to 128 byte packet boundary. HD Audio will fail to play if buffer +// is misaligned. This problem was solved in Windows 7 were AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED +// is thrown although we must align for Vista anyway. +static UINT32 AlignFramesPerBuffer(UINT32 nFrames, UINT32 nSamplesPerSec, UINT32 nBlockAlign, + ALIGN_FUNC pAlignFunc) +{ +#define HDA_PACKET_SIZE (128) + + long frame_bytes = nFrames * nBlockAlign; + long packets; + + // align to packet size + frame_bytes = pAlignFunc(frame_bytes, HDA_PACKET_SIZE); // use ALIGN_FWD if bigger but safer period is more desired + + // atlest 1 frame must be available + if (frame_bytes < HDA_PACKET_SIZE) + frame_bytes = HDA_PACKET_SIZE; + + nFrames = frame_bytes / nBlockAlign; + packets = frame_bytes / HDA_PACKET_SIZE; + + frame_bytes = packets * HDA_PACKET_SIZE; + nFrames = frame_bytes / nBlockAlign; + + return nFrames; + +#undef HDA_PACKET_SIZE +} + +// ------------------------------------------------------------------------------------------ +static UINT32 GetFramesSleepTime(UINT32 nFrames, UINT32 nSamplesPerSec) +{ + REFERENCE_TIME nDuration; + if (nSamplesPerSec == 0) + return 0; +#define REFTIMES_PER_SEC 10000000 +#define REFTIMES_PER_MILLISEC 10000 + // Calculate the actual duration of the allocated buffer. + nDuration = (REFERENCE_TIME)((double)REFTIMES_PER_SEC * nFrames / nSamplesPerSec); + return (UINT32)(nDuration/REFTIMES_PER_MILLISEC/2); +} + +// ------------------------------------------------------------------------------------------ +static UINT32 GetFramesSleepTimeMicroseconds(UINT32 nFrames, UINT32 nSamplesPerSec) +{ + REFERENCE_TIME nDuration; + if (nSamplesPerSec == 0) + return 0; +#define REFTIMES_PER_SEC 10000000 +#define REFTIMES_PER_MILLISEC 10000 + // Calculate the actual duration of the allocated buffer. + nDuration = (REFERENCE_TIME)((double)REFTIMES_PER_SEC * nFrames / nSamplesPerSec); + return (UINT32)(nDuration/10/2); +} + +// ------------------------------------------------------------------------------------------ +static BOOL SetupAVRT() +{ + hDInputDLL = LoadLibraryA("avrt.dll"); + if (hDInputDLL == NULL) + return FALSE; + + _GetProc(pAvRtCreateThreadOrderingGroup, FAvRtCreateThreadOrderingGroup, "AvRtCreateThreadOrderingGroup"); + _GetProc(pAvRtDeleteThreadOrderingGroup, FAvRtDeleteThreadOrderingGroup, "AvRtDeleteThreadOrderingGroup"); + _GetProc(pAvRtWaitOnThreadOrderingGroup, FAvRtWaitOnThreadOrderingGroup, "AvRtWaitOnThreadOrderingGroup"); + _GetProc(pAvSetMmThreadCharacteristics, FAvSetMmThreadCharacteristics, "AvSetMmThreadCharacteristicsA"); + _GetProc(pAvRevertMmThreadCharacteristics,FAvRevertMmThreadCharacteristics,"AvRevertMmThreadCharacteristics"); + _GetProc(pAvSetMmThreadPriority, FAvSetMmThreadPriority, "AvSetMmThreadPriority"); + + return pAvRtCreateThreadOrderingGroup && + pAvRtDeleteThreadOrderingGroup && + pAvRtWaitOnThreadOrderingGroup && + pAvSetMmThreadCharacteristics && + pAvRevertMmThreadCharacteristics && + pAvSetMmThreadPriority; +} + +// ------------------------------------------------------------------------------------------ +static void CloseAVRT() +{ + if (hDInputDLL != NULL) + FreeLibrary(hDInputDLL); + hDInputDLL = NULL; +} + +// ------------------------------------------------------------------------------------------ +static BOOL IsWow64() +{ + // http://msdn.microsoft.com/en-us/library/ms684139(VS.85).aspx + + typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); + LPFN_ISWOW64PROCESS fnIsWow64Process; + + BOOL bIsWow64 = FALSE; + + // IsWow64Process is not available on all supported versions of Windows. + // Use GetModuleHandle to get a handle to the DLL that contains the function + // and GetProcAddress to get a pointer to the function if available. + + fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress( + GetModuleHandle(TEXT("kernel32")), TEXT("IsWow64Process")); + + if (fnIsWow64Process == NULL) + return FALSE; + + if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64)) + return FALSE; + + return bIsWow64; +} + +// ------------------------------------------------------------------------------------------ +typedef enum EWindowsVersion +{ + WINDOWS_UNKNOWN = 0, + WINDOWS_VISTA_SERVER2008 = (1 << 0), + WINDOWS_7_SERVER2008R2 = (1 << 1), + WINDOWS_FUTURE = (1 << 2) +} +EWindowsVersion; +// Defines Windows 7/Windows Server 2008 R2 and up (future versions) +#define WINDOWS_7_SERVER2008R2_AND_UP (WINDOWS_7_SERVER2008R2|WINDOWS_FUTURE) +// The function is limited to Vista/7 mostly as we need just to find out Vista/WOW64 combination +// in order to use WASAPI WOW64 workarounds. +static UINT32 GetWindowsVersion() +{ + static UINT32 version = WINDOWS_UNKNOWN; + + if (version == WINDOWS_UNKNOWN) + { + DWORD dwVersion = 0; + DWORD dwMajorVersion = 0; + DWORD dwMinorVersion = 0; + DWORD dwBuild = 0; + + typedef DWORD (WINAPI *LPFN_GETVERSION)(VOID); + LPFN_GETVERSION fnGetVersion; + + fnGetVersion = (LPFN_GETVERSION) GetProcAddress(GetModuleHandle(TEXT("kernel32")), TEXT("GetVersion")); + if (fnGetVersion == NULL) + return WINDOWS_UNKNOWN; + + dwVersion = fnGetVersion(); + + // Get the Windows version + dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); + dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); + + // Get the build number + if (dwVersion < 0x80000000) + dwBuild = (DWORD)(HIWORD(dwVersion)); + + switch (dwMajorVersion) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + break; // skip lower + case 6: + switch (dwMinorVersion) + { + case 0: + version |= WINDOWS_VISTA_SERVER2008; + break; + case 1: + version |= WINDOWS_7_SERVER2008R2; + break; + default: + version |= WINDOWS_FUTURE; + } + break; + default: + version |= WINDOWS_FUTURE; + } + } + + return version; +} + +// ------------------------------------------------------------------------------------------ +static BOOL UseWOW64Workaround() +{ + // note: WOW64 bug is common to Windows Vista x64, thus we fall back to safe Poll-driven + // method. Windows 7 x64 seems has WOW64 bug fixed. + + return (IsWow64() && (GetWindowsVersion() & WINDOWS_VISTA_SERVER2008)); +} + +// ------------------------------------------------------------------------------------------ +typedef enum EMixerDir { MIX_DIR__1TO2, MIX_DIR__2TO1, MIX_DIR__2TO1_L } EMixerDir; + +// ------------------------------------------------------------------------------------------ +#define _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(TYPE)\ + TYPE * __restrict to = __to;\ + TYPE * __restrict from = __from;\ + TYPE * __restrict end = from + count;\ + while (from != end)\ + {\ + *to ++ = *from;\ + *to ++ = *from;\ + ++ from;\ + } + +// ------------------------------------------------------------------------------------------ +#define _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_FLT32(TYPE)\ + TYPE * __restrict to = (TYPE *)__to;\ + TYPE * __restrict from = (TYPE *)__from;\ + TYPE * __restrict end = to + count;\ + while (to != end)\ + {\ + *to ++ = (TYPE)((float)(from[0] + from[1]) * 0.5f);\ + from += 2;\ + } + +// ------------------------------------------------------------------------------------------ +#define _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_INT32(TYPE)\ + TYPE * __restrict to = (TYPE *)__to;\ + TYPE * __restrict from = (TYPE *)__from;\ + TYPE * __restrict end = to + count;\ + while (to != end)\ + {\ + *to ++ = (TYPE)(((INT32)from[0] + (INT32)from[1]) >> 1);\ + from += 2;\ + } + +// ------------------------------------------------------------------------------------------ +#define _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_INT64(TYPE)\ + TYPE * __restrict to = (TYPE *)__to;\ + TYPE * __restrict from = (TYPE *)__from;\ + TYPE * __restrict end = to + count;\ + while (to != end)\ + {\ + *to ++ = (TYPE)(((INT64)from[0] + (INT64)from[1]) >> 1);\ + from += 2;\ + } + +// ------------------------------------------------------------------------------------------ +#define _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_L(TYPE)\ + TYPE * __restrict to = (TYPE *)__to;\ + TYPE * __restrict from = (TYPE *)__from;\ + TYPE * __restrict end = to + count;\ + while (to != end)\ + {\ + *to ++ = from[0];\ + from += 2;\ + } + +// ------------------------------------------------------------------------------------------ +static void _MixMonoToStereo_1TO2_8(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(BYTE); } +static void _MixMonoToStereo_1TO2_16(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(short); } +static void _MixMonoToStereo_1TO2_24(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(int); /* !!! int24 data is contained in 32-bit containers*/ } +static void _MixMonoToStereo_1TO2_32(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(int); } +static void _MixMonoToStereo_1TO2_32f(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_1_TO_2(float); } + +// ------------------------------------------------------------------------------------------ +static void _MixMonoToStereo_2TO1_8(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_INT32(BYTE); } +static void _MixMonoToStereo_2TO1_16(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_INT32(short); } +static void _MixMonoToStereo_2TO1_24(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_INT32(int); /* !!! int24 data is contained in 32-bit containers*/ } +static void _MixMonoToStereo_2TO1_32(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_INT64(int); } +static void _MixMonoToStereo_2TO1_32f(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_FLT32(float); } + +// ------------------------------------------------------------------------------------------ +static void _MixMonoToStereo_2TO1_8_L(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_L(BYTE); } +static void _MixMonoToStereo_2TO1_16_L(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_L(short); } +static void _MixMonoToStereo_2TO1_24_L(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_L(int); /* !!! int24 data is contained in 32-bit containers*/ } +static void _MixMonoToStereo_2TO1_32_L(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_L(int); } +static void _MixMonoToStereo_2TO1_32f_L(void *__to, void *__from, UINT32 count) { _WASAPI_MONO_TO_STEREO_MIXER_2_TO_1_L(float); } + +// ------------------------------------------------------------------------------------------ +static MixMonoToStereoF _GetMonoToStereoMixer(PaSampleFormat format, EMixerDir dir) +{ + switch (dir) + { + case MIX_DIR__1TO2: + switch (format & ~paNonInterleaved) + { + case paUInt8: return _MixMonoToStereo_1TO2_8; + case paInt16: return _MixMonoToStereo_1TO2_16; + case paInt24: return _MixMonoToStereo_1TO2_24; + case paInt32: return _MixMonoToStereo_1TO2_32; + case paFloat32: return _MixMonoToStereo_1TO2_32f; + } + break; + + case MIX_DIR__2TO1: + switch (format & ~paNonInterleaved) + { + case paUInt8: return _MixMonoToStereo_2TO1_8; + case paInt16: return _MixMonoToStereo_2TO1_16; + case paInt24: return _MixMonoToStereo_2TO1_24; + case paInt32: return _MixMonoToStereo_2TO1_32; + case paFloat32: return _MixMonoToStereo_2TO1_32f; + } + break; + + case MIX_DIR__2TO1_L: + switch (format & ~paNonInterleaved) + { + case paUInt8: return _MixMonoToStereo_2TO1_8_L; + case paInt16: return _MixMonoToStereo_2TO1_16_L; + case paInt24: return _MixMonoToStereo_2TO1_24_L; + case paInt32: return _MixMonoToStereo_2TO1_32_L; + case paFloat32: return _MixMonoToStereo_2TO1_32f_L; + } + break; + } + + return NULL; +} + +// ------------------------------------------------------------------------------------------ +PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + PaWasapiHostApiRepresentation *paWasapi; + PaDeviceInfo *deviceInfoArray; + HRESULT hr = S_OK; + IMMDeviceCollection* pEndPoints = NULL; + UINT i; + + if (!SetupAVRT()) + { + PRINT(("WASAPI: No AVRT! (not VISTA?)")); + return paNoError; + } + + paWasapi = (PaWasapiHostApiRepresentation *)PaUtil_AllocateMemory( sizeof(PaWasapiHostApiRepresentation) ); + if (paWasapi == NULL) + { + result = paInsufficientMemory; + goto error; + } + + result = PaWinUtil_CoInitialize( paWASAPI, &paWasapi->comInitializationResult ); + if( result != paNoError ) + { + goto error; + } + + paWasapi->allocations = PaUtil_CreateAllocationGroup(); + if (paWasapi->allocations == NULL) + { + result = paInsufficientMemory; + goto error; + } + + *hostApi = &paWasapi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paWASAPI; + (*hostApi)->info.name = "Windows WASAPI"; + (*hostApi)->info.deviceCount = 0; + (*hostApi)->info.defaultInputDevice = paNoDevice; + (*hostApi)->info.defaultOutputDevice = paNoDevice; + + paWasapi->enumerator = NULL; + hr = CoCreateInstance(&pa_CLSID_IMMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER, + &pa_IID_IMMDeviceEnumerator, (void **)&paWasapi->enumerator); + + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + // getting default device ids in the eMultimedia "role" + { + { + IMMDevice *defaultRenderer = NULL; + hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(paWasapi->enumerator, eRender, eMultimedia, &defaultRenderer); + if (hr != S_OK) + { + if (hr != E_NOTFOUND) { + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + } + } + else + { + WCHAR *pszDeviceId = NULL; + hr = IMMDevice_GetId(defaultRenderer, &pszDeviceId); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + wcsncpy(paWasapi->defaultRenderer, pszDeviceId, MAX_STR_LEN-1); + CoTaskMemFree(pszDeviceId); + IMMDevice_Release(defaultRenderer); + } + } + + { + IMMDevice *defaultCapturer = NULL; + hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(paWasapi->enumerator, eCapture, eMultimedia, &defaultCapturer); + if (hr != S_OK) + { + if (hr != E_NOTFOUND) { + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + } + } + else + { + WCHAR *pszDeviceId = NULL; + hr = IMMDevice_GetId(defaultCapturer, &pszDeviceId); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + wcsncpy(paWasapi->defaultCapturer, pszDeviceId, MAX_STR_LEN-1); + CoTaskMemFree(pszDeviceId); + IMMDevice_Release(defaultCapturer); + } + } + } + + hr = IMMDeviceEnumerator_EnumAudioEndpoints(paWasapi->enumerator, eAll, DEVICE_STATE_ACTIVE, &pEndPoints); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + hr = IMMDeviceCollection_GetCount(pEndPoints, &paWasapi->deviceCount); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + paWasapi->devInfo = (PaWasapiDeviceInfo *)PaUtil_AllocateMemory(sizeof(PaWasapiDeviceInfo) * paWasapi->deviceCount); + for (i = 0; i < paWasapi->deviceCount; ++i) + memset(&paWasapi->devInfo[i], 0, sizeof(PaWasapiDeviceInfo)); + + if (paWasapi->deviceCount > 0) + { + (*hostApi)->deviceInfos = (PaDeviceInfo **)PaUtil_GroupAllocateMemory( + paWasapi->allocations, sizeof(PaDeviceInfo *) * paWasapi->deviceCount); + if ((*hostApi)->deviceInfos == NULL) + { + result = paInsufficientMemory; + goto error; + } + + /* allocate all device info structs in a contiguous block */ + deviceInfoArray = (PaDeviceInfo *)PaUtil_GroupAllocateMemory( + paWasapi->allocations, sizeof(PaDeviceInfo) * paWasapi->deviceCount); + if (deviceInfoArray == NULL) + { + result = paInsufficientMemory; + goto error; + } + + for (i = 0; i < paWasapi->deviceCount; ++i) + { + DWORD state = 0; + PaDeviceInfo *deviceInfo = &deviceInfoArray[i]; + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + + PA_DEBUG(("WASAPI: device idx: %02d\n", i)); + PA_DEBUG(("WASAPI: ---------------\n")); + + hr = IMMDeviceCollection_Item(pEndPoints, i, &paWasapi->devInfo[i].device); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + // getting ID + { + WCHAR *pszDeviceId = NULL; + hr = IMMDevice_GetId(paWasapi->devInfo[i].device, &pszDeviceId); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hr, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + wcsncpy(paWasapi->devInfo[i].szDeviceID, pszDeviceId, MAX_STR_LEN-1); + CoTaskMemFree(pszDeviceId); + + if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultCapturer) == 0) + {// we found the default input! + (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount; + } + if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultRenderer) == 0) + {// we found the default output! + (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount; + } + } + + hr = IMMDevice_GetState(paWasapi->devInfo[i].device, &paWasapi->devInfo[i].state); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + if (paWasapi->devInfo[i].state != DEVICE_STATE_ACTIVE) + { + PRINT(("WASAPI device: %d is not currently available (state:%d)\n",i,state)); + } + + { + IPropertyStore *pProperty; + hr = IMMDevice_OpenPropertyStore(paWasapi->devInfo[i].device, STGM_READ, &pProperty); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + // "Friendly" Name + { + char *deviceName; + PROPVARIANT value; + PropVariantInit(&value); + hr = IPropertyStore_GetValue(pProperty, &PKEY_Device_FriendlyName, &value); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + deviceInfo->name = NULL; + deviceName = (char *)PaUtil_GroupAllocateMemory(paWasapi->allocations, MAX_STR_LEN + 1); + if (deviceName == NULL) + { + result = paInsufficientMemory; + goto error; + } + if (value.pwszVal) + wcstombs(deviceName, value.pwszVal, MAX_STR_LEN-1); + else + _snprintf(deviceName, MAX_STR_LEN-1, "baddev%d", i); + deviceInfo->name = deviceName; + PropVariantClear(&value); + PA_DEBUG(("WASAPI:%d| name[%s]\n", i, deviceInfo->name)); + } + + // Default format + { + PROPVARIANT value; + PropVariantInit(&value); + hr = IPropertyStore_GetValue(pProperty, &PKEY_AudioEngine_DeviceFormat, &value); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + memcpy(&paWasapi->devInfo[i].DefaultFormat, value.blob.pBlobData, min(sizeof(paWasapi->devInfo[i].DefaultFormat), value.blob.cbSize)); + // cleanup + PropVariantClear(&value); + } + + // Formfactor + { + PROPVARIANT value; + PropVariantInit(&value); + hr = IPropertyStore_GetValue(pProperty, &PKEY_AudioEndpoint_FormFactor, &value); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + // set + #if defined(DUMMYUNIONNAME) && defined(NONAMELESSUNION) + // avoid breaking strict-aliasing rules in such line: (EndpointFormFactor)(*((UINT *)(((WORD *)&value.wReserved3)+1))); + UINT v; + memcpy(&v, (((WORD *)&value.wReserved3)+1), sizeof(v)); + paWasapi->devInfo[i].formFactor = (EndpointFormFactor)v; + #else + paWasapi->devInfo[i].formFactor = (EndpointFormFactor)value.uintVal; + #endif + PA_DEBUG(("WASAPI:%d| form-factor[%d]\n", i, paWasapi->devInfo[i].formFactor)); + // cleanup + PropVariantClear(&value); + } + + SAFE_RELEASE(pProperty); + } + + + // Endpoint data + { + IMMEndpoint *endpoint = NULL; + hr = IMMDevice_QueryInterface(paWasapi->devInfo[i].device, &pa_IID_IMMEndpoint, (void **)&endpoint); + if (SUCCEEDED(hr)) + { + hr = IMMEndpoint_GetDataFlow(endpoint, &paWasapi->devInfo[i].flow); + SAFE_RELEASE(endpoint); + } + } + + // Getting a temporary IAudioClient for more fields + // we make sure NOT to call Initialize yet! + { + IAudioClient *tmpClient = NULL; + + hr = IMMDevice_Activate(paWasapi->devInfo[i].device, &pa_IID_IAudioClient, + CLSCTX_INPROC_SERVER, NULL, (void **)&tmpClient); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + hr = IAudioClient_GetDevicePeriod(tmpClient, + &paWasapi->devInfo[i].DefaultDevicePeriod, + &paWasapi->devInfo[i].MinimumDevicePeriod); + // We need to set the result to a value otherwise we will return paNoError + // [IF_FAILED_JUMP(hResult, error);] + IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error); + + //hr = tmpClient->GetMixFormat(&paWasapi->devInfo[i].MixFormat); + + // Release client + SAFE_RELEASE(tmpClient); + + if (hr != S_OK) + { + //davidv: this happened with my hardware, previously for that same device in DirectSound: + //Digital Output (Realtek AC'97 Audio)'s GUID: {0x38f2cf50,0x7b4c,0x4740,0x86,0xeb,0xd4,0x38,0x66,0xd8,0xc8, 0x9f} + //so something must be _really_ wrong with this device, TODO handle this better. We kind of need GetMixFormat + LogHostError(hr); + // We need to set the result to a value otherwise we will return paNoError + result = paInternalError; + goto error; + } + } + + // we can now fill in portaudio device data + deviceInfo->maxInputChannels = 0; + deviceInfo->maxOutputChannels = 0; + deviceInfo->defaultSampleRate = paWasapi->devInfo[i].DefaultFormat.Format.nSamplesPerSec; + switch (paWasapi->devInfo[i].flow) + { + case eRender: { + deviceInfo->maxOutputChannels = paWasapi->devInfo[i].DefaultFormat.Format.nChannels; + deviceInfo->defaultHighOutputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod); + deviceInfo->defaultLowOutputLatency = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod); + PA_DEBUG(("WASAPI:%d| def.SR[%d] max.CH[%d] latency{hi[%f] lo[%f]}\n", i, (UINT32)deviceInfo->defaultSampleRate, + deviceInfo->maxOutputChannels, (float)deviceInfo->defaultHighOutputLatency, (float)deviceInfo->defaultLowOutputLatency)); + break;} + case eCapture: { + deviceInfo->maxInputChannels = paWasapi->devInfo[i].DefaultFormat.Format.nChannels; + deviceInfo->defaultHighInputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod); + deviceInfo->defaultLowInputLatency = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod); + PA_DEBUG(("WASAPI:%d| def.SR[%d] max.CH[%d] latency{hi[%f] lo[%f]}\n", i, (UINT32)deviceInfo->defaultSampleRate, + deviceInfo->maxInputChannels, (float)deviceInfo->defaultHighInputLatency, (float)deviceInfo->defaultLowInputLatency)); + break; } + default: + PRINT(("WASAPI:%d| bad Data Flow!\n", i)); + // We need to set the result to a value otherwise we will return paNoError + result = paInternalError; + //continue; // do not skip from list, allow to initialize + break; + } + + (*hostApi)->deviceInfos[i] = deviceInfo; + ++(*hostApi)->info.deviceCount; + } + } + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &paWasapi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &paWasapi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + + // findout if platform workaround is required + paWasapi->useWOW64Workaround = UseWOW64Workaround(); + + SAFE_RELEASE(pEndPoints); + + PRINT(("WASAPI: initialized ok\n")); + + return paNoError; + +error: + + PRINT(("WASAPI: failed %s error[%d|%s]\n", __FUNCTION__, result, Pa_GetErrorText(result))); + + SAFE_RELEASE(pEndPoints); + + Terminate((PaUtilHostApiRepresentation *)paWasapi); + + // Safety if error was not set so that we do not think initialize was a success + if (result == paNoError) { + result = paInternalError; + } + + return result; +} + +// ------------------------------------------------------------------------------------------ +static void Terminate( PaUtilHostApiRepresentation *hostApi ) +{ + UINT i; + PaWasapiHostApiRepresentation *paWasapi = (PaWasapiHostApiRepresentation*)hostApi; + if (paWasapi == NULL) + return; + + // Release IMMDeviceEnumerator + SAFE_RELEASE(paWasapi->enumerator); + + for (i = 0; i < paWasapi->deviceCount; ++i) + { + PaWasapiDeviceInfo *info = &paWasapi->devInfo[i]; + SAFE_RELEASE(info->device); + + //if (info->MixFormat) + // CoTaskMemFree(info->MixFormat); + } + PaUtil_FreeMemory(paWasapi->devInfo); + + if (paWasapi->allocations) + { + PaUtil_FreeAllAllocations(paWasapi->allocations); + PaUtil_DestroyAllocationGroup(paWasapi->allocations); + } + + PaWinUtil_CoUninitialize( paWASAPI, &paWasapi->comInitializationResult ); + + PaUtil_FreeMemory(paWasapi); + + // Close AVRT + CloseAVRT(); +} + +// ------------------------------------------------------------------------------------------ +static PaWasapiHostApiRepresentation *_GetHostApi(PaError *_error) +{ + PaError error; + + PaUtilHostApiRepresentation *pApi; + if ((error = PaUtil_GetHostApiRepresentation(&pApi, paWASAPI)) != paNoError) + { + if (_error != NULL) + (*_error) = error; + + return NULL; + } + return (PaWasapiHostApiRepresentation *)pApi; +} + +// ------------------------------------------------------------------------------------------ +int PaWasapi_GetDeviceDefaultFormat( void *pFormat, unsigned int nFormatSize, PaDeviceIndex nDevice ) +{ + PaError ret; + PaWasapiHostApiRepresentation *paWasapi; + UINT32 size; + PaDeviceIndex index; + + if (pFormat == NULL) + return paBadBufferPtr; + if (nFormatSize <= 0) + return paBufferTooSmall; + + // Get API + paWasapi = _GetHostApi(&ret); + if (paWasapi == NULL) + return ret; + + // Get device index + ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep); + if (ret != paNoError) + return ret; + + // Validate index + if ((UINT32)index >= paWasapi->deviceCount) + return paInvalidDevice; + + size = min(nFormatSize, (UINT32)sizeof(paWasapi->devInfo[ index ].DefaultFormat)); + memcpy(pFormat, &paWasapi->devInfo[ index ].DefaultFormat, size); + + return size; +} + +// ------------------------------------------------------------------------------------------ +int PaWasapi_GetDeviceRole( PaDeviceIndex nDevice ) +{ + PaError ret; + PaDeviceIndex index; + + // Get API + PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret); + if (paWasapi == NULL) + return paNotInitialized; + + // Get device index + ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep); + if (ret != paNoError) + return ret; + + // Validate index + if ((UINT32)index >= paWasapi->deviceCount) + return paInvalidDevice; + + return paWasapi->devInfo[ index ].formFactor; +} + +// ------------------------------------------------------------------------------------------ +PaError PaWasapi_GetFramesPerHostBuffer( PaStream *pStream, unsigned int *nInput, unsigned int *nOutput ) +{ + PaWasapiStream *stream = (PaWasapiStream *)pStream; + if (stream == NULL) + return paBadStreamPtr; + + if (nInput != NULL) + (*nInput) = stream->in.framesPerHostCallback; + + if (nOutput != NULL) + (*nOutput) = stream->out.framesPerHostCallback; + + return paNoError; +} + +// ------------------------------------------------------------------------------------------ +static void LogWAVEFORMATEXTENSIBLE(const WAVEFORMATEXTENSIBLE *in) +{ + const WAVEFORMATEX *old = (WAVEFORMATEX *)in; + switch (old->wFormatTag) + { + case WAVE_FORMAT_EXTENSIBLE: { + + PRINT(("wFormatTag =WAVE_FORMAT_EXTENSIBLE\n")); + + if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)) + { + PRINT(("SubFormat =KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\n")); + } + else + if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_PCM)) + { + PRINT(("SubFormat =KSDATAFORMAT_SUBTYPE_PCM\n")); + } + else + { + PRINT(("SubFormat =CUSTOM GUID{%d:%d:%d:%d%d%d%d%d%d%d%d}\n", + in->SubFormat.Data1, + in->SubFormat.Data2, + in->SubFormat.Data3, + (int)in->SubFormat.Data4[0], + (int)in->SubFormat.Data4[1], + (int)in->SubFormat.Data4[2], + (int)in->SubFormat.Data4[3], + (int)in->SubFormat.Data4[4], + (int)in->SubFormat.Data4[5], + (int)in->SubFormat.Data4[6], + (int)in->SubFormat.Data4[7])); + } + PRINT(("Samples.wValidBitsPerSample =%d\n", in->Samples.wValidBitsPerSample)); + PRINT(("dwChannelMask =0x%X\n",in->dwChannelMask)); + + break; } + + case WAVE_FORMAT_PCM: PRINT(("wFormatTag =WAVE_FORMAT_PCM\n")); break; + case WAVE_FORMAT_IEEE_FLOAT: PRINT(("wFormatTag =WAVE_FORMAT_IEEE_FLOAT\n")); break; + default: + PRINT(("wFormatTag =UNKNOWN(%d)\n",old->wFormatTag)); break; + } + + PRINT(("nChannels =%d\n",old->nChannels)); + PRINT(("nSamplesPerSec =%d\n",old->nSamplesPerSec)); + PRINT(("nAvgBytesPerSec=%d\n",old->nAvgBytesPerSec)); + PRINT(("nBlockAlign =%d\n",old->nBlockAlign)); + PRINT(("wBitsPerSample =%d\n",old->wBitsPerSample)); + PRINT(("cbSize =%d\n",old->cbSize)); +} + +// ------------------------------------------------------------------------------------------ +static PaSampleFormat WaveToPaFormat(const WAVEFORMATEXTENSIBLE *in) +{ + const WAVEFORMATEX *old = (WAVEFORMATEX *)in; + + switch (old->wFormatTag) + { + case WAVE_FORMAT_EXTENSIBLE: { + if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)) + { + if (in->Samples.wValidBitsPerSample == 32) + return paFloat32; + } + else + if (IsEqualGUID(&in->SubFormat, &pa_KSDATAFORMAT_SUBTYPE_PCM)) + { + switch (old->wBitsPerSample) + { + case 32: return paInt32; + case 24: return paInt24; + case 8: return paUInt8; + case 16: return paInt16; + } + } + break; } + + case WAVE_FORMAT_IEEE_FLOAT: + return paFloat32; + + case WAVE_FORMAT_PCM: { + switch (old->wBitsPerSample) + { + case 32: return paInt32; + case 24: return paInt24; + case 8: return paUInt8; + case 16: return paInt16; + } + break; } + } + + return paCustomFormat; +} + +// ------------------------------------------------------------------------------------------ +static PaError MakeWaveFormatFromParams(WAVEFORMATEXTENSIBLE *wavex, const PaStreamParameters *params, + double sampleRate) +{ + WORD bitsPerSample; + WAVEFORMATEX *old; + DWORD channelMask = 0; + PaWasapiStreamInfo *streamInfo = (PaWasapiStreamInfo *)params->hostApiSpecificStreamInfo; + + // Get user assigned channel mask + if ((streamInfo != NULL) && (streamInfo->flags & paWinWasapiUseChannelMask)) + channelMask = streamInfo->channelMask; + + // Convert PaSampleFormat to bits per sample + if ((bitsPerSample = PaSampleFormatToBitsPerSample(params->sampleFormat)) == 0) + return paSampleFormatNotSupported; + + memset(wavex, 0, sizeof(*wavex)); + + old = (WAVEFORMATEX *)wavex; + old->nChannels = (WORD)params->channelCount; + old->nSamplesPerSec = (DWORD)sampleRate; + if ((old->wBitsPerSample = bitsPerSample) > 16) + { + old->wBitsPerSample = 32; // 20 or 24 bits must go in 32 bit containers (ints) + } + old->nBlockAlign = (old->nChannels * (old->wBitsPerSample/8)); + old->nAvgBytesPerSec = (old->nSamplesPerSec * old->nBlockAlign); + + // WAVEFORMATEX + if ((params->channelCount <= 2) && ((bitsPerSample == 16) || (bitsPerSample == 8))) + { + old->cbSize = 0; + old->wFormatTag = WAVE_FORMAT_PCM; + } + // WAVEFORMATEXTENSIBLE + else + { + old->wFormatTag = WAVE_FORMAT_EXTENSIBLE; + old->cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX); + + if ((params->sampleFormat & ~paNonInterleaved) == paFloat32) + wavex->SubFormat = pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; + else + wavex->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM; + + wavex->Samples.wValidBitsPerSample = bitsPerSample; //no extra padding! + + // Set channel mask + if (channelMask != 0) + { + wavex->dwChannelMask = channelMask; + } + else + { + switch (params->channelCount) + { + case 1: wavex->dwChannelMask = KSAUDIO_SPEAKER_MONO; break; + case 2: wavex->dwChannelMask = KSAUDIO_SPEAKER_STEREO; break; + case 3: wavex->dwChannelMask = KSAUDIO_SPEAKER_STEREO|SPEAKER_LOW_FREQUENCY; break; + case 4: wavex->dwChannelMask = KSAUDIO_SPEAKER_QUAD; break; + case 5: wavex->dwChannelMask = KSAUDIO_SPEAKER_QUAD|SPEAKER_LOW_FREQUENCY; break; +#ifdef KSAUDIO_SPEAKER_5POINT1_SURROUND + case 6: wavex->dwChannelMask = KSAUDIO_SPEAKER_5POINT1_SURROUND; break; +#else + case 6: wavex->dwChannelMask = KSAUDIO_SPEAKER_5POINT1; break; +#endif +#ifdef KSAUDIO_SPEAKER_5POINT1_SURROUND + case 7: wavex->dwChannelMask = KSAUDIO_SPEAKER_5POINT1_SURROUND|SPEAKER_BACK_CENTER; break; +#else + case 7: wavex->dwChannelMask = KSAUDIO_SPEAKER_5POINT1|SPEAKER_BACK_CENTER; break; +#endif +#ifdef KSAUDIO_SPEAKER_7POINT1_SURROUND + case 8: wavex->dwChannelMask = KSAUDIO_SPEAKER_7POINT1_SURROUND; break; +#else + case 8: wavex->dwChannelMask = KSAUDIO_SPEAKER_7POINT1; break; +#endif + + default: wavex->dwChannelMask = 0; + } + } + } + return paNoError; +} + +// ------------------------------------------------------------------------------------------ +/*static void wasapiFillWFEXT( WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount) +{ + PA_DEBUG(( "sampleFormat = %lx\n" , sampleFormat )); + PA_DEBUG(( "sampleRate = %f\n" , sampleRate )); + PA_DEBUG(( "chanelCount = %d\n", channelCount )); + + pwfext->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; + pwfext->Format.nChannels = (WORD)channelCount; + pwfext->Format.nSamplesPerSec = (DWORD)sampleRate; + if(channelCount == 1) + pwfext->dwChannelMask = KSAUDIO_SPEAKER_DIRECTOUT; + else + pwfext->dwChannelMask = KSAUDIO_SPEAKER_STEREO; + if(sampleFormat == paFloat32) + { + pwfext->Format.nBlockAlign = (WORD)(channelCount * 4); + pwfext->Format.wBitsPerSample = 32; + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 32; + pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; + } + else if(sampleFormat == paInt32) + { + pwfext->Format.nBlockAlign = (WORD)(channelCount * 4); + pwfext->Format.wBitsPerSample = 32; + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 32; + pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM; + } + else if(sampleFormat == paInt24) + { + pwfext->Format.nBlockAlign = (WORD)(channelCount * 4); + pwfext->Format.wBitsPerSample = 32; // 24-bit in 32-bit int container + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 24; + pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM; + } + else if(sampleFormat == paInt16) + { + pwfext->Format.nBlockAlign = (WORD)(channelCount * 2); + pwfext->Format.wBitsPerSample = 16; + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 16; + pwfext->SubFormat = pa_KSDATAFORMAT_SUBTYPE_PCM; + } + pwfext->Format.nAvgBytesPerSec = pwfext->Format.nSamplesPerSec * pwfext->Format.nBlockAlign; +}*/ + +// ------------------------------------------------------------------------------------------ +static PaError GetClosestFormat(IAudioClient *myClient, double sampleRate, + const PaStreamParameters *_params, AUDCLNT_SHAREMODE shareMode, WAVEFORMATEXTENSIBLE *outWavex, + BOOL output) +{ + PaError answer = paInvalidSampleRate; + WAVEFORMATEX *sharedClosestMatch = NULL; + HRESULT hr = !S_OK; + PaStreamParameters params = (*_params); + + /* It was not noticed that 24-bit Input producing no output while device accepts this format. + To fix this issue let's ask for 32-bits and let PA converters convert host 32-bit data + to 24-bit for user-space. The bug concerns Vista, if Windows 7 supports 24-bits for Input + please report to PortAudio developers to exclude Windows 7. + */ + /*if ((params.sampleFormat == paInt24) && (output == FALSE)) + params.sampleFormat = paFloat32;*/ // <<< The silence was due to missing Int32_To_Int24_Dither implementation + + MakeWaveFormatFromParams(outWavex, ¶ms, sampleRate); + + hr = IAudioClient_IsFormatSupported(myClient, shareMode, &outWavex->Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL)); + if (hr == S_OK) + answer = paFormatIsSupported; + else + if (sharedClosestMatch) + { + WORD bitsPerSample; + WAVEFORMATEXTENSIBLE *ext = (WAVEFORMATEXTENSIBLE*)sharedClosestMatch; + + GUID subf_guid = GUID_NULL; + if (sharedClosestMatch->wFormatTag == WAVE_FORMAT_EXTENSIBLE) + { + memcpy(outWavex, sharedClosestMatch, sizeof(WAVEFORMATEXTENSIBLE)); + subf_guid = ext->SubFormat; + } + else + memcpy(outWavex, sharedClosestMatch, sizeof(WAVEFORMATEX)); + + CoTaskMemFree(sharedClosestMatch); + + // Make supported by default + answer = paFormatIsSupported; + + // Validate SampleRate + if ((DWORD)sampleRate != outWavex->Format.nSamplesPerSec) + return paInvalidSampleRate; + + // Validate Channel count + if ((WORD)params.channelCount != outWavex->Format.nChannels) + { + // If mono, then driver does not support 1 channel, we use internal workaround + // of tiny software mixing functionality, e.g. we provide to user buffer 1 channel + // but then mix into 2 for device buffer + if ((params.channelCount == 1) && (outWavex->Format.nChannels == 2)) + return paFormatIsSupported; + else + return paInvalidChannelCount; + } + + // Validate Sample format + if ((bitsPerSample = PaSampleFormatToBitsPerSample(params.sampleFormat)) == 0) + return paSampleFormatNotSupported; + + // Validate Sample format: bit size (WASAPI does not limit 'bit size') + //if (bitsPerSample != outWavex->Format.wBitsPerSample) + // return paSampleFormatNotSupported; + + // Validate Sample format: paFloat32 (WASAPI does not limit 'bit type') + //if ((params->sampleFormat == paFloat32) && (subf_guid != KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)) + // return paSampleFormatNotSupported; + + // Validate Sample format: paInt32 (WASAPI does not limit 'bit type') + //if ((params->sampleFormat == paInt32) && (subf_guid != KSDATAFORMAT_SUBTYPE_PCM)) + // return paSampleFormatNotSupported; + } + else + { + static const int BestToWorst[] = { paFloat32, paInt24, paInt16 }; + int i; + + // Try combination stereo and we will use built-in mono-stereo mixer then + if (params.channelCount == 1) + { + WAVEFORMATEXTENSIBLE stereo = { 0 }; + + PaStreamParameters stereo_params = params; + stereo_params.channelCount = 2; + + MakeWaveFormatFromParams(&stereo, &stereo_params, sampleRate); + + hr = IAudioClient_IsFormatSupported(myClient, shareMode, &stereo.Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL)); + if (hr == S_OK) + { + memcpy(outWavex, &stereo, sizeof(WAVEFORMATEXTENSIBLE)); + CoTaskMemFree(sharedClosestMatch); + return (answer = paFormatIsSupported); + } + + // Try selecting suitable sample type + for (i = 0; i < STATIC_ARRAY_SIZE(BestToWorst); ++i) + { + WAVEFORMATEXTENSIBLE sample = { 0 }; + + PaStreamParameters sample_params = stereo_params; + sample_params.sampleFormat = BestToWorst[i]; + + MakeWaveFormatFromParams(&sample, &sample_params, sampleRate); + + hr = IAudioClient_IsFormatSupported(myClient, shareMode, &sample.Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL)); + if (hr == S_OK) + { + memcpy(outWavex, &sample, sizeof(WAVEFORMATEXTENSIBLE)); + CoTaskMemFree(sharedClosestMatch); + return (answer = paFormatIsSupported); + } + } + } + + // Try selecting suitable sample type + for (i = 0; i < STATIC_ARRAY_SIZE(BestToWorst); ++i) + { + WAVEFORMATEXTENSIBLE spfmt = { 0 }; + + PaStreamParameters spfmt_params = params; + spfmt_params.sampleFormat = BestToWorst[i]; + + MakeWaveFormatFromParams(&spfmt, &spfmt_params, sampleRate); + + hr = IAudioClient_IsFormatSupported(myClient, shareMode, &spfmt.Format, (shareMode == AUDCLNT_SHAREMODE_SHARED ? &sharedClosestMatch : NULL)); + if (hr == S_OK) + { + memcpy(outWavex, &spfmt, sizeof(WAVEFORMATEXTENSIBLE)); + CoTaskMemFree(sharedClosestMatch); + answer = paFormatIsSupported; + break; + } + } + + // Nothing helped + LogHostError(hr); + } + + return answer; +} + +// ------------------------------------------------------------------------------------------ +static PaError IsStreamParamsValid(struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate) +{ + if (hostApi == NULL) + return paHostApiNotFound; + if ((UINT32)sampleRate == 0) + return paInvalidSampleRate; + + if (inputParameters != NULL) + { + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if (inputParameters->sampleFormat & paCustomFormat) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + if (inputParameters->device == paUseHostApiSpecificDeviceSpecification) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if (inputParameters->channelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if (inputParameters->hostApiSpecificStreamInfo) + { + PaWasapiStreamInfo *inputStreamInfo = (PaWasapiStreamInfo *)inputParameters->hostApiSpecificStreamInfo; + if ((inputStreamInfo->size != sizeof(PaWasapiStreamInfo)) || + (inputStreamInfo->version != 1) || + (inputStreamInfo->hostApiType != paWASAPI)) + { + return paIncompatibleHostApiSpecificStreamInfo; + } + } + + return paNoError; + } + + if (outputParameters != NULL) + { + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if (outputParameters->sampleFormat & paCustomFormat) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + if (outputParameters->device == paUseHostApiSpecificDeviceSpecification) + return paInvalidDevice; + + /* check that output device can support outputChannelCount */ + if (outputParameters->channelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if(outputParameters->hostApiSpecificStreamInfo) + { + PaWasapiStreamInfo *outputStreamInfo = (PaWasapiStreamInfo *)outputParameters->hostApiSpecificStreamInfo; + if ((outputStreamInfo->size != sizeof(PaWasapiStreamInfo)) || + (outputStreamInfo->version != 1) || + (outputStreamInfo->hostApiType != paWASAPI)) + { + return paIncompatibleHostApiSpecificStreamInfo; + } + } + + return paNoError; + } + + return (inputParameters || outputParameters ? paNoError : paInternalError); +} + +// ------------------------------------------------------------------------------------------ +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + IAudioClient *tmpClient = NULL; + PaWasapiHostApiRepresentation *paWasapi = (PaWasapiHostApiRepresentation*)hostApi; + PaWasapiStreamInfo *inputStreamInfo = NULL, *outputStreamInfo = NULL; + + // Validate PaStreamParameters + PaError error; + if ((error = IsStreamParamsValid(hostApi, inputParameters, outputParameters, sampleRate)) != paNoError) + return error; + + if (inputParameters != NULL) + { + WAVEFORMATEXTENSIBLE wavex; + HRESULT hr; + PaError answer; + AUDCLNT_SHAREMODE shareMode = AUDCLNT_SHAREMODE_SHARED; + inputStreamInfo = (PaWasapiStreamInfo *)inputParameters->hostApiSpecificStreamInfo; + + if (inputStreamInfo && (inputStreamInfo->flags & paWinWasapiExclusive)) + shareMode = AUDCLNT_SHAREMODE_EXCLUSIVE; + + hr = IMMDevice_Activate(paWasapi->devInfo[inputParameters->device].device, + &pa_IID_IAudioClient, CLSCTX_INPROC_SERVER, NULL, (void **)&tmpClient); + if (hr != S_OK) + { + LogHostError(hr); + return paInvalidDevice; + } + + answer = GetClosestFormat(tmpClient, sampleRate, inputParameters, shareMode, &wavex, FALSE); + SAFE_RELEASE(tmpClient); + + if (answer != paFormatIsSupported) + return answer; + } + + if (outputParameters != NULL) + { + HRESULT hr; + WAVEFORMATEXTENSIBLE wavex; + PaError answer; + AUDCLNT_SHAREMODE shareMode = AUDCLNT_SHAREMODE_SHARED; + outputStreamInfo = (PaWasapiStreamInfo *)outputParameters->hostApiSpecificStreamInfo; + + if (outputStreamInfo && (outputStreamInfo->flags & paWinWasapiExclusive)) + shareMode = AUDCLNT_SHAREMODE_EXCLUSIVE; + + hr = IMMDevice_Activate(paWasapi->devInfo[outputParameters->device].device, + &pa_IID_IAudioClient, CLSCTX_INPROC_SERVER, NULL, (void **)&tmpClient); + if (hr != S_OK) + { + LogHostError(hr); + return paInvalidDevice; + } + + answer = GetClosestFormat(tmpClient, sampleRate, outputParameters, shareMode, &wavex, TRUE); + SAFE_RELEASE(tmpClient); + + if (answer != paFormatIsSupported) + return answer; + } + + return paFormatIsSupported; +} + +// ------------------------------------------------------------------------------------------ +static PaUint32 PaUtil_GetFramesPerHostBuffer(PaUint32 userFramesPerBuffer, PaTime suggestedLatency, double sampleRate, PaUint32 TimerJitterMs) +{ + PaUint32 frames = userFramesPerBuffer + max( userFramesPerBuffer, (PaUint32)(suggestedLatency * sampleRate) ); + frames += (PaUint32)((sampleRate * 0.001) * TimerJitterMs); + return frames; +} + +// ------------------------------------------------------------------------------------------ +static void _RecalculateBuffersCount(PaWasapiSubStream *sub, UINT32 userFramesPerBuffer, UINT32 framesPerLatency, BOOL fullDuplex) +{ + // Count buffers (must be at least 1) + sub->buffers = (userFramesPerBuffer ? framesPerLatency / userFramesPerBuffer : 0); + if (sub->buffers == 0) + sub->buffers = 1; + + // Determine amount of buffers used: + // - Full-duplex mode will lead to period difference, thus only 1. + // - Input mode, only 1, as WASAPI allows extraction of only 1 packet. + // - For Shared mode we use double buffering. + if ((sub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) || fullDuplex) + { + // Exclusive mode does not allow >1 buffers be used for Event interface, e.g. GetBuffer + // call must acquire max buffer size and it all must be processed. + if (sub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK) + sub->userBufferAndHostMatch = 1; + + // Use paUtilBoundedHostBufferSize because exclusive mode will starve and produce + // bad quality of audio + sub->buffers = 1; + } +} + +// ------------------------------------------------------------------------------------------ +static void _CalculateAlignedPeriod(PaWasapiSubStream *pSub, UINT32 *nFramesPerLatency, + ALIGN_FUNC pAlignFunc) +{ + // Align frames to HD Audio packet size of 128 bytes for Exclusive mode only. + // Not aligning on Windows Vista will cause Event timeout, although Windows 7 will + // return AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED error to realign buffer. Aligning is necessary + // for Exclusive mode only! when audio data is feeded directly to hardware. + if (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) + { + (*nFramesPerLatency) = AlignFramesPerBuffer((*nFramesPerLatency), + pSub->wavex.Format.nSamplesPerSec, pSub->wavex.Format.nBlockAlign, pAlignFunc); + } + + // Calculate period + pSub->period = MakeHnsPeriod((*nFramesPerLatency), pSub->wavex.Format.nSamplesPerSec); +} + +// ------------------------------------------------------------------------------------------ +static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSub, BOOL output, PaError *pa_error) +{ + PaError error; + HRESULT hr; + + const PaWasapiDeviceInfo *pInfo = pSub->params.device_info; + const PaStreamParameters *params = &pSub->params.stream_params; + UINT32 framesPerLatency = pSub->params.frames_per_buffer; + double sampleRate = pSub->params.sample_rate; + BOOL blocking = pSub->params.blocking; + BOOL fullDuplex = pSub->params.full_duplex; + + const UINT32 userFramesPerBuffer = framesPerLatency; + IAudioClient *audioClient = NULL; + + // Validate parameters + if (!pSub || !pInfo || !params) + return E_POINTER; + if ((UINT32)sampleRate == 0) + return E_INVALIDARG; + + // Get the audio client + hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void **)&audioClient); + if (hr != S_OK) + { + LogHostError(hr); + goto done; + } + + // Get closest format + if ((error = GetClosestFormat(audioClient, sampleRate, params, pSub->shareMode, &pSub->wavex, output)) != paFormatIsSupported) + { + if (pa_error) + (*pa_error) = error; + + LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); + goto done; // fail, format not supported + } + + // Check for Mono <<>> Stereo workaround + if ((params->channelCount == 1) && (pSub->wavex.Format.nChannels == 2)) + { + /*if (blocking) + { + LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); + goto done; // fail, blocking mode not supported + }*/ + + // select mixer + pSub->monoMixer = _GetMonoToStereoMixer(WaveToPaFormat(&pSub->wavex), (pInfo->flow == eRender ? MIX_DIR__1TO2 : MIX_DIR__2TO1_L)); + if (pSub->monoMixer == NULL) + { + LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); + goto done; // fail, no mixer for format + } + } + +#if 0 + // Add suggestd latency + framesPerLatency += MakeFramesFromHns(SecondsTonano100(params->suggestedLatency), pSub->wavex.Format.nSamplesPerSec); +#else + // Calculate host buffer size + if ((pSub->shareMode != AUDCLNT_SHAREMODE_EXCLUSIVE) && + (!pSub->streamFlags || ((pSub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK) == 0))) + { + framesPerLatency = PaUtil_GetFramesPerHostBuffer(userFramesPerBuffer, + params->suggestedLatency, pSub->wavex.Format.nSamplesPerSec, 0/*, + (pSub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? 0 : 1)*/); + } + else + { + REFERENCE_TIME overall; + + // Work 1:1 with user buffer (only polling allows to use >1) + framesPerLatency += MakeFramesFromHns(SecondsTonano100(params->suggestedLatency), pSub->wavex.Format.nSamplesPerSec); + + // Use Polling if overall latency is > 5ms as it allows to use 100% CPU in a callback, + // or user specified latency parameter + overall = MakeHnsPeriod(framesPerLatency, pSub->wavex.Format.nSamplesPerSec); + if ((overall >= (106667*2)/*21.33ms*/) || ((INT32)(params->suggestedLatency*100000.0) != 0/*0.01 msec granularity*/)) + { + framesPerLatency = PaUtil_GetFramesPerHostBuffer(userFramesPerBuffer, + params->suggestedLatency, pSub->wavex.Format.nSamplesPerSec, 0/*, + (streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? 0 : 1)*/); + + // Use Polling interface + pSub->streamFlags &= ~AUDCLNT_STREAMFLAGS_EVENTCALLBACK; + PRINT(("WASAPI: CreateAudioClient: forcing POLL mode\n")); + } + } +#endif + + // For full-duplex output resize buffer to be the same as for input + if (output && fullDuplex) + framesPerLatency = pStream->in.framesPerHostCallback; + + // Avoid 0 frames + if (framesPerLatency == 0) + framesPerLatency = MakeFramesFromHns(pInfo->DefaultDevicePeriod, pSub->wavex.Format.nSamplesPerSec); + + //! Exclusive Input stream renders data in 6 packets, we must set then the size of + //! single packet, total buffer size, e.g. required latency will be PacketSize * 6 + if (!output && (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)) + { + framesPerLatency /= WASAPI_PACKETS_PER_INPUT_BUFFER; + } + + // Calculate aligned period + _CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD); + + /*! Enforce min/max period for device in Shared mode to avoid bad audio quality. + Avoid doing so for Exclusive mode as alignment will suffer. + */ + if (pSub->shareMode == AUDCLNT_SHAREMODE_SHARED) + { + if (pSub->period < pInfo->DefaultDevicePeriod) + { + pSub->period = pInfo->DefaultDevicePeriod; + // Recalculate aligned period + framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec); + _CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD); + } + } + else + { + if (pSub->period < pInfo->MinimumDevicePeriod) + { + pSub->period = pInfo->MinimumDevicePeriod; + // Recalculate aligned period + framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec); + _CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_FWD); + } + } + + /*! Windows 7 does not allow to set latency lower than minimal device period and will + return error: AUDCLNT_E_INVALID_DEVICE_PERIOD. Under Vista we enforce the same behavior + manually for unified behavior on all platforms. + */ + { + /*! AUDCLNT_E_BUFFER_SIZE_ERROR: Applies to Windows 7 and later. + Indicates that the buffer duration value requested by an exclusive-mode client is + out of range. The requested duration value for pull mode must not be greater than + 500 milliseconds; for push mode the duration value must not be greater than 2 seconds. + */ + if (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) + { + static const REFERENCE_TIME MAX_BUFFER_EVENT_DURATION = 500 * 10000; + static const REFERENCE_TIME MAX_BUFFER_POLL_DURATION = 2000 * 10000; + + if (pSub->streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK) // pull mode, max 500ms + { + if (pSub->period > MAX_BUFFER_EVENT_DURATION) + { + pSub->period = MAX_BUFFER_EVENT_DURATION; + // Recalculate aligned period + framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec); + _CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD); + } + } + else // push mode, max 2000ms + { + if (pSub->period > MAX_BUFFER_POLL_DURATION) + { + pSub->period = MAX_BUFFER_POLL_DURATION; + // Recalculate aligned period + framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec); + _CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD); + } + } + } + } + + // Open the stream and associate it with an audio session + hr = IAudioClient_Initialize(audioClient, + pSub->shareMode, + pSub->streamFlags, + pSub->period, + (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0), + &pSub->wavex.Format, + NULL); + + /*! WASAPI is tricky on large device buffer, sometimes 2000ms can be allocated sometimes + less. There is no known guaranteed level thus we make subsequent tries by decreasing + buffer by 100ms per try. + */ + while ((hr == E_OUTOFMEMORY) && (pSub->period > (100 * 10000))) + { + PRINT(("WASAPI: CreateAudioClient: decreasing buffer size to %d milliseconds\n", (pSub->period / 10000))); + + // Decrease by 100ms and try again + pSub->period -= (100 * 10000); + + // Recalculate aligned period + framesPerLatency = MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec); + _CalculateAlignedPeriod(pSub, &framesPerLatency, ALIGN_BWD); + + // Release the previous allocations + SAFE_RELEASE(audioClient); + + // Create a new audio client + hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient); + if (hr != S_OK) + { + LogHostError(hr); + goto done; + } + + // Open the stream and associate it with an audio session + hr = IAudioClient_Initialize(audioClient, + pSub->shareMode, + pSub->streamFlags, + pSub->period, + (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0), + &pSub->wavex.Format, + NULL); + } + + /*! WASAPI buffer size failure. Fallback to using default size. + */ + if (hr == AUDCLNT_E_BUFFER_SIZE_ERROR) + { + // Use default + pSub->period = pInfo->DefaultDevicePeriod; + + PRINT(("WASAPI: CreateAudioClient: correcting buffer size to device default\n")); + + // Release the previous allocations + SAFE_RELEASE(audioClient); + + // Create a new audio client + hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient); + if (hr != S_OK) + { + LogHostError(hr); + goto done; + } + + // Open the stream and associate it with an audio session + hr = IAudioClient_Initialize(audioClient, + pSub->shareMode, + pSub->streamFlags, + pSub->period, + (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0), + &pSub->wavex.Format, + NULL); + } + + /*! If the requested buffer size is not aligned. Can be triggered by Windows 7 and up. + Should not be be triggered ever as we do align buffers always with _CalculateAlignedPeriod. + */ + if (hr == AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED) + { + UINT32 frames = 0; + + // Get the next aligned frame + hr = IAudioClient_GetBufferSize(audioClient, &frames); + if (hr != S_OK) + { + LogHostError(hr); + goto done; + } + + PRINT(("WASAPI: CreateAudioClient: aligning buffer size to % frames\n", frames)); + + // Release the previous allocations + SAFE_RELEASE(audioClient); + + // Create a new audio client + hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient); + if (hr != S_OK) + { + LogHostError(hr); + goto done; + } + + // Get closest format + if ((error = GetClosestFormat(audioClient, sampleRate, params, pSub->shareMode, &pSub->wavex, output)) != paFormatIsSupported) + { + if (pa_error) + (*pa_error) = error; + + LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); // fail, format not supported + goto done; + } + + // Check for Mono >> Stereo workaround + if ((params->channelCount == 1) && (pSub->wavex.Format.nChannels == 2)) + { + /*if (blocking) + { + LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); + goto done; // fail, blocking mode not supported + }*/ + + // Select mixer + pSub->monoMixer = _GetMonoToStereoMixer(WaveToPaFormat(&pSub->wavex), (pInfo->flow == eRender ? MIX_DIR__1TO2 : MIX_DIR__2TO1_L)); + if (pSub->monoMixer == NULL) + { + LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); + goto done; // fail, no mixer for format + } + } + + // Calculate period + pSub->period = MakeHnsPeriod(frames, pSub->wavex.Format.nSamplesPerSec); + + // Open the stream and associate it with an audio session + hr = IAudioClient_Initialize(audioClient, + pSub->shareMode, + pSub->streamFlags, + pSub->period, + (pSub->shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? pSub->period : 0), + &pSub->wavex.Format, + NULL); + if (hr != S_OK) + { + LogHostError(hr); + goto done; + } + } + else + if (hr != S_OK) + { + LogHostError(hr); + goto done; + } + + // Set client + pSub->clientParent = audioClient; + IAudioClient_AddRef(pSub->clientParent); + + // Recalculate buffers count + _RecalculateBuffersCount(pSub, + userFramesPerBuffer, + MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec), + fullDuplex); + +done: + + // Clean up + SAFE_RELEASE(audioClient); + return hr; +} + +// ------------------------------------------------------------------------------------------ +static PaError ActivateAudioClientOutput(PaWasapiStream *stream) +{ + HRESULT hr; + PaError result; + + UINT32 maxBufferSize = 0; + PaTime buffer_latency = 0; + UINT32 framesPerBuffer = stream->out.params.frames_per_buffer; + + // Create Audio client + hr = CreateAudioClient(stream, &stream->out, TRUE, &result); + if (hr != S_OK) + { + LogPaError(result = paInvalidDevice); + goto error; + } + LogWAVEFORMATEXTENSIBLE(&stream->out.wavex); + + // Activate volume + stream->outVol = NULL; + /*hr = info->device->Activate( + __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, + (void**)&stream->outVol); + if (hr != S_OK) + return paInvalidDevice;*/ + + // Get max possible buffer size to check if it is not less than that we request + hr = IAudioClient_GetBufferSize(stream->out.clientParent, &maxBufferSize); + if (hr != S_OK) + { + LogHostError(hr); + LogPaError(result = paInvalidDevice); + goto error; + } + + // Correct buffer to max size if it maxed out result of GetBufferSize + stream->out.bufferSize = maxBufferSize; + + // Get interface latency (actually uneeded as we calculate latency from the size + // of maxBufferSize). + hr = IAudioClient_GetStreamLatency(stream->out.clientParent, &stream->out.deviceLatency); + if (hr != S_OK) + { + LogHostError(hr); + LogPaError(result = paInvalidDevice); + goto error; + } + //stream->out.latencySeconds = nano100ToSeconds(stream->out.deviceLatency); + + // Number of frames that are required at each period + stream->out.framesPerHostCallback = maxBufferSize; + + // Calculate frames per single buffer, if buffers > 1 then always framesPerBuffer + stream->out.framesPerBuffer = + (stream->out.userBufferAndHostMatch ? stream->out.framesPerHostCallback : framesPerBuffer); + + // Calculate buffer latency + buffer_latency = (PaTime)maxBufferSize / stream->out.wavex.Format.nSamplesPerSec; + + // Append buffer latency to interface latency in shared mode (see GetStreamLatency notes) + stream->out.latencySeconds = buffer_latency; + + PRINT(("WASAPI::OpenStream(output): framesPerUser[ %d ] framesPerHost[ %d ] latency[ %.02fms ] exclusive[ %s ] wow64_fix[ %s ] mode[ %s ]\n", (UINT32)framesPerBuffer, (UINT32)stream->out.framesPerHostCallback, (float)(stream->out.latencySeconds*1000.0f), (stream->out.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? "YES" : "NO"), (stream->out.params.wow64_workaround ? "YES" : "NO"), (stream->out.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? "EVENT" : "POLL"))); + + return paNoError; + +error: + + return result; +} + +// ------------------------------------------------------------------------------------------ +static PaError ActivateAudioClientInput(PaWasapiStream *stream) +{ + HRESULT hr; + PaError result; + + UINT32 maxBufferSize = 0; + PaTime buffer_latency = 0; + UINT32 framesPerBuffer = stream->in.params.frames_per_buffer; + + // Create Audio client + hr = CreateAudioClient(stream, &stream->in, FALSE, &result); + if (hr != S_OK) + { + LogPaError(result = paInvalidDevice); + goto error; + } + LogWAVEFORMATEXTENSIBLE(&stream->in.wavex); + + // Create volume mgr + stream->inVol = NULL; + /*hr = info->device->Activate( + __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, + (void**)&stream->inVol); + if (hr != S_OK) + return paInvalidDevice;*/ + + // Get max possible buffer size to check if it is not less than that we request + hr = IAudioClient_GetBufferSize(stream->in.clientParent, &maxBufferSize); + if (hr != S_OK) + { + LogHostError(hr); + LogPaError(result = paInvalidDevice); + goto error; + } + + // Correct buffer to max size if it maxed out result of GetBufferSize + stream->in.bufferSize = maxBufferSize; + + // Get interface latency (actually uneeded as we calculate latency from the size + // of maxBufferSize). + hr = IAudioClient_GetStreamLatency(stream->in.clientParent, &stream->in.deviceLatency); + if (hr != S_OK) + { + LogHostError(hr); + LogPaError(result = paInvalidDevice); + goto error; + } + //stream->in.latencySeconds = nano100ToSeconds(stream->in.deviceLatency); + + // Number of frames that are required at each period + stream->in.framesPerHostCallback = maxBufferSize; + + // Calculate frames per single buffer, if buffers > 1 then always framesPerBuffer + stream->in.framesPerBuffer = + (stream->in.userBufferAndHostMatch ? stream->in.framesPerHostCallback : framesPerBuffer); + + // Calculate buffer latency + buffer_latency = (PaTime)maxBufferSize / stream->in.wavex.Format.nSamplesPerSec; + + // Append buffer latency to interface latency in shared mode (see GetStreamLatency notes) + stream->in.latencySeconds = buffer_latency; + + PRINT(("WASAPI::OpenStream(input): framesPerUser[ %d ] framesPerHost[ %d ] latency[ %.02fms ] exclusive[ %s ] wow64_fix[ %s ] mode[ %s ]\n", (UINT32)framesPerBuffer, (UINT32)stream->in.framesPerHostCallback, (float)(stream->in.latencySeconds*1000.0f), (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? "YES" : "NO"), (stream->in.params.wow64_workaround ? "YES" : "NO"), (stream->in.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK ? "EVENT" : "POLL"))); + + return paNoError; + +error: + + return result; +} + +// ------------------------------------------------------------------------------------------ +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + HRESULT hr; + PaWasapiHostApiRepresentation *paWasapi = (PaWasapiHostApiRepresentation*)hostApi; + PaWasapiStream *stream = NULL; + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat; + PaWasapiStreamInfo *inputStreamInfo = NULL, *outputStreamInfo = NULL; + PaWasapiDeviceInfo *info = NULL; + ULONG framesPerHostCallback; + PaUtilHostBufferSizeMode bufferMode; + const BOOL fullDuplex = ((inputParameters != NULL) && (outputParameters != NULL)); + + // validate PaStreamParameters + if ((result = IsStreamParamsValid(hostApi, inputParameters, outputParameters, sampleRate)) != paNoError) + return LogPaError(result); + + // Validate platform specific flags + if ((streamFlags & paPlatformSpecificFlags) != 0) + { + LogPaError(result = paInvalidFlag); /* unexpected platform specific flag */ + goto error; + } + + // Allocate memory for PaWasapiStream + if ((stream = (PaWasapiStream *)PaUtil_AllocateMemory(sizeof(PaWasapiStream))) == NULL) + { + LogPaError(result = paInsufficientMemory); + goto error; + } + + // Default thread priority is Audio: for exclusive mode we will use Pro Audio. + stream->nThreadPriority = eThreadPriorityAudio; + + // Set default number of frames: paFramesPerBufferUnspecified + if (framesPerBuffer == paFramesPerBufferUnspecified) + { + UINT32 framesPerBufferIn = 0, framesPerBufferOut = 0; + if (inputParameters != NULL) + { + info = &paWasapi->devInfo[inputParameters->device]; + framesPerBufferIn = MakeFramesFromHns(info->DefaultDevicePeriod, (UINT32)sampleRate); + } + if (outputParameters != NULL) + { + info = &paWasapi->devInfo[outputParameters->device]; + framesPerBufferOut = MakeFramesFromHns(info->DefaultDevicePeriod, (UINT32)sampleRate); + } + // choosing maximum default size + framesPerBuffer = max(framesPerBufferIn, framesPerBufferOut); + } + if (framesPerBuffer == 0) + framesPerBuffer = ((UINT32)sampleRate / 100) * 2; + + // Try create device: Input + if (inputParameters != NULL) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + inputStreamInfo = (PaWasapiStreamInfo *)inputParameters->hostApiSpecificStreamInfo; + info = &paWasapi->devInfo[inputParameters->device]; + stream->in.flags = (inputStreamInfo ? inputStreamInfo->flags : 0); + + // Select Exclusive/Shared mode + stream->in.shareMode = AUDCLNT_SHAREMODE_SHARED; + if ((inputStreamInfo != NULL) && (inputStreamInfo->flags & paWinWasapiExclusive)) + { + // Boost thread priority + stream->nThreadPriority = eThreadPriorityProAudio; + // Make Exclusive + stream->in.shareMode = AUDCLNT_SHAREMODE_EXCLUSIVE; + } + + // If user provided explicit thread priority level, use it + if ((inputStreamInfo != NULL) && (inputStreamInfo->flags & paWinWasapiThreadPriority)) + { + if ((inputStreamInfo->threadPriority > eThreadPriorityNone) && + (inputStreamInfo->threadPriority <= eThreadPriorityWindowManager)) + stream->nThreadPriority = inputStreamInfo->threadPriority; + } + + // Choose processing mode + stream->in.streamFlags = (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? AUDCLNT_STREAMFLAGS_EVENTCALLBACK : 0); + if (paWasapi->useWOW64Workaround) + stream->in.streamFlags = 0; // polling interface + else + if (streamCallback == NULL) + stream->in.streamFlags = 0; // polling interface + else + if ((inputStreamInfo != NULL) && (inputStreamInfo->flags & paWinWasapiPolling)) + stream->in.streamFlags = 0; // polling interface + else + if (fullDuplex) + stream->in.streamFlags = 0; // polling interface is implemented for full-duplex mode also + + // Fill parameters for Audio Client creation + stream->in.params.device_info = info; + stream->in.params.stream_params = (*inputParameters); + if (inputStreamInfo != NULL) + { + stream->in.params.wasapi_params = (*inputStreamInfo); + stream->in.params.stream_params.hostApiSpecificStreamInfo = &stream->in.params.wasapi_params; + } + stream->in.params.frames_per_buffer = framesPerBuffer; + stream->in.params.sample_rate = sampleRate; + stream->in.params.blocking = (streamCallback == NULL); + stream->in.params.full_duplex = fullDuplex; + stream->in.params.wow64_workaround = paWasapi->useWOW64Workaround; + + // Create and activate audio client + hr = ActivateAudioClientInput(stream); + if (hr != S_OK) + { + LogPaError(result = paInvalidDevice); + goto error; + } + + // Get closest format + hostInputSampleFormat = PaUtil_SelectClosestAvailableFormat( WaveToPaFormat(&stream->in.wavex), inputSampleFormat ); + + // Set user-side custom host processor + if ((inputStreamInfo != NULL) && + (inputStreamInfo->flags & paWinWasapiRedirectHostProcessor)) + { + stream->hostProcessOverrideInput.processor = inputStreamInfo->hostProcessorInput; + stream->hostProcessOverrideInput.userData = userData; + } + + // Only get IAudioCaptureClient input once here instead of getting it at multiple places based on the use + hr = IAudioClient_GetService(stream->in.clientParent, &pa_IID_IAudioCaptureClient, (void **)&stream->captureClientParent); + if (hr != S_OK) + { + LogHostError(hr); + LogPaError(result = paUnanticipatedHostError); + goto error; + } + + // Create ring buffer for blocking mode (It is needed because we fetch Input packets, not frames, + // and thus we have to save partial packet if such remains unread) + if (stream->in.params.blocking == TRUE) + { + UINT32 bufferFrames = ALIGN_NEXT_POW2((stream->in.framesPerHostCallback / WASAPI_PACKETS_PER_INPUT_BUFFER) * 2); + UINT32 frameSize = stream->in.wavex.Format.nBlockAlign; + + // buffer + if ((stream->in.tailBuffer = PaUtil_AllocateMemory(sizeof(PaUtilRingBuffer))) == NULL) + { + LogPaError(result = paInsufficientMemory); + goto error; + } + memset(stream->in.tailBuffer, 0, sizeof(PaUtilRingBuffer)); + + // buffer memory region + stream->in.tailBufferMemory = PaUtil_AllocateMemory(frameSize * bufferFrames); + if (stream->in.tailBufferMemory == NULL) + { + LogPaError(result = paInsufficientMemory); + goto error; + } + + // initialize + if (PaUtil_InitializeRingBuffer(stream->in.tailBuffer, frameSize, bufferFrames, stream->in.tailBufferMemory) != 0) + { + LogPaError(result = paInternalError); + goto error; + } + } + } + else + { + inputChannelCount = 0; + inputSampleFormat = hostInputSampleFormat = paInt16; /* Surpress 'uninitialised var' warnings. */ + } + + // Try create device: Output + if (outputParameters != NULL) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + outputStreamInfo = (PaWasapiStreamInfo *)outputParameters->hostApiSpecificStreamInfo; + info = &paWasapi->devInfo[outputParameters->device]; + stream->out.flags = (outputStreamInfo ? outputStreamInfo->flags : 0); + + // Select Exclusive/Shared mode + stream->out.shareMode = AUDCLNT_SHAREMODE_SHARED; + if ((outputStreamInfo != NULL) && (outputStreamInfo->flags & paWinWasapiExclusive)) + { + // Boost thread priority + stream->nThreadPriority = eThreadPriorityProAudio; + // Make Exclusive + stream->out.shareMode = AUDCLNT_SHAREMODE_EXCLUSIVE; + } + + // If user provided explicit thread priority level, use it + if ((outputStreamInfo != NULL) && (outputStreamInfo->flags & paWinWasapiThreadPriority)) + { + if ((outputStreamInfo->threadPriority > eThreadPriorityNone) && + (outputStreamInfo->threadPriority <= eThreadPriorityWindowManager)) + stream->nThreadPriority = outputStreamInfo->threadPriority; + } + + // Choose processing mode + stream->out.streamFlags = (stream->out.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE ? AUDCLNT_STREAMFLAGS_EVENTCALLBACK : 0); + if (paWasapi->useWOW64Workaround) + stream->out.streamFlags = 0; // polling interface + else + if (streamCallback == NULL) + stream->out.streamFlags = 0; // polling interface + else + if ((outputStreamInfo != NULL) && (outputStreamInfo->flags & paWinWasapiPolling)) + stream->out.streamFlags = 0; // polling interface + else + if (fullDuplex) + stream->out.streamFlags = 0; // polling interface is implemented for full-duplex mode also + + // Fill parameters for Audio Client creation + stream->out.params.device_info = info; + stream->out.params.stream_params = (*outputParameters); + if (inputStreamInfo != NULL) + { + stream->out.params.wasapi_params = (*outputStreamInfo); + stream->out.params.stream_params.hostApiSpecificStreamInfo = &stream->out.params.wasapi_params; + } + stream->out.params.frames_per_buffer = framesPerBuffer; + stream->out.params.sample_rate = sampleRate; + stream->out.params.blocking = (streamCallback == NULL); + stream->out.params.full_duplex = fullDuplex; + stream->out.params.wow64_workaround = paWasapi->useWOW64Workaround; + + // Create and activate audio client + hr = ActivateAudioClientOutput(stream); + if (hr != S_OK) + { + LogPaError(result = paInvalidDevice); + goto error; + } + + // Get closest format + hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat( WaveToPaFormat(&stream->out.wavex), outputSampleFormat ); + + // Set user-side custom host processor + if ((outputStreamInfo != NULL) && + (outputStreamInfo->flags & paWinWasapiRedirectHostProcessor)) + { + stream->hostProcessOverrideOutput.processor = outputStreamInfo->hostProcessorOutput; + stream->hostProcessOverrideOutput.userData = userData; + } + + // Only get IAudioCaptureClient output once here instead of getting it at multiple places based on the use + hr = IAudioClient_GetService(stream->out.clientParent, &pa_IID_IAudioRenderClient, (void **)&stream->renderClientParent); + if (hr != S_OK) + { + LogHostError(hr); + LogPaError(result = paUnanticipatedHostError); + goto error; + } + } + else + { + outputChannelCount = 0; + outputSampleFormat = hostOutputSampleFormat = paInt16; /* Surpress 'uninitialized var' warnings. */ + } + + // log full-duplex + if (fullDuplex) + PRINT(("WASAPI::OpenStream: full-duplex mode\n")); + + // paWinWasapiPolling must be on/or not on both streams + if ((inputParameters != NULL) && (outputParameters != NULL)) + { + if ((inputStreamInfo != NULL) && (outputStreamInfo != NULL)) + { + if (((inputStreamInfo->flags & paWinWasapiPolling) && + !(outputStreamInfo->flags & paWinWasapiPolling)) + || + (!(inputStreamInfo->flags & paWinWasapiPolling) && + (outputStreamInfo->flags & paWinWasapiPolling))) + { + LogPaError(result = paInvalidFlag); + goto error; + } + } + } + + // Initialize stream representation + if (streamCallback) + { + stream->bBlocking = FALSE; + PaUtil_InitializeStreamRepresentation(&stream->streamRepresentation, + &paWasapi->callbackStreamInterface, + streamCallback, userData); + } + else + { + stream->bBlocking = TRUE; + PaUtil_InitializeStreamRepresentation(&stream->streamRepresentation, + &paWasapi->blockingStreamInterface, + streamCallback, userData); + } + + // Initialize CPU measurer + PaUtil_InitializeCpuLoadMeasurer(&stream->cpuLoadMeasurer, sampleRate); + + if (outputParameters && inputParameters) + { + // serious problem #1 - No, Not a problem, especially concerning Exclusive mode. + // Input device in exclusive mode somehow is getting large buffer always, thus we + // adjust Output latency to reflect it, thus period will differ but playback will be + // normal. + /*if (stream->in.period != stream->out.period) + { + PRINT(("WASAPI: OpenStream: period discrepancy\n")); + LogPaError(result = paBadIODeviceCombination); + goto error; + }*/ + + // serious problem #2 - No, Not a problem, as framesPerHostCallback take into account + // sample size while it is not a problem for PA full-duplex, we must care of + // preriod only! + /*if (stream->out.framesPerHostCallback != stream->in.framesPerHostCallback) + { + PRINT(("WASAPI: OpenStream: framesPerHostCallback discrepancy\n")); + goto error; + }*/ + } + + // Calculate frames per host for processor + framesPerHostCallback = (outputParameters ? stream->out.framesPerBuffer : stream->in.framesPerBuffer); + + // Choose correct mode of buffer processing: + // Exclusive/Shared non paWinWasapiPolling mode: paUtilFixedHostBufferSize - always fixed + // Exclusive/Shared paWinWasapiPolling mode: paUtilBoundedHostBufferSize - may vary for Exclusive or Full-duplex + bufferMode = paUtilFixedHostBufferSize; + if (inputParameters) // !!! WASAPI IAudioCaptureClient::GetBuffer extracts not number of frames but 1 packet, thus we always must adapt + bufferMode = paUtilBoundedHostBufferSize; + else + if (outputParameters) + { + if ((stream->out.buffers == 1) && + (!stream->out.streamFlags || ((stream->out.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK) == 0))) + bufferMode = paUtilBoundedHostBufferSize; + } + stream->bufferMode = bufferMode; + + // Initialize buffer processor + result = PaUtil_InitializeBufferProcessor( + &stream->bufferProcessor, + inputChannelCount, + inputSampleFormat, + hostInputSampleFormat, + outputChannelCount, + outputSampleFormat, + hostOutputSampleFormat, + sampleRate, + streamFlags, + framesPerBuffer, + framesPerHostCallback, + bufferMode, + streamCallback, + userData); + if (result != paNoError) + { + LogPaError(result); + goto error; + } + + // Set Input latency + stream->streamRepresentation.streamInfo.inputLatency = + ((double)PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor) / sampleRate) + + ((inputParameters)?stream->in.latencySeconds : 0); + + // Set Output latency + stream->streamRepresentation.streamInfo.outputLatency = + ((double)PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor) / sampleRate) + + ((outputParameters)?stream->out.latencySeconds : 0); + + // Set SR + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + (*s) = (PaStream *)stream; + return result; + +error: + + if (stream != NULL) + CloseStream(stream); + + return result; +} + +// ------------------------------------------------------------------------------------------ +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaWasapiStream *stream = (PaWasapiStream*)s; + + // abort active stream + if (IsStreamActive(s)) + { + result = AbortStream(s); + } + + SAFE_RELEASE(stream->captureClientParent); + SAFE_RELEASE(stream->renderClientParent); + SAFE_RELEASE(stream->out.clientParent); + SAFE_RELEASE(stream->in.clientParent); + SAFE_RELEASE(stream->inVol); + SAFE_RELEASE(stream->outVol); + + CloseHandle(stream->event[S_INPUT]); + CloseHandle(stream->event[S_OUTPUT]); + + _StreamCleanup(stream); + + PaWasapi_FreeMemory(stream->in.monoBuffer); + PaWasapi_FreeMemory(stream->out.monoBuffer); + + PaUtil_FreeMemory(stream->in.tailBuffer); + PaUtil_FreeMemory(stream->in.tailBufferMemory); + + PaUtil_FreeMemory(stream->out.tailBuffer); + PaUtil_FreeMemory(stream->out.tailBufferMemory); + + PaUtil_TerminateBufferProcessor(&stream->bufferProcessor); + PaUtil_TerminateStreamRepresentation(&stream->streamRepresentation); + PaUtil_FreeMemory(stream); + + return result; +} + +// ------------------------------------------------------------------------------------------ +HRESULT UnmarshalSubStreamComPointers(PaWasapiSubStream *substream) +{ + HRESULT hResult = S_OK; + HRESULT hFirstBadResult = S_OK; + substream->clientProc = NULL; + + // IAudioClient + hResult = CoGetInterfaceAndReleaseStream(substream->clientStream, &pa_IID_IAudioClient, (LPVOID*)&substream->clientProc); + substream->clientStream = NULL; + if (hResult != S_OK) + { + hFirstBadResult = (hFirstBadResult == S_OK) ? hResult : hFirstBadResult; + } + + return hFirstBadResult; +} + +// ------------------------------------------------------------------------------------------ +HRESULT UnmarshalStreamComPointers(PaWasapiStream *stream) +{ + HRESULT hResult = S_OK; + HRESULT hFirstBadResult = S_OK; + stream->captureClient = NULL; + stream->renderClient = NULL; + stream->in.clientProc = NULL; + stream->out.clientProc = NULL; + + if (NULL != stream->in.clientParent) + { + // SubStream pointers + hResult = UnmarshalSubStreamComPointers(&stream->in); + if (hResult != S_OK) + { + hFirstBadResult = (hFirstBadResult == S_OK) ? hResult : hFirstBadResult; + } + + // IAudioCaptureClient + hResult = CoGetInterfaceAndReleaseStream(stream->captureClientStream, &pa_IID_IAudioCaptureClient, (LPVOID*)&stream->captureClient); + stream->captureClientStream = NULL; + if (hResult != S_OK) + { + hFirstBadResult = (hFirstBadResult == S_OK) ? hResult : hFirstBadResult; + } + } + + if (NULL != stream->out.clientParent) + { + // SubStream pointers + hResult = UnmarshalSubStreamComPointers(&stream->out); + if (hResult != S_OK) + { + hFirstBadResult = (hFirstBadResult == S_OK) ? hResult : hFirstBadResult; + } + + // IAudioRenderClient + hResult = CoGetInterfaceAndReleaseStream(stream->renderClientStream, &pa_IID_IAudioRenderClient, (LPVOID*)&stream->renderClient); + stream->renderClientStream = NULL; + if (hResult != S_OK) + { + hFirstBadResult = (hFirstBadResult == S_OK) ? hResult : hFirstBadResult; + } + } + + return hFirstBadResult; +} + +// ----------------------------------------------------------------------------------------- +void ReleaseUnmarshaledSubComPointers(PaWasapiSubStream *substream) +{ + SAFE_RELEASE(substream->clientProc); +} + +// ----------------------------------------------------------------------------------------- +void ReleaseUnmarshaledComPointers(PaWasapiStream *stream) +{ + // Release AudioClient services first + SAFE_RELEASE(stream->captureClient); + SAFE_RELEASE(stream->renderClient); + + // Release AudioClients + ReleaseUnmarshaledSubComPointers(&stream->in); + ReleaseUnmarshaledSubComPointers(&stream->out); +} + +// ------------------------------------------------------------------------------------------ +HRESULT MarshalSubStreamComPointers(PaWasapiSubStream *substream) +{ + HRESULT hResult; + substream->clientStream = NULL; + + // IAudioClient + hResult = CoMarshalInterThreadInterfaceInStream(&pa_IID_IAudioClient, (LPUNKNOWN)substream->clientParent, &substream->clientStream); + if (hResult != S_OK) + goto marshal_sub_error; + + return hResult; + + // If marshaling error occurred, make sure to release everything. +marshal_sub_error: + + UnmarshalSubStreamComPointers(substream); + ReleaseUnmarshaledSubComPointers(substream); + return hResult; +} + +// ------------------------------------------------------------------------------------------ +HRESULT MarshalStreamComPointers(PaWasapiStream *stream) +{ + HRESULT hResult = S_OK; + stream->captureClientStream = NULL; + stream->in.clientStream = NULL; + stream->renderClientStream = NULL; + stream->out.clientStream = NULL; + + if (NULL != stream->in.clientParent) + { + // SubStream pointers + hResult = MarshalSubStreamComPointers(&stream->in); + if (hResult != S_OK) + goto marshal_error; + + // IAudioCaptureClient + hResult = CoMarshalInterThreadInterfaceInStream(&pa_IID_IAudioCaptureClient, (LPUNKNOWN)stream->captureClientParent, &stream->captureClientStream); + if (hResult != S_OK) + goto marshal_error; + } + + if (NULL != stream->out.clientParent) + { + // SubStream pointers + hResult = MarshalSubStreamComPointers(&stream->out); + if (hResult != S_OK) + goto marshal_error; + + // IAudioRenderClient + hResult = CoMarshalInterThreadInterfaceInStream(&pa_IID_IAudioRenderClient, (LPUNKNOWN)stream->renderClientParent, &stream->renderClientStream); + if (hResult != S_OK) + goto marshal_error; + } + + return hResult; + + // If marshaling error occurred, make sure to release everything. +marshal_error: + + UnmarshalStreamComPointers(stream); + ReleaseUnmarshaledComPointers(stream); + return hResult; +} + +// ------------------------------------------------------------------------------------------ +static PaError StartStream( PaStream *s ) +{ + HRESULT hr; + PaWasapiStream *stream = (PaWasapiStream*)s; + PaError result = paNoError; + + // check if stream is active already + if (IsStreamActive(s)) + return paStreamIsNotStopped; + + PaUtil_ResetBufferProcessor(&stream->bufferProcessor); + + // Cleanup handles (may be necessary if stream was stopped by itself due to error) + _StreamCleanup(stream); + + // Create close event + if ((stream->hCloseRequest = CreateEvent(NULL, TRUE, FALSE, NULL)) == NULL) + { + result = paInsufficientMemory; + goto start_error; + } + + // Create thread + if (!stream->bBlocking) + { + // Create thread events + stream->hThreadStart = CreateEvent(NULL, TRUE, FALSE, NULL); + stream->hThreadExit = CreateEvent(NULL, TRUE, FALSE, NULL); + if ((stream->hThreadStart == NULL) || (stream->hThreadExit == NULL)) + { + result = paInsufficientMemory; + goto start_error; + } + + // Marshal WASAPI interface pointers for safe use in thread created below. + if ((hr = MarshalStreamComPointers(stream)) != S_OK) + { + PRINT(("Failed marshaling stream COM pointers.")); + result = paUnanticipatedHostError; + goto nonblocking_start_error; + } + + if ((stream->in.clientParent && (stream->in.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK)) || + (stream->out.clientParent && (stream->out.streamFlags & AUDCLNT_STREAMFLAGS_EVENTCALLBACK))) + { + if ((stream->hThread = CREATE_THREAD(ProcThreadEvent)) == NULL) + { + PRINT(("Failed creating thread: ProcThreadEvent.")); + result = paUnanticipatedHostError; + goto nonblocking_start_error; + } + } + else + { + if ((stream->hThread = CREATE_THREAD(ProcThreadPoll)) == NULL) + { + PRINT(("Failed creating thread: ProcThreadPoll.")); + result = paUnanticipatedHostError; + goto nonblocking_start_error; + } + } + + // Wait for thread to start + if (WaitForSingleObject(stream->hThreadStart, 60*1000) == WAIT_TIMEOUT) + { + PRINT(("Failed starting thread: timeout.")); + result = paUnanticipatedHostError; + goto nonblocking_start_error; + } + } + else + { + // Create blocking operation events (non-signaled event means - blocking operation is pending) + if (stream->out.clientParent != NULL) + { + if ((stream->hBlockingOpStreamWR = CreateEvent(NULL, TRUE, TRUE, NULL)) == NULL) + { + result = paInsufficientMemory; + goto start_error; + } + } + if (stream->in.clientParent != NULL) + { + if ((stream->hBlockingOpStreamRD = CreateEvent(NULL, TRUE, TRUE, NULL)) == NULL) + { + result = paInsufficientMemory; + goto start_error; + } + } + + // Initialize event & start INPUT stream + if (stream->in.clientParent != NULL) + { + if ((hr = IAudioClient_Start(stream->in.clientParent)) != S_OK) + { + LogHostError(hr); + result = paUnanticipatedHostError; + goto start_error; + } + } + + // Initialize event & start OUTPUT stream + if (stream->out.clientParent != NULL) + { + // Start + if ((hr = IAudioClient_Start(stream->out.clientParent)) != S_OK) + { + LogHostError(hr); + result = paUnanticipatedHostError; + goto start_error; + } + } + + // Set parent to working pointers to use shared functions. + stream->captureClient = stream->captureClientParent; + stream->renderClient = stream->renderClientParent; + stream->in.clientProc = stream->in.clientParent; + stream->out.clientProc = stream->out.clientParent; + + // Signal: stream running. + stream->running = TRUE; + } + + return result; + +nonblocking_start_error: + + // Set hThreadExit event to prevent blocking during cleanup + SetEvent(stream->hThreadExit); + UnmarshalStreamComPointers(stream); + ReleaseUnmarshaledComPointers(stream); + +start_error: + + StopStream(s); + return result; +} + +// ------------------------------------------------------------------------------------------ +void _StreamFinish(PaWasapiStream *stream) +{ + // Issue command to thread to stop processing and wait for thread exit + if (!stream->bBlocking) + { + SignalObjectAndWait(stream->hCloseRequest, stream->hThreadExit, INFINITE, FALSE); + } + else + // Blocking mode does not own thread + { + // Signal close event and wait for each of 2 blocking operations to complete + if (stream->out.clientParent) + SignalObjectAndWait(stream->hCloseRequest, stream->hBlockingOpStreamWR, INFINITE, TRUE); + if (stream->out.clientParent) + SignalObjectAndWait(stream->hCloseRequest, stream->hBlockingOpStreamRD, INFINITE, TRUE); + + // Process stop + _StreamOnStop(stream); + } + + // Cleanup handles + _StreamCleanup(stream); + + stream->running = FALSE; +} + +// ------------------------------------------------------------------------------------------ +void _StreamCleanup(PaWasapiStream *stream) +{ + // Close thread handles to allow restart + SAFE_CLOSE(stream->hThread); + SAFE_CLOSE(stream->hThreadStart); + SAFE_CLOSE(stream->hThreadExit); + SAFE_CLOSE(stream->hCloseRequest); + SAFE_CLOSE(stream->hBlockingOpStreamRD); + SAFE_CLOSE(stream->hBlockingOpStreamWR); +} + +// ------------------------------------------------------------------------------------------ +static PaError StopStream( PaStream *s ) +{ + // Finish stream + _StreamFinish((PaWasapiStream *)s); + return paNoError; +} + +// ------------------------------------------------------------------------------------------ +static PaError AbortStream( PaStream *s ) +{ + // Finish stream + _StreamFinish((PaWasapiStream *)s); + return paNoError; +} + +// ------------------------------------------------------------------------------------------ +static PaError IsStreamStopped( PaStream *s ) +{ + return !((PaWasapiStream *)s)->running; +} + +// ------------------------------------------------------------------------------------------ +static PaError IsStreamActive( PaStream *s ) +{ + return ((PaWasapiStream *)s)->running; +} + +// ------------------------------------------------------------------------------------------ +static PaTime GetStreamTime( PaStream *s ) +{ + PaWasapiStream *stream = (PaWasapiStream*)s; + + /* suppress unused variable warnings */ + (void) stream; + + return PaUtil_GetTime(); +} + +// ------------------------------------------------------------------------------------------ +static double GetStreamCpuLoad( PaStream* s ) +{ + return PaUtil_GetCpuLoad(&((PaWasapiStream *)s)->cpuLoadMeasurer); +} + +// ------------------------------------------------------------------------------------------ +static PaError ReadStream( PaStream* s, void *_buffer, unsigned long frames ) +{ + PaWasapiStream *stream = (PaWasapiStream*)s; + + HRESULT hr = S_OK; + BYTE *user_buffer = (BYTE *)_buffer; + BYTE *wasapi_buffer = NULL; + DWORD flags = 0; + UINT32 i, available, sleep = 0; + unsigned long processed; + ThreadIdleScheduler sched; + + // validate + if (!stream->running) + return paStreamIsStopped; + if (stream->captureClient == NULL) + return paBadStreamPtr; + + // Notify blocking op has begun + ResetEvent(stream->hBlockingOpStreamRD); + + // Use thread scheduling for 500 microseconds (emulated) when wait time for frames is less than + // 1 milliseconds, emulation helps to normalize CPU consumption and avoids too busy waiting + ThreadIdleScheduler_Setup(&sched, 1, 250/* microseconds */); + + // Make a local copy of the user buffer pointer(s), this is necessary + // because PaUtil_CopyOutput() advances these pointers every time it is called + if (!stream->bufferProcessor.userInputIsInterleaved) + { + user_buffer = (BYTE *)alloca(sizeof(BYTE *) * stream->bufferProcessor.inputChannelCount); + if (user_buffer == NULL) + return paInsufficientMemory; + + for (i = 0; i < stream->bufferProcessor.inputChannelCount; ++i) + ((BYTE **)user_buffer)[i] = ((BYTE **)_buffer)[i]; + } + + // Findout if there are tail frames, flush them all before reading hardware + if ((available = PaUtil_GetRingBufferReadAvailable(stream->in.tailBuffer)) != 0) + { + ring_buffer_size_t buf1_size = 0, buf2_size = 0, read, desired; + void *buf1 = NULL, *buf2 = NULL; + + // Limit desired to amount of requested frames + desired = available; + if (desired > frames) + desired = frames; + + // Get pointers to read regions + read = PaUtil_GetRingBufferReadRegions(stream->in.tailBuffer, desired, &buf1, &buf1_size, &buf2, &buf2_size); + + if (buf1 != NULL) + { + // Register available frames to processor + PaUtil_SetInputFrameCount(&stream->bufferProcessor, buf1_size); + + // Register host buffer pointer to processor + PaUtil_SetInterleavedInputChannels(&stream->bufferProcessor, 0, buf1, stream->bufferProcessor.inputChannelCount); + + // Copy user data to host buffer (with conversion if applicable) + processed = PaUtil_CopyInput(&stream->bufferProcessor, (void **)&user_buffer, buf1_size); + frames -= processed; + } + + if (buf2 != NULL) + { + // Register available frames to processor + PaUtil_SetInputFrameCount(&stream->bufferProcessor, buf2_size); + + // Register host buffer pointer to processor + PaUtil_SetInterleavedInputChannels(&stream->bufferProcessor, 0, buf2, stream->bufferProcessor.inputChannelCount); + + // Copy user data to host buffer (with conversion if applicable) + processed = PaUtil_CopyInput(&stream->bufferProcessor, (void **)&user_buffer, buf2_size); + frames -= processed; + } + + // Advance + PaUtil_AdvanceRingBufferReadIndex(stream->in.tailBuffer, read); + } + + // Read hardware + while (frames != 0) + { + // Check if blocking call must be interrupted + if (WaitForSingleObject(stream->hCloseRequest, sleep) != WAIT_TIMEOUT) + break; + + // Get available frames (must be finding out available frames before call to IAudioCaptureClient_GetBuffer + // othervise audio glitches will occur inExclusive mode as it seems that WASAPI has some scheduling/ + // processing problems when such busy polling with IAudioCaptureClient_GetBuffer occurs) + if ((hr = _PollGetInputFramesAvailable(stream, &available)) != S_OK) + { + LogHostError(hr); + return paUnanticipatedHostError; + } + + // Wait for more frames to become available + if (available == 0) + { + // Exclusive mode may require latency of 1 millisecond, thus we shall sleep + // around 500 microseconds (emulated) to collect packets in time + if (stream->in.shareMode != AUDCLNT_SHAREMODE_EXCLUSIVE) + { + UINT32 sleep_frames = (frames < stream->in.framesPerHostCallback ? frames : stream->in.framesPerHostCallback); + + sleep = GetFramesSleepTime(sleep_frames, stream->in.wavex.Format.nSamplesPerSec); + sleep /= 4; // wait only for 1/4 of the buffer + + // WASAPI input provides packets, thus expiring packet will result in bad audio + // limit waiting time to 2 seconds (will always work for smallest buffer in Shared) + if (sleep > 2) + sleep = 2; + + // Avoid busy waiting, schedule next 1 millesecond wait + if (sleep == 0) + sleep = ThreadIdleScheduler_NextSleep(&sched); + } + else + { + if ((sleep = ThreadIdleScheduler_NextSleep(&sched)) != 0) + { + Sleep(sleep); + sleep = 0; + } + } + + continue; + } + + // Get the available data in the shared buffer. + if ((hr = IAudioCaptureClient_GetBuffer(stream->captureClient, &wasapi_buffer, &available, &flags, NULL, NULL)) != S_OK) + { + // Buffer size is too small, waiting + if (hr != AUDCLNT_S_BUFFER_EMPTY) + { + LogHostError(hr); + goto end; + } + + continue; + } + + // Register available frames to processor + PaUtil_SetInputFrameCount(&stream->bufferProcessor, available); + + // Register host buffer pointer to processor + PaUtil_SetInterleavedInputChannels(&stream->bufferProcessor, 0, wasapi_buffer, stream->bufferProcessor.inputChannelCount); + + // Copy user data to host buffer (with conversion if applicable) + processed = PaUtil_CopyInput(&stream->bufferProcessor, (void **)&user_buffer, frames); + frames -= processed; + + // Save tail into buffer + if ((frames == 0) && (available > processed)) + { + UINT32 bytes_processed = processed * stream->in.wavex.Format.nBlockAlign; + UINT32 frames_to_save = available - processed; + + PaUtil_WriteRingBuffer(stream->in.tailBuffer, wasapi_buffer + bytes_processed, frames_to_save); + } + + // Release host buffer + if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->captureClient, available)) != S_OK) + { + LogHostError(hr); + goto end; + } + } + +end: + + // Notify blocking op has ended + SetEvent(stream->hBlockingOpStreamRD); + + return (hr != S_OK ? paUnanticipatedHostError : paNoError); +} + +// ------------------------------------------------------------------------------------------ +static PaError WriteStream( PaStream* s, const void *_buffer, unsigned long frames ) +{ + PaWasapiStream *stream = (PaWasapiStream*)s; + + //UINT32 frames; + const BYTE *user_buffer = (const BYTE *)_buffer; + BYTE *wasapi_buffer; + HRESULT hr = S_OK; + UINT32 i, available, sleep = 0; + unsigned long processed; + ThreadIdleScheduler sched; + + // validate + if (!stream->running) + return paStreamIsStopped; + if (stream->renderClient == NULL) + return paBadStreamPtr; + + // Notify blocking op has begun + ResetEvent(stream->hBlockingOpStreamWR); + + // Use thread scheduling for 500 microseconds (emulated) when wait time for frames is less than + // 1 milliseconds, emulation helps to normalize CPU consumption and avoids too busy waiting + ThreadIdleScheduler_Setup(&sched, 1, 500/* microseconds */); + + // Make a local copy of the user buffer pointer(s), this is necessary + // because PaUtil_CopyOutput() advances these pointers every time it is called + if (!stream->bufferProcessor.userOutputIsInterleaved) + { + user_buffer = (const BYTE *)alloca(sizeof(const BYTE *) * stream->bufferProcessor.outputChannelCount); + if (user_buffer == NULL) + return paInsufficientMemory; + + for (i = 0; i < stream->bufferProcessor.outputChannelCount; ++i) + ((const BYTE **)user_buffer)[i] = ((const BYTE **)_buffer)[i]; + } + + // Blocking (potentially, untill 'frames' are consumed) loop + while (frames != 0) + { + // Check if blocking call must be interrupted + if (WaitForSingleObject(stream->hCloseRequest, sleep) != WAIT_TIMEOUT) + break; + + // Get frames available + if ((hr = _PollGetOutputFramesAvailable(stream, &available)) != S_OK) + { + LogHostError(hr); + goto end; + } + + // Wait for more frames to become available + if (available == 0) + { + UINT32 sleep_frames = (frames < stream->out.framesPerHostCallback ? frames : stream->out.framesPerHostCallback); + + sleep = GetFramesSleepTime(sleep_frames, stream->out.wavex.Format.nSamplesPerSec); + sleep /= 2; // wait only for half of the buffer + + // Avoid busy waiting, schedule next 1 millesecond wait + if (sleep == 0) + sleep = ThreadIdleScheduler_NextSleep(&sched); + + continue; + } + + // Keep in 'frmaes' range + if (available > frames) + available = frames; + + // Get pointer to host buffer + if ((hr = IAudioRenderClient_GetBuffer(stream->renderClient, available, &wasapi_buffer)) != S_OK) + { + // Buffer size is too big, waiting + if (hr == AUDCLNT_E_BUFFER_TOO_LARGE) + continue; + + LogHostError(hr); + goto end; + } + + // Keep waiting again (on Vista it was noticed that WASAPI could SOMETIMES return NULL pointer + // to buffer without returning AUDCLNT_E_BUFFER_TOO_LARGE instead) + if (wasapi_buffer == NULL) + continue; + + // Register available frames to processor + PaUtil_SetOutputFrameCount(&stream->bufferProcessor, available); + + // Register host buffer pointer to processor + PaUtil_SetInterleavedOutputChannels(&stream->bufferProcessor, 0, wasapi_buffer, stream->bufferProcessor.outputChannelCount); + + // Copy user data to host buffer (with conversion if applicable), this call will advance + // pointer 'user_buffer' to consumed portion of data + processed = PaUtil_CopyOutput(&stream->bufferProcessor, (const void **)&user_buffer, frames); + frames -= processed; + + // Release host buffer + if ((hr = IAudioRenderClient_ReleaseBuffer(stream->renderClient, available, 0)) != S_OK) + { + LogHostError(hr); + goto end; + } + } + +end: + + // Notify blocking op has ended + SetEvent(stream->hBlockingOpStreamWR); + + return (hr != S_OK ? paUnanticipatedHostError : paNoError); +} + +unsigned long PaUtil_GetOutputFrameCount( PaUtilBufferProcessor* bp ) +{ + return bp->hostOutputFrameCount[0]; +} + +// ------------------------------------------------------------------------------------------ +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaWasapiStream *stream = (PaWasapiStream*)s; + + HRESULT hr; + UINT32 available = 0; + + // validate + if (!stream->running) + return paStreamIsStopped; + if (stream->captureClient == NULL) + return paBadStreamPtr; + + // available in hardware buffer + if ((hr = _PollGetInputFramesAvailable(stream, &available)) != S_OK) + { + LogHostError(hr); + return paUnanticipatedHostError; + } + + // available in software tail buffer + available += PaUtil_GetRingBufferReadAvailable(stream->in.tailBuffer); + + return available; +} + +// ------------------------------------------------------------------------------------------ +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaWasapiStream *stream = (PaWasapiStream*)s; + HRESULT hr; + UINT32 available = 0; + + // validate + if (!stream->running) + return paStreamIsStopped; + if (stream->renderClient == NULL) + return paBadStreamPtr; + + if ((hr = _PollGetOutputFramesAvailable(stream, &available)) != S_OK) + { + LogHostError(hr); + return paUnanticipatedHostError; + } + + return (signed long)available; +} + + +// ------------------------------------------------------------------------------------------ +static void WaspiHostProcessingLoop( void *inputBuffer, long inputFrames, + void *outputBuffer, long outputFrames, + void *userData ) +{ + PaWasapiStream *stream = (PaWasapiStream*)userData; + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; + PaStreamCallbackFlags flags = 0; + int callbackResult; + unsigned long framesProcessed; + HRESULT hr; + UINT32 pending; + + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + /* + Pa_GetStreamTime: + - generate timing information + - handle buffer slips + */ + timeInfo.currentTime = PaUtil_GetTime(); + // Query input latency + if (stream->in.clientProc != NULL) + { + PaTime pending_time; + if ((hr = IAudioClient_GetCurrentPadding(stream->in.clientProc, &pending)) == S_OK) + pending_time = (PaTime)pending / (PaTime)stream->in.wavex.Format.nSamplesPerSec; + else + pending_time = (PaTime)stream->in.latencySeconds; + + timeInfo.inputBufferAdcTime = timeInfo.currentTime + pending_time; + } + // Query output current latency + if (stream->out.clientProc != NULL) + { + PaTime pending_time; + if ((hr = IAudioClient_GetCurrentPadding(stream->out.clientProc, &pending)) == S_OK) + pending_time = (PaTime)pending / (PaTime)stream->out.wavex.Format.nSamplesPerSec; + else + pending_time = (PaTime)stream->out.latencySeconds; + + timeInfo.outputBufferDacTime = timeInfo.currentTime + pending_time; + } + + /* + If you need to byte swap or shift inputBuffer to convert it into a + portaudio format, do it here. + */ + + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, flags ); + + /* + depending on whether the host buffers are interleaved, non-interleaved + or a mixture, you will want to call PaUtil_SetInterleaved*Channels(), + PaUtil_SetNonInterleaved*Channel() or PaUtil_Set*Channel() here. + */ + + if (stream->bufferProcessor.inputChannelCount > 0) + { + PaUtil_SetInputFrameCount( &stream->bufferProcessor, inputFrames ); + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, + 0, /* first channel of inputBuffer is channel 0 */ + inputBuffer, + 0 ); /* 0 - use inputChannelCount passed to init buffer processor */ + } + + if (stream->bufferProcessor.outputChannelCount > 0) + { + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, outputFrames); + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, + 0, /* first channel of outputBuffer is channel 0 */ + outputBuffer, + 0 ); /* 0 - use outputChannelCount passed to init buffer processor */ + } + + /* you must pass a valid value of callback result to PaUtil_EndBufferProcessing() + in general you would pass paContinue for normal operation, and + paComplete to drain the buffer processor's internal output buffer. + You can check whether the buffer processor's output buffer is empty + using PaUtil_IsBufferProcessorOuputEmpty( bufferProcessor ) + */ + callbackResult = paContinue; + framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult ); + + /* + If you need to byte swap or shift outputBuffer to convert it to + host format, do it here. + */ + + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + + if (callbackResult == paContinue) + { + /* nothing special to do */ + } + else + if (callbackResult == paAbort) + { + // stop stream + SetEvent(stream->hCloseRequest); + } + else + { + // stop stream + SetEvent(stream->hCloseRequest); + } +} + +// ------------------------------------------------------------------------------------------ +HANDLE MMCSS_activate(const char *name) +{ + DWORD task_idx = 0; + HANDLE hTask = pAvSetMmThreadCharacteristics(name, &task_idx); + if (hTask == NULL) + { + PRINT(("WASAPI: AvSetMmThreadCharacteristics failed!\n")); + } + + /*BOOL priority_ok = pAvSetMmThreadPriority(hTask, AVRT_PRIORITY_NORMAL); + if (priority_ok == FALSE) + { + PRINT(("WASAPI: AvSetMmThreadPriority failed!\n")); + }*/ + + // debug + { + int cur_priority = GetThreadPriority(GetCurrentThread()); + DWORD cur_priority_class = GetPriorityClass(GetCurrentProcess()); + PRINT(("WASAPI: thread[ priority-0x%X class-0x%X ]\n", cur_priority, cur_priority_class)); + } + + return hTask; +} + +// ------------------------------------------------------------------------------------------ +void MMCSS_deactivate(HANDLE hTask) +{ + if (!hTask) + return; + + if (pAvRevertMmThreadCharacteristics(hTask) == FALSE) + { + PRINT(("WASAPI: AvRevertMmThreadCharacteristics failed!\n")); + } +} + +// ------------------------------------------------------------------------------------------ +PaError PaWasapi_ThreadPriorityBoost(void **hTask, PaWasapiThreadPriority nPriorityClass) +{ + static const char *mmcs_name[] = + { + NULL, + "Audio", + "Capture", + "Distribution", + "Games", + "Playback", + "Pro Audio", + "Window Manager" + }; + HANDLE task; + + if (hTask == NULL) + return paUnanticipatedHostError; + + if ((UINT32)nPriorityClass >= STATIC_ARRAY_SIZE(mmcs_name)) + return paUnanticipatedHostError; + + task = MMCSS_activate(mmcs_name[nPriorityClass]); + if (task == NULL) + return paUnanticipatedHostError; + + (*hTask) = task; + return paNoError; +} + +// ------------------------------------------------------------------------------------------ +PaError PaWasapi_ThreadPriorityRevert(void *hTask) +{ + if (hTask == NULL) + return paUnanticipatedHostError; + + MMCSS_deactivate((HANDLE)hTask); + + return paNoError; +} + +// ------------------------------------------------------------------------------------------ +// Described at: +// http://msdn.microsoft.com/en-us/library/dd371387(v=VS.85).aspx + +PaError PaWasapi_GetJackCount(PaDeviceIndex nDevice, int *jcount) +{ + PaError ret; + HRESULT hr = S_OK; + PaDeviceIndex index; + IDeviceTopology *pDeviceTopology = NULL; + IConnector *pConnFrom = NULL; + IConnector *pConnTo = NULL; + IPart *pPart = NULL; + IKsJackDescription *pJackDesc = NULL; + UINT jackCount = 0; + + PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret); + if (paWasapi == NULL) + return paNotInitialized; + + // Get device index. + ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep); + if (ret != paNoError) + return ret; + + // Validate index. + if ((UINT32)index >= paWasapi->deviceCount) + return paInvalidDevice; + + // Get the endpoint device's IDeviceTopology interface. + hr = IMMDevice_Activate(paWasapi->devInfo[index].device, &pa_IID_IDeviceTopology, + CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology); + IF_FAILED_JUMP(hr, error); + + // The device topology for an endpoint device always contains just one connector (connector number 0). + hr = IDeviceTopology_GetConnector(pDeviceTopology, 0, &pConnFrom); + IF_FAILED_JUMP(hr, error); + + // Step across the connection to the jack on the adapter. + hr = IConnector_GetConnectedTo(pConnFrom, &pConnTo); + if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr) + { + // The adapter device is not currently active. + hr = E_NOINTERFACE; + } + IF_FAILED_JUMP(hr, error); + + // Get the connector's IPart interface. + hr = IConnector_QueryInterface(pConnTo, &pa_IID_IPart, (void**)&pPart); + IF_FAILED_JUMP(hr, error); + + // Activate the connector's IKsJackDescription interface. + hr = IPart_Activate(pPart, CLSCTX_INPROC_SERVER, &pa_IID_IKsJackDescription, (void**)&pJackDesc); + IF_FAILED_JUMP(hr, error); + + // Return jack count for this device. + hr = IKsJackDescription_GetJackCount(pJackDesc, &jackCount); + IF_FAILED_JUMP(hr, error); + + // Set. + (*jcount) = jackCount; + + // Ok. + ret = paNoError; + +error: + + SAFE_RELEASE(pDeviceTopology); + SAFE_RELEASE(pConnFrom); + SAFE_RELEASE(pConnTo); + SAFE_RELEASE(pPart); + SAFE_RELEASE(pJackDesc); + + LogHostError(hr); + return paNoError; +} + +// ------------------------------------------------------------------------------------------ +static PaWasapiJackConnectionType ConvertJackConnectionTypeWASAPIToPA(int connType) +{ + switch (connType) + { + case eConnTypeUnknown: return eJackConnTypeUnknown; +#ifdef _KS_ + case eConnType3Point5mm: return eJackConnType3Point5mm; +#else + case eConnTypeEighth: return eJackConnType3Point5mm; +#endif + case eConnTypeQuarter: return eJackConnTypeQuarter; + case eConnTypeAtapiInternal: return eJackConnTypeAtapiInternal; + case eConnTypeRCA: return eJackConnTypeRCA; + case eConnTypeOptical: return eJackConnTypeOptical; + case eConnTypeOtherDigital: return eJackConnTypeOtherDigital; + case eConnTypeOtherAnalog: return eJackConnTypeOtherAnalog; + case eConnTypeMultichannelAnalogDIN: return eJackConnTypeMultichannelAnalogDIN; + case eConnTypeXlrProfessional: return eJackConnTypeXlrProfessional; + case eConnTypeRJ11Modem: return eJackConnTypeRJ11Modem; + case eConnTypeCombination: return eJackConnTypeCombination; + } + return eJackConnTypeUnknown; +} + +// ------------------------------------------------------------------------------------------ +static PaWasapiJackGeoLocation ConvertJackGeoLocationWASAPIToPA(int geoLoc) +{ + switch (geoLoc) + { + case eGeoLocRear: return eJackGeoLocRear; + case eGeoLocFront: return eJackGeoLocFront; + case eGeoLocLeft: return eJackGeoLocLeft; + case eGeoLocRight: return eJackGeoLocRight; + case eGeoLocTop: return eJackGeoLocTop; + case eGeoLocBottom: return eJackGeoLocBottom; +#ifdef _KS_ + case eGeoLocRearPanel: return eJackGeoLocRearPanel; +#else + case eGeoLocRearOPanel: return eJackGeoLocRearPanel; +#endif + case eGeoLocRiser: return eJackGeoLocRiser; + case eGeoLocInsideMobileLid: return eJackGeoLocInsideMobileLid; + case eGeoLocDrivebay: return eJackGeoLocDrivebay; + case eGeoLocHDMI: return eJackGeoLocHDMI; + case eGeoLocOutsideMobileLid: return eJackGeoLocOutsideMobileLid; + case eGeoLocATAPI: return eJackGeoLocATAPI; + } + return eJackGeoLocUnk; +} + +// ------------------------------------------------------------------------------------------ +static PaWasapiJackGenLocation ConvertJackGenLocationWASAPIToPA(int genLoc) +{ + switch (genLoc) + { + case eGenLocPrimaryBox: return eJackGenLocPrimaryBox; + case eGenLocInternal: return eJackGenLocInternal; +#ifdef _KS_ + case eGenLocSeparate: return eJackGenLocSeparate; +#else + case eGenLocSeperate: return eJackGenLocSeparate; +#endif + case eGenLocOther: return eJackGenLocOther; + } + return eJackGenLocPrimaryBox; +} + +// ------------------------------------------------------------------------------------------ +static PaWasapiJackPortConnection ConvertJackPortConnectionWASAPIToPA(int portConn) +{ + switch (portConn) + { + case ePortConnJack: return eJackPortConnJack; + case ePortConnIntegratedDevice: return eJackPortConnIntegratedDevice; + case ePortConnBothIntegratedAndJack:return eJackPortConnBothIntegratedAndJack; + case ePortConnUnknown: return eJackPortConnUnknown; + } + return eJackPortConnJack; +} + +// ------------------------------------------------------------------------------------------ +// Described at: +// http://msdn.microsoft.com/en-us/library/dd371387(v=VS.85).aspx + +PaError PaWasapi_GetJackDescription(PaDeviceIndex nDevice, int jindex, PaWasapiJackDescription *pJackDescription) +{ + PaError ret; + HRESULT hr = S_OK; + PaDeviceIndex index; + IDeviceTopology *pDeviceTopology = NULL; + IConnector *pConnFrom = NULL; + IConnector *pConnTo = NULL; + IPart *pPart = NULL; + IKsJackDescription *pJackDesc = NULL; + KSJACK_DESCRIPTION jack = { 0 }; + + PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret); + if (paWasapi == NULL) + return paNotInitialized; + + // Get device index. + ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, nDevice, &paWasapi->inheritedHostApiRep); + if (ret != paNoError) + return ret; + + // Validate index. + if ((UINT32)index >= paWasapi->deviceCount) + return paInvalidDevice; + + // Get the endpoint device's IDeviceTopology interface. + hr = IMMDevice_Activate(paWasapi->devInfo[index].device, &pa_IID_IDeviceTopology, + CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology); + IF_FAILED_JUMP(hr, error); + + // The device topology for an endpoint device always contains just one connector (connector number 0). + hr = IDeviceTopology_GetConnector(pDeviceTopology, 0, &pConnFrom); + IF_FAILED_JUMP(hr, error); + + // Step across the connection to the jack on the adapter. + hr = IConnector_GetConnectedTo(pConnFrom, &pConnTo); + if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr) + { + // The adapter device is not currently active. + hr = E_NOINTERFACE; + } + IF_FAILED_JUMP(hr, error); + + // Get the connector's IPart interface. + hr = IConnector_QueryInterface(pConnTo, &pa_IID_IPart, (void**)&pPart); + IF_FAILED_JUMP(hr, error); + + // Activate the connector's IKsJackDescription interface. + hr = IPart_Activate(pPart, CLSCTX_INPROC_SERVER, &pa_IID_IKsJackDescription, (void**)&pJackDesc); + IF_FAILED_JUMP(hr, error); + + // Test to return jack description struct for index 0. + hr = IKsJackDescription_GetJackDescription(pJackDesc, jindex, &jack); + IF_FAILED_JUMP(hr, error); + + // Convert WASAPI values to PA format. + pJackDescription->channelMapping = jack.ChannelMapping; + pJackDescription->color = jack.Color; + pJackDescription->connectionType = ConvertJackConnectionTypeWASAPIToPA(jack.ConnectionType); + pJackDescription->genLocation = ConvertJackGenLocationWASAPIToPA(jack.GenLocation); + pJackDescription->geoLocation = ConvertJackGeoLocationWASAPIToPA(jack.GeoLocation); + pJackDescription->isConnected = jack.IsConnected; + pJackDescription->portConnection = ConvertJackPortConnectionWASAPIToPA(jack.PortConnection); + + // Ok. + ret = paNoError; + +error: + + SAFE_RELEASE(pDeviceTopology); + SAFE_RELEASE(pConnFrom); + SAFE_RELEASE(pConnTo); + SAFE_RELEASE(pPart); + SAFE_RELEASE(pJackDesc); + + LogHostError(hr); + return ret; +} + +// ------------------------------------------------------------------------------------------ +HRESULT _PollGetOutputFramesAvailable(PaWasapiStream *stream, UINT32 *available) +{ + HRESULT hr; + UINT32 frames = stream->out.framesPerHostCallback, + padding = 0; + + (*available) = 0; + + // get read position + if ((hr = IAudioClient_GetCurrentPadding(stream->out.clientProc, &padding)) != S_OK) + return LogHostError(hr); + + // get available + frames -= padding; + + // set + (*available) = frames; + return hr; +} + +// ------------------------------------------------------------------------------------------ +HRESULT _PollGetInputFramesAvailable(PaWasapiStream *stream, UINT32 *available) +{ + HRESULT hr; + + (*available) = 0; + + // GetCurrentPadding() has opposite meaning to Output stream + if ((hr = IAudioClient_GetCurrentPadding(stream->in.clientProc, available)) != S_OK) + return LogHostError(hr); + + return hr; +} + +// ------------------------------------------------------------------------------------------ +HRESULT ProcessOutputBuffer(PaWasapiStream *stream, PaWasapiHostProcessor *processor, UINT32 frames) +{ + HRESULT hr; + BYTE *data = NULL; + + // Get buffer + if ((hr = IAudioRenderClient_GetBuffer(stream->renderClient, frames, &data)) != S_OK) + { + if (stream->out.shareMode == AUDCLNT_SHAREMODE_SHARED) + { + // Using GetCurrentPadding to overcome AUDCLNT_E_BUFFER_TOO_LARGE in + // shared mode results in no sound in Event-driven mode (MSDN does not + // document this, or is it WASAPI bug?), thus we better + // try to acquire buffer next time when GetBuffer allows to do so. +#if 0 + // Get Read position + UINT32 padding = 0; + hr = IAudioClient_GetCurrentPadding(stream->out.clientProc, &padding); + if (hr != S_OK) + return LogHostError(hr); + + // Get frames to write + frames -= padding; + if (frames == 0) + return S_OK; + + if ((hr = IAudioRenderClient_GetBuffer(stream->renderClient, frames, &data)) != S_OK) + return LogHostError(hr); +#else + if (hr == AUDCLNT_E_BUFFER_TOO_LARGE) + return S_OK; // be silent in shared mode, try again next time +#endif + } + else + return LogHostError(hr); + } + + // Process data + if (stream->out.monoMixer != NULL) + { + // expand buffer + UINT32 mono_frames_size = frames * (stream->out.wavex.Format.wBitsPerSample / 8); + if (mono_frames_size > stream->out.monoBufferSize) + stream->out.monoBuffer = PaWasapi_ReallocateMemory(stream->out.monoBuffer, (stream->out.monoBufferSize = mono_frames_size)); + + // process + processor[S_OUTPUT].processor(NULL, 0, (BYTE *)stream->out.monoBuffer, frames, processor[S_OUTPUT].userData); + + // mix 1 to 2 channels + stream->out.monoMixer(data, stream->out.monoBuffer, frames); + } + else + { + processor[S_OUTPUT].processor(NULL, 0, data, frames, processor[S_OUTPUT].userData); + } + + // Release buffer + if ((hr = IAudioRenderClient_ReleaseBuffer(stream->renderClient, frames, 0)) != S_OK) + LogHostError(hr); + + return hr; +} + +// ------------------------------------------------------------------------------------------ +HRESULT ProcessInputBuffer(PaWasapiStream *stream, PaWasapiHostProcessor *processor) +{ + HRESULT hr = S_OK; + UINT32 frames; + BYTE *data = NULL; + DWORD flags = 0; + + for (;;) + { + // Check if blocking call must be interrupted + if (WaitForSingleObject(stream->hCloseRequest, 0) != WAIT_TIMEOUT) + break; + + // Findout if any frames available + frames = 0; + if ((hr = _PollGetInputFramesAvailable(stream, &frames)) != S_OK) + return hr; + + // Empty/consumed buffer + if (frames == 0) + break; + + // Get the available data in the shared buffer. + if ((hr = IAudioCaptureClient_GetBuffer(stream->captureClient, &data, &frames, &flags, NULL, NULL)) != S_OK) + { + if (hr == AUDCLNT_S_BUFFER_EMPTY) + { + hr = S_OK; + break; // Empty/consumed buffer + } + + return LogHostError(hr); + break; + } + + // Detect silence + // if (flags & AUDCLNT_BUFFERFLAGS_SILENT) + // data = NULL; + + // Process data + if (stream->in.monoMixer != NULL) + { + // expand buffer + UINT32 mono_frames_size = frames * (stream->in.wavex.Format.wBitsPerSample / 8); + if (mono_frames_size > stream->in.monoBufferSize) + stream->in.monoBuffer = PaWasapi_ReallocateMemory(stream->in.monoBuffer, (stream->in.monoBufferSize = mono_frames_size)); + + // mix 1 to 2 channels + stream->in.monoMixer(stream->in.monoBuffer, data, frames); + + // process + processor[S_INPUT].processor((BYTE *)stream->in.monoBuffer, frames, NULL, 0, processor[S_INPUT].userData); + } + else + { + processor[S_INPUT].processor(data, frames, NULL, 0, processor[S_INPUT].userData); + } + + // Release buffer + if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->captureClient, frames)) != S_OK) + return LogHostError(hr); + + //break; + } + + return hr; +} + +// ------------------------------------------------------------------------------------------ +void _StreamOnStop(PaWasapiStream *stream) +{ + // Stop INPUT/OUTPUT clients + if (!stream->bBlocking) + { + if (stream->in.clientProc != NULL) + IAudioClient_Stop(stream->in.clientProc); + if (stream->out.clientProc != NULL) + IAudioClient_Stop(stream->out.clientProc); + } + else + { + if (stream->in.clientParent != NULL) + IAudioClient_Stop(stream->in.clientParent); + if (stream->out.clientParent != NULL) + IAudioClient_Stop(stream->out.clientParent); + } + + // Restore thread priority + if (stream->hAvTask != NULL) + { + PaWasapi_ThreadPriorityRevert(stream->hAvTask); + stream->hAvTask = NULL; + } + + // Notify + if (stream->streamRepresentation.streamFinishedCallback != NULL) + stream->streamRepresentation.streamFinishedCallback(stream->streamRepresentation.userData); +} + +// ------------------------------------------------------------------------------------------ +PA_THREAD_FUNC ProcThreadEvent(void *param) +{ + PaWasapiHostProcessor processor[S_COUNT]; + HRESULT hr; + DWORD dwResult; + PaWasapiStream *stream = (PaWasapiStream *)param; + PaWasapiHostProcessor defaultProcessor; + BOOL set_event[S_COUNT] = { FALSE, FALSE }; + BOOL bWaitAllEvents = FALSE; + BOOL bThreadComInitialized = FALSE; + + /* + If COM is already initialized CoInitialize will either return + FALSE, or RPC_E_CHANGED_MODE if it was initialized in a different + threading mode. In either case we shouldn't consider it an error + but we need to be careful to not call CoUninitialize() if + RPC_E_CHANGED_MODE was returned. + */ + hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + if (FAILED(hr) && (hr != RPC_E_CHANGED_MODE)) + { + PRINT(("WASAPI: failed ProcThreadEvent CoInitialize")); + return paUnanticipatedHostError; + } + if (hr != RPC_E_CHANGED_MODE) + bThreadComInitialized = TRUE; + + // Unmarshal stream pointers for safe COM operation + hr = UnmarshalStreamComPointers(stream); + if (hr != S_OK) { + PRINT(("Error unmarshaling stream COM pointers. HRESULT: %i\n", hr)); + goto thread_end; + } + + // Waiting on all events in case of Full-Duplex/Exclusive mode. + if ((stream->in.clientProc != NULL) && (stream->out.clientProc != NULL)) + { + bWaitAllEvents = (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) && + (stream->out.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE); + } + + // Setup data processors + defaultProcessor.processor = WaspiHostProcessingLoop; + defaultProcessor.userData = stream; + processor[S_INPUT] = (stream->hostProcessOverrideInput.processor != NULL ? stream->hostProcessOverrideInput : defaultProcessor); + processor[S_OUTPUT] = (stream->hostProcessOverrideOutput.processor != NULL ? stream->hostProcessOverrideOutput : defaultProcessor); + + // Boost thread priority + PaWasapi_ThreadPriorityBoost((void **)&stream->hAvTask, stream->nThreadPriority); + + // Create events + if (stream->event[S_OUTPUT] == NULL) + { + stream->event[S_OUTPUT] = CreateEvent(NULL, FALSE, FALSE, NULL); + set_event[S_OUTPUT] = TRUE; + } + if (stream->event[S_INPUT] == NULL) + { + stream->event[S_INPUT] = CreateEvent(NULL, FALSE, FALSE, NULL); + set_event[S_INPUT] = TRUE; + } + if ((stream->event[S_OUTPUT] == NULL) || (stream->event[S_INPUT] == NULL)) + { + PRINT(("WASAPI Thread: failed creating Input/Output event handle\n")); + goto thread_error; + } + + // Initialize event & start INPUT stream + if (stream->in.clientProc) + { + // Create & set handle + if (set_event[S_INPUT]) + { + if ((hr = IAudioClient_SetEventHandle(stream->in.clientProc, stream->event[S_INPUT])) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + } + + // Start + if ((hr = IAudioClient_Start(stream->in.clientProc)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + } + + // Initialize event & start OUTPUT stream + if (stream->out.clientProc) + { + // Create & set handle + if (set_event[S_OUTPUT]) + { + if ((hr = IAudioClient_SetEventHandle(stream->out.clientProc, stream->event[S_OUTPUT])) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + } + + // Preload buffer before start + if ((hr = ProcessOutputBuffer(stream, processor, stream->out.framesPerBuffer)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + + // Start + if ((hr = IAudioClient_Start(stream->out.clientProc)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + + } + + // Signal: stream running + stream->running = TRUE; + + // Notify: thread started + SetEvent(stream->hThreadStart); + + // Processing Loop + for (;;) + { + // 10 sec timeout (on timeout stream will auto-stop when processed by WAIT_TIMEOUT case) + dwResult = WaitForMultipleObjects(S_COUNT, stream->event, bWaitAllEvents, 10*1000); + + // Check for close event (after wait for buffers to avoid any calls to user + // callback when hCloseRequest was set) + if (WaitForSingleObject(stream->hCloseRequest, 0) != WAIT_TIMEOUT) + break; + + // Process S_INPUT/S_OUTPUT + switch (dwResult) + { + case WAIT_TIMEOUT: { + PRINT(("WASAPI Thread: WAIT_TIMEOUT - probably bad audio driver or Vista x64 bug: use paWinWasapiPolling instead\n")); + goto thread_end; + break; } + + // Input stream + case WAIT_OBJECT_0 + S_INPUT: { + + if (stream->captureClient == NULL) + break; + + if ((hr = ProcessInputBuffer(stream, processor)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + + break; } + + // Output stream + case WAIT_OBJECT_0 + S_OUTPUT: { + + if (stream->renderClient == NULL) + break; + + if ((hr = ProcessOutputBuffer(stream, processor, stream->out.framesPerBuffer)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + + break; } + } + } + +thread_end: + + // Process stop + _StreamOnStop(stream); + + // Release unmarshaled COM pointers + ReleaseUnmarshaledComPointers(stream); + + // Cleanup COM for this thread + if (bThreadComInitialized == TRUE) + CoUninitialize(); + + // Notify: not running + stream->running = FALSE; + + // Notify: thread exited + SetEvent(stream->hThreadExit); + + return 0; + +thread_error: + + // Prevent deadlocking in Pa_StreamStart + SetEvent(stream->hThreadStart); + + // Exit + goto thread_end; +} + +// ------------------------------------------------------------------------------------------ +PA_THREAD_FUNC ProcThreadPoll(void *param) +{ + PaWasapiHostProcessor processor[S_COUNT]; + HRESULT hr; + PaWasapiStream *stream = (PaWasapiStream *)param; + PaWasapiHostProcessor defaultProcessor; + INT32 i; + ThreadIdleScheduler scheduler; + + // Calculate the actual duration of the allocated buffer. + DWORD sleep_ms = 0; + DWORD sleep_ms_in; + DWORD sleep_ms_out; + + BOOL bThreadComInitialized = FALSE; + + /* + If COM is already initialized CoInitialize will either return + FALSE, or RPC_E_CHANGED_MODE if it was initialized in a different + threading mode. In either case we shouldn't consider it an error + but we need to be careful to not call CoUninitialize() if + RPC_E_CHANGED_MODE was returned. + */ + hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + if (FAILED(hr) && (hr != RPC_E_CHANGED_MODE)) + { + PRINT(("WASAPI: failed ProcThreadPoll CoInitialize")); + return paUnanticipatedHostError; + } + if (hr != RPC_E_CHANGED_MODE) + bThreadComInitialized = TRUE; + + // Unmarshal stream pointers for safe COM operation + hr = UnmarshalStreamComPointers(stream); + if (hr != S_OK) + { + PRINT(("Error unmarshaling stream COM pointers. HRESULT: %i\n", hr)); + return 0; + } + + // Calculate timeout for next polling attempt. + sleep_ms_in = GetFramesSleepTime(stream->in.framesPerHostCallback/WASAPI_PACKETS_PER_INPUT_BUFFER, stream->in.wavex.Format.nSamplesPerSec); + sleep_ms_out = GetFramesSleepTime(stream->out.framesPerBuffer, stream->out.wavex.Format.nSamplesPerSec); + + // WASAPI Input packets tend to expire very easily, let's limit sleep time to 2 milliseconds + // for all cases. Please propose better solution if any. + if (sleep_ms_in > 2) + sleep_ms_in = 2; + + // Adjust polling time for non-paUtilFixedHostBufferSize. Input stream is not adjustable as it is being + // polled according its packet length. + if (stream->bufferMode != paUtilFixedHostBufferSize) + { + //sleep_ms_in = GetFramesSleepTime(stream->bufferProcessor.framesPerUserBuffer, stream->in.wavex.Format.nSamplesPerSec); + sleep_ms_out = GetFramesSleepTime(stream->bufferProcessor.framesPerUserBuffer, stream->out.wavex.Format.nSamplesPerSec); + } + + // Choose smallest + if ((sleep_ms_in != 0) && (sleep_ms_out != 0)) + sleep_ms = min(sleep_ms_in, sleep_ms_out); + else + { + sleep_ms = (sleep_ms_in ? sleep_ms_in : sleep_ms_out); + } + // Make sure not 0, othervise use ThreadIdleScheduler + if (sleep_ms == 0) + { + sleep_ms_in = GetFramesSleepTimeMicroseconds(stream->in.framesPerHostCallback/WASAPI_PACKETS_PER_INPUT_BUFFER, stream->in.wavex.Format.nSamplesPerSec); + sleep_ms_out = GetFramesSleepTimeMicroseconds(stream->bufferProcessor.framesPerUserBuffer, stream->out.wavex.Format.nSamplesPerSec); + + // Choose smallest + if ((sleep_ms_in != 0) && (sleep_ms_out != 0)) + sleep_ms = min(sleep_ms_in, sleep_ms_out); + else + { + sleep_ms = (sleep_ms_in ? sleep_ms_in : sleep_ms_out); + } + + // Setup thread sleep scheduler + ThreadIdleScheduler_Setup(&scheduler, 1, sleep_ms/* microseconds here */); + sleep_ms = 0; + } + + // Setup data processors + defaultProcessor.processor = WaspiHostProcessingLoop; + defaultProcessor.userData = stream; + processor[S_INPUT] = (stream->hostProcessOverrideInput.processor != NULL ? stream->hostProcessOverrideInput : defaultProcessor); + processor[S_OUTPUT] = (stream->hostProcessOverrideOutput.processor != NULL ? stream->hostProcessOverrideOutput : defaultProcessor); + + // Boost thread priority + PaWasapi_ThreadPriorityBoost((void **)&stream->hAvTask, stream->nThreadPriority); + + // Initialize event & start INPUT stream + if (stream->in.clientProc) + { + if ((hr = IAudioClient_Start(stream->in.clientProc)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + } + + // Initialize event & start OUTPUT stream + if (stream->out.clientProc) + { + // Preload buffer (obligatory, othervise ->Start() will fail), avoid processing + // when in full-duplex mode as it requires input processing as well + if (!PA_WASAPI__IS_FULLDUPLEX(stream)) + { + UINT32 frames = 0; + if ((hr = _PollGetOutputFramesAvailable(stream, &frames)) == S_OK) + { + if (stream->bufferMode == paUtilFixedHostBufferSize) + { + if (frames >= stream->out.framesPerBuffer) + { + frames = stream->out.framesPerBuffer; + + if ((hr = ProcessOutputBuffer(stream, processor, frames)) != S_OK) + { + LogHostError(hr); // not fatal, just log + } + } + } + else + { + if (frames != 0) + { + if ((hr = ProcessOutputBuffer(stream, processor, frames)) != S_OK) + { + LogHostError(hr); // not fatal, just log + } + } + } + } + else + { + LogHostError(hr); // not fatal, just log + } + } + + // Start + if ((hr = IAudioClient_Start(stream->out.clientProc)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + } + + // Signal: stream running + stream->running = TRUE; + + // Notify: thread started + SetEvent(stream->hThreadStart); + + if (!PA_WASAPI__IS_FULLDUPLEX(stream)) + { + // Processing Loop + UINT32 next_sleep = sleep_ms; + while (WaitForSingleObject(stream->hCloseRequest, next_sleep) == WAIT_TIMEOUT) + { + // Get next sleep time + if (sleep_ms == 0) + { + next_sleep = ThreadIdleScheduler_NextSleep(&scheduler); + } + + for (i = 0; i < S_COUNT; ++i) + { + // Process S_INPUT/S_OUTPUT + switch (i) + { + // Input stream + case S_INPUT: { + + if (stream->captureClient == NULL) + break; + + if ((hr = ProcessInputBuffer(stream, processor)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + + break; } + + // Output stream + case S_OUTPUT: { + + UINT32 frames; + if (stream->renderClient == NULL) + break; + + // get available frames + if ((hr = _PollGetOutputFramesAvailable(stream, &frames)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + + // output + if (stream->bufferMode == paUtilFixedHostBufferSize) + { + if (frames >= stream->out.framesPerBuffer) + { + if ((hr = ProcessOutputBuffer(stream, processor, stream->out.framesPerBuffer)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + } + } + else + { + if (frames != 0) + { + if ((hr = ProcessOutputBuffer(stream, processor, frames)) != S_OK) + { + LogHostError(hr); + goto thread_error; + } + } + } + + break; } + } + } + } + } + else + { +#if 0 + // Processing Loop + while (WaitForSingleObject(stream->hCloseRequest, 1) == WAIT_TIMEOUT) + { + UINT32 i_frames = 0, i_processed = 0; + BYTE *i_data = NULL, *o_data = NULL, *o_data_host = NULL; + DWORD i_flags = 0; + UINT32 o_frames = 0; + + // get host input buffer + if ((hr = IAudioCaptureClient_GetBuffer(stream->captureClient, &i_data, &i_frames, &i_flags, NULL, NULL)) != S_OK) + { + if (hr == AUDCLNT_S_BUFFER_EMPTY) + continue; // no data in capture buffer + + LogHostError(hr); + break; + } + + // get available frames + if ((hr = _PollGetOutputFramesAvailable(stream, &o_frames)) != S_OK) + { + // release input buffer + IAudioCaptureClient_ReleaseBuffer(stream->captureClient, 0); + + LogHostError(hr); + break; + } + + // process equal ammount of frames + if (o_frames >= i_frames) + { + // process input ammount of frames + UINT32 o_processed = i_frames; + + // get host output buffer + if ((hr = IAudioRenderClient_GetBuffer(stream->procRCClient, o_processed, &o_data)) == S_OK) + { + // processed amount of i_frames + i_processed = i_frames; + o_data_host = o_data; + + // convert output mono + if (stream->out.monoMixer) + { + UINT32 mono_frames_size = o_processed * (stream->out.wavex.Format.wBitsPerSample / 8); + // expand buffer + if (mono_frames_size > stream->out.monoBufferSize) + { + stream->out.monoBuffer = PaWasapi_ReallocateMemory(stream->out.monoBuffer, (stream->out.monoBufferSize = mono_frames_size)); + if (stream->out.monoBuffer == NULL) + { + // release input buffer + IAudioCaptureClient_ReleaseBuffer(stream->captureClient, 0); + // release output buffer + IAudioRenderClient_ReleaseBuffer(stream->renderClient, 0, 0); + + LogPaError(paInsufficientMemory); + break; + } + } + + // replace buffer pointer + o_data = (BYTE *)stream->out.monoBuffer; + } + + // convert input mono + if (stream->in.monoMixer) + { + UINT32 mono_frames_size = i_processed * (stream->in.wavex.Format.wBitsPerSample / 8); + // expand buffer + if (mono_frames_size > stream->in.monoBufferSize) + { + stream->in.monoBuffer = PaWasapi_ReallocateMemory(stream->in.monoBuffer, (stream->in.monoBufferSize = mono_frames_size)); + if (stream->in.monoBuffer == NULL) + { + // release input buffer + IAudioCaptureClient_ReleaseBuffer(stream->captureClient, 0); + // release output buffer + IAudioRenderClient_ReleaseBuffer(stream->renderClient, 0, 0); + + LogPaError(paInsufficientMemory); + break; + } + } + + // mix 2 to 1 input channels + stream->in.monoMixer(stream->in.monoBuffer, i_data, i_processed); + + // replace buffer pointer + i_data = (BYTE *)stream->in.monoBuffer; + } + + // process + processor[S_FULLDUPLEX].processor(i_data, i_processed, o_data, o_processed, processor[S_FULLDUPLEX].userData); + + // mix 1 to 2 output channels + if (stream->out.monoBuffer) + stream->out.monoMixer(o_data_host, stream->out.monoBuffer, o_processed); + + // release host output buffer + if ((hr = IAudioRenderClient_ReleaseBuffer(stream->renderClient, o_processed, 0)) != S_OK) + LogHostError(hr); + } + else + { + if (stream->out.shareMode != AUDCLNT_SHAREMODE_SHARED) + LogHostError(hr); // be silent in shared mode, try again next time + } + } + + // release host input buffer + if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->captureClient, i_processed)) != S_OK) + { + LogHostError(hr); + break; + } + } +#else + // Processing Loop + UINT32 next_sleep = sleep_ms; + while (WaitForSingleObject(stream->hCloseRequest, next_sleep) == WAIT_TIMEOUT) + { + UINT32 i_frames = 0, i_processed = 0; + BYTE *i_data = NULL, *o_data = NULL, *o_data_host = NULL; + DWORD i_flags = 0; + UINT32 o_frames = 0; + + // Get next sleep time + if (sleep_ms == 0) + { + next_sleep = ThreadIdleScheduler_NextSleep(&scheduler); + } + + // get available frames + if ((hr = _PollGetOutputFramesAvailable(stream, &o_frames)) != S_OK) + { + LogHostError(hr); + break; + } + + while (o_frames != 0) + { + // get host input buffer + if ((hr = IAudioCaptureClient_GetBuffer(stream->captureClient, &i_data, &i_frames, &i_flags, NULL, NULL)) != S_OK) + { + if (hr == AUDCLNT_S_BUFFER_EMPTY) + break; // no data in capture buffer + + LogHostError(hr); + break; + } + + // process equal ammount of frames + if (o_frames >= i_frames) + { + // process input ammount of frames + UINT32 o_processed = i_frames; + + // get host output buffer + if ((hr = IAudioRenderClient_GetBuffer(stream->renderClient, o_processed, &o_data)) == S_OK) + { + // processed amount of i_frames + i_processed = i_frames; + o_data_host = o_data; + + // convert output mono + if (stream->out.monoMixer) + { + UINT32 mono_frames_size = o_processed * (stream->out.wavex.Format.wBitsPerSample / 8); + // expand buffer + if (mono_frames_size > stream->out.monoBufferSize) + { + stream->out.monoBuffer = PaWasapi_ReallocateMemory(stream->out.monoBuffer, (stream->out.monoBufferSize = mono_frames_size)); + if (stream->out.monoBuffer == NULL) + { + // release input buffer + IAudioCaptureClient_ReleaseBuffer(stream->captureClient, 0); + // release output buffer + IAudioRenderClient_ReleaseBuffer(stream->renderClient, 0, 0); + + LogPaError(paInsufficientMemory); + goto thread_error; + } + } + + // replace buffer pointer + o_data = (BYTE *)stream->out.monoBuffer; + } + + // convert input mono + if (stream->in.monoMixer) + { + UINT32 mono_frames_size = i_processed * (stream->in.wavex.Format.wBitsPerSample / 8); + // expand buffer + if (mono_frames_size > stream->in.monoBufferSize) + { + stream->in.monoBuffer = PaWasapi_ReallocateMemory(stream->in.monoBuffer, (stream->in.monoBufferSize = mono_frames_size)); + if (stream->in.monoBuffer == NULL) + { + // release input buffer + IAudioCaptureClient_ReleaseBuffer(stream->captureClient, 0); + // release output buffer + IAudioRenderClient_ReleaseBuffer(stream->renderClient, 0, 0); + + LogPaError(paInsufficientMemory); + goto thread_error; + } + } + + // mix 2 to 1 input channels + stream->in.monoMixer(stream->in.monoBuffer, i_data, i_processed); + + // replace buffer pointer + i_data = (BYTE *)stream->in.monoBuffer; + } + + // process + processor[S_FULLDUPLEX].processor(i_data, i_processed, o_data, o_processed, processor[S_FULLDUPLEX].userData); + + // mix 1 to 2 output channels + if (stream->out.monoBuffer) + stream->out.monoMixer(o_data_host, stream->out.monoBuffer, o_processed); + + // release host output buffer + if ((hr = IAudioRenderClient_ReleaseBuffer(stream->renderClient, o_processed, 0)) != S_OK) + LogHostError(hr); + + o_frames -= o_processed; + } + else + { + if (stream->out.shareMode != AUDCLNT_SHAREMODE_SHARED) + LogHostError(hr); // be silent in shared mode, try again next time + } + } + else + { + i_processed = 0; + goto fd_release_buffer_in; + } + +fd_release_buffer_in: + + // release host input buffer + if ((hr = IAudioCaptureClient_ReleaseBuffer(stream->captureClient, i_processed)) != S_OK) + { + LogHostError(hr); + break; + } + + // break processing, input hasn't been accumulated yet + if (i_processed == 0) + break; + } + } +#endif + } + +thread_end: + + // Process stop + _StreamOnStop(stream); + + // Release unmarshaled COM pointers + ReleaseUnmarshaledComPointers(stream); + + // Cleanup COM for this thread + if (bThreadComInitialized == TRUE) + CoUninitialize(); + + // Notify: not running + stream->running = FALSE; + + // Notify: thread exited + SetEvent(stream->hThreadExit); + + return 0; + +thread_error: + + // Prevent deadlocking in Pa_StreamStart + SetEvent(stream->hThreadStart); + + // Exit + goto thread_end; +} + +// ------------------------------------------------------------------------------------------ +void *PaWasapi_ReallocateMemory(void *ptr, size_t size) +{ + return realloc(ptr, size); +} + +// ------------------------------------------------------------------------------------------ +void PaWasapi_FreeMemory(void *ptr) +{ + free(ptr); +} + +//#endif //VC 2005 + + + + +#if 0 + if(bFirst) { + float masteur; + hr = stream->outVol->GetMasterVolumeLevelScalar(&masteur); + if (hr != S_OK) + LogHostError(hr); + float chan1, chan2; + hr = stream->outVol->GetChannelVolumeLevelScalar(0, &chan1); + if (hr != S_OK) + LogHostError(hr); + hr = stream->outVol->GetChannelVolumeLevelScalar(1, &chan2); + if (hr != S_OK) + LogHostError(hr); + + BOOL bMute; + hr = stream->outVol->GetMute(&bMute); + if (hr != S_OK) + LogHostError(hr); + + stream->outVol->SetMasterVolumeLevelScalar(0.5, NULL); + stream->outVol->SetChannelVolumeLevelScalar(0, 0.5, NULL); + stream->outVol->SetChannelVolumeLevelScalar(1, 0.5, NULL); + stream->outVol->SetMute(FALSE, NULL); + bFirst = FALSE; + } +#endif diff --git a/Externals/portaudio/src/hostapi/wasapi/readme.txt b/Externals/portaudio/src/hostapi/wasapi/readme.txt new file mode 100644 index 0000000000..08fedeb074 --- /dev/null +++ b/Externals/portaudio/src/hostapi/wasapi/readme.txt @@ -0,0 +1,25 @@ +************** +* WASAPI API * +************** + +---------------------------------------- +Microsoft Visual Studio 2005SP1/2008/10 +---------------------------------------- +No specific actions are needed to compile WASAPI API under Visual Studio. +You are only required to install min. Windows Vista SDK (v6.0A) prior +compilation. + +---------------------------------------- +MinGW (GCC 32-bit)/ MinGW64 (GCC 64-bit) +---------------------------------------- +To compile under MinGW you are required to include 'mingw-include' directory +which contains necessary files with WASAPI API. These files are modified +in order to be compiled by MinGW compiler. These files are taken from +Windows Vista SDK (v6.0A). MinGW compilation is tested and proved to be +fully working under 32-bit and 64-bit modes. +MinGW (32-bit) tested: gcc version 4.4.0 (GCC) +MinGW64 (64-bit) tested: gcc version 4.4.4 20100226 (prerelease) (GCC) + +PortAudio +/Dmitry Kostjuchenko/ +04.03.2010 \ No newline at end of file diff --git a/Externals/portaudio/src/hostapi/wdmks/pa_win_wdmks.c b/Externals/portaudio/src/hostapi/wdmks/pa_win_wdmks.c new file mode 100644 index 0000000000..60a61e474b --- /dev/null +++ b/Externals/portaudio/src/hostapi/wdmks/pa_win_wdmks.c @@ -0,0 +1,3308 @@ +/* + * $Id: pa_win_wdmks.c 1606 2011-02-17 15:56:04Z rob_bielik $ + * PortAudio Windows WDM-KS interface + * + * Author: Andrew Baldwin + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2004 Andrew Baldwin, Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup hostapi_src + @brief Portaudio WDM-KS host API. + + @note This is the implementation of the Portaudio host API using the + Windows WDM/Kernel Streaming API in order to enable very low latency + playback and recording on all modern Windows platforms (e.g. 2K, XP) + Note: This API accesses the device drivers below the usual KMIXER + component which is normally used to enable multi-client mixing and + format conversion. That means that it will lock out all other users + of a device for the duration of active stream using those devices +*/ + +#include + +/* Debugging/tracing support */ + +#define PA_LOGE_ +#define PA_LOGL_ + +#ifdef __GNUC__ + #include + #define _WIN32_WINNT 0x0501 + #define WINVER 0x0501 +#endif + +#include /* strlen() */ +#include + +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "portaudio.h" +#include "pa_debugprint.h" + +#include +#include +#include + +#ifdef __GNUC__ + #undef PA_LOGE_ + #define PA_LOGE_ PA_DEBUG(("%s {\n",__FUNCTION__)) + #undef PA_LOGL_ + #define PA_LOGL_ PA_DEBUG(("} %s\n",__FUNCTION__)) + /* These defines are set in order to allow the WIndows DirectX + * headers to compile with a GCC compiler such as MinGW + * NOTE: The headers may generate a few warning in GCC, but + * they should compile */ + #define _INC_MMSYSTEM + #define _INC_MMREG + #define _NTRTL_ /* Turn off default definition of DEFINE_GUIDEX */ + #define DEFINE_GUID_THUNK(name,guid) DEFINE_GUID(name,guid) + #define DEFINE_GUIDEX(n) DEFINE_GUID_THUNK( n, STATIC_##n ) + #if !defined( DEFINE_WAVEFORMATEX_GUID ) + #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 + #endif + #define WAVE_FORMAT_ADPCM 0x0002 + #define WAVE_FORMAT_IEEE_FLOAT 0x0003 + #define WAVE_FORMAT_ALAW 0x0006 + #define WAVE_FORMAT_MULAW 0x0007 + #define WAVE_FORMAT_MPEG 0x0050 + #define WAVE_FORMAT_DRM 0x0009 + #define DYNAMIC_GUID_THUNK(l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + #define DYNAMIC_GUID(data) DYNAMIC_GUID_THUNK(data) +#endif + +#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */ +#pragma comment( lib, "setupapi.lib" ) +#endif + +/* use CreateThread for CYGWIN, _beginthreadex for all others */ +#ifndef __CYGWIN__ +#define CREATE_THREAD (HANDLE)_beginthreadex( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId ) +#else +#define CREATE_THREAD CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId ) +#endif + +/* use ExitThread for CYGWIN, _endthreadex for all others */ +#ifndef __CYGWIN__ +#define EXIT_THREAD _endthreadex(0) +#else +#define EXIT_THREAD ExitThread(0) +#endif + +#ifdef _MSC_VER + #define NOMMIDS + #define DYNAMIC_GUID(data) {data} + #define _NTRTL_ /* Turn off default definition of DEFINE_GUIDEX */ + #undef DEFINE_GUID + #define DEFINE_GUID(n,data) EXTERN_C const GUID n = {data} + #define DEFINE_GUID_THUNK(n,data) DEFINE_GUID(n,data) + #define DEFINE_GUIDEX(n) DEFINE_GUID_THUNK(n, STATIC_##n) +#endif + +#include +#include +#include +#include +#include +#include + +/* These next definitions allow the use of the KSUSER DLL */ +typedef KSDDKAPI DWORD WINAPI KSCREATEPIN(HANDLE, PKSPIN_CONNECT, ACCESS_MASK, PHANDLE); +extern HMODULE DllKsUser; +extern KSCREATEPIN* FunctionKsCreatePin; + +/* Forward definition to break circular type reference between pin and filter */ +struct __PaWinWdmFilter; +typedef struct __PaWinWdmFilter PaWinWdmFilter; + +/* The Pin structure + * A pin is an input or output node, e.g. for audio flow */ +typedef struct __PaWinWdmPin +{ + HANDLE handle; + PaWinWdmFilter* parentFilter; + unsigned long pinId; + KSPIN_CONNECT* pinConnect; + unsigned long pinConnectSize; + KSDATAFORMAT_WAVEFORMATEX* ksDataFormatWfx; + KSPIN_COMMUNICATION communication; + KSDATARANGE* dataRanges; + KSMULTIPLE_ITEM* dataRangesItem; + KSPIN_DATAFLOW dataFlow; + KSPIN_CINSTANCES instances; + unsigned long frameSize; + int maxChannels; + unsigned long formats; + int bestSampleRate; +} +PaWinWdmPin; + +/* The Filter structure + * A filter has a number of pins and a "friendly name" */ +struct __PaWinWdmFilter +{ + HANDLE handle; + int pinCount; + PaWinWdmPin** pins; + TCHAR filterName[MAX_PATH]; + TCHAR friendlyName[MAX_PATH]; + int maxInputChannels; + int maxOutputChannels; + unsigned long formats; + int usageCount; + int bestSampleRate; +}; + +/* PaWinWdmHostApiRepresentation - host api datastructure specific to this implementation */ +typedef struct __PaWinWdmHostApiRepresentation +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup* allocations; + PaWinWdmFilter** filters; + int filterCount; +} +PaWinWdmHostApiRepresentation; + +typedef struct __PaWinWdmDeviceInfo +{ + PaDeviceInfo inheritedDeviceInfo; + PaWinWdmFilter* filter; +} +PaWinWdmDeviceInfo; + +typedef struct __DATAPACKET +{ + KSSTREAM_HEADER Header; + OVERLAPPED Signal; +} DATAPACKET; + +/* PaWinWdmStream - a stream data structure specifically for this implementation */ +typedef struct __PaWinWdmStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + PaWinWdmPin* recordingPin; + PaWinWdmPin* playbackPin; + char* hostBuffer; + unsigned long framesPerHostIBuffer; + unsigned long framesPerHostOBuffer; + int bytesPerInputFrame; + int bytesPerOutputFrame; + int streamStarted; + int streamActive; + int streamStop; + int streamAbort; + int oldProcessPriority; + HANDLE streamThread; + HANDLE events[5]; /* 2 play + 2 record packets + abort events */ + DATAPACKET packets[4]; /* 2 play + 2 record */ + PaStreamFlags streamFlags; + /* These values handle the case where the user wants to use fewer + * channels than the device has */ + int userInputChannels; + int deviceInputChannels; + int userOutputChannels; + int deviceOutputChannels; + int inputSampleSize; + int outputSampleSize; +} +PaWinWdmStream; + +#include + +HMODULE DllKsUser = NULL; +KSCREATEPIN* FunctionKsCreatePin = NULL; + +/* prototypes for functions declared in this file */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +PaError PaWinWdm_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +/* Low level I/O functions */ +static PaError WdmSyncIoctl(HANDLE handle, + unsigned long ioctlNumber, + void* inBuffer, + unsigned long inBufferCount, + void* outBuffer, + unsigned long outBufferCount, + unsigned long* bytesReturned); +static PaError WdmGetPropertySimple(HANDLE handle, + const GUID* const guidPropertySet, + unsigned long property, + void* value, + unsigned long valueCount, + void* instance, + unsigned long instanceCount); +static PaError WdmSetPropertySimple(HANDLE handle, + const GUID* const guidPropertySet, + unsigned long property, + void* value, + unsigned long valueCount, + void* instance, + unsigned long instanceCount); +static PaError WdmGetPinPropertySimple(HANDLE handle, + unsigned long pinId, + const GUID* const guidPropertySet, + unsigned long property, + void* value, + unsigned long valueCount); +static PaError WdmGetPinPropertyMulti(HANDLE handle, + unsigned long pinId, + const GUID* const guidPropertySet, + unsigned long property, + KSMULTIPLE_ITEM** ksMultipleItem); + +/** Pin management functions */ +static PaWinWdmPin* PinNew(PaWinWdmFilter* parentFilter, unsigned long pinId, PaError* error); +static void PinFree(PaWinWdmPin* pin); +static void PinClose(PaWinWdmPin* pin); +static PaError PinInstantiate(PaWinWdmPin* pin); +/*static PaError PinGetState(PaWinWdmPin* pin, KSSTATE* state); NOT USED */ +static PaError PinSetState(PaWinWdmPin* pin, KSSTATE state); +static PaError PinSetFormat(PaWinWdmPin* pin, const WAVEFORMATEX* format); +static PaError PinIsFormatSupported(PaWinWdmPin* pin, const WAVEFORMATEX* format); + +/* Filter management functions */ +static PaWinWdmFilter* FilterNew( + TCHAR* filterName, + TCHAR* friendlyName, + PaError* error); +static void FilterFree(PaWinWdmFilter* filter); +static PaWinWdmPin* FilterCreateRenderPin( + PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error); +static PaWinWdmPin* FilterFindViableRenderPin( + PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error); +static PaError FilterCanCreateRenderPin( + PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex); +static PaWinWdmPin* FilterCreateCapturePin( + PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error); +static PaWinWdmPin* FilterFindViableCapturePin( + PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error); +static PaError FilterCanCreateCapturePin( + PaWinWdmFilter* filter, + const WAVEFORMATEX* pwfx); +static PaError FilterUse( + PaWinWdmFilter* filter); +static void FilterRelease( + PaWinWdmFilter* filter); + +/* Interface functions */ +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError IsFormatSupported( + struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError OpenStream( + struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError ReadStream( + PaStream* stream, + void *buffer, + unsigned long frames ); +static PaError WriteStream( + PaStream* stream, + const void *buffer, + unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream* stream ); +static signed long GetStreamWriteAvailable( PaStream* stream ); + +/* Utility functions */ +static unsigned long GetWfexSize(const WAVEFORMATEX* wfex); +static PaError BuildFilterList(PaWinWdmHostApiRepresentation* wdmHostApi); +static BOOL PinWrite(HANDLE h, DATAPACKET* p); +static BOOL PinRead(HANDLE h, DATAPACKET* p); +static void DuplicateFirstChannelInt16(void* buffer, int channels, int samples); +static void DuplicateFirstChannelInt24(void* buffer, int channels, int samples); +static DWORD WINAPI ProcessingThread(LPVOID pParam); + +/* Function bodies */ + +static unsigned long GetWfexSize(const WAVEFORMATEX* wfex) +{ + if( wfex->wFormatTag == WAVE_FORMAT_PCM ) + { + return sizeof( WAVEFORMATEX ); + } + else + { + return (sizeof( WAVEFORMATEX ) + wfex->cbSize); + } +} + +/* +Low level pin/filter access functions +*/ +static PaError WdmSyncIoctl( + HANDLE handle, + unsigned long ioctlNumber, + void* inBuffer, + unsigned long inBufferCount, + void* outBuffer, + unsigned long outBufferCount, + unsigned long* bytesReturned) +{ + PaError result = paNoError; + OVERLAPPED overlapped; + int boolResult; + unsigned long dummyBytesReturned; + unsigned long error; + + if( !bytesReturned ) + { + /* User a dummy as the caller hasn't supplied one */ + bytesReturned = &dummyBytesReturned; + } + + FillMemory((void *)&overlapped,sizeof(overlapped),0); + overlapped.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL); + if( !overlapped.hEvent ) + { + result = paInsufficientMemory; + goto error; + } + overlapped.hEvent = (HANDLE)((DWORD_PTR)overlapped.hEvent | 0x1); + + boolResult = DeviceIoControl(handle, ioctlNumber, inBuffer, inBufferCount, + outBuffer, outBufferCount, bytesReturned, &overlapped); + if( !boolResult ) + { + error = GetLastError(); + if( error == ERROR_IO_PENDING ) + { + error = WaitForSingleObject(overlapped.hEvent,INFINITE); + if( error != WAIT_OBJECT_0 ) + { + result = paUnanticipatedHostError; + goto error; + } + } + else if((( error == ERROR_INSUFFICIENT_BUFFER ) || + ( error == ERROR_MORE_DATA )) && + ( ioctlNumber == IOCTL_KS_PROPERTY ) && + ( outBufferCount == 0 )) + { + boolResult = TRUE; + } + else + { + result = paUnanticipatedHostError; + } + } + if( !boolResult ) + *bytesReturned = 0; + +error: + if( overlapped.hEvent ) + { + CloseHandle( overlapped.hEvent ); + } + return result; +} + +static PaError WdmGetPropertySimple(HANDLE handle, + const GUID* const guidPropertySet, + unsigned long property, + void* value, + unsigned long valueCount, + void* instance, + unsigned long instanceCount) +{ + PaError result; + KSPROPERTY* ksProperty; + unsigned long propertyCount; + + propertyCount = sizeof(KSPROPERTY) + instanceCount; + ksProperty = (KSPROPERTY*)PaUtil_AllocateMemory( propertyCount ); + if( !ksProperty ) + { + return paInsufficientMemory; + } + + FillMemory((void*)ksProperty,sizeof(ksProperty),0); + ksProperty->Set = *guidPropertySet; + ksProperty->Id = property; + ksProperty->Flags = KSPROPERTY_TYPE_GET; + + if( instance ) + { + memcpy( (void*)(((char*)ksProperty)+sizeof(KSPROPERTY)), instance, instanceCount ); + } + + result = WdmSyncIoctl( + handle, + IOCTL_KS_PROPERTY, + ksProperty, + propertyCount, + value, + valueCount, + NULL); + + PaUtil_FreeMemory( ksProperty ); + return result; +} + +static PaError WdmSetPropertySimple( + HANDLE handle, + const GUID* const guidPropertySet, + unsigned long property, + void* value, + unsigned long valueCount, + void* instance, + unsigned long instanceCount) +{ + PaError result; + KSPROPERTY* ksProperty; + unsigned long propertyCount = 0; + + propertyCount = sizeof(KSPROPERTY) + instanceCount; + ksProperty = (KSPROPERTY*)PaUtil_AllocateMemory( propertyCount ); + if( !ksProperty ) + { + return paInsufficientMemory; + } + + ksProperty->Set = *guidPropertySet; + ksProperty->Id = property; + ksProperty->Flags = KSPROPERTY_TYPE_SET; + + if( instance ) + { + memcpy((void*)((char*)ksProperty + sizeof(KSPROPERTY)), instance, instanceCount); + } + + result = WdmSyncIoctl( + handle, + IOCTL_KS_PROPERTY, + ksProperty, + propertyCount, + value, + valueCount, + NULL); + + PaUtil_FreeMemory( ksProperty ); + return result; +} + +static PaError WdmGetPinPropertySimple( + HANDLE handle, + unsigned long pinId, + const GUID* const guidPropertySet, + unsigned long property, + void* value, + unsigned long valueCount) +{ + PaError result; + + KSP_PIN ksPProp; + ksPProp.Property.Set = *guidPropertySet; + ksPProp.Property.Id = property; + ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; + ksPProp.PinId = pinId; + ksPProp.Reserved = 0; + + result = WdmSyncIoctl( + handle, + IOCTL_KS_PROPERTY, + &ksPProp, + sizeof(KSP_PIN), + value, + valueCount, + NULL); + + return result; +} + +static PaError WdmGetPinPropertyMulti( + HANDLE handle, + unsigned long pinId, + const GUID* const guidPropertySet, + unsigned long property, + KSMULTIPLE_ITEM** ksMultipleItem) +{ + PaError result; + unsigned long multipleItemSize = 0; + KSP_PIN ksPProp; + + ksPProp.Property.Set = *guidPropertySet; + ksPProp.Property.Id = property; + ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; + ksPProp.PinId = pinId; + ksPProp.Reserved = 0; + + result = WdmSyncIoctl( + handle, + IOCTL_KS_PROPERTY, + &ksPProp.Property, + sizeof(KSP_PIN), + NULL, + 0, + &multipleItemSize); + if( result != paNoError ) + { + return result; + } + + *ksMultipleItem = (KSMULTIPLE_ITEM*)PaUtil_AllocateMemory( multipleItemSize ); + if( !*ksMultipleItem ) + { + return paInsufficientMemory; + } + + result = WdmSyncIoctl( + handle, + IOCTL_KS_PROPERTY, + &ksPProp, + sizeof(KSP_PIN), + (void*)*ksMultipleItem, + multipleItemSize, + NULL); + + if( result != paNoError ) + { + PaUtil_FreeMemory( ksMultipleItem ); + } + + return result; +} + + +/* +Create a new pin object belonging to a filter +The pin object holds all the configuration information about the pin +before it is opened, and then the handle of the pin after is opened +*/ +static PaWinWdmPin* PinNew(PaWinWdmFilter* parentFilter, unsigned long pinId, PaError* error) +{ + PaWinWdmPin* pin; + PaError result; + unsigned long i; + KSMULTIPLE_ITEM* item = NULL; + KSIDENTIFIER* identifier; + KSDATARANGE* dataRange; + + PA_LOGE_; + PA_DEBUG(("Creating pin %d:\n",pinId)); + + /* Allocate the new PIN object */ + pin = (PaWinWdmPin*)PaUtil_AllocateMemory( sizeof(PaWinWdmPin) ); + if( !pin ) + { + result = paInsufficientMemory; + goto error; + } + + /* Zero the pin object */ + /* memset( (void*)pin, 0, sizeof(PaWinWdmPin) ); */ + + pin->parentFilter = parentFilter; + pin->pinId = pinId; + + /* Allocate a connect structure */ + pin->pinConnectSize = sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT_WAVEFORMATEX); + pin->pinConnect = (KSPIN_CONNECT*)PaUtil_AllocateMemory( pin->pinConnectSize ); + if( !pin->pinConnect ) + { + result = paInsufficientMemory; + goto error; + } + + /* Configure the connect structure with default values */ + pin->pinConnect->Interface.Set = KSINTERFACESETID_Standard; + pin->pinConnect->Interface.Id = KSINTERFACE_STANDARD_STREAMING; + pin->pinConnect->Interface.Flags = 0; + pin->pinConnect->Medium.Set = KSMEDIUMSETID_Standard; + pin->pinConnect->Medium.Id = KSMEDIUM_TYPE_ANYINSTANCE; + pin->pinConnect->Medium.Flags = 0; + pin->pinConnect->PinId = pinId; + pin->pinConnect->PinToHandle = NULL; + pin->pinConnect->Priority.PriorityClass = KSPRIORITY_NORMAL; + pin->pinConnect->Priority.PrioritySubClass = 1; + pin->ksDataFormatWfx = (KSDATAFORMAT_WAVEFORMATEX*)(pin->pinConnect + 1); + pin->ksDataFormatWfx->DataFormat.FormatSize = sizeof(KSDATAFORMAT_WAVEFORMATEX); + pin->ksDataFormatWfx->DataFormat.Flags = 0; + pin->ksDataFormatWfx->DataFormat.Reserved = 0; + pin->ksDataFormatWfx->DataFormat.MajorFormat = KSDATAFORMAT_TYPE_AUDIO; + pin->ksDataFormatWfx->DataFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; + pin->ksDataFormatWfx->DataFormat.Specifier = KSDATAFORMAT_SPECIFIER_WAVEFORMATEX; + + pin->frameSize = 0; /* Unknown until we instantiate pin */ + + /* Get the COMMUNICATION property */ + result = WdmGetPinPropertySimple( + parentFilter->handle, + pinId, + &KSPROPSETID_Pin, + KSPROPERTY_PIN_COMMUNICATION, + &pin->communication, + sizeof(KSPIN_COMMUNICATION)); + if( result != paNoError ) + goto error; + + if( /*(pin->communication != KSPIN_COMMUNICATION_SOURCE) &&*/ + (pin->communication != KSPIN_COMMUNICATION_SINK) && + (pin->communication != KSPIN_COMMUNICATION_BOTH) ) + { + PA_DEBUG(("Not source/sink\n")); + result = paInvalidDevice; + goto error; + } + + /* Get dataflow information */ + result = WdmGetPinPropertySimple( + parentFilter->handle, + pinId, + &KSPROPSETID_Pin, + KSPROPERTY_PIN_DATAFLOW, + &pin->dataFlow, + sizeof(KSPIN_DATAFLOW)); + + if( result != paNoError ) + goto error; + + /* Get the INTERFACE property list */ + result = WdmGetPinPropertyMulti( + parentFilter->handle, + pinId, + &KSPROPSETID_Pin, + KSPROPERTY_PIN_INTERFACES, + &item); + + if( result != paNoError ) + goto error; + + identifier = (KSIDENTIFIER*)(item+1); + + /* Check that at least one interface is STANDARD_STREAMING */ + result = paUnanticipatedHostError; + for( i = 0; i < item->Count; i++ ) + { + if( !memcmp( (void*)&identifier[i].Set, (void*)&KSINTERFACESETID_Standard, sizeof( GUID ) ) && + ( identifier[i].Id == KSINTERFACE_STANDARD_STREAMING ) ) + { + result = paNoError; + break; + } + } + + if( result != paNoError ) + { + PA_DEBUG(("No standard streaming\n")); + goto error; + } + + /* Don't need interfaces any more */ + PaUtil_FreeMemory( item ); + item = NULL; + + /* Get the MEDIUM properties list */ + result = WdmGetPinPropertyMulti( + parentFilter->handle, + pinId, + &KSPROPSETID_Pin, + KSPROPERTY_PIN_MEDIUMS, + &item); + + if( result != paNoError ) + goto error; + + identifier = (KSIDENTIFIER*)(item+1); /* Not actually necessary... */ + + /* Check that at least one medium is STANDARD_DEVIO */ + result = paUnanticipatedHostError; + for( i = 0; i < item->Count; i++ ) + { + if( !memcmp( (void*)&identifier[i].Set, (void*)&KSMEDIUMSETID_Standard, sizeof( GUID ) ) && + ( identifier[i].Id == KSMEDIUM_STANDARD_DEVIO ) ) + { + result = paNoError; + break; + } + } + + if( result != paNoError ) + { + PA_DEBUG(("No standard devio\n")); + goto error; + } + /* Don't need mediums any more */ + PaUtil_FreeMemory( item ); + item = NULL; + + /* Get DATARANGES */ + result = WdmGetPinPropertyMulti( + parentFilter->handle, + pinId, + &KSPROPSETID_Pin, + KSPROPERTY_PIN_DATARANGES, + &pin->dataRangesItem); + + if( result != paNoError ) + goto error; + + pin->dataRanges = (KSDATARANGE*)(pin->dataRangesItem +1); + + /* Check that at least one datarange supports audio */ + result = paUnanticipatedHostError; + dataRange = pin->dataRanges; + pin->maxChannels = 0; + pin->bestSampleRate = 0; + pin->formats = 0; + for( i = 0; i dataRangesItem->Count; i++) + { + PA_DEBUG(("DR major format %x\n",*(unsigned long*)(&(dataRange->MajorFormat)))); + /* Check that subformat is WAVEFORMATEX, PCM or WILDCARD */ + if( IS_VALID_WAVEFORMATEX_GUID(&dataRange->SubFormat) || + !memcmp((void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_PCM, sizeof ( GUID ) ) || + ( !memcmp((void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_WILDCARD, sizeof ( GUID ) ) && + ( !memcmp((void*)&dataRange->MajorFormat, (void*)&KSDATAFORMAT_TYPE_AUDIO, sizeof ( GUID ) ) ) ) ) + { + result = paNoError; + /* Record the maximum possible channels with this pin */ + PA_DEBUG(("MaxChannel: %d\n",pin->maxChannels)); + if( (int)((KSDATARANGE_AUDIO*)dataRange)->MaximumChannels > pin->maxChannels ) + { + pin->maxChannels = ((KSDATARANGE_AUDIO*)dataRange)->MaximumChannels; + /*PA_DEBUG(("MaxChannel: %d\n",pin->maxChannels));*/ + } + /* Record the formats (bit depths) that are supported */ + if( ((KSDATARANGE_AUDIO*)dataRange)->MinimumBitsPerSample <= 16 ) + { + pin->formats |= paInt16; + PA_DEBUG(("Format 16 bit supported\n")); + } + if( ((KSDATARANGE_AUDIO*)dataRange)->MaximumBitsPerSample >= 24 ) + { + pin->formats |= paInt24; + PA_DEBUG(("Format 24 bit supported\n")); + } + if( ( pin->bestSampleRate != 48000) && + (((KSDATARANGE_AUDIO*)dataRange)->MaximumSampleFrequency >= 48000) && + (((KSDATARANGE_AUDIO*)dataRange)->MinimumSampleFrequency <= 48000) ) + { + pin->bestSampleRate = 48000; + PA_DEBUG(("48kHz supported\n")); + } + else if(( pin->bestSampleRate != 48000) && ( pin->bestSampleRate != 44100 ) && + (((KSDATARANGE_AUDIO*)dataRange)->MaximumSampleFrequency >= 44100) && + (((KSDATARANGE_AUDIO*)dataRange)->MinimumSampleFrequency <= 44100) ) + { + pin->bestSampleRate = 44100; + PA_DEBUG(("44.1kHz supported\n")); + } + else + { + pin->bestSampleRate = ((KSDATARANGE_AUDIO*)dataRange)->MaximumSampleFrequency; + } + } + dataRange = (KSDATARANGE*)( ((char*)dataRange) + dataRange->FormatSize); + } + + if( result != paNoError ) + goto error; + + /* Get instance information */ + result = WdmGetPinPropertySimple( + parentFilter->handle, + pinId, + &KSPROPSETID_Pin, + KSPROPERTY_PIN_CINSTANCES, + &pin->instances, + sizeof(KSPIN_CINSTANCES)); + + if( result != paNoError ) + goto error; + + /* Success */ + *error = paNoError; + PA_DEBUG(("Pin created successfully\n")); + PA_LOGL_; + return pin; + +error: + /* + Error cleanup + */ + PaUtil_FreeMemory( item ); + if( pin ) + { + PaUtil_FreeMemory( pin->pinConnect ); + PaUtil_FreeMemory( pin->dataRangesItem ); + PaUtil_FreeMemory( pin ); + } + *error = result; + PA_LOGL_; + return NULL; +} + +/* +Safely free all resources associated with the pin +*/ +static void PinFree(PaWinWdmPin* pin) +{ + PA_LOGE_; + if( pin ) + { + PinClose(pin); + if( pin->pinConnect ) + { + PaUtil_FreeMemory( pin->pinConnect ); + } + if( pin->dataRangesItem ) + { + PaUtil_FreeMemory( pin->dataRangesItem ); + } + PaUtil_FreeMemory( pin ); + } + PA_LOGL_; +} + +/* +If the pin handle is open, close it +*/ +static void PinClose(PaWinWdmPin* pin) +{ + PA_LOGE_; + if( pin == NULL ) + { + PA_DEBUG(("Closing NULL pin!")); + PA_LOGL_; + return; + } + if( pin->handle != NULL ) + { + PinSetState( pin, KSSTATE_PAUSE ); + PinSetState( pin, KSSTATE_STOP ); + CloseHandle( pin->handle ); + pin->handle = NULL; + FilterRelease(pin->parentFilter); + } + PA_LOGL_; +} + +/* +Set the state of this (instantiated) pin +*/ +static PaError PinSetState(PaWinWdmPin* pin, KSSTATE state) +{ + PaError result; + + PA_LOGE_; + if( pin == NULL ) + return paInternalError; + if( pin->handle == NULL ) + return paInternalError; + + result = WdmSetPropertySimple( + pin->handle, + &KSPROPSETID_Connection, + KSPROPERTY_CONNECTION_STATE, + &state, + sizeof(state), + NULL, + 0); + PA_LOGL_; + return result; +} + +static PaError PinInstantiate(PaWinWdmPin* pin) +{ + PaError result; + unsigned long createResult; + KSALLOCATOR_FRAMING ksaf; + KSALLOCATOR_FRAMING_EX ksafex; + + PA_LOGE_; + + if( pin == NULL ) + return paInternalError; + if(!pin->pinConnect) + return paInternalError; + + FilterUse(pin->parentFilter); + + createResult = FunctionKsCreatePin( + pin->parentFilter->handle, + pin->pinConnect, + GENERIC_WRITE | GENERIC_READ, + &pin->handle + ); + + PA_DEBUG(("Pin create result = %x\n",createResult)); + if( createResult != ERROR_SUCCESS ) + { + FilterRelease(pin->parentFilter); + pin->handle = NULL; + return paInvalidDevice; + } + + result = WdmGetPropertySimple( + pin->handle, + &KSPROPSETID_Connection, + KSPROPERTY_CONNECTION_ALLOCATORFRAMING, + &ksaf, + sizeof(ksaf), + NULL, + 0); + + if( result != paNoError ) + { + result = WdmGetPropertySimple( + pin->handle, + &KSPROPSETID_Connection, + KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, + &ksafex, + sizeof(ksafex), + NULL, + 0); + if( result == paNoError ) + { + pin->frameSize = ksafex.FramingItem[0].FramingRange.Range.MinFrameSize; + } + } + else + { + pin->frameSize = ksaf.FrameSize; + } + + PA_LOGL_; + + return paNoError; +} + +/* NOT USED +static PaError PinGetState(PaWinWdmPin* pin, KSSTATE* state) +{ + PaError result; + + if( state == NULL ) + return paInternalError; + if( pin == NULL ) + return paInternalError; + if( pin->handle == NULL ) + return paInternalError; + + result = WdmGetPropertySimple( + pin->handle, + KSPROPSETID_Connection, + KSPROPERTY_CONNECTION_STATE, + state, + sizeof(KSSTATE), + NULL, + 0); + + return result; +} +*/ +static PaError PinSetFormat(PaWinWdmPin* pin, const WAVEFORMATEX* format) +{ + unsigned long size; + void* newConnect; + + PA_LOGE_; + + if( pin == NULL ) + return paInternalError; + if( format == NULL ) + return paInternalError; + + size = GetWfexSize(format) + sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT_WAVEFORMATEX) - sizeof(WAVEFORMATEX); + + if( pin->pinConnectSize != size ) + { + newConnect = PaUtil_AllocateMemory( size ); + if( newConnect == NULL ) + return paInsufficientMemory; + memcpy( newConnect, (void*)pin->pinConnect, min(pin->pinConnectSize,size) ); + PaUtil_FreeMemory( pin->pinConnect ); + pin->pinConnect = (KSPIN_CONNECT*)newConnect; + pin->pinConnectSize = size; + pin->ksDataFormatWfx = (KSDATAFORMAT_WAVEFORMATEX*)((KSPIN_CONNECT*)newConnect + 1); + pin->ksDataFormatWfx->DataFormat.FormatSize = size - sizeof(KSPIN_CONNECT); + } + + memcpy( (void*)&(pin->ksDataFormatWfx->WaveFormatEx), format, GetWfexSize(format) ); + pin->ksDataFormatWfx->DataFormat.SampleSize = (unsigned short)(format->nChannels * (format->wBitsPerSample / 8)); + + PA_LOGL_; + + return paNoError; +} + +static PaError PinIsFormatSupported(PaWinWdmPin* pin, const WAVEFORMATEX* format) +{ + KSDATARANGE_AUDIO* dataRange; + unsigned long count; + GUID guid = DYNAMIC_GUID( DEFINE_WAVEFORMATEX_GUID(format->wFormatTag) ); + PaError result = paInvalidDevice; + + PA_LOGE_; + + if( format->wFormatTag == WAVE_FORMAT_EXTENSIBLE ) + { + guid = ((WAVEFORMATEXTENSIBLE*)format)->SubFormat; + } + dataRange = (KSDATARANGE_AUDIO*)pin->dataRanges; + for(count = 0; countdataRangesItem->Count; count++) + { + if(( !memcmp(&(dataRange->DataRange.MajorFormat),&KSDATAFORMAT_TYPE_AUDIO,sizeof(GUID)) ) || + ( !memcmp(&(dataRange->DataRange.MajorFormat),&KSDATAFORMAT_TYPE_WILDCARD,sizeof(GUID)) )) + { + /* This is an audio or wildcard datarange... */ + if(( !memcmp(&(dataRange->DataRange.SubFormat),&KSDATAFORMAT_SUBTYPE_WILDCARD,sizeof(GUID)) ) || + ( !memcmp(&(dataRange->DataRange.SubFormat),&guid,sizeof(GUID)) )) + { + if(( !memcmp(&(dataRange->DataRange.Specifier),&KSDATAFORMAT_SPECIFIER_WILDCARD,sizeof(GUID)) ) || + ( !memcmp(&(dataRange->DataRange.Specifier),&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX,sizeof(GUID) ))) + { + + PA_DEBUG(("Pin:%x, DataRange:%d\n",(void*)pin,count)); + PA_DEBUG(("\tFormatSize:%d, SampleSize:%d\n",dataRange->DataRange.FormatSize,dataRange->DataRange.SampleSize)); + PA_DEBUG(("\tMaxChannels:%d\n",dataRange->MaximumChannels)); + PA_DEBUG(("\tBits:%d-%d\n",dataRange->MinimumBitsPerSample,dataRange->MaximumBitsPerSample)); + PA_DEBUG(("\tSampleRate:%d-%d\n",dataRange->MinimumSampleFrequency,dataRange->MaximumSampleFrequency)); + + if( dataRange->MaximumChannels < format->nChannels ) + { + result = paInvalidChannelCount; + continue; + } + if( dataRange->MinimumBitsPerSample > format->wBitsPerSample ) + { + result = paSampleFormatNotSupported; + continue; + } + if( dataRange->MaximumBitsPerSample < format->wBitsPerSample ) + { + result = paSampleFormatNotSupported; + continue; + } + if( dataRange->MinimumSampleFrequency > format->nSamplesPerSec ) + { + result = paInvalidSampleRate; + continue; + } + if( dataRange->MaximumSampleFrequency < format->nSamplesPerSec ) + { + result = paInvalidSampleRate; + continue; + } + /* Success! */ + PA_LOGL_; + return paNoError; + } + } + } + dataRange = (KSDATARANGE_AUDIO*)( ((char*)dataRange) + dataRange->DataRange.FormatSize); + } + + PA_LOGL_; + + return result; +} + +/** + * Create a new filter object + */ +static PaWinWdmFilter* FilterNew(TCHAR* filterName, TCHAR* friendlyName, PaError* error) +{ + PaWinWdmFilter* filter; + PaError result; + int pinId; + int valid; + + + /* Allocate the new filter object */ + filter = (PaWinWdmFilter*)PaUtil_AllocateMemory( sizeof(PaWinWdmFilter) ); + if( !filter ) + { + result = paInsufficientMemory; + goto error; + } + + /* Zero the filter object - done by AllocateMemory */ + /* memset( (void*)filter, 0, sizeof(PaWinWdmFilter) ); */ + + /* Copy the filter name */ + _tcsncpy(filter->filterName, filterName, MAX_PATH); + + /* Copy the friendly name */ + _tcsncpy(filter->friendlyName, friendlyName, MAX_PATH); + + /* Open the filter handle */ + result = FilterUse(filter); + if( result != paNoError ) + { + goto error; + } + + /* Get pin count */ + result = WdmGetPinPropertySimple + ( + filter->handle, + 0, + &KSPROPSETID_Pin, + KSPROPERTY_PIN_CTYPES, + &filter->pinCount, + sizeof(filter->pinCount) + ); + + if( result != paNoError) + { + goto error; + } + + /* Allocate pointer array to hold the pins */ + filter->pins = (PaWinWdmPin**)PaUtil_AllocateMemory( sizeof(PaWinWdmPin*) * filter->pinCount ); + if( !filter->pins ) + { + result = paInsufficientMemory; + goto error; + } + + /* Create all the pins we can */ + filter->maxInputChannels = 0; + filter->maxOutputChannels = 0; + filter->bestSampleRate = 0; + + valid = 0; + for(pinId = 0; pinId < filter->pinCount; pinId++) + { + /* Create the pin with this Id */ + PaWinWdmPin* newPin; + newPin = PinNew(filter, pinId, &result); + if( result == paInsufficientMemory ) + goto error; + if( newPin != NULL ) + { + filter->pins[pinId] = newPin; + valid = 1; + + /* Get the max output channel count */ + if(( newPin->dataFlow == KSPIN_DATAFLOW_IN ) && + (( newPin->communication == KSPIN_COMMUNICATION_SINK) || + ( newPin->communication == KSPIN_COMMUNICATION_BOTH))) + { + if(newPin->maxChannels > filter->maxOutputChannels) + filter->maxOutputChannels = newPin->maxChannels; + filter->formats |= newPin->formats; + } + /* Get the max input channel count */ + if(( newPin->dataFlow == KSPIN_DATAFLOW_OUT ) && + (( newPin->communication == KSPIN_COMMUNICATION_SINK) || + ( newPin->communication == KSPIN_COMMUNICATION_BOTH))) + { + if(newPin->maxChannels > filter->maxInputChannels) + filter->maxInputChannels = newPin->maxChannels; + filter->formats |= newPin->formats; + } + + if(newPin->bestSampleRate > filter->bestSampleRate) + { + filter->bestSampleRate = newPin->bestSampleRate; + } + } + } + + if(( filter->maxInputChannels == 0) && ( filter->maxOutputChannels == 0)) + { + /* No input or output... not valid */ + valid = 0; + } + + if( !valid ) + { + /* No valid pin was found on this filter so we destroy it */ + result = paDeviceUnavailable; + goto error; + } + + /* Close the filter handle for now + * It will be opened later when needed */ + FilterRelease(filter); + + *error = paNoError; + return filter; + +error: + /* + Error cleanup + */ + if( filter ) + { + for( pinId = 0; pinId < filter->pinCount; pinId++ ) + PinFree(filter->pins[pinId]); + PaUtil_FreeMemory( filter->pins ); + if( filter->handle ) + CloseHandle( filter->handle ); + PaUtil_FreeMemory( filter ); + } + *error = result; + return NULL; +} + +/** + * Free a previously created filter + */ +static void FilterFree(PaWinWdmFilter* filter) +{ + int pinId; + PA_LOGL_; + if( filter ) + { + for( pinId = 0; pinId < filter->pinCount; pinId++ ) + PinFree(filter->pins[pinId]); + PaUtil_FreeMemory( filter->pins ); + if( filter->handle ) + CloseHandle( filter->handle ); + PaUtil_FreeMemory( filter ); + } + PA_LOGE_; +} + +/** + * Reopen the filter handle if necessary so it can be used + **/ +static PaError FilterUse(PaWinWdmFilter* filter) +{ + assert( filter ); + + PA_LOGE_; + if( filter->handle == NULL ) + { + /* Open the filter */ + filter->handle = CreateFile( + filter->filterName, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, + NULL); + + if( filter->handle == NULL ) + { + return paDeviceUnavailable; + } + } + filter->usageCount++; + PA_LOGL_; + return paNoError; +} + +/** + * Release the filter handle if nobody is using it + **/ +static void FilterRelease(PaWinWdmFilter* filter) +{ + assert( filter ); + assert( filter->usageCount > 0 ); + + PA_LOGE_; + filter->usageCount--; + if( filter->usageCount == 0 ) + { + if( filter->handle != NULL ) + { + CloseHandle( filter->handle ); + filter->handle = NULL; + } + } + PA_LOGL_; +} + +/** + * Create a render (playback) Pin using the supplied format + **/ +static PaWinWdmPin* FilterCreateRenderPin(PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error) +{ + PaError result; + PaWinWdmPin* pin; + + assert( filter ); + + pin = FilterFindViableRenderPin(filter,wfex,&result); + if(!pin) + { + goto error; + } + result = PinSetFormat(pin,wfex); + if( result != paNoError ) + { + goto error; + } + result = PinInstantiate(pin); + if( result != paNoError ) + { + goto error; + } + + *error = paNoError; + return pin; + +error: + *error = result; + return NULL; +} + +/** + * Find a pin that supports the given format + **/ +static PaWinWdmPin* FilterFindViableRenderPin(PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error) +{ + int pinId; + PaWinWdmPin* pin; + PaError result = paDeviceUnavailable; + *error = paNoError; + + assert( filter ); + + for( pinId = 0; pinIdpinCount; pinId++ ) + { + pin = filter->pins[pinId]; + if( pin != NULL ) + { + if(( pin->dataFlow == KSPIN_DATAFLOW_IN ) && + (( pin->communication == KSPIN_COMMUNICATION_SINK) || + ( pin->communication == KSPIN_COMMUNICATION_BOTH))) + { + result = PinIsFormatSupported( pin, wfex ); + if( result == paNoError ) + { + return pin; + } + } + } + } + + *error = result; + return NULL; +} + +/** + * Check if there is a pin that should playback + * with the supplied format + **/ +static PaError FilterCanCreateRenderPin(PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex) +{ + PaWinWdmPin* pin; + PaError result; + + assert ( filter ); + + pin = FilterFindViableRenderPin(filter,wfex,&result); + /* result will be paNoError if pin found + * or else an error code indicating what is wrong with the format + **/ + return result; +} + +/** + * Create a capture (record) Pin using the supplied format + **/ +static PaWinWdmPin* FilterCreateCapturePin(PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error) +{ + PaError result; + PaWinWdmPin* pin; + + assert( filter ); + + pin = FilterFindViableCapturePin(filter,wfex,&result); + if(!pin) + { + goto error; + } + + result = PinSetFormat(pin,wfex); + if( result != paNoError ) + { + goto error; + } + + result = PinInstantiate(pin); + if( result != paNoError ) + { + goto error; + } + + *error = paNoError; + return pin; + +error: + *error = result; + return NULL; +} + +/** + * Find a capture pin that supports the given format + **/ +static PaWinWdmPin* FilterFindViableCapturePin(PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex, + PaError* error) +{ + int pinId; + PaWinWdmPin* pin; + PaError result = paDeviceUnavailable; + *error = paNoError; + + assert( filter ); + + for( pinId = 0; pinIdpinCount; pinId++ ) + { + pin = filter->pins[pinId]; + if( pin != NULL ) + { + if(( pin->dataFlow == KSPIN_DATAFLOW_OUT ) && + (( pin->communication == KSPIN_COMMUNICATION_SINK) || + ( pin->communication == KSPIN_COMMUNICATION_BOTH))) + { + result = PinIsFormatSupported( pin, wfex ); + if( result == paNoError ) + { + return pin; + } + } + } + } + + *error = result; + return NULL; +} + +/** + * Check if there is a pin that should playback + * with the supplied format + **/ +static PaError FilterCanCreateCapturePin(PaWinWdmFilter* filter, + const WAVEFORMATEX* wfex) +{ + PaWinWdmPin* pin; + PaError result; + + assert ( filter ); + + pin = FilterFindViableCapturePin(filter,wfex,&result); + /* result will be paNoError if pin found + * or else an error code indicating what is wrong with the format + **/ + return result; +} + +/** + * Build the list of available filters + * Use the SetupDi API to enumerate all devices in the KSCATEGORY_AUDIO which + * have a KSCATEGORY_RENDER or KSCATEGORY_CAPTURE alias. For each of these + * devices initialise a PaWinWdmFilter structure by calling our NewFilter() + * function. We enumerate devices twice, once to count how many there are, + * and once to initialize the PaWinWdmFilter structures. + */ +static PaError BuildFilterList(PaWinWdmHostApiRepresentation* wdmHostApi) +{ + PaError result = paNoError; + HDEVINFO handle = NULL; + int device; + int invalidDevices; + int slot; + SP_DEVICE_INTERFACE_DATA interfaceData; + SP_DEVICE_INTERFACE_DATA aliasData; + SP_DEVINFO_DATA devInfoData; + int noError; + const int sizeInterface = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + (MAX_PATH * sizeof(WCHAR)); + unsigned char interfaceDetailsArray[sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + (MAX_PATH * sizeof(WCHAR))]; + SP_DEVICE_INTERFACE_DETAIL_DATA* devInterfaceDetails = (SP_DEVICE_INTERFACE_DETAIL_DATA*)interfaceDetailsArray; + TCHAR friendlyName[MAX_PATH]; + HKEY hkey; + DWORD sizeFriendlyName; + DWORD type; + PaWinWdmFilter* newFilter; + GUID* category = (GUID*)&KSCATEGORY_AUDIO; + GUID* alias_render = (GUID*)&KSCATEGORY_RENDER; + GUID* alias_capture = (GUID*)&KSCATEGORY_CAPTURE; + DWORD hasAlias; + + PA_LOGE_; + + devInterfaceDetails->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); + + /* Open a handle to search for devices (filters) */ + handle = SetupDiGetClassDevs(category,NULL,NULL,DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); + if( handle == NULL ) + { + return paUnanticipatedHostError; + } + PA_DEBUG(("Setup called\n")); + + /* First let's count the number of devices so we can allocate a list */ + invalidDevices = 0; + for( device = 0;;device++ ) + { + interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + interfaceData.Reserved = 0; + aliasData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + aliasData.Reserved = 0; + noError = SetupDiEnumDeviceInterfaces(handle,NULL,category,device,&interfaceData); + PA_DEBUG(("Enum called\n")); + if( !noError ) + break; /* No more devices */ + + /* Check this one has the render or capture alias */ + hasAlias = 0; + noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_render,&aliasData); + PA_DEBUG(("noError = %d\n",noError)); + if(noError) + { + if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED))) + { + PA_DEBUG(("Device %d has render alias\n",device)); + hasAlias |= 1; /* Has render alias */ + } + else + { + PA_DEBUG(("Device %d has no render alias\n",device)); + } + } + noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_capture,&aliasData); + if(noError) + { + if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED))) + { + PA_DEBUG(("Device %d has capture alias\n",device)); + hasAlias |= 2; /* Has capture alias */ + } + else + { + PA_DEBUG(("Device %d has no capture alias\n",device)); + } + } + if(!hasAlias) + invalidDevices++; /* This was not a valid capture or render audio device */ + + } + /* Remember how many there are */ + wdmHostApi->filterCount = device-invalidDevices; + + PA_DEBUG(("Interfaces found: %d\n",device-invalidDevices)); + + /* Now allocate the list of pointers to devices */ + wdmHostApi->filters = (PaWinWdmFilter**)PaUtil_AllocateMemory( sizeof(PaWinWdmFilter*) * device ); + if( !wdmHostApi->filters ) + { + if(handle != NULL) + SetupDiDestroyDeviceInfoList(handle); + return paInsufficientMemory; + } + + /* Now create filter objects for each interface found */ + slot = 0; + for( device = 0;;device++ ) + { + interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + interfaceData.Reserved = 0; + aliasData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + aliasData.Reserved = 0; + devInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + devInfoData.Reserved = 0; + + noError = SetupDiEnumDeviceInterfaces(handle,NULL,category,device,&interfaceData); + if( !noError ) + break; /* No more devices */ + + /* Check this one has the render or capture alias */ + hasAlias = 0; + noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_render,&aliasData); + if(noError) + { + if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED))) + { + PA_DEBUG(("Device %d has render alias\n",device)); + hasAlias |= 1; /* Has render alias */ + } + } + noError = SetupDiGetDeviceInterfaceAlias(handle,&interfaceData,alias_capture,&aliasData); + if(noError) + { + if(aliasData.Flags && (!(aliasData.Flags & SPINT_REMOVED))) + { + PA_DEBUG(("Device %d has capture alias\n",device)); + hasAlias |= 2; /* Has capture alias */ + } + } + if(!hasAlias) + continue; /* This was not a valid capture or render audio device */ + + noError = SetupDiGetDeviceInterfaceDetail(handle,&interfaceData,devInterfaceDetails,sizeInterface,NULL,&devInfoData); + if( noError ) + { + /* Try to get the "friendly name" for this interface */ + sizeFriendlyName = sizeof(friendlyName); + /* Fix contributed by Ben Allison + * Removed KEY_SET_VALUE from flags on following call + * as its causes failure when running without admin rights + * and it was not required */ + hkey=SetupDiOpenDeviceInterfaceRegKey(handle,&interfaceData,0,KEY_QUERY_VALUE); + if(hkey!=INVALID_HANDLE_VALUE) + { + noError = RegQueryValueEx(hkey,TEXT("FriendlyName"),0,&type,(BYTE*)friendlyName,&sizeFriendlyName); + if( noError == ERROR_SUCCESS ) + { + PA_DEBUG(("Interface %d, Name: %s\n",device,friendlyName)); + RegCloseKey(hkey); + } + else + { + friendlyName[0] = 0; + } + } + newFilter = FilterNew(devInterfaceDetails->DevicePath,friendlyName,&result); + if( result == paNoError ) + { + PA_DEBUG(("Filter created\n")); + wdmHostApi->filters[slot] = newFilter; + slot++; + } + else + { + PA_DEBUG(("Filter NOT created\n")); + /* As there are now less filters than we initially thought + * we must reduce the count by one */ + wdmHostApi->filterCount--; + } + } + } + + /* Clean up */ + if(handle != NULL) + SetupDiDestroyDeviceInfoList(handle); + + return paNoError; +} + +PaError PaWinWdm_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + int i, deviceCount; + PaWinWdmHostApiRepresentation *wdmHostApi; + PaWinWdmDeviceInfo *deviceInfoArray; + PaWinWdmFilter* pFilter; + PaWinWdmDeviceInfo *wdmDeviceInfo; + PaDeviceInfo *deviceInfo; + + PA_LOGE_; + + /* + Attempt to load the KSUSER.DLL without which we cannot create pins + We will unload this on termination + */ + if(DllKsUser == NULL) + { + DllKsUser = LoadLibrary(TEXT("ksuser.dll")); + if(DllKsUser == NULL) + goto error; + } + + FunctionKsCreatePin = (KSCREATEPIN*)GetProcAddress(DllKsUser, "KsCreatePin"); + if(FunctionKsCreatePin == NULL) + goto error; + + wdmHostApi = (PaWinWdmHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinWdmHostApiRepresentation) ); + if( !wdmHostApi ) + { + result = paInsufficientMemory; + goto error; + } + + wdmHostApi->allocations = PaUtil_CreateAllocationGroup(); + if( !wdmHostApi->allocations ) + { + result = paInsufficientMemory; + goto error; + } + + result = BuildFilterList( wdmHostApi ); + if( result != paNoError ) + { + goto error; + } + deviceCount = wdmHostApi->filterCount; + + *hostApi = &wdmHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paWDMKS; + (*hostApi)->info.name = "Windows WDM-KS"; + (*hostApi)->info.defaultInputDevice = paNoDevice; + (*hostApi)->info.defaultOutputDevice = paNoDevice; + + if( deviceCount > 0 ) + { + (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + wdmHostApi->allocations, sizeof(PaWinWdmDeviceInfo*) * deviceCount ); + if( !(*hostApi)->deviceInfos ) + { + result = paInsufficientMemory; + goto error; + } + + /* allocate all device info structs in a contiguous block */ + deviceInfoArray = (PaWinWdmDeviceInfo*)PaUtil_GroupAllocateMemory( + wdmHostApi->allocations, sizeof(PaWinWdmDeviceInfo) * deviceCount ); + if( !deviceInfoArray ) + { + result = paInsufficientMemory; + goto error; + } + + for( i=0; i < deviceCount; ++i ) + { + wdmDeviceInfo = &deviceInfoArray[i]; + deviceInfo = &wdmDeviceInfo->inheritedDeviceInfo; + pFilter = wdmHostApi->filters[i]; + if( pFilter == NULL ) + continue; + wdmDeviceInfo->filter = pFilter; + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + deviceInfo->name = (char*)pFilter->friendlyName; + PA_DEBUG(("Device found name: %s\n",(char*)pFilter->friendlyName)); + deviceInfo->maxInputChannels = pFilter->maxInputChannels; + if(deviceInfo->maxInputChannels > 0) + { + /* Set the default input device to the first device we find with + * more than zero input channels + **/ + if((*hostApi)->info.defaultInputDevice == paNoDevice) + { + (*hostApi)->info.defaultInputDevice = i; + } + } + + deviceInfo->maxOutputChannels = pFilter->maxOutputChannels; + if(deviceInfo->maxOutputChannels > 0) + { + /* Set the default output device to the first device we find with + * more than zero output channels + **/ + if((*hostApi)->info.defaultOutputDevice == paNoDevice) + { + (*hostApi)->info.defaultOutputDevice = i; + } + } + + /* These low values are not very useful because + * a) The lowest latency we end up with can depend on many factors such + * as the device buffer sizes/granularities, sample rate, channels and format + * b) We cannot know the device buffer sizes until we try to open/use it at + * a particular setting + * So: we give 512x48000Hz frames as the default low input latency + **/ + deviceInfo->defaultLowInputLatency = (512.0/48000.0); + deviceInfo->defaultLowOutputLatency = (512.0/48000.0); + deviceInfo->defaultHighInputLatency = (4096.0/48000.0); + deviceInfo->defaultHighOutputLatency = (4096.0/48000.0); + deviceInfo->defaultSampleRate = (double)(pFilter->bestSampleRate); + + (*hostApi)->deviceInfos[i] = deviceInfo; + } + } + + (*hostApi)->info.deviceCount = deviceCount; + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &wdmHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &wdmHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + PA_LOGL_; + return result; + +error: + if( DllKsUser != NULL ) + { + FreeLibrary( DllKsUser ); + DllKsUser = NULL; + } + + if( wdmHostApi ) + { + PaUtil_FreeMemory( wdmHostApi->filters ); + if( wdmHostApi->allocations ) + { + PaUtil_FreeAllAllocations( wdmHostApi->allocations ); + PaUtil_DestroyAllocationGroup( wdmHostApi->allocations ); + } + PaUtil_FreeMemory( wdmHostApi ); + } + PA_LOGL_; + return result; +} + + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaWinWdmHostApiRepresentation *wdmHostApi = (PaWinWdmHostApiRepresentation*)hostApi; + int i; + PA_LOGE_; + + if( wdmHostApi->filters ) + { + for( i=0; ifilterCount; i++) + { + if( wdmHostApi->filters[i] != NULL ) + { + FilterFree( wdmHostApi->filters[i] ); + wdmHostApi->filters[i] = NULL; + } + } + } + PaUtil_FreeMemory( wdmHostApi->filters ); + if( wdmHostApi->allocations ) + { + PaUtil_FreeAllAllocations( wdmHostApi->allocations ); + PaUtil_DestroyAllocationGroup( wdmHostApi->allocations ); + } + PaUtil_FreeMemory( wdmHostApi ); + PA_LOGL_; +} + +static void FillWFEXT( WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount) +{ + PA_LOGE_; + PA_DEBUG(( "sampleFormat = %lx\n" , sampleFormat )); + PA_DEBUG(( "sampleRate = %f\n" , sampleRate )); + PA_DEBUG(( "chanelCount = %d\n", channelCount )); + + pwfext->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; + pwfext->Format.nChannels = channelCount; + pwfext->Format.nSamplesPerSec = (int)sampleRate; + if(channelCount == 1) + pwfext->dwChannelMask = KSAUDIO_SPEAKER_DIRECTOUT; + else + pwfext->dwChannelMask = KSAUDIO_SPEAKER_STEREO; + if(sampleFormat == paFloat32) + { + pwfext->Format.nBlockAlign = channelCount * 4; + pwfext->Format.wBitsPerSample = 32; + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 32; + pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; + } + else if(sampleFormat == paInt32) + { + pwfext->Format.nBlockAlign = channelCount * 4; + pwfext->Format.wBitsPerSample = 32; + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 32; + pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; + } + else if(sampleFormat == paInt24) + { + pwfext->Format.nBlockAlign = channelCount * 3; + pwfext->Format.wBitsPerSample = 24; + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 24; + pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; + } + else if(sampleFormat == paInt16) + { + pwfext->Format.nBlockAlign = channelCount * 2; + pwfext->Format.wBitsPerSample = 16; + pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX); + pwfext->Samples.wValidBitsPerSample = 16; + pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; + } + pwfext->Format.nAvgBytesPerSec = pwfext->Format.nSamplesPerSec * pwfext->Format.nBlockAlign; + + PA_LOGL_; +} + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaWinWdmHostApiRepresentation *wdmHostApi = (PaWinWdmHostApiRepresentation*)hostApi; + PaWinWdmFilter* pFilter; + int result = paFormatIsSupported; + WAVEFORMATEXTENSIBLE wfx; + + PA_LOGE_; + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( inputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support inputChannelCount */ + if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if( inputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + + /* Check that the input format is supported */ + FillWFEXT(&wfx,paInt16,sampleRate,inputChannelCount); + + pFilter = wdmHostApi->filters[inputParameters->device]; + result = FilterCanCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx); + if( result != paNoError ) + { + /* Try a WAVE_FORMAT_PCM instead */ + wfx.Format.wFormatTag = WAVE_FORMAT_PCM; + wfx.Format.cbSize = 0; + wfx.Samples.wValidBitsPerSample = 0; + wfx.dwChannelMask = 0; + wfx.SubFormat = GUID_NULL; + result = FilterCanCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx); + if( result != paNoError ) + return result; + } + } + else + { + inputChannelCount = 0; + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( outputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support outputChannelCount */ + if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if( outputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + + /* Check that the output format is supported */ + FillWFEXT(&wfx,paInt16,sampleRate,outputChannelCount); + + pFilter = wdmHostApi->filters[outputParameters->device]; + result = FilterCanCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx); + if( result != paNoError ) + { + /* Try a WAVE_FORMAT_PCM instead */ + wfx.Format.wFormatTag = WAVE_FORMAT_PCM; + wfx.Format.cbSize = 0; + wfx.Samples.wValidBitsPerSample = 0; + wfx.dwChannelMask = 0; + wfx.SubFormat = GUID_NULL; + result = FilterCanCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx); + if( result != paNoError ) + return result; + } + + } + else + { + outputChannelCount = 0; + } + + /* + IMPLEMENT ME: + + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported if necessary + + - check that the device supports sampleRate + + Because the buffer adapter handles conversion between all standard + sample formats, the following checks are only required if paCustomFormat + is implemented, or under some other unusual conditions. + + - check that input device can support inputSampleFormat, or that + we have the capability to convert from inputSampleFormat to + a native format + + - check that output device can support outputSampleFormat, or that + we have the capability to convert from outputSampleFormat to + a native format + */ + if((inputChannelCount == 0)&&(outputChannelCount == 0)) + result = paSampleFormatNotSupported; /* Not right error */ + + PA_LOGL_; + return result; +} + +/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */ + +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result = paNoError; + PaWinWdmHostApiRepresentation *wdmHostApi = (PaWinWdmHostApiRepresentation*)hostApi; + PaWinWdmStream *stream = 0; + /* unsigned long framesPerHostBuffer; these may not be equivalent for all implementations */ + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat; + int userInputChannels,userOutputChannels; + int size; + PaWinWdmFilter* pFilter; + WAVEFORMATEXTENSIBLE wfx; + + PA_LOGE_; + PA_DEBUG(("OpenStream:sampleRate = %f\n",sampleRate)); + PA_DEBUG(("OpenStream:framesPerBuffer = %lu\n",framesPerBuffer)); + + if( inputParameters ) + { + userInputChannels = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that input device can support stream->userInputChannels */ + if( userInputChannels > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) + return paInvalidChannelCount; + + /* validate inputStreamInfo */ + if( inputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + + } + else + { + userInputChannels = 0; + inputSampleFormat = hostInputSampleFormat = paInt16; /* Surpress 'uninitialised var' warnings. */ + } + + if( outputParameters ) + { + userOutputChannels = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + + /* unless alternate device specification is supported, reject the use of + paUseHostApiSpecificDeviceSpecification */ + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + /* check that output device can support stream->userInputChannels */ + if( userOutputChannels > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) + return paInvalidChannelCount; + + /* validate outputStreamInfo */ + if( outputParameters->hostApiSpecificStreamInfo ) + return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ + + } + else + { + userOutputChannels = 0; + outputSampleFormat = hostOutputSampleFormat = paInt16; /* Surpress 'uninitialized var' warnings. */ + } + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform specific flag */ + + stream = (PaWinWdmStream*)PaUtil_AllocateMemory( sizeof(PaWinWdmStream) ); + if( !stream ) + { + result = paInsufficientMemory; + goto error; + } + /* Zero the stream object */ + /* memset((void*)stream,0,sizeof(PaWinWdmStream)); */ + + if( streamCallback ) + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &wdmHostApi->callbackStreamInterface, streamCallback, userData ); + } + else + { + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + &wdmHostApi->blockingStreamInterface, streamCallback, userData ); + } + + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + /* Instantiate the input pin if necessary */ + if(userInputChannels > 0) + { + result = paSampleFormatNotSupported; + pFilter = wdmHostApi->filters[inputParameters->device]; + stream->userInputChannels = userInputChannels; + + if(((inputSampleFormat & ~paNonInterleaved) & pFilter->formats) != 0) + { /* inputSampleFormat is supported, so try to use it */ + hostInputSampleFormat = inputSampleFormat; + FillWFEXT(&wfx, hostInputSampleFormat, sampleRate, stream->userInputChannels); + stream->bytesPerInputFrame = wfx.Format.nBlockAlign; + stream->recordingPin = FilterCreateCapturePin(pFilter, (const WAVEFORMATEX*)&wfx, &result); + stream->deviceInputChannels = stream->userInputChannels; + } + + if(result != paNoError) + { /* Search through all PaSampleFormats to find one that works */ + hostInputSampleFormat = paFloat32; + + do { + FillWFEXT(&wfx, hostInputSampleFormat, sampleRate, stream->userInputChannels); + stream->bytesPerInputFrame = wfx.Format.nBlockAlign; + stream->recordingPin = FilterCreateCapturePin(pFilter, (const WAVEFORMATEX*)&wfx, &result); + stream->deviceInputChannels = stream->userInputChannels; + + if(stream->recordingPin == NULL) result = paSampleFormatNotSupported; + if(result != paNoError) hostInputSampleFormat <<= 1; + } + while(result != paNoError && hostInputSampleFormat <= paUInt8); + } + + if(result != paNoError) + { /* None of the PaSampleFormats worked. Set the hostInputSampleFormat to the best fit + * and try a PCM format. + **/ + hostInputSampleFormat = + PaUtil_SelectClosestAvailableFormat( pFilter->formats, inputSampleFormat ); + + /* Try a WAVE_FORMAT_PCM instead */ + wfx.Format.wFormatTag = WAVE_FORMAT_PCM; + wfx.Format.cbSize = 0; + wfx.Samples.wValidBitsPerSample = 0; + wfx.dwChannelMask = 0; + wfx.SubFormat = GUID_NULL; + stream->recordingPin = FilterCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx,&result); + if(stream->recordingPin == NULL) result = paSampleFormatNotSupported; + } + + if( result != paNoError ) + { + /* Some or all KS devices can only handle the exact number of channels + * they specify. But PortAudio clients expect to be able to + * at least specify mono I/O on a multi-channel device + * If this is the case, then we will do the channel mapping internally + **/ + if( stream->userInputChannels < pFilter->maxInputChannels ) + { + FillWFEXT(&wfx,hostInputSampleFormat,sampleRate,pFilter->maxInputChannels); + stream->bytesPerInputFrame = wfx.Format.nBlockAlign; + stream->recordingPin = FilterCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx,&result); + stream->deviceInputChannels = pFilter->maxInputChannels; + + if( result != paNoError ) + { + /* Try a WAVE_FORMAT_PCM instead */ + wfx.Format.wFormatTag = WAVE_FORMAT_PCM; + wfx.Format.cbSize = 0; + wfx.Samples.wValidBitsPerSample = 0; + wfx.dwChannelMask = 0; + wfx.SubFormat = GUID_NULL; + stream->recordingPin = FilterCreateCapturePin(pFilter,(const WAVEFORMATEX*)&wfx,&result); + } + } + } + + if(stream->recordingPin == NULL) + { + goto error; + } + + switch(hostInputSampleFormat) + { + case paInt16: stream->inputSampleSize = 2; break; + case paInt24: stream->inputSampleSize = 3; break; + case paInt32: + case paFloat32: stream->inputSampleSize = 4; break; + } + + stream->recordingPin->frameSize /= stream->bytesPerInputFrame; + PA_DEBUG(("Pin output frames: %d\n",stream->recordingPin->frameSize)); + } + else + { + stream->recordingPin = NULL; + stream->bytesPerInputFrame = 0; + } + + /* Instantiate the output pin if necessary */ + if(userOutputChannels > 0) + { + result = paSampleFormatNotSupported; + pFilter = wdmHostApi->filters[outputParameters->device]; + stream->userOutputChannels = userOutputChannels; + + if(((outputSampleFormat & ~paNonInterleaved) & pFilter->formats) != 0) + { + hostOutputSampleFormat = outputSampleFormat; + FillWFEXT(&wfx,hostOutputSampleFormat,sampleRate,stream->userOutputChannels); + stream->bytesPerOutputFrame = wfx.Format.nBlockAlign; + stream->playbackPin = FilterCreateRenderPin(pFilter,(WAVEFORMATEX*)&wfx,&result); + stream->deviceOutputChannels = stream->userOutputChannels; + } + + if(result != paNoError) + { + hostOutputSampleFormat = paFloat32; + + do { + FillWFEXT(&wfx,hostOutputSampleFormat,sampleRate,stream->userOutputChannels); + stream->bytesPerOutputFrame = wfx.Format.nBlockAlign; + stream->playbackPin = FilterCreateRenderPin(pFilter,(WAVEFORMATEX*)&wfx,&result); + stream->deviceOutputChannels = stream->userOutputChannels; + + if(stream->playbackPin == NULL) result = paSampleFormatNotSupported; + if(result != paNoError) hostOutputSampleFormat <<= 1; + } + while(result != paNoError && hostOutputSampleFormat <= paUInt8); + } + + if(result != paNoError) + { + hostOutputSampleFormat = + PaUtil_SelectClosestAvailableFormat( pFilter->formats, outputSampleFormat ); + + /* Try a WAVE_FORMAT_PCM instead */ + wfx.Format.wFormatTag = WAVE_FORMAT_PCM; + wfx.Format.cbSize = 0; + wfx.Samples.wValidBitsPerSample = 0; + wfx.dwChannelMask = 0; + wfx.SubFormat = GUID_NULL; + stream->playbackPin = FilterCreateRenderPin(pFilter,(WAVEFORMATEX*)&wfx,&result); + if(stream->playbackPin == NULL) result = paSampleFormatNotSupported; + } + + if( result != paNoError ) + { + /* Some or all KS devices can only handle the exact number of channels + * they specify. But PortAudio clients expect to be able to + * at least specify mono I/O on a multi-channel device + * If this is the case, then we will do the channel mapping internally + **/ + if( stream->userOutputChannels < pFilter->maxOutputChannels ) + { + FillWFEXT(&wfx,hostOutputSampleFormat,sampleRate,pFilter->maxOutputChannels); + stream->bytesPerOutputFrame = wfx.Format.nBlockAlign; + stream->playbackPin = FilterCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx,&result); + stream->deviceOutputChannels = pFilter->maxOutputChannels; + if( result != paNoError ) + { + /* Try a WAVE_FORMAT_PCM instead */ + wfx.Format.wFormatTag = WAVE_FORMAT_PCM; + wfx.Format.cbSize = 0; + wfx.Samples.wValidBitsPerSample = 0; + wfx.dwChannelMask = 0; + wfx.SubFormat = GUID_NULL; + stream->playbackPin = FilterCreateRenderPin(pFilter,(const WAVEFORMATEX*)&wfx,&result); + } + } + } + + if(stream->playbackPin == NULL) + { + goto error; + } + + switch(hostOutputSampleFormat) + { + case paInt16: stream->outputSampleSize = 2; break; + case paInt24: stream->outputSampleSize = 3; break; + case paInt32: + case paFloat32: stream->outputSampleSize = 4; break; + } + + stream->playbackPin->frameSize /= stream->bytesPerOutputFrame; + PA_DEBUG(("Pin output frames: %d\n",stream->playbackPin->frameSize)); + } + else + { + stream->playbackPin = NULL; + stream->bytesPerOutputFrame = 0; + } + + /* Calculate the framesPerHostXxxxBuffer size based upon the suggested latency values */ + + /* Record the buffer length */ + if(inputParameters) + { + /* Calculate the frames from the user's value - add a bit to round up */ + stream->framesPerHostIBuffer = (unsigned long)((inputParameters->suggestedLatency*sampleRate)+0.0001); + if(stream->framesPerHostIBuffer > (unsigned long)sampleRate) + { /* Upper limit is 1 second */ + stream->framesPerHostIBuffer = (unsigned long)sampleRate; + } + else if(stream->framesPerHostIBuffer < stream->recordingPin->frameSize) + { + stream->framesPerHostIBuffer = stream->recordingPin->frameSize; + } + PA_DEBUG(("Input frames chosen:%ld\n",stream->framesPerHostIBuffer)); + } + + if(outputParameters) + { + /* Calculate the frames from the user's value - add a bit to round up */ + stream->framesPerHostOBuffer = (unsigned long)((outputParameters->suggestedLatency*sampleRate)+0.0001); + if(stream->framesPerHostOBuffer > (unsigned long)sampleRate) + { /* Upper limit is 1 second */ + stream->framesPerHostOBuffer = (unsigned long)sampleRate; + } + else if(stream->framesPerHostOBuffer < stream->playbackPin->frameSize) + { + stream->framesPerHostOBuffer = stream->playbackPin->frameSize; + } + PA_DEBUG(("Output frames chosen:%ld\n",stream->framesPerHostOBuffer)); + } + + /* Host buffer size is bounded to the largest of the input and output + frame sizes */ + + result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + stream->userInputChannels, inputSampleFormat, hostInputSampleFormat, + stream->userOutputChannels, outputSampleFormat, hostOutputSampleFormat, + sampleRate, streamFlags, framesPerBuffer, + max(stream->framesPerHostOBuffer,stream->framesPerHostIBuffer), + paUtilBoundedHostBufferSize, + streamCallback, userData ); + if( result != paNoError ) + goto error; + + stream->streamRepresentation.streamInfo.inputLatency = + ((double)stream->framesPerHostIBuffer) / sampleRate; + stream->streamRepresentation.streamInfo.outputLatency = + ((double)stream->framesPerHostOBuffer) / sampleRate; + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + PA_DEBUG(("BytesPerInputFrame = %d\n",stream->bytesPerInputFrame)); + PA_DEBUG(("BytesPerOutputFrame = %d\n",stream->bytesPerOutputFrame)); + + /* Allocate all the buffers for host I/O */ + size = 2 * (stream->framesPerHostIBuffer*stream->bytesPerInputFrame + stream->framesPerHostOBuffer*stream->bytesPerOutputFrame); + PA_DEBUG(("Buffer size = %d\n",size)); + stream->hostBuffer = (char*)PaUtil_AllocateMemory(size); + PA_DEBUG(("Buffer allocated\n")); + if( !stream->hostBuffer ) + { + PA_DEBUG(("Cannot allocate host buffer!\n")); + result = paInsufficientMemory; + goto error; + } + PA_DEBUG(("Buffer start = %p\n",stream->hostBuffer)); + /* memset(stream->hostBuffer,0,size); */ + + /* Set up the packets */ + stream->events[0] = CreateEvent(NULL, FALSE, FALSE, NULL); + ResetEvent(stream->events[0]); /* Record buffer 1 */ + stream->events[1] = CreateEvent(NULL, FALSE, FALSE, NULL); + ResetEvent(stream->events[1]); /* Record buffer 2 */ + stream->events[2] = CreateEvent(NULL, FALSE, FALSE, NULL); + ResetEvent(stream->events[2]); /* Play buffer 1 */ + stream->events[3] = CreateEvent(NULL, FALSE, FALSE, NULL); + ResetEvent(stream->events[3]); /* Play buffer 2 */ + stream->events[4] = CreateEvent(NULL, FALSE, FALSE, NULL); + ResetEvent(stream->events[4]); /* Abort event */ + if(stream->userInputChannels > 0) + { + DATAPACKET *p = &(stream->packets[0]); + p->Signal.hEvent = stream->events[0]; + p->Header.Data = stream->hostBuffer; + p->Header.FrameExtent = stream->framesPerHostIBuffer*stream->bytesPerInputFrame; + p->Header.DataUsed = 0; + p->Header.Size = sizeof(p->Header); + p->Header.PresentationTime.Numerator = 1; + p->Header.PresentationTime.Denominator = 1; + + p = &(stream->packets[1]); + p->Signal.hEvent = stream->events[1]; + p->Header.Data = stream->hostBuffer + stream->framesPerHostIBuffer*stream->bytesPerInputFrame; + p->Header.FrameExtent = stream->framesPerHostIBuffer*stream->bytesPerInputFrame; + p->Header.DataUsed = 0; + p->Header.Size = sizeof(p->Header); + p->Header.PresentationTime.Numerator = 1; + p->Header.PresentationTime.Denominator = 1; + } + if(stream->userOutputChannels > 0) + { + DATAPACKET *p = &(stream->packets[2]); + p->Signal.hEvent = stream->events[2]; + p->Header.Data = stream->hostBuffer + 2*stream->framesPerHostIBuffer*stream->bytesPerInputFrame; + p->Header.FrameExtent = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame; + p->Header.DataUsed = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame; + p->Header.Size = sizeof(p->Header); + p->Header.PresentationTime.Numerator = 1; + p->Header.PresentationTime.Denominator = 1; + + p = &(stream->packets[3]); + p->Signal.hEvent = stream->events[3]; + p->Header.Data = stream->hostBuffer + 2*stream->framesPerHostIBuffer*stream->bytesPerInputFrame + stream->framesPerHostOBuffer*stream->bytesPerOutputFrame; + p->Header.FrameExtent = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame; + p->Header.DataUsed = stream->framesPerHostOBuffer*stream->bytesPerOutputFrame; + p->Header.Size = sizeof(p->Header); + p->Header.PresentationTime.Numerator = 1; + p->Header.PresentationTime.Denominator = 1; + } + + stream->streamStarted = 0; + stream->streamActive = 0; + stream->streamStop = 0; + stream->streamAbort = 0; + stream->streamFlags = streamFlags; + stream->oldProcessPriority = REALTIME_PRIORITY_CLASS; + + *s = (PaStream*)stream; + + PA_LOGL_; + return result; + +error: + size = 5; + while(size--) + { + if(stream->events[size] != NULL) + { + CloseHandle(stream->events[size]); + stream->events[size] = NULL; + } + } + if(stream->hostBuffer) + PaUtil_FreeMemory( stream->hostBuffer ); + + if(stream->playbackPin) + PinClose(stream->playbackPin); + if(stream->recordingPin) + PinClose(stream->recordingPin); + + if( stream ) + PaUtil_FreeMemory( stream ); + + PA_LOGL_; + return result; +} + +/* + When CloseStream() is called, the multi-api layer ensures that + the stream has already been stopped or aborted. +*/ +static PaError CloseStream( PaStream* s ) +{ + PaError result = paNoError; + PaWinWdmStream *stream = (PaWinWdmStream*)s; + int size; + + PA_LOGE_; + + assert(!stream->streamStarted); + assert(!stream->streamActive); + + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + size = 5; + while(size--) + { + if(stream->events[size] != NULL) + { + CloseHandle(stream->events[size]); + stream->events[size] = NULL; + } + } + if(stream->hostBuffer) + PaUtil_FreeMemory( stream->hostBuffer ); + + if(stream->playbackPin) + PinClose(stream->playbackPin); + if(stream->recordingPin) + PinClose(stream->recordingPin); + + PaUtil_FreeMemory( stream ); + + PA_LOGL_; + return result; +} + +/* +Write the supplied packet to the pin +Asynchronous +Should return false on success +*/ +static BOOL PinWrite(HANDLE h, DATAPACKET* p) +{ + unsigned long cbReturned = 0; + return DeviceIoControl(h,IOCTL_KS_WRITE_STREAM,NULL,0, + &p->Header,p->Header.Size,&cbReturned,&p->Signal); +} + +/* +Read to the supplied packet from the pin +Asynchronous +Should return false on success +*/ +static BOOL PinRead(HANDLE h, DATAPACKET* p) +{ + unsigned long cbReturned = 0; + return DeviceIoControl(h,IOCTL_KS_READ_STREAM,NULL,0, + &p->Header,p->Header.Size,&cbReturned,&p->Signal); +} + +/* +Copy the first interleaved channel of 16 bit data to the other channels +*/ +static void DuplicateFirstChannelInt16(void* buffer, int channels, int samples) +{ + unsigned short* data = (unsigned short*)buffer; + int channel; + unsigned short sourceSample; + while( samples-- ) + { + sourceSample = *data++; + channel = channels-1; + while( channel-- ) + { + *data++ = sourceSample; + } + } +} + +/* +Copy the first interleaved channel of 24 bit data to the other channels +*/ +static void DuplicateFirstChannelInt24(void* buffer, int channels, int samples) +{ + unsigned char* data = (unsigned char*)buffer; + int channel; + unsigned char sourceSample[3]; + while( samples-- ) + { + sourceSample[0] = data[0]; + sourceSample[1] = data[1]; + sourceSample[2] = data[2]; + data += 3; + channel = channels-1; + while( channel-- ) + { + data[0] = sourceSample[0]; + data[1] = sourceSample[1]; + data[2] = sourceSample[2]; + data += 3; + } + } +} + +/* +Copy the first interleaved channel of 32 bit data to the other channels +*/ +static void DuplicateFirstChannelInt32(void* buffer, int channels, int samples) +{ + unsigned long* data = (unsigned long*)buffer; + int channel; + unsigned long sourceSample; + while( samples-- ) + { + sourceSample = *data++; + channel = channels-1; + while( channel-- ) + { + *data++ = sourceSample; + } + } +} + +static DWORD WINAPI ProcessingThread(LPVOID pParam) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)pParam; + PaStreamCallbackTimeInfo ti; + int cbResult = paContinue; + int inbuf = 0; + int outbuf = 0; + int pending = 0; + PaError result; + unsigned long wait; + unsigned long eventSignaled; + int fillPlaybuf = 0; + int emptyRecordbuf = 0; + int framesProcessed; + unsigned long timeout; + int i; + int doChannelCopy; + int priming = 0; + PaStreamCallbackFlags underover = 0; + + PA_LOGE_; + + ti.inputBufferAdcTime = 0.0; + ti.currentTime = 0.0; + ti.outputBufferDacTime = 0.0; + + /* Get double buffering going */ + + /* Submit buffers */ + if(stream->playbackPin) + { + result = PinSetState(stream->playbackPin, KSSTATE_RUN); + + PA_DEBUG(("play state run = %d;",(int)result)); + SetEvent(stream->events[outbuf+2]); + outbuf = (outbuf+1)&1; + SetEvent(stream->events[outbuf+2]); + outbuf = (outbuf+1)&1; + pending += 2; + priming += 4; + } + if(stream->recordingPin) + { + result = PinSetState(stream->recordingPin, KSSTATE_RUN); + + PA_DEBUG(("recording state run = %d;",(int)result)); + PinRead(stream->recordingPin->handle,&stream->packets[inbuf]); + inbuf = (inbuf+1)&1; /* Increment and wrap */ + PinRead(stream->recordingPin->handle,&stream->packets[inbuf]); + inbuf = (inbuf+1)&1; /* Increment and wrap */ + /* FIXME - do error checking */ + pending += 2; + } + PA_DEBUG(("Out buffer len:%f\n",(2000*stream->framesPerHostOBuffer) / stream->streamRepresentation.streamInfo.sampleRate)); + PA_DEBUG(("In buffer len:%f\n",(2000*stream->framesPerHostIBuffer) / stream->streamRepresentation.streamInfo.sampleRate)); + timeout = max( + ((2000*(DWORD)stream->framesPerHostOBuffer) / (DWORD)stream->streamRepresentation.streamInfo.sampleRate), + ((2000*(DWORD)stream->framesPerHostIBuffer) / (DWORD)stream->streamRepresentation.streamInfo.sampleRate)); + timeout = max(timeout,1); + PA_DEBUG(("Timeout = %ld\n",timeout)); + + while(!stream->streamAbort) + { + fillPlaybuf = 0; + emptyRecordbuf = 0; + + /* Wait for next input or output buffer to be finished with*/ + assert(pending>0); + + if(stream->streamStop) + { + PA_DEBUG(("ss1:pending=%d ",pending)); + } + wait = WaitForMultipleObjects(5, stream->events, FALSE, 0); + if( wait == WAIT_TIMEOUT ) + { + /* No (under|over)flow has ocurred */ + wait = WaitForMultipleObjects(5, stream->events, FALSE, timeout); + eventSignaled = wait - WAIT_OBJECT_0; + } + else + { + eventSignaled = wait - WAIT_OBJECT_0; + if( eventSignaled < 2 ) + { + underover |= paInputOverflow; + PA_DEBUG(("Input overflow\n")); + } + else if(( eventSignaled < 4 )&&(!priming)) + { + underover |= paOutputUnderflow; + PA_DEBUG(("Output underflow\n")); + } + } + + if(stream->streamStop) + { + PA_DEBUG(("ss2:wait=%ld",wait)); + } + if(wait == WAIT_FAILED) + { + PA_DEBUG(("Wait fail = %ld! ",wait)); + break; + } + if(wait == WAIT_TIMEOUT) + { + continue; + } + + if(eventSignaled < 2) + { /* Recording input buffer has been filled */ + if(stream->playbackPin) + { + /* First check if also the next playback buffer has been signaled */ + wait = WaitForSingleObject(stream->events[outbuf+2],0); + if(wait == WAIT_OBJECT_0) + { + /* Yes, so do both buffers at same time */ + fillPlaybuf = 1; + pending--; + /* Was this an underflow situation? */ + if( underover ) + underover |= paOutputUnderflow; /* Yes! */ + } + } + emptyRecordbuf = 1; + pending--; + } + else if(eventSignaled < 4) + { /* Playback output buffer has been emptied */ + if(stream->recordingPin) + { + /* First check if also the next recording buffer has been signaled */ + wait = WaitForSingleObject(stream->events[inbuf],0); + if(wait == WAIT_OBJECT_0) + { /* Yes, so do both buffers at same time */ + emptyRecordbuf = 1; + pending--; + /* Was this an overflow situation? */ + if( underover ) + underover |= paInputOverflow; /* Yes! */ + } + } + fillPlaybuf = 1; + pending--; + } + else + { + /* Abort event! */ + assert(stream->streamAbort); /* Should have been set */ + PA_DEBUG(("ABORTING ")); + break; + } + ResetEvent(stream->events[eventSignaled]); + + if(stream->streamStop) + { + PA_DEBUG(("Stream stop! pending=%d",pending)); + cbResult = paComplete; /* Stop, but play remaining buffers */ + } + + /* Do necessary buffer processing (which will invoke user callback if necessary */ + doChannelCopy = 0; + if(cbResult==paContinue) + { + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + if((stream->bufferProcessor.hostInputFrameCount[0] + stream->bufferProcessor.hostInputFrameCount[1]) == + (stream->bufferProcessor.hostOutputFrameCount[0] + stream->bufferProcessor.hostOutputFrameCount[1]) ) + PaUtil_BeginBufferProcessing(&stream->bufferProcessor,&ti,underover); + underover = 0; /* Reset the (under|over)flow status */ + if(fillPlaybuf) + { + PaUtil_SetOutputFrameCount(&stream->bufferProcessor,0); + if( stream->userOutputChannels == 1 ) + { + /* Write the single user channel to the first interleaved block */ + PaUtil_SetOutputChannel(&stream->bufferProcessor,0,stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels); + /* We will do a copy to the other channels after the data has been written */ + doChannelCopy = 1; + } + else + { + for(i=0;iuserOutputChannels;i++) + { + /* Only write the user output channels. Leave the rest blank */ + PaUtil_SetOutputChannel(&stream->bufferProcessor,i,((unsigned char*)(stream->packets[outbuf+2].Header.Data))+(i*stream->outputSampleSize),stream->deviceOutputChannels); + } + } + } + if(emptyRecordbuf) + { + PaUtil_SetInputFrameCount(&stream->bufferProcessor,stream->packets[inbuf].Header.DataUsed/stream->bytesPerInputFrame); + for(i=0;iuserInputChannels;i++) + { + /* Only read as many channels as the user wants */ + PaUtil_SetInputChannel(&stream->bufferProcessor,i,((unsigned char*)(stream->packets[inbuf].Header.Data))+(i*stream->inputSampleSize),stream->deviceInputChannels); + } + } + + if (stream->recordingPin && stream->playbackPin) /* full duplex */ + { + /* Only call the EndBufferProcessing function when the total input frames == total output frames */ + + if((stream->bufferProcessor.hostInputFrameCount[0] + stream->bufferProcessor.hostInputFrameCount[1]) == + (stream->bufferProcessor.hostOutputFrameCount[0] + stream->bufferProcessor.hostOutputFrameCount[1]) ) + { + framesProcessed = PaUtil_EndBufferProcessing(&stream->bufferProcessor,&cbResult); + } + else + { + framesProcessed = 0; + } + } + else + { + framesProcessed = PaUtil_EndBufferProcessing(&stream->bufferProcessor,&cbResult); + } + + if( doChannelCopy ) + { + /* Copy the first output channel to the other channels */ + switch(stream->outputSampleSize) + { + case 2: + DuplicateFirstChannelInt16(stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels,stream->framesPerHostOBuffer); + break; + case 3: + DuplicateFirstChannelInt24(stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels,stream->framesPerHostOBuffer); + break; + case 4: + DuplicateFirstChannelInt32(stream->packets[outbuf+2].Header.Data,stream->deviceOutputChannels,stream->framesPerHostOBuffer); + break; + default: + assert(0); /* Unsupported format! */ + break; + } + } + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + } + else + { + fillPlaybuf = 0; + emptyRecordbuf = 0; + } + + /* + if(cbResult != paContinue) + { + PA_DEBUG(("cbResult=%d, pending=%d:",cbResult,pending)); + } + */ + /* Submit buffers */ + if((fillPlaybuf)&&(cbResult!=paAbort)) + { + if(!PinWrite(stream->playbackPin->handle,&stream->packets[outbuf+2])) + outbuf = (outbuf+1)&1; /* Increment and wrap */ + pending++; + if( priming ) + priming--; /* Have to prime twice */ + } + if((emptyRecordbuf)&&(cbResult==paContinue)) + { + stream->packets[inbuf].Header.DataUsed = 0; /* Reset for reuse */ + PinRead(stream->recordingPin->handle,&stream->packets[inbuf]); + inbuf = (inbuf+1)&1; /* Increment and wrap */ + pending++; + } + if(pending==0) + { + PA_DEBUG(("pending==0 finished...;")); + break; + } + if((!stream->playbackPin)&&(cbResult!=paContinue)) + { + PA_DEBUG(("record only cbResult=%d...;",cbResult)); + break; + } + } + + PA_DEBUG(("Finished thread")); + + /* Finished, either normally or aborted */ + if(stream->playbackPin) + { + result = PinSetState(stream->playbackPin, KSSTATE_PAUSE); + result = PinSetState(stream->playbackPin, KSSTATE_STOP); + } + if(stream->recordingPin) + { + result = PinSetState(stream->recordingPin, KSSTATE_PAUSE); + result = PinSetState(stream->recordingPin, KSSTATE_STOP); + } + + stream->streamActive = 0; + + if((!stream->streamStop)&&(!stream->streamAbort)) + { + /* Invoke the user stream finished callback */ + /* Only do it from here if not being stopped/aborted by user */ + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } + stream->streamStop = 0; + stream->streamAbort = 0; + + /* Reset process priority if necessary */ + if(stream->oldProcessPriority != REALTIME_PRIORITY_CLASS) + { + SetPriorityClass(GetCurrentProcess(),stream->oldProcessPriority); + stream->oldProcessPriority = REALTIME_PRIORITY_CLASS; + } + + PA_LOGL_; + EXIT_THREAD; + return 0; +} + +static PaError StartStream( PaStream *s ) +{ + PaError result = paNoError; + PaWinWdmStream *stream = (PaWinWdmStream*)s; + DWORD dwID; + BOOL ret; + int size; + + PA_LOGE_; + + stream->streamStop = 0; + stream->streamAbort = 0; + size = 5; + while(size--) + { + if(stream->events[size] != NULL) + { + ResetEvent(stream->events[size]); + } + } + + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + + stream->oldProcessPriority = GetPriorityClass(GetCurrentProcess()); + /* Uncomment the following line to enable dynamic boosting of the process + * priority to real time for best low latency support + * Disabled by default because RT processes can easily block the OS */ + /*ret = SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS); + PA_DEBUG(("Class ret = %d;",ret));*/ + + stream->streamStarted = 1; + stream->streamThread = (HANDLE)_beginthreadex(NULL, 0, ProcessingThread, stream, 0, &dwID); + if(stream->streamThread == NULL) + { + stream->streamStarted = 0; + result = paInsufficientMemory; + goto end; + } + ret = SetThreadPriority(stream->streamThread,THREAD_PRIORITY_TIME_CRITICAL); + PA_DEBUG(("Priority ret = %d;",ret)); + /* Make the stream active */ + stream->streamActive = 1; + +end: + PA_LOGL_; + return result; +} + + +static PaError StopStream( PaStream *s ) +{ + PaError result = paNoError; + PaWinWdmStream *stream = (PaWinWdmStream*)s; + int doCb = 0; + + PA_LOGE_; + + if(stream->streamActive) + { + doCb = 1; + stream->streamStop = 1; + while(stream->streamActive) + { + PA_DEBUG(("W.")); + Sleep(10); /* Let thread sleep for 10 msec */ + } + } + + PA_DEBUG(("Terminating thread")); + if(stream->streamStarted && stream->streamThread) + { + TerminateThread(stream->streamThread,0); + stream->streamThread = NULL; + } + + stream->streamStarted = 0; + + if(stream->oldProcessPriority != REALTIME_PRIORITY_CLASS) + { + SetPriorityClass(GetCurrentProcess(),stream->oldProcessPriority); + stream->oldProcessPriority = REALTIME_PRIORITY_CLASS; + } + + if(doCb) + { + /* Do user callback now after all state has been reset */ + /* This means it should be safe for the called function */ + /* to invoke e.g. StartStream */ + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } + + PA_LOGL_; + return result; +} + +static PaError AbortStream( PaStream *s ) +{ + PaError result = paNoError; + PaWinWdmStream *stream = (PaWinWdmStream*)s; + int doCb = 0; + + PA_LOGE_; + + if(stream->streamActive) + { + doCb = 1; + stream->streamAbort = 1; + SetEvent(stream->events[4]); /* Signal immediately */ + while(stream->streamActive) + { + Sleep(10); + } + } + + if(stream->streamStarted && stream->streamThread) + { + TerminateThread(stream->streamThread,0); + stream->streamThread = NULL; + } + + stream->streamStarted = 0; + + if(stream->oldProcessPriority != REALTIME_PRIORITY_CLASS) + { + SetPriorityClass(GetCurrentProcess(),stream->oldProcessPriority); + stream->oldProcessPriority = REALTIME_PRIORITY_CLASS; + } + + if(doCb) + { + /* Do user callback now after all state has been reset */ + /* This means it should be safe for the called function */ + /* to invoke e.g. StartStream */ + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + } + + stream->streamActive = 0; + stream->streamStarted = 0; + + PA_LOGL_; + return result; +} + + +static PaError IsStreamStopped( PaStream *s ) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)s; + int result = 0; + + PA_LOGE_; + + if(!stream->streamStarted) + result = 1; + + PA_LOGL_; + return result; +} + + +static PaError IsStreamActive( PaStream *s ) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)s; + int result = 0; + + PA_LOGE_; + + if(stream->streamActive) + result = 1; + + PA_LOGL_; + return result; +} + + +static PaTime GetStreamTime( PaStream* s ) +{ + PA_LOGE_; + PA_LOGL_; + (void)s; + return PaUtil_GetTime(); +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)s; + double result; + PA_LOGE_; + result = PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); + PA_LOGL_; + return result; +} + + +/* + As separate stream interfaces are used for blocking and callback + streams, the following functions can be guaranteed to only be called + for blocking streams. +*/ + +static PaError ReadStream( PaStream* s, + void *buffer, + unsigned long frames ) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)s; + + PA_LOGE_; + + /* suppress unused variable warnings */ + (void) buffer; + (void) frames; + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + PA_LOGL_; + return paNoError; +} + + +static PaError WriteStream( PaStream* s, + const void *buffer, + unsigned long frames ) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)s; + + PA_LOGE_; + + /* suppress unused variable warnings */ + (void) buffer; + (void) frames; + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + PA_LOGL_; + return paNoError; +} + + +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)s; + + PA_LOGE_; + + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + PA_LOGL_; + return 0; +} + + +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaWinWdmStream *stream = (PaWinWdmStream*)s; + + PA_LOGE_; + /* suppress unused variable warnings */ + (void) stream; + + /* IMPLEMENT ME, see portaudio.h for required behavior*/ + PA_LOGL_; + return 0; +} \ No newline at end of file diff --git a/Externals/portaudio/src/hostapi/wdmks/readme.txt b/Externals/portaudio/src/hostapi/wdmks/readme.txt new file mode 100644 index 0000000000..1a381fe79f --- /dev/null +++ b/Externals/portaudio/src/hostapi/wdmks/readme.txt @@ -0,0 +1,82 @@ +Notes about WDM-KS host API +--------------------------- + +Status history +-------------- +10th November 2005: +Made following changes: + * OpenStream: Try all PaSampleFormats internally if the the chosen + format is not supported natively. This fixed several problems + with soundcards that soundcards that did not take kindly to + using 24-bit 3-byte formats. + * OpenStream: Make the minimum framesPerHostIBuffer (and framesPerHostOBuffer) + the default frameSize for the playback/recording pin. + * ProcessingThread: Added a switch to only call PaUtil_EndBufferProcessing + if the total input frames equals the total output frames + +5th September 2004: +This is the first public version of the code. It should be considered +an alpha release with zero guarantee not to crash on any particular +system. So far it has only been tested in the author's development +environment, which means a Win2k/SP2 PIII laptop with integrated +SoundMAX driver and USB Tascam US-428 compiled with both MinGW +(GCC 3.3) and MSVC++6 using the MS DirectX 9 SDK. +It has been most widely tested with the MinGW build, with most of the +test programs (particularly paqa_devs and paqa_errs) passing. +There are some notable failures: patest_out_underflow and both of the +blocking I/O tests (as blocking I/O is not implemented). +At this point the code needs to be tested with a much wider variety +of configurations and feedback provided from testers regarding +both working and failing cases. + +What is the WDM-KS host API? +---------------------------- +PortAudio for Windows currently has 3 functional host implementations. +MME uses the oldest Windows audio API which does not offer good +play/record latency. +DirectX improves this, but still imposes a penalty +of 10s of milliseconds due to the system mixing of streams from +multiple applications. +ASIO offers very good latency, but requires special drivers which are +not always available for cheaper audio hardware. Also, when ASIO +drivers are available, they are not always so robust because they +bypass all of the standardised Windows device driver architecture +and hit the hardware their own way. +Alternatively there are a couple of free (but closed source) ASIO +implementations which connect to the lower level Windows +"Kernel Streaming" API, but again these require special installation +by the user, and can be limited in functionality or difficult to use. + +This is where the PortAudio "WDM-KS" host implementation comes in. +It directly connects PortAudio to the same Kernel Streaming API which +those ASIO bridges use. This avoids the mixing penatly of DirectX, +giving at least as good latency as any ASIO driver, but it has the +advantage of working with ANY Windows audio hardware which is available +through the normal MME/DirectX routes without the user requiring +any additional device drivers to be installed, and allowing all +device selection to be done through the normal PortAudio API. + +Note that in general you should only be using this host API if your +application has a real requirement for very low latency audio (<20ms), +either because you are generating sounds in real-time based upon +user input, or you a processing recorded audio in real time. + +The only thing to be aware of is that using the KS interface will +block that device from being used by the rest of system through +the higher level APIs, or conversely, if the system is using +a device, the KS API will not be able to use it. MS recommend that +you should keep the device open only when your application has focus. +In PortAudio terms, this means having a stream Open on a WDMKS device. + +Usage +----- +To add the WDMKS backend to your program which is already using +PortAudio, you must undefine PA_NO_WDMKS from your build file, +and include the pa_win_wdmks\pa_win_wdmks.c into your build. +The file should compile in both C and C++. +You will need a DirectX SDK installed on your system for the +ks.h and ksmedia.h header files. +You will need to link to the system "setupapi" library. +Note that if you use MinGW, you will get more warnings from +the DX header files when using GCC(C), and still a few warnings +with G++(CPP). \ No newline at end of file diff --git a/Externals/portaudio/src/hostapi/wmme/pa_win_wmme.c b/Externals/portaudio/src/hostapi/wmme/pa_win_wmme.c new file mode 100644 index 0000000000..ec891a94ed --- /dev/null +++ b/Externals/portaudio/src/hostapi/wmme/pa_win_wmme.c @@ -0,0 +1,4007 @@ +/* + * $Id: pa_win_wmme.c 1739 2011-08-25 07:15:31Z rossb $ + * pa_win_wmme.c + * Implementation of PortAudio for Windows MultiMedia Extensions (WMME) + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Authors: Ross Bencina and Phil Burk + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/* Modification History: + PLB = Phil Burk + JM = Julien Maillard + RDB = Ross Bencina + PLB20010402 - sDevicePtrs now allocates based on sizeof(pointer) + PLB20010413 - check for excessive numbers of channels + PLB20010422 - apply Mike Berry's changes for CodeWarrior on PC + including conditional inclusion of memory.h, + and explicit typecasting on memory allocation + PLB20010802 - use GlobalAlloc for sDevicesPtr instead of PaHost_AllocFastMemory + PLB20010816 - pass process instead of thread to SetPriorityClass() + PLB20010927 - use number of frames instead of real-time for CPULoad calculation. + JM20020118 - prevent hung thread when buffers underflow. + PLB20020321 - detect Win XP versus NT, 9x; fix DBUG typo; removed init of CurrentCount + RDB20020411 - various renaming cleanups, factored streamData alloc and cpu usage init + RDB20020417 - stopped counting WAVE_MAPPER when there were no real devices + refactoring, renaming and fixed a few edge case bugs + RDB20020531 - converted to V19 framework + ** NOTE maintanance history is now stored in CVS ** +*/ + +/** @file + @ingroup hostapi_src + + @brief Win32 host API implementation for the Windows MultiMedia Extensions (WMME) audio API. +*/ + +/* + How it works: + + For both callback and blocking read/write streams we open the MME devices + in CALLBACK_EVENT mode. In this mode, MME signals an Event object whenever + it has finished with a buffer (either filled it for input, or played it + for output). Where necessary, we block waiting for Event objects using + WaitMultipleObjects(). + + When implementing a PA callback stream, we set up a high priority thread + which waits on the MME buffer Events and drains/fills the buffers when + they are ready. + + When implementing a PA blocking read/write stream, we simply wait on these + Events (when necessary) inside the ReadStream() and WriteStream() functions. +*/ + +#include +#include +#include +#include +#include +#ifndef UNDER_CE +#include +#endif +#include +/* PLB20010422 - "memory.h" doesn't work on CodeWarrior for PC. Thanks Mike Berry for the mod. */ +#ifndef __MWERKS__ +#include +#include +#endif /* __MWERKS__ */ + +#include "portaudio.h" +#include "pa_trace.h" +#include "pa_util.h" +#include "pa_allocation.h" +#include "pa_hostapi.h" +#include "pa_stream.h" +#include "pa_cpuload.h" +#include "pa_process.h" +#include "pa_debugprint.h" + +#include "pa_win_wmme.h" +#include "pa_win_waveformat.h" + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO +#include "pa_win_wdmks_utils.h" +#ifndef DRV_QUERYDEVICEINTERFACE +#define DRV_QUERYDEVICEINTERFACE (DRV_RESERVED + 12) +#endif +#ifndef DRV_QUERYDEVICEINTERFACESIZE +#define DRV_QUERYDEVICEINTERFACESIZE (DRV_RESERVED + 13) +#endif +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + +/* use CreateThread for CYGWIN, _beginthreadex for all others */ +#if !defined(__CYGWIN__) && !defined(_WIN32_WCE) +#define CREATE_THREAD (HANDLE)_beginthreadex( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId ) +#define PA_THREAD_FUNC static unsigned WINAPI +#define PA_THREAD_ID unsigned +#else +#define CREATE_THREAD CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId ) +#define PA_THREAD_FUNC static DWORD WINAPI +#define PA_THREAD_ID DWORD +#endif +#if (defined(_WIN32_WCE)) +#pragma comment(lib, "Coredll.lib") +#elif (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */ +#pragma comment(lib, "winmm.lib") +#endif + +/* + provided in newer platform sdks + */ +#ifndef DWORD_PTR + #if defined(_WIN64) + #define DWORD_PTR unsigned __int64 + #else + #define DWORD_PTR unsigned long + #endif +#endif + +/************************************************* Constants ********/ + +#define PA_MME_USE_HIGH_DEFAULT_LATENCY_ (0) /* For debugging glitches. */ + +#if PA_MME_USE_HIGH_DEFAULT_LATENCY_ + #define PA_MME_WIN_9X_DEFAULT_LATENCY_ (0.4) + #define PA_MME_MIN_HOST_OUTPUT_BUFFER_COUNT_ (4) + #define PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_FULL_DUPLEX_ (4) + #define PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_HALF_DUPLEX_ (4) + #define PA_MME_HOST_BUFFER_GRANULARITY_FRAMES_WHEN_UNSPECIFIED_ (16) + #define PA_MME_MAX_HOST_BUFFER_SECS_ (0.3) /* Do not exceed unless user buffer exceeds */ + #define PA_MME_MAX_HOST_BUFFER_BYTES_ (32 * 1024) /* Has precedence over PA_MME_MAX_HOST_BUFFER_SECS_, some drivers are known to crash with buffer sizes > 32k */ +#else + #define PA_MME_WIN_9X_DEFAULT_LATENCY_ (0.2) + #define PA_MME_MIN_HOST_OUTPUT_BUFFER_COUNT_ (2) + #define PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_FULL_DUPLEX_ (3) /* always use at least 3 input buffers for full duplex */ + #define PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_HALF_DUPLEX_ (2) + #define PA_MME_HOST_BUFFER_GRANULARITY_FRAMES_WHEN_UNSPECIFIED_ (16) + #define PA_MME_MAX_HOST_BUFFER_SECS_ (0.1) /* Do not exceed unless user buffer exceeds */ + #define PA_MME_MAX_HOST_BUFFER_BYTES_ (32 * 1024) /* Has precedence over PA_MME_MAX_HOST_BUFFER_SECS_, some drivers are known to crash with buffer sizes > 32k */ +#endif + +/* Use higher latency for NT because it is even worse at real-time + operation than Win9x. +*/ +#define PA_MME_WIN_NT_DEFAULT_LATENCY_ (0.4) + +/* Default low latency for WDM based systems. This is based on a rough + survey of workable latency settings using patest_wmme_find_best_latency_params.c. + See pdf attached to ticket 185 for a graph of the survey results: + http://www.portaudio.com/trac/ticket/185 + + Workable latencies varied between 40ms and ~80ms on different systems (different + combinations of hardware, 32 and 64 bit, WinXP, Vista and Win7. We didn't + get enough Vista results to know if Vista has systemically worse latency. + For now we choose a safe value across all Windows versions here. +*/ +#define PA_MME_WIN_WDM_DEFAULT_LATENCY_ (0.090) + + +/* When client suggestedLatency could result in many host buffers, we aim to have around 8, + based off Windows documentation that suggests that the kmixer uses 8 buffers. This choice + is somewhat arbitrary here, since we havn't observed significant stability degredation + with using either more, or less buffers. +*/ +#define PA_MME_TARGET_HOST_BUFFER_COUNT_ 8 + +#define PA_MME_MIN_TIMEOUT_MSEC_ (1000) + +static const char constInputMapperSuffix_[] = " - Input"; +static const char constOutputMapperSuffix_[] = " - Output"; + +/* +copies TCHAR string to explicit char string +*/ +char *StrTCpyToC(char *to, const TCHAR *from) +{ +#if !defined(_UNICODE) && !defined(UNICODE) + return strcpy(to, from); +#else + int count = wcslen(from); + if (count != 0) + if (WideCharToMultiByte(CP_ACP, 0, from, count, to, count, NULL, NULL) == 0) + return NULL; + return to; +#endif +} + +/* +returns length of TCHAR string +*/ +size_t StrTLen(const TCHAR *str) +{ +#if !defined(_UNICODE) && !defined(UNICODE) + return strlen(str); +#else + return wcslen(str); +#endif +} + +/********************************************************************/ + +typedef struct PaWinMmeStream PaWinMmeStream; /* forward declaration */ + +/* prototypes for functions declared in this file */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** stream, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ); +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ); +static PaError CloseStream( PaStream* stream ); +static PaError StartStream( PaStream *stream ); +static PaError StopStream( PaStream *stream ); +static PaError AbortStream( PaStream *stream ); +static PaError IsStreamStopped( PaStream *s ); +static PaError IsStreamActive( PaStream *stream ); +static PaTime GetStreamTime( PaStream *stream ); +static double GetStreamCpuLoad( PaStream* stream ); +static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); +static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); +static signed long GetStreamReadAvailable( PaStream* stream ); +static signed long GetStreamWriteAvailable( PaStream* stream ); + + +/* macros for setting last host error information */ + +#ifdef UNICODE + +#define PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ) \ + { \ + wchar_t mmeErrorTextWide[ MAXERRORLENGTH ]; \ + char mmeErrorText[ MAXERRORLENGTH ]; \ + waveInGetErrorText( mmresult, mmeErrorTextWide, MAXERRORLENGTH ); \ + WideCharToMultiByte( CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR,\ + mmeErrorTextWide, -1, mmeErrorText, MAXERRORLENGTH, NULL, NULL ); \ + PaUtil_SetLastHostErrorInfo( paMME, mmresult, mmeErrorText ); \ + } + +#define PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ) \ + { \ + wchar_t mmeErrorTextWide[ MAXERRORLENGTH ]; \ + char mmeErrorText[ MAXERRORLENGTH ]; \ + waveOutGetErrorText( mmresult, mmeErrorTextWide, MAXERRORLENGTH ); \ + WideCharToMultiByte( CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR,\ + mmeErrorTextWide, -1, mmeErrorText, MAXERRORLENGTH, NULL, NULL ); \ + PaUtil_SetLastHostErrorInfo( paMME, mmresult, mmeErrorText ); \ + } + +#else /* !UNICODE */ + +#define PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ) \ + { \ + char mmeErrorText[ MAXERRORLENGTH ]; \ + waveInGetErrorText( mmresult, mmeErrorText, MAXERRORLENGTH ); \ + PaUtil_SetLastHostErrorInfo( paMME, mmresult, mmeErrorText ); \ + } + +#define PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ) \ + { \ + char mmeErrorText[ MAXERRORLENGTH ]; \ + waveOutGetErrorText( mmresult, mmeErrorText, MAXERRORLENGTH ); \ + PaUtil_SetLastHostErrorInfo( paMME, mmresult, mmeErrorText ); \ + } + +#endif /* UNICODE */ + + +static void PaMme_SetLastSystemError( DWORD errorCode ) +{ + char *lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + errorCode, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + PaUtil_SetLastHostErrorInfo( paMME, errorCode, lpMsgBuf ); + LocalFree( lpMsgBuf ); +} + +#define PA_MME_SET_LAST_SYSTEM_ERROR( errorCode ) \ + PaMme_SetLastSystemError( errorCode ) + + +/* PaError returning wrappers for some commonly used win32 functions + note that we allow passing a null ptr to have no effect. +*/ + +static PaError CreateEventWithPaError( HANDLE *handle, + LPSECURITY_ATTRIBUTES lpEventAttributes, + BOOL bManualReset, + BOOL bInitialState, + LPCTSTR lpName ) +{ + PaError result = paNoError; + + *handle = NULL; + + *handle = CreateEvent( lpEventAttributes, bManualReset, bInitialState, lpName ); + if( *handle == NULL ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_SYSTEM_ERROR( GetLastError() ); + } + + return result; +} + + +static PaError ResetEventWithPaError( HANDLE handle ) +{ + PaError result = paNoError; + + if( handle ) + { + if( ResetEvent( handle ) == 0 ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_SYSTEM_ERROR( GetLastError() ); + } + } + + return result; +} + + +static PaError CloseHandleWithPaError( HANDLE handle ) +{ + PaError result = paNoError; + + if( handle ) + { + if( CloseHandle( handle ) == 0 ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_SYSTEM_ERROR( GetLastError() ); + } + } + + return result; +} + + +/* PaWinMmeHostApiRepresentation - host api datastructure specific to this implementation */ + +typedef struct +{ + PaUtilHostApiRepresentation inheritedHostApiRep; + PaUtilStreamInterface callbackStreamInterface; + PaUtilStreamInterface blockingStreamInterface; + + PaUtilAllocationGroup *allocations; + + int inputDeviceCount, outputDeviceCount; + + /** winMmeDeviceIds is an array of WinMme device ids. + fields in the range [0, inputDeviceCount) are input device ids, + and [inputDeviceCount, inputDeviceCount + outputDeviceCount) are output + device ids. + */ + UINT *winMmeDeviceIds; +} +PaWinMmeHostApiRepresentation; + + +typedef struct +{ + PaDeviceInfo inheritedDeviceInfo; + DWORD dwFormats; /**<< standard formats bitmask from the WAVEINCAPS and WAVEOUTCAPS structures */ + char deviceInputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/ + char deviceOutputChannelCountIsKnown; /**<< if the system returns 0xFFFF then we don't really know the number of supported channels (1=>known, 0=>unknown)*/ +} +PaWinMmeDeviceInfo; + + +/************************************************************************* + * Returns recommended device ID. + * On the PC, the recommended device can be specified by the user by + * setting an environment variable. For example, to use device #1. + * + * set PA_RECOMMENDED_OUTPUT_DEVICE=1 + * + * The user should first determine the available device ID by using + * the supplied application "pa_devs". + */ +#define PA_ENV_BUF_SIZE_ (32) +#define PA_REC_IN_DEV_ENV_NAME_ ("PA_RECOMMENDED_INPUT_DEVICE") +#define PA_REC_OUT_DEV_ENV_NAME_ ("PA_RECOMMENDED_OUTPUT_DEVICE") +static PaDeviceIndex GetEnvDefaultDeviceID( char *envName ) +{ + PaDeviceIndex recommendedIndex = paNoDevice; + DWORD hresult; + char envbuf[PA_ENV_BUF_SIZE_]; + +#ifndef WIN32_PLATFORM_PSPC /* no GetEnvironmentVariable on PocketPC */ + + /* Let user determine default device by setting environment variable. */ + hresult = GetEnvironmentVariable( envName, envbuf, PA_ENV_BUF_SIZE_ ); + if( (hresult > 0) && (hresult < PA_ENV_BUF_SIZE_) ) + { + recommendedIndex = atoi( envbuf ); + } +#endif + + return recommendedIndex; +} + + +static void InitializeDefaultDeviceIdsFromEnv( PaWinMmeHostApiRepresentation *hostApi ) +{ + PaDeviceIndex device; + + /* input */ + device = GetEnvDefaultDeviceID( PA_REC_IN_DEV_ENV_NAME_ ); + if( device != paNoDevice && + ( device >= 0 && device < hostApi->inheritedHostApiRep.info.deviceCount ) && + hostApi->inheritedHostApiRep.deviceInfos[ device ]->maxInputChannels > 0 ) + { + hostApi->inheritedHostApiRep.info.defaultInputDevice = device; + } + + /* output */ + device = GetEnvDefaultDeviceID( PA_REC_OUT_DEV_ENV_NAME_ ); + if( device != paNoDevice && + ( device >= 0 && device < hostApi->inheritedHostApiRep.info.deviceCount ) && + hostApi->inheritedHostApiRep.deviceInfos[ device ]->maxOutputChannels > 0 ) + { + hostApi->inheritedHostApiRep.info.defaultOutputDevice = device; + } +} + + +/** Convert external PA ID to a windows multimedia device ID +*/ +static UINT LocalDeviceIndexToWinMmeDeviceId( PaWinMmeHostApiRepresentation *hostApi, PaDeviceIndex device ) +{ + assert( device >= 0 && device < hostApi->inputDeviceCount + hostApi->outputDeviceCount ); + + return hostApi->winMmeDeviceIds[ device ]; +} + + +static int SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( PaSampleFormat sampleFormat, unsigned long winMmeSpecificFlags ) +{ + int waveFormatTag = 0; + + if( winMmeSpecificFlags & paWinMmeWaveFormatDolbyAc3Spdif ) + waveFormatTag = PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF; + else if( winMmeSpecificFlags & paWinMmeWaveFormatWmaSpdif ) + waveFormatTag = PAWIN_WAVE_FORMAT_WMA_SPDIF; + else + waveFormatTag = PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ); + + return waveFormatTag; +} + + +static PaError QueryInputWaveFormatEx( int deviceId, WAVEFORMATEX *waveFormatEx ) +{ + MMRESULT mmresult; + + switch( mmresult = waveInOpen( NULL, deviceId, waveFormatEx, 0, 0, WAVE_FORMAT_QUERY ) ) + { + case MMSYSERR_NOERROR: + return paNoError; + case MMSYSERR_ALLOCATED: /* Specified resource is already allocated. */ + return paDeviceUnavailable; + case MMSYSERR_NODRIVER: /* No device driver is present. */ + return paDeviceUnavailable; + case MMSYSERR_NOMEM: /* Unable to allocate or lock memory. */ + return paInsufficientMemory; + case WAVERR_BADFORMAT: /* Attempted to open with an unsupported waveform-audio format. */ + return paSampleFormatNotSupported; + + case MMSYSERR_BADDEVICEID: /* Specified device identifier is out of range. */ + /* falls through */ + default: + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + return paUnanticipatedHostError; + } +} + + +static PaError QueryOutputWaveFormatEx( int deviceId, WAVEFORMATEX *waveFormatEx ) +{ + MMRESULT mmresult; + + switch( mmresult = waveOutOpen( NULL, deviceId, waveFormatEx, 0, 0, WAVE_FORMAT_QUERY ) ) + { + case MMSYSERR_NOERROR: + return paNoError; + case MMSYSERR_ALLOCATED: /* Specified resource is already allocated. */ + return paDeviceUnavailable; + case MMSYSERR_NODRIVER: /* No device driver is present. */ + return paDeviceUnavailable; + case MMSYSERR_NOMEM: /* Unable to allocate or lock memory. */ + return paInsufficientMemory; + case WAVERR_BADFORMAT: /* Attempted to open with an unsupported waveform-audio format. */ + return paSampleFormatNotSupported; + + case MMSYSERR_BADDEVICEID: /* Specified device identifier is out of range. */ + /* falls through */ + default: + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + return paUnanticipatedHostError; + } +} + + +static PaError QueryFormatSupported( PaDeviceInfo *deviceInfo, + PaError (*waveFormatExQueryFunction)(int, WAVEFORMATEX*), + int winMmeDeviceId, int channels, double sampleRate, unsigned long winMmeSpecificFlags ) +{ + PaWinMmeDeviceInfo *winMmeDeviceInfo = (PaWinMmeDeviceInfo*)deviceInfo; + PaWinWaveFormat waveFormat; + PaSampleFormat sampleFormat; + int waveFormatTag; + + /* @todo at the moment we only query with 16 bit sample format and directout speaker config*/ + + sampleFormat = paInt16; + waveFormatTag = SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( sampleFormat, winMmeSpecificFlags ); + + if( waveFormatTag == PaWin_SampleFormatToLinearWaveFormatTag( paInt16 ) ){ + + /* attempt bypass querying the device for linear formats */ + + if( sampleRate == 11025.0 + && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1M16)) + || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1S16)) ) ){ + + return paNoError; + } + + if( sampleRate == 22050.0 + && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2M16)) + || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2S16)) ) ){ + + return paNoError; + } + + if( sampleRate == 44100.0 + && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4M16)) + || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4S16)) ) ){ + + return paNoError; + } + } + + + /* first, attempt to query the device using WAVEFORMATEXTENSIBLE, + if this fails we fall back to WAVEFORMATEX */ + + PaWin_InitializeWaveFormatExtensible( &waveFormat, channels, sampleFormat, waveFormatTag, + sampleRate, PAWIN_SPEAKER_DIRECTOUT ); + + if( waveFormatExQueryFunction( winMmeDeviceId, (WAVEFORMATEX*)&waveFormat ) == paNoError ) + return paNoError; + + PaWin_InitializeWaveFormatEx( &waveFormat, channels, sampleFormat, waveFormatTag, sampleRate ); + + return waveFormatExQueryFunction( winMmeDeviceId, (WAVEFORMATEX*)&waveFormat ); +} + + +#define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_ (13) /* must match array length below */ +static double defaultSampleRateSearchOrder_[] = + { 44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0, 192000.0, + 16000.0, 12000.0, 11025.0, 9600.0, 8000.0 }; + +static void DetectDefaultSampleRate( PaWinMmeDeviceInfo *winMmeDeviceInfo, int winMmeDeviceId, + PaError (*waveFormatExQueryFunction)(int, WAVEFORMATEX*), int maxChannels ) +{ + PaDeviceInfo *deviceInfo = &winMmeDeviceInfo->inheritedDeviceInfo; + int i; + + deviceInfo->defaultSampleRate = 0.; + + for( i=0; i < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++i ) + { + double sampleRate = defaultSampleRateSearchOrder_[ i ]; + PaError paerror = QueryFormatSupported( deviceInfo, waveFormatExQueryFunction, winMmeDeviceId, maxChannels, sampleRate, 0 ); + if( paerror == paNoError ) + { + deviceInfo->defaultSampleRate = sampleRate; + break; + } + } +} + + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO +static int QueryWaveInKSFilterMaxChannels( int waveInDeviceId, int *maxChannels ) +{ + void *devicePath; + DWORD devicePathSize; + int result = 0; + + if( waveInMessage((HWAVEIN)waveInDeviceId, DRV_QUERYDEVICEINTERFACESIZE, + (DWORD_PTR)&devicePathSize, 0 ) != MMSYSERR_NOERROR ) + return 0; + + devicePath = PaUtil_AllocateMemory( devicePathSize ); + if( !devicePath ) + return 0; + + /* apparently DRV_QUERYDEVICEINTERFACE returns a unicode interface path, although this is undocumented */ + if( waveInMessage((HWAVEIN)waveInDeviceId, DRV_QUERYDEVICEINTERFACE, + (DWORD_PTR)devicePath, devicePathSize ) == MMSYSERR_NOERROR ) + { + int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( devicePath, /* isInput= */ 1 ); + if( count > 0 ) + { + *maxChannels = count; + result = 1; + } + } + + PaUtil_FreeMemory( devicePath ); + + return result; +} +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + + +static PaError InitializeInputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeHostApi, + PaWinMmeDeviceInfo *winMmeDeviceInfo, UINT winMmeInputDeviceId, int *success ) +{ + PaError result = paNoError; + char *deviceName; /* non-const ptr */ + MMRESULT mmresult; + WAVEINCAPS wic; + PaDeviceInfo *deviceInfo = &winMmeDeviceInfo->inheritedDeviceInfo; + + *success = 0; + + mmresult = waveInGetDevCaps( winMmeInputDeviceId, &wic, sizeof( WAVEINCAPS ) ); + if( mmresult == MMSYSERR_NOMEM ) + { + result = paInsufficientMemory; + goto error; + } + else if( mmresult != MMSYSERR_NOERROR ) + { + /* instead of returning paUnanticipatedHostError we return + paNoError, but leave success set as 0. This allows + Pa_Initialize to just ignore this device, without failing + the entire initialisation process. + */ + return paNoError; + } + + if( winMmeInputDeviceId == WAVE_MAPPER ) + { + /* Append I/O suffix to WAVE_MAPPER device. */ + deviceName = (char *)PaUtil_GroupAllocateMemory( + winMmeHostApi->allocations, StrTLen( wic.szPname ) + 1 + sizeof(constInputMapperSuffix_) ); + if( !deviceName ) + { + result = paInsufficientMemory; + goto error; + } + StrTCpyToC( deviceName, wic.szPname ); + strcat( deviceName, constInputMapperSuffix_ ); + } + else + { + deviceName = (char*)PaUtil_GroupAllocateMemory( + winMmeHostApi->allocations, StrTLen( wic.szPname ) + 1 ); + if( !deviceName ) + { + result = paInsufficientMemory; + goto error; + } + StrTCpyToC( deviceName, wic.szPname ); + } + deviceInfo->name = deviceName; + + if( wic.wChannels == 0xFFFF || wic.wChannels < 1 || wic.wChannels > 255 ){ + /* For Windows versions using WDM (possibly Windows 98 ME and later) + * the kernel mixer sits between the application and the driver. As a result, + * wave*GetDevCaps often kernel mixer channel counts, which are unlimited. + * When this happens we assume the device is stereo and set a flag + * so that other channel counts can be tried with OpenStream -- i.e. when + * device*ChannelCountIsKnown is false, OpenStream will try whatever + * channel count you supply. + * see also InitializeOutputDeviceInfo() below. + */ + + PA_DEBUG(("Pa_GetDeviceInfo: Num input channels reported as %d! Changed to 2.\n", wic.wChannels )); + deviceInfo->maxInputChannels = 2; + winMmeDeviceInfo->deviceInputChannelCountIsKnown = 0; + }else{ + deviceInfo->maxInputChannels = wic.wChannels; + winMmeDeviceInfo->deviceInputChannelCountIsKnown = 1; + } + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + winMmeDeviceInfo->deviceInputChannelCountIsKnown = + QueryWaveInKSFilterMaxChannels( winMmeInputDeviceId, &deviceInfo->maxInputChannels ); +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + + winMmeDeviceInfo->dwFormats = wic.dwFormats; + + DetectDefaultSampleRate( winMmeDeviceInfo, winMmeInputDeviceId, + QueryInputWaveFormatEx, deviceInfo->maxInputChannels ); + + *success = 1; + +error: + return result; +} + + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO +static int QueryWaveOutKSFilterMaxChannels( int waveOutDeviceId, int *maxChannels ) +{ + void *devicePath; + DWORD devicePathSize; + int result = 0; + + if( waveOutMessage((HWAVEOUT)waveOutDeviceId, DRV_QUERYDEVICEINTERFACESIZE, + (DWORD_PTR)&devicePathSize, 0 ) != MMSYSERR_NOERROR ) + return 0; + + devicePath = PaUtil_AllocateMemory( devicePathSize ); + if( !devicePath ) + return 0; + + /* apparently DRV_QUERYDEVICEINTERFACE returns a unicode interface path, although this is undocumented */ + if( waveOutMessage((HWAVEOUT)waveOutDeviceId, DRV_QUERYDEVICEINTERFACE, + (DWORD_PTR)devicePath, devicePathSize ) == MMSYSERR_NOERROR ) + { + int count = PaWin_WDMKS_QueryFilterMaximumChannelCount( devicePath, /* isInput= */ 0 ); + if( count > 0 ) + { + *maxChannels = count; + result = 1; + } + } + + PaUtil_FreeMemory( devicePath ); + + return result; +} +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + + +static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeHostApi, + PaWinMmeDeviceInfo *winMmeDeviceInfo, UINT winMmeOutputDeviceId, int *success ) +{ + PaError result = paNoError; + char *deviceName; /* non-const ptr */ + MMRESULT mmresult; + WAVEOUTCAPS woc; + PaDeviceInfo *deviceInfo = &winMmeDeviceInfo->inheritedDeviceInfo; +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + int wdmksDeviceOutputChannelCountIsKnown; +#endif + + *success = 0; + + mmresult = waveOutGetDevCaps( winMmeOutputDeviceId, &woc, sizeof( WAVEOUTCAPS ) ); + if( mmresult == MMSYSERR_NOMEM ) + { + result = paInsufficientMemory; + goto error; + } + else if( mmresult != MMSYSERR_NOERROR ) + { + /* instead of returning paUnanticipatedHostError we return + paNoError, but leave success set as 0. This allows + Pa_Initialize to just ignore this device, without failing + the entire initialisation process. + */ + return paNoError; + } + + if( winMmeOutputDeviceId == WAVE_MAPPER ) + { + /* Append I/O suffix to WAVE_MAPPER device. */ + deviceName = (char *)PaUtil_GroupAllocateMemory( + winMmeHostApi->allocations, StrTLen( woc.szPname ) + 1 + sizeof(constOutputMapperSuffix_) ); + if( !deviceName ) + { + result = paInsufficientMemory; + goto error; + } + StrTCpyToC( deviceName, woc.szPname ); + strcat( deviceName, constOutputMapperSuffix_ ); + } + else + { + deviceName = (char*)PaUtil_GroupAllocateMemory( + winMmeHostApi->allocations, StrTLen( woc.szPname ) + 1 ); + if( !deviceName ) + { + result = paInsufficientMemory; + goto error; + } + StrTCpyToC( deviceName, woc.szPname ); + } + deviceInfo->name = deviceName; + + if( woc.wChannels == 0xFFFF || woc.wChannels < 1 || woc.wChannels > 255 ){ + /* For Windows versions using WDM (possibly Windows 98 ME and later) + * the kernel mixer sits between the application and the driver. As a result, + * wave*GetDevCaps often kernel mixer channel counts, which are unlimited. + * When this happens we assume the device is stereo and set a flag + * so that other channel counts can be tried with OpenStream -- i.e. when + * device*ChannelCountIsKnown is false, OpenStream will try whatever + * channel count you supply. + * see also InitializeInputDeviceInfo() above. + */ + + PA_DEBUG(("Pa_GetDeviceInfo: Num output channels reported as %d! Changed to 2.\n", woc.wChannels )); + deviceInfo->maxOutputChannels = 2; + winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 0; + }else{ + deviceInfo->maxOutputChannels = woc.wChannels; + winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 1; + } + +#ifdef PAWIN_USE_WDMKS_DEVICE_INFO + wdmksDeviceOutputChannelCountIsKnown = QueryWaveOutKSFilterMaxChannels( + winMmeOutputDeviceId, &deviceInfo->maxOutputChannels ); + if( wdmksDeviceOutputChannelCountIsKnown && !winMmeDeviceInfo->deviceOutputChannelCountIsKnown ) + winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 1; +#endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ + + winMmeDeviceInfo->dwFormats = woc.dwFormats; + + DetectDefaultSampleRate( winMmeDeviceInfo, winMmeOutputDeviceId, + QueryOutputWaveFormatEx, deviceInfo->maxOutputChannels ); + + *success = 1; + +error: + return result; +} + + +static void GetDefaultLatencies( PaTime *defaultLowLatency, PaTime *defaultHighLatency ) +{ + OSVERSIONINFO osvi; + osvi.dwOSVersionInfoSize = sizeof( osvi ); + GetVersionEx( &osvi ); + + /* Check for NT */ + if( (osvi.dwMajorVersion == 4) && (osvi.dwPlatformId == 2) ) + { + *defaultLowLatency = PA_MME_WIN_NT_DEFAULT_LATENCY_; + } + else if(osvi.dwMajorVersion >= 5) + { + *defaultLowLatency = PA_MME_WIN_WDM_DEFAULT_LATENCY_; + } + else + { + *defaultLowLatency = PA_MME_WIN_9X_DEFAULT_LATENCY_; + } + + *defaultHighLatency = *defaultLowLatency * 2; +} + + +PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) +{ + PaError result = paNoError; + int i; + PaWinMmeHostApiRepresentation *winMmeHostApi; + int inputDeviceCount, outputDeviceCount, maximumPossibleDeviceCount; + PaWinMmeDeviceInfo *deviceInfoArray; + int deviceInfoInitializationSucceeded; + PaTime defaultLowLatency, defaultHighLatency; + DWORD waveInPreferredDevice, waveOutPreferredDevice; + DWORD preferredDeviceStatusFlags; + + winMmeHostApi = (PaWinMmeHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinMmeHostApiRepresentation) ); + if( !winMmeHostApi ) + { + result = paInsufficientMemory; + goto error; + } + + winMmeHostApi->allocations = PaUtil_CreateAllocationGroup(); + if( !winMmeHostApi->allocations ) + { + result = paInsufficientMemory; + goto error; + } + + *hostApi = &winMmeHostApi->inheritedHostApiRep; + (*hostApi)->info.structVersion = 1; + (*hostApi)->info.type = paMME; + (*hostApi)->info.name = "MME"; + + + /* initialise device counts and default devices under the assumption that + there are no devices. These values are incremented below if and when + devices are successfully initialized. + */ + (*hostApi)->info.deviceCount = 0; + (*hostApi)->info.defaultInputDevice = paNoDevice; + (*hostApi)->info.defaultOutputDevice = paNoDevice; + winMmeHostApi->inputDeviceCount = 0; + winMmeHostApi->outputDeviceCount = 0; + +#if !defined(DRVM_MAPPER_PREFERRED_GET) +/* DRVM_MAPPER_PREFERRED_GET is defined in mmddk.h but we avoid a dependency on the DDK by defining it here */ +#define DRVM_MAPPER_PREFERRED_GET (0x2000+21) +#endif + + /* the following calls assume that if wave*Message fails the preferred device parameter won't be modified */ + preferredDeviceStatusFlags = 0; + waveInPreferredDevice = -1; + waveInMessage( (HWAVEIN)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveInPreferredDevice, (DWORD_PTR)&preferredDeviceStatusFlags ); + + preferredDeviceStatusFlags = 0; + waveOutPreferredDevice = -1; + waveOutMessage( (HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveOutPreferredDevice, (DWORD_PTR)&preferredDeviceStatusFlags ); + + maximumPossibleDeviceCount = 0; + + inputDeviceCount = waveInGetNumDevs(); + if( inputDeviceCount > 0 ) + maximumPossibleDeviceCount += inputDeviceCount + 1; /* assume there is a WAVE_MAPPER */ + + outputDeviceCount = waveOutGetNumDevs(); + if( outputDeviceCount > 0 ) + maximumPossibleDeviceCount += outputDeviceCount + 1; /* assume there is a WAVE_MAPPER */ + + + if( maximumPossibleDeviceCount > 0 ){ + + (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( + winMmeHostApi->allocations, sizeof(PaDeviceInfo*) * maximumPossibleDeviceCount ); + if( !(*hostApi)->deviceInfos ) + { + result = paInsufficientMemory; + goto error; + } + + /* allocate all device info structs in a contiguous block */ + deviceInfoArray = (PaWinMmeDeviceInfo*)PaUtil_GroupAllocateMemory( + winMmeHostApi->allocations, sizeof(PaWinMmeDeviceInfo) * maximumPossibleDeviceCount ); + if( !deviceInfoArray ) + { + result = paInsufficientMemory; + goto error; + } + + winMmeHostApi->winMmeDeviceIds = (UINT*)PaUtil_GroupAllocateMemory( + winMmeHostApi->allocations, sizeof(int) * maximumPossibleDeviceCount ); + if( !winMmeHostApi->winMmeDeviceIds ) + { + result = paInsufficientMemory; + goto error; + } + + GetDefaultLatencies( &defaultLowLatency, &defaultHighLatency ); + + if( inputDeviceCount > 0 ){ + /* -1 is the WAVE_MAPPER */ + for( i = -1; i < inputDeviceCount; ++i ){ + UINT winMmeDeviceId = (UINT)((i==-1) ? WAVE_MAPPER : i); + PaWinMmeDeviceInfo *wmmeDeviceInfo = &deviceInfoArray[ (*hostApi)->info.deviceCount ]; + PaDeviceInfo *deviceInfo = &wmmeDeviceInfo->inheritedDeviceInfo; + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + + deviceInfo->maxInputChannels = 0; + wmmeDeviceInfo->deviceInputChannelCountIsKnown = 1; + deviceInfo->maxOutputChannels = 0; + wmmeDeviceInfo->deviceOutputChannelCountIsKnown = 1; + + deviceInfo->defaultLowInputLatency = defaultLowLatency; + deviceInfo->defaultLowOutputLatency = defaultLowLatency; + deviceInfo->defaultHighInputLatency = defaultHighLatency; + deviceInfo->defaultHighOutputLatency = defaultHighLatency; + + result = InitializeInputDeviceInfo( winMmeHostApi, wmmeDeviceInfo, + winMmeDeviceId, &deviceInfoInitializationSucceeded ); + if( result != paNoError ) + goto error; + + if( deviceInfoInitializationSucceeded ){ + if( (*hostApi)->info.defaultInputDevice == paNoDevice ){ + /* if there is currently no default device, use the first one available */ + (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount; + + }else if( winMmeDeviceId == waveInPreferredDevice ){ + /* set the default device to the system preferred device */ + (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount; + } + + winMmeHostApi->winMmeDeviceIds[ (*hostApi)->info.deviceCount ] = winMmeDeviceId; + (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo; + + winMmeHostApi->inputDeviceCount++; + (*hostApi)->info.deviceCount++; + } + } + } + + if( outputDeviceCount > 0 ){ + /* -1 is the WAVE_MAPPER */ + for( i = -1; i < outputDeviceCount; ++i ){ + UINT winMmeDeviceId = (UINT)((i==-1) ? WAVE_MAPPER : i); + PaWinMmeDeviceInfo *wmmeDeviceInfo = &deviceInfoArray[ (*hostApi)->info.deviceCount ]; + PaDeviceInfo *deviceInfo = &wmmeDeviceInfo->inheritedDeviceInfo; + deviceInfo->structVersion = 2; + deviceInfo->hostApi = hostApiIndex; + + deviceInfo->maxInputChannels = 0; + wmmeDeviceInfo->deviceInputChannelCountIsKnown = 1; + deviceInfo->maxOutputChannels = 0; + wmmeDeviceInfo->deviceOutputChannelCountIsKnown = 1; + + deviceInfo->defaultLowInputLatency = defaultLowLatency; + deviceInfo->defaultLowOutputLatency = defaultLowLatency; + deviceInfo->defaultHighInputLatency = defaultHighLatency; + deviceInfo->defaultHighOutputLatency = defaultHighLatency; + + result = InitializeOutputDeviceInfo( winMmeHostApi, wmmeDeviceInfo, + winMmeDeviceId, &deviceInfoInitializationSucceeded ); + if( result != paNoError ) + goto error; + + if( deviceInfoInitializationSucceeded ){ + if( (*hostApi)->info.defaultOutputDevice == paNoDevice ){ + /* if there is currently no default device, use the first one available */ + (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount; + + }else if( winMmeDeviceId == waveOutPreferredDevice ){ + /* set the default device to the system preferred device */ + (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount; + } + + winMmeHostApi->winMmeDeviceIds[ (*hostApi)->info.deviceCount ] = winMmeDeviceId; + (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo; + + winMmeHostApi->outputDeviceCount++; + (*hostApi)->info.deviceCount++; + } + } + } + } + + InitializeDefaultDeviceIdsFromEnv( winMmeHostApi ); + + (*hostApi)->Terminate = Terminate; + (*hostApi)->OpenStream = OpenStream; + (*hostApi)->IsFormatSupported = IsFormatSupported; + + PaUtil_InitializeStreamInterface( &winMmeHostApi->callbackStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, GetStreamCpuLoad, + PaUtil_DummyRead, PaUtil_DummyWrite, + PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); + + PaUtil_InitializeStreamInterface( &winMmeHostApi->blockingStreamInterface, CloseStream, StartStream, + StopStream, AbortStream, IsStreamStopped, IsStreamActive, + GetStreamTime, PaUtil_DummyGetCpuLoad, + ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); + + return result; + +error: + if( winMmeHostApi ) + { + if( winMmeHostApi->allocations ) + { + PaUtil_FreeAllAllocations( winMmeHostApi->allocations ); + PaUtil_DestroyAllocationGroup( winMmeHostApi->allocations ); + } + + PaUtil_FreeMemory( winMmeHostApi ); + } + + return result; +} + + +static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) +{ + PaWinMmeHostApiRepresentation *winMmeHostApi = (PaWinMmeHostApiRepresentation*)hostApi; + + if( winMmeHostApi->allocations ) + { + PaUtil_FreeAllAllocations( winMmeHostApi->allocations ); + PaUtil_DestroyAllocationGroup( winMmeHostApi->allocations ); + } + + PaUtil_FreeMemory( winMmeHostApi ); +} + + +static PaError IsInputChannelCountSupported( PaWinMmeDeviceInfo* deviceInfo, int channelCount ) +{ + PaError result = paNoError; + + if( channelCount > 0 + && deviceInfo->deviceInputChannelCountIsKnown + && channelCount > deviceInfo->inheritedDeviceInfo.maxInputChannels ){ + + result = paInvalidChannelCount; + } + + return result; +} + +static PaError IsOutputChannelCountSupported( PaWinMmeDeviceInfo* deviceInfo, int channelCount ) +{ + PaError result = paNoError; + + if( channelCount > 0 + && deviceInfo->deviceOutputChannelCountIsKnown + && channelCount > deviceInfo->inheritedDeviceInfo.maxOutputChannels ){ + + result = paInvalidChannelCount; + } + + return result; +} + +static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate ) +{ + PaWinMmeHostApiRepresentation *winMmeHostApi = (PaWinMmeHostApiRepresentation*)hostApi; + PaDeviceInfo *inputDeviceInfo, *outputDeviceInfo; + int inputChannelCount, outputChannelCount; + int inputMultipleDeviceChannelCount, outputMultipleDeviceChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + PaWinMmeStreamInfo *inputStreamInfo, *outputStreamInfo; + UINT winMmeInputDeviceId, winMmeOutputDeviceId; + unsigned int i; + PaError paerror; + + /* The calls to QueryFormatSupported below are intended to detect invalid + sample rates. If we assume that the channel count and format are OK, + then the only thing that could fail is the sample rate. This isn't + strictly true, but I can't think of a better way to test that the + sample rate is valid. + */ + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + inputStreamInfo = inputParameters->hostApiSpecificStreamInfo; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( inputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + if( inputParameters->device == paUseHostApiSpecificDeviceSpecification + && inputStreamInfo && (inputStreamInfo->flags & paWinMmeUseMultipleDevices) ) + { + inputMultipleDeviceChannelCount = 0; + for( i=0; i< inputStreamInfo->deviceCount; ++i ) + { + inputMultipleDeviceChannelCount += inputStreamInfo->devices[i].channelCount; + + inputDeviceInfo = hostApi->deviceInfos[ inputStreamInfo->devices[i].device ]; + + /* check that input device can support inputChannelCount */ + if( inputStreamInfo->devices[i].channelCount < 1 ) + return paInvalidChannelCount; + + paerror = IsInputChannelCountSupported( (PaWinMmeDeviceInfo*)inputDeviceInfo, + inputStreamInfo->devices[i].channelCount ); + if( paerror != paNoError ) + return paerror; + + /* test for valid sample rate, see comment above */ + winMmeInputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, inputStreamInfo->devices[i].device ); + paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, + winMmeInputDeviceId, inputStreamInfo->devices[i].channelCount, sampleRate, + ((inputStreamInfo) ? inputStreamInfo->flags : 0) ); + if( paerror != paNoError ) + return paInvalidSampleRate; + } + + if( inputMultipleDeviceChannelCount != inputChannelCount ) + return paIncompatibleHostApiSpecificStreamInfo; + } + else + { + if( inputStreamInfo && (inputStreamInfo->flags & paWinMmeUseMultipleDevices) ) + return paIncompatibleHostApiSpecificStreamInfo; /* paUseHostApiSpecificDeviceSpecification was not supplied as the input device */ + + inputDeviceInfo = hostApi->deviceInfos[ inputParameters->device ]; + + /* check that input device can support inputChannelCount */ + paerror = IsInputChannelCountSupported( (PaWinMmeDeviceInfo*)inputDeviceInfo, inputChannelCount ); + if( paerror != paNoError ) + return paerror; + + /* test for valid sample rate, see comment above */ + winMmeInputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, inputParameters->device ); + paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, + winMmeInputDeviceId, inputChannelCount, sampleRate, + ((inputStreamInfo) ? inputStreamInfo->flags : 0) ); + if( paerror != paNoError ) + return paInvalidSampleRate; + } + } + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + outputStreamInfo = outputParameters->hostApiSpecificStreamInfo; + + /* all standard sample formats are supported by the buffer adapter, + this implementation doesn't support any custom sample formats */ + if( outputSampleFormat & paCustomFormat ) + return paSampleFormatNotSupported; + + if( outputParameters->device == paUseHostApiSpecificDeviceSpecification + && outputStreamInfo && (outputStreamInfo->flags & paWinMmeUseMultipleDevices) ) + { + outputMultipleDeviceChannelCount = 0; + for( i=0; i< outputStreamInfo->deviceCount; ++i ) + { + outputMultipleDeviceChannelCount += outputStreamInfo->devices[i].channelCount; + + outputDeviceInfo = hostApi->deviceInfos[ outputStreamInfo->devices[i].device ]; + + /* check that output device can support outputChannelCount */ + if( outputStreamInfo->devices[i].channelCount < 1 ) + return paInvalidChannelCount; + + paerror = IsOutputChannelCountSupported( (PaWinMmeDeviceInfo*)outputDeviceInfo, + outputStreamInfo->devices[i].channelCount ); + if( paerror != paNoError ) + return paerror; + + /* test for valid sample rate, see comment above */ + winMmeOutputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, outputStreamInfo->devices[i].device ); + paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, + winMmeOutputDeviceId, outputStreamInfo->devices[i].channelCount, sampleRate, + ((outputStreamInfo) ? outputStreamInfo->flags : 0) ); + if( paerror != paNoError ) + return paInvalidSampleRate; + } + + if( outputMultipleDeviceChannelCount != outputChannelCount ) + return paIncompatibleHostApiSpecificStreamInfo; + } + else + { + if( outputStreamInfo && (outputStreamInfo->flags & paWinMmeUseMultipleDevices) ) + return paIncompatibleHostApiSpecificStreamInfo; /* paUseHostApiSpecificDeviceSpecification was not supplied as the output device */ + + outputDeviceInfo = hostApi->deviceInfos[ outputParameters->device ]; + + /* check that output device can support outputChannelCount */ + paerror = IsOutputChannelCountSupported( (PaWinMmeDeviceInfo*)outputDeviceInfo, outputChannelCount ); + if( paerror != paNoError ) + return paerror; + + /* test for valid sample rate, see comment above */ + winMmeOutputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, outputParameters->device ); + paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, + winMmeOutputDeviceId, outputChannelCount, sampleRate, + ((outputStreamInfo) ? outputStreamInfo->flags : 0) ); + if( paerror != paNoError ) + return paInvalidSampleRate; + } + } + + /* + - if a full duplex stream is requested, check that the combination + of input and output parameters is supported + + - check that the device supports sampleRate + + for mme all we can do is test that the input and output devices + support the requested sample rate and number of channels. we + cannot test for full duplex compatibility. + */ + + return paFormatIsSupported; +} + + +static unsigned long ComputeHostBufferCountForFixedBufferSizeFrames( + unsigned long suggestedLatencyFrames, + unsigned long hostBufferSizeFrames, + unsigned long minimumBufferCount ) +{ + /* Calculate the number of buffers of length hostFramesPerBuffer + that fit in suggestedLatencyFrames, rounding up to the next integer. + + The value (hostBufferSizeFrames - 1) below is to ensure the buffer count is rounded up. + */ + unsigned long resultBufferCount = ((suggestedLatencyFrames + (hostBufferSizeFrames - 1)) / hostBufferSizeFrames); + + /* We always need one extra buffer for processing while the rest are queued/playing. + i.e. latency is framesPerBuffer * (bufferCount - 1) + */ + resultBufferCount += 1; + + if( resultBufferCount < minimumBufferCount ) /* clamp to minimum buffer count */ + resultBufferCount = minimumBufferCount; + + return resultBufferCount; +} + + +static unsigned long ComputeHostBufferSizeGivenHardUpperLimit( + unsigned long userFramesPerBuffer, + unsigned long absoluteMaximumBufferSizeFrames ) +{ + static unsigned long primes_[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, + 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 0 }; /* zero terminated */ + + unsigned long result = userFramesPerBuffer; + int i; + + assert( absoluteMaximumBufferSizeFrames > 67 ); /* assume maximum is large and we're only factoring by small primes */ + + /* search for the largest integer factor of userFramesPerBuffer less + than or equal to absoluteMaximumBufferSizeFrames */ + + /* repeatedly divide by smallest prime factors until a buffer size + smaller than absoluteMaximumBufferSizeFrames is found */ + while( result > absoluteMaximumBufferSizeFrames ){ + + /* search for the smallest prime factor of result */ + for( i=0; primes_[i] != 0; ++i ) + { + unsigned long p = primes_[i]; + unsigned long divided = result / p; + if( divided*p == result ) + { + result = divided; + break; /* continue with outer while loop */ + } + } + if( primes_[i] == 0 ) + { /* loop failed to find a prime factor, return an approximate result */ + unsigned long d = (userFramesPerBuffer + (absoluteMaximumBufferSizeFrames-1)) + / absoluteMaximumBufferSizeFrames; + return userFramesPerBuffer / d; + } + } + + return result; +} + + +static PaError SelectHostBufferSizeFramesAndHostBufferCount( + unsigned long suggestedLatencyFrames, + unsigned long userFramesPerBuffer, + unsigned long minimumBufferCount, + unsigned long preferredMaximumBufferSizeFrames, /* try not to exceed this. for example, don't exceed when coalescing buffers */ + unsigned long absoluteMaximumBufferSizeFrames, /* never exceed this, a hard limit */ + unsigned long *hostBufferSizeFrames, + unsigned long *hostBufferCount ) +{ + unsigned long effectiveUserFramesPerBuffer; + unsigned long numberOfUserBuffersPerHostBuffer; + + + if( userFramesPerBuffer == paFramesPerBufferUnspecified ){ + + effectiveUserFramesPerBuffer = PA_MME_HOST_BUFFER_GRANULARITY_FRAMES_WHEN_UNSPECIFIED_; + + }else{ + + if( userFramesPerBuffer > absoluteMaximumBufferSizeFrames ){ + + /* user has requested a user buffer that's larger than absoluteMaximumBufferSizeFrames. + try to choose a buffer size that is equal or smaller than absoluteMaximumBufferSizeFrames + but is also an integer factor of userFramesPerBuffer, so as to distribute computation evenly. + the buffer processor will handle the block adaption between host and user buffer sizes. + see http://www.portaudio.com/trac/ticket/189 for discussion. + */ + + effectiveUserFramesPerBuffer = ComputeHostBufferSizeGivenHardUpperLimit( userFramesPerBuffer, absoluteMaximumBufferSizeFrames ); + assert( effectiveUserFramesPerBuffer <= absoluteMaximumBufferSizeFrames ); + + /* try to ensure that duration of host buffering is at least as + large as duration of user buffer. */ + if( suggestedLatencyFrames < userFramesPerBuffer ) + suggestedLatencyFrames = userFramesPerBuffer; + + }else{ + + effectiveUserFramesPerBuffer = userFramesPerBuffer; + } + } + + /* compute a host buffer count based on suggestedLatencyFrames and our granularity */ + + *hostBufferSizeFrames = effectiveUserFramesPerBuffer; + + *hostBufferCount = ComputeHostBufferCountForFixedBufferSizeFrames( + suggestedLatencyFrames, *hostBufferSizeFrames, minimumBufferCount ); + + if( *hostBufferSizeFrames >= userFramesPerBuffer ) + { + /* + If there are too many host buffers we would like to coalesce + them by packing an integer number of user buffers into each host buffer. + We try to coalesce such that hostBufferCount will lie between + PA_MME_TARGET_HOST_BUFFER_COUNT_ and (PA_MME_TARGET_HOST_BUFFER_COUNT_*2)-1. + We limit coalescing to avoid exceeding either absoluteMaximumBufferSizeFrames and + preferredMaximumBufferSizeFrames. + + First, compute a coalescing factor: the number of user buffers per host buffer. + The goal is to achieve PA_MME_TARGET_HOST_BUFFER_COUNT_ total buffer count. + Since our latency is computed based on (*hostBufferCount - 1) we compute a + coalescing factor based on (*hostBufferCount - 1) and (PA_MME_TARGET_HOST_BUFFER_COUNT_-1). + + The + (PA_MME_TARGET_HOST_BUFFER_COUNT_-2) term below is intended to round up. + */ + numberOfUserBuffersPerHostBuffer = ((*hostBufferCount - 1) + (PA_MME_TARGET_HOST_BUFFER_COUNT_-2)) / (PA_MME_TARGET_HOST_BUFFER_COUNT_ - 1); + + if( numberOfUserBuffersPerHostBuffer > 1 ) + { + unsigned long maxCoalescedBufferSizeFrames = (absoluteMaximumBufferSizeFrames < preferredMaximumBufferSizeFrames) /* minimum of our limits */ + ? absoluteMaximumBufferSizeFrames + : preferredMaximumBufferSizeFrames; + + unsigned long maxUserBuffersPerHostBuffer = maxCoalescedBufferSizeFrames / effectiveUserFramesPerBuffer; /* don't coalesce more than this */ + + if( numberOfUserBuffersPerHostBuffer > maxUserBuffersPerHostBuffer ) + numberOfUserBuffersPerHostBuffer = maxUserBuffersPerHostBuffer; + + *hostBufferSizeFrames = effectiveUserFramesPerBuffer * numberOfUserBuffersPerHostBuffer; + + /* recompute hostBufferCount to approximate suggestedLatencyFrames now that hostBufferSizeFrames is larger */ + *hostBufferCount = ComputeHostBufferCountForFixedBufferSizeFrames( + suggestedLatencyFrames, *hostBufferSizeFrames, minimumBufferCount ); + } + } + + return paNoError; +} + + +static PaError CalculateMaxHostSampleFrameSizeBytes( + int channelCount, + PaSampleFormat hostSampleFormat, + const PaWinMmeStreamInfo *streamInfo, + int *hostSampleFrameSizeBytes ) +{ + unsigned int i; + /* PA WMME streams may aggregate multiple WMME devices. When the stream addresses + more than one device in a single direction, maxDeviceChannelCount is the maximum + number of channels used by a single device. + */ + int maxDeviceChannelCount = channelCount; + int hostSampleSizeBytes = Pa_GetSampleSize( hostSampleFormat ); + if( hostSampleSizeBytes < 0 ) + { + return hostSampleSizeBytes; /* the value of hostSampleSize here is an error code, not a sample size */ + } + + if( streamInfo && ( streamInfo->flags & paWinMmeUseMultipleDevices ) ) + { + maxDeviceChannelCount = streamInfo->devices[0].channelCount; + for( i=1; i< streamInfo->deviceCount; ++i ) + { + if( streamInfo->devices[i].channelCount > maxDeviceChannelCount ) + maxDeviceChannelCount = streamInfo->devices[i].channelCount; + } + } + + *hostSampleFrameSizeBytes = hostSampleSizeBytes * maxDeviceChannelCount; + + return paNoError; +} + + +/* CalculateBufferSettings() fills the framesPerHostInputBuffer, hostInputBufferCount, + framesPerHostOutputBuffer and hostOutputBufferCount parameters based on the values + of the other parameters. +*/ + +static PaError CalculateBufferSettings( + unsigned long *hostFramesPerInputBuffer, unsigned long *hostInputBufferCount, + unsigned long *hostFramesPerOutputBuffer, unsigned long *hostOutputBufferCount, + int inputChannelCount, PaSampleFormat hostInputSampleFormat, + PaTime suggestedInputLatency, const PaWinMmeStreamInfo *inputStreamInfo, + int outputChannelCount, PaSampleFormat hostOutputSampleFormat, + PaTime suggestedOutputLatency, const PaWinMmeStreamInfo *outputStreamInfo, + double sampleRate, unsigned long userFramesPerBuffer ) +{ + PaError result = paNoError; + + if( inputChannelCount > 0 ) /* stream has input */ + { + int hostInputFrameSizeBytes; + result = CalculateMaxHostSampleFrameSizeBytes( + inputChannelCount, hostInputSampleFormat, inputStreamInfo, &hostInputFrameSizeBytes ); + if( result != paNoError ) + goto error; + + if( inputStreamInfo + && ( inputStreamInfo->flags & paWinMmeUseLowLevelLatencyParameters ) ) + { + /* input - using low level latency parameters if provided */ + + if( inputStreamInfo->bufferCount <= 0 + || inputStreamInfo->framesPerBuffer <= 0 ) + { + result = paIncompatibleHostApiSpecificStreamInfo; + goto error; + } + + *hostFramesPerInputBuffer = inputStreamInfo->framesPerBuffer; + *hostInputBufferCount = inputStreamInfo->bufferCount; + } + else + { + /* input - not using low level latency parameters, so compute + hostFramesPerInputBuffer and hostInputBufferCount + based on userFramesPerBuffer and suggestedInputLatency. */ + + unsigned long minimumBufferCount = (outputChannelCount > 0) + ? PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_FULL_DUPLEX_ + : PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_HALF_DUPLEX_; + + result = SelectHostBufferSizeFramesAndHostBufferCount( + (unsigned long)(suggestedInputLatency * sampleRate), /* (truncate) */ + userFramesPerBuffer, + minimumBufferCount, + (unsigned long)(PA_MME_MAX_HOST_BUFFER_SECS_ * sampleRate), /* in frames. preferred maximum */ + (PA_MME_MAX_HOST_BUFFER_BYTES_ / hostInputFrameSizeBytes), /* in frames. a hard limit. note truncation due to + division is intentional here to limit max bytes */ + hostFramesPerInputBuffer, + hostInputBufferCount ); + if( result != paNoError ) + goto error; + } + } + else + { + *hostFramesPerInputBuffer = 0; + *hostInputBufferCount = 0; + } + + if( outputChannelCount > 0 ) /* stream has output */ + { + if( outputStreamInfo + && ( outputStreamInfo->flags & paWinMmeUseLowLevelLatencyParameters ) ) + { + /* output - using low level latency parameters */ + + if( outputStreamInfo->bufferCount <= 0 + || outputStreamInfo->framesPerBuffer <= 0 ) + { + result = paIncompatibleHostApiSpecificStreamInfo; + goto error; + } + + *hostFramesPerOutputBuffer = outputStreamInfo->framesPerBuffer; + *hostOutputBufferCount = outputStreamInfo->bufferCount; + + if( inputChannelCount > 0 ) /* full duplex */ + { + /* harmonize hostFramesPerInputBuffer and hostFramesPerOutputBuffer */ + + if( *hostFramesPerInputBuffer != *hostFramesPerOutputBuffer ) + { + if( inputStreamInfo + && ( inputStreamInfo->flags & paWinMmeUseLowLevelLatencyParameters ) ) + { + /* a custom StreamInfo was used for specifying both input + and output buffer sizes. We require that the larger buffer size + must be a multiple of the smaller buffer size */ + + if( *hostFramesPerInputBuffer < *hostFramesPerOutputBuffer ) + { + if( *hostFramesPerOutputBuffer % *hostFramesPerInputBuffer != 0 ) + { + result = paIncompatibleHostApiSpecificStreamInfo; + goto error; + } + } + else + { + assert( *hostFramesPerInputBuffer > *hostFramesPerOutputBuffer ); + if( *hostFramesPerInputBuffer % *hostFramesPerOutputBuffer != 0 ) + { + result = paIncompatibleHostApiSpecificStreamInfo; + goto error; + } + } + } + else + { + /* a custom StreamInfo was not used for specifying the input buffer size, + so use the output buffer size, and approximately the suggested input latency. */ + + *hostFramesPerInputBuffer = *hostFramesPerOutputBuffer; + + *hostInputBufferCount = ComputeHostBufferCountForFixedBufferSizeFrames( + (unsigned long)(suggestedInputLatency * sampleRate), + *hostFramesPerInputBuffer, + PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_FULL_DUPLEX_ ); + } + } + } + } + else + { + /* output - no low level latency parameters, so compute hostFramesPerOutputBuffer and hostOutputBufferCount + based on userFramesPerBuffer and suggestedOutputLatency. */ + + int hostOutputFrameSizeBytes; + result = CalculateMaxHostSampleFrameSizeBytes( + outputChannelCount, hostOutputSampleFormat, outputStreamInfo, &hostOutputFrameSizeBytes ); + if( result != paNoError ) + goto error; + + /* compute the output buffer size and count */ + + result = SelectHostBufferSizeFramesAndHostBufferCount( + (unsigned long)(suggestedOutputLatency * sampleRate), /* (truncate) */ + userFramesPerBuffer, + PA_MME_MIN_HOST_OUTPUT_BUFFER_COUNT_, + (unsigned long)(PA_MME_MAX_HOST_BUFFER_SECS_ * sampleRate), /* in frames. preferred maximum */ + (PA_MME_MAX_HOST_BUFFER_BYTES_ / hostOutputFrameSizeBytes), /* in frames. a hard limit. note truncation due to + division is intentional here to limit max bytes */ + hostFramesPerOutputBuffer, + hostOutputBufferCount ); + if( result != paNoError ) + goto error; + + if( inputChannelCount > 0 ) /* full duplex */ + { + /* harmonize hostFramesPerInputBuffer and hostFramesPerOutputBuffer */ + + /* ensure that both input and output buffer sizes are the same. + if they don't match at this stage, choose the smallest one + and use that for input and output and recompute the corresponding + buffer count accordingly. + */ + + if( *hostFramesPerOutputBuffer != *hostFramesPerInputBuffer ) + { + if( hostFramesPerInputBuffer < hostFramesPerOutputBuffer ) + { + *hostFramesPerOutputBuffer = *hostFramesPerInputBuffer; + + *hostOutputBufferCount = ComputeHostBufferCountForFixedBufferSizeFrames( + (unsigned long)(suggestedOutputLatency * sampleRate), + *hostOutputBufferCount, + PA_MME_MIN_HOST_OUTPUT_BUFFER_COUNT_ ); + } + else + { + *hostFramesPerInputBuffer = *hostFramesPerOutputBuffer; + + *hostInputBufferCount = ComputeHostBufferCountForFixedBufferSizeFrames( + (unsigned long)(suggestedInputLatency * sampleRate), + *hostFramesPerInputBuffer, + PA_MME_MIN_HOST_INPUT_BUFFER_COUNT_FULL_DUPLEX_ ); + } + } + } + } + } + else + { + *hostFramesPerOutputBuffer = 0; + *hostOutputBufferCount = 0; + } + +error: + return result; +} + + +typedef struct +{ + HANDLE bufferEvent; + void *waveHandles; + unsigned int deviceCount; + /* unsigned int channelCount; */ + WAVEHDR **waveHeaders; /* waveHeaders[device][buffer] */ + unsigned int bufferCount; + unsigned int currentBufferIndex; + unsigned int framesPerBuffer; + unsigned int framesUsedInCurrentBuffer; +}PaWinMmeSingleDirectionHandlesAndBuffers; + +/* prototypes for functions operating on PaWinMmeSingleDirectionHandlesAndBuffers */ + +static void InitializeSingleDirectionHandlesAndBuffers( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers ); +static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostApi, + PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, + unsigned long winMmeSpecificFlags, + unsigned long bytesPerHostSample, + double sampleRate, PaWinMmeDeviceAndChannelCount *devices, + unsigned int deviceCount, PaWinWaveFormatChannelMask channelMask, int isInput ); +static PaError TerminateWaveHandles( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, int isInput, int currentlyProcessingAnError ); +static PaError InitializeWaveHeaders( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, + unsigned long hostBufferCount, + PaSampleFormat hostSampleFormat, + unsigned long framesPerHostBuffer, + PaWinMmeDeviceAndChannelCount *devices, + int isInput ); +static void TerminateWaveHeaders( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, int isInput ); + + +static void InitializeSingleDirectionHandlesAndBuffers( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers ) +{ + handlesAndBuffers->bufferEvent = 0; + handlesAndBuffers->waveHandles = 0; + handlesAndBuffers->deviceCount = 0; + handlesAndBuffers->waveHeaders = 0; + handlesAndBuffers->bufferCount = 0; +} + +static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostApi, + PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, + unsigned long winMmeSpecificFlags, + unsigned long bytesPerHostSample, + double sampleRate, PaWinMmeDeviceAndChannelCount *devices, + unsigned int deviceCount, PaWinWaveFormatChannelMask channelMask, int isInput ) +{ + PaError result; + MMRESULT mmresult; + signed int i, j; + PaSampleFormat sampleFormat; + int waveFormatTag; + + /* for error cleanup we expect that InitializeSingleDirectionHandlesAndBuffers() + has already been called to zero some fields */ + + result = CreateEventWithPaError( &handlesAndBuffers->bufferEvent, NULL, FALSE, FALSE, NULL ); + if( result != paNoError ) goto error; + + if( isInput ) + handlesAndBuffers->waveHandles = (void*)PaUtil_AllocateMemory( sizeof(HWAVEIN) * deviceCount ); + else + handlesAndBuffers->waveHandles = (void*)PaUtil_AllocateMemory( sizeof(HWAVEOUT) * deviceCount ); + if( !handlesAndBuffers->waveHandles ) + { + result = paInsufficientMemory; + goto error; + } + + handlesAndBuffers->deviceCount = deviceCount; + + for( i = 0; i < (signed int)deviceCount; ++i ) + { + if( isInput ) + ((HWAVEIN*)handlesAndBuffers->waveHandles)[i] = 0; + else + ((HWAVEOUT*)handlesAndBuffers->waveHandles)[i] = 0; + } + + /* @todo at the moment we only use 16 bit sample format */ + sampleFormat = paInt16; + waveFormatTag = SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( sampleFormat, winMmeSpecificFlags ); + + for( i = 0; i < (signed int)deviceCount; ++i ) + { + PaWinWaveFormat waveFormat; + UINT winMmeDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, devices[i].device ); + + /* @todo: consider providing a flag or #define to not try waveformat extensible + this could just initialize j to 1 the first time round. */ + + for( j = 0; j < 2; ++j ) + { + switch(j){ + case 0: + /* first, attempt to open the device using WAVEFORMATEXTENSIBLE, + if this fails we fall back to WAVEFORMATEX */ + + PaWin_InitializeWaveFormatExtensible( &waveFormat, devices[i].channelCount, + sampleFormat, waveFormatTag, sampleRate, channelMask ); + break; + + case 1: + /* retry with WAVEFORMATEX */ + + PaWin_InitializeWaveFormatEx( &waveFormat, devices[i].channelCount, + sampleFormat, waveFormatTag, sampleRate ); + break; + } + + /* REVIEW: consider not firing an event for input when a full duplex + stream is being used. this would probably depend on the + neverDropInput flag. */ + + if( isInput ) + { + mmresult = waveInOpen( &((HWAVEIN*)handlesAndBuffers->waveHandles)[i], winMmeDeviceId, + (WAVEFORMATEX*)&waveFormat, + (DWORD_PTR)handlesAndBuffers->bufferEvent, (DWORD_PTR)0, CALLBACK_EVENT ); + } + else + { + mmresult = waveOutOpen( &((HWAVEOUT*)handlesAndBuffers->waveHandles)[i], winMmeDeviceId, + (WAVEFORMATEX*)&waveFormat, + (DWORD_PTR)handlesAndBuffers->bufferEvent, (DWORD_PTR)0, CALLBACK_EVENT ); + } + + if( mmresult == MMSYSERR_NOERROR ) + { + break; /* success */ + } + else if( j == 0 ) + { + continue; /* try again with WAVEFORMATEX */ + } + else + { + switch( mmresult ) + { + case MMSYSERR_ALLOCATED: /* Specified resource is already allocated. */ + result = paDeviceUnavailable; + break; + case MMSYSERR_NODRIVER: /* No device driver is present. */ + result = paDeviceUnavailable; + break; + case MMSYSERR_NOMEM: /* Unable to allocate or lock memory. */ + result = paInsufficientMemory; + break; + + case MMSYSERR_BADDEVICEID: /* Specified device identifier is out of range. */ + /* falls through */ + + case WAVERR_BADFORMAT: /* Attempted to open with an unsupported waveform-audio format. */ + /* This can also occur if we try to open the device with an unsupported + * number of channels. This is attempted when device*ChannelCountIsKnown is + * set to 0. + */ + /* falls through */ + default: + result = paUnanticipatedHostError; + if( isInput ) + { + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + } + else + { + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + } + } + goto error; + } + } + } + + return result; + +error: + TerminateWaveHandles( handlesAndBuffers, isInput, 1 /* currentlyProcessingAnError */ ); + + return result; +} + + +static PaError TerminateWaveHandles( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, int isInput, int currentlyProcessingAnError ) +{ + PaError result = paNoError; + MMRESULT mmresult; + signed int i; + + if( handlesAndBuffers->waveHandles ) + { + for( i = handlesAndBuffers->deviceCount-1; i >= 0; --i ) + { + if( isInput ) + { + if( ((HWAVEIN*)handlesAndBuffers->waveHandles)[i] ) + mmresult = waveInClose( ((HWAVEIN*)handlesAndBuffers->waveHandles)[i] ); + else + mmresult = MMSYSERR_NOERROR; + } + else + { + if( ((HWAVEOUT*)handlesAndBuffers->waveHandles)[i] ) + mmresult = waveOutClose( ((HWAVEOUT*)handlesAndBuffers->waveHandles)[i] ); + else + mmresult = MMSYSERR_NOERROR; + } + + if( mmresult != MMSYSERR_NOERROR && + !currentlyProcessingAnError ) /* don't update the error state if we're already processing an error */ + { + result = paUnanticipatedHostError; + if( isInput ) + { + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + } + else + { + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + } + /* note that we don't break here, we try to continue closing devices */ + } + } + + PaUtil_FreeMemory( handlesAndBuffers->waveHandles ); + handlesAndBuffers->waveHandles = 0; + } + + if( handlesAndBuffers->bufferEvent ) + { + result = CloseHandleWithPaError( handlesAndBuffers->bufferEvent ); + handlesAndBuffers->bufferEvent = 0; + } + + return result; +} + + +static PaError InitializeWaveHeaders( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, + unsigned long hostBufferCount, + PaSampleFormat hostSampleFormat, + unsigned long framesPerHostBuffer, + PaWinMmeDeviceAndChannelCount *devices, + int isInput ) +{ + PaError result = paNoError; + MMRESULT mmresult; + WAVEHDR *deviceWaveHeaders; + signed int i, j; + + /* for error cleanup we expect that InitializeSingleDirectionHandlesAndBuffers() + has already been called to zero some fields */ + + + /* allocate an array of pointers to arrays of wave headers, one array of + wave headers per device */ + handlesAndBuffers->waveHeaders = (WAVEHDR**)PaUtil_AllocateMemory( sizeof(WAVEHDR*) * handlesAndBuffers->deviceCount ); + if( !handlesAndBuffers->waveHeaders ) + { + result = paInsufficientMemory; + goto error; + } + + for( i = 0; i < (signed int)handlesAndBuffers->deviceCount; ++i ) + handlesAndBuffers->waveHeaders[i] = 0; + + handlesAndBuffers->bufferCount = hostBufferCount; + + for( i = 0; i < (signed int)handlesAndBuffers->deviceCount; ++i ) + { + int bufferBytes = Pa_GetSampleSize( hostSampleFormat ) * + framesPerHostBuffer * devices[i].channelCount; + if( bufferBytes < 0 ) + { + result = paInternalError; + goto error; + } + + /* Allocate an array of wave headers for device i */ + deviceWaveHeaders = (WAVEHDR *) PaUtil_AllocateMemory( sizeof(WAVEHDR)*hostBufferCount ); + if( !deviceWaveHeaders ) + { + result = paInsufficientMemory; + goto error; + } + + for( j=0; j < (signed int)hostBufferCount; ++j ) + deviceWaveHeaders[j].lpData = 0; + + handlesAndBuffers->waveHeaders[i] = deviceWaveHeaders; + + /* Allocate a buffer for each wave header */ + for( j=0; j < (signed int)hostBufferCount; ++j ) + { + deviceWaveHeaders[j].lpData = (char *)PaUtil_AllocateMemory( bufferBytes ); + if( !deviceWaveHeaders[j].lpData ) + { + result = paInsufficientMemory; + goto error; + } + deviceWaveHeaders[j].dwBufferLength = bufferBytes; + deviceWaveHeaders[j].dwUser = 0xFFFFFFFF; /* indicates that *PrepareHeader() has not yet been called, for error clean up code */ + + if( isInput ) + { + mmresult = waveInPrepareHeader( ((HWAVEIN*)handlesAndBuffers->waveHandles)[i], &deviceWaveHeaders[j], sizeof(WAVEHDR) ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + goto error; + } + } + else /* output */ + { + mmresult = waveOutPrepareHeader( ((HWAVEOUT*)handlesAndBuffers->waveHandles)[i], &deviceWaveHeaders[j], sizeof(WAVEHDR) ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + goto error; + } + } + deviceWaveHeaders[j].dwUser = devices[i].channelCount; + } + } + + return result; + +error: + TerminateWaveHeaders( handlesAndBuffers, isInput ); + + return result; +} + + +static void TerminateWaveHeaders( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers, int isInput ) +{ + signed int i, j; + WAVEHDR *deviceWaveHeaders; + + if( handlesAndBuffers->waveHeaders ) + { + for( i = handlesAndBuffers->deviceCount-1; i >= 0 ; --i ) + { + deviceWaveHeaders = handlesAndBuffers->waveHeaders[i]; /* wave headers for device i */ + if( deviceWaveHeaders ) + { + for( j = handlesAndBuffers->bufferCount-1; j >= 0; --j ) + { + if( deviceWaveHeaders[j].lpData ) + { + if( deviceWaveHeaders[j].dwUser != 0xFFFFFFFF ) + { + if( isInput ) + waveInUnprepareHeader( ((HWAVEIN*)handlesAndBuffers->waveHandles)[i], &deviceWaveHeaders[j], sizeof(WAVEHDR) ); + else + waveOutUnprepareHeader( ((HWAVEOUT*)handlesAndBuffers->waveHandles)[i], &deviceWaveHeaders[j], sizeof(WAVEHDR) ); + } + + PaUtil_FreeMemory( deviceWaveHeaders[j].lpData ); + } + } + + PaUtil_FreeMemory( deviceWaveHeaders ); + } + } + + PaUtil_FreeMemory( handlesAndBuffers->waveHeaders ); + handlesAndBuffers->waveHeaders = 0; + } +} + + + +/* PaWinMmeStream - a stream data structure specifically for this implementation */ +/* note that struct PaWinMmeStream is typedeffed to PaWinMmeStream above. */ +struct PaWinMmeStream +{ + PaUtilStreamRepresentation streamRepresentation; + PaUtilCpuLoadMeasurer cpuLoadMeasurer; + PaUtilBufferProcessor bufferProcessor; + + int primeStreamUsingCallback; + + PaWinMmeSingleDirectionHandlesAndBuffers input; + PaWinMmeSingleDirectionHandlesAndBuffers output; + + /* Processing thread management -------------- */ + HANDLE abortEvent; + HANDLE processingThread; + PA_THREAD_ID processingThreadId; + + char throttleProcessingThreadOnOverload; /* 0 -> don't throtte, non-0 -> throttle */ + int processingThreadPriority; + int highThreadPriority; + int throttledThreadPriority; + unsigned long throttledSleepMsecs; + + int isStopped; + volatile int isActive; + volatile int stopProcessing; /* stop thread once existing buffers have been returned */ + volatile int abortProcessing; /* stop thread immediately */ + + DWORD allBuffersDurationMs; /* used to calculate timeouts */ +}; + +/* updates deviceCount if PaWinMmeUseMultipleDevices is used */ + +static PaError ValidateWinMmeSpecificStreamInfo( + const PaStreamParameters *streamParameters, + const PaWinMmeStreamInfo *streamInfo, + unsigned long *winMmeSpecificFlags, + char *throttleProcessingThreadOnOverload, + unsigned long *deviceCount ) +{ + if( streamInfo ) + { + if( streamInfo->size != sizeof( PaWinMmeStreamInfo ) + || streamInfo->version != 1 ) + { + return paIncompatibleHostApiSpecificStreamInfo; + } + + *winMmeSpecificFlags = streamInfo->flags; + + if( streamInfo->flags & paWinMmeDontThrottleOverloadedProcessingThread ) + *throttleProcessingThreadOnOverload = 0; + + if( streamInfo->flags & paWinMmeUseMultipleDevices ) + { + if( streamParameters->device != paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + *deviceCount = streamInfo->deviceCount; + } + } + + return paNoError; +} + +static PaError RetrieveDevicesFromStreamParameters( + struct PaUtilHostApiRepresentation *hostApi, + const PaStreamParameters *streamParameters, + const PaWinMmeStreamInfo *streamInfo, + PaWinMmeDeviceAndChannelCount *devices, + unsigned long deviceCount ) +{ + PaError result = paNoError; + unsigned int i; + int totalChannelCount; + PaDeviceIndex hostApiDevice; + + if( streamInfo && streamInfo->flags & paWinMmeUseMultipleDevices ) + { + totalChannelCount = 0; + for( i=0; i < deviceCount; ++i ) + { + /* validate that the device number is within range */ + result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, + streamInfo->devices[i].device, hostApi ); + if( result != paNoError ) + return result; + + devices[i].device = hostApiDevice; + devices[i].channelCount = streamInfo->devices[i].channelCount; + + totalChannelCount += devices[i].channelCount; + } + + if( totalChannelCount != streamParameters->channelCount ) + { + /* channelCount must match total channels specified by multiple devices */ + return paInvalidChannelCount; /* REVIEW use of this error code */ + } + } + else + { + devices[0].device = streamParameters->device; + devices[0].channelCount = streamParameters->channelCount; + } + + return result; +} + +static PaError ValidateInputChannelCounts( + struct PaUtilHostApiRepresentation *hostApi, + PaWinMmeDeviceAndChannelCount *devices, + unsigned long deviceCount ) +{ + unsigned int i; + PaWinMmeDeviceInfo *inputDeviceInfo; + PaError paerror; + + for( i=0; i < deviceCount; ++i ) + { + if( devices[i].channelCount < 1 ) + return paInvalidChannelCount; + + inputDeviceInfo = + (PaWinMmeDeviceInfo*)hostApi->deviceInfos[ devices[i].device ]; + + paerror = IsInputChannelCountSupported( inputDeviceInfo, devices[i].channelCount ); + if( paerror != paNoError ) + return paerror; + } + + return paNoError; +} + +static PaError ValidateOutputChannelCounts( + struct PaUtilHostApiRepresentation *hostApi, + PaWinMmeDeviceAndChannelCount *devices, + unsigned long deviceCount ) +{ + unsigned int i; + PaWinMmeDeviceInfo *outputDeviceInfo; + PaError paerror; + + for( i=0; i < deviceCount; ++i ) + { + if( devices[i].channelCount < 1 ) + return paInvalidChannelCount; + + outputDeviceInfo = + (PaWinMmeDeviceInfo*)hostApi->deviceInfos[ devices[i].device ]; + + paerror = IsOutputChannelCountSupported( outputDeviceInfo, devices[i].channelCount ); + if( paerror != paNoError ) + return paerror; + } + + return paNoError; +} + + +/* the following macros are intended to improve the readability of the following code */ +#define PA_IS_INPUT_STREAM_( stream ) ( stream ->input.waveHandles ) +#define PA_IS_OUTPUT_STREAM_( stream ) ( stream ->output.waveHandles ) +#define PA_IS_FULL_DUPLEX_STREAM_( stream ) ( stream ->input.waveHandles && stream ->output.waveHandles ) +#define PA_IS_HALF_DUPLEX_STREAM_( stream ) ( !(stream ->input.waveHandles && stream ->output.waveHandles) ) + +static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, + PaStream** s, + const PaStreamParameters *inputParameters, + const PaStreamParameters *outputParameters, + double sampleRate, + unsigned long framesPerBuffer, + PaStreamFlags streamFlags, + PaStreamCallback *streamCallback, + void *userData ) +{ + PaError result; + PaWinMmeHostApiRepresentation *winMmeHostApi = (PaWinMmeHostApiRepresentation*)hostApi; + PaWinMmeStream *stream = 0; + int bufferProcessorIsInitialized = 0; + int streamRepresentationIsInitialized = 0; + PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat; + int inputChannelCount, outputChannelCount; + PaSampleFormat inputSampleFormat, outputSampleFormat; + double suggestedInputLatency, suggestedOutputLatency; + PaWinMmeStreamInfo *inputStreamInfo, *outputStreamInfo; + PaWinWaveFormatChannelMask inputChannelMask, outputChannelMask; + unsigned long framesPerHostInputBuffer; + unsigned long hostInputBufferCount; + unsigned long framesPerHostOutputBuffer; + unsigned long hostOutputBufferCount; + unsigned long framesPerBufferProcessorCall; + PaWinMmeDeviceAndChannelCount *inputDevices = 0; /* contains all devices and channel counts as local host api ids, even when PaWinMmeUseMultipleDevices is not used */ + unsigned long winMmeSpecificInputFlags = 0; + unsigned long inputDeviceCount = 0; + PaWinMmeDeviceAndChannelCount *outputDevices = 0; + unsigned long winMmeSpecificOutputFlags = 0; + unsigned long outputDeviceCount = 0; /* contains all devices and channel counts as local host api ids, even when PaWinMmeUseMultipleDevices is not used */ + char throttleProcessingThreadOnOverload = 1; + + + if( inputParameters ) + { + inputChannelCount = inputParameters->channelCount; + inputSampleFormat = inputParameters->sampleFormat; + suggestedInputLatency = inputParameters->suggestedLatency; + + inputDeviceCount = 1; + + /* validate input hostApiSpecificStreamInfo */ + inputStreamInfo = (PaWinMmeStreamInfo*)inputParameters->hostApiSpecificStreamInfo; + result = ValidateWinMmeSpecificStreamInfo( inputParameters, inputStreamInfo, + &winMmeSpecificInputFlags, + &throttleProcessingThreadOnOverload, + &inputDeviceCount ); + if( result != paNoError ) return result; + + inputDevices = (PaWinMmeDeviceAndChannelCount*)alloca( sizeof(PaWinMmeDeviceAndChannelCount) * inputDeviceCount ); + if( !inputDevices ) return paInsufficientMemory; + + result = RetrieveDevicesFromStreamParameters( hostApi, inputParameters, inputStreamInfo, inputDevices, inputDeviceCount ); + if( result != paNoError ) return result; + + result = ValidateInputChannelCounts( hostApi, inputDevices, inputDeviceCount ); + if( result != paNoError ) return result; + + hostInputSampleFormat = + PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, inputSampleFormat ); + + if( inputDeviceCount != 1 ){ + /* always use direct speakers when using multi-device multichannel mode */ + inputChannelMask = PAWIN_SPEAKER_DIRECTOUT; + } + else + { + if( inputStreamInfo && inputStreamInfo->flags & paWinMmeUseChannelMask ) + inputChannelMask = inputStreamInfo->channelMask; + else + inputChannelMask = PaWin_DefaultChannelMask( inputDevices[0].channelCount ); + } + } + else + { + inputChannelCount = 0; + inputSampleFormat = 0; + suggestedInputLatency = 0.; + inputStreamInfo = 0; + hostInputSampleFormat = 0; + } + + + if( outputParameters ) + { + outputChannelCount = outputParameters->channelCount; + outputSampleFormat = outputParameters->sampleFormat; + suggestedOutputLatency = outputParameters->suggestedLatency; + + outputDeviceCount = 1; + + /* validate output hostApiSpecificStreamInfo */ + outputStreamInfo = (PaWinMmeStreamInfo*)outputParameters->hostApiSpecificStreamInfo; + result = ValidateWinMmeSpecificStreamInfo( outputParameters, outputStreamInfo, + &winMmeSpecificOutputFlags, + &throttleProcessingThreadOnOverload, + &outputDeviceCount ); + if( result != paNoError ) return result; + + outputDevices = (PaWinMmeDeviceAndChannelCount*)alloca( sizeof(PaWinMmeDeviceAndChannelCount) * outputDeviceCount ); + if( !outputDevices ) return paInsufficientMemory; + + result = RetrieveDevicesFromStreamParameters( hostApi, outputParameters, outputStreamInfo, outputDevices, outputDeviceCount ); + if( result != paNoError ) return result; + + result = ValidateOutputChannelCounts( hostApi, outputDevices, outputDeviceCount ); + if( result != paNoError ) return result; + + hostOutputSampleFormat = + PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, outputSampleFormat ); + + if( outputDeviceCount != 1 ){ + /* always use direct speakers when using multi-device multichannel mode */ + outputChannelMask = PAWIN_SPEAKER_DIRECTOUT; + } + else + { + if( outputStreamInfo && outputStreamInfo->flags & paWinMmeUseChannelMask ) + outputChannelMask = outputStreamInfo->channelMask; + else + outputChannelMask = PaWin_DefaultChannelMask( outputDevices[0].channelCount ); + } + } + else + { + outputChannelCount = 0; + outputSampleFormat = 0; + outputStreamInfo = 0; + hostOutputSampleFormat = 0; + suggestedOutputLatency = 0.; + } + + + /* + IMPLEMENT ME: + - alter sampleRate to a close allowable rate if possible / necessary + */ + + + /* validate platform specific flags */ + if( (streamFlags & paPlatformSpecificFlags) != 0 ) + return paInvalidFlag; /* unexpected platform specific flag */ + + + /* always disable clipping and dithering if we are outputting a raw spdif stream */ + if( (winMmeSpecificOutputFlags & paWinMmeWaveFormatDolbyAc3Spdif) + || (winMmeSpecificOutputFlags & paWinMmeWaveFormatWmaSpdif) ){ + + streamFlags = streamFlags | paClipOff | paDitherOff; + } + + + result = CalculateBufferSettings( &framesPerHostInputBuffer, &hostInputBufferCount, + &framesPerHostOutputBuffer, &hostOutputBufferCount, + inputChannelCount, hostInputSampleFormat, suggestedInputLatency, inputStreamInfo, + outputChannelCount, hostOutputSampleFormat, suggestedOutputLatency, outputStreamInfo, + sampleRate, framesPerBuffer ); + if( result != paNoError ) goto error; + + + stream = (PaWinMmeStream*)PaUtil_AllocateMemory( sizeof(PaWinMmeStream) ); + if( !stream ) + { + result = paInsufficientMemory; + goto error; + } + + InitializeSingleDirectionHandlesAndBuffers( &stream->input ); + InitializeSingleDirectionHandlesAndBuffers( &stream->output ); + + stream->abortEvent = 0; + stream->processingThread = 0; + + stream->throttleProcessingThreadOnOverload = throttleProcessingThreadOnOverload; + + PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, + ( (streamCallback) + ? &winMmeHostApi->callbackStreamInterface + : &winMmeHostApi->blockingStreamInterface ), + streamCallback, userData ); + streamRepresentationIsInitialized = 1; + + PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); + + + if( inputParameters && outputParameters ) /* full duplex */ + { + if( framesPerHostInputBuffer < framesPerHostOutputBuffer ) + { + assert( (framesPerHostOutputBuffer % framesPerHostInputBuffer) == 0 ); /* CalculateBufferSettings() should guarantee this condition */ + + framesPerBufferProcessorCall = framesPerHostInputBuffer; + } + else + { + assert( (framesPerHostInputBuffer % framesPerHostOutputBuffer) == 0 ); /* CalculateBufferSettings() should guarantee this condition */ + + framesPerBufferProcessorCall = framesPerHostOutputBuffer; + } + } + else if( inputParameters ) + { + framesPerBufferProcessorCall = framesPerHostInputBuffer; + } + else if( outputParameters ) + { + framesPerBufferProcessorCall = framesPerHostOutputBuffer; + } + + stream->input.framesPerBuffer = framesPerHostInputBuffer; + stream->output.framesPerBuffer = framesPerHostOutputBuffer; + + result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, + inputChannelCount, inputSampleFormat, hostInputSampleFormat, + outputChannelCount, outputSampleFormat, hostOutputSampleFormat, + sampleRate, streamFlags, framesPerBuffer, + framesPerBufferProcessorCall, paUtilFixedHostBufferSize, + streamCallback, userData ); + if( result != paNoError ) goto error; + + bufferProcessorIsInitialized = 1; + + /* stream info input latency is the minimum buffering latency (unlike suggested and default which are *maximums*) */ + stream->streamRepresentation.streamInfo.inputLatency = + (double)(PaUtil_GetBufferProcessorInputLatencyFrames(&stream->bufferProcessor) + + framesPerHostInputBuffer) / sampleRate; + stream->streamRepresentation.streamInfo.outputLatency = + (double)(PaUtil_GetBufferProcessorOutputLatencyFrames(&stream->bufferProcessor) + + (framesPerHostOutputBuffer * (hostOutputBufferCount-1))) / sampleRate; + stream->streamRepresentation.streamInfo.sampleRate = sampleRate; + + stream->primeStreamUsingCallback = ( (streamFlags&paPrimeOutputBuffersUsingStreamCallback) && streamCallback ) ? 1 : 0; + + /* time to sleep when throttling due to >100% cpu usage. + -a quater of a buffer's duration */ + stream->throttledSleepMsecs = + (unsigned long)(stream->bufferProcessor.framesPerHostBuffer * + stream->bufferProcessor.samplePeriod * .25 * 1000); + + stream->isStopped = 1; + stream->isActive = 0; + + + /* for maximum compatibility with multi-device multichannel drivers, + we first open all devices, then we prepare all buffers, finally + we start all devices ( in StartStream() ). teardown in reverse order. + */ + + if( inputParameters ) + { + result = InitializeWaveHandles( winMmeHostApi, &stream->input, + winMmeSpecificInputFlags, + stream->bufferProcessor.bytesPerHostInputSample, sampleRate, + inputDevices, inputDeviceCount, inputChannelMask, 1 /* isInput */ ); + if( result != paNoError ) goto error; + } + + if( outputParameters ) + { + result = InitializeWaveHandles( winMmeHostApi, &stream->output, + winMmeSpecificOutputFlags, + stream->bufferProcessor.bytesPerHostOutputSample, sampleRate, + outputDevices, outputDeviceCount, outputChannelMask, 0 /* isInput */ ); + if( result != paNoError ) goto error; + } + + if( inputParameters ) + { + result = InitializeWaveHeaders( &stream->input, hostInputBufferCount, + hostInputSampleFormat, framesPerHostInputBuffer, inputDevices, 1 /* isInput */ ); + if( result != paNoError ) goto error; + } + + if( outputParameters ) + { + result = InitializeWaveHeaders( &stream->output, hostOutputBufferCount, + hostOutputSampleFormat, framesPerHostOutputBuffer, outputDevices, 0 /* not isInput */ ); + if( result != paNoError ) goto error; + + stream->allBuffersDurationMs = (DWORD) (1000.0 * (framesPerHostOutputBuffer * stream->output.bufferCount) / sampleRate); + } + else + { + stream->allBuffersDurationMs = (DWORD) (1000.0 * (framesPerHostInputBuffer * stream->input.bufferCount) / sampleRate); + } + + + if( streamCallback ) + { + /* abort event is only needed for callback streams */ + result = CreateEventWithPaError( &stream->abortEvent, NULL, TRUE, FALSE, NULL ); + if( result != paNoError ) goto error; + } + + *s = (PaStream*)stream; + + return result; + +error: + + if( stream ) + { + if( stream->abortEvent ) + CloseHandle( stream->abortEvent ); + + TerminateWaveHeaders( &stream->output, 0 /* not isInput */ ); + TerminateWaveHeaders( &stream->input, 1 /* isInput */ ); + + TerminateWaveHandles( &stream->output, 0 /* not isInput */, 1 /* currentlyProcessingAnError */ ); + TerminateWaveHandles( &stream->input, 1 /* isInput */, 1 /* currentlyProcessingAnError */ ); + + if( bufferProcessorIsInitialized ) + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + + if( streamRepresentationIsInitialized ) + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + + PaUtil_FreeMemory( stream ); + } + + return result; +} + + +/* return non-zero if all current buffers are done */ +static int BuffersAreDone( WAVEHDR **waveHeaders, unsigned int deviceCount, int bufferIndex ) +{ + unsigned int i; + + for( i=0; i < deviceCount; ++i ) + { + if( !(waveHeaders[i][ bufferIndex ].dwFlags & WHDR_DONE) ) + { + return 0; + } + } + + return 1; +} + +static int CurrentInputBuffersAreDone( PaWinMmeStream *stream ) +{ + return BuffersAreDone( stream->input.waveHeaders, stream->input.deviceCount, stream->input.currentBufferIndex ); +} + +static int CurrentOutputBuffersAreDone( PaWinMmeStream *stream ) +{ + return BuffersAreDone( stream->output.waveHeaders, stream->output.deviceCount, stream->output.currentBufferIndex ); +} + + +/* return non-zero if any buffers are queued */ +static int NoBuffersAreQueued( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers ) +{ + unsigned int i, j; + + if( handlesAndBuffers->waveHandles ) + { + for( i=0; i < handlesAndBuffers->bufferCount; ++i ) + { + for( j=0; j < handlesAndBuffers->deviceCount; ++j ) + { + if( !( handlesAndBuffers->waveHeaders[ j ][ i ].dwFlags & WHDR_DONE) ) + { + return 0; + } + } + } + } + + return 1; +} + + +#define PA_CIRCULAR_INCREMENT_( current, max )\ + ( (((current) + 1) >= (max)) ? (0) : (current+1) ) + +#define PA_CIRCULAR_DECREMENT_( current, max )\ + ( ((current) == 0) ? ((max)-1) : (current-1) ) + + +static signed long GetAvailableFrames( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers ) +{ + signed long result = 0; + unsigned int i; + + if( BuffersAreDone( handlesAndBuffers->waveHeaders, handlesAndBuffers->deviceCount, handlesAndBuffers->currentBufferIndex ) ) + { + /* we could calculate the following in O(1) if we kept track of the + last done buffer */ + result = handlesAndBuffers->framesPerBuffer - handlesAndBuffers->framesUsedInCurrentBuffer; + + i = PA_CIRCULAR_INCREMENT_( handlesAndBuffers->currentBufferIndex, handlesAndBuffers->bufferCount ); + while( i != handlesAndBuffers->currentBufferIndex ) + { + if( BuffersAreDone( handlesAndBuffers->waveHeaders, handlesAndBuffers->deviceCount, i ) ) + { + result += handlesAndBuffers->framesPerBuffer; + i = PA_CIRCULAR_INCREMENT_( i, handlesAndBuffers->bufferCount ); + } + else + break; + } + } + + return result; +} + + +static PaError AdvanceToNextInputBuffer( PaWinMmeStream *stream ) +{ + PaError result = paNoError; + MMRESULT mmresult; + unsigned int i; + + for( i=0; i < stream->input.deviceCount; ++i ) + { + stream->input.waveHeaders[i][ stream->input.currentBufferIndex ].dwFlags &= ~WHDR_DONE; + mmresult = waveInAddBuffer( ((HWAVEIN*)stream->input.waveHandles)[i], + &stream->input.waveHeaders[i][ stream->input.currentBufferIndex ], + sizeof(WAVEHDR) ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + } + } + + stream->input.currentBufferIndex = + PA_CIRCULAR_INCREMENT_( stream->input.currentBufferIndex, stream->input.bufferCount ); + + stream->input.framesUsedInCurrentBuffer = 0; + + return result; +} + + +static PaError AdvanceToNextOutputBuffer( PaWinMmeStream *stream ) +{ + PaError result = paNoError; + MMRESULT mmresult; + unsigned int i; + + for( i=0; i < stream->output.deviceCount; ++i ) + { + mmresult = waveOutWrite( ((HWAVEOUT*)stream->output.waveHandles)[i], + &stream->output.waveHeaders[i][ stream->output.currentBufferIndex ], + sizeof(WAVEHDR) ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + } + } + + stream->output.currentBufferIndex = + PA_CIRCULAR_INCREMENT_( stream->output.currentBufferIndex, stream->output.bufferCount ); + + stream->output.framesUsedInCurrentBuffer = 0; + + return result; +} + + +/* requeue all but the most recent input with the driver. Used for catching + up after a total input buffer underrun */ +static PaError CatchUpInputBuffers( PaWinMmeStream *stream ) +{ + PaError result = paNoError; + unsigned int i; + + for( i=0; i < stream->input.bufferCount - 1; ++i ) + { + result = AdvanceToNextInputBuffer( stream ); + if( result != paNoError ) + break; + } + + return result; +} + + +/* take the most recent output and duplicate it to all other output buffers + and requeue them. Used for catching up after a total output buffer underrun. +*/ +static PaError CatchUpOutputBuffers( PaWinMmeStream *stream ) +{ + PaError result = paNoError; + unsigned int i, j; + unsigned int previousBufferIndex = + PA_CIRCULAR_DECREMENT_( stream->output.currentBufferIndex, stream->output.bufferCount ); + + for( i=0; i < stream->output.bufferCount - 1; ++i ) + { + for( j=0; j < stream->output.deviceCount; ++j ) + { + if( stream->output.waveHeaders[j][ stream->output.currentBufferIndex ].lpData + != stream->output.waveHeaders[j][ previousBufferIndex ].lpData ) + { + CopyMemory( stream->output.waveHeaders[j][ stream->output.currentBufferIndex ].lpData, + stream->output.waveHeaders[j][ previousBufferIndex ].lpData, + stream->output.waveHeaders[j][ stream->output.currentBufferIndex ].dwBufferLength ); + } + } + + result = AdvanceToNextOutputBuffer( stream ); + if( result != paNoError ) + break; + } + + return result; +} + + +PA_THREAD_FUNC ProcessingThreadProc( void *pArg ) +{ + PaWinMmeStream *stream = (PaWinMmeStream *)pArg; + HANDLE events[3]; + int eventCount = 0; + DWORD result = paNoError; + DWORD waitResult; + DWORD timeout = (unsigned long)(stream->allBuffersDurationMs * 0.5); + int hostBuffersAvailable; + signed int hostInputBufferIndex, hostOutputBufferIndex; + PaStreamCallbackFlags statusFlags; + int callbackResult; + int done = 0; + unsigned int channel, i; + unsigned long framesProcessed; + + /* prepare event array for call to WaitForMultipleObjects() */ + if( stream->input.bufferEvent ) + events[eventCount++] = stream->input.bufferEvent; + if( stream->output.bufferEvent ) + events[eventCount++] = stream->output.bufferEvent; + events[eventCount++] = stream->abortEvent; + + statusFlags = 0; /** @todo support paInputUnderflow, paOutputOverflow and paNeverDropInput */ + + /* loop until something causes us to stop */ + do{ + /* wait for MME to signal that a buffer is available, or for + the PA abort event to be signaled. + + When this indicates that one or more buffers are available + NoBuffersAreQueued() and Current*BuffersAreDone are used below to + poll for additional done buffers. NoBuffersAreQueued() will fail + to identify an underrun/overflow if the driver doesn't mark all done + buffers prior to signalling the event. Some drivers do this + (eg RME Digi96, and others don't eg VIA PC 97 input). This isn't a + huge problem, it just means that we won't always be able to detect + underflow/overflow. + */ + waitResult = WaitForMultipleObjects( eventCount, events, FALSE /* wait all = FALSE */, timeout ); + if( waitResult == WAIT_FAILED ) + { + result = paUnanticipatedHostError; + /** @todo FIXME/REVIEW: can't return host error info from an asyncronous thread. see http://www.portaudio.com/trac/ticket/143 */ + done = 1; + } + else if( waitResult == WAIT_TIMEOUT ) + { + /* if a timeout is encountered, continue */ + } + + if( stream->abortProcessing ) + { + /* Pa_AbortStream() has been called, stop processing immediately */ + done = 1; + } + else if( stream->stopProcessing ) + { + /* Pa_StopStream() has been called or the user callback returned + non-zero, processing will continue until all output buffers + are marked as done. The stream will stop immediately if it + is input-only. + */ + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + if( NoBuffersAreQueued( &stream->output ) ) + done = 1; /* Will cause thread to return. */ + } + else + { + /* input only stream */ + done = 1; /* Will cause thread to return. */ + } + } + else + { + hostBuffersAvailable = 1; + + /* process all available host buffers */ + do + { + hostInputBufferIndex = -1; + hostOutputBufferIndex = -1; + + if( PA_IS_INPUT_STREAM_(stream) ) + { + if( CurrentInputBuffersAreDone( stream ) ) + { + if( NoBuffersAreQueued( &stream->input ) ) + { + /** @todo + if all of the other buffers are also ready then + we discard all but the most recent. This is an + input buffer overflow. FIXME: these buffers should + be passed to the callback in a paNeverDropInput + stream. http://www.portaudio.com/trac/ticket/142 + + note that it is also possible for an input overflow + to happen while the callback is processing a buffer. + that is handled further down. + */ + result = CatchUpInputBuffers( stream ); + if( result != paNoError ) + done = 1; + + statusFlags |= paInputOverflow; + } + + hostInputBufferIndex = stream->input.currentBufferIndex; + } + } + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + if( CurrentOutputBuffersAreDone( stream ) ) + { + /* ok, we have an output buffer */ + + if( NoBuffersAreQueued( &stream->output ) ) + { + /* + if all of the other buffers are also ready, catch up by copying + the most recently generated buffer into all but one of the output + buffers. + + note that this catch up code only handles the case where all + buffers have been played out due to this thread not having + woken up at all. a more common case occurs when this thread + is woken up, processes one buffer, but takes too long, and as + a result all the other buffers have become un-queued. that + case is handled further down. + */ + + result = CatchUpOutputBuffers( stream ); + if( result != paNoError ) + done = 1; + + statusFlags |= paOutputUnderflow; + } + + hostOutputBufferIndex = stream->output.currentBufferIndex; + } + } + + + if( (PA_IS_FULL_DUPLEX_STREAM_(stream) && hostInputBufferIndex != -1 && hostOutputBufferIndex != -1) || + (PA_IS_HALF_DUPLEX_STREAM_(stream) && ( hostInputBufferIndex != -1 || hostOutputBufferIndex != -1 ) ) ) + { + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /** @todo implement inputBufferAdcTime */ + + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + /* set timeInfo.currentTime and calculate timeInfo.outputBufferDacTime + from the current wave out position */ + MMTIME mmtime; + double timeBeforeGetPosition, timeAfterGetPosition; + double time; + long framesInBufferRing; + long writePosition; + long playbackPosition; + HWAVEOUT firstWaveOutDevice = ((HWAVEOUT*)stream->output.waveHandles)[0]; + + mmtime.wType = TIME_SAMPLES; + timeBeforeGetPosition = PaUtil_GetTime(); + waveOutGetPosition( firstWaveOutDevice, &mmtime, sizeof(MMTIME) ); + timeAfterGetPosition = PaUtil_GetTime(); + + timeInfo.currentTime = timeAfterGetPosition; + + /* approximate time at which wave out position was measured + as half way between timeBeforeGetPosition and timeAfterGetPosition */ + time = timeBeforeGetPosition + (timeAfterGetPosition - timeBeforeGetPosition) * .5; + + framesInBufferRing = stream->output.bufferCount * stream->bufferProcessor.framesPerHostBuffer; + playbackPosition = mmtime.u.sample % framesInBufferRing; + + writePosition = stream->output.currentBufferIndex * stream->bufferProcessor.framesPerHostBuffer + + stream->output.framesUsedInCurrentBuffer; + + if( playbackPosition >= writePosition ){ + timeInfo.outputBufferDacTime = + time + ((double)( writePosition + (framesInBufferRing - playbackPosition) ) * stream->bufferProcessor.samplePeriod ); + }else{ + timeInfo.outputBufferDacTime = + time + ((double)( writePosition - playbackPosition ) * stream->bufferProcessor.samplePeriod ); + } + } + + + PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); + + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, statusFlags ); + + /* reset status flags once they have been passed to the buffer processor */ + statusFlags = 0; + + if( PA_IS_INPUT_STREAM_(stream) ) + { + PaUtil_SetInputFrameCount( &stream->bufferProcessor, 0 /* default to host buffer size */ ); + + channel = 0; + for( i=0; iinput.deviceCount; ++i ) + { + /* we have stored the number of channels in the buffer in dwUser */ + int channelCount = (int)stream->input.waveHeaders[i][ hostInputBufferIndex ].dwUser; + + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, channel, + stream->input.waveHeaders[i][ hostInputBufferIndex ].lpData + + stream->input.framesUsedInCurrentBuffer * channelCount * + stream->bufferProcessor.bytesPerHostInputSample, + channelCount ); + + + channel += channelCount; + } + } + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, 0 /* default to host buffer size */ ); + + channel = 0; + for( i=0; ioutput.deviceCount; ++i ) + { + /* we have stored the number of channels in the buffer in dwUser */ + int channelCount = (int)stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser; + + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel, + stream->output.waveHeaders[i][ hostOutputBufferIndex ].lpData + + stream->output.framesUsedInCurrentBuffer * channelCount * + stream->bufferProcessor.bytesPerHostOutputSample, + channelCount ); + + channel += channelCount; + } + } + + callbackResult = paContinue; + framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult ); + + stream->input.framesUsedInCurrentBuffer += framesProcessed; + stream->output.framesUsedInCurrentBuffer += framesProcessed; + + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + + if( callbackResult == paContinue ) + { + /* nothing special to do */ + } + else if( callbackResult == paAbort ) + { + stream->abortProcessing = 1; + done = 1; + /** @todo FIXME: should probably reset the output device immediately once the callback returns paAbort + see: http://www.portaudio.com/trac/ticket/141 + */ + result = paNoError; + } + else + { + /* User callback has asked us to stop with paComplete or other non-zero value */ + stream->stopProcessing = 1; /* stop once currently queued audio has finished */ + result = paNoError; + } + + + if( PA_IS_INPUT_STREAM_(stream) + && stream->stopProcessing == 0 && stream->abortProcessing == 0 + && stream->input.framesUsedInCurrentBuffer == stream->input.framesPerBuffer ) + { + if( NoBuffersAreQueued( &stream->input ) ) + { + /** @todo need to handle PaNeverDropInput here where necessary */ + result = CatchUpInputBuffers( stream ); + if( result != paNoError ) + done = 1; + + statusFlags |= paInputOverflow; + } + + result = AdvanceToNextInputBuffer( stream ); + if( result != paNoError ) + done = 1; + } + + + if( PA_IS_OUTPUT_STREAM_(stream) && !stream->abortProcessing ) + { + if( stream->stopProcessing && + stream->output.framesUsedInCurrentBuffer < stream->output.framesPerBuffer ) + { + /* zero remaining samples in output output buffer and flush */ + + stream->output.framesUsedInCurrentBuffer += PaUtil_ZeroOutput( &stream->bufferProcessor, + stream->output.framesPerBuffer - stream->output.framesUsedInCurrentBuffer ); + + /* we send the entire buffer to the output devices, but we could + just send a partial buffer, rather than zeroing the unused + samples. + */ + } + + if( stream->output.framesUsedInCurrentBuffer == stream->output.framesPerBuffer ) + { + /* check for underflow before enquing the just-generated buffer, + but recover from underflow after enquing it. This ensures + that the most recent audio segment is repeated */ + int outputUnderflow = NoBuffersAreQueued( &stream->output ); + + result = AdvanceToNextOutputBuffer( stream ); + if( result != paNoError ) + done = 1; + + if( outputUnderflow && !done && !stream->stopProcessing ) + { + /* Recover from underflow in the case where the + underflow occured while processing the buffer + we just finished */ + + result = CatchUpOutputBuffers( stream ); + if( result != paNoError ) + done = 1; + + statusFlags |= paOutputUnderflow; + } + } + } + + if( stream->throttleProcessingThreadOnOverload != 0 ) + { + if( stream->stopProcessing || stream->abortProcessing ) + { + if( stream->processingThreadPriority != stream->highThreadPriority ) + { + SetThreadPriority( stream->processingThread, stream->highThreadPriority ); + stream->processingThreadPriority = stream->highThreadPriority; + } + } + else if( PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ) > 1. ) + { + if( stream->processingThreadPriority != stream->throttledThreadPriority ) + { + SetThreadPriority( stream->processingThread, stream->throttledThreadPriority ); + stream->processingThreadPriority = stream->throttledThreadPriority; + } + + /* sleep to give other processes a go */ + Sleep( stream->throttledSleepMsecs ); + } + else + { + if( stream->processingThreadPriority != stream->highThreadPriority ) + { + SetThreadPriority( stream->processingThread, stream->highThreadPriority ); + stream->processingThreadPriority = stream->highThreadPriority; + } + } + } + } + else + { + hostBuffersAvailable = 0; + } + } + while( hostBuffersAvailable && + stream->stopProcessing == 0 && + stream->abortProcessing == 0 && + !done ); + } + } + while( !done ); + + stream->isActive = 0; + + if( stream->streamRepresentation.streamFinishedCallback != 0 ) + stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); + + PaUtil_ResetCpuLoadMeasurer( &stream->cpuLoadMeasurer ); + + return result; +} + + +/* + When CloseStream() is called, the multi-api layer ensures that + the stream has already been stopped or aborted. +*/ +static PaError CloseStream( PaStream* s ) +{ + PaError result; + PaWinMmeStream *stream = (PaWinMmeStream*)s; + + result = CloseHandleWithPaError( stream->abortEvent ); + if( result != paNoError ) goto error; + + TerminateWaveHeaders( &stream->output, 0 /* not isInput */ ); + TerminateWaveHeaders( &stream->input, 1 /* isInput */ ); + + TerminateWaveHandles( &stream->output, 0 /* not isInput */, 0 /* not currentlyProcessingAnError */ ); + TerminateWaveHandles( &stream->input, 1 /* isInput */, 0 /* not currentlyProcessingAnError */ ); + + PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); + PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); + PaUtil_FreeMemory( stream ); + +error: + /** @todo REVIEW: what is the best way to clean up a stream if an error is detected? */ + return result; +} + + +static PaError StartStream( PaStream *s ) +{ + PaError result; + PaWinMmeStream *stream = (PaWinMmeStream*)s; + MMRESULT mmresult; + unsigned int i, j; + int callbackResult; + unsigned int channel; + unsigned long framesProcessed; + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /** @todo implement this for stream priming */ + + PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); + + if( PA_IS_INPUT_STREAM_(stream) ) + { + for( i=0; iinput.bufferCount; ++i ) + { + for( j=0; jinput.deviceCount; ++j ) + { + stream->input.waveHeaders[j][i].dwFlags &= ~WHDR_DONE; + mmresult = waveInAddBuffer( ((HWAVEIN*)stream->input.waveHandles)[j], &stream->input.waveHeaders[j][i], sizeof(WAVEHDR) ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + goto error; + } + } + } + stream->input.currentBufferIndex = 0; + stream->input.framesUsedInCurrentBuffer = 0; + } + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + for( i=0; ioutput.deviceCount; ++i ) + { + if( (mmresult = waveOutPause( ((HWAVEOUT*)stream->output.waveHandles)[i] )) != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + goto error; + } + } + + for( i=0; ioutput.bufferCount; ++i ) + { + if( stream->primeStreamUsingCallback ) + { + + stream->output.framesUsedInCurrentBuffer = 0; + do{ + + PaUtil_BeginBufferProcessing( &stream->bufferProcessor, + &timeInfo, + paPrimingOutput | ((stream->input.bufferCount > 0 ) ? paInputUnderflow : 0)); + + if( stream->input.bufferCount > 0 ) + PaUtil_SetNoInput( &stream->bufferProcessor ); + + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, 0 /* default to host buffer size */ ); + + channel = 0; + for( j=0; joutput.deviceCount; ++j ) + { + /* we have stored the number of channels in the buffer in dwUser */ + int channelCount = (int)stream->output.waveHeaders[j][i].dwUser; + + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel, + stream->output.waveHeaders[j][i].lpData + + stream->output.framesUsedInCurrentBuffer * channelCount * + stream->bufferProcessor.bytesPerHostOutputSample, + channelCount ); + + /* we have stored the number of channels in the buffer in dwUser */ + channel += channelCount; + } + + callbackResult = paContinue; + framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult ); + stream->output.framesUsedInCurrentBuffer += framesProcessed; + + if( callbackResult != paContinue ) + { + /** @todo fix this, what do we do if callback result is non-zero during stream + priming? + + for complete: play out primed waveHeaders as usual + for abort: clean up immediately. + */ + } + + }while( stream->output.framesUsedInCurrentBuffer != stream->output.framesPerBuffer ); + + } + else + { + for( j=0; joutput.deviceCount; ++j ) + { + ZeroMemory( stream->output.waveHeaders[j][i].lpData, stream->output.waveHeaders[j][i].dwBufferLength ); + } + } + + /* we queue all channels of a single buffer frame (accross all + devices, because some multidevice multichannel drivers work + better this way */ + for( j=0; joutput.deviceCount; ++j ) + { + mmresult = waveOutWrite( ((HWAVEOUT*)stream->output.waveHandles)[j], &stream->output.waveHeaders[j][i], sizeof(WAVEHDR) ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + goto error; + } + } + } + stream->output.currentBufferIndex = 0; + stream->output.framesUsedInCurrentBuffer = 0; + } + + + stream->isStopped = 0; + stream->isActive = 1; + stream->stopProcessing = 0; + stream->abortProcessing = 0; + + result = ResetEventWithPaError( stream->input.bufferEvent ); + if( result != paNoError ) goto error; + + result = ResetEventWithPaError( stream->output.bufferEvent ); + if( result != paNoError ) goto error; + + + if( stream->streamRepresentation.streamCallback ) + { + /* callback stream */ + + result = ResetEventWithPaError( stream->abortEvent ); + if( result != paNoError ) goto error; + + /* Create thread that waits for audio buffers to be ready for processing. */ + stream->processingThread = CREATE_THREAD; + if( !stream->processingThread ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_SYSTEM_ERROR( GetLastError() ); + goto error; + } + + /** @todo could have mme specific stream parameters to allow the user + to set the callback thread priorities */ + stream->highThreadPriority = THREAD_PRIORITY_TIME_CRITICAL; + stream->throttledThreadPriority = THREAD_PRIORITY_NORMAL; + + if( !SetThreadPriority( stream->processingThread, stream->highThreadPriority ) ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_SYSTEM_ERROR( GetLastError() ); + goto error; + } + stream->processingThreadPriority = stream->highThreadPriority; + } + else + { + /* blocking read/write stream */ + + } + + if( PA_IS_INPUT_STREAM_(stream) ) + { + for( i=0; i < stream->input.deviceCount; ++i ) + { + mmresult = waveInStart( ((HWAVEIN*)stream->input.waveHandles)[i] ); + PA_DEBUG(("Pa_StartStream: waveInStart returned = 0x%X.\n", mmresult)); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + goto error; + } + } + } + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + for( i=0; i < stream->output.deviceCount; ++i ) + { + if( (mmresult = waveOutRestart( ((HWAVEOUT*)stream->output.waveHandles)[i] )) != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + goto error; + } + } + } + + return result; + +error: + /** @todo FIXME: implement recovery as best we can + This should involve rolling back to a state as-if this function had never been called + */ + return result; +} + + +static PaError StopStream( PaStream *s ) +{ + PaError result = paNoError; + PaWinMmeStream *stream = (PaWinMmeStream*)s; + int timeout; + DWORD waitResult; + MMRESULT mmresult; + signed int hostOutputBufferIndex; + unsigned int channel, waitCount, i; + + /** @todo + REVIEW: the error checking in this function needs review. the basic + idea is to return from this function in a known state - for example + there is no point avoiding calling waveInReset just because + the thread times out. + */ + + if( stream->processingThread ) + { + /* callback stream */ + + /* Tell processing thread to stop generating more data and to let current data play out. */ + stream->stopProcessing = 1; + + /* Calculate timeOut longer than longest time it could take to return all buffers. */ + timeout = (int)(stream->allBuffersDurationMs * 1.5); + if( timeout < PA_MME_MIN_TIMEOUT_MSEC_ ) + timeout = PA_MME_MIN_TIMEOUT_MSEC_; + + PA_DEBUG(("WinMME StopStream: waiting for background thread.\n")); + + waitResult = WaitForSingleObject( stream->processingThread, timeout ); + if( waitResult == WAIT_TIMEOUT ) + { + /* try to abort */ + stream->abortProcessing = 1; + SetEvent( stream->abortEvent ); + waitResult = WaitForSingleObject( stream->processingThread, timeout ); + if( waitResult == WAIT_TIMEOUT ) + { + PA_DEBUG(("WinMME StopStream: timed out while waiting for background thread to finish.\n")); + result = paTimedOut; + } + } + + CloseHandle( stream->processingThread ); + stream->processingThread = NULL; + } + else + { + /* blocking read / write stream */ + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + if( stream->output.framesUsedInCurrentBuffer > 0 ) + { + /* there are still unqueued frames in the current buffer, so flush them */ + + hostOutputBufferIndex = stream->output.currentBufferIndex; + + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, + stream->output.framesPerBuffer - stream->output.framesUsedInCurrentBuffer ); + + channel = 0; + for( i=0; ioutput.deviceCount; ++i ) + { + /* we have stored the number of channels in the buffer in dwUser */ + int channelCount = (int)stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser; + + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel, + stream->output.waveHeaders[i][ hostOutputBufferIndex ].lpData + + stream->output.framesUsedInCurrentBuffer * channelCount * + stream->bufferProcessor.bytesPerHostOutputSample, + channelCount ); + + channel += channelCount; + } + + PaUtil_ZeroOutput( &stream->bufferProcessor, + stream->output.framesPerBuffer - stream->output.framesUsedInCurrentBuffer ); + + /* we send the entire buffer to the output devices, but we could + just send a partial buffer, rather than zeroing the unused + samples. + */ + AdvanceToNextOutputBuffer( stream ); + } + + + timeout = (stream->allBuffersDurationMs / stream->output.bufferCount) + 1; + if( timeout < PA_MME_MIN_TIMEOUT_MSEC_ ) + timeout = PA_MME_MIN_TIMEOUT_MSEC_; + + waitCount = 0; + while( !NoBuffersAreQueued( &stream->output ) && waitCount <= stream->output.bufferCount ) + { + /* wait for MME to signal that a buffer is available */ + waitResult = WaitForSingleObject( stream->output.bufferEvent, timeout ); + if( waitResult == WAIT_FAILED ) + { + break; + } + else if( waitResult == WAIT_TIMEOUT ) + { + /* keep waiting */ + } + + ++waitCount; + } + } + } + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + for( i =0; i < stream->output.deviceCount; ++i ) + { + mmresult = waveOutReset( ((HWAVEOUT*)stream->output.waveHandles)[i] ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + } + } + } + + if( PA_IS_INPUT_STREAM_(stream) ) + { + for( i=0; i < stream->input.deviceCount; ++i ) + { + mmresult = waveInReset( ((HWAVEIN*)stream->input.waveHandles)[i] ); + if( mmresult != MMSYSERR_NOERROR ) + { + result = paUnanticipatedHostError; + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + } + } + } + + stream->isStopped = 1; + stream->isActive = 0; + + return result; +} + + +static PaError AbortStream( PaStream *s ) +{ + PaError result = paNoError; + PaWinMmeStream *stream = (PaWinMmeStream*)s; + int timeout; + DWORD waitResult; + MMRESULT mmresult; + unsigned int i; + + /** @todo + REVIEW: the error checking in this function needs review. the basic + idea is to return from this function in a known state - for example + there is no point avoiding calling waveInReset just because + the thread times out. + */ + + if( stream->processingThread ) + { + /* callback stream */ + + /* Tell processing thread to abort immediately */ + stream->abortProcessing = 1; + SetEvent( stream->abortEvent ); + } + + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + for( i =0; i < stream->output.deviceCount; ++i ) + { + mmresult = waveOutReset( ((HWAVEOUT*)stream->output.waveHandles)[i] ); + if( mmresult != MMSYSERR_NOERROR ) + { + PA_MME_SET_LAST_WAVEOUT_ERROR( mmresult ); + return paUnanticipatedHostError; + } + } + } + + if( PA_IS_INPUT_STREAM_(stream) ) + { + for( i=0; i < stream->input.deviceCount; ++i ) + { + mmresult = waveInReset( ((HWAVEIN*)stream->input.waveHandles)[i] ); + if( mmresult != MMSYSERR_NOERROR ) + { + PA_MME_SET_LAST_WAVEIN_ERROR( mmresult ); + return paUnanticipatedHostError; + } + } + } + + + if( stream->processingThread ) + { + /* callback stream */ + + PA_DEBUG(("WinMME AbortStream: waiting for background thread.\n")); + + /* Calculate timeOut longer than longest time it could take to return all buffers. */ + timeout = (int)(stream->allBuffersDurationMs * 1.5); + if( timeout < PA_MME_MIN_TIMEOUT_MSEC_ ) + timeout = PA_MME_MIN_TIMEOUT_MSEC_; + + waitResult = WaitForSingleObject( stream->processingThread, timeout ); + if( waitResult == WAIT_TIMEOUT ) + { + PA_DEBUG(("WinMME AbortStream: timed out while waiting for background thread to finish.\n")); + return paTimedOut; + } + + CloseHandle( stream->processingThread ); + stream->processingThread = NULL; + } + + stream->isStopped = 1; + stream->isActive = 0; + + return result; +} + + +static PaError IsStreamStopped( PaStream *s ) +{ + PaWinMmeStream *stream = (PaWinMmeStream*)s; + + return stream->isStopped; +} + + +static PaError IsStreamActive( PaStream *s ) +{ + PaWinMmeStream *stream = (PaWinMmeStream*)s; + + return stream->isActive; +} + + +static PaTime GetStreamTime( PaStream *s ) +{ + (void) s; /* unused parameter */ + + return PaUtil_GetTime(); +} + + +static double GetStreamCpuLoad( PaStream* s ) +{ + PaWinMmeStream *stream = (PaWinMmeStream*)s; + + return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); +} + + +/* + As separate stream interfaces are used for blocking and callback + streams, the following functions can be guaranteed to only be called + for blocking streams. +*/ + +static PaError ReadStream( PaStream* s, + void *buffer, + unsigned long frames ) +{ + PaError result = paNoError; + PaWinMmeStream *stream = (PaWinMmeStream*)s; + void *userBuffer; + unsigned long framesRead = 0; + unsigned long framesProcessed; + signed int hostInputBufferIndex; + DWORD waitResult; + DWORD timeout = (unsigned long)(stream->allBuffersDurationMs * 0.5); + unsigned int channel, i; + + if( PA_IS_INPUT_STREAM_(stream) ) + { + /* make a local copy of the user buffer pointer(s). this is necessary + because PaUtil_CopyInput() advances these pointers every time + it is called. + */ + if( stream->bufferProcessor.userInputIsInterleaved ) + { + userBuffer = buffer; + } + else + { + userBuffer = (void*)alloca( sizeof(void*) * stream->bufferProcessor.inputChannelCount ); + if( !userBuffer ) + return paInsufficientMemory; + for( i = 0; ibufferProcessor.inputChannelCount; ++i ) + ((void**)userBuffer)[i] = ((void**)buffer)[i]; + } + + do{ + if( CurrentInputBuffersAreDone( stream ) ) + { + if( NoBuffersAreQueued( &stream->input ) ) + { + /** @todo REVIEW: consider what to do if the input overflows. + do we requeue all of the buffers? should we be running + a thread to make sure they are always queued? + see: http://www.portaudio.com/trac/ticket/117 + */ + + result = paInputOverflowed; + } + + hostInputBufferIndex = stream->input.currentBufferIndex; + + PaUtil_SetInputFrameCount( &stream->bufferProcessor, + stream->input.framesPerBuffer - stream->input.framesUsedInCurrentBuffer ); + + channel = 0; + for( i=0; iinput.deviceCount; ++i ) + { + /* we have stored the number of channels in the buffer in dwUser */ + int channelCount = (int)stream->input.waveHeaders[i][ hostInputBufferIndex ].dwUser; + + PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, channel, + stream->input.waveHeaders[i][ hostInputBufferIndex ].lpData + + stream->input.framesUsedInCurrentBuffer * channelCount * + stream->bufferProcessor.bytesPerHostInputSample, + channelCount ); + + channel += channelCount; + } + + framesProcessed = PaUtil_CopyInput( &stream->bufferProcessor, &userBuffer, frames - framesRead ); + + stream->input.framesUsedInCurrentBuffer += framesProcessed; + if( stream->input.framesUsedInCurrentBuffer == stream->input.framesPerBuffer ) + { + result = AdvanceToNextInputBuffer( stream ); + if( result != paNoError ) + break; + } + + framesRead += framesProcessed; + + }else{ + /* wait for MME to signal that a buffer is available */ + waitResult = WaitForSingleObject( stream->input.bufferEvent, timeout ); + if( waitResult == WAIT_FAILED ) + { + result = paUnanticipatedHostError; + break; + } + else if( waitResult == WAIT_TIMEOUT ) + { + /* if a timeout is encountered, continue, + perhaps we should give up eventually + */ + } + } + }while( framesRead < frames ); + } + else + { + result = paCanNotReadFromAnOutputOnlyStream; + } + + return result; +} + + +static PaError WriteStream( PaStream* s, + const void *buffer, + unsigned long frames ) +{ + PaError result = paNoError; + PaWinMmeStream *stream = (PaWinMmeStream*)s; + const void *userBuffer; + unsigned long framesWritten = 0; + unsigned long framesProcessed; + signed int hostOutputBufferIndex; + DWORD waitResult; + DWORD timeout = (unsigned long)(stream->allBuffersDurationMs * 0.5); + unsigned int channel, i; + + + if( PA_IS_OUTPUT_STREAM_(stream) ) + { + /* make a local copy of the user buffer pointer(s). this is necessary + because PaUtil_CopyOutput() advances these pointers every time + it is called. + */ + if( stream->bufferProcessor.userOutputIsInterleaved ) + { + userBuffer = buffer; + } + else + { + userBuffer = (const void*)alloca( sizeof(void*) * stream->bufferProcessor.outputChannelCount ); + if( !userBuffer ) + return paInsufficientMemory; + for( i = 0; ibufferProcessor.outputChannelCount; ++i ) + ((const void**)userBuffer)[i] = ((const void**)buffer)[i]; + } + + do{ + if( CurrentOutputBuffersAreDone( stream ) ) + { + if( NoBuffersAreQueued( &stream->output ) ) + { + /** @todo REVIEW: consider what to do if the output + underflows. do we requeue all the existing buffers with + zeros? should we run a separate thread to keep the buffers + enqueued at all times? + see: http://www.portaudio.com/trac/ticket/117 + */ + + result = paOutputUnderflowed; + } + + hostOutputBufferIndex = stream->output.currentBufferIndex; + + PaUtil_SetOutputFrameCount( &stream->bufferProcessor, + stream->output.framesPerBuffer - stream->output.framesUsedInCurrentBuffer ); + + channel = 0; + for( i=0; ioutput.deviceCount; ++i ) + { + /* we have stored the number of channels in the buffer in dwUser */ + int channelCount = (int)stream->output.waveHeaders[i][ hostOutputBufferIndex ].dwUser; + + PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, channel, + stream->output.waveHeaders[i][ hostOutputBufferIndex ].lpData + + stream->output.framesUsedInCurrentBuffer * channelCount * + stream->bufferProcessor.bytesPerHostOutputSample, + channelCount ); + + channel += channelCount; + } + + framesProcessed = PaUtil_CopyOutput( &stream->bufferProcessor, &userBuffer, frames - framesWritten ); + + stream->output.framesUsedInCurrentBuffer += framesProcessed; + if( stream->output.framesUsedInCurrentBuffer == stream->output.framesPerBuffer ) + { + result = AdvanceToNextOutputBuffer( stream ); + if( result != paNoError ) + break; + } + + framesWritten += framesProcessed; + } + else + { + /* wait for MME to signal that a buffer is available */ + waitResult = WaitForSingleObject( stream->output.bufferEvent, timeout ); + if( waitResult == WAIT_FAILED ) + { + result = paUnanticipatedHostError; + break; + } + else if( waitResult == WAIT_TIMEOUT ) + { + /* if a timeout is encountered, continue, + perhaps we should give up eventually + */ + } + } + }while( framesWritten < frames ); + } + else + { + result = paCanNotWriteToAnInputOnlyStream; + } + + return result; +} + + +static signed long GetStreamReadAvailable( PaStream* s ) +{ + PaWinMmeStream *stream = (PaWinMmeStream*)s; + + if( PA_IS_INPUT_STREAM_(stream) ) + return GetAvailableFrames( &stream->input ); + else + return paCanNotReadFromAnOutputOnlyStream; +} + + +static signed long GetStreamWriteAvailable( PaStream* s ) +{ + PaWinMmeStream *stream = (PaWinMmeStream*)s; + + if( PA_IS_OUTPUT_STREAM_(stream) ) + return GetAvailableFrames( &stream->output ); + else + return paCanNotWriteToAnInputOnlyStream; +} + + +/* NOTE: the following functions are MME-stream specific, and are called directly + by client code. We need to check for many more error conditions here because + we don't have the benefit of pa_front.c's parameter checking. +*/ + +static PaError GetWinMMEStreamPointer( PaWinMmeStream **stream, PaStream *s ) +{ + PaError result; + PaUtilHostApiRepresentation *hostApi; + PaWinMmeHostApiRepresentation *winMmeHostApi; + + result = PaUtil_ValidateStreamPointer( s ); + if( result != paNoError ) + return result; + + result = PaUtil_GetHostApiRepresentation( &hostApi, paMME ); + if( result != paNoError ) + return result; + + winMmeHostApi = (PaWinMmeHostApiRepresentation*)hostApi; + + /* note, the following would be easier if there was a generic way of testing + that a stream belongs to a specific host API */ + + if( PA_STREAM_REP( s )->streamInterface == &winMmeHostApi->callbackStreamInterface + || PA_STREAM_REP( s )->streamInterface == &winMmeHostApi->blockingStreamInterface ) + { + /* s is a WinMME stream */ + *stream = (PaWinMmeStream *)s; + return paNoError; + } + else + { + return paIncompatibleStreamHostApi; + } +} + + +int PaWinMME_GetStreamInputHandleCount( PaStream* s ) +{ + PaWinMmeStream *stream; + PaError result = GetWinMMEStreamPointer( &stream, s ); + + if( result == paNoError ) + return (PA_IS_INPUT_STREAM_(stream)) ? stream->input.deviceCount : 0; + else + return result; +} + + +HWAVEIN PaWinMME_GetStreamInputHandle( PaStream* s, int handleIndex ) +{ + PaWinMmeStream *stream; + PaError result = GetWinMMEStreamPointer( &stream, s ); + + if( result == paNoError + && PA_IS_INPUT_STREAM_(stream) + && handleIndex >= 0 + && (unsigned int)handleIndex < stream->input.deviceCount ) + return ((HWAVEIN*)stream->input.waveHandles)[handleIndex]; + else + return 0; +} + + +int PaWinMME_GetStreamOutputHandleCount( PaStream* s) +{ + PaWinMmeStream *stream; + PaError result = GetWinMMEStreamPointer( &stream, s ); + + if( result == paNoError ) + return (PA_IS_OUTPUT_STREAM_(stream)) ? stream->output.deviceCount : 0; + else + return result; +} + + +HWAVEOUT PaWinMME_GetStreamOutputHandle( PaStream* s, int handleIndex ) +{ + PaWinMmeStream *stream; + PaError result = GetWinMMEStreamPointer( &stream, s ); + + if( result == paNoError + && PA_IS_OUTPUT_STREAM_(stream) + && handleIndex >= 0 + && (unsigned int)handleIndex < stream->output.deviceCount ) + return ((HWAVEOUT*)stream->output.waveHandles)[handleIndex]; + else + return 0; +} diff --git a/Externals/portaudio/src/os/unix/pa_unix_hostapis.c b/Externals/portaudio/src/os/unix/pa_unix_hostapis.c new file mode 100644 index 0000000000..4399b875b1 --- /dev/null +++ b/Externals/portaudio/src/os/unix/pa_unix_hostapis.c @@ -0,0 +1,103 @@ +/* + * $Id: pa_unix_hostapis.c 1740 2011-08-25 07:17:48Z philburk $ + * Portable Audio I/O Library UNIX initialization table + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup unix_src +*/ + +#include "pa_hostapi.h" + +PaError PaJack_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaAlsa_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaOSS_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +/* Added for IRIX, Pieter, oct 2, 2003: */ +PaError PaSGI_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +/* Linux AudioScience HPI */ +PaError PaAsiHpi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +/** Note that on Linux, ALSA is placed before OSS so that the former is preferred over the latter. + */ + +PaUtilHostApiInitializer *paHostApiInitializers[] = + { +#ifdef __linux__ + +#if PA_USE_ALSA + PaAlsa_Initialize, +#endif + +#if PA_USE_OSS + PaOSS_Initialize, +#endif + +#else /* __linux__ */ + +#if PA_USE_OSS + PaOSS_Initialize, +#endif + +#if PA_USE_ALSA + PaAlsa_Initialize, +#endif + +#endif /* __linux__ */ + +#if PA_USE_JACK + PaJack_Initialize, +#endif + /* Added for IRIX, Pieter, oct 2, 2003: */ +#if PA_USE_SGI + PaSGI_Initialize, +#endif + +#if PA_USE_ASIHPI + PaAsiHpi_Initialize, +#endif + +#if PA_USE_COREAUDIO + PaMacCore_Initialize, +#endif + +#if PA_USE_SKELETON + PaSkeleton_Initialize, +#endif + + 0 /* NULL terminated array */ + }; diff --git a/Externals/portaudio/src/os/unix/pa_unix_util.c b/Externals/portaudio/src/os/unix/pa_unix_util.c new file mode 100644 index 0000000000..18f806c507 --- /dev/null +++ b/Externals/portaudio/src/os/unix/pa_unix_util.c @@ -0,0 +1,710 @@ +/* + * $Id: pa_unix_util.c 1510 2010-06-10 08:05:29Z dmitrykos $ + * Portable Audio I/O Library + * UNIX platform-specific support functions + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2000 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup unix_src +*/ + +#include +#include +#include +#include +#include +#include +#include /* For memset */ +#include +#include + +#if defined(__APPLE__) && !defined(HAVE_MACH_ABSOLUTE_TIME) +#define HAVE_MACH_ABSOLUTE_TIME +#endif +#ifdef HAVE_MACH_ABSOLUTE_TIME +#include +#endif + +#include "pa_util.h" +#include "pa_unix_util.h" +#include "pa_debugprint.h" + +/* + Track memory allocations to avoid leaks. + */ + +#if PA_TRACK_MEMORY +static int numAllocations_ = 0; +#endif + + +void *PaUtil_AllocateMemory( long size ) +{ + void *result = malloc( size ); + +#if PA_TRACK_MEMORY + if( result != NULL ) numAllocations_ += 1; +#endif + return result; +} + + +void PaUtil_FreeMemory( void *block ) +{ + if( block != NULL ) + { + free( block ); +#if PA_TRACK_MEMORY + numAllocations_ -= 1; +#endif + + } +} + + +int PaUtil_CountCurrentlyAllocatedBlocks( void ) +{ +#if PA_TRACK_MEMORY + return numAllocations_; +#else + return 0; +#endif +} + + +void Pa_Sleep( long msec ) +{ +#ifdef HAVE_NANOSLEEP + struct timespec req = {0}, rem = {0}; + PaTime time = msec / 1.e3; + req.tv_sec = (time_t)time; + assert(time - req.tv_sec < 1.0); + req.tv_nsec = (long)((time - req.tv_sec) * 1.e9); + nanosleep(&req, &rem); + /* XXX: Try sleeping the remaining time (contained in rem) if interrupted by a signal? */ +#else + while( msec > 999 ) /* For OpenBSD and IRIX, argument */ + { /* to usleep must be < 1000000. */ + usleep( 999000 ); + msec -= 999; + } + usleep( msec * 1000 ); +#endif +} + +#ifdef HAVE_MACH_ABSOLUTE_TIME +/* + Discussion on the CoreAudio mailing list suggests that calling + gettimeofday (or anything else in the BSD layer) is not real-time + safe, so we use mach_absolute_time on OSX. This implementation is + based on these two links: + + Technical Q&A QA1398 - Mach Absolute Time Units + http://developer.apple.com/mac/library/qa/qa2004/qa1398.html + + Tutorial: Performance and Time. + http://www.macresearch.org/tutorial_performance_and_time +*/ + +/* Scaler to convert the result of mach_absolute_time to seconds */ +static double machSecondsConversionScaler_ = 0.0; +#endif + +void PaUtil_InitializeClock( void ) +{ +#ifdef HAVE_MACH_ABSOLUTE_TIME + mach_timebase_info_data_t info; + kern_return_t err = mach_timebase_info( &info ); + if( err == 0 ) + machSecondsConversionScaler_ = 1e-9 * (double) info.numer / (double) info.denom; +#endif +} + + +PaTime PaUtil_GetTime( void ) +{ +#ifdef HAVE_MACH_ABSOLUTE_TIME + return mach_absolute_time() * machSecondsConversionScaler_; +#elif defined(HAVE_CLOCK_GETTIME) + struct timespec tp; + clock_gettime(CLOCK_REALTIME, &tp); + return (PaTime)(tp.tv_sec + tp.tv_nsec * 1e-9); +#else + struct timeval tv; + gettimeofday( &tv, NULL ); + return (PaTime) tv.tv_usec * 1e-6 + tv.tv_sec; +#endif +} + +PaError PaUtil_InitializeThreading( PaUtilThreading *threading ) +{ + (void) paUtilErr_; + return paNoError; +} + +void PaUtil_TerminateThreading( PaUtilThreading *threading ) +{ +} + +PaError PaUtil_StartThreading( PaUtilThreading *threading, void *(*threadRoutine)(void *), void *data ) +{ + pthread_create( &threading->callbackThread, NULL, threadRoutine, data ); + return paNoError; +} + +PaError PaUtil_CancelThreading( PaUtilThreading *threading, int wait, PaError *exitResult ) +{ + PaError result = paNoError; + void *pret; + + if( exitResult ) + *exitResult = paNoError; + + /* If pthread_cancel is not supported (Android platform) whole this function can lead to indefinite waiting if + working thread (callbackThread) has'n received any stop signals from outside, please keep + this in mind when considering using PaUtil_CancelThreading + */ +#ifdef PTHREAD_CANCELED + /* Only kill the thread if it isn't in the process of stopping (flushing adaptation buffers) */ + if( !wait ) + pthread_cancel( threading->callbackThread ); /* XXX: Safe to call this if the thread has exited on its own? */ +#endif + pthread_join( threading->callbackThread, &pret ); + +#ifdef PTHREAD_CANCELED + if( pret && PTHREAD_CANCELED != pret ) +#else + /* !wait means the thread may have been canceled */ + if( pret && wait ) +#endif + { + if( exitResult ) + *exitResult = *(PaError *) pret; + free( pret ); + } + + return result; +} + +/* Threading */ +/* paUnixMainThread + * We have to be a bit careful with defining this global variable, + * as explained below. */ +#ifdef __APPLE__ +/* apple/gcc has a "problem" with global vars and dynamic libs. + Initializing it seems to fix the problem. + Described a bit in this thread: + http://gcc.gnu.org/ml/gcc/2005-06/msg00179.html +*/ +pthread_t paUnixMainThread = 0; +#else +/*pthreads are opaque. We don't know that asigning it an int value + always makes sense, so we don't initialize it unless we have to.*/ +pthread_t paUnixMainThread = 0; +#endif + +PaError PaUnixThreading_Initialize() +{ + paUnixMainThread = pthread_self(); + return paNoError; +} + +static PaError BoostPriority( PaUnixThread* self ) +{ + PaError result = paNoError; + struct sched_param spm = { 0 }; + /* Priority should only matter between contending FIFO threads? */ + spm.sched_priority = 1; + + assert( self ); + + if( pthread_setschedparam( self->thread, SCHED_FIFO, &spm ) != 0 ) + { + PA_UNLESS( errno == EPERM, paInternalError ); /* Lack permission to raise priority */ + PA_DEBUG(( "Failed bumping priority\n" )); + result = 0; + } + else + { + result = 1; /* Success */ + } +error: + return result; +} + +PaError PaUnixThread_New( PaUnixThread* self, void* (*threadFunc)( void* ), void* threadArg, PaTime waitForChild, + int rtSched ) +{ + PaError result = paNoError; + pthread_attr_t attr; + int started = 0; + + memset( self, 0, sizeof (PaUnixThread) ); + PaUnixMutex_Initialize( &self->mtx ); + PA_ASSERT_CALL( pthread_cond_init( &self->cond, NULL ), 0 ); + + self->parentWaiting = 0 != waitForChild; + + /* Spawn thread */ + +/* Temporarily disabled since we should test during configuration for presence of required mman.h header */ +#if 0 +#if defined _POSIX_MEMLOCK && (_POSIX_MEMLOCK != -1) + if( rtSched ) + { + if( mlockall( MCL_CURRENT | MCL_FUTURE ) < 0 ) + { + int savedErrno = errno; /* In case errno gets overwritten */ + assert( savedErrno != EINVAL ); /* Most likely a programmer error */ + PA_UNLESS( (savedErrno == EPERM), paInternalError ); + PA_DEBUG(( "%s: Failed locking memory\n", __FUNCTION__ )); + } + else + PA_DEBUG(( "%s: Successfully locked memory\n", __FUNCTION__ )); + } +#endif +#endif + + PA_UNLESS( !pthread_attr_init( &attr ), paInternalError ); + /* Priority relative to other processes */ + PA_UNLESS( !pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM ), paInternalError ); + + PA_UNLESS( !pthread_create( &self->thread, &attr, threadFunc, threadArg ), paInternalError ); + started = 1; + + if( rtSched ) + { +#if 0 + if( self->useWatchdog ) + { + int err; + struct sched_param wdSpm = { 0 }; + /* Launch watchdog, watchdog sets callback thread priority */ + int prio = PA_MIN( self->rtPrio + 4, sched_get_priority_max( SCHED_FIFO ) ); + wdSpm.sched_priority = prio; + + PA_UNLESS( !pthread_attr_init( &attr ), paInternalError ); + PA_UNLESS( !pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED ), paInternalError ); + PA_UNLESS( !pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM ), paInternalError ); + PA_UNLESS( !pthread_attr_setschedpolicy( &attr, SCHED_FIFO ), paInternalError ); + PA_UNLESS( !pthread_attr_setschedparam( &attr, &wdSpm ), paInternalError ); + if( (err = pthread_create( &self->watchdogThread, &attr, &WatchdogFunc, self )) ) + { + PA_UNLESS( err == EPERM, paInternalError ); + /* Permission error, go on without realtime privileges */ + PA_DEBUG(( "Failed bumping priority\n" )); + } + else + { + int policy; + self->watchdogRunning = 1; + PA_ENSURE_SYSTEM( pthread_getschedparam( self->watchdogThread, &policy, &wdSpm ), 0 ); + /* Check if priority is right, policy could potentially differ from SCHED_FIFO (but that's alright) */ + if( wdSpm.sched_priority != prio ) + { + PA_DEBUG(( "Watchdog priority not set correctly (%d)\n", wdSpm.sched_priority )); + PA_ENSURE( paInternalError ); + } + } + } + else +#endif + PA_ENSURE( BoostPriority( self ) ); + + { + int policy; + struct sched_param spm; + pthread_getschedparam(self->thread, &policy, &spm); + } + } + + if( self->parentWaiting ) + { + PaTime till; + struct timespec ts; + int res = 0; + PaTime now; + + PA_ENSURE( PaUnixMutex_Lock( &self->mtx ) ); + + /* Wait for stream to be started */ + now = PaUtil_GetTime(); + till = now + waitForChild; + + while( self->parentWaiting && !res ) + { + if( waitForChild > 0 ) + { + ts.tv_sec = (time_t) floor( till ); + ts.tv_nsec = (long) ((till - floor( till )) * 1e9); + res = pthread_cond_timedwait( &self->cond, &self->mtx.mtx, &ts ); + } + else + { + res = pthread_cond_wait( &self->cond, &self->mtx.mtx ); + } + } + + PA_ENSURE( PaUnixMutex_Unlock( &self->mtx ) ); + + PA_UNLESS( !res || ETIMEDOUT == res, paInternalError ); + PA_DEBUG(( "%s: Waited for %g seconds for stream to start\n", __FUNCTION__, PaUtil_GetTime() - now )); + if( ETIMEDOUT == res ) + { + PA_ENSURE( paTimedOut ); + } + } + +end: + return result; +error: + if( started ) + { + PaUnixThread_Terminate( self, 0, NULL ); + } + + goto end; +} + +PaError PaUnixThread_Terminate( PaUnixThread* self, int wait, PaError* exitResult ) +{ + PaError result = paNoError; + void* pret; + + if( exitResult ) + { + *exitResult = paNoError; + } +#if 0 + if( watchdogExitResult ) + *watchdogExitResult = paNoError; + + if( th->watchdogRunning ) + { + pthread_cancel( th->watchdogThread ); + PA_ENSURE_SYSTEM( pthread_join( th->watchdogThread, &pret ), 0 ); + + if( pret && pret != PTHREAD_CANCELED ) + { + if( watchdogExitResult ) + *watchdogExitResult = *(PaError *) pret; + free( pret ); + } + } +#endif + + /* Only kill the thread if it isn't in the process of stopping (flushing adaptation buffers) */ + /* TODO: Make join time out */ + self->stopRequested = wait; + if( !wait ) + { + PA_DEBUG(( "%s: Canceling thread %d\n", __FUNCTION__, self->thread )); + /* XXX: Safe to call this if the thread has exited on its own? */ +#ifdef PTHREAD_CANCELED + pthread_cancel( self->thread ); +#endif + } + PA_DEBUG(( "%s: Joining thread %d\n", __FUNCTION__, self->thread )); + PA_ENSURE_SYSTEM( pthread_join( self->thread, &pret ), 0 ); + +#ifdef PTHREAD_CANCELED + if( pret && PTHREAD_CANCELED != pret ) +#else + /* !wait means the thread may have been canceled */ + if( pret && wait ) +#endif + { + if( exitResult ) + { + *exitResult = *(PaError*)pret; + } + free( pret ); + } + +error: + PA_ASSERT_CALL( PaUnixMutex_Terminate( &self->mtx ), paNoError ); + PA_ASSERT_CALL( pthread_cond_destroy( &self->cond ), 0 ); + + return result; +} + +PaError PaUnixThread_PrepareNotify( PaUnixThread* self ) +{ + PaError result = paNoError; + PA_UNLESS( self->parentWaiting, paInternalError ); + + PA_ENSURE( PaUnixMutex_Lock( &self->mtx ) ); + self->locked = 1; + +error: + return result; +} + +PaError PaUnixThread_NotifyParent( PaUnixThread* self ) +{ + PaError result = paNoError; + PA_UNLESS( self->parentWaiting, paInternalError ); + + if( !self->locked ) + { + PA_ENSURE( PaUnixMutex_Lock( &self->mtx ) ); + self->locked = 1; + } + self->parentWaiting = 0; + pthread_cond_signal( &self->cond ); + PA_ENSURE( PaUnixMutex_Unlock( &self->mtx ) ); + self->locked = 0; + +error: + return result; +} + +int PaUnixThread_StopRequested( PaUnixThread* self ) +{ + return self->stopRequested; +} + +PaError PaUnixMutex_Initialize( PaUnixMutex* self ) +{ + PaError result = paNoError; + PA_ASSERT_CALL( pthread_mutex_init( &self->mtx, NULL ), 0 ); + return result; +} + +PaError PaUnixMutex_Terminate( PaUnixMutex* self ) +{ + PaError result = paNoError; + PA_ASSERT_CALL( pthread_mutex_destroy( &self->mtx ), 0 ); + return result; +} + +/** Lock mutex. + * + * We're disabling thread cancellation while the thread is holding a lock, so mutexes are + * properly unlocked at termination time. + */ +PaError PaUnixMutex_Lock( PaUnixMutex* self ) +{ + PaError result = paNoError; + +#ifdef PTHREAD_CANCEL + int oldState; + PA_ENSURE_SYSTEM( pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, &oldState ), 0 ); +#endif + PA_ENSURE_SYSTEM( pthread_mutex_lock( &self->mtx ), 0 ); + +error: + return result; +} + +/** Unlock mutex. + * + * Thread cancellation is enabled again after the mutex is properly unlocked. + */ +PaError PaUnixMutex_Unlock( PaUnixMutex* self ) +{ + PaError result = paNoError; + + PA_ENSURE_SYSTEM( pthread_mutex_unlock( &self->mtx ), 0 ); +#ifdef PTHREAD_CANCEL + int oldState; + PA_ENSURE_SYSTEM( pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, &oldState ), 0 ); +#endif + +error: + return result; +} + + +#if 0 +static void OnWatchdogExit( void *userData ) +{ + PaAlsaThreading *th = (PaAlsaThreading *) userData; + struct sched_param spm = { 0 }; + assert( th ); + + PA_ASSERT_CALL( pthread_setschedparam( th->callbackThread, SCHED_OTHER, &spm ), 0 ); /* Lower before exiting */ + PA_DEBUG(( "Watchdog exiting\n" )); +} + +static void *WatchdogFunc( void *userData ) +{ + PaError result = paNoError, *pres = NULL; + int err; + PaAlsaThreading *th = (PaAlsaThreading *) userData; + unsigned intervalMsec = 500; + const PaTime maxSeconds = 3.; /* Max seconds between callbacks */ + PaTime timeThen = PaUtil_GetTime(), timeNow, timeElapsed, cpuTimeThen, cpuTimeNow, cpuTimeElapsed; + double cpuLoad, avgCpuLoad = 0.; + int throttled = 0; + + assert( th ); + + /* Execute OnWatchdogExit when exiting */ + pthread_cleanup_push( &OnWatchdogExit, th ); + + /* Boost priority of callback thread */ + PA_ENSURE( result = BoostPriority( th ) ); + if( !result ) + { + /* Boost failed, might as well exit */ + pthread_exit( NULL ); + } + + cpuTimeThen = th->callbackCpuTime; + { + int policy; + struct sched_param spm = { 0 }; + pthread_getschedparam( pthread_self(), &policy, &spm ); + PA_DEBUG(( "%s: Watchdog priority is %d\n", __FUNCTION__, spm.sched_priority )); + } + + while( 1 ) + { + double lowpassCoeff = 0.9, lowpassCoeff1 = 0.99999 - lowpassCoeff; + + /* Test before and after in case whatever underlying sleep call isn't interrupted by pthread_cancel */ + pthread_testcancel(); + Pa_Sleep( intervalMsec ); + pthread_testcancel(); + + if( PaUtil_GetTime() - th->callbackTime > maxSeconds ) + { + PA_DEBUG(( "Watchdog: Terminating callback thread\n" )); + /* Tell thread to terminate */ + err = pthread_kill( th->callbackThread, SIGKILL ); + pthread_exit( NULL ); + } + + PA_DEBUG(( "%s: PortAudio reports CPU load: %g\n", __FUNCTION__, PaUtil_GetCpuLoad( th->cpuLoadMeasurer ) )); + + /* Check if we should throttle, or unthrottle :P */ + cpuTimeNow = th->callbackCpuTime; + cpuTimeElapsed = cpuTimeNow - cpuTimeThen; + cpuTimeThen = cpuTimeNow; + + timeNow = PaUtil_GetTime(); + timeElapsed = timeNow - timeThen; + timeThen = timeNow; + cpuLoad = cpuTimeElapsed / timeElapsed; + avgCpuLoad = avgCpuLoad * lowpassCoeff + cpuLoad * lowpassCoeff1; + /* + if( throttled ) + PA_DEBUG(( "Watchdog: CPU load: %g, %g\n", avgCpuLoad, cpuTimeElapsed )); + */ + if( PaUtil_GetCpuLoad( th->cpuLoadMeasurer ) > .925 ) + { + static int policy; + static struct sched_param spm = { 0 }; + static const struct sched_param defaultSpm = { 0 }; + PA_DEBUG(( "%s: Throttling audio thread, priority %d\n", __FUNCTION__, spm.sched_priority )); + + pthread_getschedparam( th->callbackThread, &policy, &spm ); + if( !pthread_setschedparam( th->callbackThread, SCHED_OTHER, &defaultSpm ) ) + { + throttled = 1; + } + else + PA_DEBUG(( "Watchdog: Couldn't lower priority of audio thread: %s\n", strerror( errno ) )); + + /* Give other processes a go, before raising priority again */ + PA_DEBUG(( "%s: Watchdog sleeping for %lu msecs before unthrottling\n", __FUNCTION__, th->throttledSleepTime )); + Pa_Sleep( th->throttledSleepTime ); + + /* Reset callback priority */ + if( pthread_setschedparam( th->callbackThread, SCHED_FIFO, &spm ) != 0 ) + { + PA_DEBUG(( "%s: Couldn't raise priority of audio thread: %s\n", __FUNCTION__, strerror( errno ) )); + } + + if( PaUtil_GetCpuLoad( th->cpuLoadMeasurer ) >= .99 ) + intervalMsec = 50; + else + intervalMsec = 100; + + /* + lowpassCoeff = .97; + lowpassCoeff1 = .99999 - lowpassCoeff; + */ + } + else if( throttled && avgCpuLoad < .8 ) + { + intervalMsec = 500; + throttled = 0; + + /* + lowpassCoeff = .9; + lowpassCoeff1 = .99999 - lowpassCoeff; + */ + } + } + + pthread_cleanup_pop( 1 ); /* Execute cleanup on exit */ + +error: + /* Shouldn't get here in the normal case */ + + /* Pass on error code */ + pres = malloc( sizeof (PaError) ); + *pres = result; + + pthread_exit( pres ); +} + +static void CallbackUpdate( PaAlsaThreading *th ) +{ + th->callbackTime = PaUtil_GetTime(); + th->callbackCpuTime = PaUtil_GetCpuLoad( th->cpuLoadMeasurer ); +} + +/* +static void *CanaryFunc( void *userData ) +{ + const unsigned intervalMsec = 1000; + PaUtilThreading *th = (PaUtilThreading *) userData; + + while( 1 ) + { + th->canaryTime = PaUtil_GetTime(); + + pthread_testcancel(); + Pa_Sleep( intervalMsec ); + } + + pthread_exit( NULL ); +} +*/ +#endif diff --git a/Externals/portaudio/src/os/unix/pa_unix_util.h b/Externals/portaudio/src/os/unix/pa_unix_util.h new file mode 100644 index 0000000000..e900f87726 --- /dev/null +++ b/Externals/portaudio/src/os/unix/pa_unix_util.h @@ -0,0 +1,224 @@ +/* + * $Id: pa_unix_util.h 1241 2007-07-23 20:08:31Z aknudsen $ + * Portable Audio I/O Library + * UNIX platform-specific support functions + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2000 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup unix_src +*/ + +#ifndef PA_UNIX_UTIL_H +#define PA_UNIX_UTIL_H + +#include "pa_cpuload.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#define PA_MIN(x,y) ( (x) < (y) ? (x) : (y) ) +#define PA_MAX(x,y) ( (x) > (y) ? (x) : (y) ) + +/* Utilize GCC branch prediction for error tests */ +#if defined __GNUC__ && __GNUC__ >= 3 +#define UNLIKELY(expr) __builtin_expect( (expr), 0 ) +#else +#define UNLIKELY(expr) (expr) +#endif + +#define STRINGIZE_HELPER(expr) #expr +#define STRINGIZE(expr) STRINGIZE_HELPER(expr) + +#define PA_UNLESS(expr, code) \ + do { \ + if( UNLIKELY( (expr) == 0 ) ) \ + { \ + PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + result = (code); \ + goto error; \ + } \ + } while (0); + +static PaError paUtilErr_; /* Used with PA_ENSURE */ + +/* Check PaError */ +#define PA_ENSURE(expr) \ + do { \ + if( UNLIKELY( (paUtilErr_ = (expr)) < paNoError ) ) \ + { \ + PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ + result = paUtilErr_; \ + goto error; \ + } \ + } while (0); + +#define PA_ASSERT_CALL(expr, success) \ + paUtilErr_ = (expr); \ + assert( success == paUtilErr_ ); + +#define PA_ENSURE_SYSTEM(expr, success) \ + do { \ + if( UNLIKELY( (paUtilErr_ = (expr)) != success ) ) \ + { \ + /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \ + if( pthread_equal(pthread_self(), paUnixMainThread) ) \ + { \ + PaUtil_SetLastHostErrorInfo( paALSA, paUtilErr_, strerror( paUtilErr_ ) ); \ + } \ + PaUtil_DebugPrint( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" ); \ + result = paUnanticipatedHostError; \ + goto error; \ + } \ + } while( 0 ); + +typedef struct { + pthread_t callbackThread; +} PaUtilThreading; + +PaError PaUtil_InitializeThreading( PaUtilThreading *threading ); +void PaUtil_TerminateThreading( PaUtilThreading *threading ); +PaError PaUtil_StartThreading( PaUtilThreading *threading, void *(*threadRoutine)(void *), void *data ); +PaError PaUtil_CancelThreading( PaUtilThreading *threading, int wait, PaError *exitResult ); + +/* State accessed by utility functions */ + +/* +void PaUnix_SetRealtimeScheduling( int rt ); + +void PaUtil_InitializeThreading( PaUtilThreading *th, PaUtilCpuLoadMeasurer *clm ); + +PaError PaUtil_CreateCallbackThread( PaUtilThreading *th, void *(*CallbackThreadFunc)( void * ), PaStream *s ); + +PaError PaUtil_KillCallbackThread( PaUtilThreading *th, PaError *exitResult ); + +void PaUtil_CallbackUpdate( PaUtilThreading *th ); +*/ + +extern pthread_t paUnixMainThread; + +typedef struct +{ + pthread_mutex_t mtx; +} PaUnixMutex; + +PaError PaUnixMutex_Initialize( PaUnixMutex* self ); +PaError PaUnixMutex_Terminate( PaUnixMutex* self ); +PaError PaUnixMutex_Lock( PaUnixMutex* self ); +PaError PaUnixMutex_Unlock( PaUnixMutex* self ); + +typedef struct +{ + pthread_t thread; + int parentWaiting; + int stopRequested; + int locked; + PaUnixMutex mtx; + pthread_cond_t cond; + volatile sig_atomic_t stopRequest; +} PaUnixThread; + +/** Initialize global threading state. + */ +PaError PaUnixThreading_Initialize(); + +/** Perish, passing on eventual error code. + * + * A thin wrapper around pthread_exit, will automatically pass on any error code to the joining thread. + * If the result indicates an error, i.e. it is not equal to paNoError, this function will automatically + * allocate a pointer so the error is passed on with pthread_exit. If the result indicates that all is + * well however, only a NULL pointer will be handed to pthread_exit. Thus, the joining thread should + * check whether a non-NULL result pointer is obtained from pthread_join and make sure to free it. + * @param result: The error code to pass on to the joining thread. + */ +#define PaUnixThreading_EXIT(result) \ + do { \ + PaError* pres = NULL; \ + if( paNoError != (result) ) \ + { \ + pres = malloc( sizeof (PaError) ); \ + *pres = (result); \ + } \ + pthread_exit( pres ); \ + } while (0); + +/** Spawn a thread. + * + * Intended for spawning the callback thread from the main thread. This function can even block (for a certain + * time or indefinitely) untill notified by the callback thread (using PaUnixThread_NotifyParent), which can be + * useful in order to make sure that callback has commenced before returning from Pa_StartStream. + * @param threadFunc: The function to be executed in the child thread. + * @param waitForChild: If not 0, wait for child thread to call PaUnixThread_NotifyParent. Less than 0 means + * wait for ever, greater than 0 wait for the specified time. + * @param rtSched: Enable realtime scheduling? + * @return: If timed out waiting on child, paTimedOut. + */ +PaError PaUnixThread_New( PaUnixThread* self, void* (*threadFunc)( void* ), void* threadArg, PaTime waitForChild, + int rtSched ); + +/** Terminate thread. + * + * @param wait: If true, request that background thread stop and wait untill it does, else cancel it. + * @param exitResult: If non-null this will upon return contain the exit status of the thread. + */ +PaError PaUnixThread_Terminate( PaUnixThread* self, int wait, PaError* exitResult ); + +/** Prepare to notify waiting parent thread. + * + * An internal lock must be held before the parent is notified in PaUnixThread_NotifyParent, call this to + * acquire it beforehand. + * @return: If parent is not waiting, paInternalError. + */ +PaError PaUnixThread_PrepareNotify( PaUnixThread* self ); + +/** Notify waiting parent thread. + * + * @return: If parent timed out waiting, paTimedOut. If parent was never waiting, paInternalError. + */ +PaError PaUnixThread_NotifyParent( PaUnixThread* self ); + +/** Has the parent thread requested this thread to stop? + */ +int PaUnixThread_StopRequested( PaUnixThread* self ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif diff --git a/Externals/portaudio/src/os/win/pa_win_coinitialize.c b/Externals/portaudio/src/os/win/pa_win_coinitialize.c new file mode 100644 index 0000000000..5c31716c0f --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_win_coinitialize.c @@ -0,0 +1,144 @@ +/* + * Microsoft COM initialization routines + * Copyright (c) 1999-2011 Ross Bencina, Dmitry Kostjuchenko + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2011 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src + + @brief Microsoft COM initialization routines. +*/ + +#include +#include + +#include "portaudio.h" +#include "pa_util.h" +#include "pa_debugprint.h" + +#include "pa_win_coinitialize.h" + + +#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) && !defined(_WIN32_WCE) /* MSC version 6 and above */ +#pragma comment( lib, "ole32.lib" ) +#endif + + +/* use some special bit patterns here to try to guard against uninitialized memory errors */ +#define PAWINUTIL_COM_INITIALIZED (0xb38f) +#define PAWINUTIL_COM_NOT_INITIALIZED (0xf1cd) + + +PaError PaWinUtil_CoInitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ) +{ + HRESULT hr; + + comInitializationResult->state = PAWINUTIL_COM_NOT_INITIALIZED; + + /* + If COM is already initialized CoInitialize will either return + FALSE, or RPC_E_CHANGED_MODE if it was initialised in a different + threading mode. In either case we shouldn't consider it an error + but we need to be careful to not call CoUninitialize() if + RPC_E_CHANGED_MODE was returned. + */ + + hr = CoInitialize(0); /* use legacy-safe equivalent to CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) */ + if( FAILED(hr) && hr != RPC_E_CHANGED_MODE ) + { + PA_DEBUG(("CoInitialize(0) failed. hr=%d\n", hr)); + + if( hr == E_OUTOFMEMORY ) + return paInsufficientMemory; + + { + char *lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + hr, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + PaUtil_SetLastHostErrorInfo( hostApiType, hr, lpMsgBuf ); + LocalFree( lpMsgBuf ); + } + + return paUnanticipatedHostError; + } + + if( hr != RPC_E_CHANGED_MODE ) + { + comInitializationResult->state = PAWINUTIL_COM_INITIALIZED; + + /* + Memorize calling thread id and report warning on Uninitialize if + calling thread is different as CoInitialize must match CoUninitialize + in the same thread. + */ + comInitializationResult->initializingThreadId = GetCurrentThreadId(); + } + + return paNoError; +} + + +void PaWinUtil_CoUninitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ) +{ + if( comInitializationResult->state != PAWINUTIL_COM_NOT_INITIALIZED + && comInitializationResult->state != PAWINUTIL_COM_INITIALIZED ){ + + PA_DEBUG(("ERROR: PaWinUtil_CoUninitialize called without calling PaWinUtil_CoInitialize\n")); + } + + if( comInitializationResult->state == PAWINUTIL_COM_INITIALIZED ) + { + DWORD currentThreadId = GetCurrentThreadId(); + if( comInitializationResult->initializingThreadId != currentThreadId ) + { + PA_DEBUG(("ERROR: failed PaWinUtil_CoUninitialize calling thread[%d] does not match initializing thread[%d]\n", + currentThreadId, comInitializationResult->initializingThreadId)); + } + else + { + CoUninitialize(); + + comInitializationResult->state = PAWINUTIL_COM_NOT_INITIALIZED; + } + } +} \ No newline at end of file diff --git a/Externals/portaudio/src/os/win/pa_win_coinitialize.h b/Externals/portaudio/src/os/win/pa_win_coinitialize.h new file mode 100644 index 0000000000..687ab83187 --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_win_coinitialize.h @@ -0,0 +1,94 @@ +/* + * Microsoft COM initialization routines + * Copyright (c) 1999-2011 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src + + @brief Microsoft COM initialization routines. +*/ + +#ifndef PA_WIN_COINITIALIZE_H +#define PA_WIN_COINITIALIZE_H + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** + @brief Data type used to hold the result of an attempt to initialize COM + using PaWinUtil_CoInitialize. Must be retained between a call to + PaWinUtil_CoInitialize and a matching call to PaWinUtil_CoUninitialize. +*/ +typedef struct PaWinUtilComInitializationResult{ + int state; + int initializingThreadId; +} PaWinUtilComInitializationResult; + + +/** + @brief Initialize Microsoft COM subsystem on the current thread. + + @param hostApiType the host API type id of the caller. Used for error reporting. + + @param comInitializationResult An output parameter. The value pointed to by + this parameter stores information required by PaWinUtil_CoUninitialize + to correctly uninitialize COM. The value should be retained and later + passed to PaWinUtil_CoUninitialize. + + If PaWinUtil_CoInitialize returns paNoError, the caller must later call + PaWinUtil_CoUninitialize once. +*/ +PaError PaWinUtil_CoInitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ); + + +/** + @brief Uninitialize the Microsoft COM subsystem on the current thread using + the result of a previous call to PaWinUtil_CoInitialize. Must be called on the same + thread as PaWinUtil_CoInitialize. + + @param hostApiType the host API type id of the caller. Used for error reporting. + + @param comInitializationResult An input parameter. A pointer to a value previously + initialized by a call to PaWinUtil_CoInitialize. +*/ +void PaWinUtil_CoUninitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_WIN_COINITIALIZE_H */ diff --git a/Externals/portaudio/src/os/win/pa_win_hostapis.c b/Externals/portaudio/src/os/win/pa_win_hostapis.c new file mode 100644 index 0000000000..5d22438799 --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_win_hostapis.c @@ -0,0 +1,102 @@ +/* + * $Id: pa_win_hostapis.c 1728 2011-08-18 03:31:51Z rossb $ + * Portable Audio I/O Library Windows initialization table + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src + + @brief Win32 host API initialization function table. +*/ + +/* This is needed to make this source file depend on CMake option changes + and at the same time make it transparent for clients not using CMake. +*/ +#ifdef PORTAUDIO_CMAKE_GENERATED +#include "options_cmake.h" +#endif + +#include "pa_hostapi.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaWinDs_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaWinWdm_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +PaUtilHostApiInitializer *paHostApiInitializers[] = + { + +#if PA_USE_WMME + PaWinMme_Initialize, +#endif + +#if PA_USE_DS + PaWinDs_Initialize, +#endif + +#if PA_USE_ASIO + PaAsio_Initialize, +#endif + +#if PA_USE_WASAPI + PaWasapi_Initialize, +#endif + +#if PA_USE_WDMKS + PaWinWdm_Initialize, +#endif + +#if PA_USE_SKELETON + PaSkeleton_Initialize, /* just for testing. last in list so it isn't marked as default. */ +#endif + + 0 /* NULL terminated array */ + }; + + diff --git a/Externals/portaudio/src/os/win/pa_win_util.c b/Externals/portaudio/src/os/win/pa_win_util.c new file mode 100644 index 0000000000..a9c55d0f8a --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_win_util.c @@ -0,0 +1,153 @@ +/* + * $Id: pa_win_util.c 1584 2011-02-02 18:58:17Z rossb $ + * Portable Audio I/O Library + * Win32 platform-specific support functions + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2008 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src + + @brief Win32 implementation of platform-specific PaUtil support functions. +*/ + +#include +#include /* for timeGetTime() */ + +#include "pa_util.h" + +#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) && !defined(_WIN32_WCE) /* MSC version 6 and above */ +#pragma comment( lib, "winmm.lib" ) +#endif + + +/* + Track memory allocations to avoid leaks. + */ + +#if PA_TRACK_MEMORY +static int numAllocations_ = 0; +#endif + + +void *PaUtil_AllocateMemory( long size ) +{ + void *result = GlobalAlloc( GPTR, size ); + +#if PA_TRACK_MEMORY + if( result != NULL ) numAllocations_ += 1; +#endif + return result; +} + + +void PaUtil_FreeMemory( void *block ) +{ + if( block != NULL ) + { + GlobalFree( block ); +#if PA_TRACK_MEMORY + numAllocations_ -= 1; +#endif + + } +} + + +int PaUtil_CountCurrentlyAllocatedBlocks( void ) +{ +#if PA_TRACK_MEMORY + return numAllocations_; +#else + return 0; +#endif +} + + +void Pa_Sleep( long msec ) +{ + Sleep( msec ); +} + +static int usePerformanceCounter_; +static double secondsPerTick_; + +void PaUtil_InitializeClock( void ) +{ + LARGE_INTEGER ticksPerSecond; + + if( QueryPerformanceFrequency( &ticksPerSecond ) != 0 ) + { + usePerformanceCounter_ = 1; + secondsPerTick_ = 1.0 / (double)ticksPerSecond.QuadPart; + } + else + { + usePerformanceCounter_ = 0; + } +} + + +double PaUtil_GetTime( void ) +{ + LARGE_INTEGER time; + + if( usePerformanceCounter_ ) + { + /* + Note: QueryPerformanceCounter has a known issue where it can skip forward + by a few seconds (!) due to a hardware bug on some PCI-ISA bridge hardware. + This is documented here: + http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q274323& + + The work-arounds are not very paletable and involve querying GetTickCount + at every time step. + + Using rdtsc is not a good option on multi-core systems. + + For now we just use QueryPerformanceCounter(). It's good, most of the time. + */ + QueryPerformanceCounter( &time ); + return time.QuadPart * secondsPerTick_; + } + else + { +#ifndef UNDER_CE + return timeGetTime() * .001; +#else + return GetTickCount() * .001; +#endif + } +} diff --git a/Externals/portaudio/src/os/win/pa_win_waveformat.c b/Externals/portaudio/src/os/win/pa_win_waveformat.c new file mode 100644 index 0000000000..beae5825e4 --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_win_waveformat.c @@ -0,0 +1,154 @@ +/* + * PortAudio Portable Real-Time Audio Library + * Windows WAVEFORMAT* data structure utilities + * portaudio.h should be included before this file. + * + * Copyright (c) 2007 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +#include +#include + +#include "portaudio.h" +#include "pa_win_waveformat.h" + + +#if !defined(WAVE_FORMAT_EXTENSIBLE) +#define WAVE_FORMAT_EXTENSIBLE 0xFFFE +#endif + +static GUID pawin_ksDataFormatSubtypeGuidBase = + { (USHORT)(WAVE_FORMAT_PCM), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }; + + +int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat ) +{ + if( sampleFormat == paFloat32 ) + return PAWIN_WAVE_FORMAT_IEEE_FLOAT; + + return PAWIN_WAVE_FORMAT_PCM; +} + + +void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, + int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate ) +{ + WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat; + int bytesPerSample = Pa_GetSampleSize(sampleFormat); + unsigned long bytesPerFrame = numChannels * bytesPerSample; + + waveFormatEx->wFormatTag = waveFormatTag; + waveFormatEx->nChannels = (WORD)numChannels; + waveFormatEx->nSamplesPerSec = (DWORD)sampleRate; + waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame; + waveFormatEx->nBlockAlign = (WORD)bytesPerFrame; + waveFormatEx->wBitsPerSample = bytesPerSample * 8; + waveFormatEx->cbSize = 0; +} + + +void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, + int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate, + PaWinWaveFormatChannelMask channelMask ) +{ + WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat; + int bytesPerSample = Pa_GetSampleSize(sampleFormat); + unsigned long bytesPerFrame = numChannels * bytesPerSample; + GUID guid; + + waveFormatEx->wFormatTag = WAVE_FORMAT_EXTENSIBLE; + waveFormatEx->nChannels = (WORD)numChannels; + waveFormatEx->nSamplesPerSec = (DWORD)sampleRate; + waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame; + waveFormatEx->nBlockAlign = (WORD)bytesPerFrame; + waveFormatEx->wBitsPerSample = bytesPerSample * 8; + waveFormatEx->cbSize = 22; + + *((WORD*)&waveFormat->fields[PAWIN_INDEXOF_WVALIDBITSPERSAMPLE]) = + waveFormatEx->wBitsPerSample; + + *((DWORD*)&waveFormat->fields[PAWIN_INDEXOF_DWCHANNELMASK]) = channelMask; + + guid = pawin_ksDataFormatSubtypeGuidBase; + guid.Data1 = (USHORT)waveFormatTag; + *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) = guid; +} + + +PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels ) +{ + switch( numChannels ){ + case 1: + return PAWIN_SPEAKER_MONO; + case 2: + return PAWIN_SPEAKER_STEREO; + case 3: + return PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_FRONT_RIGHT; + case 4: + return PAWIN_SPEAKER_QUAD; + case 5: + return PAWIN_SPEAKER_QUAD | PAWIN_SPEAKER_FRONT_CENTER; + case 6: + /* The meaning of the PAWIN_SPEAKER_5POINT1 flag has changed over time: + http://msdn2.microsoft.com/en-us/library/aa474707.aspx + We use PAWIN_SPEAKER_5POINT1 (not PAWIN_SPEAKER_5POINT1_SURROUND) + because on some cards (eg Audigy) PAWIN_SPEAKER_5POINT1_SURROUND + results in a virtual mixdown placing the rear output in the + front _and_ rear speakers. + */ + return PAWIN_SPEAKER_5POINT1; + /* case 7: */ + case 8: + return PAWIN_SPEAKER_7POINT1; + } + + /* Apparently some Audigy drivers will output silence + if the direct-out constant (0) is used. So this is not ideal. + */ + return PAWIN_SPEAKER_DIRECTOUT; + + /* Note that Alec Rogers proposed the following as an alternate method to + generate the default channel mask, however it doesn't seem to be an improvement + over the above, since some drivers will matrix outputs mapping to non-present + speakers accross multiple physical speakers. + + if(nChannels==1) { + pwfFormat->dwChannelMask = SPEAKER_FRONT_CENTER; + } + else { + pwfFormat->dwChannelMask = 0; + for(i=0; idwChannelMask = (pwfFormat->dwChannelMask << 1) | 0x1; + } + */ +} diff --git a/Externals/portaudio/src/os/win/pa_win_wdmks_utils.c b/Externals/portaudio/src/os/win/pa_win_wdmks_utils.c new file mode 100644 index 0000000000..0dc0b4bdea --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_win_wdmks_utils.c @@ -0,0 +1,297 @@ +/* + * PortAudio Portable Real-Time Audio Library + * Windows WDM KS utilities + * + * Copyright (c) 1999 - 2007 Andrew Baldwin, Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +#include +#include +#ifndef WAVE_FORMAT_IEEE_FLOAT + #define WAVE_FORMAT_IEEE_FLOAT 0x0003 // MinGW32 does not define this +#endif +#ifndef _WAVEFORMATEXTENSIBLE_ + #define _WAVEFORMATEXTENSIBLE_ // MinGW32 does not define this +#endif +#ifndef _INC_MMREG + #define _INC_MMREG // for STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT +#endif +#include // MinGW32 does not define this automatically +#include +#include +#include // just for some development printfs + +#include "portaudio.h" +#include "pa_util.h" +#include "pa_win_wdmks_utils.h" + +#if !defined(PA_WDMKS_NO_KSGUID_LIB) && !defined(PAWIN_WDMKS_NO_KSGUID_LIB) + #if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */ + #pragma comment( lib, "ksguid.lib" ) + #endif + #define pa_KSDATAFORMAT_TYPE_AUDIO KSDATAFORMAT_TYPE_AUDIO + #define pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT + #define pa_KSDATAFORMAT_SUBTYPE_PCM KSDATAFORMAT_SUBTYPE_PCM + #define pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX KSDATAFORMAT_SUBTYPE_WAVEFORMATEX + #define pa_KSMEDIUMSETID_Standard KSMEDIUMSETID_Standard + #define pa_KSINTERFACESETID_Standard KSINTERFACESETID_Standard + #define pa_KSPROPSETID_Pin KSPROPSETID_Pin +#else + static const GUID pa_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO }; + static const GUID pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = { STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT }; + static const GUID pa_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM }; + static const GUID pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX = { STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX }; + static const GUID pa_KSMEDIUMSETID_Standard = { STATIC_KSMEDIUMSETID_Standard }; + static const GUID pa_KSINTERFACESETID_Standard = { STATIC_KSINTERFACESETID_Standard }; + static const GUID pa_KSPROPSETID_Pin = { STATIC_KSPROPSETID_Pin }; +#endif + + +#define pa_IS_VALID_WAVEFORMATEX_GUID(Guid)\ + (!memcmp(((PUSHORT)&pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT))) + + + +static PaError WdmGetPinPropertySimple( + HANDLE handle, + unsigned long pinId, + unsigned long property, + void* value, + unsigned long valueSize ) +{ + DWORD bytesReturned; + KSP_PIN ksPProp; + ksPProp.Property.Set = pa_KSPROPSETID_Pin; + ksPProp.Property.Id = property; + ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; + ksPProp.PinId = pinId; + ksPProp.Reserved = 0; + + if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp, sizeof(KSP_PIN), + value, valueSize, &bytesReturned, NULL ) == 0 || bytesReturned != valueSize ) + { + return paUnanticipatedHostError; + } + else + { + return paNoError; + } +} + + +static PaError WdmGetPinPropertyMulti( + HANDLE handle, + unsigned long pinId, + unsigned long property, + KSMULTIPLE_ITEM** ksMultipleItem) +{ + unsigned long multipleItemSize = 0; + KSP_PIN ksPProp; + DWORD bytesReturned; + + *ksMultipleItem = 0; + + ksPProp.Property.Set = pa_KSPROPSETID_Pin; + ksPProp.Property.Id = property; + ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; + ksPProp.PinId = pinId; + ksPProp.Reserved = 0; + + if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp.Property, + sizeof(KSP_PIN), NULL, 0, &multipleItemSize, NULL ) == 0 && GetLastError() != ERROR_MORE_DATA ) + { + return paUnanticipatedHostError; + } + + *ksMultipleItem = (KSMULTIPLE_ITEM*)PaUtil_AllocateMemory( multipleItemSize ); + if( !*ksMultipleItem ) + { + return paInsufficientMemory; + } + + if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp, sizeof(KSP_PIN), + (void*)*ksMultipleItem, multipleItemSize, &bytesReturned, NULL ) == 0 || bytesReturned != multipleItemSize ) + { + PaUtil_FreeMemory( ksMultipleItem ); + return paUnanticipatedHostError; + } + + return paNoError; +} + + +static int GetKSFilterPinCount( HANDLE deviceHandle ) +{ + DWORD result; + + if( WdmGetPinPropertySimple( deviceHandle, 0, KSPROPERTY_PIN_CTYPES, &result, sizeof(result) ) == paNoError ){ + return result; + }else{ + return 0; + } +} + + +static KSPIN_COMMUNICATION GetKSFilterPinPropertyCommunication( HANDLE deviceHandle, int pinId ) +{ + KSPIN_COMMUNICATION result; + + if( WdmGetPinPropertySimple( deviceHandle, pinId, KSPROPERTY_PIN_COMMUNICATION, &result, sizeof(result) ) == paNoError ){ + return result; + }else{ + return KSPIN_COMMUNICATION_NONE; + } +} + + +static KSPIN_DATAFLOW GetKSFilterPinPropertyDataflow( HANDLE deviceHandle, int pinId ) +{ + KSPIN_DATAFLOW result; + + if( WdmGetPinPropertySimple( deviceHandle, pinId, KSPROPERTY_PIN_DATAFLOW, &result, sizeof(result) ) == paNoError ){ + return result; + }else{ + return (KSPIN_DATAFLOW)0; + } +} + + +static int KSFilterPinPropertyIdentifiersInclude( + HANDLE deviceHandle, int pinId, unsigned long property, const GUID *identifierSet, unsigned long identifierId ) +{ + KSMULTIPLE_ITEM* item = NULL; + KSIDENTIFIER* identifier; + int i; + int result = 0; + + if( WdmGetPinPropertyMulti( deviceHandle, pinId, property, &item) != paNoError ) + return 0; + + identifier = (KSIDENTIFIER*)(item+1); + + for( i = 0; i < (int)item->Count; i++ ) + { + if( !memcmp( (void*)&identifier[i].Set, (void*)identifierSet, sizeof( GUID ) ) && + ( identifier[i].Id == identifierId ) ) + { + result = 1; + break; + } + } + + PaUtil_FreeMemory( item ); + + return result; +} + + +/* return the maximum channel count supported by any pin on the device. + if isInput is non-zero we query input pins, otherwise output pins. +*/ +int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput ) +{ + HANDLE deviceHandle; + ULONG i; + int pinCount, pinId; + int result = 0; + KSPIN_DATAFLOW requiredDataflowDirection = (isInput ? KSPIN_DATAFLOW_OUT : KSPIN_DATAFLOW_IN ); + + if( !wcharDevicePath ) + return 0; + + deviceHandle = CreateFileW( (LPCWSTR)wcharDevicePath, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); + if( deviceHandle == INVALID_HANDLE_VALUE ) + return 0; + + pinCount = GetKSFilterPinCount( deviceHandle ); + for( pinId = 0; pinId < pinCount; ++pinId ) + { + KSPIN_COMMUNICATION communication = GetKSFilterPinPropertyCommunication( deviceHandle, pinId ); + KSPIN_DATAFLOW dataflow = GetKSFilterPinPropertyDataflow( deviceHandle, pinId ); + if( ( dataflow == requiredDataflowDirection ) && + (( communication == KSPIN_COMMUNICATION_SINK) || + ( communication == KSPIN_COMMUNICATION_BOTH)) + && ( KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, + KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_STREAMING ) + || KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, + KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_LOOPED_STREAMING ) ) + && KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, + KSPROPERTY_PIN_MEDIUMS, &pa_KSMEDIUMSETID_Standard, KSMEDIUM_STANDARD_DEVIO ) ) + { + KSMULTIPLE_ITEM* item = NULL; + if( WdmGetPinPropertyMulti( deviceHandle, pinId, KSPROPERTY_PIN_DATARANGES, &item ) == paNoError ) + { + KSDATARANGE *dataRange = (KSDATARANGE*)(item+1); + + for( i=0; i < item->Count; ++i ){ + + if( pa_IS_VALID_WAVEFORMATEX_GUID(&dataRange->SubFormat) + || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_PCM, sizeof(GUID) ) == 0 + || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, sizeof(GUID) ) == 0 + || ( ( memcmp( (void*)&dataRange->MajorFormat, (void*)&pa_KSDATAFORMAT_TYPE_AUDIO, sizeof(GUID) ) == 0 ) + && ( memcmp( (void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_WILDCARD, sizeof(GUID) ) == 0 ) ) ) + { + KSDATARANGE_AUDIO *dataRangeAudio = (KSDATARANGE_AUDIO*)dataRange; + + /* + printf( ">>> %d %d %d %d %S\n", isInput, dataflow, communication, dataRangeAudio->MaximumChannels, devicePath ); + + if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, sizeof(GUID) ) == 0 ) + printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_WAVEFORMATEX\n" ); + else if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_DSOUND, sizeof(GUID) ) == 0 ) + printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_DSOUND\n" ); + else if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_WILDCARD, sizeof(GUID) ) == 0 ) + printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_WILDCARD\n" ); + else + printf( "\tspecifier: ?\n" ); + */ + + /* + We assume that very high values for MaximumChannels are not useful and indicate + that the driver isn't prepared to tell us the real number of channels which it supports. + */ + if( dataRangeAudio->MaximumChannels < 0xFFFFUL && (int)dataRangeAudio->MaximumChannels > result ) + result = (int)dataRangeAudio->MaximumChannels; + } + + dataRange = (KSDATARANGE*)( ((char*)dataRange) + dataRange->FormatSize); + } + + PaUtil_FreeMemory( item ); + } + } + } + + CloseHandle( deviceHandle ); + return result; +} diff --git a/Externals/portaudio/src/os/win/pa_win_wdmks_utils.h b/Externals/portaudio/src/os/win/pa_win_wdmks_utils.h new file mode 100644 index 0000000000..b8e923a615 --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_win_wdmks_utils.h @@ -0,0 +1,65 @@ +#ifndef PA_WIN_WDMKS_UTILS_H +#define PA_WIN_WDMKS_UTILS_H + +/* + * PortAudio Portable Real-Time Audio Library + * Windows WDM KS utilities + * + * Copyright (c) 1999 - 2007 Ross Bencina, Andrew Baldwin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @brief Utilities for working with the Windows WDM KS API +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Query for the maximum number of channels supported by any pin of the + specified device. Returns 0 if the query fails for any reason. + + @param wcharDevicePath A system level PnP interface path, supplied as a WCHAR unicode string. + Declard as void* to avoid introducing a dependency on wchar_t here. + + @param isInput A flag specifying whether to query for input (non-zero) or output (zero) channels. +*/ +int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput ); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* PA_WIN_WDMKS_UTILS_H */ \ No newline at end of file diff --git a/Externals/portaudio/src/os/win/pa_x86_plain_converters.c b/Externals/portaudio/src/os/win/pa_x86_plain_converters.c new file mode 100644 index 0000000000..4fcde40cb0 --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_x86_plain_converters.c @@ -0,0 +1,1219 @@ +/* + * Plain Intel IA32 assembly implementations of PortAudio sample converter functions. + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src +*/ + +#include "pa_x86_plain_converters.h" + +#include "pa_converters.h" +#include "pa_dither.h" + +/* + the main reason these versions are faster than the equivalent C versions + is that float -> int casting is expensive in C on x86 because the rounding + mode needs to be changed for every cast. these versions only set + the rounding mode once outside the loop. + + small additional speed gains are made by the way that clamping is + implemented. + +TODO: + o- inline dither code + o- implement Dither only (no-clip) versions + o- implement int8 and uint8 versions + o- test thouroughly + + o- the packed 24 bit functions could benefit from unrolling and avoiding + byte and word sized register access. +*/ + +/* -------------------------------------------------------------------------- */ + +/* +#define PA_CLIP_( val, min, max )\ + { val = ((val) < (min)) ? (min) : (((val) > (max)) ? (max) : (val)); } +*/ + +/* + the following notes were used to determine whether a floating point + value should be saturated (ie >1 or <-1) by loading it into an integer + register. these should be rewritten so that they make sense. + + an ieee floating point value + + 1.xxxxxxxxxxxxxxxxxxxx? + + + is less than or equal to 1 and greater than or equal to -1 either: + + if the mantissa is 0 and the unbiased exponent is 0 + + OR + + if the unbiased exponent < 0 + + this translates to: + + if the mantissa is 0 and the biased exponent is 7F + + or + + if the biased exponent is less than 7F + + + therefore the value is greater than 1 or less than -1 if + + the mantissa is not 0 and the biased exponent is 7F + + or + + if the biased exponent is greater than 7F + + + in other words, if we mask out the sign bit, the value is + greater than 1 or less than -1 if its integer representation is greater than: + + 0 01111111 0000 0000 0000 0000 0000 000 + + 0011 1111 1000 0000 0000 0000 0000 0000 => 0x3F800000 +*/ + +/* -------------------------------------------------------------------------- */ + +static const short fpuControlWord_ = 0x033F; /*round to nearest, 64 bit precision, all exceptions masked*/ +static const double int32Scaler_ = 0x7FFFFFFF; +static const double ditheredInt32Scaler_ = 0x7FFFFFFE; +static const double int24Scaler_ = 0x7FFFFF; +static const double ditheredInt24Scaler_ = 0x7FFFFE; +static const double int16Scaler_ = 0x7FFF; +static const double ditheredInt16Scaler_ = 0x7FFE; + +#define PA_DITHER_BITS_ (15) +/* Multiply by PA_FLOAT_DITHER_SCALE_ to get a float between -2.0 and +1.99999 */ +#define PA_FLOAT_DITHER_SCALE_ (1.0F / ((1< source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 and int32 + mov eax, sourceStride + imul eax, edx + + mov ecx, count + imul ecx, eax + add ecx, esi + + mov edi, destinationBuffer + + mov ebx, destinationStride + imul ebx, edx + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld int32Scaler_ // stack: (int)0x7FFFFFFF + + Float32_To_Int32_loop: + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, (int)0x7FFFFFFF + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFFFF, (int)0x7FFFFFFF + /* + note: we could store to a temporary qword here which would cause + wraparound distortion instead of int indefinite 0x10. that would + be more work, and given that not enabling clipping is only advisable + when you know that your signal isn't going to clip it isn't worth it. + */ + fistp dword ptr [edi] // pop st(0) into dest, stack: (int)0x7FFFFFFF + + add edi, ebx // increment destination ptr + //lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int32_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int32_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ +/* + float *src = (float*)sourceBuffer; + signed long *dest = (signed long*)destinationBuffer; + (void) ditherGenerator; // unused parameter + + while( count-- ) + { + // REVIEW + double scaled = *src * 0x7FFFFFFF; + PA_CLIP_( scaled, -2147483648., 2147483647. ); + *dest = (signed long) scaled; + + src += sourceStride; + dest += destinationStride; + } +*/ + + short savedFpuControlWord; + + (void) ditherGenerator; /* unused parameter */ + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 and int32 + mov eax, sourceStride + imul eax, edx + + mov ecx, count + imul ecx, eax + add ecx, esi + + mov edi, destinationBuffer + + mov ebx, destinationStride + imul ebx, edx + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld int32Scaler_ // stack: (int)0x7FFFFFFF + + Float32_To_Int32_Clip_loop: + + mov edx, dword ptr [esi] // load floating point value into integer register + + and edx, 0x7FFFFFFF // mask off sign + cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 + + jg Float32_To_Int32_Clip_clamp + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, (int)0x7FFFFFFF + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFFFF, (int)0x7FFFFFFF + fistp dword ptr [edi] // pop st(0) into dest, stack: (int)0x7FFFFFFF + jmp Float32_To_Int32_Clip_stored + + Float32_To_Int32_Clip_clamp: + mov edx, dword ptr [esi] // load floating point value into integer register + shr edx, 31 // move sign bit into bit 0 + add esi, eax // increment source ptr + //lea esi, [esi+eax] + add edx, 0x7FFFFFFF // convert to maximum range integers + mov dword ptr [edi], edx + + Float32_To_Int32_Clip_stored: + + //add edi, ebx // increment destination ptr + lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int32_Clip_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int32_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ + /* + float *src = (float*)sourceBuffer; + signed long *dest = (signed long*)destinationBuffer; + + while( count-- ) + { + // REVIEW + double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + // use smaller scaler to prevent overflow when we add the dither + double dithered = ((double)*src * (2147483646.0)) + dither; + PA_CLIP_( dithered, -2147483648., 2147483647. ); + *dest = (signed long) dithered; + + + src += sourceStride; + dest += destinationStride; + } + */ + + short savedFpuControlWord; + + // spill storage: + signed long sourceByteStride; + signed long highpassedDither; + + // dither state: + unsigned long ditherPrevious = ditherGenerator->previous; + unsigned long ditherRandSeed1 = ditherGenerator->randSeed1; + unsigned long ditherRandSeed2 = ditherGenerator->randSeed2; + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 and int32 + mov eax, sourceStride + imul eax, edx + + mov ecx, count + imul ecx, eax + add ecx, esi + + mov edi, destinationBuffer + + mov ebx, destinationStride + imul ebx, edx + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld ditheredInt32Scaler_ // stack: int scaler + + Float32_To_Int32_DitherClip_loop: + + mov edx, dword ptr [esi] // load floating point value into integer register + + and edx, 0x7FFFFFFF // mask off sign + cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 + + jg Float32_To_Int32_DitherClip_clamp + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, int scaler + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*(int scaler), int scaler + + /* + // call PaUtil_GenerateFloatTriangularDither with C calling convention + mov sourceByteStride, eax // save eax + mov sourceEnd, ecx // save ecx + push ditherGenerator // pass ditherGenerator parameter on stack + call PaUtil_GenerateFloatTriangularDither // stack: dither, value*(int scaler), int scaler + pop edx // clear parameter off stack + mov ecx, sourceEnd // restore ecx + mov eax, sourceByteStride // restore eax + */ + + // generate dither + mov sourceByteStride, eax // save eax + mov edx, 196314165 + mov eax, ditherRandSeed1 + mul edx // eax:edx = eax * 196314165 + //add eax, 907633515 + lea eax, [eax+907633515] + mov ditherRandSeed1, eax + mov edx, 196314165 + mov eax, ditherRandSeed2 + mul edx // eax:edx = eax * 196314165 + //add eax, 907633515 + lea eax, [eax+907633515] + mov edx, ditherRandSeed1 + shr edx, PA_DITHER_SHIFT_ + mov ditherRandSeed2, eax + shr eax, PA_DITHER_SHIFT_ + //add eax, edx // eax -> current + lea eax, [eax+edx] + mov edx, ditherPrevious + neg edx + lea edx, [eax+edx] // highpass = current - previous + mov highpassedDither, edx + mov ditherPrevious, eax // previous = current + mov eax, sourceByteStride // restore eax + fild highpassedDither + fmul const_float_dither_scale_ + // end generate dither, dither signal in st(0) + + faddp st(1), st(0) // stack: dither + value*(int scaler), int scaler + fistp dword ptr [edi] // pop st(0) into dest, stack: int scaler + jmp Float32_To_Int32_DitherClip_stored + + Float32_To_Int32_DitherClip_clamp: + mov edx, dword ptr [esi] // load floating point value into integer register + shr edx, 31 // move sign bit into bit 0 + add esi, eax // increment source ptr + //lea esi, [esi+eax] + add edx, 0x7FFFFFFF // convert to maximum range integers + mov dword ptr [edi], edx + + Float32_To_Int32_DitherClip_stored: + + //add edi, ebx // increment destination ptr + lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int32_DitherClip_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } + + ditherGenerator->previous = ditherPrevious; + ditherGenerator->randSeed1 = ditherRandSeed1; + ditherGenerator->randSeed2 = ditherRandSeed2; +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int24( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ +/* + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + signed long temp; + + (void) ditherGenerator; // unused parameter + + while( count-- ) + { + // convert to 32 bit and drop the low 8 bits + double scaled = *src * 0x7FFFFFFF; + temp = (signed long) scaled; + + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 24); + + src += sourceStride; + dest += destinationStride * 3; + } +*/ + + short savedFpuControlWord; + + signed long tempInt32; + + (void) ditherGenerator; /* unused parameter */ + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 + mov eax, sourceStride + imul eax, edx + + mov ecx, count + imul ecx, eax + add ecx, esi + + mov edi, destinationBuffer + + mov edx, 3 // sizeof int24 + mov ebx, destinationStride + imul ebx, edx + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld int24Scaler_ // stack: (int)0x7FFFFF + + Float32_To_Int24_loop: + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, (int)0x7FFFFF + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFF, (int)0x7FFFFF + fistp tempInt32 // pop st(0) into tempInt32, stack: (int)0x7FFFFF + mov edx, tempInt32 + + mov byte ptr [edi], DL + shr edx, 8 + //mov byte ptr [edi+1], DL + //mov byte ptr [edi+2], DH + mov word ptr [edi+1], DX + + //add edi, ebx // increment destination ptr + lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int24_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int24_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ +/* + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + signed long temp; + + (void) ditherGenerator; // unused parameter + + while( count-- ) + { + // convert to 32 bit and drop the low 8 bits + double scaled = *src * 0x7FFFFFFF; + PA_CLIP_( scaled, -2147483648., 2147483647. ); + temp = (signed long) scaled; + + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 24); + + src += sourceStride; + dest += destinationStride * 3; + } +*/ + + short savedFpuControlWord; + + signed long tempInt32; + + (void) ditherGenerator; /* unused parameter */ + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 + mov eax, sourceStride + imul eax, edx + + mov ecx, count + imul ecx, eax + add ecx, esi + + mov edi, destinationBuffer + + mov edx, 3 // sizeof int24 + mov ebx, destinationStride + imul ebx, edx + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld int24Scaler_ // stack: (int)0x7FFFFF + + Float32_To_Int24_Clip_loop: + + mov edx, dword ptr [esi] // load floating point value into integer register + + and edx, 0x7FFFFFFF // mask off sign + cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 + + jg Float32_To_Int24_Clip_clamp + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, (int)0x7FFFFF + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFF, (int)0x7FFFFF + fistp tempInt32 // pop st(0) into tempInt32, stack: (int)0x7FFFFF + mov edx, tempInt32 + jmp Float32_To_Int24_Clip_store + + Float32_To_Int24_Clip_clamp: + mov edx, dword ptr [esi] // load floating point value into integer register + shr edx, 31 // move sign bit into bit 0 + add esi, eax // increment source ptr + //lea esi, [esi+eax] + add edx, 0x7FFFFF // convert to maximum range integers + + Float32_To_Int24_Clip_store: + + mov byte ptr [edi], DL + shr edx, 8 + //mov byte ptr [edi+1], DL + //mov byte ptr [edi+2], DH + mov word ptr [edi+1], DX + + //add edi, ebx // increment destination ptr + lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int24_Clip_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int24_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ +/* + float *src = (float*)sourceBuffer; + unsigned char *dest = (unsigned char*)destinationBuffer; + signed long temp; + + while( count-- ) + { + // convert to 32 bit and drop the low 8 bits + + // FIXME: the dither amplitude here appears to be too small by 8 bits + double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + // use smaller scaler to prevent overflow when we add the dither + double dithered = ((double)*src * (2147483646.0)) + dither; + PA_CLIP_( dithered, -2147483648., 2147483647. ); + + temp = (signed long) dithered; + + dest[0] = (unsigned char)(temp >> 8); + dest[1] = (unsigned char)(temp >> 16); + dest[2] = (unsigned char)(temp >> 24); + + src += sourceStride; + dest += destinationStride * 3; + } +*/ + + short savedFpuControlWord; + + // spill storage: + signed long sourceByteStride; + signed long highpassedDither; + + // dither state: + unsigned long ditherPrevious = ditherGenerator->previous; + unsigned long ditherRandSeed1 = ditherGenerator->randSeed1; + unsigned long ditherRandSeed2 = ditherGenerator->randSeed2; + + signed long tempInt32; + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 + mov eax, sourceStride + imul eax, edx + + mov ecx, count + imul ecx, eax + add ecx, esi + + mov edi, destinationBuffer + + mov edx, 3 // sizeof int24 + mov ebx, destinationStride + imul ebx, edx + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld ditheredInt24Scaler_ // stack: int scaler + + Float32_To_Int24_DitherClip_loop: + + mov edx, dword ptr [esi] // load floating point value into integer register + + and edx, 0x7FFFFFFF // mask off sign + cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 + + jg Float32_To_Int24_DitherClip_clamp + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, int scaler + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*(int scaler), int scaler + + /* + // call PaUtil_GenerateFloatTriangularDither with C calling convention + mov sourceByteStride, eax // save eax + mov sourceEnd, ecx // save ecx + push ditherGenerator // pass ditherGenerator parameter on stack + call PaUtil_GenerateFloatTriangularDither // stack: dither, value*(int scaler), int scaler + pop edx // clear parameter off stack + mov ecx, sourceEnd // restore ecx + mov eax, sourceByteStride // restore eax + */ + + // generate dither + mov sourceByteStride, eax // save eax + mov edx, 196314165 + mov eax, ditherRandSeed1 + mul edx // eax:edx = eax * 196314165 + //add eax, 907633515 + lea eax, [eax+907633515] + mov ditherRandSeed1, eax + mov edx, 196314165 + mov eax, ditherRandSeed2 + mul edx // eax:edx = eax * 196314165 + //add eax, 907633515 + lea eax, [eax+907633515] + mov edx, ditherRandSeed1 + shr edx, PA_DITHER_SHIFT_ + mov ditherRandSeed2, eax + shr eax, PA_DITHER_SHIFT_ + //add eax, edx // eax -> current + lea eax, [eax+edx] + mov edx, ditherPrevious + neg edx + lea edx, [eax+edx] // highpass = current - previous + mov highpassedDither, edx + mov ditherPrevious, eax // previous = current + mov eax, sourceByteStride // restore eax + fild highpassedDither + fmul const_float_dither_scale_ + // end generate dither, dither signal in st(0) + + faddp st(1), st(0) // stack: dither * value*(int scaler), int scaler + fistp tempInt32 // pop st(0) into tempInt32, stack: int scaler + mov edx, tempInt32 + jmp Float32_To_Int24_DitherClip_store + + Float32_To_Int24_DitherClip_clamp: + mov edx, dword ptr [esi] // load floating point value into integer register + shr edx, 31 // move sign bit into bit 0 + add esi, eax // increment source ptr + //lea esi, [esi+eax] + add edx, 0x7FFFFF // convert to maximum range integers + + Float32_To_Int24_DitherClip_store: + + mov byte ptr [edi], DL + shr edx, 8 + //mov byte ptr [edi+1], DL + //mov byte ptr [edi+2], DH + mov word ptr [edi+1], DX + + //add edi, ebx // increment destination ptr + lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int24_DitherClip_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } + + ditherGenerator->previous = ditherPrevious; + ditherGenerator->randSeed1 = ditherRandSeed1; + ditherGenerator->randSeed2 = ditherRandSeed2; +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int16( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ +/* + float *src = (float*)sourceBuffer; + signed short *dest = (signed short*)destinationBuffer; + (void)ditherGenerator; // unused parameter + + while( count-- ) + { + + short samp = (short) (*src * (32767.0f)); + *dest = samp; + + src += sourceStride; + dest += destinationStride; + } +*/ + + short savedFpuControlWord; + + (void) ditherGenerator; /* unused parameter */ + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 + mov eax, sourceStride + imul eax, edx // source byte stride + + mov ecx, count + imul ecx, eax + add ecx, esi // source end ptr = count * source byte stride + source ptr + + mov edi, destinationBuffer + + mov edx, 2 // sizeof int16 + mov ebx, destinationStride + imul ebx, edx // destination byte stride + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld int16Scaler_ // stack: (int)0x7FFF + + Float32_To_Int16_loop: + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, (int)0x7FFF + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFF, (int)0x7FFF + fistp word ptr [edi] // store scaled int into dest, stack: (int)0x7FFF + + add edi, ebx // increment destination ptr + //lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int16_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int16_Clip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ +/* + float *src = (float*)sourceBuffer; + signed short *dest = (signed short*)destinationBuffer; + (void)ditherGenerator; // unused parameter + + while( count-- ) + { + long samp = (signed long) (*src * (32767.0f)); + PA_CLIP_( samp, -0x8000, 0x7FFF ); + *dest = (signed short) samp; + + src += sourceStride; + dest += destinationStride; + } +*/ + + short savedFpuControlWord; + + (void) ditherGenerator; /* unused parameter */ + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 + mov eax, sourceStride + imul eax, edx // source byte stride + + mov ecx, count + imul ecx, eax + add ecx, esi // source end ptr = count * source byte stride + source ptr + + mov edi, destinationBuffer + + mov edx, 2 // sizeof int16 + mov ebx, destinationStride + imul ebx, edx // destination byte stride + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld int16Scaler_ // stack: (int)0x7FFF + + Float32_To_Int16_Clip_loop: + + mov edx, dword ptr [esi] // load floating point value into integer register + + and edx, 0x7FFFFFFF // mask off sign + cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 + + jg Float32_To_Int16_Clip_clamp + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, (int)0x7FFF + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFF, (int)0x7FFF + fistp word ptr [edi] // store scaled int into dest, stack: (int)0x7FFF + jmp Float32_To_Int16_Clip_stored + + Float32_To_Int16_Clip_clamp: + mov edx, dword ptr [esi] // load floating point value into integer register + shr edx, 31 // move sign bit into bit 0 + add esi, eax // increment source ptr + //lea esi, [esi+eax] + add dx, 0x7FFF // convert to maximum range integers + mov word ptr [edi], dx // store clamped into into dest + + Float32_To_Int16_Clip_stored: + + add edi, ebx // increment destination ptr + //lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int16_Clip_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } +} + +/* -------------------------------------------------------------------------- */ + +static void Float32_To_Int16_DitherClip( + void *destinationBuffer, signed int destinationStride, + void *sourceBuffer, signed int sourceStride, + unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) +{ +/* + float *src = (float*)sourceBuffer; + signed short *dest = (signed short*)destinationBuffer; + (void)ditherGenerator; // unused parameter + + while( count-- ) + { + + float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); + // use smaller scaler to prevent overflow when we add the dither + float dithered = (*src * (32766.0f)) + dither; + signed long samp = (signed long) dithered; + PA_CLIP_( samp, -0x8000, 0x7FFF ); + *dest = (signed short) samp; + + src += sourceStride; + dest += destinationStride; + } +*/ + + short savedFpuControlWord; + + // spill storage: + signed long sourceByteStride; + signed long highpassedDither; + + // dither state: + unsigned long ditherPrevious = ditherGenerator->previous; + unsigned long ditherRandSeed1 = ditherGenerator->randSeed1; + unsigned long ditherRandSeed2 = ditherGenerator->randSeed2; + + __asm{ + // esi -> source ptr + // eax -> source byte stride + // edi -> destination ptr + // ebx -> destination byte stride + // ecx -> source end ptr + // edx -> temp + + mov esi, sourceBuffer + + mov edx, 4 // sizeof float32 + mov eax, sourceStride + imul eax, edx // source byte stride + + mov ecx, count + imul ecx, eax + add ecx, esi // source end ptr = count * source byte stride + source ptr + + mov edi, destinationBuffer + + mov edx, 2 // sizeof int16 + mov ebx, destinationStride + imul ebx, edx // destination byte stride + + fwait + fstcw savedFpuControlWord + fldcw fpuControlWord_ + + fld ditheredInt16Scaler_ // stack: int scaler + + Float32_To_Int16_DitherClip_loop: + + mov edx, dword ptr [esi] // load floating point value into integer register + + and edx, 0x7FFFFFFF // mask off sign + cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 + + jg Float32_To_Int16_DitherClip_clamp + + // load unscaled value into st(0) + fld dword ptr [esi] // stack: value, int scaler + add esi, eax // increment source ptr + //lea esi, [esi+eax] + fmul st(0), st(1) // st(0) *= st(1), stack: value*(int scaler), int scaler + + /* + // call PaUtil_GenerateFloatTriangularDither with C calling convention + mov sourceByteStride, eax // save eax + mov sourceEnd, ecx // save ecx + push ditherGenerator // pass ditherGenerator parameter on stack + call PaUtil_GenerateFloatTriangularDither // stack: dither, value*(int scaler), int scaler + pop edx // clear parameter off stack + mov ecx, sourceEnd // restore ecx + mov eax, sourceByteStride // restore eax + */ + + // generate dither + mov sourceByteStride, eax // save eax + mov edx, 196314165 + mov eax, ditherRandSeed1 + mul edx // eax:edx = eax * 196314165 + //add eax, 907633515 + lea eax, [eax+907633515] + mov ditherRandSeed1, eax + mov edx, 196314165 + mov eax, ditherRandSeed2 + mul edx // eax:edx = eax * 196314165 + //add eax, 907633515 + lea eax, [eax+907633515] + mov edx, ditherRandSeed1 + shr edx, PA_DITHER_SHIFT_ + mov ditherRandSeed2, eax + shr eax, PA_DITHER_SHIFT_ + //add eax, edx // eax -> current + lea eax, [eax+edx] // current = randSeed1>>x + randSeed2>>x + mov edx, ditherPrevious + neg edx + lea edx, [eax+edx] // highpass = current - previous + mov highpassedDither, edx + mov ditherPrevious, eax // previous = current + mov eax, sourceByteStride // restore eax + fild highpassedDither + fmul const_float_dither_scale_ + // end generate dither, dither signal in st(0) + + faddp st(1), st(0) // stack: dither * value*(int scaler), int scaler + fistp word ptr [edi] // store scaled int into dest, stack: int scaler + jmp Float32_To_Int16_DitherClip_stored + + Float32_To_Int16_DitherClip_clamp: + mov edx, dword ptr [esi] // load floating point value into integer register + shr edx, 31 // move sign bit into bit 0 + add esi, eax // increment source ptr + //lea esi, [esi+eax] + add dx, 0x7FFF // convert to maximum range integers + mov word ptr [edi], dx // store clamped into into dest + + Float32_To_Int16_DitherClip_stored: + + add edi, ebx // increment destination ptr + //lea edi, [edi+ebx] + + cmp esi, ecx // has src ptr reached end? + jne Float32_To_Int16_DitherClip_loop + + ffree st(0) + fincstp + + fwait + fnclex + fldcw savedFpuControlWord + } + + ditherGenerator->previous = ditherPrevious; + ditherGenerator->randSeed1 = ditherRandSeed1; + ditherGenerator->randSeed2 = ditherRandSeed2; +} + +/* -------------------------------------------------------------------------- */ + +void PaUtil_InitializeX86PlainConverters( void ) +{ + paConverters.Float32_To_Int32 = Float32_To_Int32; + paConverters.Float32_To_Int32_Clip = Float32_To_Int32_Clip; + paConverters.Float32_To_Int32_DitherClip = Float32_To_Int32_DitherClip; + + paConverters.Float32_To_Int24 = Float32_To_Int24; + paConverters.Float32_To_Int24_Clip = Float32_To_Int24_Clip; + paConverters.Float32_To_Int24_DitherClip = Float32_To_Int24_DitherClip; + + paConverters.Float32_To_Int16 = Float32_To_Int16; + paConverters.Float32_To_Int16_Clip = Float32_To_Int16_Clip; + paConverters.Float32_To_Int16_DitherClip = Float32_To_Int16_DitherClip; +} + +#endif + +/* -------------------------------------------------------------------------- */ diff --git a/Externals/portaudio/src/os/win/pa_x86_plain_converters.h b/Externals/portaudio/src/os/win/pa_x86_plain_converters.h new file mode 100644 index 0000000000..1623115d6b --- /dev/null +++ b/Externals/portaudio/src/os/win/pa_x86_plain_converters.h @@ -0,0 +1,60 @@ +/* + * Plain Intel IA32 assembly implementations of PortAudio sample converter functions. + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src +*/ + +#ifndef PA_X86_PLAIN_CONVERTERS_H +#define PA_X86_PLAIN_CONVERTERS_H + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** + @brief Install optimized converter functions suitable for all IA32 processors + + It is recommended to call PaUtil_InitializeX86PlainConverters prior to calling Pa_Initialize +*/ +void PaUtil_InitializeX86PlainConverters( void ); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_X86_PLAIN_CONVERTERS_H */ diff --git a/Externals/portaudio/x64/Debug/portaudio.lib b/Externals/portaudio/x64/Debug/portaudio.lib deleted file mode 100644 index a092624370..0000000000 Binary files a/Externals/portaudio/x64/Debug/portaudio.lib and /dev/null differ diff --git a/Externals/portaudio/x64/Debug/portaudio.pdb b/Externals/portaudio/x64/Debug/portaudio.pdb deleted file mode 100644 index fd5cd214b4..0000000000 Binary files a/Externals/portaudio/x64/Debug/portaudio.pdb and /dev/null differ diff --git a/Externals/portaudio/x64/DebugFast/portaudio.lib b/Externals/portaudio/x64/DebugFast/portaudio.lib deleted file mode 100644 index 3029595193..0000000000 Binary files a/Externals/portaudio/x64/DebugFast/portaudio.lib and /dev/null differ diff --git a/Externals/portaudio/x64/DebugFast/portaudio.pdb b/Externals/portaudio/x64/DebugFast/portaudio.pdb deleted file mode 100644 index 3642ec683a..0000000000 Binary files a/Externals/portaudio/x64/DebugFast/portaudio.pdb and /dev/null differ diff --git a/Externals/portaudio/x64/Release/portaudio.lib b/Externals/portaudio/x64/Release/portaudio.lib deleted file mode 100644 index 3029595193..0000000000 Binary files a/Externals/portaudio/x64/Release/portaudio.lib and /dev/null differ diff --git a/Externals/portaudio/x64/Release/portaudio.pdb b/Externals/portaudio/x64/Release/portaudio.pdb deleted file mode 100644 index 3642ec683a..0000000000 Binary files a/Externals/portaudio/x64/Release/portaudio.pdb and /dev/null differ diff --git a/Externals/soundtouch/SoundTouch.vcxproj b/Externals/soundtouch/SoundTouch.vcxproj index 70d6d81f65..d9e9968d4f 100644 --- a/Externals/soundtouch/SoundTouch.vcxproj +++ b/Externals/soundtouch/SoundTouch.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -19,322 +19,40 @@ - {68A5DD20-7057-448B-8FE0-B6AC8D205509} - - + {EC082900-B4D8-42E9-9663-77F02F6936AE} - + StaticLibrary - false - MultiByte + v120 + Unicode - - StaticLibrary - false - MultiByte - v100 + + true - - StaticLibrary - false - MultiByte - - - StaticLibrary - false - MultiByte - v100 + + false - - - - - - - - - - + + - - <_ProjectFileVersion>10.0.40219.1 - Release\ - Release\ - Release\ - Release\ - Debug\ - Win64\ - Debug\ - Debug\ - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - $(ProjectName)D - - - - Full - AnySuitable - true - %(AdditionalIncludeDirectories) - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreaded - true - - - Release/SoundTouch.pch - Release/ - Release/ - Release/ - Level3 - true - - - Default - - - Win32\SoundTouch.lib - true - - - - - - - NDEBUG;%(PreprocessorDefinitions) - 0x040b - - - - - Full - AnySuitable - true - %(AdditionalIncludeDirectories) - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreaded - true - - - Release/SoundTouch.pch - Release/ - Release/ - Release/ - Level3 - true - - - Default - StreamingSIMDExtensions2 - - - Win64\SoundTouch.lib - true - - - - - - - NDEBUG;%(PreprocessorDefinitions) - 0x040b - - - - - Disabled - %(AdditionalIncludeDirectories) - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - Debug/SoundTouch.pch - Debug/ - Debug/ - Debug/ - true - Level3 - true - EditAndContinue - Default - - - Win32\SoundTouchD.lib - true - - - - - - - _DEBUG;%(PreprocessorDefinitions) - 0x040b - - - - - Disabled - %(AdditionalIncludeDirectories) - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - Debug/SoundTouch.pch - Debug/ - Debug/ - Debug/ - true - Level3 - true - ProgramDatabase - Default - - - Win64\SoundTouchD.lib - true - - - - - - - _DEBUG;%(PreprocessorDefinitions) - 0x040b - - - - Disabled - Disabled - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - EnableFastChecks - EnableFastChecks - true - true - MaxSpeed - MaxSpeed - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - Disabled - Disabled - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - EnableFastChecks - EnableFastChecks - true - true - MaxSpeed - MaxSpeed - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - Disabled - Disabled - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - EnableFastChecks - EnableFastChecks - true - true - MaxSpeed - MaxSpeed - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - Disabled - Disabled - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - EnableFastChecks - EnableFastChecks - true - true - MaxSpeed - MaxSpeed - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - Disabled - Disabled - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - EnableFastChecks - EnableFastChecks - true - true - MaxSpeed - MaxSpeed - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - Disabled - Disabled - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - EnableFastChecks - EnableFastChecks - true - true - MaxSpeed - MaxSpeed - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - + + + + + + + + + @@ -349,6 +67,9 @@ + + + diff --git a/Externals/soundtouch/SoundTouch.vcxproj.filters b/Externals/soundtouch/SoundTouch.vcxproj.filters deleted file mode 100644 index 1dee5b2a6e..0000000000 --- a/Externals/soundtouch/SoundTouch.vcxproj.filters +++ /dev/null @@ -1,60 +0,0 @@ - - - - - {b7786182-6345-4203-8b48-39eec5ec85dc} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {75380bb9-1e58-4186-a9cd-ec7cd284e6a5} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\bpm - - - Source Files\bpm - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Externals/wxWidgets3/build/msw/wx_base.vcxproj b/Externals/wxWidgets3/build/msw/wx_base.vcxproj index 4ec4c4d277..e50e7647e1 100644 --- a/Externals/wxWidgets3/build/msw/wx_base.vcxproj +++ b/Externals/wxWidgets3/build/msw/wx_base.vcxproj @@ -17,14 +17,6 @@ Release x64 - - DebugFast - Win32 - - - DebugFast - x64 -
@@ -425,17 +417,13 @@ - - - - @@ -449,20 +437,10 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true @@ -690,20 +668,10 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true @@ -717,12 +685,7 @@ - true - true - true - true - true - true + true @@ -782,42 +745,22 @@ - Create - Create - Create - Create - Create - Create + Create - true - true - true - true - true - true + true - true - true - true - true - true - true + true - NotUsing - NotUsing - NotUsing - NotUsing - NotUsing - NotUsing + NotUsing @@ -840,23 +783,13 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true @@ -884,69 +817,29 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true @@ -959,29 +852,14 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true @@ -1012,12 +890,7 @@ - true - true - true - true - true - true + true @@ -1033,12 +906,7 @@ - true - true - true - true - true - true + true @@ -1089,12 +957,7 @@ - true - true - true - true - true - true + true @@ -1107,104 +970,47 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - - true - true - true - true - true - true - - - true - true - true - true - true - true - - - true - true - true - true - true - true - - true - true - true - true - true - true + true - - true - true - true - true - true - true - - true - true - true - true - true - true + true @@ -1212,99 +1018,37 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true - - true - true - true - true - true - true - - - true - true - true - true - true - true - - - true - true - true - true - true - true - - true - true - true - true - true - true + true - true - true - true - true - true - true + true - - true - true - true - true - true - true - - true - true - true - true - true - true + true - true - true - true - true - true - true + true @@ -1317,28 +1061,11 @@ - - true - true - true - true - true - true - - - - true - true - true - true - true - true - @@ -1403,12 +1130,7 @@ - true - true - true - true - true - true + true @@ -1425,51 +1147,26 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true - true - true - true - true - true - true + true @@ -1543,21 +1240,11 @@ - true - true - true - true - true - true + true - true - true - true - true - true - true + true
@@ -1566,12 +1253,7 @@ - true - true - true - true - true - true + true @@ -1585,130 +1267,35 @@ wxWidgets {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - wxBase28 - + StaticLibrary + v120 Unicode - - StaticLibrary - Unicode + + true - - StaticLibrary - Unicode - - - StaticLibrary - Unicode - - - StaticLibrary - Unicode - - - StaticLibrary - Unicode + + false - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __WXDEBUG__;%(PreprocessorDefinitions) - - - - - - - - - __WXDEBUG__;%(PreprocessorDefinitions) - - - - -
+
\ No newline at end of file diff --git a/Externals/wxWidgets3/build/msw/wx_base.vcxproj.filters b/Externals/wxWidgets3/build/msw/wx_base.vcxproj.filters index 7e91426bbc..9b5e294f18 100644 --- a/Externals/wxWidgets3/build/msw/wx_base.vcxproj.filters +++ b/Externals/wxWidgets3/build/msw/wx_base.vcxproj.filters @@ -1689,12 +1689,6 @@ Headers\MSW\private - - Headers\MSW\private - - - Headers\MSW\private - Headers\MSW\private @@ -1710,18 +1704,12 @@ Headers\MSW\private - - Headers\MSW - Headers\MSW Headers\MSW\private - - Headers\MSW - Headers\MSW @@ -2756,9 +2744,6 @@ Generic - - Generic - Generic @@ -2777,9 +2762,6 @@ Generic - - Generic - Generic @@ -2792,9 +2774,6 @@ Generic - - Generic - Generic @@ -2828,9 +2807,6 @@ Generic - - Generic - Generic @@ -2876,12 +2852,6 @@ Generic - - Generic - - - Generic - Generic @@ -2891,9 +2861,6 @@ Generic - - Generic - Generic @@ -2909,9 +2876,6 @@ Generic - - Generic - Generic @@ -2924,9 +2888,6 @@ Generic - - Generic - Generic @@ -2975,9 +2936,6 @@ Generic - - Generic - Generic @@ -2990,15 +2948,9 @@ Generic - - Generic - Generic - - Generic - Generic @@ -3488,6 +3440,9 @@ MSW\ole + + + @@ -3500,4 +3455,4 @@ MSW -
+ \ No newline at end of file diff --git a/Externals/zlib/zlib.vcxproj b/Externals/zlib/zlib.vcxproj index e4432e2612..f890251da5 100644 --- a/Externals/zlib/zlib.vcxproj +++ b/Externals/zlib/zlib.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,112 +19,30 @@ - {3E1339F5-9311-4122-9442-369702E8FCAD} - zlib + {FF213B23-2C26-4214-9F88-85271E557E87} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - false - - - StaticLibrary - false - Unicode - - - StaticLibrary - - - Unicode - - - StaticLibrary - - - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - true - - - - - - true - true - true - - - - - - true - true - true - + + @@ -151,6 +61,12 @@ + + + + + + @@ -164,9 +80,6 @@ - - - diff --git a/Externals/zlib/zlib.vcxproj.filters b/Externals/zlib/zlib.vcxproj.filters deleted file mode 100644 index 5e4b0a7921..0000000000 --- a/Externals/zlib/zlib.vcxproj.filters +++ /dev/null @@ -1,96 +0,0 @@ - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - - - - {e2f2d23a-ab40-4d71-ad14-caf68f21801b} - - - {58aaeb81-b6bc-4175-94c7-baa2db0b1827} - - - \ No newline at end of file diff --git a/Languages/Languages.vcxproj b/Languages/Languages.vcxproj index 1e1ac6d7ba..d18452f8c2 100644 --- a/Languages/Languages.vcxproj +++ b/Languages/Languages.vcxproj @@ -1,6 +1,14 @@  - + + + Debug + Win32 + + + Debug + x64 + Release Win32 @@ -10,104 +18,74 @@ x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C} - Languages + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5} - + Utility - NotSet + true + v120 + + + Utility + true + v120 Utility - NotSet + false + v120 Utility - NotSet - - - Utility - NotSet + false + v120 - + - - - - - + - ..\Binary\$(Platform)\ - ..\Binary\$(Platform)\ - ..\Binary\$(Platform)\ - ..\Binary\$(Platform)\ + $(BinaryOutputDir) - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Document - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/Languages/po/ar.po b/Languages/po/ar.po index 47d512b89c..47704ddddf 100644 --- a/Languages/po/ar.po +++ b/Languages/po/ar.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 16:15+0000\n" "Last-Translator: mansoor \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/dolphin-emu/" @@ -22,13 +22,13 @@ msgstr "" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(عرض أشياء كثير جدًا)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " لعبة : " @@ -36,7 +36,7 @@ msgstr " لعبة : " msgid "! NOT" msgstr "! لا" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -60,12 +60,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sنسخ%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -76,26 +76,26 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "%s موجود بالفعل، الكتابة فوقة؟" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s فشل في أن تكون نقيت. ربما كانت الصورة معطوب." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card file size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -109,7 +109,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s فشل في فتح" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -119,7 +119,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s ملف 0 بايت" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s مضغوط بالفعل! لا يستطيع أن يضغط أكثر من ذلك." @@ -177,11 +177,11 @@ msgstr "&مدير الاسرار" msgid "&DSP Settings" msgstr "&إعدادات الصوت" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&مسح ايزو" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&حذف تحديد ايزو" @@ -245,7 +245,7 @@ msgstr "&وقفة" msgid "&Play" msgstr "&ابداء اللعبه" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&خصائص" @@ -289,7 +289,7 @@ msgstr "&القائمة" msgid "&Wiimote Settings" msgstr "&إعدادات تحكم الوي" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&معلومات عن اللعبة" @@ -325,7 +325,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 بت" @@ -341,7 +341,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 بت" @@ -357,7 +357,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 بت" @@ -369,7 +369,7 @@ msgstr "<أدخل اسم هنا>" msgid "" msgstr "<لم يتم العثور على القرارات>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "<لا شيء>" @@ -377,7 +377,7 @@ msgstr "<لا شيء>" msgid "" msgstr "<اضغط على مفتاح>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<النظام>" @@ -385,13 +385,13 @@ msgstr "<النظام>" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "نافذة اللعب عبر النت مفتوح بالفعل!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "اللعبة ليست قيد التشغيل حاليا." @@ -410,21 +410,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "اسرار" @@ -467,66 +468,66 @@ msgid "" "%s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " "(%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " "Fill (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " "Pointer (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" "Master codes are not needed. Do not use master codes." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "" @@ -540,11 +541,11 @@ msgstr "كرت الشاشه :" msgid "Add" msgstr "أضف" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "إضافة رمز ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "أضف باتش" @@ -552,9 +553,9 @@ msgstr "أضف باتش" msgid "Add new pane" msgstr "إضافة جزء جديد" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "أضف" @@ -592,36 +593,36 @@ msgstr "ضبط السيطرة على ضغط التناظرية المطلوبة msgid "Advanced" msgstr "متقدم" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "إعدادات متقدمة" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "جميع ملفات الجيم كيوب (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "حفظ جميع الحالات (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "جميع ملفات ايزو الوي" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "جميع مضغوط GC/Wii ISO files (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "جميع الملفات (*.*)|*.*" @@ -641,19 +642,19 @@ msgstr "تصفية متباينة الخواص :" msgid "Anti-Aliasing:" msgstr "تنعيم الحواف:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "محمل التطبيق هو حجم الخطأ... هل حقا محمل التطبيق؟" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader غير قادر على تحميل ملف من" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "تطبيق" @@ -667,7 +668,7 @@ msgstr "" "\n" "إذا لم تكن متأكدا حدد إيقاف." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "العربية" @@ -676,13 +677,13 @@ msgstr "العربية" msgid "Are you sure you want to delete \"%s\"?" msgstr "هل أنت متأكد أنك تريد حذف \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" msgstr "هل أنت متأكد أنك تريد حذف هذه الملف؟ " -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "هل أنت متأكد أنك تريد حذف هذه الملفات؟" @@ -690,7 +691,11 @@ msgstr "هل أنت متأكد أنك تريد حذف هذه الملفات؟" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "نسبة العرض :" @@ -699,12 +704,12 @@ msgstr "نسبة العرض :" msgid "At least one pane must remain open." msgstr "يجب أن لا يقل عن جزء واحد لا تزال مفتوحة." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "الصوت" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "صوت الخلفية :" @@ -712,7 +717,7 @@ msgstr "صوت الخلفية :" msgid "AudioCommon: Error opening AO device.\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "تلقائي" @@ -751,16 +756,16 @@ msgstr "BP تسجل" msgid "Back" msgstr "رجوع" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "إعدادات الخلفية" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "الخلفية:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "خلفية الإدخال" @@ -778,15 +783,15 @@ msgid "Balance Board" msgstr "ميزان لوح" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "بنر" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "تفاصيل بنر" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "بنر:" @@ -798,7 +803,7 @@ msgstr "شريط" msgid "Basic" msgstr "الأساسية" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "إعدادات أساسية" @@ -806,7 +811,7 @@ msgstr "إعدادات أساسية" msgid "Bass" msgstr "صوت عميق" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "كتلة الاختباري جدول تخصيص فشل" @@ -827,7 +832,7 @@ msgid "Blue Right" msgstr "اليمين أزرق" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "أسفل" @@ -836,7 +841,7 @@ msgstr "أسفل" msgid "Bound Controls: %lu" msgstr "يلزم التحكم: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "معطلة" @@ -844,7 +849,7 @@ msgstr "معطلة" msgid "Browse" msgstr "أستعرض" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "لتصفح دليل لإضافة" @@ -852,11 +857,11 @@ msgstr "لتصفح دليل لإضافة" msgid "Browse for an ISO directory..." msgstr "لاستعراض الدليل ايزو" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "لاستعراض الدليل الإخراج" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "العازلة :" @@ -866,7 +871,7 @@ msgstr "العازلة :" msgid "Buttons" msgstr "أزرار" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -888,7 +893,7 @@ msgstr "العصا الأيمن " msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "محرك محاكي المعالج" @@ -910,17 +915,17 @@ msgstr "" "\n" "إذا لم تكن متأكدا اترك هذا غير محددة." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "إلغاء" @@ -932,11 +937,11 @@ msgstr "إلغاء" msgid "Cannot open %s" msgstr "لا يمكن فتح %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "لا يمكن إلغاء تسجيل الأحداث مع الأحداث المعلقة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -947,7 +952,7 @@ msgstr "" "%s\n" "ليست ذاكرة جيم كيوب ملف بطاقة صالحة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -959,7 +964,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "الكاتالونية" @@ -967,7 +972,7 @@ msgstr "الكاتالونية" msgid "Center" msgstr "مركز" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "تغيير" @@ -979,11 +984,11 @@ msgstr "تغيير &القرص" msgid "Change Disc" msgstr "تغيير القرص" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "تغيير اللعبة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -999,11 +1004,11 @@ msgstr "Changes sign to zFar Parameter (بعد التصحيح)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Changes sign to zNear Parameter (بعد التصحيح)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "تغيير هذه ليس لها أي أثر في حين أن المحاكي قيد التشغيل!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "شات" @@ -1011,47 +1016,47 @@ msgstr "شات" msgid "Cheat Code" msgstr "اسرار" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "بحث عن اسرار" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "قائمة الاسرار" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "تحقق سلامة التقسيم" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "التحقق من سلامة ..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "الصينية المبسطة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "الصينية التقليدية" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "DVD اختيار الدليل أصل :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Choose a NAND root directory:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "اختيار ايزو الافتراضية :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "اختيار دليل لإضافة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "اختيار ملف لفتح" @@ -1059,15 +1064,15 @@ msgstr "اختيار ملف لفتح" msgid "Choose a memory card:" msgstr "اختيار بطاقة الذاكرة :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" "اختيار ملف لاستخدام رافعة التطبيقات: (ينطبق على الأقراص مصنوعة من الادله فقط)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "اختيار مجلد لاستخراج" @@ -1086,7 +1091,7 @@ msgstr "الكلاسيكية" msgid "Clear" msgstr "أزال" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1096,7 +1101,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "إغلاق" @@ -1105,11 +1110,11 @@ msgstr "إغلاق" msgid "Co&nfigure..." msgstr "الإعدادات العامة" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "رمز المعلومات" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "رمز: " @@ -1121,20 +1126,20 @@ msgstr "الأمر" msgid "Comment" msgstr "التعليق" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "التعليق:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "ضغط ايزو" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "اختيار ضغط ايزو" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "ضغط ايزو" @@ -1152,8 +1157,8 @@ msgstr "إعدادات" msgid "Configure Control" msgstr "إعدادات التحكم" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "تكوين منصات" @@ -1161,13 +1166,13 @@ msgstr "تكوين منصات" msgid "Configure..." msgstr "إعدادات" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "تأكيد الكتابة فوق ملف" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "تأكيد على التوقف" @@ -1181,7 +1186,7 @@ msgstr "اتصال" msgid "Connect Balance Board" msgstr "توصيل ميزان لوح" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "ربط كيبورد يو اس بي" @@ -1206,7 +1211,7 @@ msgstr "توصيل ويموت 3" msgid "Connect Wiimote 4" msgstr "توصيل ويموت 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "توصيل" @@ -1226,7 +1231,7 @@ msgstr "عصا تحكم" msgid "Convert to GCI" msgstr "GCIتحويل إلى " -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "فشل نسخ" @@ -1235,16 +1240,11 @@ msgstr "فشل نسخ" msgid "Copy to Memcard %c" msgstr "نسخ إلى بطاقة الذاكرة %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "الأساسية" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "لا يمكن إنشاء %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "لا يمكن تهيئة الخلفية %s." @@ -1260,12 +1260,12 @@ msgstr "" "backup. يرجى ملاحظة أن جيم كيوب الأصلي وأقراص الوي لا يمكن قراءتها من قبل " "معظم أجهزة الكمبيوتر محركات الأقراص دي في دي." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "لا يمكن التعرف ملف ايزو %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "لا يمكن حفظ %s" @@ -1283,11 +1283,11 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "لا يمكن العثور فتح الأوامر للتمديد 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1295,17 +1295,17 @@ msgstr "" "لا يمكن التهيئة الأساسية.\n" "تحقق التكوين الخاص بك." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "الاحصاء :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "البلد:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "إنشاء رموز اسرار" @@ -1340,12 +1340,12 @@ msgstr "" msgid "Crossfade" msgstr "الإبهات المتداخل" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "هاك مخصص العرض" @@ -1353,11 +1353,11 @@ msgstr "هاك مخصص العرض" msgid "Custom Projection Hack Settings" msgstr "إعدادات هاك مخصص العرض" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "تخصيص بعض المعلمات العرض على إملائي." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "التشيكية" @@ -1373,20 +1373,20 @@ msgstr "الاسهم" msgid "DSP" msgstr "الصوت" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "محرك محاكي الصوت" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE emulation (سريع)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE interpreter (بطيء)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE recompiler" @@ -1394,11 +1394,11 @@ msgstr "DSP LLE recompiler" msgid "DSP settings" msgstr "إعدادات الصوت" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD Root:" @@ -1410,15 +1410,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "بساط الرقص" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "حجم البيانات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "التاريخ :" @@ -1447,16 +1447,16 @@ msgstr "التصحيح" msgid "Decimal" msgstr "عشري" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "ضغط ايزو" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "اختيار إلغاء ضغط ايزو " -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "فك ايزو" @@ -1468,7 +1468,7 @@ msgstr "تقليل حدود الإطار" msgid "Default" msgstr "الافتراضي" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "ايزو الافتراضية :" @@ -1510,8 +1510,8 @@ msgstr "" msgid "Device" msgstr "أداة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "إعدادات الجهاز" @@ -1519,15 +1519,12 @@ msgstr "إعدادات الجهاز" msgid "Dial" msgstr "الاتصال الهاتفي" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1586,7 +1583,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "القرص" @@ -1613,19 +1610,19 @@ msgstr "" msgid "Divide" msgstr "انقسام" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "هل تريد اغلق اللعبة الحالية؟" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "دولفين" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1656,9 +1653,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1682,12 +1678,12 @@ msgstr "إعدادات تحكم الوي" msgid "Dolphin FIFO" msgstr "دولفين" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "إعدادات تحكم الجيم كيوب" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "" @@ -1699,26 +1695,26 @@ msgstr "إعدادات تحكم الوي" msgid "Dolphin at &Google Code" msgstr "دولفين على مدونة قوقل" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "" "لايمكن العثور على اي لعبه جيم كيوب او وي . دبل كيك هنا لاستعراض الملفات " -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." msgstr "" "تم تعيين دولفين حاليا إخفاء جميع الألعاب. دبل كليك هنا لإظهار جميع الألعاب..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "دولفين غير قادر على إكمال الإجراء المطلوب ." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1742,11 +1738,11 @@ msgstr "%lu وأضاف %lu تم تحميل الاسرار " msgid "Drums" msgstr "الطبول" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "وهمي " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Dump Audio" @@ -1792,9 +1788,9 @@ msgstr "" "\n" "إذا لم تكن متأكدا اترك هذا غير محددة." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "الهولندية" @@ -1815,7 +1811,7 @@ msgid "" "driver." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "أوروبا" @@ -1831,14 +1827,10 @@ msgstr "تحرير" msgid "Edit ActionReplay Code" msgstr "تعديل رمز ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "تعديل الاعدادات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "تعديل الباتش" @@ -1847,8 +1839,8 @@ msgstr "تعديل الباتش" msgid "Edit current perspective" msgstr "تعديل المنظور الحالي" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "تحرير" @@ -1860,7 +1852,7 @@ msgstr "تأثير" msgid "Embedded Frame Buffer" msgstr "عازل الإطار المضمن " -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "المحاكي قيد التشغيل بالفعل" @@ -1893,7 +1885,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "محاكاة ويموت" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "حالة المحاكاه: " @@ -1918,15 +1910,15 @@ msgstr "" "يتطلب ملء الشاشة للعمل.\n" "إذا لم تكن متأكدا اترك هذا غير محددة." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "تمكين منع الدمج" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "تمكين تنظيم حساب الإطار" @@ -1934,27 +1926,27 @@ msgstr "تمكين تنظيم حساب الإطار" msgid "Enable Cache" msgstr "تمكين التخزين المؤقت" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "تمكين الاسرار " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Enable Dual Core" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Enable Dual Core (لزيادة السرعة)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Enable Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Enable Idle Skipping (لزيادة السرعة)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "MMU تمكين" @@ -1962,7 +1954,7 @@ msgstr "MMU تمكين" msgid "Enable Progressive Scan" msgstr "تمكين المسح التقدمي" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "تمكين شاشة التوقف" @@ -1970,7 +1962,7 @@ msgstr "تمكين شاشة التوقف" msgid "Enable Speaker Data" msgstr "تمكين بيانات مكبر صوت" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "تمكين شاشة عريضة" @@ -1992,7 +1984,7 @@ msgstr "" "\n" "إذا لم تكن متأكدا حدد X1." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2028,23 +2020,23 @@ msgstr "" "\n" "إذا لم تكن متأكدا اترك هذا غير محددة." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." msgstr "تمكين هذا لتسريع أسطورة زيلدا : الشفق الاميرة. لتعطيل أي لعبة أخرى." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "يمكن توقعات مخصص هاك" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2061,7 +2053,7 @@ msgstr "" "\n" "إذا لم تكن متأكدا اترك هذه غير محددة." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2081,9 +2073,9 @@ msgstr "" msgid "End" msgstr "نهاية" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "الإنجليزية" @@ -2106,21 +2098,20 @@ msgstr "دخول %d/%d" msgid "Entry 1/%d" msgstr "دخول 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "المساواة" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "خطأ" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "خطأ في تحميل اللغة المختارة. يتراجع إلى النظام الافتراضية." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2166,7 +2157,7 @@ msgstr "تصدير جميع الحفظ الوي" msgid "Export Failed" msgstr "فشل تصدير" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "فشل تصدير" @@ -2182,7 +2173,7 @@ msgstr "تصدير تسجيل" msgid "Export Save" msgstr "تصدير حفظ" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "تصدير حفظ الوي" @@ -2198,7 +2189,7 @@ msgstr "فشل تصدير" msgid "Export save as..." msgstr "تصدير حفظ باسم" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "تمديد" @@ -2214,44 +2205,44 @@ msgstr "معلمة إضافية" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "استخراج كافة الملفات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "استخراج Apploader" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "استخراج دليل" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "استخراج الملفات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "استخراج التقسيم" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "استخراج %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "استخراج كافة الملفات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "استخراج دليل" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "استخراج" @@ -2263,15 +2254,15 @@ msgstr "بايت" msgid "FIFO Player" msgstr "لاعبين" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "فرنسا" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "الحجم :" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "خطأ الاتصال" @@ -2279,11 +2270,15 @@ msgstr "خطأ الاتصال" msgid "Failed to download codes." msgstr "اللعبه لاتوجد في قاعده البيانات." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "فشل في الاستخراج إلى %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2324,7 +2319,7 @@ msgstr "فشل في قراءة banner.bin" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2335,13 +2330,13 @@ msgstr "" "Memcard may be truncated\n" "FilePosition:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2357,13 +2352,13 @@ msgstr "فشل في قراءة البيانات من ملف %d" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2373,7 +2368,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2384,7 +2379,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "فشل في قراءة معرف فريد من صورة القرص" @@ -2406,7 +2401,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "الفارسية" @@ -2418,7 +2413,7 @@ msgstr "سريع" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr " لا يعمل في كل لعبة MMU إصدار سريع من." @@ -2452,7 +2447,7 @@ msgstr "" "قد لا يمكن فتح ملف\n" "أو لا يكون امتداد صالح" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2465,7 +2460,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "لم يتم التعرف على الملف كملف بطاقة ذاكرة" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "ملف غير مضغوط " @@ -2474,11 +2469,11 @@ msgstr "ملف غير مضغوط " msgid "FileIO: Unknown open mode : 0x%02x" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "الملفات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "نوع الملف غير معروف! لن تفتح!" @@ -2506,7 +2501,7 @@ msgstr "العرض 16:9" msgid "Force 4:3" msgstr "العرض 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "فرض وحدة التحكم على النظام الياباني" @@ -2538,7 +2533,7 @@ msgstr "" "\n" "إذا لم تكن متأكدا اترك هذا غير محددة." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2548,7 +2543,7 @@ msgstr "" "ترك دون ,المحاكي يكون افتراضي على النظام الانجليزي ويتيح هذا الاعداد تلقائيا " "عند اللعب اليابانية ." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2558,7 +2553,7 @@ msgstr "" msgid "Forward" msgstr "إلى الأمام" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2601,7 +2596,7 @@ msgstr "مجموعة الإطار " msgid "Frame S&kipping" msgstr "تخطي الإطار " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "حد الإطار:" @@ -2613,9 +2608,9 @@ msgstr "إطارات لتسجيل" msgid "Free Look" msgstr "تحكم بكاميرا اللعبة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "الفرنسية" @@ -2648,27 +2643,27 @@ msgstr "تحكم الجيم كيوب" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "معرف اللعبة:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "لعبة تستخدم بالفعل!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "اللعبة ليست على التوالي!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "لم يتم العثور على اللعبة !" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "إعدادات معينه للعبه" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "إعدادات اللعبة" @@ -2676,7 +2671,7 @@ msgstr "إعدادات اللعبة" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "ملفات حفظ لعبة جيم كيوب(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "جيم كيوب" @@ -2685,7 +2680,7 @@ msgid "Gamecube &Pad Settings" msgstr "إعدادات تحكم جيم كيوب" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "بطاقه ذاكره الجيم كيوب (*.raw,*.gcp) " @@ -2693,12 +2688,12 @@ msgstr "بطاقه ذاكره الجيم كيوب (*.raw,*.gcp) " msgid "Gamecube Pad settings" msgstr "إعدادات تحكم جيم كيوب" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "تحميل اسرار" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2710,7 +2705,7 @@ msgstr "" "(إما غير رمز سيئة أو نوع رمز غير مدعومة حتى الآن.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "عام" @@ -2719,13 +2714,13 @@ msgstr "عام" msgid "General Settings" msgstr "الإعدادات العامة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "الألمانية" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2738,7 +2733,7 @@ msgstr "الرسومات" msgid "Graphics settings" msgstr "إعدادات الرسومات" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "أكبر من" @@ -2758,7 +2753,7 @@ msgstr "" "\n" "إذا لم تكن متأكدا، اترك هذا التحقق." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "اليونانية" @@ -2782,11 +2777,11 @@ msgstr "غيتار" msgid "Hacks" msgstr "هاك" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "عنوان اختباري فشل" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "العبرية" @@ -2798,7 +2793,7 @@ msgstr "ارتفاع" msgid "Help" msgstr "مساعدة" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2810,7 +2805,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2850,7 +2845,7 @@ msgid "Home" msgstr "الصفحة الرئيسية" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "هوست" @@ -2859,11 +2854,11 @@ msgid "Hotkey Configuration" msgstr "إعدادات الاختصارات" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "الاختصارات" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "الهنغارية" @@ -2871,29 +2866,29 @@ msgstr "الهنغارية" msgid "Hybrid Wiimote" msgstr "ويموت هجين" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL إعدادات" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -2905,15 +2900,15 @@ msgstr "IR المؤشر" msgid "IR Sensitivity:" msgstr "IR حساسية:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "تفاصيل ايزو" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "مجلد الايزو" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "إيطاليا" @@ -2921,7 +2916,7 @@ msgstr "إيطاليا" msgid "Icon" msgstr " أيقونة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -2989,7 +2984,7 @@ msgid "" "but does not have a correct header" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "تتعطل في اللعبة" @@ -2998,7 +2993,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "معلومات" @@ -3018,7 +3013,7 @@ msgstr "إدراج" msgid "Insert Encrypted or Decrypted code here..." msgstr "إدراج رمز المشفرة أو فك شفرة هنا" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "SD Card ادرج " @@ -3030,44 +3025,44 @@ msgstr "أدخل اسم هنا" msgid "Install WAD" msgstr "wad تثبيت" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "تثبيت إلى قائمة الوي" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "wad تثبيت" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "تحقق من سلامة الخطأ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "التحقق من سلامة الانتهاء" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "انتهاء التدقيق من سلامة لم يتم العثور على أخطاء" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "الواجهة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "واجهة الإعدادات" @@ -3096,7 +3091,7 @@ msgstr "الدقة الداخلية :" msgid "Interpreter (VERY slow)" msgstr " (بطيئة جدا) Interpreter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "تتعطل في المقدمة" @@ -3105,7 +3100,7 @@ msgstr "تتعطل في المقدمة" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "قيمة غير صالحة!" @@ -3113,16 +3108,16 @@ msgstr "قيمة غير صالحة!" msgid "Invalid bat.map or dir entry" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "غير صالح نوع الحدث %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "ملف غير صالح" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3146,34 +3141,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "غير صالح حالة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "الإيطالية" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "اليابان" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "اليابانية" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "كوريا" @@ -3195,8 +3192,9 @@ msgstr "إبقاء النافذة على أعلى" msgid "Key" msgstr "المفتاح" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "الكورية" @@ -3214,7 +3212,7 @@ msgstr "L Button" msgid "L-Analog" msgstr "L-Analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "اللغة :" @@ -3223,7 +3221,7 @@ msgstr "اللغة :" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "" @@ -3257,11 +3255,11 @@ msgid "" "Middle-click to clear." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "أقل من" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "الحد من عدد الإطارات في الثانية " @@ -3353,11 +3351,11 @@ msgstr "" msgid "Load State..." msgstr "تحميل حالة" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "تحميل قائمة نظام الوي" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "تحميل قائمة نظام الوي %d%c" @@ -3408,12 +3406,12 @@ msgstr "" msgid "Logger Outputs" msgstr "مختلفان النواتج" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "تسجيل" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "إنقطع الإتصال الملقم!" @@ -3428,7 +3426,7 @@ msgid "" " %016llx%016llx != %016llx%016llx" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU سرعة هاك" @@ -3442,11 +3440,11 @@ msgstr "" msgid "Main Stick" msgstr "العصا الأيسر" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "معرف المنتج :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "المنتج :" @@ -3477,7 +3475,7 @@ msgid "Memory Byte" msgstr "ذاكرة بايت" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "بطاقة الذاكرة" @@ -3487,7 +3485,7 @@ msgid "" "could mangle stuff!" msgstr "إدارة بطاقة الذاكرة تنبية قم بعمل نسخة احتياطية قبل الاستخدام" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3504,7 +3502,7 @@ msgstr "" "%s\n" "هل ترغب في نسخ الملف القديم إلى هذا الموقع الجديد?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "حجم بطاقة الذاكرة لا تتطابق مع حجم الملف " @@ -3512,7 +3510,7 @@ msgstr "حجم بطاقة الذاكرة لا تتطابق مع حجم المل msgid "Menu" msgstr "القائمة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "الميكروفون" @@ -3525,7 +3523,7 @@ msgstr "منخفض" msgid "Misc" msgstr "متفرقات" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "إعدادات منوعة" @@ -3550,11 +3548,11 @@ msgstr "" msgid "Monospaced font" msgstr "الخط أحادي المسافة" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "موشن بلس" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "محرك" @@ -3673,15 +3671,15 @@ msgstr "التبويب" msgid "NP Up" msgstr "فوق" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "الاسم :" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "الاسم :" @@ -3691,7 +3689,7 @@ msgstr "الاسم :" msgid "Native GCI files(*.gci)" msgstr "Native GCI files(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "بحث جديد" @@ -3700,7 +3698,7 @@ msgstr "بحث جديد" msgid "Next Page" msgstr "الصفحة التالية" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "البحث التالي" @@ -3708,11 +3706,11 @@ msgstr "البحث التالي" msgid "Nickname :" msgstr "اسمك :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "لا يوجد بلد (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "لم يتم العثور على الايزو " @@ -3751,24 +3749,25 @@ msgstr "لا ملف مسجل" msgid "No save folder found for title %s" msgstr "لا حفظ المجلد نتيجة البحث عن العنوان %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "لا شيء" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "النرويجية" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "لا يساوي" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "غير مجموعة" @@ -3777,11 +3776,11 @@ msgstr "غير مجموعة" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "غير متصل" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "ملاحظات" @@ -3802,7 +3801,7 @@ msgstr "إشعار" msgid "Num Lock" msgstr "ارقام القفل" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "عدد من رموز :" @@ -3823,7 +3822,7 @@ msgstr "الهدف" msgid "Object Range" msgstr "نطاق الهدف" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "إيقاف" @@ -3831,7 +3830,7 @@ msgstr "إيقاف" msgid "Offset:" msgstr "تعويض :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "عرض الرسائل التي تظهر على الشاشة" @@ -3849,11 +3848,11 @@ msgstr "فقط %d كتل متاحة" msgid "Open" msgstr "فتح" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "فتح المجلد المتضمن" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "افتح مجلد حفظ الوي" @@ -3883,17 +3882,13 @@ msgstr "مفك رسوميات OpenCL" msgid "OpenMP Texture Decoder" msgstr "مفك رسوميات OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "خيارات" @@ -3914,7 +3909,7 @@ msgstr "" msgid "Other" msgstr "أخرى" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3930,11 +3925,11 @@ msgstr "الإخراج" msgid "P&lay Recording..." msgstr "تشغيل التسجيل" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "تحكم" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "تحكم" @@ -3958,26 +3953,26 @@ msgstr "الفقرة" msgid "Parameters" msgstr "معلمات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "قسم %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "باتش" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "مسارات" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "وقفة" @@ -3990,7 +3985,7 @@ msgstr "توقف في نهاية الفيلم" msgid "Per-Pixel Lighting" msgstr "لكل بكسل إضاءة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "مثالية" @@ -4001,8 +3996,8 @@ msgstr "مشهد %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "بدأ اللعبه" @@ -4014,7 +4009,7 @@ msgstr "تشغيل التسجيل" msgid "Play/Pause" msgstr "بدأ/ايقاف" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "قابلة للتشغيل" @@ -4022,11 +4017,11 @@ msgstr "قابلة للتشغيل" msgid "Playback Options" msgstr "خيارات التشغيل" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "لاعبين" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "يرجى تأكيد" @@ -4038,36 +4033,36 @@ msgstr "الرجاء إنشاء منظور قبل الحفظ" msgid "Plus-Minus" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "البولندية" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "تحكم 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "تحكم 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "تحكم 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "تحكم 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "المنفذ :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "البرتغالية" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "البرتغالية البرازيلية" @@ -4080,7 +4075,7 @@ msgstr "بعد معالجة تأثير:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -4102,7 +4097,7 @@ msgstr "الصفحة السابقة" msgid "Previous Page" msgstr "الصفحة السابقة" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "القيمة السابقة" @@ -4126,8 +4121,8 @@ msgstr "إزالة التخزين المؤقت" msgid "Question" msgstr "السؤال" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "خروج" @@ -4149,7 +4144,7 @@ msgstr "R-Analog" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "روسيا" @@ -4188,7 +4183,7 @@ msgstr "ويموت حقيقي " msgid "Record" msgstr "تسجيل" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "مدخلات السجل" @@ -4240,10 +4235,10 @@ msgstr "تحديث قائمة" msgid "Refresh game list" msgstr "تحديث القائمة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "إزالة" @@ -4266,7 +4261,7 @@ msgstr "تقدم إلى الشاشة الرئيسية" msgid "Reset" msgstr "إعادة ضبط" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "النتائج" @@ -4274,7 +4269,7 @@ msgstr "النتائج" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "الاصدار:" @@ -4287,17 +4282,17 @@ msgstr "اليمين" msgid "Right Stick" msgstr "العصا الايمن" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "هزاز" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "الروسية" @@ -4371,12 +4366,12 @@ msgstr "" msgid "Save State..." msgstr "حفظ حالة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "حفظ باسم" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "حفظ مضغوط GCM/ISO" @@ -4384,7 +4379,7 @@ msgstr "حفظ مضغوط GCM/ISO" msgid "Save current perspective" msgstr "حفظ المنظور الحالي" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "حفظ الضغط GCM/ISO" @@ -4397,16 +4392,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "EFB Copia a escala" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "فحص %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "بحث ايزو" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "فحص" @@ -4422,11 +4417,11 @@ msgstr "انتقل تأمين" msgid "Search" msgstr "بحث" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "بحث فلتر" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "البحث في المجلدات الفرعية" @@ -4449,12 +4444,12 @@ msgstr "" msgid "Select" msgstr "حدد" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "اختر ملف تسجيل" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "لتثبيت wad حدد ملف" @@ -4476,19 +4471,19 @@ msgstr "اختر حفظ ملف للاستيراد" msgid "Select floating windows" msgstr "اختر النوافذ العائمة" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "حدد الملف لتحميل" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "حدد حفظ الملف" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "حدد حالة التحميل" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "حدد حالة الحفظ" @@ -4510,7 +4505,7 @@ msgstr "" "\n" "إذاغير متأكد حدد التلقائي." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "اختيار الملف التحكم الشخصي غير موجود " @@ -4534,27 +4529,28 @@ msgstr "" "إذا لم تكن متأكدا، استخدم دقة سطح المكتب.\n" "إذا لم تكن متأكدا من ذلك ، استخدم أعلى دقة." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "إرسال" @@ -4566,16 +4562,16 @@ msgstr "موضع الاستشعار:" msgid "Separator" msgstr "الفاصل" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "الصربية" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "المنفذ التسلسلي 1 -- وهذا هو المنفذ الذي الأجهزة مثل استخدام محول شبكة" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "تعيين كافتراضي ايزو" @@ -4584,30 +4580,30 @@ msgstr "تعيين كافتراضي ايزو" msgid "Set as default Memcard %c" msgstr "تعيين كافتراضي بطاقة الذاكرة %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "إعدادات" -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "هزة" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "الاسم المختصر :" @@ -4631,7 +4627,7 @@ msgstr "عرض شريط الحالة" msgid "Show &Toolbar" msgstr "أظهر شريط الأدوات" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "المظهر الافتراضي" @@ -4671,7 +4667,7 @@ msgstr "اليابان" msgid "Show Korea" msgstr "كوريا" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "أظهر اللغة :" @@ -4711,11 +4707,11 @@ msgstr "Wad اظهار" msgid "Show Wii" msgstr "الوي" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "ظهور رسالة قبل وقف اللعبة." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4733,7 +4729,7 @@ msgstr "إظهار اول كتلة" msgid "Show lag counter" msgstr "إظهار عداد التأخر" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4781,23 +4777,24 @@ msgstr "" "\n" "إذا لم تكن متأكدا ترك هذا غير محددة." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "ويموت جانبي" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "الصينية المبسطة" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "الحجم" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "تخطي البيوس" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4827,11 +4824,11 @@ msgstr "" msgid "Slot %i" msgstr "فتحة %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "A خانة " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "B خانة " @@ -4839,7 +4836,7 @@ msgstr "B خانة " msgid "Snapshot" msgstr "لقطة" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Software Renderer" @@ -4854,27 +4851,27 @@ msgstr "" "انها مفيدة فقط لأغراض التصحيح.\n" "هل حقا تريد تمكين تقديم البرامج؟ إذا لم تكن متأكدا، اختر 'لا'.." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "إعدادات الصوت" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "غير صالحة %s خلفية الصوت." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "فشل إنشاء المخزن المؤقت الصوت : %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "مجال" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "الأسبانية" @@ -4902,7 +4899,7 @@ msgstr "" "\n" "إذا لم تكن متأكدا حدد 528*640 ." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "تسريع معدل نقل القرص" @@ -4910,13 +4907,13 @@ msgstr "تسريع معدل نقل القرص" msgid "Square Stick" msgstr "مربع العصا" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "وحدة تحكم القياسية" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -4932,7 +4929,7 @@ msgstr "بدء التسجيل" msgid "Start Recording" msgstr "بدء التسجيل" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "الحالة" @@ -4940,7 +4937,7 @@ msgstr "الحالة" msgid "State Saves" msgstr "حفظ الحالة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "عجلة القيادة" @@ -4989,30 +4986,31 @@ msgstr "بنجاح تصدير الملف إلى %s" msgid "Successfully imported save files" msgstr "استيرادها بنجاح حفظ الملفات" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "هز" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "نظام اللغة :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "تايوان" @@ -5043,7 +5041,7 @@ msgstr "الجدول الأيمن" msgid "Take Screenshot" msgstr "اخذ لقطه من الشاشه" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5063,11 +5061,11 @@ msgstr "Texture Cache" msgid "Texture Format Overlay" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr " بنجاح wad وقد تم تركيب" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "عنوان غير صالح" @@ -5075,13 +5073,13 @@ msgstr "عنوان غير صالح" msgid "The checksum was successfully fixed" msgstr "تم إصلاح بنجاح الاختباري" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "الدليل المختار هو بالفعل في قائمة" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5103,7 +5101,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "الملف %s بالفعل مفتوح، لن الملف غير عنوان مكتوب." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "لا وجود له (%s) الملف الذي حددته" @@ -5136,26 +5134,26 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "حفظ تحاول نسخة له حجم ملف غير صالح" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" "لا يتم اعتماد اللغة المحددة من قبل النظام. يتراجع إلى النظام الافتراضية." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "الملقم والعميل إصدارات لعب نت تتعارض" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "الملقم ممتلئ" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "أجاب الخادم : اللعبة قيد التشغيل حاليا" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "بعث الملقم رسالة خطأ غير معروف" @@ -5164,33 +5162,33 @@ msgstr "بعث الملقم رسالة خطأ غير معروف" msgid "The specified file \"%s\" does not exist" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "قيمة غير صالحة" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "ثيم:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." msgstr "تجاوز هذه الإعدادات إعدادات دولفين الأساسية ." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "هذه المحاكاة إعادة العمل لا تدعم تعديل الرموز التي اعادتها العمل نفسه." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "هذا يمكن أن يسبب بطء في القائمة لوى وبعض الألعاب." @@ -5206,7 +5204,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5214,7 +5212,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5222,7 +5220,7 @@ msgid "" "cause occasional crashes/glitches." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "هذا تسمح لك التعديل اليدوي رسائل كتبها هذا المؤلف ملف التكوين" @@ -5231,12 +5229,12 @@ msgstr "هذا تسمح لك التعديل اليدوي رسائل كتبها msgid "Threshold" msgstr "بداية" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "إمالة" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "العنوان" @@ -5271,15 +5269,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "أعلى" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "الصينية التقليدية" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "حاول تحميل نوع ملف غير معروف." @@ -5297,7 +5296,7 @@ msgid "" "Wiimote bt ids are not available" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "التركية" @@ -5313,12 +5312,12 @@ msgstr "نوع" msgid "UDP Port:" msgstr "UDP منفذ :" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "غير معروف" @@ -5327,7 +5326,7 @@ msgstr "غير معروف" msgid "UNKNOWN_%02X" msgstr "غير معروف_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "امريكا" @@ -5340,9 +5339,9 @@ msgstr "" "الدخول غير معدل." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5367,11 +5366,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "غير معروف" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "" @@ -5386,12 +5385,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "تلقى رسالة مجهولة مع معرف : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5401,16 +5400,16 @@ msgstr "" msgid "Up" msgstr "أعلى" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "التحديث" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "ويموت مستقيم" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "(PAL60) استخدم وضع " @@ -5418,11 +5417,11 @@ msgstr "(PAL60) استخدم وضع " msgid "Use Fullscreen" msgstr "استخدام شاشة كاملة" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "استخدام الهيكس" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "" @@ -5478,11 +5477,11 @@ msgstr "فائدة" msgid "V-Sync" msgstr "تحديد أقصى معدل الاطار" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "القيمة" @@ -5490,7 +5489,7 @@ msgstr "القيمة" msgid "Value:" msgstr "القيمة:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "القيمة:" @@ -5502,7 +5501,7 @@ msgstr "" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "فديو" @@ -5510,7 +5509,7 @@ msgstr "فديو" msgid "Virtual" msgstr "الظاهري" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "الصوت" @@ -5542,15 +5541,15 @@ msgstr "" msgid "Warning" msgstr "التنبيه" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "تحذير -- ايزو ابتداء من الخطأ وضع وحدة التحكم!" @@ -5630,19 +5629,19 @@ msgstr "شاشة واسعة هاك" msgid "Width" msgstr "عرض" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "الوي" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "جهاز الوي" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND Root:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "ملفات حفظ الوي (*.bin)|*.bin" @@ -5655,12 +5654,18 @@ msgstr "WiiWAD: لا يمكن القراءة من الملف" msgid "Wiimote" msgstr "تحكم الوي" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "تحكم الوي" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "ويموت %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "ويموت متصل" @@ -5692,14 +5697,14 @@ msgstr "نوافذ اليمين" msgid "Word Wrap" msgstr "كلمة ختامية" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "العمل" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5719,21 +5724,36 @@ msgstr "الكتابة على الملف" msgid "Write to Window" msgstr "الكتابة إلى نافذة" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "فشل إنشاء المخزن المؤقت الصوت : %s" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -5759,15 +5779,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "لا يمكنك إغلاق أجزاء الصفحات التي فيها." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "عليك اختيار لعبة!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "يجب إدخال اسم!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "يجب إدخال صالح العشري، أو الست عشرية قيمة ثماني." @@ -5775,7 +5795,7 @@ msgstr "يجب إدخال صالح العشري، أو الست عشرية قي msgid "You must enter a valid profile name." msgstr "يجب إدخال اسم الملف صالح." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "يجب إعادة تشغيل دولفين من أجل التغيير نافذ المفعول." @@ -5786,7 +5806,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5803,15 +5823,15 @@ msgstr "" "يجب أن يكون 0x%04x (but is 0x%04llx)\n" "هل تريد إنشاء واحدة جديدة?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP هاك" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "" @@ -5869,29 +5889,24 @@ msgstr "" "\n" "إذا لم تكن متأكدا اترك هذا غير محددة." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: قراءة شفرة تشغيل من %x. الرجاء التقرير." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute returned -1 on application run!" @@ -5906,3 +5921,12 @@ msgstr "zNear تصحيح: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "أو" + +#~ msgid "Could not create %s" +#~ msgstr "لا يمكن إنشاء %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: قراءة شفرة تشغيل من %x. الرجاء التقرير." diff --git a/Languages/po/ca.po b/Languages/po/ca.po index 2357545831..da030e908d 100644 --- a/Languages/po/ca.po +++ b/Languages/po/ca.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/dolphin-emu/" @@ -22,13 +22,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(massa per ensenyar)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Joc:" @@ -36,7 +36,7 @@ msgstr "Joc:" msgid "! NOT" msgstr "! NO" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -60,12 +60,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sCopia%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "mostres %d" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "mostres %d (nivell de qualitat %d)" @@ -76,12 +76,12 @@ msgstr "mostres %d (nivell de qualitat %d)" msgid "%s already exists, overwrite?" msgstr "%s ja existeix, vols sobreescriure?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s no s'ha pogut esborrar. Probablement, la imatge està danyada." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -90,7 +90,7 @@ msgstr "" "%s ha fallat la càrrega com a targeta de memòria\n" "La mida del fitxer no és vàlida (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -99,7 +99,7 @@ msgstr "" "%s ha fallat la càrrega com a targeta de memòria\n" "La mida de la targeta no és vàlida (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -114,7 +114,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s no s'ha pogut obrir" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -124,7 +124,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s és un arxiu de 0 bytes" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s ja està comprimit! No es pot comprimir encara més." @@ -184,11 +184,11 @@ msgstr "Gestor de &Trucs" msgid "&DSP Settings" msgstr "Configuració de &DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Eliminar ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Eliminar ISOs seleccionades..." @@ -252,7 +252,7 @@ msgstr "&Pausa" msgid "&Play" msgstr "&Executar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Propietats" @@ -296,7 +296,7 @@ msgstr "&Visualitzar" msgid "&Wiimote Settings" msgstr "Configuració &Wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -332,7 +332,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Natiu (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bits" @@ -348,7 +348,7 @@ msgstr "2.5x Natiu (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Natiu (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bits" @@ -364,7 +364,7 @@ msgstr "3x Natiu (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Natiu (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bits" @@ -376,7 +376,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -384,7 +384,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -392,13 +392,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Una finestra de NetPlay ja està oberta!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "No s'està executant cap joc actualment." @@ -419,21 +419,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "Placa base AM" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Codis AR" @@ -482,7 +483,7 @@ msgstr "" "Codi culpable: \n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -490,7 +491,7 @@ msgstr "" "Error d'Action Replay: Mida no vàlida (%08x: Adreça = %08x) a codi afegit " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -498,7 +499,7 @@ msgid "" msgstr "" "Error d'Action Replay: Mida no vàlida (%08x: Adreça = %08X) a emplenar (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -507,7 +508,7 @@ msgstr "" "Error d Action Replay: Mida no vàlida (%08x: Adreça = %08x) a escriure i " "farciment de RAM (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -516,13 +517,13 @@ msgstr "" "Error d'Action Replay: Mida no vàlida (%08x: Adreça = %08x) a l'escriure al " "punter (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" "Error d'Action Replay: Valor no vàlid (%08x) en la copia de memòria (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -532,27 +533,27 @@ msgstr "" "(% s)\n" "Els Codis Mestres no fan falta. No els utilitzis." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Error d'Action Replay: línia de codi AR no vàlida: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Codi condicional: Mida no vàlida %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Tipus de codi Normal no vàlid %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Codi Normal %i: %08x subtipus invàlid (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Codi Normal 0: Subtipus no vàlid %08x (%s)" @@ -566,11 +567,11 @@ msgstr "Adaptador:" msgid "Add" msgstr "Afegeix" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Afegeix codi ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Afegeix Pedaç" @@ -578,9 +579,9 @@ msgstr "Afegeix Pedaç" msgid "Add new pane" msgstr "Afegeix una nova finestra" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Afegir..." @@ -632,36 +633,36 @@ msgstr "Ajustar la pressió de control analògic per activar els botons." msgid "Advanced" msgstr "Avançada" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Configuració avançada" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Tots els arxius GC/Wii (elf, dol, gcm, iso, ciso, GCZ, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Totes les imatges GC/Wii (gcm, iso, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Tots els fitxers GameCube GCM (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Tots els Estats Guardats (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Tots els fitxers ISO Wii (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Tots els fitxers ISO comprimits de GC/Wii (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Tots els fitxers (*.*)|*.*" @@ -681,19 +682,19 @@ msgstr "Filtrat anisotròpic:" msgid "Anti-Aliasing:" msgstr "Anti-Aliasing:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Apploader té una mida dolenta... realment és un apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader no s'ha pogut carregar des de l'arxiu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Aplicar" @@ -707,7 +708,7 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat (off)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Àrab" @@ -716,7 +717,7 @@ msgstr "Àrab" msgid "Are you sure you want to delete \"%s\"?" msgstr "Estàs segur que vols suprimir \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -724,7 +725,7 @@ msgstr "" "Estàs segur que vols eliminar aquests arxius? \n" "No es podran recuperar mai més!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "Estàs segur d'eliminar aquest fitxer? Aquesta acció serà definitiva!" @@ -732,7 +733,12 @@ msgstr "Estàs segur d'eliminar aquest fitxer? Aquesta acció serà definitiva!" msgid "Arm JIT (experimental)" msgstr "Arm JIT (experimental)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (experimental)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Relació d'aspecte:" @@ -741,12 +747,12 @@ msgstr "Relació d'aspecte:" msgid "At least one pane must remain open." msgstr "Almenys un panell ha de romandre obert." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Àudio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Suport d'àudio:" @@ -754,7 +760,7 @@ msgstr "Suport d'àudio:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Error en obrir el dispositiu AO \n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -793,16 +799,16 @@ msgstr "Registre BP" msgid "Back" msgstr "Enrere" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Configuració del motor" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Suport:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Suport d'entrada" @@ -820,15 +826,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Imatge" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Detalls del Imatge" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Imatge:" @@ -840,7 +846,7 @@ msgstr "Barra" msgid "Basic" msgstr "Bàsic" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Configuració bàsica" @@ -848,7 +854,7 @@ msgstr "Configuració bàsica" msgid "Bass" msgstr "Baix" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "La comprovació de la «checksum» de la taula de blocs ha fallat" @@ -869,7 +875,7 @@ msgid "Blue Right" msgstr "Blau dret" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Fons" @@ -878,7 +884,7 @@ msgstr "Fons" msgid "Bound Controls: %lu" msgstr "Controls enllaçats: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Trencat" @@ -886,7 +892,7 @@ msgstr "Trencat" msgid "Browse" msgstr "Examinar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Examineu un directori per afegir" @@ -894,11 +900,11 @@ msgstr "Examineu un directori per afegir" msgid "Browse for an ISO directory..." msgstr "Examina un directori ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Examina el directori de sortida" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -908,7 +914,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Botons" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -932,7 +938,7 @@ msgstr "Palanca-C" msgid "CP reg" msgstr "Registre CP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Motor d'emulació de CPU" @@ -955,17 +961,17 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "No es pot trobar un WiiMote pel gestor de connexió %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "No es pot llegir del DVD_Plugin - DVD-Interface: Error Fatal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Cancel·lar" @@ -977,11 +983,11 @@ msgstr "Cancel·lar" msgid "Cannot open %s" msgstr "No es pot obrir% s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "No es pot des-registrar esdeveniments amb esdeveniments pendents" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -992,7 +998,7 @@ msgstr "" "%s\n" "No és un arxiu de targeta de memòria gamecube vàlid." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1004,7 +1010,7 @@ msgstr "" msgid "Caps Lock" msgstr "Bloc Maj." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Català" @@ -1012,7 +1018,7 @@ msgstr "Català" msgid "Center" msgstr "Centre" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Canviar" @@ -1024,11 +1030,11 @@ msgstr "Canviar &Disc..." msgid "Change Disc" msgstr "Canviar Disc" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Canvi de joc" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1044,11 +1050,11 @@ msgstr "Canvia el signe del paràmetre zLluny (després de correcció)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Canvia el signe del paràmetre zAprop (després de correcció)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Canviar això no tindrà cap efecte mentre l'emulador s'executa!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1056,47 +1062,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Codi de trucs" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Cerca trucs" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Administrador de trucs" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Comprovar la integritat de la partició" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Comprovant integritat..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Xinès (simplificat)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Xinès (tradicional)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Tria un directori arrel del DVD:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Tria el directori arrel del NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Triar una ISO per defecte:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Trieu un directori per afegir" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Trieu un arxiu per obrir" @@ -1104,7 +1110,7 @@ msgstr "Trieu un arxiu per obrir" msgid "Choose a memory card:" msgstr "Triar una targeta de memòria:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1112,8 +1118,8 @@ msgstr "" "Trieu l'arxiu a utilitzar com «apploader»: (s'aplica als discos construïts a " "partir de només els directoris)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Selecciona la carpeta on extreure" @@ -1132,7 +1138,7 @@ msgstr "Clàssic" msgid "Clear" msgstr "Esborrar" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1142,7 +1148,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Tancar" @@ -1151,11 +1157,11 @@ msgstr "Tancar" msgid "Co&nfigure..." msgstr "&Configurar..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Codi d'Informació" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Codi:" @@ -1167,20 +1173,20 @@ msgstr "Comanda" msgid "Comment" msgstr "Comentari" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Comentari:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Comprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Comprimir ISOs seleccionades..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Comprimeix ISO" @@ -1198,8 +1204,8 @@ msgstr "Configuració" msgid "Configure Control" msgstr "Configurar Control" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Configurar Control" @@ -1207,13 +1213,13 @@ msgstr "Configurar Control" msgid "Configure..." msgstr "Configuració..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Confirmar contraescriptura del fitxer" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Confirmar a l'aturar" @@ -1227,7 +1233,7 @@ msgstr "Connectar" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Connectar el teclat USB" @@ -1252,7 +1258,7 @@ msgstr "Connectar Wiimote 3" msgid "Connect Wiimote 4" msgstr "Connectar Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Connectant..." @@ -1272,7 +1278,7 @@ msgstr "Control" msgid "Convert to GCI" msgstr "Convertir a GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Copia fallada" @@ -1281,16 +1287,11 @@ msgstr "Copia fallada" msgid "Copy to Memcard %c" msgstr "Copiar a la targeta de memòria %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Nucli" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "No s'ha pogut crear %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "No s'ha pogut inicialitzar el suport %s." @@ -1306,12 +1307,12 @@ msgstr "" "Wii. Els discs originals de Gamecube i Wii no es poden llegir per la majoria " "de lectors DVD." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "No es pot reconèixer el fitxer ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "No s'ha pogut desar %s" @@ -1329,11 +1330,11 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "No s'ha trobat la comanda d'obertura per l'extensió 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1341,17 +1342,17 @@ msgstr "" "No s'ha pogut inicialitzar el nucli. \n" "Verifiqueu la configuració." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Compta:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "País:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Crear Codi AR" @@ -1386,12 +1387,12 @@ msgstr "" msgid "Crossfade" msgstr "Atenuar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "El directori axtual ha canviat de %s a %s després de wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Projecció personalitzada" @@ -1399,11 +1400,11 @@ msgstr "Projecció personalitzada" msgid "Custom Projection Hack Settings" msgstr "Configuració de la projecció personalitzada" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Configuració d'alguns paràmetres de projecció Ortogràfica." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Txec" @@ -1419,20 +1420,20 @@ msgstr "Direcció digital" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Motor d'emulació DSP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "Emulació DSP HLE (ràpid)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "Intèrpret DSP LLE (lent)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "Recompilador DSP LLE " @@ -1440,11 +1441,11 @@ msgstr "Recompilador DSP LLE " msgid "DSP settings" msgstr "Configuració DSP " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Arrel del DVD:" @@ -1456,15 +1457,15 @@ msgstr "DVDLowRead - Error fatal: error al llegir el volumen" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Error fatal: error al llegir el volumen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Mida de dades" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Data:" @@ -1493,16 +1494,16 @@ msgstr "Depuració" msgid "Decimal" msgstr "Decimals" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Descomprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Descomprimir ISO seleccionades..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Descomprimint ISO" @@ -1514,7 +1515,7 @@ msgstr "" msgid "Default" msgstr "Per defecte" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "ISO per defecte:" @@ -1557,8 +1558,8 @@ msgstr "" msgid "Device" msgstr "Dispositiu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Configuració del dispositiu" @@ -1566,15 +1567,12 @@ msgstr "Configuració del dispositiu" msgid "Dial" msgstr "Dial" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1637,7 +1635,7 @@ msgstr "" "Alfa, que s'utilitza en molts jocs per a diversos efectes gràfics. Si no " "n'estàs segur, deixa-ho sense marcar." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disc" @@ -1664,19 +1662,19 @@ msgstr "" msgid "Divide" msgstr "Divideix" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Voleu aturar l'emulació actual?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Decodificador Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1707,9 +1705,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1733,12 +1730,12 @@ msgstr "Configuració de Wiimote emulat" msgid "Dolphin FIFO" msgstr "FIFO Dolphin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Configuració del control GC Dolphin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin Pel·lícules TAS (*.dtm)" @@ -1750,7 +1747,7 @@ msgstr "Configuració Wiimote Dolphin" msgid "Dolphin at &Google Code" msgstr "Dolphin a &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1758,7 +1755,7 @@ msgstr "" "Dolphin no ha pogut trobar cap ISO GC/Wii. Fes doble clic aquí per buscar-" "les..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1766,12 +1763,12 @@ msgstr "" "Dolphin està actualment configurat per ocultar tots els jocs. Fea doble clic " "aquí per mostrar-los tots..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin no ha pogut completar l'acció sol·licitada." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1797,11 +1794,11 @@ msgstr "Descarregat %lu codis. (Afegits %lu)" msgid "Drums" msgstr "Tambors" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Maniquí" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Bolcat d'àudio" @@ -1848,9 +1845,9 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Holandès" @@ -1875,7 +1872,7 @@ msgstr "" "Dolphin, probablement serà necessari reiniciar el Windows per veure el nou " "controlador." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1891,14 +1888,10 @@ msgstr "Edita" msgid "Edit ActionReplay Code" msgstr "Modificar codi ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Modificar configuració" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Modificar el pedaç" @@ -1907,8 +1900,8 @@ msgstr "Modificar el pedaç" msgid "Edit current perspective" msgstr "Modificar perspectiva actual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Modificació..." @@ -1920,7 +1913,7 @@ msgstr "Efecte" msgid "Embedded Frame Buffer" msgstr "Activar la memòria cau d'imatge («Frame Buffer»)" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "El fil de l'emulador ja s'està executant" @@ -1958,7 +1951,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Wiimote emulat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Estat d'emulació:" @@ -1983,15 +1976,15 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Habilitar el registre de logs d'AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Habilitar fusió de Bloc" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Permetre el càlcul del quadre delimitador" @@ -1999,27 +1992,27 @@ msgstr "Permetre el càlcul del quadre delimitador" msgid "Enable Cache" msgstr "Habilitar memòria cau" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Activar Trucs" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Habilitar Doble nucli" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Habilitar Doble nucli (acceleració)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Habilitar salt d'inactiu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Habilitar salt d'inactiu (acceleració)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Habilitar MMU" @@ -2027,7 +2020,7 @@ msgstr "Habilitar MMU" msgid "Enable Progressive Scan" msgstr "Habilitar exploració &Progressiva" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Habilitar el protector de pantalla" @@ -2035,7 +2028,7 @@ msgstr "Habilitar el protector de pantalla" msgid "Enable Speaker Data" msgstr "Activar altaveu de dades" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Habilitar pantalla panoràmica" @@ -2058,7 +2051,7 @@ msgstr "" "\n" "Si no n'estàs segur, selecciona 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2094,7 +2087,7 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desactivat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2102,11 +2095,11 @@ msgstr "" "Activa aquesta opció per accelerar The Legend of Zelda: Twilight Princess. " "Deshabilitar per a qualsevol altre joc." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Activa la modificació personalitzada de projecció" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2114,7 +2107,7 @@ msgstr "" "Activa la emulació de Dolby Pro Logic II fent servir 5.1 surround. No " "disponible a OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "Activa la emulació de Dolby Pro Logic II. Només pel motor OpenAL." @@ -2131,7 +2124,7 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desactivat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2153,9 +2146,9 @@ msgstr "" msgid "End" msgstr "Fi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Anglès" @@ -2178,23 +2171,22 @@ msgstr "Entrada %d/%d" msgid "Entry 1/%d" msgstr "Entrada 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Igual" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Error" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Error en carregar l'idioma seleccionat. Es retorna a l'idioma per defecte " "del sistema." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2243,7 +2235,7 @@ msgstr "" msgid "Export Failed" msgstr "Fallada d'exportació" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exportar fitxer" @@ -2259,7 +2251,7 @@ msgstr "Exportar gravació..." msgid "Export Save" msgstr "Exportar partida desada" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exportar partida desada Wii (Experimental)" @@ -2275,7 +2267,7 @@ msgstr "" msgid "Export save as..." msgstr "Desar exportació com a..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Extensió" @@ -2291,44 +2283,44 @@ msgstr "Paràmetre addicional" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Paràmetre addicional útil només a ''Metroid: Other M''." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Extreure tots els arxius..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Extreure Apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Extreure DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Extreure directori..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Extreure arxiu..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Extreure partició..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Extraient %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Extreure tots els arxius" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Extraient Directori" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Extraient..." @@ -2340,15 +2332,15 @@ msgstr "Byte FIFO" msgid "FIFO Player" msgstr "Jugador FIFO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANÇA" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Mida FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Error al connectar!" @@ -2356,11 +2348,15 @@ msgstr "Error al connectar!" msgid "Failed to download codes." msgstr "Error al descarregar codis." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Error a l' extreure a %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2409,7 +2405,7 @@ msgstr "No s'ha pogut llegir Imatge.bin" msgid "Failed to read bk header" msgstr "Error al llegir la capçalera bk" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2420,7 +2416,7 @@ msgstr "" "La targeta de memòria pot estar trencada\n" "Posició de l'arxiu:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2428,7 +2424,7 @@ msgstr "" "No s'ha pogut llegir la còpia de taula d'assignació de blocs correctament\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2446,7 +2442,7 @@ msgstr "No s'han pogut llegir les dades des del fitxer %d" msgid "Failed to read data from file: %s" msgstr "Error al llegir les dades del fitxer: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2454,7 +2450,7 @@ msgstr "" "No s'ha pogut llegir la carpeta de còpia correctament\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2466,7 +2462,7 @@ msgstr "" msgid "Failed to read header" msgstr "Error al llegir la capçalera" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2479,7 +2475,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "No s'ha pogut llegir Identificador únic de la imatge de disc" @@ -2501,7 +2497,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "No s'ha pogut escriure la capçalera per %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Persa" @@ -2513,7 +2509,7 @@ msgstr "Ràpid" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Versió ràpida de la MMU. No funciona per a tots els jocs." @@ -2549,7 +2545,7 @@ msgstr "" "L'arxiu no s'ha pogut obrir \n" "o no té una extensió vàlida" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2562,7 +2558,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "L'arxiu no es pot reconèixer com una targeta de memòria" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Arxiu no comprimit" @@ -2571,11 +2567,11 @@ msgstr "Arxiu no comprimit" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Mode d'obertura desconegut: 0x% 02x " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Sistema d'arxius" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Tipus de fitxer 'ini' és desconegut! No s'obrirà!" @@ -2603,7 +2599,7 @@ msgstr "Forçar 16:9" msgid "Force 4:3" msgstr "Forçar 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Força la consola com NTSC-J" @@ -2636,7 +2632,7 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2646,7 +2642,7 @@ msgstr "" "Sent desactivat, dolphin posa per defecte NTSC-U i automàticament ho activa " "quant es juga amb jocs Japonesos." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2658,7 +2654,7 @@ msgstr "" msgid "Forward" msgstr "Endavant" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2701,7 +2697,7 @@ msgstr "Rang d'imatges" msgid "Frame S&kipping" msgstr "Salta imatge&s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Limit d'imatges/s:" @@ -2713,9 +2709,9 @@ msgstr "Imatges a Enregistrar" msgid "Free Look" msgstr "Visió lliure" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francès" @@ -2748,27 +2744,27 @@ msgstr "Control GC" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID del Joc:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "El joc encara està en marxa!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "El joc no està funcionant!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Joc no trobat!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Configuració de jocs específics" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Configuració de joc" @@ -2776,7 +2772,7 @@ msgstr "Configuració de joc" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "Fitxers de guardat de GameCube (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2785,7 +2781,7 @@ msgid "Gamecube &Pad Settings" msgstr "Configuració control «&Gamecube»" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Targetes de memòria per GameCube (*.raw, *.gcp)" @@ -2793,12 +2789,12 @@ msgstr "Targetes de memòria per GameCube (*.raw, *.gcp)" msgid "Gamecube Pad settings" msgstr "Configuració control Gamecube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Codis Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2812,7 +2808,7 @@ msgstr "" "codehandler.bin al directori Sys i reiniciant Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "General" @@ -2821,13 +2817,13 @@ msgstr "General" msgid "General Settings" msgstr "Configuració General" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Alemany" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2842,7 +2838,7 @@ msgstr "Gràfics" msgid "Graphics settings" msgstr "Configuració de gràfics" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Més gran que" @@ -2864,7 +2860,7 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Grec" @@ -2888,11 +2884,11 @@ msgstr "Guitarra" msgid "Hacks" msgstr "Modificacions" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Comprovació de la checksum de capçalera ha fallat" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebreu" @@ -2904,7 +2900,7 @@ msgstr "Alçada" msgid "Help" msgstr "Ajuda" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2925,7 +2921,7 @@ msgstr "" "\n" "Adéu!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2965,7 +2961,7 @@ msgid "Home" msgstr "Inici" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Amfitrió" @@ -2974,11 +2970,11 @@ msgid "Hotkey Configuration" msgstr "Tecla d'accés de configuració" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Tecles d'accés" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Hongarès" @@ -2986,18 +2982,18 @@ msgstr "Hongarès" msgid "Hybrid Wiimote" msgstr "Wiimote Híbrid" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Ha Tractat d'obtenir dades d'un bitllet desconegut:%08x/" "%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3006,15 +3002,15 @@ msgstr "" "TitleID %016llx.\n" "Probablement Dolphin es penjarà ara." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - destinació dolenta" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Configuració de IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3026,15 +3022,15 @@ msgstr "Punter IR" msgid "IR Sensitivity:" msgstr "Sensibilitat d'IR:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Detalls d'ISO:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Directoris ISO:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITÀLIA" @@ -3042,7 +3038,7 @@ msgstr "ITÀLIA" msgid "Icon" msgstr "Icona" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3114,7 +3110,7 @@ msgstr "" "L'Arxiu importat té extensio sav \n" "però la capçalera és incorrecte" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "En Joc" @@ -3123,7 +3119,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3143,7 +3139,7 @@ msgstr "Insereix" msgid "Insert Encrypted or Decrypted code here..." msgstr "Inserta el codi xifrat o desxifrat aquí..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Inserir la targeta SD" @@ -3155,35 +3151,35 @@ msgstr "Introduïu un nom aquí .." msgid "Install WAD" msgstr "Instal·lar WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Instal·lar al Menú de Wii" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler cridat, però aquesta plataforma no està suportada " "encara." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Instal·lant WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Error de comprovació d'integritat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Comprovació d'integritat finalitzat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Comprovació d'integritat finalitzat. No s'han trobat errors." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3192,11 +3188,11 @@ msgstr "" "Comprovació d'integritat per la partició %d ha fallat. El teu bolcat " "probablement s'ha corromput o s'ha apedaçat incorrectament." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Interfície" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Configuració d'interfície" @@ -3225,7 +3221,7 @@ msgstr "Resolució Interna:" msgid "Interpreter (VERY slow)" msgstr "Intèrpret (MOLT lent)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Introducció" @@ -3234,7 +3230,7 @@ msgstr "Introducció" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Mida no vàlida (%x) o paraula màgica (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Valor invàlid!" @@ -3242,16 +3238,16 @@ msgstr "Valor invàlid!" msgid "Invalid bat.map or dir entry" msgstr "Invàlid bat.map o entrada al directori" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Tipus d'esdeveniment invàlid %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Arxiu invàlid" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3278,34 +3274,36 @@ msgstr "Cerca de cadena invàlida (no s'ha pogut convertir a número)" msgid "Invalid search string (only even string lengths supported)" msgstr "Cerca de cadena invàlida (només es soporten algunes longituds)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Estat invàlid" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italià" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPÓ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "Recompilador JIT (recomanat)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "Recompilador experimental JITIL" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japonès" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "COREA" @@ -3327,8 +3325,9 @@ msgstr "Mantenir la finestra sempre visible" msgid "Key" msgstr "Clau" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Corea" @@ -3346,7 +3345,7 @@ msgstr "Botó L" msgid "L-Analog" msgstr "L-Analògic" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Idioma:" @@ -3355,7 +3354,7 @@ msgstr "Idioma:" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Latència:" @@ -3394,11 +3393,11 @@ msgstr "" "Clic Esquerra/Dreta per més opcions. \n" "Clic Mig per deshabilitar." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Menys de" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Limitar per FPS " @@ -3490,11 +3489,11 @@ msgstr "" msgid "Load State..." msgstr "Carregar Estat..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Carregar el menú del sistema Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Carregar menú del sistema Wii %d%c" @@ -3545,12 +3544,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Sortides del registrador Log" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Inici de sessió" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Perdut la connexió amb el servidor!" @@ -3567,7 +3566,7 @@ msgstr "" "desajust MD5 \n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Modificació de velocitat MMU" @@ -3581,11 +3580,11 @@ msgstr "Arxius MadCatz Gameshark (*.gcs)" msgid "Main Stick" msgstr "Palanca principal" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID Fabricant:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Fabricant:" @@ -3616,7 +3615,7 @@ msgid "Memory Byte" msgstr "Byte de memòria" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Targeta de memòria" @@ -3628,7 +3627,7 @@ msgstr "" "Targeta de memòria Administrador ADVERTÈNCIA-Fes còpies de seguretat abans " "d'utilitzar, hauria d'estar arreglat, però pots perdre dades!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3645,7 +3644,7 @@ msgstr "" "%s \n" "Voleu copiar el fitxer antic a aquesta nova ubicació? \n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" "La mida de la targeta de memòria no correspon a la mida de la capçalera" @@ -3654,7 +3653,7 @@ msgstr "" msgid "Menu" msgstr "Menú" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Micròfon" @@ -3667,7 +3666,7 @@ msgstr "Mínim" msgid "Misc" msgstr "Varis" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Varies Configuracions" @@ -3692,11 +3691,11 @@ msgstr "" msgid "Monospaced font" msgstr "Fonts d'espiat simple" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus®" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3817,15 +3816,15 @@ msgstr "NP Tabulador" msgid "NP Up" msgstr "NP Amunt" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Nom:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Nom:" @@ -3835,7 +3834,7 @@ msgstr "Nom:" msgid "Native GCI files(*.gci)" msgstr "Arxius natius GCI (*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nou escaneig" @@ -3844,7 +3843,7 @@ msgstr "Nou escaneig" msgid "Next Page" msgstr "Pàgina següent" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Següent escaneig" @@ -3852,11 +3851,11 @@ msgstr "Següent escaneig" msgid "Nickname :" msgstr "Sobrenom:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "No país (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "No s'han trobat ISOs o WADs" @@ -3895,24 +3894,25 @@ msgstr "Arxiu no enregistrat" msgid "No save folder found for title %s" msgstr "No s'ha trobat la carpeta de partides desades per el joc %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Cap" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Noruega Bokmaal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "No igual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Sense establir" @@ -3923,11 +3923,11 @@ msgstr "" "No és una partida guardada Wii o hi ha hagut un error de lectura de la mida " "de la capçalera del fitxer %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "No està connectat" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notes" @@ -3948,7 +3948,7 @@ msgstr "Avís" msgid "Num Lock" msgstr "Bloq Numèric" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Nombre de codis:" @@ -3969,7 +3969,7 @@ msgstr "Objecte" msgid "Object Range" msgstr "Rang d'objecte" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Apagar" @@ -3977,7 +3977,7 @@ msgstr "Apagar" msgid "Offset:" msgstr "Desplaçament:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Missatges en pantalla" @@ -3995,11 +3995,11 @@ msgstr "Només queden %d blocs disponibles" msgid "Open" msgstr "Obrir" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Obrir directori &contingut" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Obrir la carpeta de partide&s desades" @@ -4029,17 +4029,13 @@ msgstr "Descodificador de textura OpenCL" msgid "OpenMP Texture Decoder" msgstr "Activar descodificador de textura OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opcions" @@ -4063,7 +4059,7 @@ msgstr "" msgid "Other" msgstr "Altres" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4079,11 +4075,11 @@ msgstr "Sortida" msgid "P&lay Recording..." msgstr "&Reproduir gravació..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Control" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Control" @@ -4107,26 +4103,26 @@ msgstr "Paràgraf" msgid "Parameters" msgstr "Paràmetres" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partició %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Pedaços" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Camins" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pausa" @@ -4139,7 +4135,7 @@ msgstr "Pausar al acabar la pel·lícula" msgid "Per-Pixel Lighting" msgstr "Il·luminació per píxel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfecte" @@ -4150,8 +4146,8 @@ msgstr "Perspectiva %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Executar" @@ -4163,7 +4159,7 @@ msgstr "Reproduir enregistrament" msgid "Play/Pause" msgstr "Reproduir/Pausa" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Jugable" @@ -4171,11 +4167,11 @@ msgstr "Jugable" msgid "Playback Options" msgstr "Opcions de reproducció" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Jugadors" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Confirma..." @@ -4187,36 +4183,36 @@ msgstr "Creeu una perspectiva abans de desar" msgid "Plus-Minus" msgstr "Més-Menys" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polonès" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portuguès" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portuguès (Brasil)" @@ -4229,7 +4225,7 @@ msgstr "Efectes de post-procés:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Final prematur de la pel·lícula a PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Final prematur de la pel·lícula a PlayWiimote. %u + %d > %u" @@ -4251,7 +4247,7 @@ msgstr "Pàgina anterior" msgid "Previous Page" msgstr "Pàgina anterior" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Valor anterior" @@ -4275,8 +4271,8 @@ msgstr "Netejar memòria cau" msgid "Question" msgstr "Pregunta" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Sortir" @@ -4298,7 +4294,7 @@ msgstr "R-Analògic" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RÚSSIA" @@ -4337,7 +4333,7 @@ msgstr "Wiimotes reals" msgid "Record" msgstr "Enregistrar" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4390,10 +4386,10 @@ msgstr "Actualitzar llista" msgid "Refresh game list" msgstr "Actualitza la llista de jocs" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Treure" @@ -4416,7 +4412,7 @@ msgstr "Renderitzar a la finestra principal" msgid "Reset" msgstr "Reiniciar" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Resultats" @@ -4424,7 +4420,7 @@ msgstr "Resultats" msgid "Return" msgstr "Tornar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revisió:" @@ -4437,17 +4433,17 @@ msgstr "Dreta" msgid "Right Stick" msgstr "Palanca dreta" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Vibració" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Rus" @@ -4521,12 +4517,12 @@ msgstr "" msgid "Save State..." msgstr "Desar Estat..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Desar com..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Desar GCM/ISO comprimit" @@ -4534,7 +4530,7 @@ msgstr "Desar GCM/ISO comprimit" msgid "Save current perspective" msgstr "Desar perspectiva actual" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Desar GCM/ISO descomprimit" @@ -4548,16 +4544,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "Copia EFB escalada" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Escanejant %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Cercant ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Cercant..." @@ -4573,11 +4569,11 @@ msgstr "Bloc desplaçament" msgid "Search" msgstr "Buscar" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Filtre de cerca" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Cercar en subcarpetes" @@ -4600,12 +4596,12 @@ msgstr "La secció %s no trobada a SYSCONF" msgid "Select" msgstr "Seleccionar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Selecciona el fitxer de gravació" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Selecciona un fitxer WAD de Wii per instal·lar" @@ -4626,19 +4622,19 @@ msgstr "Selecciona un arxiu per guardar la importació" msgid "Select floating windows" msgstr "Selecciona finestres flotants" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Selecciona el fitxer a carregar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Selecciona el fitxer de partida guardada" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Selecciona l'estat a carregar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Selecciona l'estat a guardar" @@ -4660,7 +4656,7 @@ msgstr "" "\n" "Si no n'estàs segur, selecciona Automàtic." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "El perfil del controlador seleccionat no existeix" @@ -4684,27 +4680,28 @@ msgstr "" "Si no n'estàs segur, utilitza la resolució de l'escriptori.\n" "Si encara no n'estàs segurs, utilitza la resolució més alta que et funcioni." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Enviar" @@ -4716,18 +4713,18 @@ msgstr "Barra de sensors de posició" msgid "Separator" msgstr "Separador" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbi" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Port Sèrie 1 - Aquest és el port que utilitzen els dispositius com " "l'adaptador de xarxa" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Definir la imatge ISO per &defecte" @@ -4736,14 +4733,14 @@ msgstr "Definir la imatge ISO per &defecte" msgid "Set as default Memcard %c" msgstr "Definir com a targeta de memòria predeterminada %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: L'índex és major que la grandària de la llista de codis " "AR %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4751,19 +4748,19 @@ msgstr "" "Ajusta la latència (en ms). Valors més alts poden reduir el soroll. Només " "pel motor Open AL." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Configuració..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Sacsejar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Nom curt:" @@ -4787,7 +4784,7 @@ msgstr "Mostrar Barra d'e&stat" msgid "Show &Toolbar" msgstr "Mostrar Barra d'&eines" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4827,7 +4824,7 @@ msgstr "Mostrar Japó" msgid "Show Korea" msgstr "Mostrar Corea" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Mostrar Idioma:" @@ -4867,11 +4864,11 @@ msgstr "Mostrar Wad" msgid "Show Wii" msgstr "Mostrar Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Mostrar un missatge de confirmació abans d'aturar el joc." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4889,7 +4886,7 @@ msgstr "Mostra primer bloc" msgid "Show lag counter" msgstr "Mostrar contador de lag" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4941,23 +4938,24 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Wiimote horitzontal" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Xinès simplificat" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Mida" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Saltar BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Saltar la neteja DCBZ" @@ -4988,11 +4986,11 @@ msgstr "" msgid "Slot %i" msgstr "Ranura %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Ranura A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Ranura B" @@ -5000,7 +4998,7 @@ msgstr "Ranura B" msgid "Snapshot" msgstr "Captura" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Renderitzat per programari" @@ -5016,27 +5014,27 @@ msgstr "" "Realment vols activar el renderitzat per software? Si no n'estàs segur, " "selecciona 'No'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Configuració de so" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Suport de so %s invàlid." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Ha fallat la creació del buffer de so: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Espai" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Espanyol" @@ -5064,7 +5062,7 @@ msgstr "" "\n" "Si no n'estàs segur, selecciona 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Accelerar la tassa de transferència de Disc" @@ -5072,13 +5070,13 @@ msgstr "Accelerar la tassa de transferència de Disc" msgid "Square Stick" msgstr "Palanca quadrada" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Control estàndard" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Començar" @@ -5094,7 +5092,7 @@ msgstr "Iniciar grava&ció" msgid "Start Recording" msgstr "Iniciar gravació" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Estat" @@ -5102,7 +5100,7 @@ msgstr "Estat" msgid "State Saves" msgstr "Estats desats" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Volant" @@ -5151,30 +5149,31 @@ msgstr "Arxiu exportat amb èxit a %s" msgid "Successfully imported save files" msgstr "Arxius de partides desades importats correctament" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Oscil·lació" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Sincronitzar subprocés de GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Idioma del sistema:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5205,7 +5204,7 @@ msgstr "Taula dreta" msgid "Take Screenshot" msgstr "Capturar pantalla" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5225,11 +5224,11 @@ msgstr "Memòria cau de textura" msgid "Texture Format Overlay" msgstr "Superposició del format de textura" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "El WAD s'ha instal·lat amb èxit" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "L'adreça és invàlida" @@ -5237,13 +5236,13 @@ msgstr "L'adreça és invàlida" msgid "The checksum was successfully fixed" msgstr "La suma de comprovació s'ha fixat amb èxit" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "El directori triat ja és a la llista" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5266,7 +5265,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "El fitxer %s ja estava oberta, la capçalera de l'arxiu no s'escriurà." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "L'arxiu especificat (%s) no existeix" @@ -5300,7 +5299,7 @@ msgid "The save you are trying to copy has an invalid file size" msgstr "" "El fitxer de partida guardada que està intentant copiar té la mida invàlida" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5308,19 +5307,19 @@ msgstr "" "L'idioma seleccionat no és compatible amb el seu sistema. Es tornarà a " "l'idioma per defecte del sistema." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "El servidor i les versions de client NetPlay són incompatibles!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "El servidor està ple!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "El servidor ha espòs: el joc està en marxa!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "El servidor ha enviat un missatge d'error desconegut!" @@ -5329,15 +5328,15 @@ msgstr "El servidor ha enviat un missatge d'error desconegut!" msgid "The specified file \"%s\" does not exist" msgstr "L'arxiu especificat \"%s\" no existeix" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "El valor és invàlid." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema visual:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5345,7 +5344,7 @@ msgstr "" "Hi ha d'haver una entrada per 00000001/00000002. El seu bolcat de la NAND " "probablement és incompleta." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5353,7 +5352,7 @@ msgstr "" "Aquesta configuració sobreescriu la configuració de Dolphin.\n" "Indeterminat vol dir que el joc utilitza el valor de Dolphin." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5361,7 +5360,7 @@ msgstr "" "Aquest simulador d'ActionReplay no és compatible amb els codis que " "modifiquen ActionReplay." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Pot causar alentiment al Menú Wii i alguns jocs." @@ -5385,7 +5384,7 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desactivat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5397,7 +5396,7 @@ msgstr "" "la regulació d'àudio amb el DSP (pot arreglar els clics d'àudio, però pot " "causar soroll constant depenent del joc)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5409,7 +5408,7 @@ msgstr "" "Causa millores importants de velocitat en ordinadors amb més d'un nucli, " "però també poden causar interferències/fallades." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Li permetrà editar manualment el fitxer de configuració INI" @@ -5418,12 +5417,12 @@ msgstr "Li permetrà editar manualment el fitxer de configuració INI" msgid "Threshold" msgstr "Llindar" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Inclinació" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Títol" @@ -5458,15 +5457,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Dalt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Xinès tradicional" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "S'ha intentat de carregar un tipus de fitxer desconegut." @@ -5486,7 +5486,7 @@ msgstr "" "Intentant de llegir des d'un SYSCONF invàlid \n" "identificadors de Wiimote bt no estan disponibles" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turc" @@ -5502,12 +5502,12 @@ msgstr "Tipus" msgid "UDP Port:" msgstr "Port UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "Wiimote UDP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "DESCONEGUT" @@ -5516,7 +5516,7 @@ msgstr "DESCONEGUT" msgid "UNKNOWN_%02X" msgstr "DESCONEGUT_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "EUA" @@ -5529,9 +5529,9 @@ msgstr "" "No s'ha modificat l'entrada." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5556,11 +5556,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "Trucada inesperada a 0x80? Cancel·lant..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Desconegut" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Comanda de DVD desconeguda %08x - error crític" @@ -5575,12 +5575,12 @@ msgstr "Comanda desconeguda 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Tipus desconegut d'entrada %i a SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Missatge desconegut rebut amb id: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5591,16 +5591,16 @@ msgstr "" msgid "Up" msgstr "Amunt" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Actualitzar" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Wiimote vertical" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Utilitzar mode EuRGB60 (PAL60)" @@ -5608,11 +5608,11 @@ msgstr "Utilitzar mode EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Utilitzar pantalla completa" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Utilitzar hexadecimal" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Utilitzar advertències" @@ -5669,11 +5669,11 @@ msgstr "Utilitat" msgid "V-Sync" msgstr "Sincronització Vertical" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Hack de velocitat VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Valor" @@ -5681,7 +5681,7 @@ msgstr "Valor" msgid "Value:" msgstr "Valor:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Valor:" @@ -5693,7 +5693,7 @@ msgstr "Verbositat" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Vídeo" @@ -5701,7 +5701,7 @@ msgstr "Vídeo" msgid "Virtual" msgstr "Virtual" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volum" @@ -5733,15 +5733,15 @@ msgstr "" msgid "Warning" msgstr "Advertència" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Advertència - Inicialitzant DOL en mode de consola incorrecte!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Advertència - Inicialitzant ELF en mode de consola incorrecte!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Advertència - Inicialitzant ISO en mode de consola incorrecte!" @@ -5845,19 +5845,19 @@ msgstr "Modificació de pantalla panoràmica" msgid "Width" msgstr "Ample" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Consola Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Arrel de la NAND:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Arxius de partida guardada Wii (*.bin)|*.bin" @@ -5870,12 +5870,18 @@ msgstr "WiiWAD: No s'ha pogut llegir des de l'arxiu" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote connectat" @@ -5907,14 +5913,14 @@ msgstr "Finestra dreta" msgid "Word Wrap" msgstr "Envoltant de paraula" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Treballant..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Escriu memcards (GC)" @@ -5934,21 +5940,36 @@ msgstr "Escriu en un Fitxer" msgid "Write to Window" msgstr "Escriu a una Finestra" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice ha fallat:%#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 init ha fallat:%#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "La creació de la veu principal XAudio2 ha fallat:%#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice ha fallat:%#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 init ha fallat:%#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "La creació de la veu principal XAudio2 ha fallat:%#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "Registre XF" @@ -5974,15 +5995,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "No pots tancar panells que tenen pàgines." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Heu de triar un joc!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Heu d'introduir un nom!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Heu d'entrar un decimal, hexadecimal o octal vàlid." @@ -5990,7 +6011,7 @@ msgstr "Heu d'entrar un decimal, hexadecimal o octal vàlid." msgid "You must enter a valid profile name." msgstr "Heu d'introduir un nom de perfil vàlid." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Ha de reiniciar Dolphin perquè el canvi tingui efecte." @@ -6001,7 +6022,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6020,15 +6041,15 @@ msgstr "" "Hauria de ser 0x%04x (però és 0x%04llx) \n" "Vol generar un de nou?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "Modificador ZTP" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Codi Zero 3 no està suportat" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Codi Zero desconegut per Dolphin: %08x" @@ -6088,29 +6109,24 @@ msgstr "" "\n" "Si no n'estàs segur, deixa-ho desmarcat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Llegint Opcode des de%x Si us plau, informeu." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute Ha retornat -1 en l'execució de l'aplicació!" @@ -6125,3 +6141,12 @@ msgstr "Correcció ZAprop" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| O" + +#~ msgid "Could not create %s" +#~ msgstr "No s'ha pogut crear %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Llegint Opcode des de%x Si us plau, informeu." diff --git a/Languages/po/cs.po b/Languages/po/cs.po index b157ca5db4..fbdb85dfee 100644 --- a/Languages/po/cs.po +++ b/Languages/po/cs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-17 21:42+0000\n" "Last-Translator: Zbyněk Schwarz \n" "Language-Team: Czech (http://www.transifex.com/projects/p/dolphin-emu/" @@ -19,13 +19,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(příliš mnoho pro zobrazení)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " Hra : " @@ -33,7 +33,7 @@ msgstr " Hra : " msgid "! NOT" msgstr "! NE" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -57,12 +57,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sKopírovat%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d vzorků" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d vzorků (úroveň kvality %d)" @@ -73,12 +73,12 @@ msgstr "%d vzorků (úroveň kvality %d)" msgid "%s already exists, overwrite?" msgstr "%s už existuje, přepsat?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s nelze vyčistit. Obraz je pravděpodobně poškozen." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -87,7 +87,7 @@ msgstr "" "%s nelze načíst jako paměťovou kartu\n" "Soubor karty je neplatný (0x%x bajtů)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -96,7 +96,7 @@ msgstr "" "%s nelze načíst jako paměťovou kartu\n" "Velikost karty je neplatná (0x%x bajtů)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -111,7 +111,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s nelze otevřít" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s selhalo: kr=%x" @@ -121,7 +121,7 @@ msgstr "%s selhalo: kr=%x" msgid "%s is a 0 byte file" msgstr "%s má velikost 0 bajtů" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s je už komprimován! Nelze dále komprimovat." @@ -179,11 +179,11 @@ msgstr "Správce &Cheatů" msgid "&DSP Settings" msgstr "&DSP Nastavení" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Smazat ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Smazat vybraná ISO..." @@ -247,7 +247,7 @@ msgstr "&Pauza" msgid "&Play" msgstr "&Přehrát" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Vlastnosti" @@ -291,7 +291,7 @@ msgstr "&Zobrazit" msgid "&Wiimote Settings" msgstr "&Wiimote Nastavení" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -327,7 +327,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Původní (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -343,7 +343,7 @@ msgstr "2.5x Původní (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Původní (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -359,7 +359,7 @@ msgstr "3x Původní (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Původní (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -371,7 +371,7 @@ msgstr "" msgid "" msgstr "<Žádné rozlišení nenalezeno>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -387,13 +387,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Okno NetPlay je už otevřené!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Hra v současnosti neběží!" @@ -406,6 +406,7 @@ msgstr "" "Vaše wiimoty musíte připojit ručně." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -414,10 +415,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -435,13 +437,13 @@ msgstr "" "\n" "Hostitel musí mít zvolený port TCP přesměrován/otevřen!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM Základní Deska" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Kódy AR" @@ -489,7 +491,7 @@ msgstr "" "Viníkem je Kód:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -497,7 +499,7 @@ msgstr "" "Chyba Action Replay: Neplatná velikost (%08x : adresa = %08x) v Kódu Přidat " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -506,7 +508,7 @@ msgstr "" "Chyba Action Replay: Neplatná velikost (%08x : adresa = %08x) v Naplnit a " "Sesunout (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -515,7 +517,7 @@ msgstr "" "Chyba Action Replay: Neplatná velikost (%08x : adresa = %08x) v Ram Zápisu A " "Naplnění (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -524,12 +526,12 @@ msgstr "" "Chyba Action Replay: Neplatná velikost (%08x : adresa = %08x) v Zápisu Do " "Ukazatele (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Chyba Action Replay: Neplatná hodnota (%08x) v Kopii Paměti (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -538,27 +540,27 @@ msgstr "" "Chyba Action Replay: Hlavní Kód a Zápis do CCXXXXXX nejsou zavedeny (%s)\n" "Hlavní kódy nejsou potřeba, nepoužívejte je." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Chyba Action Replay: neplatný řádek kódu AR: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Podmínkový kód: Neplatná Velikost %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Neplatný Normální Kód Typu %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normální Kód %i: Neplatný podtyp %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normální Kód 0: Neplatný Podtyp %08x (%s)" @@ -572,11 +574,11 @@ msgstr "Adaptér:" msgid "Add" msgstr "Přidat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Přidat kód ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Přidat Záplatu" @@ -584,9 +586,9 @@ msgstr "Přidat Záplatu" msgid "Add new pane" msgstr "Přidat nový panel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Přidat..." @@ -638,36 +640,36 @@ msgstr "Upravte tlak analogového ovládání potřebný k aktivaci tlačítek." msgid "Advanced" msgstr "Pokročilé" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Pokročilá Nastavení" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Všechny soubory GC/Wii (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Všechny obrazy GC/Wii (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Všechny soubory Gamecube GCM )gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Všechny Uložené Stavy (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Všechny soubory Wii ISO (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Všechny komprimované soubory GC/WII ISO (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Všechny soubory (*.*)|*.*" @@ -687,19 +689,19 @@ msgstr "Anizotropní Filtrování:" msgid "Anti-Aliasing:" msgstr "Vyhlazení okrajů" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Zavaděč aplikace má špatnou velikost... je to vážně zavaděč?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Zavaděč aplikace nemohl načíst soubor" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Zavaděč aplikace:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Použít" @@ -713,7 +715,7 @@ msgstr "" "\n" " Pokud si nejste jisti, zvolte (vypnuto)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabština" @@ -722,7 +724,7 @@ msgstr "Arabština" msgid "Are you sure you want to delete \"%s\"?" msgstr "Jste si jisti, že chcete smazat \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -730,7 +732,7 @@ msgstr "" "Jste si jisti, že chcete tyto soubory smazat?\n" "Budou navždy ztraceny!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "Opravdu chcete smazat tento soubor? Bude navždy ztracen!" @@ -738,7 +740,12 @@ msgstr "Opravdu chcete smazat tento soubor? Bude navždy ztracen!" msgid "Arm JIT (experimental)" msgstr "Arm JIT (experimentální)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (experimentální)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Poměr Stran:" @@ -747,12 +754,12 @@ msgstr "Poměr Stran:" msgid "At least one pane must remain open." msgstr "Alespoň jeden panel musí být otevřen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Zvuk" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Podpůrná vrstva zvuku:" @@ -760,7 +767,7 @@ msgstr "Podpůrná vrstva zvuku:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Chyba při otevírání zařízení zvukového výstupu.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -799,16 +806,16 @@ msgstr "Registr BP" msgid "Back" msgstr "Zpět" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Nastavení podpůrné vrstvy" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Podpůrná vrstva:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Zadní Vstup" @@ -826,15 +833,15 @@ msgid "Balance Board" msgstr "Rola-Bola" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Plakát" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Detaily Plakátu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Plakát:" @@ -846,7 +853,7 @@ msgstr "Vibráto" msgid "Basic" msgstr "Základní" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Základní nastavení" @@ -854,7 +861,7 @@ msgstr "Základní nastavení" msgid "Bass" msgstr "Basy" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Kontrolní součet Alokační Tabulky Bloku selhal" @@ -875,7 +882,7 @@ msgid "Blue Right" msgstr "Modrá vpravo" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Dole" @@ -884,7 +891,7 @@ msgstr "Dole" msgid "Bound Controls: %lu" msgstr "Spojené ovladače: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Rozbité" @@ -892,7 +899,7 @@ msgstr "Rozbité" msgid "Browse" msgstr "Procházet" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Procházet pro přidání adresáře" @@ -900,11 +907,11 @@ msgstr "Procházet pro přidání adresáře" msgid "Browse for an ISO directory..." msgstr "Procházet pro adresář ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Procházet pro výstupní adresář" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Vyrovnávací paměť:" @@ -914,7 +921,7 @@ msgstr "Vyrovnávací paměť:" msgid "Buttons" msgstr "Tlačítka" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -938,7 +945,7 @@ msgstr "Kruhová páčka" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Jádro Emulátoru Procesoru" @@ -961,17 +968,17 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Nelze najít Wiimote pomocí obslužné rutiny spojení %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Nelze číst ze zásuvného modulu DVD - DVD-Rozhraní: Závažná chyba" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Zrušit" @@ -983,11 +990,11 @@ msgstr "Zrušit" msgid "Cannot open %s" msgstr "Nelze otevřít %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Nelze odhlásit události, když jsou očekávány" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -998,7 +1005,7 @@ msgstr "" "%s\n" "není platný soubor paměťové karty gamecube" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1010,7 +1017,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Katalánština" @@ -1018,7 +1025,7 @@ msgstr "Katalánština" msgid "Center" msgstr "Střed" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Změnit" @@ -1030,11 +1037,11 @@ msgstr "Vyměnit &Disk..." msgid "Change Disc" msgstr "Vyměnit Disk" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Změnit hru" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1050,11 +1057,11 @@ msgstr "Změní znaménko na Parametr zFar (po korekci)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Změní znaménko na Parametr zNear (po korekci)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Změna tohoto se neprojeví, pokud emulátor běží!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1062,47 +1069,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Cheat Kód" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Hledání Cheatů" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Správce Cheatů" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Zkontrolovat celistvost oddílu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Kontrolování celistvosti..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Čínština (Zjednodušená)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Čínština (Tradiční)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Zvolte kořenový adresář DVD:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Zvolte kořenový adresář NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Zvolte výchozí ISO:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Zvolte adresář k přidání" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Zvolte soubor k otevření" @@ -1110,7 +1117,7 @@ msgstr "Zvolte soubor k otevření" msgid "Choose a memory card:" msgstr "Zvolte paměťovou kartu:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1118,8 +1125,8 @@ msgstr "" "Zvolte soubor, který má být použit jako zavaděč aplikace: (platí pouze pro " "disky sestavené z adresářů)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Zvolte adresář pro umístění extrakce" @@ -1138,7 +1145,7 @@ msgstr "Klasické" msgid "Clear" msgstr "Vyčistit" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1147,7 +1154,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Zavřít" @@ -1156,11 +1163,11 @@ msgstr "Zavřít" msgid "Co&nfigure..." msgstr "&Nastavit..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Informace o kódu" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Kód:" @@ -1172,20 +1179,20 @@ msgstr "Příkaz" msgid "Comment" msgstr "Komentář" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Komentář:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Komprimovat ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Komprimovat vybraná ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Komprimuji ISO" @@ -1203,8 +1210,8 @@ msgstr "Nastavit" msgid "Configure Control" msgstr "Nastavit Ovládání" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Nastavit Pady" @@ -1212,13 +1219,13 @@ msgstr "Nastavit Pady" msgid "Configure..." msgstr "Nastavit..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Potvrdit Přepsání Souboru" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Při zastavení Potvrdit" @@ -1232,7 +1239,7 @@ msgstr "Připojit" msgid "Connect Balance Board" msgstr "Připojit Rola-Bola" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Připojit USB Klávesnici" @@ -1257,7 +1264,7 @@ msgstr "Připojit Wiimote 3" msgid "Connect Wiimote 4" msgstr "Připojit Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Připojuji..." @@ -1277,7 +1284,7 @@ msgstr "Ctrl" msgid "Convert to GCI" msgstr "Převést na GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopírování selhalo" @@ -1286,16 +1293,11 @@ msgstr "Kopírování selhalo" msgid "Copy to Memcard %c" msgstr "Kopírovat na Paměťovou kartu %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Jádro" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Nelze vytvořit %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Nelze spustit podpůrnou vrstvu %s." @@ -1311,12 +1313,12 @@ msgstr "" "Wii. Nezapomeňte, že původní disky GameCube a Wii nepřečte většina PC DVD " "mechanik." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Nelze rozpoznat ISO soubor %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Nelze uložit %s" @@ -1341,11 +1343,11 @@ msgstr "" "Objevila se tato chyba po přesunu adresáře s emulátorem?\n" "Pokud ano, pak je třeba znovu zadat umístění vaší paměťové karty v nastavení." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Nelze najít příkaz pro otevření přípony 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1353,17 +1355,17 @@ msgstr "" "Nelze spustit jádro.\n" "Zkontrolujte Vaše nastavení." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Počet:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Země:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Vytvořit AR kód" @@ -1398,12 +1400,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Současný adresář se změnil z %s na %s po wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Vlastní Hack Projekce" @@ -1411,11 +1413,11 @@ msgstr "Vlastní Hack Projekce" msgid "Custom Projection Hack Settings" msgstr "Nastavení Vlastního Hacku Projekce" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Přizpůsobte některé Ortografické parametry Projekce" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Čeština" @@ -1431,20 +1433,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Jádro Emulátoru DSP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE emulace (rychlé)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE převaděč (pomalé)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE rekompilátor" @@ -1452,11 +1454,11 @@ msgstr "DSP LLE rekompilátor" msgid "DSP settings" msgstr "Nastavení DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE na samostatném vlákně" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Kořen DVD:" @@ -1468,15 +1470,15 @@ msgstr "DVDLowRead - Fatální chyba: nelze číst ze svazku" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Fatální chyba: nelze přečíst svazek" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Taneční podložka" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Velikost data" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Datum:" @@ -1505,16 +1507,16 @@ msgstr "Ladění" msgid "Decimal" msgstr "Desetinné" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Dekomprimovat ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Dekomprimovat vybraná ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Dekomprimuji ISO" @@ -1526,7 +1528,7 @@ msgstr "Snížit limit snímků" msgid "Default" msgstr "Výchozí" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Výchozí ISO:" @@ -1570,8 +1572,8 @@ msgstr "" msgid "Device" msgstr "Zařízení" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Nastavení Zařízení" @@ -1579,15 +1581,12 @@ msgstr "Nastavení Zařízení" msgid "Dial" msgstr "Kruhová stupnice" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1651,7 +1650,7 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disk" @@ -1678,20 +1677,20 @@ msgstr "" msgid "Divide" msgstr "Rozdělit" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Chcete současnou emulaci zastavit?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dekodér Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1721,9 +1720,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Všechna práva vyhrazena (c) 2003-2013+ Dolphin Team\n" @@ -1778,12 +1776,12 @@ msgstr "Nastavení Emulovaného Dolphin Wiimote" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GCPad Nastavení" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Doplhin Filmy TAS (*.dtm)" @@ -1795,7 +1793,7 @@ msgstr "Dolphin Wiimote Nastavení" msgid "Dolphin at &Google Code" msgstr "Dolphin na &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1803,7 +1801,7 @@ msgstr "" "Dolphin nemohl nalézt žádná GX/Wii ISO. Klikněte zde dvakrát k prohledání " "souborů..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1811,12 +1809,12 @@ msgstr "" "Dolphin je v současnosti nastaven na skrytí všech her. Klikněte zde dvakrát " "pro zobrazení všech her..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolhpin nemohl dokončit požadovanou činnost." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1842,11 +1840,11 @@ msgstr "Stáhnuto %lu kódů. (přídáno %lu)" msgid "Drums" msgstr "Bubny" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Atrapa" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Vypsat Zvuk" @@ -1892,9 +1890,9 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Nizozemština" @@ -1918,7 +1916,7 @@ msgstr "" "Pokud jste nedávno vaši instalaci Dolphin aktualizovali, je v tomto bodě " "pravděpodobně třeba restartovat, aby Windows uviděl nový ovladač." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EVROPA" @@ -1934,14 +1932,10 @@ msgstr "Upravit" msgid "Edit ActionReplay Code" msgstr "Upravit kód ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Upravit nastavení" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Upravit místní změny nastavení" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Upravit záplatu" @@ -1950,8 +1944,8 @@ msgstr "Upravit záplatu" msgid "Edit current perspective" msgstr "Upravit současnou perspektivu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Upravit" @@ -1963,7 +1957,7 @@ msgstr "Efekt" msgid "Embedded Frame Buffer" msgstr "Vnořená Vyr. Pamět Snímků" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Vlákno Emulace již běží" @@ -2001,7 +1995,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Emulovaný Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Stav Emulace:" @@ -2025,15 +2019,15 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Povolit protokolování AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Zapnout Slučování Bloků" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Povolit výpočet ohraničujícího rámečku" @@ -2041,27 +2035,27 @@ msgstr "Povolit výpočet ohraničujícího rámečku" msgid "Enable Cache" msgstr "Povolit vyrovnávací paměť" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Povolit Cheaty" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Povolit dvojité jádro" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Zapnout dvojité jádro (zrychlení)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Povolit Přeskakování Nečinných Příkazů" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Povolit Přeskakování Nečinných Příkazů (zrychlení)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Zapnout MMU" @@ -2069,7 +2063,7 @@ msgstr "Zapnout MMU" msgid "Enable Progressive Scan" msgstr "Povolit Progresivní Skenování" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Povolit Spořič Obrazovky" @@ -2077,7 +2071,7 @@ msgstr "Povolit Spořič Obrazovky" msgid "Enable Speaker Data" msgstr "Povolit data reproduktorů" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Povolit Širokoúhlou obrazovku" @@ -2099,7 +2093,7 @@ msgstr "" "\n" "Pokud si nejste jisti, zvolte 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2136,7 +2130,7 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2144,11 +2138,11 @@ msgstr "" "Povolte toto pro zrychlení The Legend of Zelda: Twilight Princess. Zakažte " "pro VŠECHNY ostatní hry." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Povolit Vlastní Hack Projekce" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2156,7 +2150,7 @@ msgstr "" "Povolí emulaci Dolby Pro Logic II používající prostorový zvuk 5.1. Není " "dostupné v OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2175,7 +2169,7 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2197,9 +2191,9 @@ msgstr "" msgid "End" msgstr "End" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Angličtina" @@ -2222,22 +2216,21 @@ msgstr "Záznam %d/%d" msgid "Entry 1/%d" msgstr "Záznam 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Rovná se" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Chyba" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Chyba při nahrávání zvoleného jazyka. Vracím se na výchozí jazyk systému." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2285,7 +2278,7 @@ msgstr "Exportovat všechny uložené hry Wii" msgid "Export Failed" msgstr "Export Selhal" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exportovat Soubor" @@ -2301,7 +2294,7 @@ msgstr "Exportovat Nahrávku..." msgid "Export Save" msgstr "Exportovat Uloženou hru" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exportovat uloženou hru Wii (Experimentální)" @@ -2317,7 +2310,7 @@ msgstr "Export selhal" msgid "Export save as..." msgstr "Exportovat Uloženou hru jako..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Rozšíření" @@ -2333,44 +2326,44 @@ msgstr "Extra Parametr" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Extra Parametr užitečný pouze v ''Metroid: Other M''" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Extrahovat Všechny Soubory..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Extrahovat Zavaděč Aplikace..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Extrahovat DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Extrahovat Adresář..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Extrahovat Soubor..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Extrahovat Oddíl..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Extrahuji %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Extrahuji Všechny Soubory" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Extrahuji Adresář" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Extrahuji..." @@ -2382,15 +2375,15 @@ msgstr "FIFO Bajt" msgid "FIFO Player" msgstr "Přehrávač FIFO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANCIE" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Velikost FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Připojení Selhalo!" @@ -2398,11 +2391,15 @@ msgstr "Připojení Selhalo!" msgid "Failed to download codes." msgstr "Stahování kódů selhalo." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Nelze extrahovat do %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2456,7 +2453,7 @@ msgstr "Nelze číst z banner.bin" msgid "Failed to read bk header" msgstr "Nelze přečíst hlavičku bk" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2467,7 +2464,7 @@ msgstr "" "Data v paměťové kartě můžou být zkrácena\n" "Pozice souboru: %llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2475,7 +2472,7 @@ msgstr "" "Nelze správně číst zálohu alokační tabulky bloku\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2493,7 +2490,7 @@ msgstr "Nelze číst data ze souboru %d" msgid "Failed to read data from file: %s" msgstr "Čtení dat ze souboru selhalo: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2501,7 +2498,7 @@ msgstr "" "Nelze správně číst zálohu adresáře\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2513,7 +2510,7 @@ msgstr "" msgid "Failed to read header" msgstr "Nelze přečíst hlavičku" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2526,7 +2523,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Nelze přečíst hlavičku souboru %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Nelze přečíst jedinečné ID z obrazu disku" @@ -2548,7 +2545,7 @@ msgstr "Nelze zapsat data do souboru: %s" msgid "Failed to write header for %s" msgstr "Zápis hlavičky selhal pro %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Perština" @@ -2560,7 +2557,7 @@ msgstr "Rychlá" msgid "Fast Depth Calculation" msgstr "Rychlý výpočet hloubky" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Rychlá verze MMU. Nefunguje v každé hře." @@ -2596,7 +2593,7 @@ msgstr "" "Soubor nelze otevřít\n" "nebo nemá platnou příponu" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2609,7 +2606,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Soubor nerozpoznán jako paměťová karta" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Soubor není komprimovaný" @@ -2618,11 +2615,11 @@ msgstr "Soubor není komprimovaný" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Neznámý režim otevření : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Souborový systém" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Typ souboru 'ini' je neznámý! Nelze otevřít!" @@ -2650,7 +2647,7 @@ msgstr "Vynutit 16:9" msgid "Force 4:3" msgstr "Vynutit 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Donutit konzoli být jako NTSC-J" @@ -2682,7 +2679,7 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2692,7 +2689,7 @@ msgstr "" "Pokud není zaškrtnuto, Dolphin standardně přejde na NTSC-U a automaticky " "zapne toto nastavení při hraní Japonských her." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2704,7 +2701,7 @@ msgstr "" msgid "Forward" msgstr "Dopředu" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Přesměrování portu (UPnP)" @@ -2747,7 +2744,7 @@ msgstr "Rozsah Snímku" msgid "Frame S&kipping" msgstr "Přes&kakování snímků:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Limit Snímků:" @@ -2759,9 +2756,9 @@ msgstr "Snímky k Nahrání" msgid "Free Look" msgstr "Rozhlížení pomocí myši" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francouzština" @@ -2794,27 +2791,27 @@ msgstr "GCPad" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID Hry:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Hra už běží!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Hra neběží!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Hra nenalezena!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Nastavení Konkrétní Hry" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Nastavení Hry" @@ -2822,7 +2819,7 @@ msgstr "Nastavení Hry" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "Soubory uložených her GameCube (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2831,7 +2828,7 @@ msgid "Gamecube &Pad Settings" msgstr "Nastavení Gamecube &Pad" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Paměťové karty Gamecube (*.raw,*.gcp)" @@ -2839,12 +2836,12 @@ msgstr "Paměťové karty Gamecube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Gamecube Pad nastavení" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Kódy Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2856,7 +2853,7 @@ msgstr "" "(buď špatný kód, nebo typ kódu není ještě podporován. Zkuste použít )" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Obecné" @@ -2865,13 +2862,13 @@ msgstr "Obecné" msgid "General Settings" msgstr "Obecná Nastavení" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Němčina" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Index je větší než velikost seznamu ar kódu %lu" @@ -2884,7 +2881,7 @@ msgstr "Grafika" msgid "Graphics settings" msgstr "Grafická nastavení" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Větší než" @@ -2905,7 +2902,7 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto zaškrtnuté." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Řečtina" @@ -2929,11 +2926,11 @@ msgstr "Kytara" msgid "Hacks" msgstr "Hacky" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Kontrolní součet hlavičky selhal" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebrejština" @@ -2945,7 +2942,7 @@ msgstr "Výška" msgid "Help" msgstr "Nápověda" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2967,7 +2964,7 @@ msgstr "" "\n" "Sajonara!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3006,7 +3003,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Hostovat" @@ -3015,11 +3012,11 @@ msgid "Hotkey Configuration" msgstr "Nastavení klávesových zkratek" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Klávesové zkratky" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Maďarština" @@ -3027,16 +3024,16 @@ msgstr "Maďarština" msgid "Hybrid Wiimote" msgstr "Hybridní Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "IOCTL_ES_GETVIEWS: Pokus o získání dat z neznámého lístku: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3045,15 +3042,15 @@ msgstr "" "IDNázvu %016llx.\n" "Dolphin se teď pravděpodobně zasekne." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - špatný cíl" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Nastavení IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "Infrč." @@ -3065,15 +3062,15 @@ msgstr "Infračer. Ukazovátko" msgid "IR Sensitivity:" msgstr "Citlivost Infračer.:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Detaily ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Adresáře ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITÁLIE" @@ -3081,7 +3078,7 @@ msgstr "ITÁLIE" msgid "Icon" msgstr "Ikona" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3153,7 +3150,7 @@ msgstr "" "\"Importovaný soubor má příponu sav\n" "ale nemá správnou hlavičku\"" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Ve Hře" @@ -3162,7 +3159,7 @@ msgid "Increase Frame limit" msgstr "Zvýšit omezení snímků" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3182,7 +3179,7 @@ msgstr "Vložit" msgid "Insert Encrypted or Decrypted code here..." msgstr "Zde vložte Zašifrovaný nebo Rozšifrovaný kód..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Vložit SD Kartu" @@ -3194,35 +3191,35 @@ msgstr "Zde vložte jméno..." msgid "Install WAD" msgstr "Instalovat WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Instalovat do Wii Menu" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "Byl zavolán InstallExceptionHandler, ale tato platforma toto ještě " "nepodporuje." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Instaluji WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Chyba v kontrole celistvosti" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Kontrola celistvosti dokončena" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Kontrola celistvosti dokončena. Nebyly nalezeny žádné chyby." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3231,11 +3228,11 @@ msgstr "" "Kontrola celistvosti oddílu %d selhala. Váš výpis ISO je pravěpodobně " "poškozen nebo byl nesprávně opraven." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Rozhraní" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Nastavení Rozhraní" @@ -3264,7 +3261,7 @@ msgstr "Vnitřní Rozlišení:" msgid "Interpreter (VERY slow)" msgstr "Převaděč (VELMI pomalé)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3273,7 +3270,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Neplatná Velikost(%x) nebo Kouzelné slovo (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Neplatná Hodnota!" @@ -3281,16 +3278,16 @@ msgstr "Neplatná Hodnota!" msgid "Invalid bat.map or dir entry" msgstr "Neplatný bat.map nebo záznam adr." -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Neplatná událost typu %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Neplatný soubor" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3317,34 +3314,36 @@ msgstr "Neplatný řetězec hledání (nelze převést na číslo)" msgid "Invalid search string (only even string lengths supported)" msgstr "Neplatný řetězec hledání (jsou podporovány pouze sudé délky řetězce)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Neplatný stav" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italština" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPONSKO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT Rekompilátor (doporučeno)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL experimentální rekompilátor" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japonština" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3366,8 +3365,9 @@ msgstr "Okno vždy navrchu" msgid "Key" msgstr "Klávesa" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Korejština" @@ -3385,7 +3385,7 @@ msgstr "Tlačítko L" msgid "L-Analog" msgstr "Levý Analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Jazyk:" @@ -3394,7 +3394,7 @@ msgstr "Jazyk:" msgid "Last %i" msgstr "Poslední %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Zpoždění:" @@ -3433,11 +3433,11 @@ msgstr "" "Levé/Pravé kliknutí pro více možností.\n" "Prostřední pro vymazání." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Menší než" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Limitovat podle SzS" @@ -3529,11 +3529,11 @@ msgstr "Načíst stav v pozici 9" msgid "Load State..." msgstr "Nahrát Stav..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Nahrát Systémové Menu Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Nahrát Systémové Menu Wii %d%c" @@ -3584,12 +3584,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Výstup Zapisovače" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Protokolování" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Připojení k serveru ztraceno!" @@ -3606,7 +3606,7 @@ msgstr "" "MD5 se neshoduje\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Hack Rychlosti" @@ -3620,11 +3620,11 @@ msgstr "Soubory MadCatz Gameshark (*.gcs)" msgid "Main Stick" msgstr "Hlavní páčka" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID Výrobce:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Výrobce:" @@ -3660,7 +3660,7 @@ msgid "Memory Byte" msgstr "Bajt Paměti" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Paměťová karta" @@ -3672,7 +3672,7 @@ msgstr "" "Správce Paměťových karet Varování-Před použitím zálohujte, měl by být " "spravený, ale mohl by věci poškodit!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3689,7 +3689,7 @@ msgstr "" "%s\n" "Chtěli byste starý soubor zkopírovat do nového umístění?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "Velikost paměťové karty se neshoduje s velikosti hlavičky" @@ -3697,7 +3697,7 @@ msgstr "Velikost paměťové karty se neshoduje s velikosti hlavičky" msgid "Menu" msgstr "Menu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mikrofon" @@ -3710,7 +3710,7 @@ msgstr "Min" msgid "Misc" msgstr "Ostatní" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Ostatní Nastavení" @@ -3735,11 +3735,11 @@ msgstr "" msgid "Monospaced font" msgstr "Písmo se stejnou roztečí" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3860,15 +3860,15 @@ msgstr "NK Tab" msgid "NP Up" msgstr "NK Nahoru" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Jméno:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Jméno: " @@ -3878,7 +3878,7 @@ msgstr "Jméno: " msgid "Native GCI files(*.gci)" msgstr "Původní soubory CGI(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nové Skenování" @@ -3887,7 +3887,7 @@ msgstr "Nové Skenování" msgid "Next Page" msgstr "Další Stránka" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Další Skenování" @@ -3895,11 +3895,11 @@ msgstr "Další Skenování" msgid "Nickname :" msgstr "Přezdívka :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Žádná Země (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Nenalezena žádná ISO nebo WADS" @@ -3938,24 +3938,25 @@ msgstr "Žádný soubor s nahrávkou" msgid "No save folder found for title %s" msgstr "Nebyl nalezen žádný ukládací adresář pro název %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Žádný" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norský Bokmål" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Nerovná se" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Nenastaven" @@ -3964,11 +3965,11 @@ msgstr "Nenastaven" msgid "Not a Wii save or read failure for file header size %x" msgstr "není uložená hra Wii nebo nelze číst z hlavičky souboru o velikosti %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Nepřipojen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Poznámky" @@ -3989,7 +3990,7 @@ msgstr "Upozornění" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Počet Kódů:" @@ -4010,7 +4011,7 @@ msgstr "Objekt" msgid "Object Range" msgstr "Rozsah Objektu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Vypnuto" @@ -4018,7 +4019,7 @@ msgstr "Vypnuto" msgid "Offset:" msgstr "Logická Adresa:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Zobrazovat zprávy na obrazovce" @@ -4036,11 +4037,11 @@ msgstr "Pouze bloky %d jsou dostupné" msgid "Open" msgstr "Otevřít" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Otevřít &adresář umístění" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Otevřít Wii adre&sář uložení" @@ -4070,7 +4071,7 @@ msgstr "OpenCL Dekodér Textury" msgid "OpenMP Texture Decoder" msgstr "OpenMP Dekodér Textury" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4078,11 +4079,7 @@ msgstr "" "Otevře výchozí nastavení (pouze pro čtení) této hry v externím textovém " "editoru." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "Otevře uživatelem zadané změny nastavení v externím textovém editoru." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Volby" @@ -4106,7 +4103,7 @@ msgstr "" msgid "Other" msgstr "Jiné" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4121,11 +4118,11 @@ msgstr "Výstup" msgid "P&lay Recording..." msgstr "S&pustit nahrávku..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Pad" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Pad " @@ -4149,26 +4146,26 @@ msgstr "Odstavec" msgid "Parameters" msgstr "Parametry" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Oddíl %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Oddíl neexistuje: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Záplaty" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Cesty" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pozastavit" @@ -4181,7 +4178,7 @@ msgstr "Pozastavit na konci filmu" msgid "Per-Pixel Lighting" msgstr "Osvětlení Podle Pixelu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Dokonalá" @@ -4192,8 +4189,8 @@ msgstr "Perspektiva %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Spustit" @@ -4205,7 +4202,7 @@ msgstr "Přehrát nahrávku" msgid "Play/Pause" msgstr "Přehrát/Pozastavit" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Hratelné" @@ -4213,11 +4210,11 @@ msgstr "Hratelné" msgid "Playback Options" msgstr "Možnosti Přehrávání" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Hráči" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Prosím potvrďte..." @@ -4229,36 +4226,36 @@ msgstr "Před uložením si prosím vytvořte perspektivu" msgid "Plus-Minus" msgstr "Plus-Mínus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polština" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugalština" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugalština (Brazilská)" @@ -4271,7 +4268,7 @@ msgstr "Efekt Následného Zpracování:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Předčasný konec filmu v PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Předčasný konec filmu v PlayWiimote. %u + %d > %u" @@ -4293,7 +4290,7 @@ msgstr "Před. stránka" msgid "Previous Page" msgstr "Předchozí Stránka" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Předchozí Hodnota" @@ -4317,8 +4314,8 @@ msgstr "Zahodit Vyrovnávací Paměť" msgid "Question" msgstr "Otázka" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Ukončit" @@ -4340,7 +4337,7 @@ msgstr "Pravý Analog" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSKO" @@ -4379,7 +4376,7 @@ msgstr "Opravdové Wiimoty" msgid "Record" msgstr "Nahrávat" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Zaznamenat vstup" @@ -4431,10 +4428,10 @@ msgstr "Obnovit Seznam" msgid "Refresh game list" msgstr "Obnovit seznam her" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Odstranit" @@ -4457,7 +4454,7 @@ msgstr "Vykreslit do Hlavního okna" msgid "Reset" msgstr "Resetovat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Výsledky" @@ -4465,7 +4462,7 @@ msgstr "Výsledky" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revize:" @@ -4478,18 +4475,18 @@ msgstr "Vpravo" msgid "Right Stick" msgstr "Pravá páčka" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Vibrace" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Spustit DSP LLE na samostatném vlákně (nedoporučeno: může způsobit zaseknutí)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Ruština" @@ -4563,12 +4560,12 @@ msgstr "Uložit stav do pozice 9" msgid "Save State..." msgstr "Uložit Stav..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Uložit jako" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Uložit komprimované GCM/ISO" @@ -4576,7 +4573,7 @@ msgstr "Uložit komprimované GCM/ISO" msgid "Save current perspective" msgstr "Uložit současnou perspektivu" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Uložit dekomprimované GCM/ISO" @@ -4589,16 +4586,16 @@ msgstr "Uložený stav filmu %s je poškozen, nahrávání filmu je zastaveno... msgid "Scaled EFB Copy" msgstr "EFB Kopie Změněné Velikosti" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Skenuji %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Skenuji pro ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Skenuji..." @@ -4614,11 +4611,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Hledat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Hledat Filtr" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Hledat Podadresáře" @@ -4641,12 +4638,12 @@ msgstr "Sekce %s nebyla v SYSCONF nalezena" msgid "Select" msgstr "Vybrat" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Vyberte Soubor s Nahrávkou" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Vyberte soubor Wii WAD k instalování" @@ -4668,19 +4665,19 @@ msgstr "Vyberte soubor s uloženou pozicí pro import" msgid "Select floating windows" msgstr "Vybrat plovoucí okna" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Vyberte soubor k nahrání" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Vyberte soubor s uloženou hrou" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Vyberte stav k nahrání" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Vyberte stav k uložení" @@ -4700,7 +4697,7 @@ msgstr "" "Vynutit 4:3: Roztáhne obraz na poměr4:3.\n" "Roztáhnout do okna: Roztáhne obraz do velikosti okna." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Vybraný profil ovladače neexistuje" @@ -4725,39 +4722,28 @@ msgstr "" "Pokud si stále nejste jisti, použijte takové nejvyšší rozlišení, které Vám " "funguje." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Zvolí jaké grafické API bude vnitřně použito.\n" -"Direct3D 9 je většinou nejrychlejší. OpenGL je ale přesnější. Direct3D 11 je " -"někde mezi nimi.\n" -"Nezapomeňte, že podpůrné vrstvy Direct3D jsou dostupné pouze ve Windows.\n" -"\n" -"Pokud si nejste jisti, použijte Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Zvolí jaké grafické API bude vnitřně použito.\n" -"Direct3D 9 je většinou nejrychlejší. OpenGL je ale přesnější. Direct3D 11 je " -"někde mezi nimi.\n" -"Nezapomeňte, že podpůrné vrstvy Direct3D jsou dostupné pouze ve Windows.\n" -"\n" -"Pokud si nejste jisti, použijte OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Poslat" @@ -4769,18 +4755,18 @@ msgstr "Umístění Senzorové Tyče:" msgid "Separator" msgstr "Oddělovač" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Srbština" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Sériový port 1 - Tito je port, který používají zařízení jako internetový " "adaptér" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Nastavit jako &výchozí ISO" @@ -4789,12 +4775,12 @@ msgstr "Nastavit jako &výchozí ISO" msgid "Set as default Memcard %c" msgstr "Nastavit jako výchozí paměťovou kartu %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive: Index je větší než velikost seznamu ar kódu %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4802,19 +4788,19 @@ msgstr "" "Nastavá zpoždění (v ms). Vyšší hodnoty mohou snížit praskání zvuku. Pouze " "pro podpůrnou vrstvu OpenAL." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Nastavení..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Nelze vytvořit soubor nastavení" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Třes" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Krátké Jméno:" @@ -4838,7 +4824,7 @@ msgstr "Zobrazit &Stavový řádek" msgid "Show &Toolbar" msgstr "Zobrazit Panel Nás&trojů" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Zobrazit výchozí" @@ -4878,7 +4864,7 @@ msgstr "Zobrazit JAP" msgid "Show Korea" msgstr "Zobrazit Koreu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Jazyk Zobrazení:" @@ -4918,11 +4904,11 @@ msgstr "Zobrazit Wad" msgid "Show Wii" msgstr "Zobrazit Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Zobrazí rámeček s potvrzením před zastavením hry." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4940,7 +4926,7 @@ msgstr "Zobrazit první blok" msgid "Show lag counter" msgstr "Zobrazit počítadlo zpoždění" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4992,23 +4978,24 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Šikmý Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Zjednodušená čínština" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Velikost" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Přeskočit BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Přeskočit čištění DCBZ" @@ -5038,11 +5025,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -5050,7 +5037,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Snímek" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Softwarový Vykreslovač" @@ -5067,27 +5054,27 @@ msgstr "" "Opravdu chcete zapnout softwarové vykreslování? Pokud si nejste jisti, " "zvolte 'Ne'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Nastavení Zvuku" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Podpůrná vrstva zvuku %s je neplatná." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Vytvoření vyrovnávací paměti zvuku selhalo: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Mezerník" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Španělština" @@ -5115,7 +5102,7 @@ msgstr "" "\n" "Pokud si nejste jisti, zvolte 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Zvýšit rychlost přenosu Disku" @@ -5123,13 +5110,13 @@ msgstr "Zvýšit rychlost přenosu Disku" msgid "Square Stick" msgstr "Čtvercová páčka" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Standardní Ovladač" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5145,7 +5132,7 @@ msgstr "Začít na&hrávat" msgid "Start Recording" msgstr "Začít Nahrávat" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Stav" @@ -5153,7 +5140,7 @@ msgstr "Stav" msgid "State Saves" msgstr "Ukládání stavu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Volant" @@ -5202,19 +5189,19 @@ msgstr "Soubor úspěšně exportován do %s" msgid "Successfully imported save files" msgstr "Uložení byly úspěšně importovány" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Švédština" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Švihnutí" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Synchronizovat vlákno GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5222,12 +5209,13 @@ msgstr "" "Synchronizuje vlákna GPU a CPU, aby se zabránilo náhodným zasekáváním v " "režimu dvojitého jádra. (ZAPNUTO = Kompatibilní, VYPNUTO = Rychlé)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Jazyk Systému:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TCHAJ-WAN" @@ -5258,7 +5246,7 @@ msgstr "Deska vpravo" msgid "Take Screenshot" msgstr "Vytvořit Snímek Obrazovky" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bonga)" @@ -5278,11 +5266,11 @@ msgstr "Vyrovnávací Paměť Textur" msgid "Texture Format Overlay" msgstr "Překryv Formátu Textury" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD byl úspěšně nainstalován" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Adresa je neplatná" @@ -5290,13 +5278,13 @@ msgstr "Adresa je neplatná" msgid "The checksum was successfully fixed" msgstr "Kontrolní součet byl úspěšně opraven" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Zvolený adresář je už v seznamu" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5319,7 +5307,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Soubor %s je už otevřen, hlavička souboru nebude zapsána." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Zadaný soubor (%s) neexistuje" @@ -5352,7 +5340,7 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "Uložená hra, kterou se snažíte zkopírovat má neplatnou délku souboru" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5360,19 +5348,19 @@ msgstr "" "Zvolený jazyk není Vašim systémem podporován. Vracím se na výchozí jazyk " "systému." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Verze serveru a Netplay klienta jsou nekompatibilní!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Server je plný!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Server odpověděl: hra v současnosti běží!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Server zaslal neznámou chybovou zprávu!" @@ -5381,15 +5369,15 @@ msgstr "Server zaslal neznámou chybovou zprávu!" msgid "The specified file \"%s\" does not exist" msgstr "Zadaný soubor \"%s\" neexistuje" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Hodnota je neplatná" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Vzhled:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5397,7 +5385,7 @@ msgstr "" "Musí existovat lístek pro 00000001/00000002. Vaše NAND vypsání je " "pravděpodobně neúplné" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5405,7 +5393,7 @@ msgstr "" "Tato nastavení potlačí hlavní nastavení Dolphinu.\n" "Neurčený znamená, že hra použije nastavení Dolphin." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5413,7 +5401,7 @@ msgstr "" "Tento simulátor action replay nepodporuje kód, který mění samotný Action " "Replay." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Toto může způsobit zpomalení ve Wii Menu a v některých hrách." @@ -5437,7 +5425,7 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5449,7 +5437,7 @@ msgstr "" "závislosti na hře může spravit klikání zvuku, ale také může způsobit " "neustálý hluk)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5460,7 +5448,7 @@ msgstr "" "Způsobí výrazné zvýšení rychlosti na PC s více než jedním jádrem, ale také " "může způsobovat občasné chyby/pády." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Tohle Vám umožní Ručně Upravovat konfigurační soubory INI" @@ -5469,12 +5457,12 @@ msgstr "Tohle Vám umožní Ručně Upravovat konfigurační soubory INI" msgid "Threshold" msgstr "Práh" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Naklánění" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Název" @@ -5509,15 +5497,16 @@ msgid "Toggle IR" msgstr "Přepínat IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Nahoře" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Tradiční Čínština" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Pokus o načtení souboru neznámého typu." @@ -5537,7 +5526,7 @@ msgstr "" "Pokus o čtení z neplatného SYSCONF\n" "ID bt wiimote nejsou dostupné" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turečtina" @@ -5553,12 +5542,12 @@ msgstr "Typ" msgid "UDP Port:" msgstr "UDP Port:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "NEZNÁMÝ" @@ -5567,7 +5556,7 @@ msgstr "NEZNÁMÝ" msgid "UNKNOWN_%02X" msgstr "NEZNÁMÉ_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5580,9 +5569,9 @@ msgstr "" "Záznam není změněn." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5607,11 +5596,11 @@ msgstr "Vrátit zpět Uložení Stavu" msgid "Unexpected 0x80 call? Aborting..." msgstr "Neočekávané volání 0x80? Ukončování..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Neznámé" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Neznámý příkaz DVD %08x - závažná chyba" @@ -5626,12 +5615,12 @@ msgstr "Neznámý příkaz 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Neznámý záznam typu %i v SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Přijata neznámá zpráva s id : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "Neznámá zpráva s id:%d přijata od hráče:%d Vyhazuji hráče!" @@ -5641,16 +5630,16 @@ msgstr "Neznámá zpráva s id:%d přijata od hráče:%d Vyhazuji hráče!" msgid "Up" msgstr "Nahoru" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Aktualizovat" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Svislý Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Použít režim EuRGB60 (PAL60)" @@ -5658,11 +5647,11 @@ msgstr "Použít režim EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Použít Celou Obrazovku" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Použít Šestnáctkovou soustavu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Použít Obslužné Rutiny Paniky" @@ -5728,11 +5717,11 @@ msgstr "Pomůcky" msgid "V-Sync" msgstr "V-Synch" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Hack rychlosti VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Hodnota" @@ -5740,7 +5729,7 @@ msgstr "Hodnota" msgid "Value:" msgstr "Hodnota:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Hodnota:" @@ -5752,7 +5741,7 @@ msgstr "Úroveň" msgid "Vertex Streaming Hack" msgstr "Hack vysílání vertexů" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Obraz" @@ -5760,7 +5749,7 @@ msgstr "Obraz" msgid "Virtual" msgstr "Virtuální" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Hlasitost" @@ -5792,15 +5781,15 @@ msgstr "" msgid "Warning" msgstr "Varování" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Varování - DOL se spouští ve špatném režimu konzole!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Varování - ELF se spouští ve špatném režimu konzole!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Varování - ISO se spouští ve špatném režimu konzole!" @@ -5902,19 +5891,19 @@ msgstr "Hack Širokoúhlého obrazu" msgid "Width" msgstr "Šířka" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Konzole Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii Kořen NAND:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii soubory s uložením (*.bin)|*.bin" @@ -5927,12 +5916,18 @@ msgstr "WiiWAD Nelze číst ze souboru" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote Připojen" @@ -5964,14 +5959,14 @@ msgstr "Klávesa Windows Vpravo" msgid "Word Wrap" msgstr "Zalamování textu" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Pracuji..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Zapsat paměťové karty (GC)" @@ -5991,21 +5986,36 @@ msgstr "Zapsat do Souboru" msgid "Write to Window" msgstr "Zapsat do Okna" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice selhalo: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 spuštění selhalo: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 vytvoření hlavního hlasu selhalo: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice selhalo: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 spuštění selhalo: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 vytvoření hlavního hlasu selhalo: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -6036,15 +6046,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Nemůžete zavřít panely, které mají uvnitř stránky." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Musíte si zvolit hru!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Musíte zadat jméno!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "" "Musíte zadat platnou hodnotu v desítkové, šestnáctkové nebo osmičkové " @@ -6054,7 +6064,7 @@ msgstr "" msgid "You must enter a valid profile name." msgstr "Musíte zadat platné jméno profilu." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Pro uplatnění změn musíte Dolphin restartovat." @@ -6068,7 +6078,7 @@ msgstr "" "Chtěli byste nyní přestat a problém opravit?\n" "Pokud zvolíte \"Ne\", mlže být zvuk poškozený." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6087,15 +6097,15 @@ msgstr "" "Měl by být 0x%04x (ale je 0x%04llx)\n" "Chcete vytvořit nový?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Kód Zero 3 není podporován" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Nulový kód, který dolphin nezná: %08x" @@ -6155,29 +6165,24 @@ msgstr "" "\n" "Pokud si nejste jisti, nechejte toto odškrtnuté." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "zavaděč aplikace (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Přečten Opcode z %x. Prosím nahlaste." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "neznámá konfigurace %d (očekáváno %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "přijata neznámá zpráva" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute při běhu aplikace vrátil -1!" @@ -6192,3 +6197,49 @@ msgstr "Korekce zNear:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| NEBO" + +#~ msgid "Could not create %s" +#~ msgstr "Nelze vytvořit %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Upravit místní změny nastavení" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Otevře uživatelem zadané změny nastavení v externím textovém editoru." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Zvolí jaké grafické API bude vnitřně použito.\n" +#~ "Direct3D 9 je většinou nejrychlejší. OpenGL je ale přesnější. Direct3D 11 " +#~ "je někde mezi nimi.\n" +#~ "Nezapomeňte, že podpůrné vrstvy Direct3D jsou dostupné pouze ve Windows.\n" +#~ "\n" +#~ "Pokud si nejste jisti, použijte Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Zvolí jaké grafické API bude vnitřně použito.\n" +#~ "Direct3D 9 je většinou nejrychlejší. OpenGL je ale přesnější. Direct3D 11 " +#~ "je někde mezi nimi.\n" +#~ "Nezapomeňte, že podpůrné vrstvy Direct3D jsou dostupné pouze ve Windows.\n" +#~ "\n" +#~ "Pokud si nejste jisti, použijte OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Přečten Opcode z %x. Prosím nahlaste." diff --git a/Languages/po/de.po b/Languages/po/de.po index dc68390a65..d92c8676c4 100644 --- a/Languages/po/de.po +++ b/Languages/po/de.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-21 12:39+0000\n" "Last-Translator: Ghabry \n" "Language-Team: German (http://www.transifex.com/projects/p/dolphin-emu/" @@ -25,13 +25,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr " (zu viele anzuzeigen)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " Spiel: " @@ -39,7 +39,7 @@ msgstr " Spiel: " msgid "! NOT" msgstr "! NICHT" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -63,12 +63,12 @@ msgstr "%08X:" msgid "%1$sCopy%1$s" msgstr "%1$sKopieren%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d Samples" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d Samples (Qualität %d)" @@ -81,13 +81,13 @@ msgstr "" "%s ist bereits vorhanden.\n" "Vorhandene Datei überschreiben?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" "%s konnte nicht komprimiert werden. Möglicherweise ist das Image fehlerhaft." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -96,7 +96,7 @@ msgstr "" "%s konnte nicht als Speicherkarte geladen werden.\n" "Die Dateigröße ist ungültig (0x%x bytes)." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -105,7 +105,7 @@ msgstr "" "%s konnte nicht als Speicherkarte geladen werden.\n" "Die Speicherkartengröße ist ungültig (0x%x bytes)." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -120,7 +120,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s konnte nicht geöffnet werden." -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s fehlgeschlagen: kr=%x" @@ -130,7 +130,7 @@ msgstr "%s fehlgeschlagen: kr=%x" msgid "%s is a 0 byte file" msgstr "Die Datei %s ist 0 Byte groß." -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s ist bereits komprimiert und kann nicht weiter komprimiert werden." @@ -188,11 +188,11 @@ msgstr "&Cheat-Manager" msgid "&DSP Settings" msgstr "&DSP-Einstellungen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "ISO &löschen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "Ausgewählte ISOs &löschen" @@ -256,7 +256,7 @@ msgstr "Pau&se" msgid "&Play" msgstr "&Start" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Eigenschaften" @@ -300,7 +300,7 @@ msgstr "&Ansicht" msgid "&Wiimote Settings" msgstr "&Wiimote-Einstellungen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -336,7 +336,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Nativ (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 Bit" @@ -352,7 +352,7 @@ msgstr "2.5x Nativ (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Nativ (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 Bit" @@ -368,7 +368,7 @@ msgstr "3x Nativ (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Nativ (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 Bit" @@ -380,7 +380,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -388,7 +388,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -396,13 +396,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Ein NetPlay-Fenster ist bereits geöffnet!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Derzeit wird kein Spiel ausgeführt." @@ -415,6 +415,7 @@ msgstr "" "Du musst deine Wiimotes manuell verbinden." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -423,10 +424,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -446,13 +448,13 @@ msgstr "" "\n" "Der Host muss den gewählten TCP-Port geöffnet haben!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR Codes" @@ -500,7 +502,7 @@ msgstr "" "Fehlerhafter Code:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -508,7 +510,7 @@ msgstr "" "Action Replay Fehler: Ungültige Größe (%08x : address = %08x) in Add Code " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -517,7 +519,7 @@ msgstr "" "Action Replay Fehler: Ungültige Größe (%08x : address = %08x) in Fill and " "Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -526,7 +528,7 @@ msgstr "" "Action Replay Fehler: Ungültige Größe (%08x : address = %08x) in Ram Write " "And Fill (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -535,12 +537,12 @@ msgstr "" "Action Replay Fehler: Ungültige Größe (%08x : address = %08x) in Write To " "Pointer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay Fehler: Ungültiger Wert (%08x) in Memory Copy (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -550,27 +552,27 @@ msgstr "" "(%s)\n" "Master Codes werden nicht benötigt. Benutzen Sie keine Master Codes." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay Fehler: Ungültiger AR-Code in Zeile: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Conditional Code: Ungültige Größe %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Ungültiger Normal Code Typ %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normaler Code %i: ungültiger Subtype %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Code 0: Ungültiger Subtype %08x (%s)" @@ -584,11 +586,11 @@ msgstr "Grafikkarte:" msgid "Add" msgstr "Hinzufügen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "ActionReplay-Code hinzufügen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Patch hinzufügen" @@ -596,9 +598,9 @@ msgstr "Patch hinzufügen" msgid "Add new pane" msgstr "Neue Palette hinzufügen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Hinzufügen..." @@ -650,36 +652,36 @@ msgstr "Einstellung des benötigten analogen Drucks um Tasten zu aktivieren." msgid "Advanced" msgstr "Erweitert" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Alle GC/Wii-Dateien (elf, dol, gcm, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Alle GC/Wii-Imagedateien (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Alle Gamecube GCM-Dateien (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Alle Speicherstände (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Alle Wii-ISO-Dateien (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Alle komprimierten GC/Wii ISO Dateien (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Alle Dateien (*.*)|*.*" @@ -699,20 +701,20 @@ msgstr "Anisotropische Filterung:" msgid "Anti-Aliasing:" msgstr "Anti-Aliasing:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" "Der Apploader hat eine falsche Größe... ist dies wirklich ein AppLoader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Kann Apploader aus dieser Datei nicht laden." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Übernehmen" @@ -726,7 +728,7 @@ msgstr "" "\n" "Im Zweifel, wähle (aus)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabisch" @@ -735,7 +737,7 @@ msgstr "Arabisch" msgid "Are you sure you want to delete \"%s\"?" msgstr "Möchtest du \"%s\" wirklich löschen?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -743,7 +745,7 @@ msgstr "" "Sollen diese Dateien wirklich gelöscht werden?\n" "Löschen kann nicht rückgängig gemacht werden!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Soll die Datei gelöscht werden? Löschen kann nicht Rückgängig gemacht werden." @@ -752,7 +754,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "ARM JIT (Experimentell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "ARM JIT (Experimentell)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Seitenverhältnis:" @@ -761,12 +768,12 @@ msgstr "Seitenverhältnis:" msgid "At least one pane must remain open." msgstr "Mindestens eine Palette muss geöffnet bleiben." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Audio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Audio-Backend:" @@ -774,7 +781,7 @@ msgstr "Audio-Backend:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Fehler beim Öffnen des AO-Geräts.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Automatisch" @@ -813,16 +820,16 @@ msgstr "BP-Register" msgid "Back" msgstr "Zurück" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Backend-Einstellungen" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Backend:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Hintergrundeingabe" @@ -840,15 +847,15 @@ msgid "Balance Board" msgstr "Balance Board" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Bannerdetails" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Banner:" @@ -860,7 +867,7 @@ msgstr "Leiste" msgid "Basic" msgstr "Standard" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Grundeinstellungen" @@ -868,7 +875,7 @@ msgstr "Grundeinstellungen" msgid "Bass" msgstr "Bass" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Blockzuteilungs-Tabellen-Prüfsumme fehlerhaft." @@ -889,7 +896,7 @@ msgid "Blue Right" msgstr "Blau rechts" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Unten" @@ -898,7 +905,7 @@ msgstr "Unten" msgid "Bound Controls: %lu" msgstr "Steuerung festlegen: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Defekt" @@ -906,7 +913,7 @@ msgstr "Defekt" msgid "Browse" msgstr "Durchsuchen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Verzeichnis auswählen und hinzufügen" @@ -914,11 +921,11 @@ msgstr "Verzeichnis auswählen und hinzufügen" msgid "Browse for an ISO directory..." msgstr "ISO-Verzeichnis auswählen..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Ausgabeverzeichnis auswählen" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -928,7 +935,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Tasten" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -952,7 +959,7 @@ msgstr "C-Stick" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU-Emulations-Engine" @@ -976,17 +983,17 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "WiiMote konnte nicht bei Verbindungs-Handle %02x gefunden werden" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Kann nicht von DVD_Plugin/DVD-Schnittstelle lesen: Fataler Fehler" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Abbrechen" @@ -998,11 +1005,11 @@ msgstr "Abbrechen" msgid "Cannot open %s" msgstr "Kann %s nicht öffnen" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Kann während ausstehenden Events keine Events entregistrieren." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1012,7 +1019,7 @@ msgstr "" "Die Datei %s kann nicht als Speicherkarte verwendet werden, weil sie keine " "gültige Gamecube-Speicherkarte ist." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1024,7 +1031,7 @@ msgstr "" msgid "Caps Lock" msgstr "Feststelltaste" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Katalanisch" @@ -1032,7 +1039,7 @@ msgstr "Katalanisch" msgid "Center" msgstr "Mitte" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Wechseln" @@ -1044,11 +1051,11 @@ msgstr "Disc &wechseln..." msgid "Change Disc" msgstr "Disc wechseln" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Spiel wechseln" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1064,12 +1071,12 @@ msgstr "Sign zu zFar Parameter ändern (nach Korrektur)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Sign zu zNear Parameter ändern (nach Korrektur)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "Änderung dieser Option zeigt keine Auswirkung, solange die Emulation läuft." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1077,47 +1084,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Cheatcode" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Cheatsuche" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Cheat-Verwaltung" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Prüfe die Unversehrtheit der Partition" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Prüfe Unversehrtheit..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chinesisch (Vereinfacht)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Wähle ein DVD-Stammverzeichnis:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Wähle ein NAND-Stammverzeichnis:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Standard ISO auswählen:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Ordner zum Hinzufügen auswählen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Datei zum Öffnen auswählen" @@ -1125,15 +1132,15 @@ msgstr "Datei zum Öffnen auswählen" msgid "Choose a memory card:" msgstr "Wähle eine Speicherkarte:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" "Wähle eine Datei als Apploader aus: (Gilt nur für Discs aus Verzeichnissen)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Zielordner für Extraktion auswählen" @@ -1152,7 +1159,7 @@ msgstr "Klassik" msgid "Clear" msgstr "Leeren" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1162,7 +1169,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Schließen" @@ -1171,11 +1178,11 @@ msgstr "Schließen" msgid "Co&nfigure..." msgstr "&Einstellungen..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Code-Info" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Code:" @@ -1187,20 +1194,20 @@ msgstr "Befehl" msgid "Comment" msgstr "Kommentar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Kommentar:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "ISO komprimieren..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Ausgewählte ISOs komprimieren..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Komprimiere ISO" @@ -1218,8 +1225,8 @@ msgstr "Einstellungen" msgid "Configure Control" msgstr "Steuerung konfigurieren" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Pads konfigurieren" @@ -1227,13 +1234,13 @@ msgstr "Pads konfigurieren" msgid "Configure..." msgstr "Einstellungen ...." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Überschreiben Bestätigen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Beim Beenden bestätigen" @@ -1247,7 +1254,7 @@ msgstr "Verbinden" msgid "Connect Balance Board" msgstr "Balance Bord anschließen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "USB-Tastatur verbunden" @@ -1272,7 +1279,7 @@ msgstr "Wiimote 3 verbinden" msgid "Connect Wiimote 4" msgstr "Wiimote 4 verbinden" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Verbinden..." @@ -1292,7 +1299,7 @@ msgstr "Strg" msgid "Convert to GCI" msgstr "Zu GCI konvertieren" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopieren fehlgeschlagen" @@ -1301,16 +1308,11 @@ msgstr "Kopieren fehlgeschlagen" msgid "Copy to Memcard %c" msgstr "Auf Memcard %c kopieren" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Kern" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "%s konnte nicht erstellt werden" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Konnte Backend %s nicht initialisieren." @@ -1326,12 +1328,12 @@ msgstr "" "dies ist kein GC/Wii Backup. Bitte beachten Sie, dass die ursprünglichen GC/" "Wii-Discs von den meisten PC-DVD-Laufwerken nicht gelesen werden können." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Konnte ISO-Datei %s nicht erkennen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Konnte %s nicht speichern" @@ -1359,11 +1361,11 @@ msgstr "" "Wenn einer dieser Fälle zutriffst, solltest du den Speicherort der " "Speicherkarte in den Optionen ändern." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Konnte den Befehl zum Öffnen der Dateierweiterung 'ini' nicht finden!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1371,17 +1373,17 @@ msgstr "" "Konnte Kern nicht initialisieren.\n" "Überprüfe deine Konfiguration." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Anzahl:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Land:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "AR-Code erstellen" @@ -1416,13 +1418,13 @@ msgstr "" msgid "Crossfade" msgstr "Überblendung" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" "Aktuelles Verzeichnis wurde gemäß wxFileSelector von %s nach %s geändert!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Benutzerdefinierter Projection-Hack" @@ -1430,11 +1432,11 @@ msgstr "Benutzerdefinierter Projection-Hack" msgid "Custom Projection Hack Settings" msgstr "Benutzerdefinierter Projection-Hack Einstellungen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Einige orthographische Projection-Parameter anpassen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Tschechisch" @@ -1450,20 +1452,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP-Emulations-Engine" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE Emulation (schnell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE Interpreter (langsam)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE Recompiler" @@ -1471,11 +1473,11 @@ msgstr "DSP LLE Recompiler" msgid "DSP settings" msgstr "DSP-Einstellungen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSP LLE in eigenem Thread" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD Laufwerk:" @@ -1489,15 +1491,15 @@ msgstr "" "DVDLowUnencryptedRead - Kritischer Fehler: Datenträger kann nicht gelesen " "werden." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Tanzmatte" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Datengröße" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Datum:" @@ -1526,16 +1528,16 @@ msgstr "Debug" msgid "Decimal" msgstr "Komma" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "ISO dekomprimieren..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Ausgewählte ISOs dekomprimieren..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Dekomprimiere ISO" @@ -1547,7 +1549,7 @@ msgstr "Framebegrenzung reduzieren" msgid "Default" msgstr "Standard" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Standard-ISO:" @@ -1591,8 +1593,8 @@ msgstr "" msgid "Device" msgstr "Gerät" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Geräteeinstellungen" @@ -1600,15 +1602,12 @@ msgstr "Geräteeinstellungen" msgid "Dial" msgstr "Skala" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1671,7 +1670,7 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disc" @@ -1698,20 +1697,20 @@ msgstr "" msgid "Divide" msgstr "Division" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Laufende Emulation stoppen?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II Dekoder" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1741,9 +1740,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin-Team\n" @@ -1798,12 +1796,12 @@ msgstr "Dolphin Emulierte Wiimote-Einstellungen" msgid "Dolphin FIFO" msgstr "Dolphin-FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GCPad-Einstellungen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS-Filme (*.dtm)" @@ -1815,7 +1813,7 @@ msgstr "Dolphin Wiimote-Einstellungen" msgid "Dolphin at &Google Code" msgstr "Dolphin auf &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1823,7 +1821,7 @@ msgstr "" "Dolphin konnte keine GC/Wii-ISOs finden. Hier doppelklicken um nach ISOs zu " "suchen..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1831,12 +1829,12 @@ msgstr "" "Dolphin versteckt momentan alle Spiele. Hier doppelklicken um alle Spiele " "anzuzeigen..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin war nicht in der Lage die gewünschte Aktion auszuführen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1862,11 +1860,11 @@ msgstr "%lu Codes heruntergeladen. (%lu hinzugefügt)" msgid "Drums" msgstr "Trommeln" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Dummy" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Audio dumpen" @@ -1915,9 +1913,9 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Holländisch" @@ -1941,7 +1939,7 @@ msgstr "" "mindestens Version %d.%d -- Wenn du Dolphin kürzlich aktualisiert hast, ist " "eventuell ein Neustart nötig, damit Windows den neuen Treiber erkennt." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1957,14 +1955,10 @@ msgstr "Bearbeiten" msgid "Edit ActionReplay Code" msgstr "ActionReplay-Code bearbeiten" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Einstellungen bearbeiten" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Lokale Überbrückungen bearbeiten" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Patch bearbeiten" @@ -1973,8 +1967,8 @@ msgstr "Patch bearbeiten" msgid "Edit current perspective" msgstr "Aktuelle Ansicht ändern" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Bearbeiten..." @@ -1986,7 +1980,7 @@ msgstr "Effekt" msgid "Embedded Frame Buffer" msgstr "Frame Buffer eingebunden" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Emu-Thread läuft bereits." @@ -2026,7 +2020,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Emulierte Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Emulationsstatus:" @@ -2050,15 +2044,15 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "AR-Logging aktivieren" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Blockvereinigung aktivieren" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Aktiviere Bounding Box Calculation" @@ -2066,27 +2060,27 @@ msgstr "Aktiviere Bounding Box Calculation" msgid "Enable Cache" msgstr "Aktiviere Cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Cheats aktivieren" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Dual Core aktivieren" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Dual Core aktivieren (Beschleunigung)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Idle-Skipping aktivieren" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Idle-Skipping aktivieren (Beschleunigung)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "MMU aktivieren" @@ -2094,7 +2088,7 @@ msgstr "MMU aktivieren" msgid "Enable Progressive Scan" msgstr "Progressiven Scan aktivieren" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Bildschirmschoner aktivieren" @@ -2102,7 +2096,7 @@ msgstr "Bildschirmschoner aktivieren" msgid "Enable Speaker Data" msgstr "Lautsprecherdaten aktivieren" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Breitbild aktivieren" @@ -2124,7 +2118,7 @@ msgstr "" "\n" "Im Zweifel, wähle 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2161,7 +2155,7 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2169,11 +2163,11 @@ msgstr "" "Aktiviere dies, um \"The Legend of Zelda: Twilight Princess\" zu " "beschleunigen. Für JEDES andere Spiel deaktivieren." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Benutzerdefinierten Projection-Hack aktivieren" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2181,7 +2175,7 @@ msgstr "" "Dolby Pro Logic II-Emulation wird aktiviert, indem 5.1 Surround verwendet " "wird. Nicht für OS X verfügbar." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2201,7 +2195,7 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2223,9 +2217,9 @@ msgstr "" msgid "End" msgstr "Ende" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Englisch" @@ -2248,23 +2242,22 @@ msgstr "Eintrag %d/%d" msgid "Entry 1/%d" msgstr "Eintrag 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Gleich" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Fehler" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Fehler beim Laden der ausgewählten Sprache. Kehre nun zum Systemstandard " "zurück." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2313,7 +2306,7 @@ msgstr "Alle Wii-Spielstände exportieren" msgid "Export Failed" msgstr "Exportieren fehlgeschlagen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Datei exportieren" @@ -2329,7 +2322,7 @@ msgstr "Aufnahme exportieren..." msgid "Export Save" msgstr "Spielstand exportieren" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Wii-Spielstand exportieren (Experimentell)" @@ -2345,7 +2338,7 @@ msgstr "Exportieren fehlgeschlagen" msgid "Export save as..." msgstr "Spielstand exportieren als..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Erweiterung" @@ -2361,44 +2354,44 @@ msgstr "Extra Parameter" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Extra Parameter nur in ''Metroid: Other M'' sinnvoll." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Alle Dateien extrahieren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Apploader extrahieren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "DOL extrahieren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Ordner extrahieren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Datei extrahieren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Partition extrahieren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Extrahiere %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Extrahiere alle Dateien" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Extrahiere Verzeichnis" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Extrahieren..." @@ -2410,15 +2403,15 @@ msgstr "FIFO-Byte" msgid "FIFO Player" msgstr "FIFO-Player" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANKREICH" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST-Größe:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Verbindungsaufbau fehlgeschlagen!" @@ -2426,11 +2419,15 @@ msgstr "Verbindungsaufbau fehlgeschlagen!" msgid "Failed to download codes." msgstr "Download der Codes fehlgeschlagen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Extrahieren nach %s ist fehlgeschlagen!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2484,7 +2481,7 @@ msgstr "Fehler beim Lesen von banner.bin" msgid "Failed to read bk header" msgstr "Fehler beim Lesen des BK-Headers" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2495,7 +2492,7 @@ msgstr "" "Die Speicherkarte ist vermutlich unvollständig.\n" "FilePosition: %llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2503,7 +2500,7 @@ msgstr "" "Konnte das Blockzuteilungtabellen-Backup nicht korrekt lesen\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2521,7 +2518,7 @@ msgstr "Fehler beim Lesen von Daten aus Datei %d" msgid "Failed to read data from file: %s" msgstr "Fehler beim Lesen von Daten aus der Datei: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2529,7 +2526,7 @@ msgstr "" "Konnte das Backup-Verzeichnis nicht korrekt lesen\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2541,7 +2538,7 @@ msgstr "" msgid "Failed to read header" msgstr "Fehler beim Lesen des Headers" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2554,7 +2551,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Fehler beim Lesen des Headers für Datei %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Fehler beim Lesen einer eindeutigen ID des Disc-Images." @@ -2576,7 +2573,7 @@ msgstr "Fehler beim Schreiben von Daten in Datei: %s" msgid "Failed to write header for %s" msgstr "Fehler beim Schreiben eines Header für %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Farsi" @@ -2588,7 +2585,7 @@ msgstr "Schnell" msgid "Fast Depth Calculation" msgstr "Schnelle Tiefenberechnung" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Schnelle Version der MMU. Funktioniert nicht mit allen Spielen." @@ -2624,7 +2621,7 @@ msgstr "" "Datei konnte nicht geöffnet werden\n" "oder hat keine gültige Erweiterung" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2637,7 +2634,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Diese Datei wird nicht als Speicherkarte erkannt." -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Datei nicht komprimiert" @@ -2646,11 +2643,11 @@ msgstr "Datei nicht komprimiert" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Unbekanter Öffnen-Modus : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Dateisystem" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Der Datentyp 'ini' ist unbekannt! Wird nicht geöffnet!" @@ -2678,7 +2675,7 @@ msgstr "16:9 erzwingen" msgid "Force 4:3" msgstr "4:3 erzwingen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "NTSC-J erzwingen" @@ -2712,7 +2709,7 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2722,7 +2719,7 @@ msgstr "" "Deaktiviert benutzt Dolphin die Standardeinstellung NTSC-U und aktiviert " "diese Option automatisch wenn japanische Spiele gespielt werden." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2734,7 +2731,7 @@ msgstr "" msgid "Forward" msgstr "Vorwärts" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Port öffnen (UPnP)" @@ -2777,7 +2774,7 @@ msgstr "Bildbereich" msgid "Frame S&kipping" msgstr "Frames ü&berspringen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Framelimit:" @@ -2789,9 +2786,9 @@ msgstr "Bilder zum Aufzeichnen" msgid "Free Look" msgstr "Freies Umsehen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Französisch" @@ -2824,27 +2821,27 @@ msgstr "GCPad" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "Spiel-ID:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Spiel läuft bereits!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Spiel läuft nicht!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Spiel nicht gefunden!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Spielspezifische Einstellungen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Spieleinstellungen" @@ -2852,7 +2849,7 @@ msgstr "Spieleinstellungen" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube-Speicherdateien (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2861,7 +2858,7 @@ msgid "Gamecube &Pad Settings" msgstr "GameCube &Pad-Einstellungen" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Gamecube-Speicherkarten (*.raw,*.gcp)" @@ -2869,12 +2866,12 @@ msgstr "Gamecube-Speicherkarten (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Gamecube Pad-Einstellungen" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko-Codes" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2888,7 +2885,7 @@ msgstr "" "das Sys-Verzeichnis verschiebst und Dolphin neustartest.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Allgemein" @@ -2897,13 +2894,13 @@ msgstr "Allgemein" msgid "General Settings" msgstr "Allgemeine Einstellungen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Deutsch" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Der Index ist größer als AR-Codelisten-Größe %lu" @@ -2916,7 +2913,7 @@ msgstr "Grafik" msgid "Graphics settings" msgstr "Grafikeinstellungen" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Größer als" @@ -2938,7 +2935,7 @@ msgstr "" "\n" "Im Zweifel aktiviert lassen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Griechisch" @@ -2962,11 +2959,11 @@ msgstr "Gitarre" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Header-Prüfsumme fehlerhaft" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebräisch" @@ -2978,7 +2975,7 @@ msgstr "Höhe" msgid "Help" msgstr "Hilfe" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2999,7 +2996,7 @@ msgstr "" "\n" "Sayonara!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3039,7 +3036,7 @@ msgid "Home" msgstr "Pos1" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -3048,11 +3045,11 @@ msgid "Hotkey Configuration" msgstr "Tastenkürzelbelegung" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Tastenkürzel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Ungarisch" @@ -3060,18 +3057,18 @@ msgstr "Ungarisch" msgid "Hybrid Wiimote" msgstr "Hybride Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Versucht Daten von einem unbekannten Ticket zu bekommen: " "%08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3080,15 +3077,15 @@ msgstr "" "TitleID %016llx.\n" "Dolphin wird sich jetzt wahrscheinlich aufhängen." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - Fehlerhaftes Ziel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL-Einstellungen" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3100,15 +3097,15 @@ msgstr "IR-Zeiger" msgid "IR Sensitivity:" msgstr "IR-Empfindlichkeit:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO-Details" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "ISO-Verzeichnisse" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITALIEN" @@ -3116,7 +3113,7 @@ msgstr "ITALIEN" msgid "Icon" msgstr "Symbol" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3188,7 +3185,7 @@ msgstr "" "Importierte Datei hat die Erweiterung SAV,\n" "aber besitzt keinen korrekten Header." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Im Spiel" @@ -3197,7 +3194,7 @@ msgid "Increase Frame limit" msgstr "Framebegrenzung erhöhen" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3217,7 +3214,7 @@ msgstr "Einfügen" msgid "Insert Encrypted or Decrypted code here..." msgstr "Verschlüsselten oder unverschlüsselten Code hier eingeben..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "SD-Karte einfügen" @@ -3229,35 +3226,35 @@ msgstr "Name hier eingeben.." msgid "Install WAD" msgstr "WAD installieren" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Zum Wii-Menü hinzufügen" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler aufgerufen, aber diese Platform unterstüzt diesen " "noch nicht." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "WAD installieren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Fehler bei der Unversehrtheitsprüfung" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Unversehrtheitsprüfung abgeschlossen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Unversehrtheitsprüfung abgeschlossen. Es wurden keine Fehler gefunden." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3266,11 +3263,11 @@ msgstr "" "Unversehrtheitsprüfung für Partition %d fehlgeschlagen. Der Dump ist " "möglicherweise fehlerhaft oder wurde fehlerhaft gepatcht." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Benutzeroberfläche" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Benutzeroberflächeneinstellungen" @@ -3299,7 +3296,7 @@ msgstr "Interne Auflösung:" msgid "Interpreter (VERY slow)" msgstr "Interpreter (SEHR langsam)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3308,7 +3305,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Ungültige Größe(%x) oder Magisches Wort (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Ungültiger Wert!" @@ -3316,16 +3313,16 @@ msgstr "Ungültiger Wert!" msgid "Invalid bat.map or dir entry" msgstr "Ungültige bat.map oder Verzeichnis-Eintrag" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Ungültiger Ereignis-Typ %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Ungültige Datei" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3352,34 +3349,36 @@ msgstr "Ungültiger Suchbegriff (konnte nicht zu Zahl konvertieren)" msgid "Invalid search string (only even string lengths supported)" msgstr "Ungültiger Suchbegriff (nur gerade Zeichenlängen werden unterstützt)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Ungültiger Stand" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italienisch" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPAN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT-Recompiler (Empfohlen)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL-Recompiler (Experimentell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japanisch" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3401,8 +3400,9 @@ msgstr "Fenster immer im Vordergrund" msgid "Key" msgstr "Taste" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Koreanisch" @@ -3420,7 +3420,7 @@ msgstr "L-Taste" msgid "L-Analog" msgstr "L-Analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Sprache:" @@ -3429,7 +3429,7 @@ msgstr "Sprache:" msgid "Last %i" msgstr "Letzte %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Latenz:" @@ -3468,11 +3468,11 @@ msgstr "" "Links-/Rechtsklick für weitere Optionen.\n" "Mittlere Maustaste zum Löschen." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Kleiner als" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "FPS beschränken" @@ -3564,11 +3564,11 @@ msgstr "Lade Status aus Slot 9" msgid "Load State..." msgstr "Stand laden..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Wii-Systemmenü laden" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Wii-Systemmenü laden %d%c" @@ -3620,12 +3620,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Logger-Ausgabe" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Logging" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Die Verbindung zum Server wurde getrennt!" @@ -3642,7 +3642,7 @@ msgstr "" "Unterschiedliche MD5-Prüfsummen\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Speed Hack" @@ -3656,11 +3656,11 @@ msgstr "MadCatz Gameshark-Dateien(*.gcs)" msgid "Main Stick" msgstr "Main Stick" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "Hersteller-ID:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Hersteller:" @@ -3698,7 +3698,7 @@ msgid "Memory Byte" msgstr "Speicherbyte" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Speicherkarte" @@ -3710,7 +3710,7 @@ msgstr "" "Speicherkarten-Manager WARNUNG - Erstelle Backups vor der Benutzung. Dies " "sollte zwar behoben sein, aber könnte dennoch Fehler verursachen!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3727,7 +3727,7 @@ msgstr "" "%s\n" "Möchten Sie die alte Datei zum neuen Speicherort kopieren?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" "Die Dateigröße der Speicherkarte stimmt nicht mit der Dateigrößenangabe im " @@ -3737,7 +3737,7 @@ msgstr "" msgid "Menu" msgstr "Menü" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mikrofon" @@ -3750,7 +3750,7 @@ msgstr "Min" msgid "Misc" msgstr "Sonstiges" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Sonstige Einstellungen" @@ -3775,11 +3775,11 @@ msgstr "" msgid "Monospaced font" msgstr "Schrift mit gleichmäßigen Zeichenabständen" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3899,15 +3899,15 @@ msgstr "Num Tab" msgid "NP Up" msgstr "Num Hoch" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Name:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Name: " @@ -3917,7 +3917,7 @@ msgstr "Name: " msgid "Native GCI files(*.gci)" msgstr "Native GCI-Dateien(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Neue Suche" @@ -3926,7 +3926,7 @@ msgstr "Neue Suche" msgid "Next Page" msgstr "Nächste Seite" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Nächste Suche" @@ -3934,11 +3934,11 @@ msgstr "Nächste Suche" msgid "Nickname :" msgstr "Nickname:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Kein Land (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Keine ISOs oder WADs gefunden" @@ -3977,24 +3977,25 @@ msgstr "Keine Aufnahmedatei" msgid "No save folder found for title %s" msgstr "Kein Spielstand-Ordner für Titel %s gefunden." -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Keine" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norwegisch" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Ungleich" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Nicht Festgelegt" @@ -4005,11 +4006,11 @@ msgstr "" "Dies ist kein Wii-Spielstand oder das Lesen der Größenangabe im Dateiheader " "%x ist gescheitert." -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Nicht verbunden" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notizen" @@ -4030,7 +4031,7 @@ msgstr "Hinweis" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Codeanzahl:" @@ -4051,7 +4052,7 @@ msgstr "Objekt" msgid "Object Range" msgstr "Objektreichweite" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Aus" @@ -4059,7 +4060,7 @@ msgstr "Aus" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Bildschirmnachrichten" @@ -4077,11 +4078,11 @@ msgstr "Nur %d Blöcke verfügbar" msgid "Open" msgstr "Öffnen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Beinhaltenden &Ordner öffnen..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "&Wii-Spielstand-Ordner öffnen..." @@ -4111,7 +4112,7 @@ msgstr "OpenCL Texturen-Dekodierer" msgid "OpenMP Texture Decoder" msgstr "OpenMP Texturen Dekodierer" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4119,12 +4120,7 @@ msgstr "" "Öffnet die Standard-Konfiguration für dieses Spiel (schreibgeschützt) in " "einem externen Texteditor." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" -"Öffnet die benutzerdefinierten Überbrückungen in einem externen Texteditor." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Einstellungen" @@ -4149,7 +4145,7 @@ msgstr "" msgid "Other" msgstr "Andere" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4165,11 +4161,11 @@ msgstr "Ausgabe" msgid "P&lay Recording..." msgstr "Au&fnahme abspielen..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Pad" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Pad " @@ -4193,26 +4189,26 @@ msgstr "Paragraph" msgid "Parameters" msgstr "Parameter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partition %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Partition existiert nicht: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patches" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Pfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pause" @@ -4225,7 +4221,7 @@ msgstr "Pause am Ende des Films" msgid "Per-Pixel Lighting" msgstr "Per-Pixel Lighting" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfekt" @@ -4236,8 +4232,8 @@ msgstr "Perspektive %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Start" @@ -4249,7 +4245,7 @@ msgstr "Aufnahme abspielen" msgid "Play/Pause" msgstr "Start/Pause" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Spielbar" @@ -4257,11 +4253,11 @@ msgstr "Spielbar" msgid "Playback Options" msgstr "Wiedergabeoptionen" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Spieler" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Bitte bestätigen..." @@ -4273,36 +4269,36 @@ msgstr "Bitte legen Sie vor dem Speichern eine Perspektive fest" msgid "Plus-Minus" msgstr "Plus-Minus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polnisch" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4:" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugiesisch" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugiesisch (Brasilianisch)" @@ -4315,7 +4311,7 @@ msgstr "Nachbearbeitungseffekt:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Vorzeitiges Filmende in PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Vorzeitiges Filmende in PlayWiimote. %u + %d > %u" @@ -4337,7 +4333,7 @@ msgstr "Vorh. Seite" msgid "Previous Page" msgstr "Vorherige Seite" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Vorheriger Wert" @@ -4361,8 +4357,8 @@ msgstr "Cache leeren" msgid "Question" msgstr "Frage" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Beenden" @@ -4384,7 +4380,7 @@ msgstr "R-Analog" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSSLAND" @@ -4423,7 +4419,7 @@ msgstr "Echte Wiimotes" msgid "Record" msgstr "Aufnahme" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Eingabe aufzeichnen" @@ -4477,10 +4473,10 @@ msgstr "Liste aktualisieren" msgid "Refresh game list" msgstr "Spieleliste aktualisieren" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Entfernen" @@ -4503,7 +4499,7 @@ msgstr "Im Hauptfenster rendern" msgid "Reset" msgstr "Zurücksetzen" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Ergebnisse" @@ -4511,7 +4507,7 @@ msgstr "Ergebnisse" msgid "Return" msgstr "Eingabe" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revision:" @@ -4524,19 +4520,19 @@ msgstr "Rechts" msgid "Right Stick" msgstr "Stick rechts" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Rumble" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Führt DSP LLE in einem eigenen Thread aus (nicht empfohlen: kann zum " "Einfrieren führen)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russisch" @@ -4610,12 +4606,12 @@ msgstr "Speichere Status in Slot 9" msgid "Save State..." msgstr "Spiel speichern..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Speichern unter..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Komprimierte GCM/ISO speichern" @@ -4623,7 +4619,7 @@ msgstr "Komprimierte GCM/ISO speichern" msgid "Save current perspective" msgstr "Aktuelle Perspektive speichern" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Dekomprimierte GCM/ISO speichern" @@ -4636,16 +4632,16 @@ msgstr "Spielstandfilm %s ist fehlerhaft, breche die Filmaufnahme ab..." msgid "Scaled EFB Copy" msgstr "Skalierte EFB-Kopie" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Suche %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Suche nach ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Suche..." @@ -4661,11 +4657,11 @@ msgstr "Scroll-Lock" msgid "Search" msgstr "Suche" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Suchfilter" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Unterordner durchsuchen" @@ -4688,12 +4684,12 @@ msgstr "Abschnitt %s nicht gefunden in SYSCONF" msgid "Select" msgstr "Auswählen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Aufnahmedatei auswählen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Wähle eine Wii-WAD zum Installieren aus." @@ -4715,19 +4711,19 @@ msgstr "Speicherdatei zum Importieren auswählen" msgid "Select floating windows" msgstr "Wähle unverankerte Fenster" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Datei zum Laden auswählen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Wii-Spielstand auswählen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Status zum Laden auswählen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Status zum Speichern auswählen" @@ -4749,7 +4745,7 @@ msgstr "" "\n" "Im Zweifel, wähle \"Auto\"." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Ausgewähltes Controller-Profil existiert nicht" @@ -4773,39 +4769,28 @@ msgstr "" "Im Zweifel, wähle deine Desktopauflösung,\n" "oder die höchste Auflösung die für dich funktioniert." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Bestimmt welche Grafik-API intern verwendet wird.\n" -"Direct3D 9 ist für gewöhnlich die schnellste. OpenGL ist allerdings genauer. " -"Direct3D 11 liegt irgendwo dazwischen.\n" -"Beachte, dass die Direct3D-Backends nur auf Windows verfügbar sind.\n" -"\n" -"Im Zweifel, verwende Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Bestimmt welche Grafik-API intern verwendet wird.\n" -"Direct3D 9 ist für gewöhnlich die schnellste. OpenGL ist allerdings genauer. " -"Direct3D 11 liegt irgendwo dazwischen.\n" -"Beachte, dass die Direct3D-Backends nur auf Windows verfügbar sind.\n" -"\n" -"Im Zweifel, verwende OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Senden" @@ -4817,17 +4802,17 @@ msgstr "Position der Sensorleiste:" msgid "Separator" msgstr "Trennzeichen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbisch" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Serieller Port 1 - Dies ist der Port den Geräte wie der Net-Adapter benutzen." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Als &Standard-ISO festlegen" @@ -4836,13 +4821,13 @@ msgstr "Als &Standard-ISO festlegen" msgid "Set as default Memcard %c" msgstr "Als Standard-Speicherkarte %c auswählen" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: Der Index ist größer als die AR-Code-Listengröße %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4850,19 +4835,19 @@ msgstr "" "Bestimmt die Latenzzeit (in ms): Höhere Werte können Knistergeräusche " "reduzieren. Nur OpenAL-Backend." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Einstellungen..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Einstellungsdatei konnte nicht erstellt werden" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Schütteln" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Kurzer Name:" @@ -4886,7 +4871,7 @@ msgstr "&Statusleiste anzeigen" msgid "Show &Toolbar" msgstr "&Werkzeugleiste anzeigen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Standard anzeigen" @@ -4926,7 +4911,7 @@ msgstr "JAP anzeigen" msgid "Show Korea" msgstr "Korea anzeigen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Anzeigesprache:" @@ -4966,11 +4951,11 @@ msgstr "Wad anzeigen" msgid "Show Wii" msgstr "Wii anzeigen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Vor dem Beenden der Emulation bestätigen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4990,7 +4975,7 @@ msgstr "Ersten Block anzeigen" msgid "Show lag counter" msgstr "Lag-Zähler anzeigen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5042,23 +5027,24 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Seitwärts gerichtete Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Chinesisch (Vereinfacht)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Größe" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "BIOS überspringen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "DCBZ-Leerung überspringen" @@ -5089,11 +5075,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B:" @@ -5101,7 +5087,7 @@ msgstr "Slot B:" msgid "Snapshot" msgstr "Snapshot" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Software-Renderer" @@ -5118,27 +5104,27 @@ msgstr "" "Möchtst du wirklich Software Rendering aktivieren? Im Zweifel, wähle \"Nein" "\"." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Audio-Einstellungen" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Sound-Backend %s ist ungültig." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Erstellen des Sound-Buffers fehlgeschlagen: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Leertaste" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spanisch" @@ -5166,7 +5152,7 @@ msgstr "" "\n" "Im Zweifel, wähle 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Disc-Übertragungsrate beschleunigen" @@ -5174,13 +5160,13 @@ msgstr "Disc-Übertragungsrate beschleunigen" msgid "Square Stick" msgstr "Quadrat-Stick" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Standard-Controller" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5196,7 +5182,7 @@ msgstr "&Aufnahme starten" msgid "Start Recording" msgstr "Aufnahme starten" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Status" @@ -5204,7 +5190,7 @@ msgstr "Status" msgid "State Saves" msgstr "Status" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Lenkrad" @@ -5253,19 +5239,19 @@ msgstr "Die Datei wurde erfolgreich nach %s exportiert" msgid "Successfully imported save files" msgstr "Die gespeicherte Datei wurde erfolgreich importiert" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Schwedisch" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Schwingen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "GPU-Thread synchronisieren" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5273,12 +5259,13 @@ msgstr "" "Synchronisiert die GPU- und CPU-Threads um willkürliche Aufhänger mit Dual " "Core zu vermeiden. (AN = Kompatibilität, AUS = Geschwindigkeit)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Systemsprache:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5309,7 +5296,7 @@ msgstr "Tisch rechts" msgid "Take Screenshot" msgstr "Screenshot erstellen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5329,11 +5316,11 @@ msgstr "Texturen-Cache" msgid "Texture Format Overlay" msgstr "Texturenformat-Überlagerung" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "Die WAD-Datei wurde erfolgreich installiert" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Die Adresse ist ungültig" @@ -5341,13 +5328,13 @@ msgstr "Die Adresse ist ungültig" msgid "The checksum was successfully fixed" msgstr "Die Prüfsumme wurde erfolgreich korrigiert" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Der ausgewählte Ordner befindet sich bereits in der Liste" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5372,7 +5359,7 @@ msgstr "" "Die Datei %s wurde bereits geöffnet, der Header für die Datei wird nicht " "geschrieben." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Die angegebene Datei (%s) existiert nicht" @@ -5406,7 +5393,7 @@ msgid "The save you are trying to copy has an invalid file size" msgstr "" "Der Spielstand, den du kopieren möchtest, hat eine ungültige Dateigröße." -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5414,20 +5401,20 @@ msgstr "" "Die ausgewählte Sprache wird von Ihrem System nicht unterstützt. Kehre nun " "zum Systemstandard zurück." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "" "Die NetPlay-Version von Server und Client sind nicht zueinander kompatibel!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Der Server ist voll!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Der Server meldet: Das Spiel läuft derzeit!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Der Server sendete einen unbekannten Fehler!" @@ -5436,15 +5423,15 @@ msgstr "Der Server sendete einen unbekannten Fehler!" msgid "The specified file \"%s\" does not exist" msgstr "Die ausgewählte Datei \"%s\" existiert nicht" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Der eingegebene Wert ist ungültig" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Design:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5452,7 +5439,7 @@ msgstr "" "Es muss ein Ticket für 00000001/00000002 vorhanden sein. Ihr NAND-Dump ist " "wahrscheinlich unvollständig." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5461,7 +5448,7 @@ msgstr "" "Grau hinterlegte Kästchen bedeuten, dass die globalen Einstellungen benutzt " "werden." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5469,7 +5456,7 @@ msgstr "" "Dieser Action-Replay-Simulator unterstützt keine Codes, die Action Replay " "selbst verändern können." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Dies könnte zu Verlangsamung im Wii-Menü und einigen Spielen führen." @@ -5493,7 +5480,7 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5505,7 +5492,7 @@ msgstr "" "Alternativ kann DSP benutzt werden um den Ton zu drosseln (kann je nach " "Spiel Knistern beheben aber auch durchgehendes Rauschen verursachen)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5518,7 +5505,7 @@ msgstr "" "als einem Kern,\n" "kann aber gelegentlich Abstürze/Fehler verursachen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Erlaubt manuelles Editieren der INI-Konfigurationsdatei" @@ -5527,12 +5514,12 @@ msgstr "Erlaubt manuelles Editieren der INI-Konfigurationsdatei" msgid "Threshold" msgstr "Schwelle" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Neigung" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Titel" @@ -5567,15 +5554,16 @@ msgid "Toggle IR" msgstr "IR umschalten" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Oben" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Chinesisch (Traditionell)" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Versuchte einen unbekannten Dateityp zu laden." @@ -5595,7 +5583,7 @@ msgstr "" "Versuchte eine ungültige SYSCONF zu lesen\n" "Wiimote BT-IDs sind nicht verfügbar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Türkisch" @@ -5611,12 +5599,12 @@ msgstr "Typ" msgid "UDP Port:" msgstr "UDP-Port:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP-Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "UNBEKANNT" @@ -5625,7 +5613,7 @@ msgstr "UNBEKANNT" msgid "UNKNOWN_%02X" msgstr "UNBEKANNT_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5638,9 +5626,9 @@ msgstr "" "Eintrag nicht verändert." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5666,11 +5654,11 @@ msgstr "Speicherstand rückgängig machen" msgid "Unexpected 0x80 call? Aborting..." msgstr "Unerwarteter 0x80 Aufruf? Abbruch..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Unbekannt" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Unbekannter DVD-Befehl %08x - fataler Fehler" @@ -5685,12 +5673,12 @@ msgstr "Unbekannter Befehl 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Unbekannter Eintragstyp %i in SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Unbekannte Meldung mit ID: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5701,16 +5689,16 @@ msgstr "" msgid "Up" msgstr "Hoch" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Update" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Aufrechte Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "EuRGB60 Modus (PAL60) verwenden" @@ -5718,11 +5706,11 @@ msgstr "EuRGB60 Modus (PAL60) verwenden" msgid "Use Fullscreen" msgstr "Verwende gesamten Bildschirm" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Hex verwenden" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Warnmeldungen anzeigen" @@ -5789,11 +5777,11 @@ msgstr "Hilfsmittel" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam Speed-Hack" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Wert" @@ -5801,7 +5789,7 @@ msgstr "Wert" msgid "Value:" msgstr "Wert:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Wert: " @@ -5813,7 +5801,7 @@ msgstr "Ausführlichkeit" msgid "Vertex Streaming Hack" msgstr "Vertex-Streaming-Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Video" @@ -5821,7 +5809,7 @@ msgstr "Video" msgid "Virtual" msgstr "Virtuell" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Lautstärke" @@ -5853,15 +5841,15 @@ msgstr "" msgid "Warning" msgstr "Warnungen" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Warnung - Starte DOL im falschen Konsolenmodus!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Warnung - Starte ELF im falschen Konsolenmodus!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Warnung - Starte ISO im falschen Konsolenmodus!" @@ -5966,19 +5954,19 @@ msgstr "Breitbild-Hack" msgid "Width" msgstr "Breite" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii-Konsole" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii-NAND-Root:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii-Speicherdaten (*.bin)|*.bin" @@ -5991,12 +5979,18 @@ msgstr "WiiWAD: Konnte die Datei nicht lesen" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote angeschlossen" @@ -6028,14 +6022,14 @@ msgstr "Windows Rechts" msgid "Word Wrap" msgstr "Zeilenumbruch" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Arbeite..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Schreibe Speicherkarten (GC)" @@ -6055,21 +6049,36 @@ msgstr "In Datei ausgeben" msgid "Write to Window" msgstr "In Fenster ausgeben" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice fehlgeschlagen: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "Initialisierung von XAudio2 gescheitert: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "Erstellung von XAudio2 Master Voice fehlgeschlagen: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice fehlgeschlagen: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "Initialisierung von XAudio2 gescheitert: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "Erstellung von XAudio2 Master Voice fehlgeschlagen: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -6100,15 +6109,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Es können keine Paletten geschlossen werden, die Seiten behinhalten." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Du musst ein Spiel auswählen!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Du musst einen Namen eingeben!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Du musst eine gültige Dezimal-, Hexadezimal- oder Oktalzahl eingeben." @@ -6116,7 +6125,7 @@ msgstr "Du musst eine gültige Dezimal-, Hexadezimal- oder Oktalzahl eingeben." msgid "You must enter a valid profile name." msgstr "Du musst einen gültigen Profilnamen eingeben!" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Sie müssen Dolphin neu starten, damit die Änderungen wirksam werden." @@ -6130,7 +6139,7 @@ msgstr "" "Möchtest du die Emulation beenden um das Problem zu beheben?\n" "Wenn du \"Nein\" wählst, könnte die Audiowiedergabe verzerrt klingen." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6149,15 +6158,15 @@ msgstr "" "Erwartet wurde eine Größe von 0x%04x (aber deine ist 0x%04llx).\n" "Soll eine neue Datei generiert werden?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP-Hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3-Code wird nicht unterstützt" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Der Zero-Code ist Dolphin unbekannt: %08x" @@ -6217,29 +6226,24 @@ msgstr "" "\n" "Im Zweifel deaktiviert lassen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "Apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Lesen des Opcode aus %x. Bitte berichten." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "Unbekannte Funktion %d (%d erwartet)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "Unbekannte Meldung erhalten" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute gab beim Anwendungsstart -1 zurück!" @@ -6254,3 +6258,50 @@ msgstr "zNear-Korrektur:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| ODER" + +#~ msgid "Could not create %s" +#~ msgstr "%s konnte nicht erstellt werden" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Lokale Überbrückungen bearbeiten" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Öffnet die benutzerdefinierten Überbrückungen in einem externen " +#~ "Texteditor." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Bestimmt welche Grafik-API intern verwendet wird.\n" +#~ "Direct3D 9 ist für gewöhnlich die schnellste. OpenGL ist allerdings " +#~ "genauer. Direct3D 11 liegt irgendwo dazwischen.\n" +#~ "Beachte, dass die Direct3D-Backends nur auf Windows verfügbar sind.\n" +#~ "\n" +#~ "Im Zweifel, verwende Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Bestimmt welche Grafik-API intern verwendet wird.\n" +#~ "Direct3D 9 ist für gewöhnlich die schnellste. OpenGL ist allerdings " +#~ "genauer. Direct3D 11 liegt irgendwo dazwischen.\n" +#~ "Beachte, dass die Direct3D-Backends nur auf Windows verfügbar sind.\n" +#~ "\n" +#~ "Im Zweifel, verwende OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Lesen des Opcode aus %x. Bitte berichten." diff --git a/Languages/po/dolphin-emu.pot b/Languages/po/dolphin-emu.pot index 27a4ececa1..7613cd2f11 100644 --- a/Languages/po/dolphin-emu.pot +++ b/Languages/po/dolphin-emu.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,13 +17,13 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "" @@ -31,7 +31,7 @@ msgstr "" msgid "! NOT" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -53,12 +53,12 @@ msgstr "" msgid "%1$sCopy%1$s" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -69,26 +69,26 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card file size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -100,7 +100,7 @@ msgstr "" msgid "%s failed to open" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -110,7 +110,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "" @@ -168,11 +168,11 @@ msgstr "" msgid "&DSP Settings" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "" @@ -236,7 +236,7 @@ msgstr "" msgid "&Play" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "" @@ -280,7 +280,7 @@ msgstr "" msgid "&Wiimote Settings" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "" @@ -316,7 +316,7 @@ msgstr "" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "" @@ -332,7 +332,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "" @@ -348,7 +348,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "" @@ -360,7 +360,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -368,7 +368,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -376,13 +376,13 @@ msgstr "" msgid "A" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "" @@ -401,21 +401,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "" @@ -454,66 +455,66 @@ msgid "" "%s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " "(%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " "Fill (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " "Pointer (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" "Master codes are not needed. Do not use master codes." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "" @@ -527,11 +528,11 @@ msgstr "" msgid "Add" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "" @@ -539,9 +540,9 @@ msgstr "" msgid "Add new pane" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "" @@ -579,36 +580,36 @@ msgstr "" msgid "Advanced" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "" @@ -628,19 +629,19 @@ msgstr "" msgid "Anti-Aliasing:" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "" @@ -651,7 +652,7 @@ msgid "" "If unsure, select (off)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "" @@ -660,13 +661,13 @@ msgstr "" msgid "Are you sure you want to delete \"%s\"?" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" @@ -674,7 +675,11 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "" @@ -683,12 +688,12 @@ msgstr "" msgid "At least one pane must remain open." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "" @@ -696,7 +701,7 @@ msgstr "" msgid "AudioCommon: Error opening AO device.\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "" @@ -732,16 +737,16 @@ msgstr "" msgid "Back" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "" @@ -759,15 +764,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "" @@ -779,7 +784,7 @@ msgstr "" msgid "Basic" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "" @@ -787,7 +792,7 @@ msgstr "" msgid "Bass" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "" @@ -808,7 +813,7 @@ msgid "Blue Right" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "" @@ -817,7 +822,7 @@ msgstr "" msgid "Bound Controls: %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "" @@ -825,7 +830,7 @@ msgstr "" msgid "Browse" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "" @@ -833,11 +838,11 @@ msgstr "" msgid "Browse for an ISO directory..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "" @@ -847,7 +852,7 @@ msgstr "" msgid "Buttons" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -869,7 +874,7 @@ msgstr "" msgid "CP reg" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "" @@ -886,17 +891,17 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "" @@ -908,11 +913,11 @@ msgstr "" msgid "Cannot open %s" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -920,7 +925,7 @@ msgid "" "is not a valid gamecube memory card file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -930,7 +935,7 @@ msgstr "" msgid "Caps Lock" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "" @@ -938,7 +943,7 @@ msgstr "" msgid "Center" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "" @@ -950,11 +955,11 @@ msgstr "" msgid "Change Disc" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -968,11 +973,11 @@ msgstr "" msgid "Changes sign to zNear Parameter (after correction)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "" @@ -980,47 +985,47 @@ msgstr "" msgid "Cheat Code" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "" @@ -1028,14 +1033,14 @@ msgstr "" msgid "Choose a memory card:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "" @@ -1054,7 +1059,7 @@ msgstr "" msgid "Clear" msgstr "" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1062,7 +1067,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "" @@ -1071,11 +1076,11 @@ msgstr "" msgid "Co&nfigure..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "" @@ -1087,20 +1092,20 @@ msgstr "" msgid "Comment" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "" @@ -1118,8 +1123,8 @@ msgstr "" msgid "Configure Control" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "" @@ -1127,13 +1132,13 @@ msgstr "" msgid "Configure..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "" @@ -1147,7 +1152,7 @@ msgstr "" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "" @@ -1172,7 +1177,7 @@ msgstr "" msgid "Connect Wiimote 4" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "" @@ -1192,7 +1197,7 @@ msgstr "" msgid "Convert to GCI" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "" @@ -1201,16 +1206,11 @@ msgstr "" msgid "Copy to Memcard %c" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "" @@ -1223,12 +1223,12 @@ msgid "" "most PC DVD drives." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "" @@ -1246,27 +1246,27 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "" @@ -1298,12 +1298,12 @@ msgstr "" msgid "Crossfade" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "" @@ -1311,11 +1311,11 @@ msgstr "" msgid "Custom Projection Hack Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "" @@ -1331,20 +1331,20 @@ msgstr "" msgid "DSP" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "" @@ -1352,11 +1352,11 @@ msgstr "" msgid "DSP settings" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "" @@ -1368,15 +1368,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "" @@ -1405,16 +1405,16 @@ msgstr "" msgid "Decimal" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "" @@ -1426,7 +1426,7 @@ msgstr "" msgid "Default" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "" @@ -1468,8 +1468,8 @@ msgstr "" msgid "Device" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "" @@ -1477,15 +1477,11 @@ msgstr "" msgid "Dial" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +msgid "Direct3D" msgstr "" -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" -msgstr "" - -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1531,7 +1527,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "" @@ -1555,19 +1551,19 @@ msgstr "" msgid "Divide" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1598,9 +1594,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1624,12 +1619,12 @@ msgstr "" msgid "Dolphin FIFO" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "" @@ -1641,24 +1636,24 @@ msgstr "" msgid "Dolphin at &Google Code" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1682,11 +1677,11 @@ msgstr "" msgid "Drums" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "" @@ -1723,9 +1718,9 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "" @@ -1746,7 +1741,7 @@ msgid "" "driver." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "" @@ -1762,14 +1757,10 @@ msgstr "" msgid "Edit ActionReplay Code" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "" @@ -1778,8 +1769,8 @@ msgstr "" msgid "Edit current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "" @@ -1791,7 +1782,7 @@ msgstr "" msgid "Embedded Frame Buffer" msgstr "" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "" @@ -1818,7 +1809,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "" @@ -1836,15 +1827,15 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "" @@ -1852,27 +1843,27 @@ msgstr "" msgid "Enable Cache" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "" @@ -1880,7 +1871,7 @@ msgstr "" msgid "Enable Progressive Scan" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "" @@ -1888,7 +1879,7 @@ msgstr "" msgid "Enable Speaker Data" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "" @@ -1905,7 +1896,7 @@ msgid "" "If unsure, select 1x." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -1931,23 +1922,23 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -1960,7 +1951,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -1977,9 +1968,9 @@ msgstr "" msgid "End" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "" @@ -2002,21 +1993,20 @@ msgstr "" msgid "Entry 1/%d" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2060,7 +2050,7 @@ msgstr "" msgid "Export Failed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "" @@ -2076,7 +2066,7 @@ msgstr "" msgid "Export Save" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "" @@ -2092,7 +2082,7 @@ msgstr "" msgid "Export save as..." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "" @@ -2108,44 +2098,44 @@ msgstr "" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "" @@ -2157,15 +2147,15 @@ msgstr "" msgid "FIFO Player" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "" @@ -2173,11 +2163,15 @@ msgstr "" msgid "Failed to download codes." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2218,7 +2212,7 @@ msgstr "" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2226,13 +2220,13 @@ msgid "" "FilePosition:%llx" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2248,13 +2242,13 @@ msgstr "" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2264,7 +2258,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2275,7 +2269,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "" @@ -2297,7 +2291,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "" @@ -2309,7 +2303,7 @@ msgstr "" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "" @@ -2341,7 +2335,7 @@ msgid "" "or does not have a valid extension" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2352,7 +2346,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "" @@ -2361,11 +2355,11 @@ msgstr "" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "" @@ -2393,7 +2387,7 @@ msgstr "" msgid "Force 4:3" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "" @@ -2417,14 +2411,14 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " "setting when playing Japanese games." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2434,7 +2428,7 @@ msgstr "" msgid "Forward" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2477,7 +2471,7 @@ msgstr "" msgid "Frame S&kipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "" @@ -2489,9 +2483,9 @@ msgstr "" msgid "Free Look" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "" @@ -2524,27 +2518,27 @@ msgstr "" msgid "GX_CMD_INVL_VC" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "" @@ -2552,7 +2546,7 @@ msgstr "" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "" @@ -2561,7 +2555,7 @@ msgid "Gamecube &Pad Settings" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "" @@ -2569,12 +2563,12 @@ msgstr "" msgid "Gamecube Pad settings" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2584,7 +2578,7 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "" @@ -2593,13 +2587,13 @@ msgstr "" msgid "General Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2612,7 +2606,7 @@ msgstr "" msgid "Graphics settings" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "" @@ -2627,7 +2621,7 @@ msgid "" "If unsure, leave this checked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "" @@ -2651,11 +2645,11 @@ msgstr "" msgid "Hacks" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "" @@ -2667,7 +2661,7 @@ msgstr "" msgid "Help" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2679,7 +2673,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2709,7 +2703,7 @@ msgid "Home" msgstr "" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "" @@ -2718,11 +2712,11 @@ msgid "Hotkey Configuration" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "" @@ -2730,29 +2724,29 @@ msgstr "" msgid "Hybrid Wiimote" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "" @@ -2764,15 +2758,15 @@ msgstr "" msgid "IR Sensitivity:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "" @@ -2780,7 +2774,7 @@ msgstr "" msgid "Icon" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -2836,7 +2830,7 @@ msgid "" "but does not have a correct header" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "" @@ -2845,7 +2839,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "" @@ -2865,7 +2859,7 @@ msgstr "" msgid "Insert Encrypted or Decrypted code here..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "" @@ -2877,44 +2871,44 @@ msgstr "" msgid "Install WAD" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "" @@ -2941,7 +2935,7 @@ msgstr "" msgid "Interpreter (VERY slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "" @@ -2950,7 +2944,7 @@ msgstr "" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "" @@ -2958,16 +2952,16 @@ msgstr "" msgid "Invalid bat.map or dir entry" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -2991,34 +2985,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "" @@ -3037,8 +3033,9 @@ msgstr "" msgid "Key" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "" @@ -3056,7 +3053,7 @@ msgstr "" msgid "L-Analog" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "" @@ -3065,7 +3062,7 @@ msgstr "" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "" @@ -3097,11 +3094,11 @@ msgid "" "Middle-click to clear." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "" @@ -3193,11 +3190,11 @@ msgstr "" msgid "Load State..." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "" @@ -3241,12 +3238,12 @@ msgstr "" msgid "Logger Outputs" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "" @@ -3261,7 +3258,7 @@ msgid "" " %016llx%016llx != %016llx%016llx" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "" @@ -3275,11 +3272,11 @@ msgstr "" msgid "Main Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "" @@ -3310,7 +3307,7 @@ msgid "Memory Byte" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "" @@ -3320,7 +3317,7 @@ msgid "" "could mangle stuff!" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3331,7 +3328,7 @@ msgid "" "Would you like to copy the old file to this new location?\n" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" @@ -3339,7 +3336,7 @@ msgstr "" msgid "Menu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "" @@ -3352,7 +3349,7 @@ msgstr "" msgid "Misc" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "" @@ -3373,11 +3370,11 @@ msgstr "" msgid "Monospaced font" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "" @@ -3489,15 +3486,15 @@ msgstr "" msgid "NP Up" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "" @@ -3507,7 +3504,7 @@ msgstr "" msgid "Native GCI files(*.gci)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "" @@ -3516,7 +3513,7 @@ msgstr "" msgid "Next Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "" @@ -3524,11 +3521,11 @@ msgstr "" msgid "Nickname :" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "" @@ -3567,24 +3564,25 @@ msgstr "" msgid "No save folder found for title %s" msgstr "" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "" @@ -3593,11 +3591,11 @@ msgstr "" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "" @@ -3618,7 +3616,7 @@ msgstr "" msgid "Num Lock" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "" @@ -3639,7 +3637,7 @@ msgstr "" msgid "Object Range" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "" @@ -3647,7 +3645,7 @@ msgstr "" msgid "Offset:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "" @@ -3665,11 +3663,11 @@ msgstr "" msgid "Open" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "" @@ -3699,17 +3697,13 @@ msgstr "" msgid "OpenMP Texture Decoder" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "" @@ -3730,7 +3724,7 @@ msgstr "" msgid "Other" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3744,11 +3738,11 @@ msgstr "" msgid "P&lay Recording..." msgstr "" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "" @@ -3772,26 +3766,26 @@ msgstr "" msgid "Parameters" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "" @@ -3804,7 +3798,7 @@ msgstr "" msgid "Per-Pixel Lighting" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "" @@ -3815,8 +3809,8 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "" @@ -3828,7 +3822,7 @@ msgstr "" msgid "Play/Pause" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "" @@ -3836,11 +3830,11 @@ msgstr "" msgid "Playback Options" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "" @@ -3852,36 +3846,36 @@ msgstr "" msgid "Plus-Minus" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "" @@ -3894,7 +3888,7 @@ msgstr "" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -3916,7 +3910,7 @@ msgstr "" msgid "Previous Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "" @@ -3940,8 +3934,8 @@ msgstr "" msgid "Question" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "" @@ -3963,7 +3957,7 @@ msgstr "" msgid "RAM" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "" @@ -4002,7 +3996,7 @@ msgstr "" msgid "Record" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4049,10 +4043,10 @@ msgstr "" msgid "Refresh game list" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "" @@ -4072,7 +4066,7 @@ msgstr "" msgid "Reset" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "" @@ -4080,7 +4074,7 @@ msgstr "" msgid "Return" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4093,17 +4087,17 @@ msgstr "" msgid "Right Stick" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "" @@ -4177,12 +4171,12 @@ msgstr "" msgid "Save State..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "" @@ -4190,7 +4184,7 @@ msgstr "" msgid "Save current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "" @@ -4203,16 +4197,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "" @@ -4228,11 +4222,11 @@ msgstr "" msgid "Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "" @@ -4255,12 +4249,12 @@ msgstr "" msgid "Select" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "" @@ -4279,19 +4273,19 @@ msgstr "" msgid "Select floating windows" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "" @@ -4306,7 +4300,7 @@ msgid "" "If unsure, select Auto." msgstr "" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "" @@ -4324,27 +4318,28 @@ msgid "" "If still unsure, use the highest resolution which works for you." msgstr "" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "" @@ -4356,16 +4351,16 @@ msgstr "" msgid "Separator" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "" @@ -4374,30 +4369,30 @@ msgstr "" msgid "Set as default Memcard %c" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "" -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "" @@ -4421,7 +4416,7 @@ msgstr "" msgid "Show &Toolbar" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4461,7 +4456,7 @@ msgstr "" msgid "Show Korea" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "" @@ -4501,11 +4496,11 @@ msgstr "" msgid "Show Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4520,7 +4515,7 @@ msgstr "" msgid "Show lag counter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4562,23 +4557,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4602,11 +4598,11 @@ msgstr "" msgid "Slot %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "" @@ -4614,7 +4610,7 @@ msgstr "" msgid "Snapshot" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "" @@ -4626,27 +4622,27 @@ msgid "" "Do you really want to enable software rendering? If unsure, select 'No'." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 #, c-format -msgid "Sound buffer creation failed: %s" +msgid "Sound buffer creation failed: %08x" msgstr "" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "" @@ -4666,7 +4662,7 @@ msgid "" "If unsure, select 640x528." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "" @@ -4674,13 +4670,13 @@ msgstr "" msgid "Square Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "" @@ -4696,7 +4692,7 @@ msgstr "" msgid "Start Recording" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "" @@ -4704,7 +4700,7 @@ msgstr "" msgid "State Saves" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "" @@ -4748,30 +4744,31 @@ msgstr "" msgid "Successfully imported save files" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "" @@ -4802,7 +4799,7 @@ msgstr "" msgid "Take Screenshot" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "" @@ -4822,11 +4819,11 @@ msgstr "" msgid "Texture Format Overlay" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "" @@ -4834,13 +4831,13 @@ msgstr "" msgid "The checksum was successfully fixed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -4859,7 +4856,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "" @@ -4888,25 +4885,25 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "" @@ -4915,33 +4912,33 @@ msgstr "" msgid "The specified file \"%s\" does not exist" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" @@ -4957,7 +4954,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -4965,7 +4962,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -4973,7 +4970,7 @@ msgid "" "cause occasional crashes/glitches." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "" @@ -4982,12 +4979,12 @@ msgstr "" msgid "Threshold" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "" @@ -5022,15 +5019,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "" @@ -5048,7 +5046,7 @@ msgid "" "Wiimote bt ids are not available" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "" @@ -5064,12 +5062,12 @@ msgstr "" msgid "UDP Port:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "" @@ -5078,7 +5076,7 @@ msgstr "" msgid "UNKNOWN_%02X" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "" @@ -5091,7 +5089,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 #, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5113,11 +5111,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "" @@ -5132,12 +5130,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5147,16 +5145,16 @@ msgstr "" msgid "Up" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "" @@ -5164,11 +5162,11 @@ msgstr "" msgid "Use Fullscreen" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "" @@ -5214,11 +5212,11 @@ msgstr "" msgid "V-Sync" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "" @@ -5226,7 +5224,7 @@ msgstr "" msgid "Value:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "" @@ -5238,7 +5236,7 @@ msgstr "" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "" @@ -5246,7 +5244,7 @@ msgstr "" msgid "Virtual" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "" @@ -5274,15 +5272,15 @@ msgstr "" msgid "Warning" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "" @@ -5355,19 +5353,19 @@ msgstr "" msgid "Width" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "" @@ -5380,12 +5378,17 @@ msgstr "" msgid "Wiimote" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +msgid "Wiimote " +msgstr "" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "" @@ -5417,14 +5420,14 @@ msgstr "" msgid "Word Wrap" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5444,21 +5447,36 @@ msgstr "" msgid "Write to Window" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "" @@ -5484,15 +5502,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "" @@ -5500,7 +5518,7 @@ msgstr "" msgid "You must enter a valid profile name." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "" @@ -5511,7 +5529,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5525,15 +5543,15 @@ msgid "" "Do you want to generate a new one?" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "" @@ -5575,29 +5593,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "" - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "" diff --git a/Languages/po/el.po b/Languages/po/el.po index 1e08f1b8b6..eedb444914 100644 --- a/Languages/po/el.po +++ b/Languages/po/el.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-18 14:27+0000\n" "Last-Translator: link_to_the_past \n" "Language-Team: Greek (http://www.transifex.com/projects/p/dolphin-emu/" @@ -21,13 +21,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(πολλά αποτελέσματα για να εμφανιστούν)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Παιχνίδι : " @@ -35,7 +35,7 @@ msgstr "Παιχνίδι : " msgid "! NOT" msgstr "! NOT" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -60,12 +60,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sΑντιγραφή%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d δείγματα" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d δείγματα (επίπεδο ποιότητας %d)" @@ -76,13 +76,13 @@ msgstr "%d δείγματα (επίπεδο ποιότητας %d)" msgid "%s already exists, overwrite?" msgstr "%s υπάρχει ήδη, θέλετε αντικατάσταση;" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" "%s απέτυχε να γίνει scrubbed. Πιθανότατα το αρχείο εικόνας είναι φθαρμένο." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -91,7 +91,7 @@ msgstr "" "%s απέτυχε να φορτώσει ως κάρτα μνήμης\n" " Το μέγεθος του αρχείου της κάρτας δεν είναι έγκυρο (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -100,7 +100,7 @@ msgstr "" "%s απέτυχε να φορτώσει ως κάρτα μνήμης\n" " Το μέγεθος της κάρτας δεν είναι έγκυρο (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -115,7 +115,7 @@ msgstr "" msgid "%s failed to open" msgstr "αποτυχία ανοίγματος %s" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s απέτυχε: kr=%x" @@ -125,7 +125,7 @@ msgstr "%s απέτυχε: kr=%x" msgid "%s is a 0 byte file" msgstr "Το %s είναι ένα αρχείο με 0 byte" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "Το %s είναι ήδη συμπιεσμένο! Δε γίνεται να συμπιεστεί περαιτέρω." @@ -185,11 +185,11 @@ msgstr "&Διαχειριστής Cheat" msgid "&DSP Settings" msgstr "&Ρυθμίσεις DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Διαγραφή ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Διαγραφή επιλεγμένων ISO..." @@ -253,7 +253,7 @@ msgstr "&Παύση" msgid "&Play" msgstr "&Αναπαραγωγή" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Ιδιότητες" @@ -297,7 +297,7 @@ msgstr "&Προβολή" msgid "&Wiimote Settings" msgstr "&Ρυθμίσεις Wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -333,7 +333,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Αρχική (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -349,7 +349,7 @@ msgstr "2.5x Αρχική (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Αρχική (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -365,7 +365,7 @@ msgstr "3x Αρχική (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Αρχική (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -377,7 +377,7 @@ msgstr "<Εισάγετε όνομα εδώ>" msgid "" msgstr "<Δε βρέθηκαν αναλύσεις>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "<Τίποτα>" @@ -385,7 +385,7 @@ msgstr "<Τίποτα>" msgid "" msgstr "<Πατήστε Πλήκτρο>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<Συστήματος>" @@ -393,13 +393,13 @@ msgstr "<Συστήματος>" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Ένα παράθυρο NetPlay είναι ήδη ανοιχτό!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Αυτή τη στιγμή δεν εκτελείται κάποιο παιχνίδι." @@ -412,6 +412,7 @@ msgstr "" "Θα πρέπει να συνδέσετε χειροκίνητα τα wiimotes." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -420,10 +421,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -443,13 +445,13 @@ msgstr "" "\n" "Ο host θα πρέπει να έχει την επιλεγμένη TCP port ανοιχτή/προωθημένη!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Κωδικοί AR" @@ -498,7 +500,7 @@ msgstr "" "Προβληματικός Κωδικός:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -506,7 +508,7 @@ msgstr "" "Σφάλμα Action Replay: Μη έγκυρο μέγεθος (%08x : διεύθυνση = %08x) στην " "Προσθήκη Κωδικού (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -515,7 +517,7 @@ msgstr "" "Σφάλμα Action Replay: Μη έγκυρο μέγεθος (%08x : διεύθυνση = %08x) σε Fill " "και Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -524,7 +526,7 @@ msgstr "" "Σφάλμα Action Replay: Μη έγκυρο μέγεθος (%08x : διεύθυνση = %08x) σε Ram " "Write και Fill (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -533,12 +535,12 @@ msgstr "" "Σφάλμα Action Replay: Μη έγκυρο μέγεθος (%08x : διεύθυνση = %08x) σε Write " "To Pointer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Σφάλμα Action Replay: Μη έγκυρη τιμή (%08x) σε Memory Copy (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -548,27 +550,27 @@ msgstr "" "έχουν υλοποιηθεί (%s)\n" "Δεν χρειάζονται master codes. Μην χρησιμοποιείτε master codes." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Σφάλμα Action Replay: μη έγκυρη γραμμή κώδικα AR: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Conditional Code: Μη έγκυρο μέγεθος %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Μη έγκυρος Normal Code Type %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normal Code %i: Μη έγκυρο subtype %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Code 0: Μη έγκυρο Subtype %08x (%s)" @@ -582,11 +584,11 @@ msgstr "Προσαρμογέας:" msgid "Add" msgstr "Προσθήκη" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Προσθήκη Κωδικού ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Προσθήκη Patch" @@ -594,9 +596,9 @@ msgstr "Προσθήκη Patch" msgid "Add new pane" msgstr "Προσθήκη νέου pane" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Προσθήκη..." @@ -636,36 +638,36 @@ msgstr "" msgid "Advanced" msgstr "Για προχωρημένους" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Ρυθμίσεις για Προχωρημένους" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Όλα τα αρχεία GC/Wii (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Όλες οι εικόνες GC/Wii (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Όλα τα αρχεία Gamecube GCM (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Όλα τα Σημεία Αποθήκευσης(sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Όλα τα αρχεία Wii ISO (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Όλα τα συμπιεσμένα αρχεία GC/Wii ISO (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Όλα τα αρχεία (*.*)|*.*" @@ -685,19 +687,19 @@ msgstr "Ανισοτροπικό Φιλτράρισμα:" msgid "Anti-Aliasing:" msgstr "Εξομάλυνση Ορίων:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Ο Apploader έχει λάθος μέγεθος... είναι πράγματι apploader;" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Ο Apploader απέτυχε να φορτωθεί από αρχείο" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Εφαρμογή" @@ -711,7 +713,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, επιλέξτε (ανενεργό)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Αραβικά" @@ -720,7 +722,7 @@ msgstr "Αραβικά" msgid "Are you sure you want to delete \"%s\"?" msgstr "Είστε σίγουροι ότι θέλετε να διαγράψετε το \"%s\";" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -728,7 +730,7 @@ msgstr "" "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτά τα αρχεία;\n" "Θα εξαφανιστούν για πάντα!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το αρχείο; Θα εξαφανιστεί για " @@ -738,7 +740,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "Arm JIT (πειραματικός)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (πειραματικός)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Αναλογία Οθόνης:" @@ -747,12 +754,12 @@ msgstr "Αναλογία Οθόνης:" msgid "At least one pane must remain open." msgstr "Τουλάχιστον ένα pane πρέπει να μένει ανοιχτό." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Ήχος" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Backend Ήχου:" @@ -760,7 +767,7 @@ msgstr "Backend Ήχου:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Σφάλμα ανοίγματος AO συσκευής.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Αυτόματα" @@ -800,16 +807,16 @@ msgstr "BP Καταχωρητές" msgid "Back" msgstr "Πίσω" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Backend Ρυθμίσεις" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Backend:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Χειρισμός με Ανεστίαστο Παραθ." @@ -827,15 +834,15 @@ msgid "Balance Board" msgstr "Σανίδα Ισορροπίας" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Εικονίδιο" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Λεπτομέρειες Εικονιδίου:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Εικονίδιο:" @@ -847,7 +854,7 @@ msgstr "Bar" msgid "Basic" msgstr "Βασικές" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Βασικές Ρυθμίσεις" @@ -855,7 +862,7 @@ msgstr "Βασικές Ρυθμίσεις" msgid "Bass" msgstr "Μπάσο" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Αποτυχία ελέγχου checksum για τον BAT" @@ -876,7 +883,7 @@ msgid "Blue Right" msgstr "Δεξί Μπλε" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Βάση" @@ -885,7 +892,7 @@ msgstr "Βάση" msgid "Bound Controls: %lu" msgstr "Δεσμευμένοι Χειρισμοί: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Χαλασμένο" @@ -893,7 +900,7 @@ msgstr "Χαλασμένο" msgid "Browse" msgstr "Εύρεση" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Εύρεση φακέλου για προσθήκη" @@ -901,11 +908,11 @@ msgstr "Εύρεση φακέλου για προσθήκη" msgid "Browse for an ISO directory..." msgstr "Εύρεση φακέλου ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Εύρεση φακέλου προορισμού" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -915,7 +922,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Κουμπιά" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -939,7 +946,7 @@ msgstr "Stick Κάμερας" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Μηχανή Εξομοίωσης CPU" @@ -962,17 +969,17 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Αδυναμία εύρεσης του WiiMote με handle σύνδεσης %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Αδυναμία ανάγνωσης από το DVD_Plugin - DVD-Interface: Κρίσιμο Σφάλμα" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Άκυρο" @@ -984,12 +991,12 @@ msgstr "Άκυρο" msgid "Cannot open %s" msgstr "Αποτυχία ανοίγματος %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "" "Δεν μπορεί να γίνει κατάργηση καταχώρησης συμβάντων όταν ορισμένα εκκρεμούν." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1000,7 +1007,7 @@ msgstr "" "%s\n" "δεν είναι έγκυρο αρχείο κάρτας μνήμης gamecube" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1012,7 +1019,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Καταλανικά" @@ -1020,7 +1027,7 @@ msgstr "Καταλανικά" msgid "Center" msgstr "Κέντρο" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Αλλαγή" @@ -1032,11 +1039,11 @@ msgstr "Αλλαγή &Δίσκου..." msgid "Change Disc" msgstr "Αλλαγή Δίσκου" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Αλλαγή Παιχνιδιού" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1052,11 +1059,11 @@ msgstr "Αλλαγή προσήμου της παραμέτρου zFar (μετά msgid "Changes sign to zNear Parameter (after correction)" msgstr "Αλλαγή προσήμου της παραμέτρου zNear (μετά την διόρθωση)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Αυτή η αλλαγή δε θα έχει επίπτωση όσο ο εξομοιωτής εκτελείται!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Συνομιλία" @@ -1064,47 +1071,47 @@ msgstr "Συνομιλία" msgid "Cheat Code" msgstr "Κωδικός Cheat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Αναζήτηση Cheat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Διαχείριση Cheat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Έλεγχος Ακεραιότητας Κατάτμησης" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Έλεγχος ακεραιότητας..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Κινέζικα (Απλοποιημένα)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Επιλέξτε έναν φάκελο ρίζας DVD:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Επιλέξτε έναν φάκελο ρίζας NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Επιλέξτε ένα προεπιλεγμένο ISO:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Επιλέξτε έναν φάκελο για προσθήκη" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Επιλέξτε ένα αρχείο για άνοιγμα" @@ -1112,7 +1119,7 @@ msgstr "Επιλέξτε ένα αρχείο για άνοιγμα" msgid "Choose a memory card:" msgstr "Επιλέξτε μια κάρτα μνήμης:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1120,8 +1127,8 @@ msgstr "" "Επιλέξτε ένα αρχείο για χρήση ως apploader: (έχει εφαρμογή σε δίσκους που " "απαρτίζονται μόνο από φακέλους)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Επιλέξτε τον φάκελο προς αποσυμπίεση" @@ -1140,7 +1147,7 @@ msgstr "Κλασικό Χειριστήριο" msgid "Clear" msgstr "Καθάρισ." -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1150,7 +1157,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Κλείσιμο" @@ -1159,11 +1166,11 @@ msgstr "Κλείσιμο" msgid "Co&nfigure..." msgstr "Ρυ&θμίσεις..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Πληροφορίες Κωδικού" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Κωδικός: " @@ -1175,20 +1182,20 @@ msgstr "Εντολή" msgid "Comment" msgstr "Σχόλιο" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Σχόλιο:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Συμπίεση ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Συμπίεση επιλεγμένων ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Συμπίεση ISO" @@ -1206,8 +1213,8 @@ msgstr "Ρυθμίσεις" msgid "Configure Control" msgstr "Ρυθμίσεις Χειριστηρίου" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Ρυθμίσεις Χειριστηρίων" @@ -1215,13 +1222,13 @@ msgstr "Ρυθμίσεις Χειριστηρίων" msgid "Configure..." msgstr "Γενικές Ρυθμίσεις..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Επιβεβαίωση Αντικατάστασης Αρχείου" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Επιβεβαίωση Διακοπής" @@ -1235,7 +1242,7 @@ msgstr "Σύνδεση" msgid "Connect Balance Board" msgstr "Σύνδεση Σανίδας Ισορροπίας" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Σύνδεση Πληκτρολογίου USB" @@ -1260,7 +1267,7 @@ msgstr "Σύνδεση Wiimote 3" msgid "Connect Wiimote 4" msgstr "Σύνδεση Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Γίνεται Σύνδεση..." @@ -1280,7 +1287,7 @@ msgstr "Χειριστήριο" msgid "Convert to GCI" msgstr "Μετατροπή σε GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Η αντιγραφή απέτυχε" @@ -1289,16 +1296,11 @@ msgstr "Η αντιγραφή απέτυχε" msgid "Copy to Memcard %c" msgstr "Αντιγραφή στην κάρτα μνήμης %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Πυρήνας" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Αποτυχία δημιουργίας %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Αποτυχία εκκίνησης backend %s" @@ -1315,12 +1317,12 @@ msgstr "" " Σημειώστε πως αυθεντικοί Gamecube και Wii δίσκοι δεν μπορούν να αναγνωστούν " "από τους περισσότερους PC DVD οδηγούς." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Αποτυχία αναγνώρισης του αρχείου ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Αποτυχία αποθήκευσης του %s" @@ -1346,11 +1348,11 @@ msgstr "" "Άμα ναι, τότε μπορεί να χρειαστεί να ορίσετε ξανά την θέση της κάρτας μνήμης " "στις ρυθμίσεις." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Αδυναμία εύρεσης εντολής ανοίγματος για την επέκταση 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1358,17 +1360,17 @@ msgstr "" "Αδυναμία εκκίνησης του πυρήνα.\n" "Ελέξγτε τις ρυθμίσεις σας." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Πλήθος:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Χώρα:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Δημιουργία Κωδικού AR" @@ -1403,12 +1405,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Ο τρέχων φάκελος άλλαξε από %s σε %s μετά από τον wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Προσαρμοζόμενο Projection Hack" @@ -1416,11 +1418,11 @@ msgstr "Προσαρμοζόμενο Projection Hack" msgid "Custom Projection Hack Settings" msgstr "Ρυθμίσεις Προσαρμοζόμενου Projection Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Προσαρμόστε ορισμένες παραμέτρους Ορθογραφικής Προβολής." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Τσέχικα" @@ -1436,20 +1438,20 @@ msgstr "Ψηφιακό Pad" msgid "DSP" msgstr "Ήχος (DSP)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Μηχανή Εξομοίωσης DSP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE εξομοίωση (γρήγορη)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE interpreter (αργή)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE recompiler" @@ -1457,11 +1459,11 @@ msgstr "DSP LLE recompiler" msgid "DSP settings" msgstr "Ρυθμίσεις ήχου (DSP)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE σε Ξεχωριστό Νήμα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Ρίζα DVD:" @@ -1474,15 +1476,15 @@ msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" "DVDLowUnencryptedRead - Σφάλμα Τερματισμού: αποτυχία ανάγνωσης από τον τομέα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Χαλάκι Χορού" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Μέγεθος Δεδομένων" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Ημερομηνία:" @@ -1511,16 +1513,16 @@ msgstr "Debugging" msgid "Decimal" msgstr "Δεκαδικός" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Αποσυμπίεση ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Αποσυμπίεση επιλεγμένων ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Γίνεται αποσυμπίεση ISO" @@ -1532,7 +1534,7 @@ msgstr "Μείωση Ορίου Καρέ" msgid "Default" msgstr "Προεπιλ." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Προεπιλεγμένο ISO:" @@ -1576,8 +1578,8 @@ msgstr "" msgid "Device" msgstr "Συσκευή" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Ρυθμίσεις Συσκευής" @@ -1585,15 +1587,12 @@ msgstr "Ρυθμίσεις Συσκευής" msgid "Dial" msgstr "Dial" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1657,7 +1656,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Δίσκος" @@ -1684,20 +1683,20 @@ msgstr "" msgid "Divide" msgstr "Divide" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Θέλετε να σταματήσετε την τρέχουσα εξομοίωση;" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II αποκωδικοποιητής" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1727,9 +1726,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1785,12 +1783,12 @@ msgstr "Ρυθμίσεις Εξομοιωμένου Dolphin Wiimote" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Ρυθμίσεις Dolphin GCPad" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS Ταινίες (*.dtm)" @@ -1802,7 +1800,7 @@ msgstr "Ρυθμίσεις Dolphin Wiimote" msgid "Dolphin at &Google Code" msgstr "Dolphin στο &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1810,7 +1808,7 @@ msgstr "" "Το Dolphin δεν μπόρεσε να βρει GC/Wii ISO. Κάντε διπλό κλίκ εδώ για εύρεση " "αρχείων..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1818,12 +1816,12 @@ msgstr "" "Το Dolphin είναι ρυθμισμένο να αποκρύπτει όλα τα παιχνίδια. Κάντε διπλό κλίκ " "εδώ για να εμφανιστούν όλα τα παιχνίδια..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Το Dolphin δεν μπόρεσε να ολοκληρώσει την ζητούμενη ενέργεια." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1849,11 +1847,11 @@ msgstr "Μεταφορτώθηκαν %lu κωδικοί. (προστέθηκαν msgid "Drums" msgstr "Τύμπανα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Dummy" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Εξαγωγή Ήχου" @@ -1901,9 +1899,9 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Ολλανδικά" @@ -1928,7 +1926,7 @@ msgstr "" "Dolphin σας, πιθανότατα απαιτείται μία επανεκκίνηση ώστε τα Windows να δούνε " "τους νέους οδηγούς." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "ΕΥΡΩΠΗ" @@ -1944,14 +1942,10 @@ msgstr "Επεξεργασία" msgid "Edit ActionReplay Code" msgstr "Επεξεργασία Κωδικού ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Επεξεργασία Ρυθμίσεων" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Επεξεργασία Τοπικών Ρυθμίσεων" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Επεξεργασία Patch" @@ -1960,8 +1954,8 @@ msgstr "Επεξεργασία Patch" msgid "Edit current perspective" msgstr "Επεξεργασία τρέχουσας οπτικής" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Επεξεργασία..." @@ -1973,7 +1967,7 @@ msgstr "Εφέ" msgid "Embedded Frame Buffer" msgstr "Embedded Frame Buffer" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Το νήμα εξομοίωσης εκτελείται ήδη" @@ -2012,7 +2006,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Εξομοιωμένο Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Κατάσταση Λειτουργίας:" @@ -2036,15 +2030,15 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Ενεργοποίηση Καταγραφής AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Ενεργοποίηση Block Merging" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Ενεργοποίηση Bounding Box Υπολογισμών" @@ -2052,27 +2046,27 @@ msgstr "Ενεργοποίηση Bounding Box Υπολογισμών" msgid "Enable Cache" msgstr "Ενεργοποίηση Cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Ενεργοποίηση Cheat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Ενεργοποίηση Διπλού Πυρήνα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Ενεργοποίηση Διπλού Πυρήνα (επιτάχυνση)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Ενεργοποίηση Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Ενεργοποίηση Idle Skipping (επιτάχυνση)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Ενεργοποίηση MMU" @@ -2080,7 +2074,7 @@ msgstr "Ενεργοποίηση MMU" msgid "Enable Progressive Scan" msgstr "Ενεργοποίηση Προοδευτικής Σάρωσης" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Ενεργοποίηση Προφύλαξης Οθόνης" @@ -2088,7 +2082,7 @@ msgstr "Ενεργοποίηση Προφύλαξης Οθόνης" msgid "Enable Speaker Data" msgstr "Ενεργοποίηση Δεδομένων Ηχείου" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Ενεργοποίηση Ευρείας Οθόνης" @@ -2111,7 +2105,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, επιλέξτε 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2148,7 +2142,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2156,11 +2150,11 @@ msgstr "" "Ενεργοποιήστε το για να επιταχύνετε το The Legend of Zelda: Twilight " "Princess. Απενεργοποιήστε το για τα υπόλοιπα παιχνίδια." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Ενεργοποιεί το Προσαρμοζόμενο Projection Hack" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2168,7 +2162,7 @@ msgstr "" "Ενεργοποιεί την Dolby Pro Logic II εξομοίωση χρησιμοποιώντας 5.1 surround. " "Δεν διατίθεται για OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2187,7 +2181,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2209,9 +2203,9 @@ msgstr "" msgid "End" msgstr "Τέλος" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Αγγλικά" @@ -2234,23 +2228,22 @@ msgstr "Εγγραφή %d/%d" msgid "Entry 1/%d" msgstr "Εγγραφή 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Ίσο" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Σφάλμα" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Αποτυχία φόρτωσης της επιλεγμένης γλώσσας. Επαναφορά στην προεπιλογή " "συστήματος." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2300,7 +2293,7 @@ msgstr "Εξαγωγή Όλων Των Αποθηκεύσεων Wii" msgid "Export Failed" msgstr "Αποτυχία Εξαγωγής" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Εξαγωγή Αρχείου" @@ -2316,7 +2309,7 @@ msgstr "Εξαγωγή Εγγραφής..." msgid "Export Save" msgstr "Εξαγωγή Αποθήκευσης" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Εξαγωγή Αποθήκευσης Wii (Πειραματικό)" @@ -2332,7 +2325,7 @@ msgstr "Αποτυχία εξαγωγής" msgid "Export save as..." msgstr "Εξαγωγή αποθήκευσης ως..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Επέκταση" @@ -2348,44 +2341,44 @@ msgstr "Επιπλέον Παράμετρος" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Η Επιπλέον Παράμετρος είναι χρήσιμη μόνο στο ''Metroid: Other M''." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Εξαγωγή όλων των αρχείων..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Εξαγωγή Apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Εξαγωγή DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Εξαγωγή Φακέλου..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Εξαγωγή Αρχείου..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Εξαγωγή Κατάτμησης..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Γίνεται εξαγωγή %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Γίνεται εξαγωγή όλων των αρχείων" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Γίνεται εξαγωγή φακέλου" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Γίνεται εξαγωγή..." @@ -2397,15 +2390,15 @@ msgstr "FIFO Byte" msgid "FIFO Player" msgstr "Αναπαραγωγή FIFO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "ΓΑΛΛΙΑ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Μέγεθος FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Αποτυχία σύνδεσης!" @@ -2413,11 +2406,15 @@ msgstr "Αποτυχία σύνδεσης!" msgid "Failed to download codes." msgstr "Αποτυχία μεταφόρτωσης κωδικών." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Αποτυχία εξαγωγής στο %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2472,7 +2469,7 @@ msgstr "Αποτυχία ανάγνωσης banner.bin" msgid "Failed to read bk header" msgstr "Αποτυχία ανάγνωσης της κεφαλίδας bk" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2483,7 +2480,7 @@ msgstr "" "Μπορεί να έχουν περικοπεί τα δεδομένα στην κάρτα μνήμης\n" "Θέση αρχείου:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2491,7 +2488,7 @@ msgstr "" "Αποτυχία σωστής ανάγνωσης του αντιγράφου ασφαλείας του BAT\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2509,7 +2506,7 @@ msgstr "Αποτυχία ανάγνωσης δεδομένων από το αρ msgid "Failed to read data from file: %s" msgstr "Αποτυχία ανάγνωσης δεδομένων από το αρχείο: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2517,7 +2514,7 @@ msgstr "" "Αποτυχία σωστής ανάγνωσης του αντιγράφου ασφαλείας των φακέλων\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2529,7 +2526,7 @@ msgstr "" msgid "Failed to read header" msgstr "Αποτυχία ανάγνωσης κεφαλίδας" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2542,7 +2539,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Αποτυχία ανάγνωσης της κεφαλίδας για το αρχείο %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Αποτυχία ανάγνωσης μοναδικού ID από την εικόνα δίσκου" @@ -2564,7 +2561,7 @@ msgstr "Αποτυχία εγγραφής δεδομένων στο αρχείο msgid "Failed to write header for %s" msgstr "Αποτυχία εγγραφής της κεφαλίδας για το %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Περσικά" @@ -2576,7 +2573,7 @@ msgstr "Γρήγορη" msgid "Fast Depth Calculation" msgstr "Γρήγορος Υπολογισμός Βάθους" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Γρήγορη έκδοση του MMU. Δε δουλεύει για όλα τα παιχνίδια." @@ -2612,7 +2609,7 @@ msgstr "" "Το αρχείο απέτυχε στο άνοιγμα\n" "ή δεν έχει έγκυρη επέκταση" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2625,7 +2622,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Το αρχείο δεν αναγνωρίζεται σαν κάρτα μνήμης" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Το αρχείο δεν είναι συμπιεσμένο" @@ -2634,11 +2631,11 @@ msgstr "Το αρχείο δεν είναι συμπιεσμένο" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Άγνωστη λειτουργία ανοίγματος : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Αρχεία δίσκου" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Ο τύπος αρχείου 'ini' είναι άγνωστος! Δε θα γίνει άνοιγμα!" @@ -2666,7 +2663,7 @@ msgstr "Επιβολή 16:9" msgid "Force 4:3" msgstr "Επιβολή 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Επιβολή της Κονσόλας ως NTSC-J" @@ -2699,7 +2696,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2710,7 +2707,7 @@ msgstr "" "Άμα αφεθεί αποεπιλεγμένο, το dolphin προεπιλέγει τη NTSC-U και ενεργοποιεί " "αυτόματα αυτήν την ρύθμιση όταν παίζονται Ιαπωνικά παιχνίδια." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2722,7 +2719,7 @@ msgstr "" msgid "Forward" msgstr "Μπροστά" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Προώθηση θύρας (UPnP)" @@ -2765,7 +2762,7 @@ msgstr "Εύρος Καρέ" msgid "Frame S&kipping" msgstr "Παράλειψη Κ&αρέ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Περιορισμός Καρέ:" @@ -2777,9 +2774,9 @@ msgstr "Καρέ Προς Εγγραφή" msgid "Free Look" msgstr "Ελεύθερη Ματιά" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Γαλλικά" @@ -2812,27 +2809,27 @@ msgstr "GCPad" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID Παιχνιδιού:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Το παιχνίδι εκτελείται ήδη!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Το παιχνίδι δεν εκτελείται!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Το παιχνίδι δεν βρέθηκε!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Ρυθμίσεις Συγκεκριμένου Παιχνιδιού" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Ρυθμίσεις Παιχνιδιού" @@ -2840,7 +2837,7 @@ msgstr "Ρυθμίσεις Παιχνιδιού" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube αρχεία αποθήκευσης(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2849,7 +2846,7 @@ msgid "Gamecube &Pad Settings" msgstr "Ρυθμίσεις Gamecube &Pad" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Κάρτες Μνήμης Gamecube (*.raw,*.gcp)" @@ -2857,12 +2854,12 @@ msgstr "Κάρτες Μνήμης Gamecube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Ρυθμίσεις Χειριστηρίου Gamecube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Κωδικοί Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2876,7 +2873,7 @@ msgstr "" "codehandler.bin αρχείο στον φάκελο Sys και επανεκκινώντας το Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Γενικά" @@ -2885,13 +2882,13 @@ msgstr "Γενικά" msgid "General Settings" msgstr "Γενικές Ρυθμίσεις" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Γερμανικά" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2906,7 +2903,7 @@ msgstr "Γραφικά" msgid "Graphics settings" msgstr "Ρυθμίσεις Γραφικών" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Μεγαλύτερο από" @@ -2928,7 +2925,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το επιλεγμένο." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Ελληνικά" @@ -2952,11 +2949,11 @@ msgstr "Κιθάρα" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Αποτυχία ελέγχου κεφαλίδας" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Εβραϊκά" @@ -2968,7 +2965,7 @@ msgstr "Ύψος" msgid "Help" msgstr "Βοήθεια" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2990,7 +2987,7 @@ msgstr "" "\n" "Αντίο!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3030,7 +3027,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -3039,11 +3036,11 @@ msgid "Hotkey Configuration" msgstr "Ρυθμίσεις Πλήκτρων Συντόμευσης" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Πλήκτρα Συντόμευσης" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Ουγγρικά" @@ -3051,18 +3048,18 @@ msgstr "Ουγγρικά" msgid "Hybrid Wiimote" msgstr "Υβριδικό Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Απόπειρα ανάγνωσης δεδομένων από ένα άγνωστο εισιτήριο: " "%08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3071,15 +3068,15 @@ msgstr "" "TitleID %016llx.\n" "Το Dolphin πιθανότατα θα κολλήσει τώρα." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - μη έγκυρος προορισμός" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Ρυθμίσεις IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3091,15 +3088,15 @@ msgstr "Δείκτης IR" msgid "IR Sensitivity:" msgstr "Ευαισθησία IR:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Λεπτομέρειες ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Φάκελοι ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ΙΤΑΛΙΑ" @@ -3107,7 +3104,7 @@ msgstr "ΙΤΑΛΙΑ" msgid "Icon" msgstr "Εικονίδιο" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3180,7 +3177,7 @@ msgstr "" "Το εισαγώμενο αρχείο έχει sav επέκταση\n" "άλλα δεν έχει σωστή κεφαλίδα." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Εντός Παιχνιδιού" @@ -3189,7 +3186,7 @@ msgid "Increase Frame limit" msgstr "Αύξηση Ορίου Καρέ" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Πληροφορίες" @@ -3209,7 +3206,7 @@ msgstr "Εισάγετε" msgid "Insert Encrypted or Decrypted code here..." msgstr "Εισάγετε Κωδικοποιημένο ή μη Κωδικό εδώ..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Εισαγωγή Κάρτας SD" @@ -3221,35 +3218,35 @@ msgstr "Εισάγετε όνομα εδώ..." msgid "Install WAD" msgstr "Εγκατάσταση WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Εγκατάσταση στο Μενού Wii" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler καλέστηκε, αλλά αυτή η πλατφόρμα δεν το υποστηρίζει " "ακόμα." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Γίνεται εγκατάσταση WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Σφάλμα Ελέγχου Ακεραιότητας" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Ο έλεγχος ακεραιότητας ολοκληρώθηκε." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Ο έλεγχος ακεραιότητας ολοκληρώθηκε. Δε βρέθηκαν σφάλματα." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3258,11 +3255,11 @@ msgstr "" "Ο έλεγχος ακεραιότητας για την κατάτμηση %d απέτυχε. Το αρχείο έχει " "πιθανότατα αλλοιωθεί ή έχει γίνει patched με λάθος τρόπο." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Διεπαφή" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Ρυθμίσεις Διεπαφής" @@ -3291,7 +3288,7 @@ msgstr "Εσωτερική Ανάλυση:" msgid "Interpreter (VERY slow)" msgstr "Interpreter (ΠΟΛΥ αργός)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Εισαγωγή" @@ -3300,7 +3297,7 @@ msgstr "Εισαγωγή" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Μη έγκυρο μέγεθος (%x) ή μαγική λέξη (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Μη έγκυρη τιμή!" @@ -3308,16 +3305,16 @@ msgstr "Μη έγκυρη τιμή!" msgid "Invalid bat.map or dir entry" msgstr "Μη έγκυρο bat.map ή εγγραφή φακέλου" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Μη έγκυρος τύπος συμβάντος %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Μη έγκυρο αρχείο" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3344,34 +3341,36 @@ msgstr "Μη έγκυρο string αναζήτησης (δεν μπορεί να msgid "Invalid search string (only even string lengths supported)" msgstr "Μη έγκυρο string αναζήτησης (μόνο ζυγά μήκη string υποστηρίζονται)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Μη έγκυρο κατάσταση" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Ιταλικά" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "ΙΑΠΩΝΙΑ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT Recompiler (προτείνεται)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL πειραματικός recompiler" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Ιαπωνικά" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "ΚΟΡΕΑ" @@ -3393,8 +3392,9 @@ msgstr "Διατήρηση Παραθύρου στην Κορυφή" msgid "Key" msgstr "Πλήκτρο" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Κορεάτικα" @@ -3412,7 +3412,7 @@ msgstr "L Button" msgid "L-Analog" msgstr "L-Αναλογική" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Γλώσσα:" @@ -3421,7 +3421,7 @@ msgstr "Γλώσσα:" msgid "Last %i" msgstr "Τελευταίο %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Χρονοκαθυστέρηση: " @@ -3460,11 +3460,11 @@ msgstr "" "Αριστερό/Δεξί κλικ για περισσότερες επιλογές.\n" "Μεσαίο κλικ για καθάρισμα." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Μικρότερο από" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Περιορισμός με βάση τα Καρέ" @@ -3556,11 +3556,11 @@ msgstr "Φόρτωση Σημείου Αποθήκευσης 9" msgid "Load State..." msgstr "Φόρτωση Σημείου Αποθήκευσης..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Φόρτωση Μενού Συστήματος Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Φόρτωση Μενού Συστήματος Wii %d%c" @@ -3612,12 +3612,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Έξοδοι Καταγραφής" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Καταγραφή" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Χάθηκε η σύνδεση με τον διακομιστή!" @@ -3634,7 +3634,7 @@ msgstr "" "Ασυμφωνία MD5\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Hack Ταχύτητας" @@ -3648,11 +3648,11 @@ msgstr "Αρχεία MadCatz Gameshark (*.gcs)" msgid "Main Stick" msgstr "Κύριο Stick" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID Δημιουργού:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Δημιουργός:" @@ -3689,7 +3689,7 @@ msgid "Memory Byte" msgstr "Memory Byte" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Κάρτα Μνήμης" @@ -3701,7 +3701,7 @@ msgstr "" "Διαχειριστής Καρτών Μνήμης ΠΡΟΕΙΔΟΠΟΙΗΣΗ-Κάντε αντίγραφα ασφαλείας πριν την " "χρήση, αν και διορθωμένος μπορεί να χαλάσει πράγματα!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3718,7 +3718,7 @@ msgstr "" "%s\n" "Θέλετε να αντιγράψετε το παλιό αρχείο σε αυτή την νέα τοποθεσία;\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" "Το μέγεθος του αρχείου της κάρτας μνήμης δεν ταιριάζει με το μέγεθος της " @@ -3728,7 +3728,7 @@ msgstr "" msgid "Menu" msgstr "Μενού" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Μικρόφωνο" @@ -3741,7 +3741,7 @@ msgstr "Ελάχιστη" msgid "Misc" msgstr "Διάφορα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Διάφορες Ρυθμίσεις" @@ -3767,11 +3767,11 @@ msgstr "" msgid "Monospaced font" msgstr "Ισοπλατής γραμματοσειρά" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Μοτέρ" @@ -3891,15 +3891,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Up" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Όνομα:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Όνομα: " @@ -3909,7 +3909,7 @@ msgstr "Όνομα: " msgid "Native GCI files(*.gci)" msgstr "Αρχεία Native GCI (*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Νέα Ανίχνευση" @@ -3918,7 +3918,7 @@ msgstr "Νέα Ανίχνευση" msgid "Next Page" msgstr "Επόμενη Σελίδα" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Επόμενη Ανίχνευση" @@ -3926,11 +3926,11 @@ msgstr "Επόμενη Ανίχνευση" msgid "Nickname :" msgstr "Ψευδώνυμο :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Καμία Χώρα (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Δε βρέθηκαν ISO ή WAD" @@ -3969,24 +3969,25 @@ msgstr "Κανένα εγγεγραμένο αρχείο" msgid "No save folder found for title %s" msgstr "Δε βρέθηκε φάκελος αποθήκευσης για τον τίτλο %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Καμία" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Νορβηγικά Bokmaal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Όχι ίσο" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Μη Ορισμένο" @@ -3997,11 +3998,11 @@ msgstr "" "Δεν είναι σημείο αποθήκευσης wii ή αποτυχία ανάγνωσης κεφαλίδας αρχείου " "μεγέθους %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Μη Συνδεδεμένο" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Σημειώσεις" @@ -4022,7 +4023,7 @@ msgstr "Σημείωση" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Αριθμός Κωδικών: " @@ -4043,7 +4044,7 @@ msgstr "Αντικείμενο" msgid "Object Range" msgstr "Εύρος Αντικειμένου" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Ανενεργός" @@ -4051,7 +4052,7 @@ msgstr "Ανενεργός" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Απεικόνιση Μηνυμάτων Στην Οθόνη" @@ -4069,11 +4070,11 @@ msgstr "Διαθέσιμα μόνο %d μπλοκ" msgid "Open" msgstr "Άνοιγμα" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Άνοιγμα &τοποθεσίας αρχείου" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Άνοιγμα φακέλου αποθήκευσης Wii" @@ -4103,7 +4104,7 @@ msgstr "OpenCL Αποκωδικοποιητής Υφών" msgid "OpenMP Texture Decoder" msgstr "OpenMP Αποκωδικοποιητής Υφών" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4111,13 +4112,7 @@ msgstr "" "Ανοίγει τις προεπιλεγμένες (μόνο για ανάγνωση) ρυθμίσεις για αυτό το " "παιχνίδι σε έναν εξωτερικό επεξεργαστή κειμένου." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" -"Ανοίγει τις τοπικές ρυθμίσεις του χρήστη σε έναν εξωτερικό επεξεργαστή " -"κειμένου." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Ρυθμίσεις" @@ -4142,7 +4137,7 @@ msgstr "" msgid "Other" msgstr "Άλλα" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4158,11 +4153,11 @@ msgstr "Έξοδος" msgid "P&lay Recording..." msgstr "Αναπα&ραγωγή Εγγραφής" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Χειριστήριο" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Χειριστήριο" @@ -4186,26 +4181,26 @@ msgstr "Παράγραφος" msgid "Parameters" msgstr "Παράμετροι" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Κατάτμηση %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Η κατάτμηση δεν υπάρχει: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patches" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Φάκελοι" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Παύση" @@ -4218,7 +4213,7 @@ msgstr "Παύση στο τέλος της ταινίας" msgid "Per-Pixel Lighting" msgstr "Φωτισμός ανά Pixel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Τέλειο" @@ -4229,8 +4224,8 @@ msgstr "Οπτική %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Αναπαραγωγή" @@ -4242,7 +4237,7 @@ msgstr "Αναπαραγωγή Εγγραφής" msgid "Play/Pause" msgstr "Αναπαραγωγή/Παύση" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Παίζεται" @@ -4250,11 +4245,11 @@ msgstr "Παίζεται" msgid "Playback Options" msgstr "Ρυθμίσεις Αναπαραγωγής" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Παίχτες" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Παρακαλώ επιβεβαιώστε..." @@ -4266,36 +4261,36 @@ msgstr "Παρακαλώ δημιουργήστε μια οπτική πριν msgid "Plus-Minus" msgstr "Plus-Minus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Πολωνέζικα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Θύρα 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Θύρα 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Θύρα 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Θύρα 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Θύρα :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Πορτογαλικά" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Πορτογαλικά (Βραζιλιάνικα)" @@ -4308,7 +4303,7 @@ msgstr "Post-Processing Εφέ:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Πρόωρος τερματισμός της ταινίας σε PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Πρόωρος τερματισμός της ταινίας σε PlayWiimote. %u + %d > %u" @@ -4330,7 +4325,7 @@ msgstr "Προηγούμενη Σελίδα" msgid "Previous Page" msgstr "Προηγούμενη Σελίδα" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Προηγούμενη Τιμή" @@ -4354,8 +4349,8 @@ msgstr "Καθαρισμός Cache" msgid "Question" msgstr "Ερώτηση" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Έξοδος" @@ -4377,7 +4372,7 @@ msgstr "R-Αναλογική" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "ΡΩΣΙΑ" @@ -4416,7 +4411,7 @@ msgstr "Πραγματικά Wiimotes" msgid "Record" msgstr "Εγγραφή" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Εγγραφή χειρισμών" @@ -4468,10 +4463,10 @@ msgstr "Ανανέωση Λίστας" msgid "Refresh game list" msgstr "Ανανέωση λίστας παιχνιδιών" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Αφαίρεση" @@ -4494,7 +4489,7 @@ msgstr "Αναπαραγωγή στο Κεντρικό Παράθυρο" msgid "Reset" msgstr "Επανεκκίνηση" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Αποτελέσματα" @@ -4502,7 +4497,7 @@ msgstr "Αποτελέσματα" msgid "Return" msgstr "Return" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revision:" @@ -4515,19 +4510,19 @@ msgstr "Δεξιά" msgid "Right Stick" msgstr "Δεξί Stick" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Δόνηση" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Εκτέλεση DSP LLE σε ξεχωριστό νήμα (δεν προτείνεται: μπορεί να προκαλέσει " "κολλήματα)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Ρώσικα" @@ -4601,12 +4596,12 @@ msgstr "Αποθήκευση Σημείου Αποθήκευσης 9" msgid "Save State..." msgstr "Αποθήκευση Σημείου..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Αποθήκευση ως..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Αποθήκευση συμπιεσμένου GCM/ISO" @@ -4614,7 +4609,7 @@ msgstr "Αποθήκευση συμπιεσμένου GCM/ISO" msgid "Save current perspective" msgstr "Αποθήκευση τρέχουσας οπτικής" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Αποθήκευση αποσυμπιεσμένου GCM/ISO" @@ -4629,16 +4624,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "Κλιμακούμενα EFB Αντίγραφα" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Ανίχνευση %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Αναζήτηση για ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Ανίχνευση..." @@ -4654,11 +4649,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Αναζήτηση" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Φίλτρο Αναζήτησης" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Αναζήτηση σε Υποφακέλους" @@ -4681,12 +4676,12 @@ msgstr "Η ενότητα %s δε βρέθηκε στο SYSCONF" msgid "Select" msgstr "Επιλογή" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Επιλέξτε το Αρχείο Εγγραφής" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Επιλέξτε ένα Wii WAD αρχείο για εγκατάσταση" @@ -4708,19 +4703,19 @@ msgstr "Επιλέξτε ένα αρχείο αποθήκευσης για ει msgid "Select floating windows" msgstr "Επιλέξτε αιωρούμενα παράθυρα" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Επιλέξτε το αρχείο για φόρτωση" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Επιλέξτε αρχείο αποθήκευσης" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Επιλέξτε το σημείο φόρτωσης" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Επιλέξτε το σημείο αποθήκευσης" @@ -4743,7 +4738,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι επιλέξτε Αυτόματα." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Το επιλεγμένο προφίλ χειρισμού δεν υπάρχει" @@ -4768,39 +4763,28 @@ msgstr "" "σας.\n" "Αν πάλι δεν είστε σίγουροι, χρησιμοποιήστε την υψηλότερη λειτουργική ανάλυση." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Επιλέγει το API γραφικών που θα χρησιμοποιηθεί εσωτερικά.\n" -"Το Direct3D 9 συνήθως είναι το γρηγορότερο. Το OpenGL είναι περισσότερο " -"ακριβές όμως. Το Direct3D 11 βρίσκεται κάπου ενδιάμεσα μεταξύ των δύο.\n" -"Σημειώστε ότι τα Direct3D backends είναι διαθέσιμα μόνο στα Windows.\n" -"\n" -"Αν δεν είστε σίγουροι, χρησιμοποιήστε το Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Επιλέγει το API γραφικών που θα χρησιμοποιηθεί εσωτερικά.\n" -"Το Direct3D 9 συνήθως είναι το γρηγορότερο. Το OpenGL είναι περισσότερο " -"ακριβές όμως. Το Direct3D 11 βρίσκεται κάπου ενδιάμεσα μεταξύ των δύο.\n" -"Σημειώστε ότι τα Direct3D backends είναι διαθέσιμα μόνο στα Windows.\n" -"\n" -"Αν δεν είστε σίγουροι, χρησιμοποιήστε το OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Αποστολή" @@ -4812,18 +4796,18 @@ msgstr "Θέση Sensor Bar:" msgid "Separator" msgstr "Διαχωριστής" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Σερβικά" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Σειριακή Θύρα 1 - Αυτή είναι η θύρα που χρησιμοποιούν οι συσκευές όπως ο " "προσαρμογέας δικτύου" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Ορισμός ως προεπιλεγμένο &ISO" @@ -4832,14 +4816,14 @@ msgstr "Ορισμός ως προεπιλεγμένο &ISO" msgid "Set as default Memcard %c" msgstr "Ορισμός ως προεπιλεγμένη Κάρτα Μνήμης %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: Ο δείκτης είναι μεγαλύτερος από το μέγεθος λίστας των " "κωδικών ar %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4847,19 +4831,19 @@ msgstr "" "Ορίζει την χρονοκαθυστέρηση (σε ms). Υψηλότερες τιμές μπορεί να μειώσουν τις " "διακοπές στον ήχο. Μόνο για OpenAL backend." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Ρυθμίσεις..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Αδυναμία δημιουργίας αρχείου ρυθμίσεων" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Κούνημα" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Σύντομο Όνομα:" @@ -4883,7 +4867,7 @@ msgstr "Εμφάνιση Μπάρας Κατάστασης" msgid "Show &Toolbar" msgstr "Εμφάνιση Γραμμής &Εργαλείων" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Εμφάνιση Προεπιλογών" @@ -4923,7 +4907,7 @@ msgstr "Εμφάνιση JAP" msgid "Show Korea" msgstr "Εμφάνιση Κορέας" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Εμφάνιση Γλώσσας:" @@ -4963,11 +4947,11 @@ msgstr "Εμφάνιση Wad" msgid "Show Wii" msgstr "Εμφάνιση Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Εμφάνιση επιβεβαίωσης πριν τη διακοπή ενός παιχνιδιού." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4986,7 +4970,7 @@ msgstr "Εμφάνιση πρώτου μπλοκ" msgid "Show lag counter" msgstr "Εμφάνιση μετρητή καθυστέρησης " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5039,23 +5023,24 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Οριζόντια Θέση Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Κινέζικα Απλοποιημένα" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Μέγεθος" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Παράλειψη BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Παράληψη εκκαθάρισης DCBZ" @@ -5086,11 +5071,11 @@ msgstr "" msgid "Slot %i" msgstr "Θέση %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Θέση Α" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Θέση Β" @@ -5098,7 +5083,7 @@ msgstr "Θέση Β" msgid "Snapshot" msgstr "Στιγμιότυπο" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Απεικόνιση Λογισμικού" @@ -5115,27 +5100,27 @@ msgstr "" "Θέλετε όντως να χρησιμοποιήσετε την απεικόνιση λογισμικού; Αν δεν είστε " "σίγουροι, επιλέξτε 'Όχι'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Ρυθμίσεις Ήχου" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Το backend ήχου %s δεν είναι έγκυρο." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Αποτυχία δημιουργίας buffer ήχου: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Space" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Ισπανικά" @@ -5164,7 +5149,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, επιλέξτε 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Επιτάχυνση του Ρυθμού Μεταφοράς από τον Δίσκο" @@ -5172,13 +5157,13 @@ msgstr "Επιτάχυνση του Ρυθμού Μεταφοράς από το msgid "Square Stick" msgstr "Τετράγωνο Stick" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Τυπικός Controller" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Εκκίνηση" @@ -5194,7 +5179,7 @@ msgstr "Εκκίνηση Ε&γγραφής" msgid "Start Recording" msgstr "Εκκίνηση Εγγραφής" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Λειτ." @@ -5202,7 +5187,7 @@ msgstr "Λειτ." msgid "State Saves" msgstr "Σημεία Αποθήκευσης" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Τιμόνι" @@ -5251,19 +5236,19 @@ msgstr "Επιτυχής εξαγωγή αρχείου στο %s" msgid "Successfully imported save files" msgstr "Επιτυχής εισαγωγή σημείων αποθήκευσης" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Σουηδικά" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Swing" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Συγχρονισμός του νήματος της GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5272,12 +5257,13 @@ msgstr "" "κολλήματα σε λειτουργία Διπλού Πυρήνα . (Ενεργό = Συμβατότητα, Ανενεργό = " "Ταχύτητα)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Γλώσσα Συστήματος:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "ΤΑΪΒΑΝ" @@ -5308,7 +5294,7 @@ msgstr "Δεξί Table" msgid "Take Screenshot" msgstr "Δημιουργία Στιγμιότυπου" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5328,11 +5314,11 @@ msgstr "Cache Υφών" msgid "Texture Format Overlay" msgstr "Επικάλυψη Του Format Υφών" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "Το WAD εγκαταστάθηκε με επιτυχία" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Η διεύθυνση είναι άκυρη" @@ -5340,13 +5326,13 @@ msgstr "Η διεύθυνση είναι άκυρη" msgid "The checksum was successfully fixed" msgstr "Το checksum διορθώθηκε με επιτυχία" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Ο επιλεγμένος φάκελος βρίσκεται ήδη στη λίστα" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5369,7 +5355,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Το αρχείο %s ήταν ήδη ανοιχτό, η κεφαλίδα του αρχείου δε θα γραφεί." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Το αρχείο που επιλέξατε (%s) δεν υπάρχει" @@ -5404,7 +5390,7 @@ msgid "The save you are trying to copy has an invalid file size" msgstr "" "Το σημείο αποθήκευσης που προσπαθείτε να αντιγράψετε έχει μη έγκυρο μέγεθος" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5412,19 +5398,19 @@ msgstr "" "Η επιλεγμένη γλώσσα δεν υποστηρίζεται από το σύστημά σας. Επαναφορά στην " "προεπιλογή συστήματος." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Οι εκδόσεις NetPlay του διακομιστή και του πελάτη δεν είναι συμβατές!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Ο διακομιστής είναι γεμάτος!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Ο διακομιστής απάντησε: το παιχνίδι τρέχει!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Ο διακομιστής επέστρεψε ένα άγνωστο μήνυμα σφάλματος!" @@ -5433,15 +5419,15 @@ msgstr "Ο διακομιστής επέστρεψε ένα άγνωστο μή msgid "The specified file \"%s\" does not exist" msgstr "Το επιλεγμένο αρχείο \"%s\" δεν υπάρχει" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Η τιμή είναι άκυρη" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Θέμα:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5449,7 +5435,7 @@ msgstr "" "Πρέπει να υπάρχει εισητήριο για 00000001/00000002. Το NAND dump σας είναι " "πιθανότατα ημιτελές." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5458,7 +5444,7 @@ msgstr "" "Αν είναι ακαθόριστη η επιλογή το παιχνίδι χρησιμοποιεί τις γενικές ρυθμίσεις " "του Dolphin. " -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5466,7 +5452,7 @@ msgstr "" "Αυτός ο προσομοιωτής action replay δεν υποστηρίζει κωδικούς που αλλάζουν το " "ίδιο το Action Replay." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" "Αυτό μπορεί να προκαλέσει καθυστερήσεις στο Μενού Wii και σε μερικά " @@ -5495,7 +5481,7 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5508,7 +5494,7 @@ msgstr "" "διορθώσει ορισμένα κλικαρίσματα στον ήχο άλλα και να προκαλέσει συνεχές " "θόρυβο ανάλογα με το παιχνίδι)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5520,7 +5506,7 @@ msgstr "" "Προκαλεί μεγάλη επιτάχυνση σε PC με περισσότερους από έναν πυρήνες,\n" "αλλά μπορεί να προκαλέσει κρασαρίσματα ή άλλα προβλήματα. " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "" "Αυτό σας επιτρέπει την χειροκίνητη επεξεργασία του αρχείου ρυθμίσεων INI" @@ -5530,12 +5516,12 @@ msgstr "" msgid "Threshold" msgstr "Κατώφλι" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Πλάγιασμα" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Τίτλος" @@ -5570,15 +5556,16 @@ msgid "Toggle IR" msgstr "Εναλλαγή Εσωτερικής Ανάλυσης" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Κορυφή" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Κινέζικα Παραδοσιακά " -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Προσπάθεια φόρτωσης ενός άγνωστου τύπου αρχείο." @@ -5598,7 +5585,7 @@ msgstr "" "Προσπάθεια ανάγνωσης από ένα μη έγκυρο SYSCONF\n" "Τα Wiimote bt ids δεν είναι διαθέσιμα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Τουρκικά" @@ -5614,12 +5601,12 @@ msgstr "Τύπος" msgid "UDP Port:" msgstr "Πόρτα UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "ΑΓΝΩΣΤΟ" @@ -5628,7 +5615,7 @@ msgstr "ΑΓΝΩΣΤΟ" msgid "UNKNOWN_%02X" msgstr "ΑΓΝΩΣΤΟ_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "ΗΠΑ" @@ -5641,9 +5628,9 @@ msgstr "" "Η entry δεν μεταβλήθηκε." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5669,11 +5656,11 @@ msgstr "Αναίρεση Αποθήκευσης Σημείου Αποθ. " msgid "Unexpected 0x80 call? Aborting..." msgstr "Αναπάντεχη 0x80 κλήση; Ματαίωση..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Άγνωστο" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Άγνωστη εντολή DVD %08x - κρίσιμο σφάλμα" @@ -5688,12 +5675,12 @@ msgstr "Άγνωστη εντολή 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Άγνωστος τύπος καταχώρησης %i στο SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Ελήφθη άγνωστο μήνυμα με id : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "Ελήφθη άγνωστο μήνυμα με:%d από τον παίκτη:%d Αποσύνδεση παίκτη!" @@ -5703,16 +5690,16 @@ msgstr "Ελήφθη άγνωστο μήνυμα με:%d από τον παίκ msgid "Up" msgstr "Πάνω" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Ενημέρωση" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Κάθετη Θέση Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Χρήση Λειτουργίας EuRGB60 (PAL60)" @@ -5720,11 +5707,11 @@ msgstr "Χρήση Λειτουργίας EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Χρήση Πλήρους Οθόνης" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Χρήση Hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Χρήση Οθονών Πανικού" @@ -5792,11 +5779,11 @@ msgstr "Εργαλεία" msgid "V-Sync" msgstr "Κάθετος Συγχρονισμός" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam Hack Ταχύτητας" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Τιμή" @@ -5804,7 +5791,7 @@ msgstr "Τιμή" msgid "Value:" msgstr "Τιμή:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Τιμή: " @@ -5816,7 +5803,7 @@ msgstr "Αναλυτικότητα" msgid "Vertex Streaming Hack" msgstr "Hack Ροής Κορυφών" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Βίντεο" @@ -5824,7 +5811,7 @@ msgstr "Βίντεο" msgid "Virtual" msgstr "Εικονικό" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Ένταση" @@ -5857,15 +5844,15 @@ msgstr "" msgid "Warning" msgstr "Προειδοποίηση" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Προειδοποίηση - εκκίνηση DOL σε λάθος λειτουργία κονσόλας!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Προειδοποίηση - εκκίνηση ELF σε λάθος λειτουργία κονσόλας!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Προειδοποίηση - εκκίνηση ISO σε λάθος λειτουργία κονσόλας!" @@ -5972,19 +5959,19 @@ msgstr "Hack Ευρείας Οθόνης" msgid "Width" msgstr "Πλάτος" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii Κονσόλα" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND Ρίζα:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Αρχεία αποθήκευσης Wii (*.bin)|*.bin" @@ -5997,12 +5984,18 @@ msgstr "WiiWAD: Αδυναμία ανάγνωσης από αρχείο" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Συνδεδεμένο Wiimote" @@ -6034,14 +6027,14 @@ msgstr "Windows Right" msgid "Word Wrap" msgstr "Αναδίπλωση Λέξεων" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Σε εργασία..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Εγγραφή Καρτών Μνήμης (GC)" @@ -6061,21 +6054,36 @@ msgstr "Εγγραφή σε Αρχείο" msgid "Write to Window" msgstr "Εγγραφή στο Παράθυρο" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "Αποτυχία CreateSourceVoice XAudio2: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "Αποτυχία αρχικοποίησης XAudio2: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "Αποτυχία δημιουργίας κεντρικής φωνής XAudio2: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "Αποτυχία CreateSourceVoice XAudio2: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "Αποτυχία αρχικοποίησης XAudio2: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "Αποτυχία δημιουργίας κεντρικής φωνής XAudio2: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -6109,15 +6117,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Δεν μπορείτε να κλείσετε pane που έχουν σελίδες." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Πρέπει να επιλέξετε ένα παιχνίδι!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Πρέπει να εισάγετε ένα όνομα!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Πρέπει να εισάγετε μία έγκυρη οκταδική ή δεκαεξαδική τιμή." @@ -6125,7 +6133,7 @@ msgstr "Πρέπει να εισάγετε μία έγκυρη οκταδική msgid "You must enter a valid profile name." msgstr "Πρέπει να εισάγετε ένα έγκυρο όνομα προφίλ." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "" "Πρέπει να κάνετε επανεκκίνηση του Dolphin για να έχει επίπτωση αυτή η αλλαγή." @@ -6140,7 +6148,7 @@ msgstr "" "Θέλετε να γίνει διακοπή τώρα για να διορθώσετε το πρόβλημα;\n" "Εάν επιλέξετε \"Όχι\", ο ήχος μπορεί να είναι χαλασμένος." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6159,15 +6167,15 @@ msgstr "" "Θα έπρεπε να είναι 0x%04x (αλλά είναι 0x%04llx)\n" "Θέλετε να δημιουργηθεί ένα καινούριο;" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Δεν υποστηρίζεται ο Zero 3 code" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Άγνωστος Zero code: %08x" @@ -6226,29 +6234,24 @@ msgstr "" "\n" "Αν δεν είστε σίγουροι, αφήστε το αποεπιλεγμένο." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Ανάγνωση Opcode από %x. Παρακαλώ να το αναφέρετε." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "." -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "άγνωστο flavor %d (αναμενόταν %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "ελήφθη άγνωστο μήνυμα" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "Το wxExecute επέστρεψε -1 κατά την εκκίνηση της εφαρμογής!" @@ -6263,3 +6266,50 @@ msgstr "zNear Διόρθωση: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OR" + +#~ msgid "Could not create %s" +#~ msgstr "Αποτυχία δημιουργίας %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Επεξεργασία Τοπικών Ρυθμίσεων" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Ανοίγει τις τοπικές ρυθμίσεις του χρήστη σε έναν εξωτερικό επεξεργαστή " +#~ "κειμένου." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Επιλέγει το API γραφικών που θα χρησιμοποιηθεί εσωτερικά.\n" +#~ "Το Direct3D 9 συνήθως είναι το γρηγορότερο. Το OpenGL είναι περισσότερο " +#~ "ακριβές όμως. Το Direct3D 11 βρίσκεται κάπου ενδιάμεσα μεταξύ των δύο.\n" +#~ "Σημειώστε ότι τα Direct3D backends είναι διαθέσιμα μόνο στα Windows.\n" +#~ "\n" +#~ "Αν δεν είστε σίγουροι, χρησιμοποιήστε το Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Επιλέγει το API γραφικών που θα χρησιμοποιηθεί εσωτερικά.\n" +#~ "Το Direct3D 9 συνήθως είναι το γρηγορότερο. Το OpenGL είναι περισσότερο " +#~ "ακριβές όμως. Το Direct3D 11 βρίσκεται κάπου ενδιάμεσα μεταξύ των δύο.\n" +#~ "Σημειώστε ότι τα Direct3D backends είναι διαθέσιμα μόνο στα Windows.\n" +#~ "\n" +#~ "Αν δεν είστε σίγουροι, χρησιμοποιήστε το OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Ανάγνωση Opcode από %x. Παρακαλώ να το αναφέρετε." diff --git a/Languages/po/en.po b/Languages/po/en.po index e9c2285bc7..46a2b7906e 100644 --- a/Languages/po/en.po +++ b/Languages/po/en.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emu\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2011-01-06 14:53+0100\n" "Last-Translator: BhaaL \n" "Language-Team: \n" @@ -16,13 +16,13 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "" @@ -30,7 +30,7 @@ msgstr "" msgid "! NOT" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -52,12 +52,12 @@ msgstr "" msgid "%1$sCopy%1$s" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -68,26 +68,26 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card file size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -99,7 +99,7 @@ msgstr "" msgid "%s failed to open" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -109,7 +109,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "" @@ -167,11 +167,11 @@ msgstr "" msgid "&DSP Settings" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "" @@ -235,7 +235,7 @@ msgstr "" msgid "&Play" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "" @@ -279,7 +279,7 @@ msgstr "" msgid "&Wiimote Settings" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "" @@ -315,7 +315,7 @@ msgstr "" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "" @@ -331,7 +331,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "" @@ -347,7 +347,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "" @@ -359,7 +359,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -367,7 +367,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -375,13 +375,13 @@ msgstr "" msgid "A" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "" @@ -400,21 +400,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "" @@ -453,66 +454,66 @@ msgid "" "%s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " "(%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " "Fill (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " "Pointer (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" "Master codes are not needed. Do not use master codes." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "" @@ -526,11 +527,11 @@ msgstr "" msgid "Add" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "" @@ -538,9 +539,9 @@ msgstr "" msgid "Add new pane" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "" @@ -578,36 +579,36 @@ msgstr "" msgid "Advanced" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "" @@ -627,19 +628,19 @@ msgstr "" msgid "Anti-Aliasing:" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "" @@ -650,7 +651,7 @@ msgid "" "If unsure, select (off)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "" @@ -659,13 +660,13 @@ msgstr "" msgid "Are you sure you want to delete \"%s\"?" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" @@ -673,7 +674,11 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "" @@ -682,12 +687,12 @@ msgstr "" msgid "At least one pane must remain open." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "" @@ -695,7 +700,7 @@ msgstr "" msgid "AudioCommon: Error opening AO device.\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "" @@ -731,16 +736,16 @@ msgstr "" msgid "Back" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "" @@ -758,15 +763,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "" @@ -778,7 +783,7 @@ msgstr "" msgid "Basic" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "" @@ -786,7 +791,7 @@ msgstr "" msgid "Bass" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "" @@ -807,7 +812,7 @@ msgid "Blue Right" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "" @@ -816,7 +821,7 @@ msgstr "" msgid "Bound Controls: %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "" @@ -824,7 +829,7 @@ msgstr "" msgid "Browse" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "" @@ -832,11 +837,11 @@ msgstr "" msgid "Browse for an ISO directory..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "" @@ -846,7 +851,7 @@ msgstr "" msgid "Buttons" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -868,7 +873,7 @@ msgstr "" msgid "CP reg" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "" @@ -885,17 +890,17 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "" @@ -907,11 +912,11 @@ msgstr "" msgid "Cannot open %s" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -919,7 +924,7 @@ msgid "" "is not a valid gamecube memory card file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -929,7 +934,7 @@ msgstr "" msgid "Caps Lock" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "" @@ -937,7 +942,7 @@ msgstr "" msgid "Center" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "" @@ -949,11 +954,11 @@ msgstr "" msgid "Change Disc" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -967,11 +972,11 @@ msgstr "" msgid "Changes sign to zNear Parameter (after correction)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "" @@ -979,47 +984,47 @@ msgstr "" msgid "Cheat Code" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "" @@ -1027,14 +1032,14 @@ msgstr "" msgid "Choose a memory card:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "" @@ -1053,7 +1058,7 @@ msgstr "" msgid "Clear" msgstr "" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1061,7 +1066,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "" @@ -1070,11 +1075,11 @@ msgstr "" msgid "Co&nfigure..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "" @@ -1086,20 +1091,20 @@ msgstr "" msgid "Comment" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "" @@ -1117,8 +1122,8 @@ msgstr "" msgid "Configure Control" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "" @@ -1126,13 +1131,13 @@ msgstr "" msgid "Configure..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "" @@ -1146,7 +1151,7 @@ msgstr "" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "" @@ -1171,7 +1176,7 @@ msgstr "" msgid "Connect Wiimote 4" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "" @@ -1191,7 +1196,7 @@ msgstr "" msgid "Convert to GCI" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "" @@ -1200,16 +1205,11 @@ msgstr "" msgid "Copy to Memcard %c" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "" @@ -1222,12 +1222,12 @@ msgid "" "most PC DVD drives." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "" @@ -1245,27 +1245,27 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "" @@ -1297,12 +1297,12 @@ msgstr "" msgid "Crossfade" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "" @@ -1310,11 +1310,11 @@ msgstr "" msgid "Custom Projection Hack Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "" @@ -1330,20 +1330,20 @@ msgstr "" msgid "DSP" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "" @@ -1351,11 +1351,11 @@ msgstr "" msgid "DSP settings" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "" @@ -1367,15 +1367,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "" @@ -1404,16 +1404,16 @@ msgstr "" msgid "Decimal" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "" @@ -1425,7 +1425,7 @@ msgstr "" msgid "Default" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "" @@ -1467,8 +1467,8 @@ msgstr "" msgid "Device" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "" @@ -1476,15 +1476,11 @@ msgstr "" msgid "Dial" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +msgid "Direct3D" msgstr "" -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" -msgstr "" - -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1530,7 +1526,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "" @@ -1554,19 +1550,19 @@ msgstr "" msgid "Divide" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1597,9 +1593,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1623,12 +1618,12 @@ msgstr "" msgid "Dolphin FIFO" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "" @@ -1640,24 +1635,24 @@ msgstr "" msgid "Dolphin at &Google Code" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1681,11 +1676,11 @@ msgstr "" msgid "Drums" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "" @@ -1722,9 +1717,9 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "" @@ -1745,7 +1740,7 @@ msgid "" "driver." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "" @@ -1761,14 +1756,10 @@ msgstr "" msgid "Edit ActionReplay Code" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "" @@ -1777,8 +1768,8 @@ msgstr "" msgid "Edit current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "" @@ -1790,7 +1781,7 @@ msgstr "" msgid "Embedded Frame Buffer" msgstr "" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "" @@ -1817,7 +1808,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "" @@ -1835,15 +1826,15 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "" @@ -1851,27 +1842,27 @@ msgstr "" msgid "Enable Cache" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "" @@ -1879,7 +1870,7 @@ msgstr "" msgid "Enable Progressive Scan" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "" @@ -1887,7 +1878,7 @@ msgstr "" msgid "Enable Speaker Data" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "" @@ -1904,7 +1895,7 @@ msgid "" "If unsure, select 1x." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -1930,23 +1921,23 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -1959,7 +1950,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -1976,9 +1967,9 @@ msgstr "" msgid "End" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "" @@ -2001,21 +1992,20 @@ msgstr "" msgid "Entry 1/%d" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2059,7 +2049,7 @@ msgstr "" msgid "Export Failed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "" @@ -2075,7 +2065,7 @@ msgstr "" msgid "Export Save" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "" @@ -2091,7 +2081,7 @@ msgstr "" msgid "Export save as..." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "" @@ -2107,44 +2097,44 @@ msgstr "" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "" @@ -2156,15 +2146,15 @@ msgstr "" msgid "FIFO Player" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "" @@ -2172,11 +2162,15 @@ msgstr "" msgid "Failed to download codes." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2217,7 +2211,7 @@ msgstr "" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2225,13 +2219,13 @@ msgid "" "FilePosition:%llx" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2247,13 +2241,13 @@ msgstr "" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2263,7 +2257,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2274,7 +2268,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "" @@ -2296,7 +2290,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "" @@ -2308,7 +2302,7 @@ msgstr "" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "" @@ -2340,7 +2334,7 @@ msgid "" "or does not have a valid extension" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2351,7 +2345,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "" @@ -2360,11 +2354,11 @@ msgstr "" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "" @@ -2392,7 +2386,7 @@ msgstr "" msgid "Force 4:3" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "" @@ -2416,14 +2410,14 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " "setting when playing Japanese games." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2433,7 +2427,7 @@ msgstr "" msgid "Forward" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2476,7 +2470,7 @@ msgstr "" msgid "Frame S&kipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "" @@ -2488,9 +2482,9 @@ msgstr "" msgid "Free Look" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "" @@ -2523,27 +2517,27 @@ msgstr "" msgid "GX_CMD_INVL_VC" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "" @@ -2551,7 +2545,7 @@ msgstr "" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "" @@ -2560,7 +2554,7 @@ msgid "Gamecube &Pad Settings" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "" @@ -2568,12 +2562,12 @@ msgstr "" msgid "Gamecube Pad settings" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2583,7 +2577,7 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "" @@ -2592,13 +2586,13 @@ msgstr "" msgid "General Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2611,7 +2605,7 @@ msgstr "" msgid "Graphics settings" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "" @@ -2626,7 +2620,7 @@ msgid "" "If unsure, leave this checked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "" @@ -2650,11 +2644,11 @@ msgstr "" msgid "Hacks" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "" @@ -2666,7 +2660,7 @@ msgstr "" msgid "Help" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2678,7 +2672,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2708,7 +2702,7 @@ msgid "Home" msgstr "" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "" @@ -2717,11 +2711,11 @@ msgid "Hotkey Configuration" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "" @@ -2729,29 +2723,29 @@ msgstr "" msgid "Hybrid Wiimote" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "" @@ -2763,15 +2757,15 @@ msgstr "" msgid "IR Sensitivity:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "" @@ -2779,7 +2773,7 @@ msgstr "" msgid "Icon" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -2835,7 +2829,7 @@ msgid "" "but does not have a correct header" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "" @@ -2844,7 +2838,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "" @@ -2864,7 +2858,7 @@ msgstr "" msgid "Insert Encrypted or Decrypted code here..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "" @@ -2876,44 +2870,44 @@ msgstr "" msgid "Install WAD" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "" @@ -2940,7 +2934,7 @@ msgstr "" msgid "Interpreter (VERY slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "" @@ -2949,7 +2943,7 @@ msgstr "" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "" @@ -2957,16 +2951,16 @@ msgstr "" msgid "Invalid bat.map or dir entry" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -2990,34 +2984,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "" @@ -3036,8 +3032,9 @@ msgstr "" msgid "Key" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "" @@ -3055,7 +3052,7 @@ msgstr "" msgid "L-Analog" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "" @@ -3064,7 +3061,7 @@ msgstr "" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "" @@ -3096,11 +3093,11 @@ msgid "" "Middle-click to clear." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "" @@ -3192,11 +3189,11 @@ msgstr "" msgid "Load State..." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "" @@ -3240,12 +3237,12 @@ msgstr "" msgid "Logger Outputs" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "" @@ -3260,7 +3257,7 @@ msgid "" " %016llx%016llx != %016llx%016llx" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "" @@ -3274,11 +3271,11 @@ msgstr "" msgid "Main Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "" @@ -3309,7 +3306,7 @@ msgid "Memory Byte" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "" @@ -3319,7 +3316,7 @@ msgid "" "could mangle stuff!" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3330,7 +3327,7 @@ msgid "" "Would you like to copy the old file to this new location?\n" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" @@ -3338,7 +3335,7 @@ msgstr "" msgid "Menu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "" @@ -3351,7 +3348,7 @@ msgstr "" msgid "Misc" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "" @@ -3372,11 +3369,11 @@ msgstr "" msgid "Monospaced font" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "" @@ -3488,15 +3485,15 @@ msgstr "" msgid "NP Up" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "" @@ -3506,7 +3503,7 @@ msgstr "" msgid "Native GCI files(*.gci)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "" @@ -3515,7 +3512,7 @@ msgstr "" msgid "Next Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "" @@ -3523,11 +3520,11 @@ msgstr "" msgid "Nickname :" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "" @@ -3566,24 +3563,25 @@ msgstr "" msgid "No save folder found for title %s" msgstr "" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "" @@ -3592,11 +3590,11 @@ msgstr "" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "" @@ -3617,7 +3615,7 @@ msgstr "" msgid "Num Lock" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "" @@ -3638,7 +3636,7 @@ msgstr "" msgid "Object Range" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "" @@ -3646,7 +3644,7 @@ msgstr "" msgid "Offset:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "" @@ -3664,11 +3662,11 @@ msgstr "" msgid "Open" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "" @@ -3698,17 +3696,13 @@ msgstr "" msgid "OpenMP Texture Decoder" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "" @@ -3729,7 +3723,7 @@ msgstr "" msgid "Other" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3743,11 +3737,11 @@ msgstr "" msgid "P&lay Recording..." msgstr "" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "" @@ -3771,26 +3765,26 @@ msgstr "" msgid "Parameters" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "" @@ -3803,7 +3797,7 @@ msgstr "" msgid "Per-Pixel Lighting" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "" @@ -3814,8 +3808,8 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "" @@ -3827,7 +3821,7 @@ msgstr "" msgid "Play/Pause" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "" @@ -3835,11 +3829,11 @@ msgstr "" msgid "Playback Options" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "" @@ -3851,36 +3845,36 @@ msgstr "" msgid "Plus-Minus" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "" @@ -3893,7 +3887,7 @@ msgstr "" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -3915,7 +3909,7 @@ msgstr "" msgid "Previous Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "" @@ -3939,8 +3933,8 @@ msgstr "" msgid "Question" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "" @@ -3962,7 +3956,7 @@ msgstr "" msgid "RAM" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "" @@ -4001,7 +3995,7 @@ msgstr "" msgid "Record" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4048,10 +4042,10 @@ msgstr "" msgid "Refresh game list" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "" @@ -4071,7 +4065,7 @@ msgstr "" msgid "Reset" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "" @@ -4079,7 +4073,7 @@ msgstr "" msgid "Return" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4092,17 +4086,17 @@ msgstr "" msgid "Right Stick" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "" @@ -4176,12 +4170,12 @@ msgstr "" msgid "Save State..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "" @@ -4189,7 +4183,7 @@ msgstr "" msgid "Save current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "" @@ -4202,16 +4196,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "" @@ -4227,11 +4221,11 @@ msgstr "" msgid "Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "" @@ -4254,12 +4248,12 @@ msgstr "" msgid "Select" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "" @@ -4278,19 +4272,19 @@ msgstr "" msgid "Select floating windows" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "" @@ -4305,7 +4299,7 @@ msgid "" "If unsure, select Auto." msgstr "" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "" @@ -4323,27 +4317,28 @@ msgid "" "If still unsure, use the highest resolution which works for you." msgstr "" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "" @@ -4355,16 +4350,16 @@ msgstr "" msgid "Separator" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "" @@ -4373,30 +4368,30 @@ msgstr "" msgid "Set as default Memcard %c" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "" -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "" @@ -4420,7 +4415,7 @@ msgstr "" msgid "Show &Toolbar" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4460,7 +4455,7 @@ msgstr "" msgid "Show Korea" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "" @@ -4500,11 +4495,11 @@ msgstr "" msgid "Show Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4519,7 +4514,7 @@ msgstr "" msgid "Show lag counter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4561,23 +4556,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4601,11 +4597,11 @@ msgstr "" msgid "Slot %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "" @@ -4613,7 +4609,7 @@ msgstr "" msgid "Snapshot" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "" @@ -4625,27 +4621,27 @@ msgid "" "Do you really want to enable software rendering? If unsure, select 'No'." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 #, c-format -msgid "Sound buffer creation failed: %s" +msgid "Sound buffer creation failed: %08x" msgstr "" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "" @@ -4665,7 +4661,7 @@ msgid "" "If unsure, select 640x528." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "" @@ -4673,13 +4669,13 @@ msgstr "" msgid "Square Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "" @@ -4695,7 +4691,7 @@ msgstr "" msgid "Start Recording" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "" @@ -4703,7 +4699,7 @@ msgstr "" msgid "State Saves" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "" @@ -4747,30 +4743,31 @@ msgstr "" msgid "Successfully imported save files" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "" @@ -4801,7 +4798,7 @@ msgstr "" msgid "Take Screenshot" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "" @@ -4821,11 +4818,11 @@ msgstr "" msgid "Texture Format Overlay" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "" @@ -4833,13 +4830,13 @@ msgstr "" msgid "The checksum was successfully fixed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -4858,7 +4855,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "" @@ -4887,25 +4884,25 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "" @@ -4914,33 +4911,33 @@ msgstr "" msgid "The specified file \"%s\" does not exist" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" @@ -4956,7 +4953,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -4964,7 +4961,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -4972,7 +4969,7 @@ msgid "" "cause occasional crashes/glitches." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "" @@ -4981,12 +4978,12 @@ msgstr "" msgid "Threshold" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "" @@ -5021,15 +5018,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "" @@ -5047,7 +5045,7 @@ msgid "" "Wiimote bt ids are not available" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "" @@ -5063,12 +5061,12 @@ msgstr "" msgid "UDP Port:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "" @@ -5077,7 +5075,7 @@ msgstr "" msgid "UNKNOWN_%02X" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "" @@ -5090,7 +5088,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 #, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5112,11 +5110,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "" @@ -5131,12 +5129,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5146,16 +5144,16 @@ msgstr "" msgid "Up" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "" @@ -5163,11 +5161,11 @@ msgstr "" msgid "Use Fullscreen" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "" @@ -5213,11 +5211,11 @@ msgstr "" msgid "V-Sync" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "" @@ -5225,7 +5223,7 @@ msgstr "" msgid "Value:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "" @@ -5237,7 +5235,7 @@ msgstr "" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "" @@ -5245,7 +5243,7 @@ msgstr "" msgid "Virtual" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "" @@ -5273,15 +5271,15 @@ msgstr "" msgid "Warning" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "" @@ -5354,19 +5352,19 @@ msgstr "" msgid "Width" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "" @@ -5379,12 +5377,17 @@ msgstr "" msgid "Wiimote" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +msgid "Wiimote " +msgstr "" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "" @@ -5416,14 +5419,14 @@ msgstr "" msgid "Word Wrap" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5443,21 +5446,36 @@ msgstr "" msgid "Write to Window" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "" @@ -5483,15 +5501,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "" @@ -5499,7 +5517,7 @@ msgstr "" msgid "You must enter a valid profile name." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "" @@ -5510,7 +5528,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5524,15 +5542,15 @@ msgid "" "Do you want to generate a new one?" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "" @@ -5574,29 +5592,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "" - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "" diff --git a/Languages/po/es.po b/Languages/po/es.po index c6d0c97155..da1c6e3339 100644 --- a/Languages/po/es.po +++ b/Languages/po/es.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-20 12:03+0000\n" "Last-Translator: Petiso_Carambanal \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/dolphin-emu/" @@ -24,13 +24,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(demasiados para mostrar)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " Juego:" @@ -38,7 +38,7 @@ msgstr " Juego:" msgid "! NOT" msgstr "! NO" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -62,12 +62,12 @@ msgstr "%08X:" msgid "%1$sCopy%1$s" msgstr "%1$sCopiar%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "muestras %d" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "muestras %d (nivel de calidad %d)" @@ -78,12 +78,12 @@ msgstr "muestras %d (nivel de calidad %d)" msgid "%s already exists, overwrite?" msgstr "%s ya existe. ¿Sobrescribir?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s falló al ser \"scrubbed\". Probablemente la imagen esté corrupta." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -92,7 +92,7 @@ msgstr "" "%s falló al cargar como una tarjeta de memoria.\n" "El tamaño de la tarjeta no es válido (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -101,7 +101,7 @@ msgstr "" "%s falló al cargar como una tarjeta de memoria.\n" "El tamaño de la tarjeta no es válido (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -116,7 +116,7 @@ msgstr "" msgid "%s failed to open" msgstr "Fallo al abrir %s" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s falló: kr=%x" @@ -126,7 +126,7 @@ msgstr "%s falló: kr=%x" msgid "%s is a 0 byte file" msgstr "%s es un archivo de 0 bytes" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "¡%s ya está comprimido! No puede comprimirse más." @@ -186,11 +186,11 @@ msgstr "Administrador de &trucos" msgid "&DSP Settings" msgstr "&Configuración DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Borrar ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Borrar ISO seleccionadas..." @@ -254,7 +254,7 @@ msgstr "&Pausa" msgid "&Play" msgstr "&Jugar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Propiedades" @@ -298,7 +298,7 @@ msgstr "&Vista" msgid "&Wiimote Settings" msgstr "&Configuración de wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -334,7 +334,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Nativo (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -350,7 +350,7 @@ msgstr "2.5x Nativo (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Nativo (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -366,7 +366,7 @@ msgstr "3x Nativo (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Nativo (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -378,7 +378,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -386,7 +386,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -394,13 +394,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "¡¡Una ventana de NetPlay ya está abierta!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Ningún juego está emulándose actualmente." @@ -413,6 +413,7 @@ msgstr "" "Tendrás que emparejar manualmente tus Wiimotes." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -421,10 +422,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -443,13 +445,13 @@ msgstr "" "\n" "¡El host debe elegir la apertura/reenvio de puertos TCP!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "Placa base AM" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Códigos AR" @@ -498,7 +500,7 @@ msgstr "" "Código culpable:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -506,7 +508,7 @@ msgstr "" "Error de Action Replay: Tamaño no válido (%08x : dirección = %08x) en " "Añadido de código (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -515,7 +517,7 @@ msgstr "" "Error de Action Replay: Tamaño no válido (%08x : dirección = %08x) en Fill " "and Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -524,7 +526,7 @@ msgstr "" "Error de Action Replay: Tamaño no válido (%08x : dirección = %08x) en " "escritura y llenado de RAM (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -533,13 +535,13 @@ msgstr "" "Error de Action Replay: Tamaño no válido (%08x : dirección = %08x) en " "Escribir con el puntero (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" "Error de Action Replay: Valor no válido (%08x) en copia de la memoria (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -549,27 +551,27 @@ msgstr "" "implementados (%s)\n" "Los códigos maestros no son necesarios. No los uses." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Error de Action Replay: Línea de código AR no válida: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Error de Action Replay: Código condicional: Tamaño no válido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Error de Action Replay: Tipo de Código Normal no válido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Código Normal %i: Subtipo no válido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Código Normal 0: Subtipo no válido %08x (%s)" @@ -583,11 +585,11 @@ msgstr "Adaptador:" msgid "Add" msgstr "Añadir" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Añadir código ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Añadir parche" @@ -595,9 +597,9 @@ msgstr "Añadir parche" msgid "Add new pane" msgstr "Añadir nueva ventana" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Añadir..." @@ -650,36 +652,36 @@ msgstr "" msgid "Advanced" msgstr "Avanzado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Configuración avanzada" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Todos los archivos de GC/Wii (elf, dol, gcm, iso, wbfs, ciso, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Todas las imágenes de GC/Wii (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Todos los archivos Gamecube GCM (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Todos los estados guardados (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Todos los archivos ISO de Wii (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Todos los archivos ISO comprimidos de GC/Wii (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Todos los archivos (*.*)|*.*" @@ -699,19 +701,19 @@ msgstr "Filtro anisotrópico:" msgid "Anti-Aliasing:" msgstr "Antialias:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Apploader tiene tamaño incorrecto... ¿Es realmente un apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader no puede cargar desde el archivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Aplicar" @@ -725,7 +727,7 @@ msgstr "" "\n" "Si no estás seguro, selecciona (off)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Árabe" @@ -734,7 +736,7 @@ msgstr "Árabe" msgid "Are you sure you want to delete \"%s\"?" msgstr "¿Estás seguro de que quieres borrar \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -742,7 +744,7 @@ msgstr "" "¿Seguro que quieres borrar estos archivos?\n" "¡Desaparecerán para siempre!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "¿Seguro que quieres borrar este archivo? ¡Desaparecerá para siempre!" @@ -750,7 +752,12 @@ msgstr "¿Seguro que quieres borrar este archivo? ¡Desaparecerá para siempre!" msgid "Arm JIT (experimental)" msgstr "Arm JIT (experimental)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (experimental)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Relación de aspecto:" @@ -759,12 +766,12 @@ msgstr "Relación de aspecto:" msgid "At least one pane must remain open." msgstr "Al menos una ventana debe permancer abierta." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Audio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Motor de audio:" @@ -772,7 +779,7 @@ msgstr "Motor de audio:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Error al abrir dispositivo AO.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Automático" @@ -811,16 +818,16 @@ msgstr "Registro BP" msgid "Back" msgstr "Atrás" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Configuración del motor" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Motor:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Entrada sin foco" @@ -838,15 +845,15 @@ msgid "Balance Board" msgstr "Balance Board" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Imagen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Detalles de la imagen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Imagen:" @@ -858,7 +865,7 @@ msgstr "Barra" msgid "Basic" msgstr "Básico" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Configuración básica" @@ -866,7 +873,7 @@ msgstr "Configuración básica" msgid "Bass" msgstr "Bajo" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "La suma de verificación de la tabla de localización de bloques falló" @@ -887,7 +894,7 @@ msgid "Blue Right" msgstr "Azul derecha" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Inferior" @@ -896,7 +903,7 @@ msgstr "Inferior" msgid "Bound Controls: %lu" msgstr "Controles asignados: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Roto" @@ -904,7 +911,7 @@ msgstr "Roto" msgid "Browse" msgstr "Buscar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Busca un directorio para añadir" @@ -912,11 +919,11 @@ msgstr "Busca un directorio para añadir" msgid "Browse for an ISO directory..." msgstr "Buscar un directorio de ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Busca un directorio de salida" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Búfer:" @@ -926,7 +933,7 @@ msgstr "Búfer:" msgid "Buttons" msgstr "Botones" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -950,7 +957,7 @@ msgstr "C-Stick" msgid "CP reg" msgstr "Registro CP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Emulador de CPU" @@ -975,17 +982,17 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "No se puede encontrar un WiiMote por el gestor de conexión %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "No se puede leer del DVD_Plugin - DVD-Interface: Error Fatal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Cancelar" @@ -997,11 +1004,11 @@ msgstr "Cancelar" msgid "Cannot open %s" msgstr "No se puede abrir %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "No se puede cancelar el registro de eventos con eventos pendientes" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1012,7 +1019,7 @@ msgstr "" "%s\n" "no es un fichero válido de tarjeta de memoria de Gamecube" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1024,7 +1031,7 @@ msgstr "" msgid "Caps Lock" msgstr "Bloq Mayús" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Catalán" @@ -1032,7 +1039,7 @@ msgstr "Catalán" msgid "Center" msgstr "Centro" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Cambiar" @@ -1044,11 +1051,11 @@ msgstr "Cambiar &disco..." msgid "Change Disc" msgstr "Cambiar disco" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Cambiar juego" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1064,12 +1071,12 @@ msgstr "Cambia el signo del parámetro zFar (después de la corrección)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Cambia el signo del parámetro zNear (después de la corrección)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "¡Cambiar esto no tendrá ningún efecto mientras el emulador esté ejecutandose!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1077,47 +1084,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Código de truco" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Buscar trucos" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Administrador de trucos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Comprobar integridad de la partición" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Comprobando integridad..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chino (Simplificado)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Escoge un directorio raíz de DVD:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Escoge un directorio raíz para la NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Escoge una ISO por defecto:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Escoge un directorio para añadir" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Escoge un archivo para abrir" @@ -1125,7 +1132,7 @@ msgstr "Escoge un archivo para abrir" msgid "Choose a memory card:" msgstr "Escoge una tarjeta de memoria:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1133,8 +1140,8 @@ msgstr "" "Escoge el archivo a usar como apploader: (se aplica a los discos construidos " "a partir de directorios solamente)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Escoge la carpeta de destino" @@ -1153,7 +1160,7 @@ msgstr "Clásico" msgid "Clear" msgstr "Limpiar" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1163,7 +1170,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Cerrar" @@ -1172,11 +1179,11 @@ msgstr "Cerrar" msgid "Co&nfigure..." msgstr "Co&nfigurar..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Información del código" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Código:" @@ -1188,20 +1195,20 @@ msgstr "Comando" msgid "Comment" msgstr "Comentario" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Comentario:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Comprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Comprimir ISOs seleccionadas..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Comprimiendo ISO" @@ -1219,8 +1226,8 @@ msgstr "Configurar" msgid "Configure Control" msgstr "Configurar control" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Configurar mandos" @@ -1228,13 +1235,13 @@ msgstr "Configurar mandos" msgid "Configure..." msgstr "Configurar..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Confirmar sobrescritura de archivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Confirmar al detenerse" @@ -1248,7 +1255,7 @@ msgstr "Conectar" msgid "Connect Balance Board" msgstr "Conectar la Balance Board" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Conectar teclado USB" @@ -1273,7 +1280,7 @@ msgstr "Conectar Wiimote 3" msgid "Connect Wiimote 4" msgstr "Conectar Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Conectando..." @@ -1293,7 +1300,7 @@ msgstr "Control" msgid "Convert to GCI" msgstr "Convertir a GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Fallo al copiar" @@ -1302,16 +1309,11 @@ msgstr "Fallo al copiar" msgid "Copy to Memcard %c" msgstr "Copiar a tarjeta de memoria %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Núcleo" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "No se pudo crear %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "No se pudo inicializar el motor %s." @@ -1327,12 +1329,12 @@ msgstr "" "seguridad de GC/Wii. Ten en cuenta que discos de Gamecube o Wii originales " "no pueden ser leídos en la mayoría de los lectores DVD." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "No se pudo reconocer el archivo ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "No se pudo guardar %s" @@ -1358,11 +1360,11 @@ msgstr "" "Si es así, entonces es posible que tengas que volver a especificar la " "ubicación de la tarjeta de memoria en las opciones." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "No se pudo encontrar el comando para abrir la extensión 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1370,17 +1372,17 @@ msgstr "" "No se pudo iniciar el núcleo.\n" "Revisa tu configuración." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Cuenta:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "País:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Crear Código AR" @@ -1415,13 +1417,13 @@ msgstr "" msgid "Crossfade" msgstr "Fundido" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" "¡El directorio actual ha cambiado de %s a %s después de wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Hack de proyección personalizado" @@ -1429,11 +1431,11 @@ msgstr "Hack de proyección personalizado" msgid "Custom Projection Hack Settings" msgstr "Configuración del hack de proyección personalizado" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Personalizar algunos párametros de la proyección ortográfica." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Checo" @@ -1449,20 +1451,20 @@ msgstr "Pad direccional" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Motor de emulación DSP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "Emulación DSP HLE (rápido)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "Intérprete DSP LLE (lento)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "Recompilador DSP LLE" @@ -1470,11 +1472,11 @@ msgstr "Recompilador DSP LLE" msgid "DSP settings" msgstr "Configuración DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLLE en un hilo separado." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Raíz DVD:" @@ -1486,15 +1488,15 @@ msgstr "DVDLowRead - Error fatal: fallo al leer del volumen" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Error fatal: fallo al leer el volumen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Alfombra de baile" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Tamaño de datos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Fecha:" @@ -1523,16 +1525,16 @@ msgstr "Depuración" msgid "Decimal" msgstr "Decimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Descomprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Descomprimir ISO seleccionadas..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Descomprimir ISO" @@ -1544,7 +1546,7 @@ msgstr "Reducir límite de Frames" msgid "Default" msgstr "Predeterminado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "ISO por defecto:" @@ -1588,8 +1590,8 @@ msgstr "" msgid "Device" msgstr "Dispositivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Configuración del dispositivo" @@ -1597,15 +1599,12 @@ msgstr "Configuración del dispositivo" msgid "Dial" msgstr "Marcar" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1669,7 +1668,7 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disco" @@ -1696,20 +1695,20 @@ msgstr "" msgid "Divide" msgstr "Dividir" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "¿Quieres detener la emulación actual?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Decodificador Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1739,9 +1738,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1798,12 +1796,12 @@ msgstr "Configuración de Wiimote emulado de Dolphin" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Configuración de GCPad Dolphin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Películas TAS de Dolphin (*.dtm)" @@ -1815,7 +1813,7 @@ msgstr "Configuración de Wiimote de Dolphin" msgid "Dolphin at &Google Code" msgstr "Dolphin en &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1823,7 +1821,7 @@ msgstr "" "Dolphin no pudo encontrar ninguna ISO de GC/Wii. Haz doble clic aquí para " "buscar..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1831,12 +1829,12 @@ msgstr "" "Dolphin está configurado actualmente para esconder todos los juegos. Haz " "doble clic aquí para mostrarlos..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin no ha podido completar la acción solicitada." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1862,11 +1860,11 @@ msgstr "Se descargaron %lu códigos. (%lu añadidos)" msgid "Drums" msgstr "Tambores" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Falso" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Depósito de audio" @@ -1912,9 +1910,9 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Holandés" @@ -1939,7 +1937,7 @@ msgstr "" "de Dolphin, puede que se necesite reiniciar para que Windows reconozca el " "nuevo controlador." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1955,14 +1953,10 @@ msgstr "Editar" msgid "Edit ActionReplay Code" msgstr "Editar código ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Editar configuración" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Editar cambios locales" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Editar parche" @@ -1971,8 +1965,8 @@ msgstr "Editar parche" msgid "Edit current perspective" msgstr "Editar perspectiva actual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Editar..." @@ -1984,7 +1978,7 @@ msgstr "Efecto" msgid "Embedded Frame Buffer" msgstr "Búfer de fotogramas embebido" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "El proceso de emulación ya está ejecutándose" @@ -2023,7 +2017,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Wiimote emulado" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Estado de emulación:" @@ -2047,15 +2041,15 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Habilitar Registro de AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Habilitar asociación de bloques" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Permitir el cálculo del cuadro delimitador" @@ -2063,27 +2057,27 @@ msgstr "Permitir el cálculo del cuadro delimitador" msgid "Enable Cache" msgstr "Habilitar caché" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Habilitar trucos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Habilitar doble núcleo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Habilitar doble núcleo (mejora)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Habilitar salto de fotogramas inactivos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Habilitar salto de fotogramas inactivos (mejora)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Habilitar MMU" @@ -2091,7 +2085,7 @@ msgstr "Habilitar MMU" msgid "Enable Progressive Scan" msgstr "Habilitar escaneado progresivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Habilitar salvapantallas" @@ -2099,7 +2093,7 @@ msgstr "Habilitar salvapantallas" msgid "Enable Speaker Data" msgstr "Activar datos de altavoz" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Habilitar pantalla panorámica" @@ -2121,7 +2115,7 @@ msgstr "" "\n" "Si no estás seguro, elige 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2158,7 +2152,7 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2166,11 +2160,11 @@ msgstr "" "Habilitar esto para acelerar The Legend of Zelda: Twilight Princess. " "Deshabilitar para CUALQUIER OTRO juego." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Habilta un hack de proyección personalizado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2178,7 +2172,7 @@ msgstr "" "Activa la emulación de Dolby Pro Logic II usando 5.1 surround. No disponible " "en OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "Activa la emulación de Dolby Pro Logic II. Solo para el motor OpenAL." @@ -2195,7 +2189,7 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2217,9 +2211,9 @@ msgstr "" msgid "End" msgstr "Fin" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Inglés" @@ -2242,23 +2236,22 @@ msgstr "Entrada %d/%d" msgid "Entry 1/%d" msgstr "Entrada 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Igual" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Error" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Error al cargar el idioma seleccionado. Volviendo al predeterminado del " "sistema." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2306,7 +2299,7 @@ msgstr "Exportar todos los guardados de Wii" msgid "Export Failed" msgstr "Fallo al exportar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exportar archivo" @@ -2322,7 +2315,7 @@ msgstr "Exportar grabación..." msgid "Export Save" msgstr "Exportar guardado" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exportar guardado a uno de Wii (experimental)" @@ -2338,7 +2331,7 @@ msgstr "Exportación fallada." msgid "Export save as..." msgstr "Exportar guardado como..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Extensión" @@ -2354,44 +2347,44 @@ msgstr "Parámetro extra" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Parámetro extra que es útil en «Metroid: Other M» exclusivamente." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Extraer todos los archivos..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Extraer Apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Extraer DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Extraer directorio..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Extraer archivo..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Extraer partición..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Extrayendo %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Extrayendo todos los archivos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Extrayendo directorio" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Extrayendo..." @@ -2403,15 +2396,15 @@ msgstr "Byte de FIFO" msgid "FIFO Player" msgstr "Jugador FIFO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANCIA" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Tamaño del FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "¡Fallo al conectar!" @@ -2419,11 +2412,15 @@ msgstr "¡Fallo al conectar!" msgid "Failed to download codes." msgstr "Fallo al descargar los códigos." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Fallo al extraer a %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2476,7 +2473,7 @@ msgstr "Fallo al leer banner.bin" msgid "Failed to read bk header" msgstr "Fallo al leer la cabecera bk" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2487,7 +2484,7 @@ msgstr "" "La tarjeta de memoria puede estar truncada.\n" "Posición del fichero:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2495,7 +2492,7 @@ msgstr "" "Falló leer la tabla de asignación de bloques de respaldo correctamente\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2513,7 +2510,7 @@ msgstr "Fallo al leer los datos del archivo %d" msgid "Failed to read data from file: %s" msgstr "Fallo al leer los datos del archivo: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2521,7 +2518,7 @@ msgstr "" "Falló la lectura del directorio de respaldo\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2533,7 +2530,7 @@ msgstr "" msgid "Failed to read header" msgstr "Fallo al leer la cabecera" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2546,7 +2543,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Fallo al leer la cabecera del fichero %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Fallo al leer la ID única de la imagen de disco" @@ -2568,7 +2565,7 @@ msgstr "Fallo al escribir los datos en el fichero %s" msgid "Failed to write header for %s" msgstr "Fallo al escribir la cabecera para %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Persa" @@ -2580,7 +2577,7 @@ msgstr "Rápido" msgid "Fast Depth Calculation" msgstr "Cálculo de profundidad rápido" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Versión rápida del MMU. No funciona para todos los juegos." @@ -2616,7 +2613,7 @@ msgstr "" "El archivo no pudo ser abierto\n" "o no tiene una extensión válida" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2629,7 +2626,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "El archivo no es reconocido como una tarjeta de memoria" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Archivo sin comprimir" @@ -2638,11 +2635,11 @@ msgstr "Archivo sin comprimir" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Modo desconocido de apertura : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Sistema de archivos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "¡Tipo de archivo 'ini' desconocido¡ !No se abrirá!" @@ -2670,7 +2667,7 @@ msgstr "Forzar 16:9" msgid "Force 4:3" msgstr "Forzar 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Forzar consola como NTSC-J" @@ -2705,7 +2702,7 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2715,7 +2712,7 @@ msgstr "" "Deja sin marcar, Dolphin por defecto usa NTSC-U y activa automáticamente " "esta característica cuando se juega a juegos japoneses." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2727,7 +2724,7 @@ msgstr "" msgid "Forward" msgstr "Adelante" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Reenviar puerto (UPnP)" @@ -2770,7 +2767,7 @@ msgstr "Información de la grabación" msgid "Frame S&kipping" msgstr "Salto de &fotogramas" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Límite de fotogramas:" @@ -2782,9 +2779,9 @@ msgstr "Frames a grabar" msgid "Free Look" msgstr "Cámara libre" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francés" @@ -2817,27 +2814,27 @@ msgstr "Pad GC" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID del juego:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "¡El juego ya está ejecutándose!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "¡El juego no está ejecutándose!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "¡Juego no encontrado!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Configuración específica del juego" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Configurar Juego" @@ -2845,7 +2842,7 @@ msgstr "Configurar Juego" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "Ficheros de guardado de GameCube (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2854,7 +2851,7 @@ msgid "Gamecube &Pad Settings" msgstr "&Configuración del mando Gamecube" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Tarjetas de memoria de Gamecube (*.raw,*.gcp)" @@ -2862,12 +2859,12 @@ msgstr "Tarjetas de memoria de Gamecube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Configuración del Pad de Gamecube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Códigos Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2881,7 +2878,7 @@ msgstr "" "en el directorio Sys y reiniciando Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "General" @@ -2890,13 +2887,13 @@ msgstr "General" msgid "General Settings" msgstr "Ajustes generales" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Alemán" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2910,7 +2907,7 @@ msgstr "Gráficos" msgid "Graphics settings" msgstr "Configuración gráfica" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Mayor que" @@ -2932,7 +2929,7 @@ msgstr "" "\n" "Si no estás seguro, déjala marcada." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Griego" @@ -2956,11 +2953,11 @@ msgstr "Guitarra" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Falló la suma de verificación de cabecera" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebreo" @@ -2972,7 +2969,7 @@ msgstr "Altura" msgid "Help" msgstr "Ayuda" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2993,7 +2990,7 @@ msgstr "" "\n" "¡Adiós!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3033,7 +3030,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Hostear" @@ -3042,11 +3039,11 @@ msgid "Hotkey Configuration" msgstr "Configuración de atajos" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Atajos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Húngaro" @@ -3054,18 +3051,18 @@ msgstr "Húngaro" msgid "Hybrid Wiimote" msgstr "Wiimote híbrido" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Se trató de obtener los datos de un ticket desconocido: " "%08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3074,15 +3071,15 @@ msgstr "" "TitleID %016llx.\n" "Dolphin probablemente se colgará ahora." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - destino incorrecto" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Configuración IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3094,15 +3091,15 @@ msgstr "Puntero IR" msgid "IR Sensitivity:" msgstr "Sensibilidad IR:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Detalles de la ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Directorios de ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITALIA" @@ -3110,7 +3107,7 @@ msgstr "ITALIA" msgid "Icon" msgstr "Icono" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3182,7 +3179,7 @@ msgstr "" "El archivo importado tiene extensión .sav\n" "pero no tiene la cabecera correcta" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "En juego" @@ -3191,7 +3188,7 @@ msgid "Increase Frame limit" msgstr "Aumentar límite de Frames" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Información" @@ -3211,7 +3208,7 @@ msgstr "Insertar" msgid "Insert Encrypted or Decrypted code here..." msgstr "Insertar código encriptado o desencriptado aquí..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Insertar tarjeta SD" @@ -3223,35 +3220,35 @@ msgstr "Insertar un nombre aquí.." msgid "Install WAD" msgstr "Instalar WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Instalar al menú de la Wii" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "Se ha llamado InstallExceptionHandler, pero esta plataforma no lo soporta " "todavía." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Instalando WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Error de comprobación de la integridad" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Comprobación de la integridad finalizada" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Comprobación de la integridad finalizada. No se encontraron errores." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3260,11 +3257,11 @@ msgstr "" "Falló la comprobación de la integridad para la partición %d. Tu volcado está " "probablemente corrupto o ha sido parcheado incorrectamente." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Interfaz" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Configuración de la interfaz" @@ -3293,7 +3290,7 @@ msgstr "Resolución interna:" msgid "Interpreter (VERY slow)" msgstr "Intérprete (MUY lento)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3302,7 +3299,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Tamaño no válido(%x) o Magic word (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "¡Valor no válido!" @@ -3310,16 +3307,16 @@ msgstr "¡Valor no válido!" msgid "Invalid bat.map or dir entry" msgstr "bat.map o entrada de directorio no válido" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Evento de tipo %i no válido" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Archivo no válido" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3346,34 +3343,36 @@ msgstr "Cadena de búsqueda incorrecta (no se pudo convertir en un número)" msgid "Invalid search string (only even string lengths supported)" msgstr "Búsqueda de cadena incorrecta (solo se soportan algunas longitudes)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Estado no válido" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italiano" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPÓN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "Recompilador JIT (recomendado)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "Recompilador experimental JITIL" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japonés" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "COREA" @@ -3395,8 +3394,9 @@ msgstr "Mantener la ventana siempre visible" msgid "Key" msgstr "Clave" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Coreano" @@ -3414,7 +3414,7 @@ msgstr "Botón L" msgid "L-Analog" msgstr "L-Analógico" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Idioma:" @@ -3423,7 +3423,7 @@ msgstr "Idioma:" msgid "Last %i" msgstr "Último %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Latencia:" @@ -3462,11 +3462,11 @@ msgstr "" "Clic izq./der. para más opciones.\n" "Clic medio para borrar." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Menor que" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Usar FPS para limitar" @@ -3558,11 +3558,11 @@ msgstr "Cargar estado 9" msgid "Load State..." msgstr "Cargar estado..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Cargar Menú de sistema Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Cargar Menú de sistema Wii %d %c" @@ -3614,12 +3614,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Salida de registro" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Registrando" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "¡Se perdió la conexión con el servidor!" @@ -3636,7 +3636,7 @@ msgstr "" "MD5 no coinciden\n" "%016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Hack de velocidad MMU" @@ -3650,11 +3650,11 @@ msgstr "Archivos MadCatz Gameshark (*.gcs)" msgid "Main Stick" msgstr "Stick principal" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID del fabricante:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Fabricante:" @@ -3691,7 +3691,7 @@ msgid "Memory Byte" msgstr "Byte de memoria" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Tarjeta de memoria" @@ -3703,7 +3703,7 @@ msgstr "" "Administrador de tarjetas de memoria. ADVERTENCIA: Haz copias antes de " "usarlo; debería estar arreglado, ¡pero puede estropear cosas!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3720,7 +3720,7 @@ msgstr "" "%s\n" "¿Deseas copiar el viejo archivo a esta nueva dirección?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" "El tamaño del fichero de la tarjeta de memoria no corresponde con el tamaño " @@ -3730,7 +3730,7 @@ msgstr "" msgid "Menu" msgstr "Menú" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mic" @@ -3743,7 +3743,7 @@ msgstr "Mín." msgid "Misc" msgstr "Varios" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Configuraciones varias" @@ -3768,11 +3768,11 @@ msgstr "" msgid "Monospaced font" msgstr "Fuente monoespaciada" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3892,15 +3892,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Arriba" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Nombre:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Nombre:" @@ -3910,7 +3910,7 @@ msgstr "Nombre:" msgid "Native GCI files(*.gci)" msgstr "Archivos nativos GCI (*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nuevo escaneado" @@ -3919,7 +3919,7 @@ msgstr "Nuevo escaneado" msgid "Next Page" msgstr "Próxima página" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Próximo escaneado" @@ -3927,11 +3927,11 @@ msgstr "Próximo escaneado" msgid "Nickname :" msgstr "Apodo:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Ningún país (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Ninguna ISO o WAD ha sido encontrada." @@ -3970,24 +3970,25 @@ msgstr "No hay grabaciones guardadas" msgid "No save folder found for title %s" msgstr "No se encontró carpeta de guardado para el juego %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Ninguno" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Noruego Bokmal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "No igual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "No definido" @@ -3998,11 +3999,11 @@ msgstr "" "No es un guardado de Wii o fallo de lectura para la cabecera de archivo de " "tamaño %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Sin conectar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notas" @@ -4023,7 +4024,7 @@ msgstr "Aviso" msgid "Num Lock" msgstr "Bloq Num" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Número de códigos:" @@ -4044,7 +4045,7 @@ msgstr "Objeto" msgid "Object Range" msgstr "Rango de objeto" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Off" @@ -4052,7 +4053,7 @@ msgstr "Off" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Mensajes en pantalla" @@ -4070,11 +4071,11 @@ msgstr "Solo %d bloques disponibles" msgid "Open" msgstr "Abrir" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Abrir directorio &contenedor" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Abrir carpeta de guardado&s de Wii" @@ -4104,7 +4105,7 @@ msgstr "Descodificador de texturas OpenCL" msgid "OpenMP Texture Decoder" msgstr "Descodificador de texturas OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4112,11 +4113,7 @@ msgstr "" "Abre la configuración por defecto (modo solo lectura) para este juego en un " "editor de texto externo." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "Abre los cambios locales del usuario en un editor de texto externo" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opciones" @@ -4141,7 +4138,7 @@ msgstr "" msgid "Other" msgstr "Otros" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4157,11 +4154,11 @@ msgstr "Salida" msgid "P&lay Recording..." msgstr "&Reproducir grabación" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Pad" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Pad" @@ -4185,26 +4182,26 @@ msgstr "Párrafo" msgid "Parameters" msgstr "Parámetros" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partición %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "No existe la partición: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Parches" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Directorios" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pausa" @@ -4217,7 +4214,7 @@ msgstr "Pausar al acabar la película" msgid "Per-Pixel Lighting" msgstr "Iluminación por píxel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfecto" @@ -4228,8 +4225,8 @@ msgstr "Perspectiva %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Reproducir" @@ -4241,7 +4238,7 @@ msgstr "Reproducir grabación" msgid "Play/Pause" msgstr "Reproducir/pausa" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Jugable" @@ -4249,11 +4246,11 @@ msgstr "Jugable" msgid "Playback Options" msgstr "Opciones de reproducción" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Jugadores" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Confirma, por favor..." @@ -4265,36 +4262,36 @@ msgstr "Por favor, crea una perspectiva antes de guardar" msgid "Plus-Minus" msgstr "Más-menos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polaco" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Puerto 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Puerto 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Puerto 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Puerto 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Puerto:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugués" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugués (Brasil)" @@ -4307,7 +4304,7 @@ msgstr "Efecto de posprocesado:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Final prematuro de la película en PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Final prematuro de la película en PlayWiimote. %u + %d > %u" @@ -4329,7 +4326,7 @@ msgstr "Página previa" msgid "Previous Page" msgstr "Página previa" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Valor anterior" @@ -4353,8 +4350,8 @@ msgstr "Limpiar caché" msgid "Question" msgstr "Pregunta" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Salir" @@ -4376,7 +4373,7 @@ msgstr "R-Analógico" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSIA" @@ -4415,7 +4412,7 @@ msgstr "Wiimotes reales" msgid "Record" msgstr "Grabar" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Grabar entrada" @@ -4467,10 +4464,10 @@ msgstr "Actualizar lista" msgid "Refresh game list" msgstr "Actualizar lista de juegos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Eliminar" @@ -4493,7 +4490,7 @@ msgstr "Renderizar a ventana principal" msgid "Reset" msgstr "Reiniciar" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Resultados" @@ -4501,7 +4498,7 @@ msgstr "Resultados" msgid "Return" msgstr "Volver" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revisión:" @@ -4514,19 +4511,19 @@ msgstr "Derecha" msgid "Right Stick" msgstr "Stick Derecho" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Vibración" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Ejecuta DSP LLE en un hilo dedicado (no está recomendado: puede causar " "congelamientos)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Ruso" @@ -4600,12 +4597,12 @@ msgstr "Ranura de guardado 9" msgid "Save State..." msgstr "Guardar estado..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Guardar como..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Guardar GCM/ISO comprimido" @@ -4613,7 +4610,7 @@ msgstr "Guardar GCM/ISO comprimido" msgid "Save current perspective" msgstr "Guardar perspectiva actual" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Guardar GCM/ISO descomprimido" @@ -4628,16 +4625,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "EFB Copia a escala" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Escaneando %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Buscando ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Escaneando..." @@ -4653,11 +4650,11 @@ msgstr "Bloq. desplazamiento" msgid "Search" msgstr "Buscar" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Filtro de búsqueda" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Buscar en subcarpetas" @@ -4680,12 +4677,12 @@ msgstr "No se ha encontrado la sección %s en SYSCONF" msgid "Select" msgstr "Seleccionar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Seleccionar archivo de grabación" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Elige un WAD de Wii para instalar" @@ -4707,19 +4704,19 @@ msgstr "Selecciona un archivo de guardado para importar" msgid "Select floating windows" msgstr "Selecciona las ventanas flotantes" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Selecciona el archivo para cargar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Selecciona el archivo de guardado" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Selecciona el estado para cargar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Selecciona el estado para guardar" @@ -4741,7 +4738,7 @@ msgstr "" "\n" "Si no estás seguro, elige Automático." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "El perfil del controlador escogido no existe" @@ -4766,40 +4763,28 @@ msgstr "" "Si no estás seguro, elige la resolución que uses en el escritorio.\n" "Si sigues inseguro, elige la mayor resolución que te funcione." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Elige la aplicación gráfica para ser usada internamente.\n" -"Direct3D 9 habitualmente es la más rápida. OpenGL es más exacta. Direct3D 11 " -"está entre las dos.\n" -"Los sistemas Direct3D solo están disponibles en Windows.\n" -"\n" -"Si no estás seguro, utiliza Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Elige la aplicación gráfica para ser usada internamente.\n" -"Direct3D 9 habitualmente es la más rápida. OpenGL es más exacta. Direct3D 11 " -"está entre las dos.\n" -"Los sistemas Direct3D solo están disponibles en Windows.\n" -"\n" -"\n" -"Si no estás seguro, utiliza OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Enviar" @@ -4811,18 +4796,18 @@ msgstr "Posición de la barra sensora:" msgid "Separator" msgstr "Separador" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Puerto serie 1 - Este es el puerto que dispositivos como el adaptador de red " "usan." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Definir como ISO por &defecto" @@ -4831,14 +4816,14 @@ msgstr "Definir como ISO por &defecto" msgid "Set as default Memcard %c" msgstr "Definir como Memory Card por defecto %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: El índice es mayor que el tamaño de la lista de códigos " "AR %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4846,19 +4831,19 @@ msgstr "" "Ajusta la latencia (en ms). Valores más altos pueden reducir el petardeo del " "audio. Solo para el motor OpenAL." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Configuración..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: No se puede crear el archivo de configuración" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Sacudir" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Nombre corto:" @@ -4882,7 +4867,7 @@ msgstr "Mostrar barra de e&stado" msgid "Show &Toolbar" msgstr "Mostrar barra de herramien&tas" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Mostrar valores por defecto" @@ -4922,7 +4907,7 @@ msgstr "Mostrar JAP" msgid "Show Korea" msgstr "Mostrar Corea" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Mostrar idioma:" @@ -4962,11 +4947,11 @@ msgstr "Mostrar WAD" msgid "Show Wii" msgstr "Mostrar Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Mostrar una ventana de confirmación antes de detener un juego." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4985,7 +4970,7 @@ msgstr "Mostrar primer bloque" msgid "Show lag counter" msgstr "Mostrar contador de lag" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5037,23 +5022,24 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Wiimote de costado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Chino simplificado" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Tamaño" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Saltar BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Saltar limpieza DCBZ" @@ -5084,11 +5070,11 @@ msgstr "" msgid "Slot %i" msgstr "Ranura %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Ranura A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Ranura B" @@ -5096,7 +5082,7 @@ msgstr "Ranura B" msgid "Snapshot" msgstr "Instántanea" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Renderizado por software" @@ -5112,27 +5098,27 @@ msgstr "" "¿Realmente quieres activar renderizado por software? Si no estás seguro, " "elige No." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Configuración de sonido" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "El motor de sonido %s no es válido." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Falló la creación del búfer de sonido: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Espacio" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Español" @@ -5160,7 +5146,7 @@ msgstr "" "\n" "Si no estás seguro, elige 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Acelerar la transferencia de disco" @@ -5168,13 +5154,13 @@ msgstr "Acelerar la transferencia de disco" msgid "Square Stick" msgstr "Stick cuadrado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Control estándar" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Comenzar" @@ -5190,7 +5176,7 @@ msgstr "Comenzar graba&ción" msgid "Start Recording" msgstr "Comenzar grabación" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Estado" @@ -5198,7 +5184,7 @@ msgstr "Estado" msgid "State Saves" msgstr "Estados guardados" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Volante" @@ -5247,19 +5233,19 @@ msgstr "Se exportó correctamente al archivo %s" msgid "Successfully imported save files" msgstr "Los archivos de guardado se han importado con éxito." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Sueco" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Oscilar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Sincronizar subproceso de GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5267,12 +5253,13 @@ msgstr "" "Sincroniza los procesos de la GPU y la CPU para ayudar a prevenir bloqueos " "aleatorios en el modo a Doble Núcleo. (ON = Compatible, OFF = Rápido)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Idioma del sistema:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWÁN" @@ -5303,7 +5290,7 @@ msgstr "Tabla derecha" msgid "Take Screenshot" msgstr "Captura de pantalla" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5323,11 +5310,11 @@ msgstr "Caché de texturas" msgid "Texture Format Overlay" msgstr "Superposición del formato de la textura" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "El WAD ha sido instalado con éxito" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "La dirección no es válida" @@ -5335,13 +5322,13 @@ msgstr "La dirección no es válida" msgid "The checksum was successfully fixed" msgstr "La suma de verificación fue reparada con éxito." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "El directorio escogido ya se encuentra en la lista" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5365,7 +5352,7 @@ msgid "The file %s was already open, the file header will not be written." msgstr "" "El archivo %s ya estaba abierto, la cabecera de archivo no será escrita." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "El archivo especificado (%s) no existe" @@ -5399,7 +5386,7 @@ msgid "The save you are trying to copy has an invalid file size" msgstr "" "El guardado que está tratando de copiar tiene un tamaño de archivo no válido" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5407,19 +5394,19 @@ msgstr "" "El idioma seleccionado no es soportado por tu sistema. Volviendo al " "predeterminado del sistema." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "¡Las versiones de NetPlay del client y el servidor son incompatibles!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "¡El servidor está lleno!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "El servidor respondió: ¡el juego actualmente está funcionando!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "¡El servidor envió un mensaje de error desconocido!" @@ -5428,15 +5415,15 @@ msgstr "¡El servidor envió un mensaje de error desconocido!" msgid "The specified file \"%s\" does not exist" msgstr "El archivo especificado \"%s\" no existe" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "El valor no es válido" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5444,7 +5431,7 @@ msgstr "" "Debe haber un ticket para 00000001/00000002. Probablemente su volcado de " "NAND esté incompleto." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5452,7 +5439,7 @@ msgstr "" "Estas opciones remplazan a las opciones de núcleo de Dolphin.\n" "Sin determinar significa que el juego usa la configuración de Dolphin." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5460,7 +5447,7 @@ msgstr "" "El simulador de Action Replay no soporta códigos que modifiquen al Action " "Replay." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" "Esto podría provocar peor rendimiento en el Menú de Wii y algunos juegos." @@ -5486,7 +5473,7 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5498,7 +5485,7 @@ msgstr "" "utilizar la regulación de audio con el DSP (puede arreglar los clics de " "audio, pero puede causar ruido constante dependiendo del juego)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5510,7 +5497,7 @@ msgstr "" "Provoca mejoras de velocidad muy grandes en PC con mas de un núcleo, pero " "puede ocasionar errores gráficos o del programa." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Esto te permitirá editar manualmente el archivo de configuración INI" @@ -5519,12 +5506,12 @@ msgstr "Esto te permitirá editar manualmente el archivo de configuración INI" msgid "Threshold" msgstr "Límite" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Inclinar" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Título" @@ -5559,15 +5546,16 @@ msgid "Toggle IR" msgstr "Activar IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Superior" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Chino tradicional" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Se trató de cargar un archivo de tipo desconocido." @@ -5587,7 +5575,7 @@ msgstr "" "Intentando leer de un SYSCONF no válido\n" "bt ids del Wiimote no están disponibles" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turco" @@ -5603,12 +5591,12 @@ msgstr "Tipo" msgid "UDP Port:" msgstr "Puerto UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "DESCONOCIDO" @@ -5617,7 +5605,7 @@ msgstr "DESCONOCIDO" msgid "UNKNOWN_%02X" msgstr "DESCONOCIDO_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "EUA" @@ -5630,9 +5618,9 @@ msgstr "" "Entrada no modificada." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5657,11 +5645,11 @@ msgstr "Deshacer estado guardado" msgid "Unexpected 0x80 call? Aborting..." msgstr "¿Llamada inesperada a 0x80? Cancelando..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Desconocido" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Comando desconocido de DVD %08x - error fatal" @@ -5676,12 +5664,12 @@ msgstr "Comando desconocido 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "¡Entrada desconocida de tipo %i en SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Se recibió un mensaje desconocido de id: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5692,16 +5680,16 @@ msgstr "" msgid "Up" msgstr "Arriba" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Actualizar" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Wiimote parado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Usar Modo EuRGB60 (PAL60)" @@ -5709,11 +5697,11 @@ msgstr "Usar Modo EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Usar pantalla completa" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Usar hexadecimal" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Usar advertencias" @@ -5780,11 +5768,11 @@ msgstr "Utilidad" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Hack de velocidad VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Valor" @@ -5792,7 +5780,7 @@ msgstr "Valor" msgid "Value:" msgstr "Valor:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Valor:" @@ -5804,7 +5792,7 @@ msgstr "Verbosidad" msgid "Vertex Streaming Hack" msgstr "Hack del streaming de vértices" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Vídeo" @@ -5812,7 +5800,7 @@ msgstr "Vídeo" msgid "Virtual" msgstr "Virtual" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volumen" @@ -5845,15 +5833,15 @@ msgstr "" msgid "Warning" msgstr "Advertencia" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "¡Advertencia - arrancando un DOL en un modo de consola incorrecto!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "¡Advertencia - arrancando un ELF en un modo de consola incorrecto!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "¡Advertencia - arrancando un ISO en un modo de consola incorrecto!" @@ -5957,19 +5945,19 @@ msgstr "Hack de pantalla ancha (widescreen)" msgid "Width" msgstr "Ancho" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Consola Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Raíz de la NAND de Wii:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Archivos de guardado Wii (*.bin)|*.bin" @@ -5982,12 +5970,18 @@ msgstr "WiiWAD: No se pudo leer el archivo" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote conectado" @@ -6019,14 +6013,14 @@ msgstr "Windows Derecha" msgid "Word Wrap" msgstr "Word Wrap" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Trabajando..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Escribir memcards (GC)" @@ -6046,21 +6040,36 @@ msgstr "Escribir al archivo" msgid "Write to Window" msgstr "Escribir a la ventana" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice falló: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 init falló: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 creación de voz maestra falló: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice falló: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 init falló: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 creación de voz maestra falló: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "Registro XF" @@ -6091,15 +6100,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "No puede cerrar ventanas que tengan páginas en ellas." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "¡¡Debes elegir un juego!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "¡Debes escribir un nombre!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Debes introducir un valor decimal o hexadecimal válido." @@ -6107,7 +6116,7 @@ msgstr "Debes introducir un valor decimal o hexadecimal válido." msgid "You must enter a valid profile name." msgstr "Debes introducir un nombre de perfil válido." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Debes reiniciar Dolphin para que el cambio tenga efecto." @@ -6121,7 +6130,7 @@ msgstr "" "¿Deseas detener ahora para arreglar el problema?\n" "Si seleccionas \"No\", el audio se oirá con ruidos." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6140,15 +6149,15 @@ msgstr "" "Debería ser 0x%04x (pero es 0x%04llx)\n" "¿Quiere crear uno nuevo?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "Zelda TP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Código Zero 3 no soportado" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Código cero desconocido para Dolphin: %08x" @@ -6209,29 +6218,24 @@ msgstr "" "\n" "Si no estás seguro, déjala sin marcar." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Leyendo Opcode desde %x. Por favor, comunícalo." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "Resultado desconocido %d (esperado %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "Mensaje desconocido recibido" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "¡wxExecute dio un -1 al iniciar la aplicación!" @@ -6246,3 +6250,49 @@ msgstr "Correción zNear:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OR" + +#~ msgid "Could not create %s" +#~ msgstr "No se pudo crear %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Editar cambios locales" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "Abre los cambios locales del usuario en un editor de texto externo" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Elige la aplicación gráfica para ser usada internamente.\n" +#~ "Direct3D 9 habitualmente es la más rápida. OpenGL es más exacta. Direct3D " +#~ "11 está entre las dos.\n" +#~ "Los sistemas Direct3D solo están disponibles en Windows.\n" +#~ "\n" +#~ "Si no estás seguro, utiliza Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Elige la aplicación gráfica para ser usada internamente.\n" +#~ "Direct3D 9 habitualmente es la más rápida. OpenGL es más exacta. Direct3D " +#~ "11 está entre las dos.\n" +#~ "Los sistemas Direct3D solo están disponibles en Windows.\n" +#~ "\n" +#~ "\n" +#~ "Si no estás seguro, utiliza OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Leyendo Opcode desde %x. Por favor, comunícalo." diff --git a/Languages/po/fa.po b/Languages/po/fa.po index a831a69752..09c328496c 100644 --- a/Languages/po/fa.po +++ b/Languages/po/fa.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Persian (http://www.transifex.com/projects/p/dolphin-emu/" @@ -19,13 +19,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(برای نمایش دادن بسیار زیاد است)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "بازی :" @@ -33,7 +33,7 @@ msgstr "بازی :" msgid "! NOT" msgstr "! نه" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -59,12 +59,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sکپی%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -75,12 +75,12 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "%s وجود دارد، بازنویسی شود؟" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s تمیز کارى آیزو با شکست مواجه شد. شاید فایل آیزو خراب است." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -89,7 +89,7 @@ msgstr "" "%s بارگذاری بعنوان کارت حافظه با شکست مواجه شد \n" "حجم فایل کارت نامعتبر است (0x%x بایت)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -98,7 +98,7 @@ msgstr "" "%s بارگذاری بعنوان کارت حافظه با شکست مواجه شد \n" "حجم کارت حافظه نامعتبر است (0x%x بایت)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -112,7 +112,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s بازکردن با شکست مواجه شد" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -122,7 +122,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s یک فایل با حجم ۰ بایت است" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s فشرده شده است! توان فشرده سازی بیشتر را ندارد." @@ -180,11 +180,11 @@ msgstr "مدیریت کدهای &تقلب" msgid "&DSP Settings" msgstr "تنظیمات پردازشگر &صدای دلفین" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&حذف آیزو..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&حذف آیزو های انتخاب شده..." @@ -248,7 +248,7 @@ msgstr "مکث" msgid "&Play" msgstr "&شروع بازی" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "خواص" @@ -292,7 +292,7 @@ msgstr "&دیدگاه" msgid "&Wiimote Settings" msgstr "تنظیمات &ویموت" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&ویکی" @@ -328,7 +328,7 @@ msgstr "۰x۴۴" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "۱۶ بیت" @@ -344,7 +344,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "۳۲ بیت" @@ -360,7 +360,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "۸ بیت" @@ -372,7 +372,7 @@ msgstr "<اسم را اینجا وارد کنید>" msgid "" msgstr "<سایز تصویر پیدا نشد>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "<هیچ>" @@ -380,7 +380,7 @@ msgstr "<هیچ>" msgid "" msgstr "<تکمه فشارى>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<سیستم>" @@ -388,13 +388,13 @@ msgstr "<سیستم>" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "پنجره نت پلی از قبل باز است!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "بازی در حال حاضر اجرا نشده است." @@ -413,21 +413,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "بُردِ مادر ای ام" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "کدهای اکشن ریپلی" @@ -476,14 +477,14 @@ msgstr "" "کد خراب:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" "خطای اکشن ریپلی: سایز نامعتبر (%08x : آدرس = %08x) در اضافه کردن کد (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -491,7 +492,7 @@ msgid "" msgstr "" "خطای اکشن ریپلی: سایز نامعتبر (%08x : آدرس = %08x) در پر و اسلاید کردن (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -500,7 +501,7 @@ msgstr "" "خطای اکشن ریپلی: سایز نامعتبر (%08x : آدرس = %08x) در پر کردن و نوشتن حافظه " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -508,12 +509,12 @@ msgid "" msgstr "" "خطای اکشن ریپلی: سایز نامعتبر (%08x : آدرس = %08x) در نوشتن به اشاره گر (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "خطای اکشن ریپلی: مقدار نامعتبر (%08x) در کپی حافظه (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -522,27 +523,27 @@ msgstr "" "خطای اکشن ریپلی: کد مستر و نوشتن به CCXXXXXX تکمیل نشده است (%s)\n" "به کدهای مستر نیاز نیست. از کدهای مستر استفاده نکنید." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "خطای اکشن ریپلی: خط کد نامعتبر اکشن ریپلی: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "خطای اکشن ریپلی: کد نامعلوم: سایز نامعتبر %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "خطای اکشن ریپلی: الگوی کد عادی نامعتبر %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "خطای اکشن ریپلی: کد عادی %i: کد فرعی نامعتبر %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "خطای اکشن ریپلی: کد عادی ۰: کد فرعی نامعتبر %08x (%s)" @@ -556,11 +557,11 @@ msgstr "آداپتور:" msgid "Add" msgstr "اضافه کردن" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "اضافه کردن کد اکشن ریپلی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "اضافه کردن وصله" @@ -568,9 +569,9 @@ msgstr "اضافه کردن وصله" msgid "Add new pane" msgstr "اضافه کردن تکه جدید" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "اضافه کردن..." @@ -622,36 +623,36 @@ msgstr "تنظیم فشار کنترل آنالوگ برای فعال کردن msgid "Advanced" msgstr "پیشرفته" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "تنظیمات پیشرفته" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "همه فایل های گیم کیوب/وی (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "همه ایمیجهای گیم کیوب/وی (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "همه فایل های گیم کیوب جی سی ام (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "همه وضعیت های ذخیره (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "همه فایل های آیزو وی (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "همه فایل های آیزو فشرده شده گیم کیوب/وی (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "همه فایل ها (*.*)|*.*" @@ -671,19 +672,19 @@ msgstr "فیلتر ناهمسانگر:" msgid "Anti-Aliasing:" msgstr "آنتی آلیاسینگ:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "سایز بارگذار برنامه اشتباه است...آیا این واقعا بارگذار برنامه است؟" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "بارگذار برنامه ناتوان در بارگذاری از فایل" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "بار گذار برنامه:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "اعمال کردن" @@ -697,7 +698,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، (خاموش) را انتخاب کنید." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "عربی" @@ -706,7 +707,7 @@ msgstr "عربی" msgid "Are you sure you want to delete \"%s\"?" msgstr "آیا شما مطمئن هستید که میخواهید \"%s\" را حذف کنید؟" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -714,7 +715,7 @@ msgstr "" "آیا شما مطمئن هستید که میخواهید این فایلها را حذف کنید؟\n" "این فایل ها برای همیشه از بین خواهند رفت!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "آیا شما مطمئن هستید که میخواهید این فایل را حذف کنید؟ این فایل برای همیشه " @@ -724,7 +725,11 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "نسبت طول به عرض تصویر:" @@ -733,12 +738,12 @@ msgstr "نسبت طول به عرض تصویر:" msgid "At least one pane must remain open." msgstr "حداقل یک قطه می بایست باز بماند." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "صدا" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "پشتوانه صدا:" @@ -746,7 +751,7 @@ msgstr "پشتوانه صدا:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: خطا در باز کردن دستگاه خروجی صدا.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "اتوماتیک" @@ -785,16 +790,16 @@ msgstr "ثبت اشاره گر پایه" msgid "Back" msgstr "برگشت" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "تنظیمات پشتوانه" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "پشتوانه:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "ورودی پس زمینه" @@ -812,15 +817,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "نشان" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "جزئیات نشان" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "نشان:" @@ -832,7 +837,7 @@ msgstr "نوار" msgid "Basic" msgstr "بنیانی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "تنظیمات بنیانی" @@ -840,7 +845,7 @@ msgstr "تنظیمات بنیانی" msgid "Bass" msgstr "بم" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "چک سام جدول تخصیص بلوک با شکست مواجه شد" @@ -861,7 +866,7 @@ msgid "Blue Right" msgstr "آبی راست" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "پائین" @@ -870,7 +875,7 @@ msgstr "پائین" msgid "Bound Controls: %lu" msgstr "کنترل های محدودیت: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "خراب" @@ -878,7 +883,7 @@ msgstr "خراب" msgid "Browse" msgstr "مرور" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "مرور برای پوشه جهت اضافه کردن" @@ -886,11 +891,11 @@ msgstr "مرور برای پوشه جهت اضافه کردن" msgid "Browse for an ISO directory..." msgstr "مرور برای پوشه آیزو..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "مرور برای پوشه خروجی" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "حافظه موقت:" @@ -900,7 +905,7 @@ msgstr "حافظه موقت:" msgid "Buttons" msgstr "دکمه ها" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -924,7 +929,7 @@ msgstr "استیک سی" msgid "CP reg" msgstr "ثبت سی پی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "موتور پردازشگر برابرساز" @@ -946,17 +951,17 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "لغو کردن" @@ -968,11 +973,11 @@ msgstr "لغو کردن" msgid "Cannot open %s" msgstr "قادر به باز گشایی نیست %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "رویدادهایی را که معوق اند نمی تواند از ثبت درآورد." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -983,7 +988,7 @@ msgstr "" "%s\n" "این یک فایل کارت حافظه معتبر گیم کیوب نیست" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -995,7 +1000,7 @@ msgstr "" msgid "Caps Lock" msgstr "کپس لاک" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "کاتالان" @@ -1003,7 +1008,7 @@ msgstr "کاتالان" msgid "Center" msgstr "مرکز" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "تعویض" @@ -1015,11 +1020,11 @@ msgstr "تعویض &دیسک..." msgid "Change Disc" msgstr "تعویض دیسک" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "تعویض بازی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1035,12 +1040,12 @@ msgstr "تغییرات علامت به پارامتر z دور (بعد از تص msgid "Changes sign to zNear Parameter (after correction)" msgstr "تغییرات علامت به پارامتر z نزدیک (بعد از تصحیح)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "تغییر دادن این مورد در حالی که برابرساز در حال اجراست اثری نخواهد داشت!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "گپ زدن" @@ -1048,47 +1053,47 @@ msgstr "گپ زدن" msgid "Cheat Code" msgstr "کد تقلب" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "جستجوی کد تقلب" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "مدیر کدهای تقلب" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "برسی عدم نقص پارتیشن" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "برسی عدم نقص..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "چینی (ساده شده)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "چینی (سنتی)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "انتخاب یک پوشه ریشه برای دی وی دی:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "انتخاب یک پوشه ریشه برای نند:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "انتخاب آیزو پیش فرض:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "انتخاب پوشه برای اضافه کردن" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "انتخاب فایل برای باز کردن" @@ -1096,7 +1101,7 @@ msgstr "انتخاب فایل برای باز کردن" msgid "Choose a memory card:" msgstr "انتخاب کارت حافظه:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1104,8 +1109,8 @@ msgstr "" "انتخاب فایل برای استفاده بعنوان بارگذار برنامه: (به دیسک هایی که فقط از پوشه " "ها ساخته شده اند اعمال می کند)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "انتخاب پوشه برای استخراج به آن" @@ -1124,7 +1129,7 @@ msgstr "کلاسیک" msgid "Clear" msgstr "پاک کردن" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1134,7 +1139,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "بستن" @@ -1143,11 +1148,11 @@ msgstr "بستن" msgid "Co&nfigure..." msgstr "پی&کربندی..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "مشخصات کد" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "کد:" @@ -1159,20 +1164,20 @@ msgstr "دستور" msgid "Comment" msgstr "توضیح" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "توضیح:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "فشرده کردن آیزو..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "فشرده کردن آیزو های انتخاب شده..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "در حال فشرده کردن آیزو" @@ -1190,8 +1195,8 @@ msgstr "پیکربندی" msgid "Configure Control" msgstr "کنترل پیکربندی" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "پیکربندی گیم پدها" @@ -1199,13 +1204,13 @@ msgstr "پیکربندی گیم پدها" msgid "Configure..." msgstr "پیکربندی..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "تائید بازنویسی فایل" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "تائید برای توقف" @@ -1219,7 +1224,7 @@ msgstr "اتصال" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "اتصال کیبورد USB" @@ -1244,7 +1249,7 @@ msgstr "اتصال ویموت ۳" msgid "Connect Wiimote 4" msgstr "اتصال ویموت ۴" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "در حال اتصال..." @@ -1264,7 +1269,7 @@ msgstr "کنترل" msgid "Convert to GCI" msgstr "تبدیل به جی سی آی" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "کپی با شکست مواجه شد" @@ -1273,16 +1278,11 @@ msgstr "کپی با شکست مواجه شد" msgid "Copy to Memcard %c" msgstr "کپی به کارت حافظه %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "هسته" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "قادر به ساخت نیست %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "قادر به نصب پشتوانه نیست %s" @@ -1298,12 +1298,12 @@ msgstr "" "نیست. لطفا توجه داشته باشید که دیسک های اصلی گیم کیوب/وی توسط اکثر دی وی دی " "درایوهای کامپیوتر قابل خواندن نیستند." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "قادر به تشخیص فایل آیزو %s نبود" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "قادر به ذخیره کردن نیست %s" @@ -1321,11 +1321,11 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "قادر به یافتن دستور باز برای پسوند 'ini' نیست!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1333,17 +1333,17 @@ msgstr "" "قادر به اينيت کردن هسته نیست.\n" "تنظیمات خود را چک کنید." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "شماردن:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "کشور:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "ساخت کد اکشن ریپلی" @@ -1378,12 +1378,12 @@ msgstr "" msgid "Crossfade" msgstr "ضرب دری" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "هک کردن دستی تصویر" @@ -1391,11 +1391,11 @@ msgstr "هک کردن دستی تصویر" msgid "Custom Projection Hack Settings" msgstr "تنظیمات مربوط به هک کردن دستی تصویر" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "دستکاری برخی از پارامتر های خطوط عمودی تصویر." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "چکوسلواکی" @@ -1411,20 +1411,20 @@ msgstr "پد هدایتی" msgid "DSP" msgstr "پردازشگر صدای دلفین" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "موتور برابرساز پردازشگر صدای دلفین" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "برابرسازی سطح بالای پردازشگر صدای دلفین (سریع)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "مفسر سطح پائین پردازشگر صدای دلفین (کند)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "ری کامپایلر سطح پائین پردازشگر صدای دلفین" @@ -1432,11 +1432,11 @@ msgstr "ری کامپایلر سطح پائین پردازشگر صدای دلف msgid "DSP settings" msgstr "تنظیمات پردازشگر صدای دلفین" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "ریشه دی وی دی:" @@ -1451,15 +1451,15 @@ msgstr "" "خواندن سطح پائین کد گشایی شده دی وی دی - خطای مهلک: خواندن از روی دیسک با " "شکست مواجه شد" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "اندازه داده" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "تاریخ:" @@ -1488,16 +1488,16 @@ msgstr "اشکال زدائی کردن" msgid "Decimal" msgstr "دسیمال" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "ناهمفشرده کردن آیزو..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "ناهمفشرده کردن آیزو های انتخاب شده..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "در حال ناهمفشرده کردن آیزو" @@ -1509,7 +1509,7 @@ msgstr "" msgid "Default" msgstr "پیش فرز" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "آیزو پیش فرز:" @@ -1553,8 +1553,8 @@ msgstr "" msgid "Device" msgstr "دستگاه" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "تنظیمات دستگاه" @@ -1562,15 +1562,12 @@ msgstr "تنظیمات دستگاه" msgid "Dial" msgstr "شماره گیری" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D ۱۱" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D ۹" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1630,7 +1627,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "دیسک" @@ -1657,19 +1654,19 @@ msgstr "" msgid "Divide" msgstr "تقسیم" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "آیا می خواهید برابرسازی فعلی را متوقف کنید؟" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "کدبردار دالبی پرو لاجیک دو" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "دلفین" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1700,9 +1697,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1726,12 +1722,12 @@ msgstr "پیکربندی ویمیوت برابرسازی شده دلفین" msgid "Dolphin FIFO" msgstr "دلفین فیفو" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "پیکربندی گیم پد گیم کیوب دلفین" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "فیلم های تاس دلفین (*.dtm)" @@ -1743,7 +1739,7 @@ msgstr "پیکربندی ویموت دلفین" msgid "Dolphin at &Google Code" msgstr "دلفین در &گوگل کد" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1751,7 +1747,7 @@ msgstr "" "دلفین قادر به پیدا کردن آیزو های گیم کیوب/وی نیست. برای مرور فایل ها دو بار " "اینجا کلیک کنید..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1759,12 +1755,12 @@ msgstr "" "دلفین در حال حاضر ست شده است که همه بازی ها را مخفی کند. برای نمایش بازی ها " "دو بار اینجا کلیک کنید..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "دلفین نتوانست عمل خواسته شده را تکمیل کند." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1788,11 +1784,11 @@ msgstr "%lu کد دانلود شد. (%lu عدد اضافه شد)" msgid "Drums" msgstr "طبل ها" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "مصنوعی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "نسخه برداری صدا" @@ -1840,9 +1836,9 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "هلندی" @@ -1867,7 +1863,7 @@ msgstr "" "اندازی مجدد در این مرحله برای اینکه ویندوز درایور جدید را شناسایی کند لازم " "باشد." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "اروپا" @@ -1883,14 +1879,10 @@ msgstr "ویرایش" msgid "Edit ActionReplay Code" msgstr "ویرایش کدهای اکشن ریپلی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "ویرایش پیکربندی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "ویرایش وصله" @@ -1899,8 +1891,8 @@ msgstr "ویرایش وصله" msgid "Edit current perspective" msgstr "ویرایش چشم انداز جاری" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "ویرایش..." @@ -1912,7 +1904,7 @@ msgstr "افکت" msgid "Embedded Frame Buffer" msgstr "حافظه میانجی فریم جاساز شده" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "ریسمان شبیه ساز قبلا اجرا شده است" @@ -1951,7 +1943,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "ویموت برابرسازی شده" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "وضعیت برابرساز:" @@ -1975,15 +1967,15 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "فعال کردن واقعه نگاری اکشن ریپلی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "فعال کردن ادغام بلوک" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "فعال کردن محاسبه حد جعبه" @@ -1991,27 +1983,27 @@ msgstr "فعال کردن محاسبه حد جعبه" msgid "Enable Cache" msgstr "فعال کردن حافظه ميانى" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "فعال کردن کدهای تقلب" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "فعال کردن پردازنده با دو هسته یا بیشتر" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "فعال کردن پردازنده با دو هسته یا بیشتر (بالا بردن سرعت)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "فعال کردن جهش بیکاری" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "فعال کردن جهش بیکاری (بالا بردن سرعت)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "فعال کردن واحد مدیریت حافظه" @@ -2019,7 +2011,7 @@ msgstr "فعال کردن واحد مدیریت حافظه" msgid "Enable Progressive Scan" msgstr "فعال کردن پويش تصاعدی (Progressive Scan)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "فعال کردن اسکیرین سیور" @@ -2027,7 +2019,7 @@ msgstr "فعال کردن اسکیرین سیور" msgid "Enable Speaker Data" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "فعال کردن صفحه عریض" @@ -2049,7 +2041,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، حالت 1x را انتخاب کنید." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2085,7 +2077,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2093,11 +2085,11 @@ msgstr "" "برای بالا بردن سرعت بازی افسانه زلدا: شاهدخت سپیده دم این گزینه را فعال " "کنید. غیرفعال برای هر بازی دیگر." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "فعال کردن پروژه هک دستی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2105,7 +2097,7 @@ msgstr "" "فعال کردن برابر سازی دالبی پرو لاجیک دو توسط خروجی فراگیر 5.1 (Surround). در " "OSX موجود نیست." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2124,7 +2116,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2146,9 +2138,9 @@ msgstr "" msgid "End" msgstr "پایان" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "انگلیسی" @@ -2171,22 +2163,21 @@ msgstr "ورودی %d/%d" msgid "Entry 1/%d" msgstr "ورودی 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "همگن" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "خطا" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "بارگذاری زبان انتخاب شده با شکست مواجه شد. برگشت به زبان پیش فرض سیستم." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2234,7 +2225,7 @@ msgstr "" msgid "Export Failed" msgstr "صادر کردن با شکست مواجه شد" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "صادر کردن فایل" @@ -2250,7 +2241,7 @@ msgstr "صادر کردن ضبط..." msgid "Export Save" msgstr "صادر کردن ذخیره" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "صادر کردن فایل ذخیره وی (آزمایشی)" @@ -2266,7 +2257,7 @@ msgstr "" msgid "Export save as..." msgstr "صادر کردن ذخیره بعنوان..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "پسوند" @@ -2282,44 +2273,44 @@ msgstr "پارامتر اضافی" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "پارامترهای یدکی مفید تنها برای \"Metroid Other M\"." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "استخراج همه فایل ها..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "استخراج بارگذار برنامه..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "استخراج دال..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "استخراج پوشه..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "استخراج فایل..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "استخراج پارتیشن..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "استخراج کردن %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "استخراج کردن همه فایل ها" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "استخراج کردن پوشه" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "استخراج کردن..." @@ -2331,15 +2322,15 @@ msgstr "بایت فیفو" msgid "FIFO Player" msgstr "پخش کننده فیفو" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "فرانسه" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "اندازه اف اس تی:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "اتصال با شکست مواجه شد!" @@ -2347,11 +2338,15 @@ msgstr "اتصال با شکست مواجه شد!" msgid "Failed to download codes." msgstr "دانلود کدها با شکست مواجه شد." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "استخراج به %s با شکست مواجه شد!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2401,7 +2396,7 @@ msgstr "خواندن banner.bin با شکست مواجه شد" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2412,7 +2407,7 @@ msgstr "" "امکان ناقص بودن کارت حافظه وجود دارد\n" "موقعیت فایل:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2420,7 +2415,7 @@ msgstr "" "خواندن صحیح بکاپ جدول تخصیص بلوک با شکست مواجه شد\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2438,7 +2433,7 @@ msgstr "خواندن داده از فایل با شکست مواجه شد %d" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2446,7 +2441,7 @@ msgstr "" "خواندن صحیح بکاپ پوشه با شکست مواجه شد\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2458,7 +2453,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2471,7 +2466,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "خواندن آی دی یگانه از ایمیج دیسک با شکست مواجه شد" @@ -2493,7 +2488,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "نوشتن سرخط برای %s با شکست مواجه شد" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "پارسی" @@ -2505,7 +2500,7 @@ msgstr "سریع" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "نسخه سریع واحد مدیریت حافظه. برای همه بازی ها عمل نمی کند." @@ -2540,7 +2535,7 @@ msgstr "" "فایل قادر به باز شدن نیست\n" "یا دارای پسوند معتبر نیست" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2553,7 +2548,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "فایل به عنوان کارت حافظه شناخته نشده است" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "فایل فشرده نیست" @@ -2562,11 +2557,11 @@ msgstr "فایل فشرده نیست" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "ورودی/خروجی فایل: حالت گشودن ناشناس : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "فایل سیستم" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "نوع فایل 'ini' ناشناس است! باز نخواهد شد!" @@ -2594,7 +2589,7 @@ msgstr "۱۶:۹ اجباری" msgid "Force 4:3" msgstr "۴:۳ اجباری" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "کنسول به عنوان NTSC-J اجباری" @@ -2627,7 +2622,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2637,7 +2632,7 @@ msgstr "" "این گزینه را رها کنید، حالت پیش فرض دلفین NTSC-U می باشد, دلفین به طور " "خودکار این گزینه را برای بازی های ژاپنی فعال می کند." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2649,7 +2644,7 @@ msgstr "" msgid "Forward" msgstr "جلو" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2692,7 +2687,7 @@ msgstr "محدوده فریم" msgid "Frame S&kipping" msgstr "پری&دن از روی فریم" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "حد فریم:" @@ -2704,9 +2699,9 @@ msgstr "فریم ها برای ضبط شدن" msgid "Free Look" msgstr "نگاه آزاد" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "فرانسوی" @@ -2739,27 +2734,27 @@ msgstr "گیم پد گیم کیوب" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "آی دی بازی:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "بازی قبلا اجرا شده است!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "بازی اجرا نشده است!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "تنظیمات مشخصات بازی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "پیکربندی بازی" @@ -2767,7 +2762,7 @@ msgstr "پیکربندی بازی" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "فایل های ذخیره بازی گیم کیوب(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "گیم کیوب" @@ -2776,7 +2771,7 @@ msgid "Gamecube &Pad Settings" msgstr "تنظیمات &دسته گیم کیوب" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "کارت های حافظه گیم کیوب (*.raw.*.gcp)" @@ -2784,12 +2779,12 @@ msgstr "کارت های حافظه گیم کیوب (*.raw.*.gcp)" msgid "Gamecube Pad settings" msgstr "تنظیمات دسته گیم کیوب" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "کدهای گیکو" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2803,7 +2798,7 @@ msgstr "" "استفاده کنید.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "کلی" @@ -2812,13 +2807,13 @@ msgstr "کلی" msgid "General Settings" msgstr "تنظیمات جامع" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "آلمانی" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "گرفتن کد اکشن ریپلی: فهرست بزرگتر از سایز لیست است %lu" @@ -2831,7 +2826,7 @@ msgstr "گرافیک" msgid "Graphics settings" msgstr "تنظیمات گرافیک" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "بزرگتر از" @@ -2852,7 +2847,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را رها کنید." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "یونانی" @@ -2876,11 +2871,11 @@ msgstr "گیتار" msgid "Hacks" msgstr "هک" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "چک کردن سر خط برای یافتن خطا با شکست مواجه شد" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "عبری" @@ -2892,7 +2887,7 @@ msgstr "ارتفاع" msgid "Help" msgstr "کمک" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2904,7 +2899,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2945,7 +2940,7 @@ msgid "Home" msgstr "خانه" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "میزبان" @@ -2954,11 +2949,11 @@ msgid "Hotkey Configuration" msgstr "پیکربندی شرت کات" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "شرت کاتها" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "مجارستانی" @@ -2966,30 +2961,30 @@ msgstr "مجارستانی" msgid "Hybrid Wiimote" msgstr "ویموت مخلوط" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: آزمایش برای گرفتن داده از یک بلیط ناشناخته: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - مقصد ناصحیح" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "تنظیمات آی پی ال" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "فروسرخ" @@ -3001,15 +2996,15 @@ msgstr "اشاره گر فروسرخ" msgid "IR Sensitivity:" msgstr "میزان حساسیت فروسرخ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "جزئیات آیزو" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "پوشه های آیزو" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ایتالیا" @@ -3017,7 +3012,7 @@ msgstr "ایتالیا" msgid "Icon" msgstr "تندیس" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3089,7 +3084,7 @@ msgstr "" "پسوند فایل وارد شده اس ای وی می باشد\n" "اما دارای سرخط صحیح نمی باشد" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "در بازی" @@ -3098,7 +3093,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "مشخصات" @@ -3118,7 +3113,7 @@ msgstr "درج" msgid "Insert Encrypted or Decrypted code here..." msgstr "درج کد رمز شده و یا کشف شده..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "درج کارت اس دی" @@ -3130,35 +3125,35 @@ msgstr "درج اسم..." msgid "Install WAD" msgstr "نصب واد" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "نصب به فهرست انتخاب وی" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "نصب دستگذار استثناء فراخوانده شد، اما این پلتفورم هنوز از این امکان پشتیبانی " "نمی کند." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "در حال نصب واد..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "خطای بررسی درست بودن" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "بررسی درست بودن به پایان رسید" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "بررسی درست بودن به پایان رسید. خطایی پیدا نشد." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3167,11 +3162,11 @@ msgstr "" "بررسی درست بودن پارتیشن %d با شکست مواجه شد. نسخه برداری شما به احتمال زیاد " "خراب یا نادرست وصله خورده است." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "واسط گرافیک" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "تنظیمات واسط گرافیک" @@ -3200,7 +3195,7 @@ msgstr "وضوح داخلی:" msgid "Interpreter (VERY slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "صفحه نخست" @@ -3209,7 +3204,7 @@ msgstr "صفحه نخست" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "سایز نا معتبر (%x) یا کلمه جادو (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "مقدار نامعتبر!" @@ -3217,16 +3212,16 @@ msgstr "مقدار نامعتبر!" msgid "Invalid bat.map or dir entry" msgstr "bat.map نامعتبر یا ورودی پوشه" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "نوع واقعه نامعتبر %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "فایل نامعتبر" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3253,34 +3248,36 @@ msgstr "رشته جستجوی نامعتبر (قادر به تبدیل به عد msgid "Invalid search string (only even string lengths supported)" msgstr "رشته جستجوی نامعتبر (فقط رشته های با طول زوج پشتیبانی می شود)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "وضعیت نامعتبر" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "ایتالیایی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "ژاپن" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "ژاپنی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "کره" @@ -3302,8 +3299,9 @@ msgstr "بر راس نگه داشتن پنجره" msgid "Key" msgstr "کلید" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "کره ای" @@ -3321,7 +3319,7 @@ msgstr "دکمه ال" msgid "L-Analog" msgstr "ال آنالوگ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "زبان:" @@ -3330,7 +3328,7 @@ msgstr "زبان:" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "زمان بيکارى:" @@ -3369,11 +3367,11 @@ msgstr "" "کلیک چپ/راست برای گزینه های بیشتر.\n" "کلیک وسط برای پاک کردن." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "کمتر از" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "محدود کردن توسط تعداد فریم ها بر ثانیه" @@ -3465,11 +3463,11 @@ msgstr "" msgid "Load State..." msgstr "بارگذاری وضعیت..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "بارگذاری منوی سیستم وی" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "بارگذاری منوی سیستم وی %d%c" @@ -3520,12 +3518,12 @@ msgstr "" msgid "Logger Outputs" msgstr "خروجی های واقعه نگار" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "واقعه نگاری" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "ارتباط با سرور قطع شد!" @@ -3542,7 +3540,7 @@ msgstr "" "چک سام MD5 ناهمسان است\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "هک کردن سرعت واحد مدیریت حافظه" @@ -3556,11 +3554,11 @@ msgstr "فایل های گیم شارک مد کتذ (*.gcs)" msgid "Main Stick" msgstr "استیک اصلی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "آی دی سازنده" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "سازنده" @@ -3591,7 +3589,7 @@ msgid "Memory Byte" msgstr "بایت حافظه" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "کارت حافظه" @@ -3603,7 +3601,7 @@ msgstr "" "اخطار: قبل از استفاده از کارت حافظه بک آپ بگیرید، شاید درست شود اما اطلاعات " "از بین خواهد رفت!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3620,7 +3618,7 @@ msgstr "" "%s\n" "آیا مایل هستید فایل قبلی را به مکان جدید کپی کنید؟\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "سایز کارت حافظه با سرخط تطابق ندارد" @@ -3628,7 +3626,7 @@ msgstr "سایز کارت حافظه با سرخط تطابق ندارد" msgid "Menu" msgstr "فهرست انتخاب" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "میکروفن" @@ -3641,7 +3639,7 @@ msgstr "حداقل" msgid "Misc" msgstr "متفرقه" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "تنظیمات متفرقه" @@ -3666,11 +3664,11 @@ msgstr "" msgid "Monospaced font" msgstr "فونت هم عرض" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "موشن پلاس" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "موتور" @@ -3790,15 +3788,15 @@ msgstr "تب ان پی" msgid "NP Up" msgstr "بالا ان پی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "اسم:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "اسم:" @@ -3808,7 +3806,7 @@ msgstr "اسم:" msgid "Native GCI files(*.gci)" msgstr "فایل های جی سی آی محلی(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "پویش جدید" @@ -3817,7 +3815,7 @@ msgstr "پویش جدید" msgid "Next Page" msgstr "صفحه بعد" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "پویش بعدی" @@ -3825,11 +3823,11 @@ msgstr "پویش بعدی" msgid "Nickname :" msgstr "اسم مستعار :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "بدون کشور (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "هیچ آیزو یا وادی پیدا نشد" @@ -3868,24 +3866,25 @@ msgstr "بدون فایل ضبط شده" msgid "No save folder found for title %s" msgstr "پوشه فایل ذخیره برای عنوان %s پیدا نشد" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "هیچ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "بوکمال نروژی" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "برابر نیست" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "ست نشده است" @@ -3894,11 +3893,11 @@ msgstr "ست نشده است" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "متصل نشده است" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "یادداشت ها" @@ -3919,7 +3918,7 @@ msgstr "توجه" msgid "Num Lock" msgstr "قفل کلید نام لاک" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "تعداد کدها:" @@ -3940,7 +3939,7 @@ msgstr "شیی" msgid "Object Range" msgstr "محدوده شیی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "خاموش" @@ -3948,7 +3947,7 @@ msgstr "خاموش" msgid "Offset:" msgstr "افست:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "پیام های روی صفحه نمایش" @@ -3966,11 +3965,11 @@ msgstr "فقط بلوک های %d موجود است" msgid "Open" msgstr "گشودن" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "باز کردن پوشه &شامل" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "باز کردن پوشه &ذخیره وی" @@ -4000,17 +3999,13 @@ msgstr "کدبرداری بافت اشیاء توسط OpenCL" msgid "OpenMP Texture Decoder" msgstr "کدبرداری بافت اشیاء توسط OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "گزینه ها" @@ -4031,7 +4026,7 @@ msgstr "" msgid "Other" msgstr "غیره" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4047,11 +4042,11 @@ msgstr "خروجی" msgid "P&lay Recording..." msgstr "ض&بط کردن بازی..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "گیم پد" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "گیم پد" @@ -4075,26 +4070,26 @@ msgstr "پاراگراف" msgid "Parameters" msgstr "پارامترها" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "پارتیشن %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "وصله ها" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "مسیرها" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "مکث" @@ -4107,7 +4102,7 @@ msgstr "مکث در پایان فیلم" msgid "Per-Pixel Lighting" msgstr "نورپردازی به ازای هر پیکسل" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "کامل" @@ -4118,8 +4113,8 @@ msgstr "چشم انداز %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "شروع بازی" @@ -4131,7 +4126,7 @@ msgstr "شروع ضبط" msgid "Play/Pause" msgstr "شروع بازی/مکث" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "قابل بازی" @@ -4139,11 +4134,11 @@ msgstr "قابل بازی" msgid "Playback Options" msgstr "گزینه های بازنواخت" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "بازی کنان" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "لطفا تایید کنید..." @@ -4155,36 +4150,36 @@ msgstr "لطفا قبل از ذخیره کردن یک چشم انداز بساز msgid "Plus-Minus" msgstr "مینوس پلاس" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "لهستانی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "درگاه ۱" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "درگاه ۲" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "درگاه ۳" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "درگاه ۴" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "درگاه :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "پرتقالی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "پرتقالی (برزیلی)" @@ -4197,7 +4192,7 @@ msgstr "افکت ها:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "پایان نابهنگام فیلم در کنترل کننده پخش. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "پایان نابهنگام فیلم در ویموت پخش. %u + %d > %u" @@ -4219,7 +4214,7 @@ msgstr "صفحه قبلی" msgid "Previous Page" msgstr "صفحه قبلی" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "مقدار قبلی" @@ -4243,8 +4238,8 @@ msgstr "پاکسازی حافظه ميانى" msgid "Question" msgstr "سوال" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "خارج شدن" @@ -4266,7 +4261,7 @@ msgstr "آر آنالوگ" msgid "RAM" msgstr "حافطه رم" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "روسیه" @@ -4305,7 +4300,7 @@ msgstr "ویموت های واقعی" msgid "Record" msgstr "ضبط" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4358,10 +4353,10 @@ msgstr "به روز کردن لیست" msgid "Refresh game list" msgstr "به روز کردن لیست بازی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "پاک کردن" @@ -4384,7 +4379,7 @@ msgstr "نمایش در پنجره اصلی" msgid "Reset" msgstr "شروع دوباره" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "نتایج" @@ -4392,7 +4387,7 @@ msgstr "نتایج" msgid "Return" msgstr "برگشت" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4405,17 +4400,17 @@ msgstr "راست" msgid "Right Stick" msgstr "استیک راست" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "شوک" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "روسی" @@ -4489,12 +4484,12 @@ msgstr "" msgid "Save State..." msgstr "ذخیره وضعیت..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "ذخیره بعنوان..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "ذخیره جی سی ام/آیزو فشرده شده" @@ -4502,7 +4497,7 @@ msgstr "ذخیره جی سی ام/آیزو فشرده شده" msgid "Save current perspective" msgstr "دخیره چشم انداز فعلی" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "ذخیره جی سی ام/آیزو ناهمفشرده شده" @@ -4515,16 +4510,16 @@ msgstr "ذخیره وضعیت فیلم %s خراب است، ضبط فیلم می msgid "Scaled EFB Copy" msgstr "کپی ای اف بی تغییر سایز یافته" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "در حال پویش %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "پویش برای فایل های آیزو" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "در حال پویش..." @@ -4540,11 +4535,11 @@ msgstr "اسکرول لاک" msgid "Search" msgstr "جستجو" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "فیلتر جستجو" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "جستجوی پوشه های فرعی" @@ -4567,12 +4562,12 @@ msgstr "بخش %s در SYSCONF پیدا نشد" msgid "Select" msgstr "انتخاب" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "انتخاب فایل ضبط شده" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "انتخاب فایل وی واد برای نصب" @@ -4594,19 +4589,19 @@ msgstr "یک فایل ذخیره برای وارد کردن انتخاب کنی msgid "Select floating windows" msgstr "انتخاب پنجره های شناور" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "انتخاب فایل برای بارگذاری" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "انتخاب فایل ذخیره" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "انتخاب وضعیت برای بارگذاری" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "انتخاب وضعیت برای ذخیره" @@ -4629,7 +4624,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، اتوماتیک را انتخاب کنید." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "پروفایل انتخاب شده وجود ندارد" @@ -4654,27 +4649,28 @@ msgstr "" "اگر همچنان اطمینان ندارید، از بالاترین وضوحی که برای شما کار می کند استفاده " "کنید." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "فرستادن" @@ -4686,18 +4682,18 @@ msgstr "موقعیت سنسور بار:" msgid "Separator" msgstr "جدا کننده" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "صربستانی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "درگاه سریال ۱ - این درگاهی است که دستگاه هایی مانند آداپتور شبکه از آن " "استفاده می کنند" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "ست کردن بعنوان آیزو &پیش فرض" @@ -4706,14 +4702,14 @@ msgstr "ست کردن بعنوان آیزو &پیش فرض" msgid "Set as default Memcard %c" msgstr "ست کردن بعنوان کارت حافظه پیش فرض %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "ست کردن کد اکشن ریپلی_فعال است: فهرست بزرگتر از سایز لیست کد اکشن ریپلی است " "%lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4721,19 +4717,19 @@ msgstr "" "ست کردن زمان بيکارى (بر حسب میلی ثانیه). مقادیر بالاتر این زمان می تواند " "صدای ترق و تروق را کاهش دهد. فقط پشتوانه اپن ای ال (OpenAL)." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "تنظیمات..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "لرزش" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "اسم کوتاه:" @@ -4757,7 +4753,7 @@ msgstr "نمایش نوار &وضعیت" msgid "Show &Toolbar" msgstr "نمایش نوار &ابزار" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4797,7 +4793,7 @@ msgstr "نمایش ژاپن" msgid "Show Korea" msgstr "نمایش کره" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "نمایش زبان:" @@ -4837,11 +4833,11 @@ msgstr "نمایش واد" msgid "Show Wii" msgstr "نمایش وی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "نمایش پنجره تایید قبل از متوقف کردن بازی." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4860,7 +4856,7 @@ msgstr "نمایش بلوک اول" msgid "Show lag counter" msgstr "نمایش شمارنده تاخیر" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4911,23 +4907,24 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "ویموت فرعی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "چینی ساده شده" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "سایز" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "جهش از روی بایوس" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "از قلم انداختن پاکسازی DCBZ" @@ -4958,11 +4955,11 @@ msgstr "" msgid "Slot %i" msgstr "شکاف %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "شکاف ای" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "شکاف بی" @@ -4970,7 +4967,7 @@ msgstr "شکاف بی" msgid "Snapshot" msgstr "عکس فوری" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "ارائه دهنده نرم افزاری" @@ -4987,27 +4984,27 @@ msgstr "" "آیا شما واقعا قصد فعال کردن این گزینه را دارید؟ اگر در این مورد اطمینان " "ندارید، 'نه' را انتخاب کنید." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "تنظیمات صدا" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "پشتوانه صدا %s معتبر نیست." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "ایجاد حافظه میانجی صدا با شکست مواجه شد: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "فضا" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "اسپانیایی" @@ -5034,7 +5031,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه \"۶۴۰x۵۲۸\" را انتخاب کنید." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "بالا بردن نرخ نقل و انتقال دادهای دیسک" @@ -5042,13 +5039,13 @@ msgstr "بالا بردن نرخ نقل و انتقال دادهای دیسک" msgid "Square Stick" msgstr "استیک مربع" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "کنترولر استاندارد" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "شروع" @@ -5064,7 +5061,7 @@ msgstr "شروع &ضبط" msgid "Start Recording" msgstr "شروع ضبط" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "وضعیت" @@ -5072,7 +5069,7 @@ msgstr "وضعیت" msgid "State Saves" msgstr "ذخیره های وضعیت" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "چرخ فرمان" @@ -5121,30 +5118,31 @@ msgstr "صادر کردن فایل به %s با موفقیت انجام شد" msgid "Successfully imported save files" msgstr "فایل های ذخیره با موفقیت وارد شدند" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "نوسان" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "زبان سیستم:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "تایوان" @@ -5175,7 +5173,7 @@ msgstr "جدول راست" msgid "Take Screenshot" msgstr "گرفتن عکس فوری" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "تارو کونگا (بنگوس)" @@ -5195,11 +5193,11 @@ msgstr "حافظه ميانى بافت اشیاء" msgid "Texture Format Overlay" msgstr "قالب بندی بافت اشیاء" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "واد با موفقیت نصب شد" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "آدرس بی اعتبار است" @@ -5207,13 +5205,13 @@ msgstr "آدرس بی اعتبار است" msgid "The checksum was successfully fixed" msgstr "چک سام با موفقیت درست شد" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "پوشه برگزیده قبلا در لیست بوده است" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5236,7 +5234,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "فایل %s قبلا باز بود، سرخط فایل نوشته نخواهد شد." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "فایلی که شما مشخص (%s) کرده اید وجود ندارد" @@ -5269,26 +5267,26 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "سایز فایل ذخیره ای که سعی در کپی کردن آن دارید بی اعتبار است" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" "زبان انتخاب شده توسط سیستم شما پشتیبانی نمی شود. برگشت به زبان پیش فرض سیستم." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "نسخه سرور و نت پلی مشتری نا سازگار است!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "سرور پر شده است!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "سرور پاسخ داد: بازی در حال اجراست!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "سرور یک پیغام خطای ناشناخته فرستاد!" @@ -5297,15 +5295,15 @@ msgstr "سرور یک پیغام خطای ناشناخته فرستاد!" msgid "The specified file \"%s\" does not exist" msgstr "فایل مشخص شده \"%s\" وجود ندارد" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "مقدار بی اعتبار است" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "تم:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5313,7 +5311,7 @@ msgstr "" "باید بلیطی برای ۰۰۰۰۰۰۰۱/۰۰۰۰۰۰۰۲ وجود داشته باشد. نسخه برداری نند شما " "احتمالا ناقص است." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5321,7 +5319,7 @@ msgstr "" "این تنظیمات تنظیمات هسته دلفین را خنثی می کند.\n" "نامعین یعنی بازی از تنظیمات دلفین استفاده می کند." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5329,7 +5327,7 @@ msgstr "" "این شبیه ساز اکشن ریپلی از کدهایی که توسط خود اکشن ریپلی پیراسته شده باشد " "پشتیبانی نمی کند." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "این مورد میتواند سبب کند شدن منوی وی و تعدادی از بازی ها شود." @@ -5353,7 +5351,7 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5361,7 +5359,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5373,7 +5371,7 @@ msgstr "" "سبب افزایش چشم گیر سرعت روی کامپیوترهایی با بیش از یک هسته می شود، اما " "همچنین می تواند خرابی های گاه و بی گاه را سبب شود." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "این مورد به شما اجازه خواهد داد تا فایل پیکربندی INI را ویرایش کنید" @@ -5382,12 +5380,12 @@ msgstr "این مورد به شما اجازه خواهد داد تا فایل msgid "Threshold" msgstr "سرحد" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "لرزیدن" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "عنوان" @@ -5422,15 +5420,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "بالا" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "چینی سنتی" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "آزمایش برای بارگذاری فایل ناشناخته." @@ -5450,7 +5449,7 @@ msgstr "" "تلاش برای خواندن از SYSCONF نامعتبر\n" "آی دی های بلوتوث ویموت موجود نیست" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "ترکی" @@ -5466,12 +5465,12 @@ msgstr "نوع" msgid "UDP Port:" msgstr "درگاه UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "ویموت UDP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "ناشناخته" @@ -5480,7 +5479,7 @@ msgstr "ناشناخته" msgid "UNKNOWN_%02X" msgstr "ناشناخته_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "ایالات متحده آمریکا" @@ -5493,9 +5492,9 @@ msgstr "" "ورودی اصلاح نشد." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5520,11 +5519,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "فرمان 0x80 غیرمنتظره؟ برنامه در حال اجرا متوقف می شود..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "ناشناخته" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "دستور دی وی دی ناشناخته %08x - خطای مهلک" @@ -5539,12 +5538,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "نوع ورودی ناشناخته %i در SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "پیام ناشناخته با آی دی %d دریافت شد" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "پیام ناشناخته با آی دی:%d از بازیکن:%d بیرون انداختن بازیکن!" @@ -5554,16 +5553,16 @@ msgstr "پیام ناشناخته با آی دی:%d از بازیکن:%d بیر msgid "Up" msgstr "بالا" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "به روز کردن" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "ویموت عمودی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "استفاده از حالت پال ۶۰ هرتز (PAL60)" @@ -5571,11 +5570,11 @@ msgstr "استفاده از حالت پال ۶۰ هرتز (PAL60)" msgid "Use Fullscreen" msgstr "استفاده از حالت تمام صفحه" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "استفاده از حالت شانزده شانزدهی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "استفاده از دستگذار پنیک" @@ -5631,11 +5630,11 @@ msgstr "کاربردی" msgid "V-Sync" msgstr "هماهنگ کردن فرکانس عمودی بازی با صفحه نمایش" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "مقدار" @@ -5643,7 +5642,7 @@ msgstr "مقدار" msgid "Value:" msgstr "مقدار:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "مقدار:" @@ -5655,7 +5654,7 @@ msgstr "دراز نویسی" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "ویدیو" @@ -5663,7 +5662,7 @@ msgstr "ویدیو" msgid "Virtual" msgstr "مجازی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "حجم صدا" @@ -5694,15 +5693,15 @@ msgstr "" msgid "Warning" msgstr "اخطار" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "اخطار - شروع دال در حالت کنسول اشتباه!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "اخطار - شروع ای ال اف در حالت کنسول اشتباه!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "اخطار - شروع آیزو در حالت کنسول اشتباه!" @@ -5803,19 +5802,19 @@ msgstr "هک کردن صفحه عریض" msgid "Width" msgstr "عرض" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "وی" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "میز فرمان وی" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "ریشه وی نند:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "فایل های ذخیره وی (*.bin)|*.bin" @@ -5828,12 +5827,18 @@ msgstr "وی واد: ناتوان در خواندن از فایل" msgid "Wiimote" msgstr "ویموت" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "ویموت" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "ویموت %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "ویموت متصل شد" @@ -5865,14 +5870,14 @@ msgstr "پنجره ها راست" msgid "Word Wrap" msgstr "پیچیدن کلمه" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "در حال کار..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5892,21 +5897,36 @@ msgstr "نوشتن به فایل" msgid "Write to Window" msgstr "نوشتن در پنجره" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "صدای اکس ۲ (XAdudio2) - ساخت آوای منبع با شکست مواجه شد: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "صدای اکس ۲ (XAdudio2) - اينيت با شکست مواجه شد: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "صدای اکس ۲ (XAdudio2) - ساخت آوای مستر منبع با شکست مواجه شد: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "صدای اکس ۲ (XAdudio2) - ساخت آوای منبع با شکست مواجه شد: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "صدای اکس ۲ (XAdudio2) - اينيت با شکست مواجه شد: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "صدای اکس ۲ (XAdudio2) - ساخت آوای مستر منبع با شکست مواجه شد: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "ثبت اکس اف" @@ -5932,15 +5952,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "شما نمی توانید قطعاتی که حاوی صفحات می باشند را ببندید." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "شما باید یک بازی انتخاب کنید!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "شما باید یک اسم وارد کنید!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "شما باید یک مقدار صحیح برای دسیمال، هگزادسیمال یا اکتال وارد کنید." @@ -5948,7 +5968,7 @@ msgstr "شما باید یک مقدار صحیح برای دسیمال، هگز msgid "You must enter a valid profile name." msgstr "شما باید یک اسم معتبر برای پروفایل وارد کنید." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "برای اعمال تغییرات شما باید دلفین را از نو اجرا کنید." @@ -5959,7 +5979,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5978,15 +5998,15 @@ msgstr "" "سایز فایل باید 0x%04x باشد (اما سایز این فایل 0x%04llx است)\n" "آیا میخواهید یک فایل جدید تولید شود؟" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "هک افسانه زلدا: شاهدخت سپیده دم" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "کد صفر ۳ پشتیبانی نمی شود" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "کد ناشناخته صفر به دلفین: %08x" @@ -6045,29 +6065,24 @@ msgstr "" "\n" "اگر در این مورد اطمینان ندارید، این گزینه را فعال نکنید." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "بارگذار برنامه (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "خطای iCacheJIT: خواندن شناسنده از %x. لطفا گزارش دهید." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "خطای 1- wxExecute در اجرای برنامه!" @@ -6082,3 +6097,12 @@ msgstr "اصلاح z نزدیک:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| یا" + +#~ msgid "Could not create %s" +#~ msgstr "قادر به ساخت نیست %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D ۱۱" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "خطای iCacheJIT: خواندن شناسنده از %x. لطفا گزارش دهید." diff --git a/Languages/po/fr.po b/Languages/po/fr.po index d4b0978439..6c54dd3989 100644 --- a/Languages/po/fr.po +++ b/Languages/po/fr.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-12 20:17+0000\n" "Last-Translator: FRtranslator \n" "Language-Team: French (http://www.transifex.com/projects/p/dolphin-emu/" @@ -26,13 +26,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr " (trop nombreux pour être affichés)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Jeu :" @@ -40,7 +40,7 @@ msgstr "Jeu :" msgid "! NOT" msgstr "! NOT" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -65,12 +65,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sCopie%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d échantillons" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d échantillons (de qualité niveau %d)" @@ -81,12 +81,12 @@ msgstr "%d échantillons (de qualité niveau %d)" msgid "%s already exists, overwrite?" msgstr "%s existe déjà. Voulez-vous le remplacer ?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s n'a pas pu être compressé. L'image est probablement corrompue." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -95,7 +95,7 @@ msgstr "" "%s n'a pu être lu en tant que carte mémoire.\n" " La taille du fichier de la carte n'est pas valide (0x%x octets)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -104,7 +104,7 @@ msgstr "" "%s n'a pu être lu en tant que carte mémoire.\n" " La taille de la carte n'est pas valide (0x%x octets)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -119,7 +119,7 @@ msgstr "" msgid "%s failed to open" msgstr "Impossible d'ouvrir %s" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s a échoué: kr=%x" @@ -129,7 +129,7 @@ msgstr "%s a échoué: kr=%x" msgid "%s is a 0 byte file" msgstr "%s est un fichier de 0 octet" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s est déjà compressé. Impossible de le compresser d'avantage." @@ -187,11 +187,11 @@ msgstr "Gestionnaire de &cheats" msgid "&DSP Settings" msgstr "Paramètres &DSP (audio)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Supprimer l'ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Supprimer les ISO sélectionnés" @@ -255,7 +255,7 @@ msgstr "&Pause" msgid "&Play" msgstr "&Démarrer" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Propriétés" @@ -299,7 +299,7 @@ msgstr "&Affichage" msgid "&Wiimote Settings" msgstr "Paramètres de la &Wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -335,7 +335,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1,5x la réso. native (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -351,7 +351,7 @@ msgstr "2,5x la réso. native (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x la réso. native (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -367,7 +367,7 @@ msgstr "3x la réso. native (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x la réso. native (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -379,7 +379,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -387,7 +387,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -395,13 +395,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Une fenêtre Netplay est déjà ouverte !" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Il n'y a pas de jeu en cours d'émulation." @@ -414,6 +414,7 @@ msgstr "" "Vous devez jumeler manuellement vos Wiimotes." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -422,10 +423,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -445,13 +447,13 @@ msgstr "" "\n" "L'hôte doit avoir le port TCP choisi ouvert/transmis !\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Codes AR" @@ -500,7 +502,7 @@ msgstr "" "Code coupable :\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -508,7 +510,7 @@ msgstr "" "Erreur Action Replay : Taille non valide (%08x : adresse = %08x) dans le " "code Ajout (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -517,7 +519,7 @@ msgstr "" "Erreur Action Replay : Taille non valide (%08x : adresse = %08x) dans le " "code Remplir et déplacer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -526,7 +528,7 @@ msgstr "" "Erreur Action Replay : Taille non valide (%08x : adresse = %08x) dans " "Écriture dans la RAM et Remplir (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -535,13 +537,13 @@ msgstr "" "Erreur Action Replay : Taille non valide (%08x : adresse = %08x) dans Écrire " "vers Pointeur (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" "Erreur Action Replay : Valeur non valide (%08x) dans la Copie de mémoire (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -551,27 +553,27 @@ msgstr "" "(%s)\n" "Les Master codes ne sont pas requis. Ne les utilisez pas." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Erreur Action Replay : code AR non valide à la ligne %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay : Code Conditionnel : Taille non valide %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay : Type de Code Normal non valide %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay ; Code Normal %i : Sous-type non valide %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay : Code Normal 0 : Sous-type non valide %08x (%s)" @@ -585,11 +587,11 @@ msgstr "Carte :" msgid "Add" msgstr "Ajouter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Ajouter un code ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Ajouter un patch" @@ -597,9 +599,9 @@ msgstr "Ajouter un patch" msgid "Add new pane" msgstr "Ajouter un nouveau panneau" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Ajouter..." @@ -652,36 +654,36 @@ msgstr "" msgid "Advanced" msgstr "Avancé" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Paramètres avancés" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Tous les fichiers GC/Wii (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Toutes les images GC/Wii (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Tous les fichiers GameCube GCM (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Tous les états sauvegardés (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Tous les fichiers ISO Wii (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Tous les fichiers ISO compressés de GC/Wii (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Tous les fichiers (*.*)|*.*" @@ -701,19 +703,19 @@ msgstr "Filtrage anisotropique :" msgid "Anti-Aliasing:" msgstr "Anti-Aliasing :" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "L'apploader n'a pas la bonne taille... est-ce vraiment un apploader ?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "L'apploader ne peut charger depuis ce fichier" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader :" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Appliquer" @@ -728,7 +730,7 @@ msgstr "" "\n" "Dans le doute, sélectionnez (aucun)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabe" @@ -737,7 +739,7 @@ msgstr "Arabe" msgid "Are you sure you want to delete \"%s\"?" msgstr "Êtes-vous sûr de vouloir supprimer \"%s\" ?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -745,7 +747,7 @@ msgstr "" "Êtes-vous sûr de vouloir supprimer ces fichiers ?\n" "Ils seront définitivement supprimés !" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Êtes-vous sûr de vouloir supprimer ce fichier ? Il sera supprimé " @@ -755,7 +757,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "ARM JIT (expérimental)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "ARM JIT (expérimental)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Format d'écran :" @@ -764,12 +771,12 @@ msgstr "Format d'écran :" msgid "At least one pane must remain open." msgstr "Au moins un panneau doit rester ouvert." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Audio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Moteur audio :" @@ -777,7 +784,7 @@ msgstr "Moteur audio :" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon : impossible d'ouvrir le périphérique AO.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -816,16 +823,16 @@ msgstr "Registres BP" msgid "Back" msgstr "Retour" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Paramètres de l'interface audio" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Moteur :" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Entrée en arrière-plan" @@ -843,15 +850,15 @@ msgid "Balance Board" msgstr "Balance Board" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Bannière" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Détails de la bannière" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Bannière :" @@ -863,7 +870,7 @@ msgstr "Barre" msgid "Basic" msgstr "Paramètres de base" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Paramètres de base" @@ -871,7 +878,7 @@ msgstr "Paramètres de base" msgid "Bass" msgstr "Basse" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "" "Échec de la vérification de la somme de contrôle de la Table d'Allocation de " @@ -894,7 +901,7 @@ msgid "Blue Right" msgstr "Bleu Droite" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Bas" @@ -903,7 +910,7 @@ msgstr "Bas" msgid "Bound Controls: %lu" msgstr "Contrôles liés : %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Corrompu" @@ -911,7 +918,7 @@ msgstr "Corrompu" msgid "Browse" msgstr "Parcourir" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Choisir un dossier à ajouter" @@ -919,11 +926,11 @@ msgstr "Choisir un dossier à ajouter" msgid "Browse for an ISO directory..." msgstr "Rechercher un dossier contenant des ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Parcourir un dossier de destination" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer :" @@ -933,7 +940,7 @@ msgstr "Buffer :" msgid "Buttons" msgstr "Boutons" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -957,7 +964,7 @@ msgstr "Stick-C" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Moteur d'émulation du CPU" @@ -981,17 +988,17 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Impossible de trouver la Wiimote par le gestionnaire de connexion %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Impossible de lire depuis DVD_Plugin - erreur fatale de DVD-Interface" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Annuler" @@ -1003,12 +1010,12 @@ msgstr "Annuler" msgid "Cannot open %s" msgstr "Impossible d'ouvrir %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "" "Impossible de désenregistrer des évènements alors qu'il y en a en attente." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1019,7 +1026,7 @@ msgstr "" "%s\n" "n'est pas un fichier de carte mémoire GameCube valide." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1031,7 +1038,7 @@ msgstr "" msgid "Caps Lock" msgstr "Verr Maj" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Catalan" @@ -1039,7 +1046,7 @@ msgstr "Catalan" msgid "Center" msgstr "Centre" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Changer" @@ -1051,11 +1058,11 @@ msgstr "&Changer de disque..." msgid "Change Disc" msgstr "Changer de disque" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Changer de Jeu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1071,11 +1078,11 @@ msgstr "Change le signe du paramètre zFar (après correction)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Change le signe du paramètre zNear (après correction)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Changer ceci n'aura aucun effet durant l'émulation !" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1083,47 +1090,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Cheat Code" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Rechercher un cheat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Gestionnaire de Cheats" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Vérifier l'intégrité de la partition" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Vérification de l'intégrité..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chinois (simplifié)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinois (traditionnel)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Choisir un dossier racine pour le DVD :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Choisir un dossier racine pour la NAND :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Choisir un ISO par défaut" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Choisir un dossier à ajouter" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Choisir un fichier à ouvrir" @@ -1131,7 +1138,7 @@ msgstr "Choisir un fichier à ouvrir" msgid "Choose a memory card:" msgstr "Choisir une carte mémoire :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1139,8 +1146,8 @@ msgstr "" "Choisir un fichier comme apploader : (uniquement pour les disques créés à " "partir de dossiers)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Choisir le dossier de destination de l'extraction" @@ -1159,7 +1166,7 @@ msgstr "Classique" msgid "Clear" msgstr "Effacer" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1169,7 +1176,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Fermer" @@ -1178,11 +1185,11 @@ msgstr "Fermer" msgid "Co&nfigure..." msgstr "Co&nfigurer..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Info du code" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Code :" @@ -1194,20 +1201,20 @@ msgstr "Commande" msgid "Comment" msgstr "Commentaire" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Commentaire :" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Compresser l'ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Compresser les ISO sélectionnés..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Compression de l'ISO" @@ -1225,8 +1232,8 @@ msgstr "Configurer" msgid "Configure Control" msgstr "Configurer le contrôle" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Configurer les manettes" @@ -1234,13 +1241,13 @@ msgstr "Configurer les manettes" msgid "Configure..." msgstr "Configurer" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Confirmer l'écrasement du fichier" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Confirmer l'arrêt de l'émulation" @@ -1254,7 +1261,7 @@ msgstr "Connecter" msgid "Connect Balance Board" msgstr "Connecter la Balance Board" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Connecter le clavier USB" @@ -1279,7 +1286,7 @@ msgstr "Connecter la 3è Wiimote" msgid "Connect Wiimote 4" msgstr "Connecter la 4è Wiimote" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Connexion..." @@ -1299,7 +1306,7 @@ msgstr "Contrôle" msgid "Convert to GCI" msgstr "Convertir en GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Échec de la copie" @@ -1308,16 +1315,11 @@ msgstr "Échec de la copie" msgid "Copy to Memcard %c" msgstr "Copier vers la carte mémoire %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Core" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Impossible de créer %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Impossible d'initialiser le moteur %s." @@ -1334,12 +1336,12 @@ msgstr "" "GameCube et Wii ne peuvent pas être plus par la plupart des lecteurs DVD sur " "PC." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Impossible de reconnaître le fichier ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Impossible de sauvegarder %s" @@ -1365,11 +1367,11 @@ msgstr "" "Dans ce cas, vous devez à nouveau spécifier l'emplacement du fichier de " "sauvegarde dans les options." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Impossible de trouver la commande d'ouverture pour l'extension 'ini' !" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1377,17 +1379,17 @@ msgstr "" "Impossible d'initialiser les composants de base.\n" "Vérifiez votre configuration." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Nombre :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Pays :" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Créer un code AR" @@ -1422,12 +1424,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Le répertoire en cours a changé de %s vers %s après wxFileSelector !" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Hack de projection personnalisé" @@ -1435,11 +1437,11 @@ msgstr "Hack de projection personnalisé" msgid "Custom Projection Hack Settings" msgstr "Paramètres du hack de projection personnalisé" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Personnalise certains paramètres de projection orthographique." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Tchèque" @@ -1455,20 +1457,20 @@ msgstr "Pad numérique" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Moteur d'émulation du DSP (Audio)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "Emulation du DSP en HLE (rapide)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "Interpréteur du DSP en LLE (lent)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "Recompilateur du DSP en LLE" @@ -1476,11 +1478,11 @@ msgstr "Recompilateur du DSP en LLE" msgid "DSP settings" msgstr "Paramètres DSP (audio)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSP LLE sur un thread dédié" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Racine du DVD :" @@ -1492,15 +1494,15 @@ msgstr "DVDLowRead - Erreur fatale : impossible de lire le volume" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Erreur fatale : impossible de lire le volume" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Dance Mat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Taille des données" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Date :" @@ -1529,16 +1531,16 @@ msgstr "Débugage" msgid "Decimal" msgstr "Décimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Décompresser l'ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Décompresser les ISO sélectionnés..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Décompression de l'ISO" @@ -1550,7 +1552,7 @@ msgstr "Baisser la limite d'image/s" msgid "Default" msgstr "Par défaut" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "ISO par défaut :" @@ -1594,8 +1596,8 @@ msgstr "" msgid "Device" msgstr "Appareil" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Paramètres de la console virtuelle" @@ -1603,15 +1605,12 @@ msgstr "Paramètres de la console virtuelle" msgid "Dial" msgstr "Appel" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1674,7 +1673,7 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disque" @@ -1701,20 +1700,20 @@ msgstr "" msgid "Divide" msgstr "Diviser" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Voulez-vous arrêter l'émulation en cours ?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Décodeur Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1744,9 +1743,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ par l'équipe de Dolphin\n" @@ -1801,12 +1799,12 @@ msgstr "Configuration de la Wiimote pour Dolphin" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Configuration de la manette GC pour Dolphin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Films TAS Dolphin (*.dtm)" @@ -1818,7 +1816,7 @@ msgstr "Configuration de la Wiimote pour Dolphin" msgid "Dolphin at &Google Code" msgstr "Dolphin dans &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1826,7 +1824,7 @@ msgstr "" "Dolphin n'a pas trouvé d'ISO GC/Wii. Double-cliquez ici pour chercher des " "fichiers..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1834,12 +1832,12 @@ msgstr "" "Dolphin est paramétré pour cacher tous les jeux. Double-cliquez ici pour " "afficher tous les jeux..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin n'a pas pu exécuter l'action demandée." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1865,11 +1863,11 @@ msgstr "%lu codes ont été téléchargés. (%lu ajoutés)" msgid "Drums" msgstr "Percussions" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Factice" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Enregistrer le son" @@ -1916,9 +1914,9 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Néerlandais" @@ -1943,7 +1941,7 @@ msgstr "" "distribution de Dolphin, un redémarrage est probablement nécessaire pour que " "Windows charge le nouveau pilote." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "Europe" @@ -1959,14 +1957,10 @@ msgstr "Éditer" msgid "Edit ActionReplay Code" msgstr "Éditer le code ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Éditer la configuration" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Modifier les paramètres personnalisés" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Éditer le patch" @@ -1975,8 +1969,8 @@ msgstr "Éditer le patch" msgid "Edit current perspective" msgstr "Modifier la perspective actuelle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Éditer..." @@ -1988,7 +1982,7 @@ msgstr "Effets" msgid "Embedded Frame Buffer" msgstr "Buffer d'image embarqué" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Thread d'émulation déjà en cours d'exécution" @@ -2027,7 +2021,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Wiimote émulée" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "État de l'émulation :" @@ -2051,15 +2045,15 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Activer la journalisation AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Activer l'assemblage de blocs" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Active le calcul de la boîte liée." @@ -2067,27 +2061,27 @@ msgstr "Active le calcul de la boîte liée." msgid "Enable Cache" msgstr "Activer le cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Activer les Cheats" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Activer le Dual Core" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Activer le double cœur (plus rapide)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Activer le saut d'inactivité" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Activer le saut d'inactivité (plus rapide)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Activer le MMU" @@ -2095,7 +2089,7 @@ msgstr "Activer le MMU" msgid "Enable Progressive Scan" msgstr "Activer le balayage progressif" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Activer l'économiseur d'écran" @@ -2103,7 +2097,7 @@ msgstr "Activer l'économiseur d'écran" msgid "Enable Speaker Data" msgstr "Activer les données du haut-parleur" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Activer l'écran large (16/9è)" @@ -2126,7 +2120,7 @@ msgstr "" "\n" "Dans le doute, sélectionnez 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2163,7 +2157,7 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2171,11 +2165,11 @@ msgstr "" "Activer ceci pour accélérer La légende de Zelda : Twilight Princess. " "Désactiver pour TOUS les autres jeux." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Active un hack de projection personnalisé" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2183,7 +2177,7 @@ msgstr "" "Active l'émulation Dolby Pro Logic II en utilisant le son surround 5.1. Non " "disponible sur OS X." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2203,7 +2197,7 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2225,9 +2219,9 @@ msgstr "" msgid "End" msgstr "Fin" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Anglais" @@ -2250,23 +2244,22 @@ msgstr "Entrée %d/%d" msgid "Entry 1/%d" msgstr "Entrée 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Égal" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Erreur" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Erreur lors du chargement de la langue sélectionnée. Retour à la langue par " "défaut du système." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2315,7 +2308,7 @@ msgstr "Exporter toutes les sauvegardes Wii" msgid "Export Failed" msgstr "Echec de l'exportation" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exporter un fichier" @@ -2331,7 +2324,7 @@ msgstr "Exporter l'enregistrement..." msgid "Export Save" msgstr "Exporter une sauvegarde" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exporter une sauvegarde Wii (expérimental)" @@ -2347,7 +2340,7 @@ msgstr "L'exportation a échoué" msgid "Export save as..." msgstr "Exporter l'enregistrement sous..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Extension" @@ -2363,44 +2356,44 @@ msgstr "Paramètres supplémentaires" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Paramètre supplémentaire utile dans ''Metroid: Other M'' uniquement." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Extraire tous les fichiers..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Extraire l'Apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Extraire le DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Extraire le dossier..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Extraire le fichier..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Extraire la partition..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Extraction de %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Extraction de tous les fichiers" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Extraction du dossier" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Extraction..." @@ -2412,15 +2405,15 @@ msgstr "Octet FIFO" msgid "FIFO Player" msgstr "Lecteur FIFO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "France" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Taille FST :" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Connexion impossible !" @@ -2428,11 +2421,15 @@ msgstr "Connexion impossible !" msgid "Failed to download codes." msgstr "Impossible de télécharger les codes." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Impossible d'extraire vers %s !" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2486,7 +2483,7 @@ msgstr "Impossible de lire banner.bin" msgid "Failed to read bk header" msgstr "Impossible de lire l'entête bk" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2497,7 +2494,7 @@ msgstr "" "La carte mémoire est peut-être tronquée\n" "Position du fichier : %llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2506,7 +2503,7 @@ msgstr "" "blocs\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2524,7 +2521,7 @@ msgstr "Impossible de lire les données du fichier %d" msgid "Failed to read data from file: %s" msgstr "Impossible de lire les données du fichier %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2532,7 +2529,7 @@ msgstr "" "Impossible de lire correctement la sauvegarde des dossiers\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2544,7 +2541,7 @@ msgstr "" msgid "Failed to read header" msgstr "Impossible de lire l'entête" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2557,7 +2554,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Impossible de lire l'entête du fichier %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Impossible de lire l'ID unique depuis l'image du disque" @@ -2579,7 +2576,7 @@ msgstr "Impossible d'écrire dans le fichier: %s" msgid "Failed to write header for %s" msgstr "Impossible d'écrire l'entête de %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Perse" @@ -2591,7 +2588,7 @@ msgstr "Rapide" msgid "Fast Depth Calculation" msgstr "Calcul rapide de la profondeur" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Version rapide de la MMU. Ne fonctionne pas avec tous les jeux." @@ -2627,7 +2624,7 @@ msgstr "" "Le fichier n'a pu être ouvert\n" "ou n'a pas d'extension valide" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2640,7 +2637,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Le fichier n'est pas reconnu comme une carte mémoire" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Fichier non compressé" @@ -2649,11 +2646,11 @@ msgstr "Fichier non compressé" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO : mode d'ouverture inconnu : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Système de fichiers" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Type de fichier 'ini' est inconnu ! Ne sera pas ouvert !" @@ -2681,7 +2678,7 @@ msgstr "Forcer 16/9è" msgid "Force 4:3" msgstr "Forcer 4/3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Forcer la console comme NTSC-J" @@ -2715,7 +2712,7 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2725,7 +2722,7 @@ msgstr "" "Si cette case est décochée, Dolphin sera par défaut en NTSC-U et activera " "automatiquement cette option lorsque des jeux japonais seront lancés." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2737,7 +2734,7 @@ msgstr "" msgid "Forward" msgstr "Avant" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Faire suivre le port (UPnP)" @@ -2780,7 +2777,7 @@ msgstr "Plage d'images :" msgid "Frame S&kipping" msgstr "Saut d'&image :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Image/s max :" @@ -2792,9 +2789,9 @@ msgstr "Images à enregistrer :" msgid "Free Look" msgstr "Vue libre" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Français" @@ -2827,27 +2824,27 @@ msgstr "Manette GC" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID du jeu :" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Le jeu est déjà en cours d'émulation !" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Le jeu n'est pas en cours d'émulation !" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Jeu non trouvé !" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Paramètres spécifiques au jeu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Config du Jeu" @@ -2855,7 +2852,7 @@ msgstr "Config du Jeu" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "Fichiers de sauvegarde GameCube (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "GameCube" @@ -2864,7 +2861,7 @@ msgid "Gamecube &Pad Settings" msgstr "Paramètres de la &manette GameCube" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Carte mémoires de GameCube (*.raw,*.gcp)" @@ -2872,12 +2869,12 @@ msgstr "Carte mémoires de GameCube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Paramètres de la manette GameCube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Codes Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2891,7 +2888,7 @@ msgstr "" "Sys, puis redémarrez Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Général" @@ -2900,13 +2897,13 @@ msgstr "Général" msgid "General Settings" msgstr "Paramètres généraux" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Allemand" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2920,7 +2917,7 @@ msgstr "Graphismes" msgid "Graphics settings" msgstr "Paramètres graphiques" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Plus grand que" @@ -2943,7 +2940,7 @@ msgstr "" "\n" "Dans le doute, cochez cette case." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Grèque" @@ -2967,11 +2964,11 @@ msgstr "Guitare" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Echec de la vérification de la somme de contrôle de l'entête" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hébreu" @@ -2983,7 +2980,7 @@ msgstr "Hauteur" msgid "Help" msgstr "Aide" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -3004,7 +3001,7 @@ msgstr "" "\n" "Sayonara !\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3046,7 +3043,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Hôte" @@ -3055,11 +3052,11 @@ msgid "Hotkey Configuration" msgstr "Configuration des raccourcis clavier" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Raccourcis clavier" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Hongrois" @@ -3067,18 +3064,18 @@ msgstr "Hongrois" msgid "Hybrid Wiimote" msgstr "Wiimote hybride" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS : Impossible d'obtenir des données à partir d'un ticket " "inconnu : %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3087,15 +3084,15 @@ msgstr "" "ID du titre : %016llx.\n" "Dolphin va probablement se bloquer maintenant." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - mauvaise destination" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Paramètres IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3107,15 +3104,15 @@ msgstr "Pointeur IR" msgid "IR Sensitivity:" msgstr "Sensibilité de l'IR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Détails de l'ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Dossiers des ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "Italie" @@ -3123,7 +3120,7 @@ msgstr "Italie" msgid "Icon" msgstr "Icône" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3195,7 +3192,7 @@ msgstr "" "Le fichier importé a l'extension SAV\n" "mais n'a pas une entête valide" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Dans le jeu" @@ -3204,7 +3201,7 @@ msgid "Increase Frame limit" msgstr "Augmenter la limite d'image/s" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3224,7 +3221,7 @@ msgstr "Insérer" msgid "Insert Encrypted or Decrypted code here..." msgstr "Indiquer un code crypté ou décrypté ici..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Insérer une carte SD" @@ -3236,35 +3233,35 @@ msgstr "Indiquer un nom ici..." msgid "Install WAD" msgstr "Installer un WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Installer dans le menu Wii" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler a été appelé, mais cette plateforme ne le prend pas " "encore en charge." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Installation du WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Erreur lors de la vérification de l'intégrité" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Vérification de l'intégrité terminée" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Vérification de l'intégrité terminée. Aucune erreur trouvée." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3273,11 +3270,11 @@ msgstr "" "Echec de la vérification de l'intégrité pour la partition %d. Votre copie " "est certainement corrompue ou a été incorrectement patchée." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Interface" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Paramètres de l'interface" @@ -3306,7 +3303,7 @@ msgstr "Résolution interne :" msgid "Interpreter (VERY slow)" msgstr "Interpréteur (TRÈS lent)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3315,7 +3312,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Taille invalide (%x) ou mot Magique (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Valeur non valide !" @@ -3323,16 +3320,16 @@ msgstr "Valeur non valide !" msgid "Invalid bat.map or dir entry" msgstr "bar.map ou entrée dir non valide" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Type d'évènement non valide : %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Fichier non valide" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3361,34 +3358,36 @@ msgstr "" "Texte de recherche non valide (seules les longueurs de chaînes de caractères " "sont prises en charge)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "État non valide" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italien" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "Japon" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "Recompilateur JIT (recommandé)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "Recompilateur expérimental JITIL" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japonais" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "Corée" @@ -3410,8 +3409,9 @@ msgstr "Toujours au premier plan" msgid "Key" msgstr "Touche" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Coréen" @@ -3429,7 +3429,7 @@ msgstr "Bouton L" msgid "L-Analog" msgstr "L Analog." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Langue :" @@ -3438,7 +3438,7 @@ msgstr "Langue :" msgid "Last %i" msgstr "Dernier %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Latence :" @@ -3477,11 +3477,11 @@ msgstr "" "Clic gauche/droit pour plus d'options.\n" "Clic sur molette pour effacer." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Plus petit que" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Nb de FPS comme limite" @@ -3573,11 +3573,11 @@ msgstr "Charger le dernier état 9" msgid "Load State..." msgstr "Charger un état..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Charger le Menu Système Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Charger le Menu Système Wii %d%c" @@ -3631,12 +3631,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Sorties des journalisations" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Journalisation" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Connexion au serveur perdue !" @@ -3653,7 +3653,7 @@ msgstr "" "MD5 non concordant\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Hack de vitesse pour le MMU" @@ -3667,11 +3667,11 @@ msgstr "Fichiers MadCatz Gameshark (*.gcs)" msgid "Main Stick" msgstr "Stick principal" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID concepteur :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Concepteur :" @@ -3708,7 +3708,7 @@ msgid "Memory Byte" msgstr "Octet mémoire" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Carte mémoire" @@ -3720,7 +3720,7 @@ msgstr "" "Gestionnaire de cartes mémoires | ATTENTION : Faites des sauvegardes avant " "utilisation, devrait être OK mais corruption possible de données !" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3737,7 +3737,7 @@ msgstr "" "%s\n" "Voulez-vous copier l'ancien fichier vers ce nouvel endroit ?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" "La taille du fichier de la carte mémoire ne correspond pas à la taille de " @@ -3747,7 +3747,7 @@ msgstr "" msgid "Menu" msgstr "Menu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Micro" @@ -3760,7 +3760,7 @@ msgstr "Min" msgid "Misc" msgstr "Divers" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Paramètres divers" @@ -3786,11 +3786,11 @@ msgstr "" msgid "Monospaced font" msgstr "Police mono-espacée." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Vibreur" @@ -3910,15 +3910,15 @@ msgstr "NP Tabulation" msgid "NP Up" msgstr "NP Haut" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Nom :" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Nom :" @@ -3928,7 +3928,7 @@ msgstr "Nom :" msgid "Native GCI files(*.gci)" msgstr "Fichiers natifs GCI (*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nouvelle recherche" @@ -3937,7 +3937,7 @@ msgstr "Nouvelle recherche" msgid "Next Page" msgstr "Page suivante" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Recherche suivante" @@ -3945,11 +3945,11 @@ msgstr "Recherche suivante" msgid "Nickname :" msgstr "Pseudo :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Pas de pays (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Aucun ISO ou WAD trouvé" @@ -3988,24 +3988,25 @@ msgstr "Aucun fichier enregistré" msgid "No save folder found for title %s" msgstr "Aucun dossier de sauvegarde trouvé pour le titre %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Aucune" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norvégien Bokmål" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Différent" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Non défini" @@ -4016,11 +4017,11 @@ msgstr "" "Ce n'est pas une sauvegarde Wii ou échec de le lecture de la taille de " "l'entête du fichier %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Non connectée" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notes" @@ -4041,7 +4042,7 @@ msgstr "Note" msgid "Num Lock" msgstr "Verr. Num" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Nombre de codes :" @@ -4062,7 +4063,7 @@ msgstr "Objet" msgid "Object Range" msgstr "Plage d'objets :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Arrêt" @@ -4070,7 +4071,7 @@ msgstr "Arrêt" msgid "Offset:" msgstr "Offset :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Afficher les messages informatifs" @@ -4088,11 +4089,11 @@ msgstr "%d blocs disponibles seulement" msgid "Open" msgstr "Ouvrir" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Ouvrir l'emplacement du fichier" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Ouvrir le dossier de &sauvegarde Wii" @@ -4122,7 +4123,7 @@ msgstr "Décodeur de texture OpenCL" msgid "OpenMP Texture Decoder" msgstr "Décodeur de texture OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4130,13 +4131,7 @@ msgstr "" "Ouvre la configuration par défaut pour ce jeu dans un éditeur de texte " "externe (lecture seule)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" -"Ouvre la configuration personnalisée pour ce jeu dans un éditeur de texte " -"externe" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Options" @@ -4161,7 +4156,7 @@ msgstr "" msgid "Other" msgstr "Autres" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4177,11 +4172,11 @@ msgstr "Sortie" msgid "P&lay Recording..." msgstr "Jouer l'enregistrement..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Manette" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Manette " @@ -4205,26 +4200,26 @@ msgstr "Paragraphe" msgid "Parameters" msgstr "Paramètres" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partition %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "La partition n'existe pas : %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patchs" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Chemins" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pause" @@ -4237,7 +4232,7 @@ msgstr "Faire une pause à la fin du film" msgid "Per-Pixel Lighting" msgstr "Eclairage par pixel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Parfait" @@ -4248,8 +4243,8 @@ msgstr "Perspective %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Démarrer" @@ -4261,7 +4256,7 @@ msgstr "Jouer l'enregistrement..." msgid "Play/Pause" msgstr "Démarrer/Arrêter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Jouable" @@ -4269,11 +4264,11 @@ msgstr "Jouable" msgid "Playback Options" msgstr "Options de lecture" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Joueurs" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Veuillez confirmer..." @@ -4285,36 +4280,36 @@ msgstr "Merci de créer une perspective avant de sauvegarder" msgid "Plus-Minus" msgstr "Plus-Moins" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polonais" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugais" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugais (brésilien)" @@ -4327,7 +4322,7 @@ msgstr "Effet de Post-processing :" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Fin de film prématurée dans Play Controller (%u + 8 > %u)" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Fin de film prématurée dans Play Wiimote (%u + %d > %u)" @@ -4349,7 +4344,7 @@ msgstr "Page préc." msgid "Previous Page" msgstr "Page précédente" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Valeur précédente" @@ -4373,8 +4368,8 @@ msgstr "Vider le cache" msgid "Question" msgstr "Question" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Quitter" @@ -4396,7 +4391,7 @@ msgstr "R Analog." msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "Russie" @@ -4435,7 +4430,7 @@ msgstr "Wiimote physique" msgid "Record" msgstr "Enregistrer" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Entrée mémoire" @@ -4488,10 +4483,10 @@ msgstr "Rafraîchir la liste" msgid "Refresh game list" msgstr "Rafraîchir la liste des jeux" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Retirer" @@ -4514,7 +4509,7 @@ msgstr "Rendu dans la fenêtre principale" msgid "Reset" msgstr "Reset" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Résultats" @@ -4522,7 +4517,7 @@ msgstr "Résultats" msgid "Return" msgstr "Entrée" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Révision :" @@ -4535,19 +4530,19 @@ msgstr "Droite" msgid "Right Stick" msgstr "Stick Droit" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Rumble" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Éxécuter DSP LLE sur un thread dédié (non recommandé : peut causer des " "blocages)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russe" @@ -4621,12 +4616,12 @@ msgstr "Sauvegarder l'état au Slot 9" msgid "Save State..." msgstr "Enregistrer l'état" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Enregistrer sous..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Sauver le fichier compressé GCM/ISO" @@ -4634,7 +4629,7 @@ msgstr "Sauver le fichier compressé GCM/ISO" msgid "Save current perspective" msgstr "Sauvegarder la perspective actuelle" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Sauvegarder le fichier GCM/ISO décompressé" @@ -4649,16 +4644,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "Copie à l'échelle de l'EFB" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Analyse de %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Recherche d'ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Recherche..." @@ -4674,11 +4669,11 @@ msgstr "Arrêt défil." msgid "Search" msgstr "Rechercher" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Fitre de recherche" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Chercher dans sous-dossiers" @@ -4701,12 +4696,12 @@ msgstr "La section %s n'a pas été trouvée dans SYSCONF" msgid "Select" msgstr "Sélectionner" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Sélectionner le fichier d'enregistrement" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Sélectionner un fichier WAD de Wii à installer" @@ -4728,19 +4723,19 @@ msgstr "Sélectionner un fichier de sauvegarde à importer" msgid "Select floating windows" msgstr "Sélectionner les fenêtres flottantes" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Sélectionner le fichier à charger" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Sélectionner le fichier à enregistrer" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Sélectionner l'état à charger" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Sélectionner l'état à enregistrer" @@ -4763,7 +4758,7 @@ msgstr "" "\n" "Dans le doute, choisissez Auto." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Le profil de controleur sélectionné n'existe pas" @@ -4788,39 +4783,28 @@ msgstr "" "Si vous ne savez toujours pas, sélectionnez la plus haute résolution " "affichée." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Sélectionne quel moteur graphique doit être utilisé en interne.\n" -"Direct3D 9 est généralement le plus rapide. OpenGL est le plus précis. " -"Direct3D 11 est entre les deux.\n" -"Les moteurs Direct3D ne sont disponibles que pour Windows.\n" -"\n" -"Dans le doute, sélectionnez Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Sélectionne quel moteur graphique doit être utilisé en interne.\n" -"Direct3D 9 est généralement le plus rapide. OpenGL est le plus précis. " -"Direct3D 11 est entre les deux.\n" -"Les moteurs Direct3D ne sont disponibles que pour Windows.\n" -"\n" -"Dans le doute, sélectionnez OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Envoyer" @@ -4832,18 +4816,18 @@ msgstr "Position de la Sensor Bar :" msgid "Separator" msgstr "Séparateur" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbe" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Port série 1 - C'est le port que les périphériques tels que l'adaptateur " "ethernet utilisent" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Définir comme l'ISO par &défaut" @@ -4852,14 +4836,14 @@ msgstr "Définir comme l'ISO par &défaut" msgid "Set as default Memcard %c" msgstr "Définir comme carte mémoire par défaut : %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive : L'index est plus grand que la taille de la liste des " "codes AR %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4867,19 +4851,19 @@ msgstr "" "Configure la latence (en ms). Des valeurs plus élevées peuvent réduire le " "craquement audio. Uniquement avec le moteur OpenAL." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Configurer..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Impossible de créer le fichier de paramètres" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Secouement" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Nom court :" @@ -4903,7 +4887,7 @@ msgstr "Afficher la barre d'&état" msgid "Show &Toolbar" msgstr "Afficher la barre d'&outils" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Afficher les paramètres par défaut" @@ -4943,7 +4927,7 @@ msgstr "Afficher Japon" msgid "Show Korea" msgstr "Afficher Corée" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Afficher la langue :" @@ -4983,11 +4967,11 @@ msgstr "Afficher WAD" msgid "Show Wii" msgstr "Afficher Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Demande confirmation avant d'arrêter le jeu." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -5006,7 +4990,7 @@ msgstr "Afficher le premier bloc" msgid "Show lag counter" msgstr "Afficher le compteur de lag" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5058,23 +5042,24 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Wiimote à l'horizontale" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Chinois simplifié" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Taille" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Ne pas exécuter le BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Ignorer le vidage DCBZ" @@ -5105,11 +5090,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -5117,7 +5102,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Capture" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Rendu logiciel" @@ -5134,27 +5119,27 @@ msgstr "" "Êtes-vous certain d'activer le rendu logiciel ? Dans le doute, choisissez " "'Non'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Paramètres audio" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Le moteur audio %s n'est pas valide" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Echec de la création du buffer audio : %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Espace" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Espagnol" @@ -5182,7 +5167,7 @@ msgstr "" "\n" "Dans le doute, sélectionnez 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Accélerer le taux de transfert du disque" @@ -5190,13 +5175,13 @@ msgstr "Accélerer le taux de transfert du disque" msgid "Square Stick" msgstr "Stick carré" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Contrôleur standard" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5212,7 +5197,7 @@ msgstr "Commencer l'enregistrement" msgid "Start Recording" msgstr "Commencer l'enregistrement" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "État" @@ -5220,7 +5205,7 @@ msgstr "État" msgid "State Saves" msgstr "États sauvegardés" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Volant" @@ -5269,19 +5254,19 @@ msgstr "Fichier exporté avec succès vers %s" msgid "Successfully imported save files" msgstr "Fichiers de sauvegarde importés avec succès" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Suédois" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Balancement" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Synchroniser le thread du GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5289,12 +5274,13 @@ msgstr "" "Synchronise les transferts entre le GPU et le CPU pour éviter des blocages " "aléatoires en mode Dual Core. (Coché = Compatible, Décoché = Rapide)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Langue du système :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "Taïwan" @@ -5325,7 +5311,7 @@ msgstr "Table Droite" msgid "Take Screenshot" msgstr "Capture d'écran" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5345,11 +5331,11 @@ msgstr "Cache de texture" msgid "Texture Format Overlay" msgstr "Infos de format de texture" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "Le WAD a été installé avec succès" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "L'adresse n'est pas valide" @@ -5357,13 +5343,13 @@ msgstr "L'adresse n'est pas valide" msgid "The checksum was successfully fixed" msgstr "La somme de contrôle a été corrigée avec succès" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Le dossier sélectionné est déjà dans la liste" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5386,7 +5372,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Le fichier %s a déjà été ouvert, son entête n'a pas pu être écrite." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Le fichier que vous avez spécifié (%s) n'existe pas" @@ -5420,7 +5406,7 @@ msgid "The save you are trying to copy has an invalid file size" msgstr "" "La sauvegarde que vous essayez de copier a une taille de fichier non valide" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5428,19 +5414,19 @@ msgstr "" "La langue sélectionnée n'est pas prise en charge par votre système. Retour à " "la langue par défaut du système." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Les versions NetPlay du serveur et du client sont incompatibles !" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Le serveur est plein !" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Le serveur a répondu que le jeu est déjà en cours d'exécution !" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Le serveur a envoyé un message d'erreur inconnu !" @@ -5449,15 +5435,15 @@ msgstr "Le serveur a envoyé un message d'erreur inconnu !" msgid "The specified file \"%s\" does not exist" msgstr "Le fichier spécifié \"%s\" n'existe pas" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "La valeur n'est pas valide" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Thème :" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5465,7 +5451,7 @@ msgstr "" "Il doit y avoir un ticket pour 00000001/00000002. Votre copie de la NAND est " "probablement incomplète." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5473,7 +5459,7 @@ msgstr "" "Ces paramètres écrasent ceux de Dolphin.\n" "Indéterminé signifie que les paramètres de Dolphin sont appliqués." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5481,7 +5467,7 @@ msgstr "" "Ce simulateur d'Action Replay ne prend pas en charge les codes qui modifient " "l'Action Replay lui-même." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Ceci peut ralentir le Menu Wii et quelques jeux." @@ -5506,7 +5492,7 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5518,7 +5504,7 @@ msgstr "" "pour gérer via le DSP (peut éliminer les problèmes audio, mais peut " "provoquer un bruit constant selon les jeux).²" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5531,7 +5517,7 @@ msgstr "" "qui plus d'un coeur, mais peut occasionnellement causer des petits pépins ou " "des plantages." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "" "Ceci vous permettra de modifier manuellement le fichier de configuration INI" @@ -5541,12 +5527,12 @@ msgstr "" msgid "Threshold" msgstr "Seuil" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Tilt" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Titre" @@ -5581,15 +5567,16 @@ msgid "Toggle IR" msgstr "Activer l'IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Haut" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Chinois traditionnel" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Echec de chargement d'un type de fichier inconnu." @@ -5609,7 +5596,7 @@ msgstr "" "Essai de lecture à partir d'un SYSCONF non valide\n" "Les IDs BT de la Wiimote ne sont pas disponibles" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turque" @@ -5625,12 +5612,12 @@ msgstr "Type" msgid "UDP Port:" msgstr "Port UDP :" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "Wiimote UDP :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "Inconnu" @@ -5639,7 +5626,7 @@ msgstr "Inconnu" msgid "UNKNOWN_%02X" msgstr "Inconnu_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5652,9 +5639,9 @@ msgstr "" "L'entrée n'a pas été modifiée." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5679,11 +5666,11 @@ msgstr "Annuler la sauvegarde de l'état" msgid "Unexpected 0x80 call? Aborting..." msgstr "Appel 0x80 inattendu. Abandon..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Inconnu" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Commande DVD inconnue %08x - erreur fatale" @@ -5698,12 +5685,12 @@ msgstr "Commande 0x%08x inconnue" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Type d'entrée %i inconnue dans SYSCONF (%s@%x) !" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Reception d'un message inconnu avec l'ID : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5714,16 +5701,16 @@ msgstr "" msgid "Up" msgstr "Haut" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Mettre à jour" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Wiimote debout" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Utiliser le mode EuRGB60 (PAL60)" @@ -5731,11 +5718,11 @@ msgstr "Utiliser le mode EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "&Plein écran" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Utiliser Hexa" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Utiliser les gestionnaires de panique" @@ -5804,11 +5791,11 @@ msgstr "Utilitaires" msgid "V-Sync" msgstr "Synchro verticale" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Hack de vitesse VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Valeur" @@ -5816,7 +5803,7 @@ msgstr "Valeur" msgid "Value:" msgstr "Valeur :" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Valeur :" @@ -5828,7 +5815,7 @@ msgstr "Niveau de détail" msgid "Vertex Streaming Hack" msgstr "Hack de flux de vertex" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Vidéo" @@ -5836,7 +5823,7 @@ msgstr "Vidéo" msgid "Virtual" msgstr "Virtuel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volume" @@ -5868,15 +5855,15 @@ msgstr "" msgid "Warning" msgstr "Attention" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Attention : démarrage du DOL dans un mauvais mode de console !" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Attention : démarrage de l'ELF dans un mauvais mode de console !" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Attention : démarrage d\" l'ISO dans un mauvais mode de console !" @@ -5981,19 +5968,19 @@ msgstr "Hack écran large (16/9è)" msgid "Width" msgstr "Largeur" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Console Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Racine de la NAND (Wii) :" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Fichiers de sauvegarde Wii (*.bin)|*.bin" @@ -6006,12 +5993,18 @@ msgstr "WiiWAD : impossible de lire le fichier" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote connectée" @@ -6043,14 +6036,14 @@ msgstr "Windows Droit" msgid "Word Wrap" msgstr "Casse" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Travail..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Écriture carte mémoire (GC)" @@ -6070,21 +6063,36 @@ msgstr "Écrire dans le fichier" msgid "Write to Window" msgstr "Écrire dans la fenêtre" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "Échec de XAudio2 CreateSourceVoice : %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "Échec de l'initialisation de XAudio2 : %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "Échec de la création de la voix principale dans XAudio2 : %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "Échec de XAudio2 CreateSourceVoice : %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "Échec de l'initialisation de XAudio2 : %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "Échec de la création de la voix principale dans XAudio2 : %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -6117,15 +6125,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Vous ne pouvez pas fermer des panneaux contenant des appels." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Vous devez choisir un jeu !!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Vous devez entrer un nom !" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Vous devez entrer une valeur décimale, hexadécimale ou octale valide." @@ -6133,7 +6141,7 @@ msgstr "Vous devez entrer une valeur décimale, hexadécimale ou octale valide." msgid "You must enter a valid profile name." msgstr "Vous devez entrer un profil de nom valide." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Vous devez redémarrer Dolphin pour que ce changement prenne effet." @@ -6147,7 +6155,7 @@ msgstr "" "Voulez-vous arrêter l'émulation maintenant pour corriger le problème ?\n" "Si vous choisissez \"Non\", l'audio pourra être déformé." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6166,15 +6174,15 @@ msgstr "" "Il devrait être de 0x%04x (au lieu de 0x%04llx).\n" "Voulez-vous en générer un nouveau ?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "Hack ZTP" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Code Zero 3 non pris en charge" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero code inconnu pour Dolphin : %08x" @@ -6233,29 +6241,24 @@ msgstr "" "\n" "Dans le doute, décochez cette case." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT : Lecture de l'Opcode depuis %x. Merci de nous le signaler." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "flavor inconnu %d (%d attendu)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "Message inconnu reçu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute a retourné -1 sur l'exécution de l'application !" @@ -6270,3 +6273,51 @@ msgstr "Correction zNear :" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OU" + +#~ msgid "Could not create %s" +#~ msgstr "Impossible de créer %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Modifier les paramètres personnalisés" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Ouvre la configuration personnalisée pour ce jeu dans un éditeur de texte " +#~ "externe" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Sélectionne quel moteur graphique doit être utilisé en interne.\n" +#~ "Direct3D 9 est généralement le plus rapide. OpenGL est le plus précis. " +#~ "Direct3D 11 est entre les deux.\n" +#~ "Les moteurs Direct3D ne sont disponibles que pour Windows.\n" +#~ "\n" +#~ "Dans le doute, sélectionnez Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Sélectionne quel moteur graphique doit être utilisé en interne.\n" +#~ "Direct3D 9 est généralement le plus rapide. OpenGL est le plus précis. " +#~ "Direct3D 11 est entre les deux.\n" +#~ "Les moteurs Direct3D ne sont disponibles que pour Windows.\n" +#~ "\n" +#~ "Dans le doute, sélectionnez OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "" +#~ "iCacheJIT : Lecture de l'Opcode depuis %x. Merci de nous le signaler." diff --git a/Languages/po/he.po b/Languages/po/he.po index cc191c6f4f..e84837fbf8 100644 --- a/Languages/po/he.po +++ b/Languages/po/he.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/dolphin-emu/" @@ -19,13 +19,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(ארוך מידי)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "משחק:" @@ -33,7 +33,7 @@ msgstr "משחק:" msgid "! NOT" msgstr "! לא" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -55,12 +55,12 @@ msgstr "" msgid "%1$sCopy%1$s" msgstr "%1$sהעתק%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -71,26 +71,26 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card file size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -102,7 +102,7 @@ msgstr "" msgid "%s failed to open" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -112,7 +112,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "" @@ -170,11 +170,11 @@ msgstr "" msgid "&DSP Settings" msgstr "הגדרות קול" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "" @@ -238,7 +238,7 @@ msgstr "" msgid "&Play" msgstr "&שחק" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "" @@ -282,7 +282,7 @@ msgstr "" msgid "&Wiimote Settings" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "" @@ -318,7 +318,7 @@ msgstr "" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "" @@ -334,7 +334,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "" @@ -350,7 +350,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "" @@ -362,7 +362,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -370,7 +370,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -378,13 +378,13 @@ msgstr "" msgid "A" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "" @@ -403,21 +403,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "" @@ -456,66 +457,66 @@ msgid "" "%s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " "(%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " "Fill (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " "Pointer (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" "Master codes are not needed. Do not use master codes." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "" @@ -529,11 +530,11 @@ msgstr "" msgid "Add" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "" @@ -541,9 +542,9 @@ msgstr "" msgid "Add new pane" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "" @@ -581,36 +582,36 @@ msgstr "" msgid "Advanced" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "" @@ -630,19 +631,19 @@ msgstr "" msgid "Anti-Aliasing:" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "" @@ -653,7 +654,7 @@ msgid "" "If unsure, select (off)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "" @@ -662,13 +663,13 @@ msgstr "" msgid "Are you sure you want to delete \"%s\"?" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" @@ -676,7 +677,11 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "" @@ -685,12 +690,12 @@ msgstr "" msgid "At least one pane must remain open." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "" @@ -698,7 +703,7 @@ msgstr "" msgid "AudioCommon: Error opening AO device.\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "" @@ -734,16 +739,16 @@ msgstr "" msgid "Back" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "" @@ -761,15 +766,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "" @@ -781,7 +786,7 @@ msgstr "" msgid "Basic" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "" @@ -789,7 +794,7 @@ msgstr "" msgid "Bass" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "" @@ -810,7 +815,7 @@ msgid "Blue Right" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "" @@ -819,7 +824,7 @@ msgstr "" msgid "Bound Controls: %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "" @@ -827,7 +832,7 @@ msgstr "" msgid "Browse" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "" @@ -835,11 +840,11 @@ msgstr "" msgid "Browse for an ISO directory..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "" @@ -849,7 +854,7 @@ msgstr "" msgid "Buttons" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -871,7 +876,7 @@ msgstr "" msgid "CP reg" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "" @@ -888,17 +893,17 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "" @@ -910,11 +915,11 @@ msgstr "" msgid "Cannot open %s" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -922,7 +927,7 @@ msgid "" "is not a valid gamecube memory card file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -932,7 +937,7 @@ msgstr "" msgid "Caps Lock" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "" @@ -940,7 +945,7 @@ msgstr "" msgid "Center" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "" @@ -952,11 +957,11 @@ msgstr "" msgid "Change Disc" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -970,11 +975,11 @@ msgstr "" msgid "Changes sign to zNear Parameter (after correction)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "" @@ -982,47 +987,47 @@ msgstr "" msgid "Cheat Code" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "" @@ -1030,14 +1035,14 @@ msgstr "" msgid "Choose a memory card:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "" @@ -1056,7 +1061,7 @@ msgstr "" msgid "Clear" msgstr "" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1064,7 +1069,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "" @@ -1073,11 +1078,11 @@ msgstr "" msgid "Co&nfigure..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "" @@ -1089,20 +1094,20 @@ msgstr "" msgid "Comment" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "" @@ -1120,8 +1125,8 @@ msgstr "" msgid "Configure Control" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "" @@ -1129,13 +1134,13 @@ msgstr "" msgid "Configure..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "" @@ -1149,7 +1154,7 @@ msgstr "" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "" @@ -1174,7 +1179,7 @@ msgstr "" msgid "Connect Wiimote 4" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "" @@ -1194,7 +1199,7 @@ msgstr "" msgid "Convert to GCI" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "" @@ -1203,16 +1208,11 @@ msgstr "" msgid "Copy to Memcard %c" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "" @@ -1225,12 +1225,12 @@ msgid "" "most PC DVD drives." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "" @@ -1248,27 +1248,27 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "" @@ -1300,12 +1300,12 @@ msgstr "" msgid "Crossfade" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "" @@ -1313,11 +1313,11 @@ msgstr "" msgid "Custom Projection Hack Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "" @@ -1333,20 +1333,20 @@ msgstr "" msgid "DSP" msgstr "קול" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "" @@ -1354,11 +1354,11 @@ msgstr "" msgid "DSP settings" msgstr "הגדרות קול" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "" @@ -1370,15 +1370,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "" @@ -1407,16 +1407,16 @@ msgstr "" msgid "Decimal" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "" @@ -1428,7 +1428,7 @@ msgstr "" msgid "Default" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "" @@ -1470,8 +1470,8 @@ msgstr "" msgid "Device" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "" @@ -1479,15 +1479,11 @@ msgstr "" msgid "Dial" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +msgid "Direct3D" msgstr "" -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" -msgstr "" - -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1533,7 +1529,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "" @@ -1557,19 +1553,19 @@ msgstr "" msgid "Divide" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1600,9 +1596,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1626,12 +1621,12 @@ msgstr "" msgid "Dolphin FIFO" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "" @@ -1643,24 +1638,24 @@ msgstr "" msgid "Dolphin at &Google Code" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1684,11 +1679,11 @@ msgstr "" msgid "Drums" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "" @@ -1725,9 +1720,9 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "" @@ -1748,7 +1743,7 @@ msgid "" "driver." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "" @@ -1764,14 +1759,10 @@ msgstr "" msgid "Edit ActionReplay Code" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "" @@ -1780,8 +1771,8 @@ msgstr "" msgid "Edit current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "" @@ -1793,7 +1784,7 @@ msgstr "" msgid "Embedded Frame Buffer" msgstr "" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "" @@ -1820,7 +1811,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "" @@ -1838,15 +1829,15 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "" @@ -1854,27 +1845,27 @@ msgstr "" msgid "Enable Cache" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "" @@ -1882,7 +1873,7 @@ msgstr "" msgid "Enable Progressive Scan" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "" @@ -1890,7 +1881,7 @@ msgstr "" msgid "Enable Speaker Data" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "" @@ -1907,7 +1898,7 @@ msgid "" "If unsure, select 1x." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -1933,23 +1924,23 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -1962,7 +1953,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -1979,9 +1970,9 @@ msgstr "" msgid "End" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "" @@ -2004,21 +1995,20 @@ msgstr "" msgid "Entry 1/%d" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2062,7 +2052,7 @@ msgstr "" msgid "Export Failed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "" @@ -2078,7 +2068,7 @@ msgstr "" msgid "Export Save" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "" @@ -2094,7 +2084,7 @@ msgstr "" msgid "Export save as..." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "" @@ -2110,44 +2100,44 @@ msgstr "" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "" @@ -2159,15 +2149,15 @@ msgstr "" msgid "FIFO Player" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "" @@ -2175,11 +2165,15 @@ msgstr "" msgid "Failed to download codes." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2220,7 +2214,7 @@ msgstr "" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2228,13 +2222,13 @@ msgid "" "FilePosition:%llx" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2250,13 +2244,13 @@ msgstr "" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2266,7 +2260,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2277,7 +2271,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "" @@ -2299,7 +2293,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "" @@ -2311,7 +2305,7 @@ msgstr "" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "" @@ -2343,7 +2337,7 @@ msgid "" "or does not have a valid extension" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2354,7 +2348,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "" @@ -2363,11 +2357,11 @@ msgstr "" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "" @@ -2395,7 +2389,7 @@ msgstr "" msgid "Force 4:3" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "" @@ -2419,14 +2413,14 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " "setting when playing Japanese games." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2436,7 +2430,7 @@ msgstr "" msgid "Forward" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2479,7 +2473,7 @@ msgstr "" msgid "Frame S&kipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "" @@ -2491,9 +2485,9 @@ msgstr "" msgid "Free Look" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "" @@ -2526,27 +2520,27 @@ msgstr "" msgid "GX_CMD_INVL_VC" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "" @@ -2554,7 +2548,7 @@ msgstr "" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "" @@ -2563,7 +2557,7 @@ msgid "Gamecube &Pad Settings" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "" @@ -2571,12 +2565,12 @@ msgstr "" msgid "Gamecube Pad settings" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2586,7 +2580,7 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "" @@ -2595,13 +2589,13 @@ msgstr "" msgid "General Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2614,7 +2608,7 @@ msgstr "" msgid "Graphics settings" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "" @@ -2629,7 +2623,7 @@ msgid "" "If unsure, leave this checked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "" @@ -2653,11 +2647,11 @@ msgstr "" msgid "Hacks" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "" @@ -2669,7 +2663,7 @@ msgstr "" msgid "Help" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2681,7 +2675,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2711,7 +2705,7 @@ msgid "Home" msgstr "" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "" @@ -2720,11 +2714,11 @@ msgid "Hotkey Configuration" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "" @@ -2732,29 +2726,29 @@ msgstr "" msgid "Hybrid Wiimote" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "" @@ -2766,15 +2760,15 @@ msgstr "" msgid "IR Sensitivity:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "" @@ -2782,7 +2776,7 @@ msgstr "" msgid "Icon" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -2838,7 +2832,7 @@ msgid "" "but does not have a correct header" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "" @@ -2847,7 +2841,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "" @@ -2867,7 +2861,7 @@ msgstr "" msgid "Insert Encrypted or Decrypted code here..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "" @@ -2879,44 +2873,44 @@ msgstr "" msgid "Install WAD" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "" @@ -2943,7 +2937,7 @@ msgstr "" msgid "Interpreter (VERY slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "" @@ -2952,7 +2946,7 @@ msgstr "" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "" @@ -2960,16 +2954,16 @@ msgstr "" msgid "Invalid bat.map or dir entry" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -2993,34 +2987,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "" @@ -3039,8 +3035,9 @@ msgstr "" msgid "Key" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "" @@ -3058,7 +3055,7 @@ msgstr "" msgid "L-Analog" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "" @@ -3067,7 +3064,7 @@ msgstr "" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "" @@ -3099,11 +3096,11 @@ msgid "" "Middle-click to clear." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "" @@ -3195,11 +3192,11 @@ msgstr "" msgid "Load State..." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "" @@ -3243,12 +3240,12 @@ msgstr "" msgid "Logger Outputs" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "" @@ -3263,7 +3260,7 @@ msgid "" " %016llx%016llx != %016llx%016llx" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "" @@ -3277,11 +3274,11 @@ msgstr "" msgid "Main Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "" @@ -3312,7 +3309,7 @@ msgid "Memory Byte" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "" @@ -3322,7 +3319,7 @@ msgid "" "could mangle stuff!" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3333,7 +3330,7 @@ msgid "" "Would you like to copy the old file to this new location?\n" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" @@ -3341,7 +3338,7 @@ msgstr "" msgid "Menu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "" @@ -3354,7 +3351,7 @@ msgstr "" msgid "Misc" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "" @@ -3375,11 +3372,11 @@ msgstr "" msgid "Monospaced font" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "" @@ -3491,15 +3488,15 @@ msgstr "" msgid "NP Up" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "" @@ -3509,7 +3506,7 @@ msgstr "" msgid "Native GCI files(*.gci)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "" @@ -3518,7 +3515,7 @@ msgstr "" msgid "Next Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "" @@ -3526,11 +3523,11 @@ msgstr "" msgid "Nickname :" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "" @@ -3569,24 +3566,25 @@ msgstr "" msgid "No save folder found for title %s" msgstr "" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "" @@ -3595,11 +3593,11 @@ msgstr "" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "" @@ -3620,7 +3618,7 @@ msgstr "" msgid "Num Lock" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "" @@ -3641,7 +3639,7 @@ msgstr "" msgid "Object Range" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "" @@ -3649,7 +3647,7 @@ msgstr "" msgid "Offset:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "" @@ -3667,11 +3665,11 @@ msgstr "" msgid "Open" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "" @@ -3701,17 +3699,13 @@ msgstr "" msgid "OpenMP Texture Decoder" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "" @@ -3732,7 +3726,7 @@ msgstr "" msgid "Other" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3746,11 +3740,11 @@ msgstr "" msgid "P&lay Recording..." msgstr "" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "" @@ -3774,26 +3768,26 @@ msgstr "" msgid "Parameters" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "" @@ -3806,7 +3800,7 @@ msgstr "" msgid "Per-Pixel Lighting" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "" @@ -3817,8 +3811,8 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "" @@ -3830,7 +3824,7 @@ msgstr "" msgid "Play/Pause" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "" @@ -3838,11 +3832,11 @@ msgstr "" msgid "Playback Options" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "" @@ -3854,36 +3848,36 @@ msgstr "" msgid "Plus-Minus" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "" @@ -3896,7 +3890,7 @@ msgstr "" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -3918,7 +3912,7 @@ msgstr "" msgid "Previous Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "" @@ -3942,8 +3936,8 @@ msgstr "" msgid "Question" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "" @@ -3965,7 +3959,7 @@ msgstr "" msgid "RAM" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "" @@ -4004,7 +3998,7 @@ msgstr "" msgid "Record" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4051,10 +4045,10 @@ msgstr "" msgid "Refresh game list" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "" @@ -4074,7 +4068,7 @@ msgstr "" msgid "Reset" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "" @@ -4082,7 +4076,7 @@ msgstr "" msgid "Return" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4095,17 +4089,17 @@ msgstr "" msgid "Right Stick" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "" @@ -4179,12 +4173,12 @@ msgstr "" msgid "Save State..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "" @@ -4192,7 +4186,7 @@ msgstr "" msgid "Save current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "" @@ -4205,16 +4199,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "" @@ -4230,11 +4224,11 @@ msgstr "" msgid "Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "" @@ -4257,12 +4251,12 @@ msgstr "" msgid "Select" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "" @@ -4281,19 +4275,19 @@ msgstr "" msgid "Select floating windows" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "" @@ -4308,7 +4302,7 @@ msgid "" "If unsure, select Auto." msgstr "" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "" @@ -4326,27 +4320,28 @@ msgid "" "If still unsure, use the highest resolution which works for you." msgstr "" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "" @@ -4358,16 +4353,16 @@ msgstr "" msgid "Separator" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "" @@ -4376,30 +4371,30 @@ msgstr "" msgid "Set as default Memcard %c" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "" -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "" @@ -4423,7 +4418,7 @@ msgstr "" msgid "Show &Toolbar" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4463,7 +4458,7 @@ msgstr "" msgid "Show Korea" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "" @@ -4503,11 +4498,11 @@ msgstr "" msgid "Show Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4522,7 +4517,7 @@ msgstr "" msgid "Show lag counter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4564,23 +4559,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4604,11 +4600,11 @@ msgstr "" msgid "Slot %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "" @@ -4616,7 +4612,7 @@ msgstr "" msgid "Snapshot" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "" @@ -4628,27 +4624,27 @@ msgid "" "Do you really want to enable software rendering? If unsure, select 'No'." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 #, c-format -msgid "Sound buffer creation failed: %s" +msgid "Sound buffer creation failed: %08x" msgstr "" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "" @@ -4668,7 +4664,7 @@ msgid "" "If unsure, select 640x528." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "" @@ -4676,13 +4672,13 @@ msgstr "" msgid "Square Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "" @@ -4698,7 +4694,7 @@ msgstr "" msgid "Start Recording" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "" @@ -4706,7 +4702,7 @@ msgstr "" msgid "State Saves" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "" @@ -4750,30 +4746,31 @@ msgstr "" msgid "Successfully imported save files" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "" @@ -4804,7 +4801,7 @@ msgstr "" msgid "Take Screenshot" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "" @@ -4824,11 +4821,11 @@ msgstr "" msgid "Texture Format Overlay" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "" @@ -4836,13 +4833,13 @@ msgstr "" msgid "The checksum was successfully fixed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -4861,7 +4858,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "" @@ -4890,25 +4887,25 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "" @@ -4917,33 +4914,33 @@ msgstr "" msgid "The specified file \"%s\" does not exist" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" @@ -4959,7 +4956,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -4967,7 +4964,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -4975,7 +4972,7 @@ msgid "" "cause occasional crashes/glitches." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "" @@ -4984,12 +4981,12 @@ msgstr "" msgid "Threshold" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "" @@ -5024,15 +5021,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "" @@ -5050,7 +5048,7 @@ msgid "" "Wiimote bt ids are not available" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "" @@ -5066,12 +5064,12 @@ msgstr "" msgid "UDP Port:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "" @@ -5080,7 +5078,7 @@ msgstr "" msgid "UNKNOWN_%02X" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "" @@ -5093,7 +5091,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 #, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5115,11 +5113,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "" @@ -5134,12 +5132,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5149,16 +5147,16 @@ msgstr "" msgid "Up" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "" @@ -5166,11 +5164,11 @@ msgstr "" msgid "Use Fullscreen" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "" @@ -5216,11 +5214,11 @@ msgstr "" msgid "V-Sync" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "" @@ -5228,7 +5226,7 @@ msgstr "" msgid "Value:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "" @@ -5240,7 +5238,7 @@ msgstr "" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "" @@ -5248,7 +5246,7 @@ msgstr "" msgid "Virtual" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "" @@ -5276,15 +5274,15 @@ msgstr "" msgid "Warning" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "" @@ -5357,19 +5355,19 @@ msgstr "" msgid "Width" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "" @@ -5382,12 +5380,17 @@ msgstr "" msgid "Wiimote" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +msgid "Wiimote " +msgstr "" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "" @@ -5419,14 +5422,14 @@ msgstr "" msgid "Word Wrap" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5446,21 +5449,36 @@ msgstr "" msgid "Write to Window" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "" @@ -5486,15 +5504,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "" @@ -5502,7 +5520,7 @@ msgstr "" msgid "You must enter a valid profile name." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "" @@ -5513,7 +5531,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5527,15 +5545,15 @@ msgid "" "Do you want to generate a new one?" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "" @@ -5577,29 +5595,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "" - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "" diff --git a/Languages/po/hu.po b/Languages/po/hu.po index 3f7b03fc89..46bb8ee213 100644 --- a/Languages/po/hu.po +++ b/Languages/po/hu.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Hungarian (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr " (túl sok kijelző)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Játék:" @@ -34,7 +34,7 @@ msgstr "Játék:" msgid "! NOT" msgstr "! NEM" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "%08X:" msgid "%1$sCopy%1$s" msgstr "%1$sMásolás%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -74,12 +74,12 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "%s már van, felülírod?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s tisztítása sikertelen. Valószínűleg a képfájl sérült." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -88,7 +88,7 @@ msgstr "" "%s memóriakártyakénti betöltése sikertelen\n" " A kártya fájlmérete nem megfelelő (0x%x bájt)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -97,7 +97,7 @@ msgstr "" "%s memóriakártyakénti betöltése sikertelen\n" " A kártya mérete nem megfelelő (0x%x bájt)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -112,7 +112,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s megnyitása sikertelen" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -122,7 +122,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s egy 0 bájt méretű fájl" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s már tömörítve van! Nem tömöríthető tovább." @@ -180,11 +180,11 @@ msgstr "&Csalás kezelő" msgid "&DSP Settings" msgstr "&Hang beállítások" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&ISO törlése..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&A kiválasztott ISO fájlok törlése..." @@ -248,7 +248,7 @@ msgstr "&Szünet" msgid "&Play" msgstr "&Indítás" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Tulajdonságok" @@ -292,7 +292,7 @@ msgstr "&Nézet" msgid "&Wiimote Settings" msgstr "&Wiimote beállítások" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -328,7 +328,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -344,7 +344,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -360,7 +360,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -372,7 +372,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -380,7 +380,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -388,13 +388,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Már egy NetPlay ablak nyitva van!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "A játék jelenleg nem fut." @@ -415,21 +415,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM alaplap" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR kódok" @@ -478,7 +479,7 @@ msgstr "" "Felelős kód:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -486,7 +487,7 @@ msgstr "" "Action Replay hiba: érvénytelen méret (%08x : address = %08x) a kód " "hozzáadásban (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -495,7 +496,7 @@ msgstr "" "Action Replay hiba: érvénytelen méret (%08x : address = %08x) a kitöltésben " "és regiszterben (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -504,7 +505,7 @@ msgstr "" "Action Replay hiba: érvénytelen méret (%08x : address = %08x) a RAM írásban " "és kitöltésben (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -513,12 +514,12 @@ msgstr "" "Action Replay hiba: érvénytelen méret (%08x : address = %08x) a mutató " "írásában (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay hiba: érvénytelen érték (%08x) a memória másolásban (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -527,27 +528,27 @@ msgstr "" "Action Replay hiba: Mester kód és CCXXXXXX írása nincs beépítve (%s)\n" "Mester kódokra nincs szükség. Ne használj mester kódokat." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay hiba: érvénytelen AR kód a(z) %s. sorban" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Feltételes kód: Érvénytelen méret %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Érvénytelen szabályszerű kód típus %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Szabályszerű kód %i: Érvénytelen alfaj %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Szabályszerű kód 0: Érvénytelen alfaj %08x (%s)" @@ -561,11 +562,11 @@ msgstr "Adapter:" msgid "Add" msgstr "Hozzáadás" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "ActionReplay kód hozzáadása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Patch hozzáadása" @@ -573,9 +574,9 @@ msgstr "Patch hozzáadása" msgid "Add new pane" msgstr "Új mező hozzáadása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Hozzáadás..." @@ -629,36 +630,36 @@ msgstr "" msgid "Advanced" msgstr "Haladó" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Haladó beállítások" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Minden GC/Wii fájl (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Minden GC/Wii képfájl (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Minden Gamecube GCM fájl (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Minden állásmentés (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Minden Wii ISO fájl (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Minden tömörített GC/Wii ISO fájl (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Minden fájl (*.*)|*.*" @@ -678,20 +679,20 @@ msgstr "Anizotrópikus szűrés:" msgid "Anti-Aliasing:" msgstr "Élsimítás:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" "A betöltő program nem megfelelő méretű...ez tényleg egy betöltő program?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "A betöltő program nem képes fájlból betölteni" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Betöltő program:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Alkalmaz" @@ -705,7 +706,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, válaszd ezt: (ki)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arab" @@ -714,7 +715,7 @@ msgstr "Arab" msgid "Are you sure you want to delete \"%s\"?" msgstr "Biztos törlöd ezt: \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -722,7 +723,7 @@ msgstr "" "Biztos törlöd ezeket a fájlokat?\n" "Végleg el fognak veszni!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "Biztos törlöd ezt a fájlt? Végleg el fog veszni!" @@ -730,7 +731,12 @@ msgstr "Biztos törlöd ezt a fájlt? Végleg el fog veszni!" msgid "Arm JIT (experimental)" msgstr "Arm JIT (kísérleti)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (kísérleti)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Képarány:" @@ -739,12 +745,12 @@ msgstr "Képarány:" msgid "At least one pane must remain open." msgstr "Legalább egy mezőnek megnyitva kell maradnia." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Hang" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Hang feldolgozó:" @@ -752,7 +758,7 @@ msgstr "Hang feldolgozó:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Hiba az AO eszköz megnyitásakor.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Automatikus" @@ -791,16 +797,16 @@ msgstr "BP regiszter " msgid "Back" msgstr "Hátra" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Feldolgozó beállításai" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Feldolgozó:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Háttér bemenet" @@ -818,15 +824,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Játék kép" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Játék kép részletek" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Játék kép:" @@ -838,7 +844,7 @@ msgstr "Vevő" msgid "Basic" msgstr "Alap" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Alap beállítások" @@ -846,7 +852,7 @@ msgstr "Alap beállítások" msgid "Bass" msgstr "Basszus" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Block Allocation Table ellenőrző összege nem megfelelő" @@ -867,7 +873,7 @@ msgid "Blue Right" msgstr "Kék jobbra" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Gomb" @@ -876,7 +882,7 @@ msgstr "Gomb" msgid "Bound Controls: %lu" msgstr "Összekötött irányítások: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Hibás" @@ -884,7 +890,7 @@ msgstr "Hibás" msgid "Browse" msgstr "Tallózás" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Hozzáadandó könyvtár tallózása" @@ -892,11 +898,11 @@ msgstr "Hozzáadandó könyvtár tallózása" msgid "Browse for an ISO directory..." msgstr "Egy ISO könyvtár tallózása..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Kimeneti könyvtár tallózása" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Puffer:" @@ -906,7 +912,7 @@ msgstr "Puffer:" msgid "Buttons" msgstr "Gombok" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -930,7 +936,7 @@ msgstr "C-kar" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Processzor emulátor motor" @@ -953,17 +959,17 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Mégse" @@ -975,11 +981,11 @@ msgstr "Mégse" msgid "Cannot open %s" msgstr "%s nem nyitható meg" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Nem lehet esemény bejegyzéseket törölni függőben lévő eseményekkel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -990,7 +996,7 @@ msgstr "" "%s\n" "fájl nem megfelelő GameCube memóriakártya fájl" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1002,7 +1008,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Katalán" @@ -1010,7 +1016,7 @@ msgstr "Katalán" msgid "Center" msgstr "Közép" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Váltás" @@ -1022,11 +1028,11 @@ msgstr "Lemez &váltás..." msgid "Change Disc" msgstr "Lemez váltás" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Játék váltás" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1042,11 +1048,11 @@ msgstr "Megváltoztatja a zFar paraméterhez tartozó jegyet (javítás után)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Megváltoztatja a zNear paraméterhez tartozó jegyet (javítás után)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "A változtatások nem érvényesülnek ameddig fut az emulátor!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Csevegés" @@ -1054,47 +1060,47 @@ msgstr "Csevegés" msgid "Cheat Code" msgstr "Csalás kód" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Csalás keresés" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Csalás kezelő" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Partíció integritás ellenőrzés" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Integritás ellenőrzés..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Kínai (egyszerűsített)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Kínai (hagyományos)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Válassz DVD gyökér könyvtárat:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Válassz NAND gyökér könyvtárat:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Válassz alapértelmezett ISO fájlt:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Válassz hozzáadandó könyvtárat" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Válasz megnyitandó fájl" @@ -1102,7 +1108,7 @@ msgstr "Válasz megnyitandó fájl" msgid "Choose a memory card:" msgstr "Válassz memóriakártyát:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1110,8 +1116,8 @@ msgstr "" "Válassz betöltő programnak használandó fájlt: (csak könyvtárakból " "létrehozott lemezekre érvényesíthető)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Válassz mappát a kitömörítéshez" @@ -1130,7 +1136,7 @@ msgstr "Klasszikus" msgid "Clear" msgstr "Törlés" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1140,7 +1146,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Bezárás" @@ -1149,11 +1155,11 @@ msgstr "Bezárás" msgid "Co&nfigure..." msgstr "Be&állítások..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Kód infó" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Kód:" @@ -1165,20 +1171,20 @@ msgstr "Parancs" msgid "Comment" msgstr "Megjegyzés" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Megjegyzés:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "ISO tömörítése..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Kiválasztott ISO tömörítése..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "ISO tömörítése" @@ -1196,8 +1202,8 @@ msgstr "Beállítások" msgid "Configure Control" msgstr "Irányítás beállítás" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Irányítók beállítása" @@ -1205,13 +1211,13 @@ msgstr "Irányítók beállítása" msgid "Configure..." msgstr "Beállítások..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Fájl felülírás jóváhagyása" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Kilépéskor megerősítés" @@ -1225,7 +1231,7 @@ msgstr "Csatlakozás" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "USB billentyűzet csatlakoztatása" @@ -1250,7 +1256,7 @@ msgstr "Wiimote 3 csatlakoztatása" msgid "Connect Wiimote 4" msgstr "Wiimote 4 csatlakoztatása" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Csatlakozás..." @@ -1270,7 +1276,7 @@ msgstr "Irányítás" msgid "Convert to GCI" msgstr "Konvertálás: GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Másolás sikertelen" @@ -1279,16 +1285,11 @@ msgstr "Másolás sikertelen" msgid "Copy to Memcard %c" msgstr "%c. memóriakártyára másolás" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Mag" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "%s nem hozható létre" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "%s hang feldolgozó iniciálása sikertelen." @@ -1304,12 +1305,12 @@ msgstr "" "biztonsági mentés. Célszerű tudni, hogy az eredeti Gamecube és Wii " "lemezeket a legtöbb számítógépes DVD meghajtó nem képes olvasni." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "%s ISO fájl nem ismerhető fel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "%s nem menthető el" @@ -1327,11 +1328,11 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Az 'ini' kiterjesztéshez nem található nyitott parancs!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1339,17 +1340,17 @@ msgstr "" "A mag nem iniciálható.\n" "Ellenőrizd a beállításokat." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Számláló:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Ország:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "AR kód létrehozása" @@ -1384,12 +1385,12 @@ msgstr "" msgid "Crossfade" msgstr "Kereszthalkítás" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Egyedi megjelenítési hack" @@ -1397,11 +1398,11 @@ msgstr "Egyedi megjelenítési hack" msgid "Custom Projection Hack Settings" msgstr "Egyedi megjelenítési hack beállítások" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Néhány ortografikus megjelenítési paraméter egyedi beállítása." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Cseh" @@ -1417,20 +1418,20 @@ msgstr "Digitális irányok" msgid "DSP" msgstr "Hang" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP emulátor motor" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE emuláció (gyors)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE interpreter (lassú)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE recompiler" @@ -1438,11 +1439,11 @@ msgstr "DSP LLE recompiler" msgid "DSP settings" msgstr "Hang (DSP) beállítások" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD gyökér könyvtár:" @@ -1454,15 +1455,15 @@ msgstr "DVDLowRead - Végzetes hiba: kötetből kiolvasás sikertelen" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Végzetes hiba: kötetből kiolvasás sikertelen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Adatok mérete" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Dátum:" @@ -1491,16 +1492,16 @@ msgstr "Hibakeresés" msgid "Decimal" msgstr "Decimális" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "ISO kitömörítése..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "A kiválasztott ISO fájlok kitömörítése..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "ISO kitömörítés" @@ -1512,7 +1513,7 @@ msgstr "" msgid "Default" msgstr "Alap" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Alapértelmezett ISO:" @@ -1556,8 +1557,8 @@ msgstr "" msgid "Device" msgstr "Eszköz" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Eszköz beállítások" @@ -1565,15 +1566,12 @@ msgstr "Eszköz beállítások" msgid "Dial" msgstr "Tárcsa" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1634,7 +1632,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Lemez" @@ -1661,19 +1659,19 @@ msgstr "" msgid "Divide" msgstr "Megosztás" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Le akarod állítani az éppen működő emulációt?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II dekóder" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1704,9 +1702,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1730,12 +1727,12 @@ msgstr "Dolphin emulált Wiimote beállítások" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GCPad beállítások" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS videók (*.dtm)" @@ -1747,7 +1744,7 @@ msgstr "Dolphin Wiimote beállítások" msgid "Dolphin at &Google Code" msgstr "Dolphin &Google Code oldal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1755,7 +1752,7 @@ msgstr "" "Dolphin nem talált egyetlen GC/Wii ISO fájlt sem. Fájlok tallózásához dupla " "kattintás ide..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1763,12 +1760,12 @@ msgstr "" "A Dolphin beállításai végett jelenleg a játékok rejtve vannak. Dupla " "kattintás ide a játékok megjelenítéséhez..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "A Dolphin nem tudta elvégezni a kívánt műveletet." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1792,11 +1789,11 @@ msgstr "Letöltve %lu kód. (hozzáadva %lu)" msgid "Drums" msgstr "Dobok" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Utánzat" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Hang mentése" @@ -1843,9 +1840,9 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Holland" @@ -1870,7 +1867,7 @@ msgstr "" "valószínűleg újra kell indítanod a számítógépet, hogy a Windows felismerje " "az új illesztőprogramot." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EURÓPA" @@ -1886,14 +1883,10 @@ msgstr "Szerkesztés" msgid "Edit ActionReplay Code" msgstr "ActionReplay kód szerkesztése" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Beállítások szerkesztése" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Patch szerkesztése" @@ -1902,8 +1895,8 @@ msgstr "Patch szerkesztése" msgid "Edit current perspective" msgstr "Jelenlegi perspektíva szerkesztése" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Szerkesztés..." @@ -1915,7 +1908,7 @@ msgstr "Effektus" msgid "Embedded Frame Buffer" msgstr "Beágyazott képkocka puffer" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Az emuláció már fut" @@ -1953,7 +1946,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Emulált Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Emuláció állapota:" @@ -1977,15 +1970,15 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "AR naplózás bekapcsolása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Blokk csatlakozás használata" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Bounding Box kalkuláció használata" @@ -1993,27 +1986,27 @@ msgstr "Bounding Box kalkuláció használata" msgid "Enable Cache" msgstr "Gyorsítótár használata" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Csalások használata" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Kétmagos mód használata" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Kétmagos mód használata (gyorsítás)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Tétlen állapot mellőzése" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Tétlen állapot mellőzése (gyorsítás)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "MMU használata" @@ -2021,7 +2014,7 @@ msgstr "MMU használata" msgid "Enable Progressive Scan" msgstr "Progresszív pásztázás használata" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Képernyővédő bekapcsolása" @@ -2029,7 +2022,7 @@ msgstr "Képernyővédő bekapcsolása" msgid "Enable Speaker Data" msgstr "Hangszóró adatok bekapcsolása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Széleskijelző bekapcsolása" @@ -2051,7 +2044,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, válaszd ezt: 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2087,7 +2080,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2095,11 +2088,11 @@ msgstr "" "Használatával The Legend of Zelda: Twilight Princess játék sebessége " "növekedik. A TÖBBI játéknál legyen kikapcsolva." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Egyedi megjelenítési hack használata" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2107,7 +2100,7 @@ msgstr "" "Dolby Pro Logic II emuláció bekapcsolása 5.1 surround hanggal. Nem működik " "OSX alatt." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2127,7 +2120,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2149,9 +2142,9 @@ msgstr "" msgid "End" msgstr "Vége" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Angol" @@ -2174,23 +2167,22 @@ msgstr "%d/%d bejegyzés" msgid "Entry 1/%d" msgstr "1/%d bejegyzés" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Egyenlő" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Hiba" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Hiba a kiválasztott nyelv betöltése közben. Rendszer alapértelmezett " "visszaállítva." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2239,7 +2231,7 @@ msgstr "" msgid "Export Failed" msgstr "Exportálás sikertelen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Fájl exportálása" @@ -2255,7 +2247,7 @@ msgstr "Felvétel exportálása..." msgid "Export Save" msgstr "Mentés exportálása" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Wii mentés exportálása (kísérleti)" @@ -2271,7 +2263,7 @@ msgstr "" msgid "Export save as..." msgstr "Exportálás mentése másként..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Kiegészítő" @@ -2287,44 +2279,44 @@ msgstr "Extra paraméter" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Az extra paraméter csak a ''Metroid: Other M'' játékban hasznos." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Minden fájl kitömörítése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Betöltő program kitömörítése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "DOL kitömörítése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Könyvtár kitömörítése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Fájl kitömörítése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Partíció kitömörítése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "%s kitömörítése" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Minden fájl kitömörítése" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Könyvtár kitömörítése" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Kitömörítés..." @@ -2336,15 +2328,15 @@ msgstr "FIFO bájt" msgid "FIFO Player" msgstr "FIFO lejátszó" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANCIAORSZÁG" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST méret:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Csatlakozás sikertelen!" @@ -2352,11 +2344,15 @@ msgstr "Csatlakozás sikertelen!" msgid "Failed to download codes." msgstr "Kódok letöltése sikertelen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Kitömörítés nem sikerült ide: %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2405,7 +2401,7 @@ msgstr "A banner.bin beolvasása sikertelen" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2416,7 +2412,7 @@ msgstr "" "A memóriakártya sérülhetett\n" "FilePosition:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2425,7 +2421,7 @@ msgstr "" "sikertelen\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2443,7 +2439,7 @@ msgstr "%d fájlból történő adatok kiolvasása nem sikerült" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2451,7 +2447,7 @@ msgstr "" "A könyvtár biztonsági mentés pontos visszaolvasása nem sikerült\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2463,7 +2459,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2476,7 +2472,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "A lemezképfájl egyedi azonosítójának kiolvasása sikertelen" @@ -2498,7 +2494,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "Fejléc írása sikertelen a(z) %s számára" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Farsi" @@ -2510,7 +2506,7 @@ msgstr "Gyors" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "MMU gyors verziója. Nem működik minden játéknál." @@ -2546,7 +2542,7 @@ msgstr "" "A fájl nem nyitható meg\n" "vagy a kiterjesztése nem megfelelő" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2559,7 +2555,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "A fájl nem ismerhető fel memóriakártyaként" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "A fájl nincs tömörítve" @@ -2568,11 +2564,11 @@ msgstr "A fájl nincs tömörítve" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Ismeretlen megnyitási mód : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Fájlrendszer" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Az 'ini' fájltípus ismeretlen! Nem lesz megnyitva!" @@ -2600,7 +2596,7 @@ msgstr "Kényszerített 16:9" msgid "Force 4:3" msgstr "Kényszerített 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Konzol kényszerítése NTSC-J típusra" @@ -2633,7 +2629,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2643,7 +2639,7 @@ msgstr "" "Hagyd kijelöletlenül, a Dolphin alapértelmezett az NTSC-U és automatikusan " "bekapcsolódik ez a beállítás japán játékok használatakor." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2655,7 +2651,7 @@ msgstr "" msgid "Forward" msgstr "Előre" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2698,7 +2694,7 @@ msgstr "Képkocka rendezés" msgid "Frame S&kipping" msgstr "Képkocka k&ihagyás" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Képkocka korlát:" @@ -2710,9 +2706,9 @@ msgstr "Rögzítendő képkockák" msgid "Free Look" msgstr "Szabad nézet" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francia" @@ -2745,27 +2741,27 @@ msgstr "GC irányító" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "Játék azonosító:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "A játék már fut!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "A játék nem fut!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "A játék nem található!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "A játék sajátos beállításai" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Játék konfig" @@ -2773,7 +2769,7 @@ msgstr "Játék konfig" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube állásmentés fájlok (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2782,7 +2778,7 @@ msgid "Gamecube &Pad Settings" msgstr "Gamecube &irányító beállítások" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Gamecube memóriakártyák (*.raw,*.gcp)" @@ -2790,12 +2786,12 @@ msgstr "Gamecube memóriakártyák (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Gamecube irányító beállítások" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko kódok" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2809,7 +2805,7 @@ msgstr "" "könyvtárban és újraindítod a Dolphin emulátort.) " #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Általános" @@ -2818,13 +2814,13 @@ msgstr "Általános" msgid "General Settings" msgstr "Általános beállítások" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Német" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: A jelzőszám nagyobb mint az ar kód lista mérete %lu" @@ -2837,7 +2833,7 @@ msgstr "Grafika" msgid "Graphics settings" msgstr "Grafikai beállítások" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Nagyobb mint" @@ -2859,7 +2855,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelölve." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Görög" @@ -2883,11 +2879,11 @@ msgstr "Gitár" msgid "Hacks" msgstr "Hackek" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "A fejléc ellenőrző összege hibás" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Héber" @@ -2899,7 +2895,7 @@ msgstr "Magasság" msgid "Help" msgstr "Súgó" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2911,7 +2907,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2951,7 +2947,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -2960,11 +2956,11 @@ msgid "Hotkey Configuration" msgstr "Gyorsbillentyű beállítások" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Gyorsbill." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Magyar" @@ -2972,31 +2968,31 @@ msgstr "Magyar" msgid "Hybrid Wiimote" msgstr "Hibrid Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Adatok kinyerése megkísérelve egy ismeretlen jegyből: " "%08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - rossz cél" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL beállítások" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3008,15 +3004,15 @@ msgstr "IR mutató" msgid "IR Sensitivity:" msgstr "IR érzékenysége:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO részletek" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "ISO könyvtárak" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "OLASZORSZÁG" @@ -3024,7 +3020,7 @@ msgstr "OLASZORSZÁG" msgid "Icon" msgstr "Ikon" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3097,7 +3093,7 @@ msgstr "" "Az importált fájl sav kiterjesztésű\n" "de nem rendelkezik megfelelő fejléccel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Elindul" @@ -3106,7 +3102,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Infó" @@ -3126,7 +3122,7 @@ msgstr "Insert" msgid "Insert Encrypted or Decrypted code here..." msgstr "Lekódolt vagy kódolatlan kód beszúrása ide..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "SD kártya behelyezése" @@ -3138,34 +3134,34 @@ msgstr "Írj be ide nevet..." msgid "Install WAD" msgstr "WAD telepítése" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Telepítés a Wii menübe" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler előidézve, de ez a platform még nem támogatja azt." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "WAD telepítése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Integritás ellenőrzési hiba" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Integritás ellenőrzés befejeződött" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Integritás ellenőrzés befejeződött. Nem találhatóak hibák." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3174,11 +3170,11 @@ msgstr "" "%d partíció integritás ellenőrzése sikertelen. A mentés valószínűleg sérült " "vagy helytelen hibajavítás történt rajta." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Felhasználói felület" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Felület beállítások" @@ -3207,7 +3203,7 @@ msgstr "Belső felbontás:" msgid "Interpreter (VERY slow)" msgstr "Interpreter (NAGYON lassú)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intró" @@ -3216,7 +3212,7 @@ msgstr "Intró" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Érvénytelen méret(%x) vagy mágikus szó (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Érvénytelen érték!" @@ -3224,16 +3220,16 @@ msgstr "Érvénytelen érték!" msgid "Invalid bat.map or dir entry" msgstr "Érvénytelen bat.map vagy könyvtár bejegyzés" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Érvénytelen esemény fajta %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Érvénytelen fájl" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3263,34 +3259,36 @@ msgstr "" "Érvénytelen keresési karakterlánc (még csak a karakterlánc hosszúsága " "támogatott)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Nem megfelelő mentés" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Olasz" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPÁN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT Recompiler (ajánlott)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL kísérleti recompiler" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japán" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3312,8 +3310,9 @@ msgstr "Ablak legfelül tartása" msgid "Key" msgstr "Bill." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Koreai" @@ -3331,7 +3330,7 @@ msgstr "L gomb" msgid "L-Analog" msgstr "Bal analóg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Nyelv:" @@ -3340,7 +3339,7 @@ msgstr "Nyelv:" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Késleltetés:" @@ -3379,11 +3378,11 @@ msgstr "" "Bal/jobb kattintás további beállításokhoz.\n" "Középső kattintás a törléshez." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Kevesebb mint" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "FPS alapú korlátozás" @@ -3475,11 +3474,11 @@ msgstr "" msgid "Load State..." msgstr "Állás betöltése..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Wii rendszer menü betöltése" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Wii rendszer menü betöltése %d%c" @@ -3531,12 +3530,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Napló kimenetek" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Naplózás" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Kapcsolat elveszett a szerverrel!" @@ -3553,7 +3552,7 @@ msgstr "" "MD5 eltérés\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU sebesség növelő hack" @@ -3567,11 +3566,11 @@ msgstr "MadCatz Gameshark fájlok (*.gcs)" msgid "Main Stick" msgstr "Főkar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "Gyártó azonosító:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Gyártó:" @@ -3608,7 +3607,7 @@ msgid "Memory Byte" msgstr "Memória bájt" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Memóriakártya" @@ -3620,7 +3619,7 @@ msgstr "" "Memóriakártya kezelő FIGYELMEZTETÉS - Készíts biztonsági mentést a " "használata előtt, helyreállítható de a meglévő adatok sérülhetnek!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3637,7 +3636,7 @@ msgstr "" "%s\n" "Át akarod másolni a régi fájlt erre az új helyre?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "A memóriakártya fájlmérete nem egyezik a fejléc méretével" @@ -3645,7 +3644,7 @@ msgstr "A memóriakártya fájlmérete nem egyezik a fejléc méretével" msgid "Menu" msgstr "Menü" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mikrofon" @@ -3658,7 +3657,7 @@ msgstr "Min" msgid "Misc" msgstr "Egyebek" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Egyéb beállítások" @@ -3683,11 +3682,11 @@ msgstr "" msgid "Monospaced font" msgstr "Azonos szélességű betűtípus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3807,15 +3806,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Up" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Cím:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Név:" @@ -3825,7 +3824,7 @@ msgstr "Név:" msgid "Native GCI files(*.gci)" msgstr "Natív GCI fájlok (*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Új keresés" @@ -3834,7 +3833,7 @@ msgstr "Új keresés" msgid "Next Page" msgstr "Következő lap" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Következő keresés" @@ -3842,11 +3841,11 @@ msgstr "Következő keresés" msgid "Nickname :" msgstr "Becenév:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Nincs ország (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Nem találhatók sem ISO sem WAD fájlok" @@ -3885,24 +3884,25 @@ msgstr "Nincs rögzített fájl" msgid "No save folder found for title %s" msgstr "%s játékhoz nem található mentési mappa" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Nincs" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norvég" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Nem egyenlő" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Nincs beállítva" @@ -3911,11 +3911,11 @@ msgstr "Nincs beállítva" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Nincs csatlakoztatva" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Megjegyzés" @@ -3936,7 +3936,7 @@ msgstr "Megjegyzés" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Kódok száma:" @@ -3957,7 +3957,7 @@ msgstr "Elem" msgid "Object Range" msgstr "Elem hatótáv" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Ki" @@ -3965,7 +3965,7 @@ msgstr "Ki" msgid "Offset:" msgstr "Eltolás:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Képernyőn megjelenő üzenetek" @@ -3983,11 +3983,11 @@ msgstr "Csak %d blokk szabad" msgid "Open" msgstr "Megnyitás" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "A játékot &tartalmazó mappa megnyitása" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Wii &mentések mappa megnyitása" @@ -4017,17 +4017,13 @@ msgstr "OpenCL textúra dekódoló" msgid "OpenMP Texture Decoder" msgstr "OpenMP textúra dekódoló" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Lehetőségek" @@ -4048,7 +4044,7 @@ msgstr "" msgid "Other" msgstr "Egyéb" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4064,11 +4060,11 @@ msgstr "Kimenet" msgid "P&lay Recording..." msgstr "F&elvétel visszajátszása..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Irányító" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Irányító" @@ -4092,26 +4088,26 @@ msgstr "Paragraph" msgid "Parameters" msgstr "Paraméterek" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "%i partíció" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Javítások" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Mappák" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Szünet" @@ -4124,7 +4120,7 @@ msgstr "Szünet a videó végén" msgid "Per-Pixel Lighting" msgstr "Képpont alapú fényhatások" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Tökéletes" @@ -4135,8 +4131,8 @@ msgstr "%d perspektíva" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Indítás" @@ -4148,7 +4144,7 @@ msgstr "Felvétel visszajátszása" msgid "Play/Pause" msgstr "Indítás/Szünet" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Játszható" @@ -4156,11 +4152,11 @@ msgstr "Játszható" msgid "Playback Options" msgstr "Visszajátszási lehetőségek" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Játékosok" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Változtatás jóváhagyása..." @@ -4172,36 +4168,36 @@ msgstr "Hozz először létre egy perspektívát mielőtt mentenél" msgid "Plus-Minus" msgstr "Plusz - minusz" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Lengyel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "1. port" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "2. port" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "3. port" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "4. port" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugál" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugál (brazil)" @@ -4214,7 +4210,7 @@ msgstr "Utófeldolgozási effektus:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Túl korai PlayController videó befejezés. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Túl korai PlayWiimote videó befejezés. %u + %d > %u" @@ -4236,7 +4232,7 @@ msgstr "Előző lap" msgid "Previous Page" msgstr "Előző lap" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Előző érték" @@ -4260,8 +4256,8 @@ msgstr "Gyorsítótár ürítése" msgid "Question" msgstr "Kérdés" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Kilépés" @@ -4283,7 +4279,7 @@ msgstr "Jobb analóg" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "OROSZORSZÁG" @@ -4322,7 +4318,7 @@ msgstr "Valódi Wiimote-ok" msgid "Record" msgstr "Rögzítés" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4374,10 +4370,10 @@ msgstr "A lista frissítése" msgid "Refresh game list" msgstr "Játéklista frissítése" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Törlés" @@ -4400,7 +4396,7 @@ msgstr "Megjelenítés a főablakban" msgid "Reset" msgstr "Alapra állítás" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Eredmények" @@ -4408,7 +4404,7 @@ msgstr "Eredmények" msgid "Return" msgstr "Return" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4421,17 +4417,17 @@ msgstr "Jobbra" msgid "Right Stick" msgstr "Jobb kar" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Rumble funkció" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Orosz" @@ -4505,12 +4501,12 @@ msgstr "" msgid "Save State..." msgstr "Állás mentése..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Mentés másként..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Tömörített GCM/ISO mentése" @@ -4518,7 +4514,7 @@ msgstr "Tömörített GCM/ISO mentése" msgid "Save current perspective" msgstr "Jelenlegi perspektíva mentése" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Kitömörített GCM/ISO mentése" @@ -4531,16 +4527,16 @@ msgstr "%s állásmentés videója sérült, videó rögzítése leáll..." msgid "Scaled EFB Copy" msgstr "Méretezett EFB másolat" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Keresés %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "ISO fájlok keresése" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Keresés..." @@ -4556,11 +4552,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Keresés" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Keresési szűrő" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Keresés az almappákban" @@ -4583,12 +4579,12 @@ msgstr "%s rész nem található a SYSCONF fájlban" msgid "Select" msgstr "Választás" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Válassz rögzítendő fájlt" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Válassz telepítendő Wii WAD fájlt" @@ -4610,19 +4606,19 @@ msgstr "Válassz importálandó mentési fájlt" msgid "Select floating windows" msgstr "Válassz lebegő ablakokat" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Betöltendő fájl kiválasztása" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Válassz mentési fájlt" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Válassz betöltendő állásmentést" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Válassz mentendő állást" @@ -4644,7 +4640,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, válaszd ezt: Automatikus." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "A megadott irányító profil nem létezik" @@ -4668,39 +4664,28 @@ msgstr "" "Ha bizonytalan vagy, használd az asztali felbontást.\n" "Ha továbbra is bizonytalan vagy, használd a legmagasabb működő felbontást." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"A belsőleg használni kívánt grafikai API kiválasztása.\n" -"Direct3D 9 többnyire a leggyorsabb. OpenGL viszont pontosabb. Direct3D 11 " -"valahol a kettő közt van.\n" -"Érdemes tudni, hogy a Direct3D leképzők csak Windows rendszereken működnek.\n" -"\n" -"Ha bizonytalan vagy, legyen a Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"A belsőleg használni kívánt grafikai API kiválasztása.\n" -"Direct3D 9 többnyire a leggyorsabb. OpenGL viszont pontosabb. Direct3D 11 " -"valahol a kettő közt van.\n" -"Érdemes tudni, hogy a Direct3D leképzők csak Windows rendszereken működnek.\n" -"\n" -"Ha bizonytalan vagy, legyen az OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Küldés" @@ -4712,17 +4697,17 @@ msgstr "Érzékelő helyzete:" msgid "Separator" msgstr "Elválasztó" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Szerb" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "1. soros port - Ezt a portot használják azok az eszközök, mint a net adapter" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Beállítás &alapértelmezett ISO fájlként" @@ -4731,13 +4716,13 @@ msgstr "Beállítás &alapértelmezett ISO fájlként" msgid "Set as default Memcard %c" msgstr "Beállítás alapértelmezett %c. memóriakártyaként" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: A jelzőszám nagyobb mint az ar kód lista mérete %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4745,19 +4730,19 @@ msgstr "" "Késleltetés beállítása (ms). Magasabb értékek csökkenthetik a hang " "recsegést. Csak OpenAL feldolgozó estén." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Beállítások..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Rázás" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Rövid cím:" @@ -4781,7 +4766,7 @@ msgstr "Állapotsor &mutatása" msgid "Show &Toolbar" msgstr "Eszközsor &mutatása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4821,7 +4806,7 @@ msgstr "JAP mutatása" msgid "Show Korea" msgstr "Korea mutatása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "A játék nyelve:" @@ -4861,11 +4846,11 @@ msgstr "Wad mutatása" msgid "Show Wii" msgstr "Wii mutatása" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "A játék leállítása előtt megjelenik egy megerősítő ablak." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4883,7 +4868,7 @@ msgstr "Az első blokk megjelenítése" msgid "Show lag counter" msgstr "Késési idő számláló megjelenítése" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4935,23 +4920,24 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Oldalt tartott Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Egyszerűsített kínai" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Méret" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "BIOS kihagyása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "DCBZ törlés kihagyása" @@ -4981,11 +4967,11 @@ msgstr "" msgid "Slot %i" msgstr "%i hely" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "A hely" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "B hely" @@ -4993,7 +4979,7 @@ msgstr "B hely" msgid "Snapshot" msgstr "Pillanatkép" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Szoftveres képalkotó" @@ -5010,27 +4996,27 @@ msgstr "" "Biztosan be kívánod kapcsolni a szoftveres képalkotót? Ha bizonytalan vagy, " "válaszd ezt: 'Nem'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Hang beállítások" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Érvénytelen %s hang feldolgozó." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Hang puffer létrehozása sikertelen: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Szóköz" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spanyol" @@ -5058,7 +5044,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, válaszd ezt: 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "A lemez adatátviteli arány gyorsítása" @@ -5066,13 +5052,13 @@ msgstr "A lemez adatátviteli arány gyorsítása" msgid "Square Stick" msgstr "Négyzetes kar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Normál irányító" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Indítás" @@ -5088,7 +5074,7 @@ msgstr "Felvétel in&dítása" msgid "Start Recording" msgstr "Felvétel indítása" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Állap." @@ -5096,7 +5082,7 @@ msgstr "Állap." msgid "State Saves" msgstr "Állás mentések" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Kormánykerék" @@ -5146,19 +5132,19 @@ msgstr "Fájl sikeresen exportálva a(z) %s helyre" msgid "Successfully imported save files" msgstr "Mentés fájlok sikeresen importálva" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Lengetés" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "VGA szál szinkronizálása" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5167,12 +5153,13 @@ msgstr "" "véletlenszerű kifagyásokat kétmagos mód esetén. (BE = Kompatibilis, KI = " "Gyors)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Rendszer nyelv:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAJVAN" @@ -5203,7 +5190,7 @@ msgstr "Tábla jobbra" msgid "Take Screenshot" msgstr "Pillanatkép készítése" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5223,11 +5210,11 @@ msgstr "Textúra gyorsítótár" msgid "Texture Format Overlay" msgstr "Textúra formátum átfedés" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "A WAD sikeresen telepítve" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "A cím érvénytelen" @@ -5235,13 +5222,13 @@ msgstr "A cím érvénytelen" msgid "The checksum was successfully fixed" msgstr "Az ellenőrző összeg sikeresen javítva" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "A választott könyvtár már szerepel a listán" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5264,7 +5251,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "%s fáj már meg van nyitva, a fájl fejléce nem írható." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Az általad megadott (%s) fájl nem létezik" @@ -5297,7 +5284,7 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "A másolni kívánt mentés érvénytelen méretű" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5305,19 +5292,19 @@ msgstr "" "A választott nyelvet nem támogatja az oprációs rendszer. Visszaállás a " "rendszer alapértelmezettre." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "A szerver és kliens NetPlay verziói nem kompatibilisek!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "A szerver megtelt!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "A szerver válasza: a játék már fut!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "A szerver ismeretlen hibaüzenetet küldött!" @@ -5326,15 +5313,15 @@ msgstr "A szerver ismeretlen hibaüzenetet küldött!" msgid "The specified file \"%s\" does not exist" msgstr "A megadott \"%s\" fájl nem létezik" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Az érték érvénytelen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Kinézet:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5342,7 +5329,7 @@ msgstr "" "Kell lennie egy jegynek itt: 00000001/00000002. A NAND mentésed valószínűleg " "befejezetlen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5350,7 +5337,7 @@ msgstr "" "Ezek a beállítások felülírják a Dolphin mag beállításait.\n" "A módosítatlan opcióknál a játék a Dolphin beállításait használja." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5358,7 +5345,7 @@ msgstr "" "Az action replay szimulátor nem támogat olyan kódokat, amelyek módosítját " "magát az Action Replay-t." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Ez lassulást okozhat a Wii menüben és néhány játékban." @@ -5383,7 +5370,7 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5391,7 +5378,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5403,7 +5390,7 @@ msgstr "" "Számottevő sebességnövekedés érhető el egynél több magos számítógépeken, " "ugyanakkor véletlenszerű fagyásokat/hibákat is okozhat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Ez által kézileg szerkesztheted az INI konfigurációs fájlt" @@ -5412,12 +5399,12 @@ msgstr "Ez által kézileg szerkesztheted az INI konfigurációs fájlt" msgid "Threshold" msgstr "Küszöbérték" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Billentés" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Cím" @@ -5452,15 +5439,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Fent" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Hagyományos kínai" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Próbálkozás egy ismeretlen fájltípus betöltésével. " @@ -5480,7 +5468,7 @@ msgstr "" "Olvasási próbálkozás az érvénytelen SYSCONF fájlból\n" "Nem találhatóak Wiimote bt azonosítók " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Török" @@ -5496,12 +5484,12 @@ msgstr "Típus" msgid "UDP Port:" msgstr "UDP port:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "ISMERETLEN" @@ -5510,7 +5498,7 @@ msgstr "ISMERETLEN" msgid "UNKNOWN_%02X" msgstr "ISMERETLEN_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5523,9 +5511,9 @@ msgstr "" "Bejegyzés módosítás nem történt." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5550,11 +5538,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "Váratlan 0x80 hivás? Megszakítás..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Ismeretlen" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Ismeretlen DVD parancs: %08x - végzetes hiba" @@ -5569,12 +5557,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Ismeretlen bejegyzés típus %i a SYSCONF fájlban (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Ismeretlen üzenet érkezett ezzel az azonosítóval : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5586,16 +5574,16 @@ msgstr "" msgid "Up" msgstr "Fel" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Frissítés" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Előre tartott Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "EuRGB60 mód (PAL60) használata" @@ -5603,11 +5591,11 @@ msgstr "EuRGB60 mód (PAL60) használata" msgid "Use Fullscreen" msgstr "Teljes nézet használata" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Hexa használat" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Hibakezelők használata" @@ -5664,11 +5652,11 @@ msgstr "Kellékek" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Érték" @@ -5676,7 +5664,7 @@ msgstr "Érték" msgid "Value:" msgstr "Érték:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Érték:" @@ -5688,7 +5676,7 @@ msgstr "Verbosity" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Kép" @@ -5696,7 +5684,7 @@ msgstr "Kép" msgid "Virtual" msgstr "Virtuális" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Hangerő" @@ -5728,15 +5716,15 @@ msgstr "" msgid "Warning" msgstr "Figyelem" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Figyelem - DOL indítása nem megfelelő konzol módban!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Figyelem - ELF indítása nem megfelelő konzol módban!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Figyelem - ISO indítása nem megfelelő konzol módban!" @@ -5839,19 +5827,19 @@ msgstr "Szélesvásznú hack" msgid "Width" msgstr "Szélesség" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii konzol" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND gyökér könyvtár:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii mentés fájlok (*.bin)|*.bin" @@ -5864,12 +5852,18 @@ msgstr "WiiWAD: Fájlból olvasás nem sikerült" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote csatlakoztatva" @@ -5901,14 +5895,14 @@ msgstr "Jobb Windows" msgid "Word Wrap" msgstr "Word Wrap" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Folyamatban..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5928,21 +5922,36 @@ msgstr "Írás fájlba" msgid "Write to Window" msgstr "Írás az ablakba" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice hiba: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 iniciálási hiba: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 fő hang létrehozási hiba: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice hiba: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 iniciálási hiba: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 fő hang létrehozási hiba: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -5975,15 +5984,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Nem zárhatod be a lapokat tartalmazó táblákat." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Választanod kell egy játékot!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Meg kell adnod egy nevet!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "" "Be kell írnod egy érvényes decimális, hexadecimális vagy oktális értéket." @@ -5992,7 +6001,7 @@ msgstr "" msgid "You must enter a valid profile name." msgstr "Meg kell adnod egy érvényes profil nevet." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "" "Újra kell indítanod a Dolphin emulátort a változtatások érvényesítéséhez." @@ -6007,7 +6016,7 @@ msgstr "" "Le kívánod állítani a probléma javítást most?\n" "Ha a választásod \"Nem\", akkor a hang torz lehet." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6026,15 +6035,15 @@ msgstr "" "0x%04x méretűnek kellene lennie (azonban 0x%04llx méretű)\n" "Akarsz újat létrehozni?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3 kód nem támogatott" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero ismeretlen az emulátor számára: %08x" @@ -6093,29 +6102,24 @@ msgstr "" "\n" "Ha bizonytalan vagy, hagyd kijelöletlenül." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "betöltő program (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Opcode olvasása innen %x. Kérlek jelentsd." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute visszatért -1 alkalmazás fut!" @@ -6130,3 +6134,44 @@ msgstr "zNear javítás: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| VAGY" + +#~ msgid "Could not create %s" +#~ msgstr "%s nem hozható létre" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "A belsőleg használni kívánt grafikai API kiválasztása.\n" +#~ "Direct3D 9 többnyire a leggyorsabb. OpenGL viszont pontosabb. Direct3D 11 " +#~ "valahol a kettő közt van.\n" +#~ "Érdemes tudni, hogy a Direct3D leképzők csak Windows rendszereken " +#~ "működnek.\n" +#~ "\n" +#~ "Ha bizonytalan vagy, legyen a Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "A belsőleg használni kívánt grafikai API kiválasztása.\n" +#~ "Direct3D 9 többnyire a leggyorsabb. OpenGL viszont pontosabb. Direct3D 11 " +#~ "valahol a kettő közt van.\n" +#~ "Érdemes tudni, hogy a Direct3D leképzők csak Windows rendszereken " +#~ "működnek.\n" +#~ "\n" +#~ "Ha bizonytalan vagy, legyen az OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Opcode olvasása innen %x. Kérlek jelentsd." diff --git a/Languages/po/it.po b/Languages/po/it.po index e3239a16d8..3a4626ae92 100644 --- a/Languages/po/it.po +++ b/Languages/po/it.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 17:08+0000\n" "Last-Translator: Mewster \n" "Language-Team: Italian (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr " (troppi per la visualizzazione)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " Gioco : " @@ -34,7 +34,7 @@ msgstr " Gioco : " msgid "! NOT" msgstr "! NOT" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sCopia%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d stadi" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d stadi (livello di qualità %d)" @@ -74,13 +74,13 @@ msgstr "%d stadi (livello di qualità %d)" msgid "%s already exists, overwrite?" msgstr "%s esiste già, vuoi sovrascrivere?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" "Fallito il tentativo di ripulire %s. È possibile che l'immagine sia corrotta." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -89,7 +89,7 @@ msgstr "" "Fallito il tentativo di caricare %s come memory card\n" "La dimensione del file non è valida (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -98,7 +98,7 @@ msgstr "" "Fallito il tentativo di caricare %s come memory card\n" "La dimensione della card non è valida (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -113,7 +113,7 @@ msgstr "" msgid "%s failed to open" msgstr "Fallito il tentativo di aprire %s" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s fallito: kr=%x" @@ -123,7 +123,7 @@ msgstr "%s fallito: kr=%x" msgid "%s is a 0 byte file" msgstr "Il file %s possiede una dimensione di 0 bytes" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s è già compresso! Impossibile comprimere ulteriormente." @@ -181,11 +181,11 @@ msgstr "Gestore &Trucchi" msgid "&DSP Settings" msgstr "Impostazioni &DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Elimina ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Elimina ISO selezionate..." @@ -249,7 +249,7 @@ msgstr "&Pausa" msgid "&Play" msgstr "&Gioca" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Proprietà" @@ -293,7 +293,7 @@ msgstr "&Visualizza" msgid "&Wiimote Settings" msgstr "Impostazioni &Wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -329,7 +329,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Nativo (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -345,7 +345,7 @@ msgstr "2.5x Nativo (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Nativo (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -361,7 +361,7 @@ msgstr "3x Nativo (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Nativo (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -373,7 +373,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -381,7 +381,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -389,13 +389,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Una finestra di NetPlay risulta già aperta!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Al momento non c'è alcun gioco in esecuzione." @@ -408,6 +408,7 @@ msgstr "" "Devi connettere manualmente i tuoi wiimote." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -416,10 +417,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -439,13 +441,13 @@ msgstr "" "\n" "L'host deve inoltre avere aperto/inoltrato le porte TCP scelte!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "Baseboard AM" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Codici AR" @@ -494,7 +496,7 @@ msgstr "" "Codice Incriminato:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -502,7 +504,7 @@ msgstr "" "Errore Action Replay: Dimensioni non valide (%08x : indirizzo = %08x) in " "Aggiungi Codice (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -511,7 +513,7 @@ msgstr "" "Errore Action Replay: Dimensioni non valide (%08x : indirizzo = %08x) nelle " "istruzioni Fill e Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -520,7 +522,7 @@ msgstr "" "Errore Action Replay: Dimensioni non valide (%08x : indirizzo = %08x) nelle " "istruzioni Ram Write e Fill (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -529,14 +531,14 @@ msgstr "" "Errore Action Replay: Dimensioni non valide (%08x : indirizzo = %08x) " "nell'istruzione Write To Pointer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" "Errore Action Replay: Valore non valido (%08x) nell'istruzione Memory Copy " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -545,27 +547,27 @@ msgstr "" "Errore Action Replay: Master Code e Write To CCXXXXXX non implementati (%s)\n" "I Master Code non sono necessari. Non usarli." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Errore Action Replay: codice AR non valido in riga: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Conditional Code: Dimensioni non valide %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Normal Code Type %08x (%s) non valido" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normal Code %i: Sottotipo %08x (%s) non valido" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Code 0: Sottotipo %08x (%s) non valido" @@ -579,11 +581,11 @@ msgstr "Adattatore:" msgid "Add" msgstr "Aggiungi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Aggiungi Codice ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Aggiungi Patch" @@ -591,9 +593,9 @@ msgstr "Aggiungi Patch" msgid "Add new pane" msgstr "Aggiungi nuovo riquadro" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Aggiungi..." @@ -649,36 +651,36 @@ msgstr "" msgid "Advanced" msgstr "Avanzate" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Impostazioni Avanzate" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Tutti i file GC/Wii (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Tutti i file immagine GC/Wii (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Tutti i file Gamecube GCM (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Tutti i Salvataggi di Stati di Gioco (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Tutti i file ISO Wii (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Tutti i file GC/Wii ISO compressi (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Tutti i file (*.*)|*.*" @@ -698,19 +700,19 @@ msgstr "Filtraggio Anisotropico:" msgid "Anti-Aliasing:" msgstr "Anti-Aliasing:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "L'apploader possiede dimensioni errate... è davvero un apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "L'Apploader non riesce a caricare dal file" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Applica" @@ -724,7 +726,7 @@ msgstr "" "\n" "Nel dubbio, seleziona (nessuno)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabo" @@ -733,7 +735,7 @@ msgstr "Arabo" msgid "Are you sure you want to delete \"%s\"?" msgstr "Sei sicuro di voler eliminare \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -741,7 +743,7 @@ msgstr "" "Sei sicuro di voler eliminare questi file?\n" "Andranno persi definitivamente!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Sei sicuro di voler eliminare questo file? Sarà cancellato definitivamente!" @@ -750,7 +752,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "Arm JIT (sperimentale)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (sperimentale)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Rapporto d'Aspetto:" @@ -759,12 +766,12 @@ msgstr "Rapporto d'Aspetto:" msgid "At least one pane must remain open." msgstr "Almeno un riquadro deve rimanere aperto." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Audio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Motore Audio:" @@ -772,7 +779,7 @@ msgstr "Motore Audio:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Errore nell'apertura della periferica AO.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -812,16 +819,16 @@ msgstr "Registro BP" msgid "Back" msgstr "Indietro" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Impostazioni Motore" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Motore:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Input in Background" @@ -839,15 +846,15 @@ msgid "Balance Board" msgstr "Balance Board" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Dettagli Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Banner:" @@ -859,7 +866,7 @@ msgstr "Leva" msgid "Basic" msgstr "Impostazioni di Base" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Impostazioni di Base" @@ -867,7 +874,7 @@ msgstr "Impostazioni di Base" msgid "Bass" msgstr "Basso" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Fallita verifica checksum della Tabella di Allocazione Blocchi" @@ -888,7 +895,7 @@ msgid "Blue Right" msgstr "Blu Destro" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Sotto" @@ -897,7 +904,7 @@ msgstr "Sotto" msgid "Bound Controls: %lu" msgstr "Controlli Associati: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Corrotto" @@ -905,7 +912,7 @@ msgstr "Corrotto" msgid "Browse" msgstr "Sfoglia" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Cerca una directory da aggiungere" @@ -913,11 +920,11 @@ msgstr "Cerca una directory da aggiungere" msgid "Browse for an ISO directory..." msgstr "Seleziona una directory per le ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Seleziona la directory di destinazione" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -927,7 +934,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Pulsanti" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -951,7 +958,7 @@ msgstr "C-Stick" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU Emulator Engine" @@ -975,17 +982,17 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Impossibile trovare il WiiMote sull'handler di connessione %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Impossibile leggere da DVD_Plugin - DVD-Interface: Errore Fatale" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Annulla" @@ -997,11 +1004,11 @@ msgstr "Annulla" msgid "Cannot open %s" msgstr "Impossibile aprire %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Impossibile annullare con eventi in sospeso" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1012,7 +1019,7 @@ msgstr "" "%s\n" "non è un file memory card per gamecube valido" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1024,7 +1031,7 @@ msgstr "" msgid "Caps Lock" msgstr "Bloc Maiusc" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Catalano" @@ -1032,7 +1039,7 @@ msgstr "Catalano" msgid "Center" msgstr "Area Centrale" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Cambia" @@ -1044,11 +1051,11 @@ msgstr "Cambia &Disco..." msgid "Change Disc" msgstr "Cambia Disco" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Cambia Gioco" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1064,13 +1071,13 @@ msgstr "Cambia segno al Parametro zFar (dopo la correzione)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Cambia segno al Parametro zNear (dopo la correzione)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "La modifica di quest'opzione non avrà alcun effetto finché l'emulatore è in " "esecuzione!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1078,47 +1085,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Codice Trucco" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Cerca Trucco" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Gestore Trucchi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Verifica l'Integrità della Partizione" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Sto verificando l'integrità..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Cinese (Semplificato)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Imposta la directory principale per i DVD:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Imposta la directory principale della NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Scegli una ISO predefinita:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Scegli una directory da aggiungere" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Scegli un file da aprire" @@ -1126,7 +1133,7 @@ msgstr "Scegli un file da aprire" msgid "Choose a memory card:" msgstr "Scegli una memory card:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1134,8 +1141,8 @@ msgstr "" "Scegli il file da utilizzare come apploader: (vale solo per i dischi " "costituiti da directory)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Scegli la cartella in cui estrarre" @@ -1154,7 +1161,7 @@ msgstr "Classic Controller" msgid "Clear" msgstr "Pulisci" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1164,7 +1171,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Chiudi" @@ -1173,11 +1180,11 @@ msgstr "Chiudi" msgid "Co&nfigure..." msgstr "Co&nfigura..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Codice Info" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Codice: " @@ -1189,20 +1196,20 @@ msgstr "Comando" msgid "Comment" msgstr "Note" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Note:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Comprimi ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Comprimi le ISO selezionate..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Compressione ISO" @@ -1220,8 +1227,8 @@ msgstr "Configura" msgid "Configure Control" msgstr "Configura Vibrazione" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Configura i Pad" @@ -1229,13 +1236,13 @@ msgstr "Configura i Pad" msgid "Configure..." msgstr "Configura..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Conferma la Sovrascrittura del File" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Arresto su Conferma" @@ -1249,7 +1256,7 @@ msgstr "Collega" msgid "Connect Balance Board" msgstr "Collega Balance Board" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Collega Tastiera USB" @@ -1274,7 +1281,7 @@ msgstr "Collega Wiimote 3" msgid "Connect Wiimote 4" msgstr "Collega Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Connessione in corso..." @@ -1294,7 +1301,7 @@ msgstr "Control" msgid "Convert to GCI" msgstr "Converti in GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Copia non riuscita" @@ -1303,16 +1310,11 @@ msgstr "Copia non riuscita" msgid "Copy to Memcard %c" msgstr "Copia nella Memory Card %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Core" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Impossibile creare %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Impossibile inizializzare il motore %s." @@ -1328,12 +1330,12 @@ msgstr "" "backup GC/Wii. Tieni presente che la maggior parte delle unità DVD nei PC " "non riesce a leggere i dischi originali GameCube/Wii." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Impossibile riconoscere il file ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Impossibile salvare %s" @@ -1359,11 +1361,11 @@ msgstr "" "Se è così, allora potresti dover reimpostare la posizione della memory card " "nelle opzioni." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Impossibile trovare il comando di apertura per l'estensione 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1371,17 +1373,17 @@ msgstr "" "Impossibile inizializzare i componenti di base.\n" "Verifica la tua configurazione." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Conteggio:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Paese:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Crea Codice AR" @@ -1416,12 +1418,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Directory attuale cambiata da %s a %s dopo wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Projection Hack Personalizzato" @@ -1429,11 +1431,11 @@ msgstr "Projection Hack Personalizzato" msgid "Custom Projection Hack Settings" msgstr "Impostazioni Personalizzate Projection Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Personalizza alcuni parametri di Orthographic Projection" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Ceco" @@ -1449,20 +1451,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP Emulator Engine" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "Emulazione DSP HLE (veloce)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "Interprete DSP LLE (lento)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "Ricompilatore DSP LLE" @@ -1470,11 +1472,11 @@ msgstr "Ricompilatore DSP LLE" msgid "DSP settings" msgstr "Impostazioni DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE su Thread Separato" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD Root:" @@ -1486,15 +1488,15 @@ msgstr "DVDLowRead - Errore Fatale: fallita lettura dal volume" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Errore Fatale: fallita lettura dal volume" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Dance Mat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Dimensione Dati" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Data:" @@ -1523,16 +1525,16 @@ msgstr "Debugging" msgid "Decimal" msgstr "." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Decomprimi ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Decomprimi ISO selezionate..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Decompressione ISO" @@ -1544,7 +1546,7 @@ msgstr "Diminuisci limite Frame" msgid "Default" msgstr "Default" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "ISO Predefinita:" @@ -1588,8 +1590,8 @@ msgstr "" msgid "Device" msgstr "Periferica" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Impostazioni Periferica" @@ -1597,15 +1599,12 @@ msgstr "Impostazioni Periferica" msgid "Dial" msgstr "Manopola" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1668,7 +1667,7 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disco" @@ -1695,20 +1694,20 @@ msgstr "" msgid "Divide" msgstr "/" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Vuoi interrompere l'emulazione in corso?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Decoder Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1738,9 +1737,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1796,12 +1794,12 @@ msgstr "Dolphin - Configurazione Wiimote Emulato" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin - Configurazione Controller GC" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Filmati TAS Dolphin (*.dtm)" @@ -1813,14 +1811,14 @@ msgstr "Dolphin - Configurazione Wiimote" msgid "Dolphin at &Google Code" msgstr "Dolphin in &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "" "Dolphin non trova nessuna ISO GC/Wii. Doppioclicca qui per cercare i file..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1828,12 +1826,12 @@ msgstr "" "Dolphin è attualmente impostato per nascondere tutti i giochi. Doppioclicca " "qui per mostrare tutti i giochi..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin è impossibilitato a completare l'azione richiesta." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1859,11 +1857,11 @@ msgstr "Scaricati codici %lu. (%lu aggiunti)" msgid "Drums" msgstr "Percussioni/Batteria" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Fittizio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Salva l'Audio" @@ -1909,9 +1907,9 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Olandese" @@ -1936,7 +1934,7 @@ msgstr "" "potrebbe essere necessario un riavvio per permettere a Windows di " "riconoscere il nuovo driver." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1952,14 +1950,10 @@ msgstr "Modifica" msgid "Edit ActionReplay Code" msgstr "Modifica Codice ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Modifica Configurazione" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Modifica Sovrascritture Locali" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Modifica Patch" @@ -1968,8 +1962,8 @@ msgstr "Modifica Patch" msgid "Edit current perspective" msgstr "Modifica prospettiva corrente" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Modifica..." @@ -1981,7 +1975,7 @@ msgstr "Effetto" msgid "Embedded Frame Buffer" msgstr "Embedded Frame Buffer" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Thread dell'Emulatore già in esecuzione" @@ -2020,7 +2014,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Wiimote Emulato" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Stato d'Emulazione: " @@ -2044,15 +2038,15 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Abilita Logging AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Attiva Unione Blocchi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Abilita Calcolo delle Bounding Box" @@ -2060,27 +2054,27 @@ msgstr "Abilita Calcolo delle Bounding Box" msgid "Enable Cache" msgstr "Abilita Cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Abilita Trucchi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Abilita Dual Core" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Abilita Dual Core (aumenta la velocità)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Abilita Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Abilita Idle Skipping (aumenta la velocità)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Abilita MMU" @@ -2088,7 +2082,7 @@ msgstr "Abilita MMU" msgid "Enable Progressive Scan" msgstr "Abilita Scansione Progressiva" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Abilita Screen Saver" @@ -2096,7 +2090,7 @@ msgstr "Abilita Screen Saver" msgid "Enable Speaker Data" msgstr "Abilita Dati Altoparlante" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Abilita WideScreen" @@ -2119,7 +2113,7 @@ msgstr "" "\n" "Nel dubbio, seleziona 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2156,7 +2150,7 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2164,11 +2158,11 @@ msgstr "" "Se attivato, velocizza The Legend of Zelda: Twilight Princess. Da " "disattivare per qualsiasi altro gioco." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Abilita Projection Hack Personalizzato" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2176,7 +2170,7 @@ msgstr "" "Abilita l'emulazione Dolby Pro Logic II utilizzando il surround 5.1. Non " "disponibile su OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2195,7 +2189,7 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2217,9 +2211,9 @@ msgstr "" msgid "End" msgstr "Fine" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Inglese" @@ -2242,23 +2236,22 @@ msgstr "Voce %d/%d" msgid "Entry 1/%d" msgstr "Voce 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Uguale" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Errore" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Errore nel caricamento della lingua selezionata. Ritorno alla lingua di " "sistema." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2308,7 +2301,7 @@ msgstr "Esporta tutti i Salvataggi Wii" msgid "Export Failed" msgstr "Esportazione non Riuscita" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Esporta File" @@ -2324,7 +2317,7 @@ msgstr "Esporta Registrazione..." msgid "Export Save" msgstr "Esporta Salvataggio" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Esporta salvataggio Wii (Sperimentale)" @@ -2340,7 +2333,7 @@ msgstr "Esportazione non riuscita" msgid "Export save as..." msgstr "Esporta salvataggio come..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Estensione" @@ -2356,44 +2349,44 @@ msgstr "Parametro Extra" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Il Parametro Extra è utile solo in ''Metroid: Other M''." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Estrai Tutti i File..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Estrai Apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Estrai DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Estrai Directory..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Estrai File..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Estrai Partizione..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Estrazione %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Estrazione di Tutti i File" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Estrazione Directory" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Estrazione..." @@ -2405,15 +2398,15 @@ msgstr "Byte FIFO" msgid "FIFO Player" msgstr "Lettore FIFO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANCIA" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Dimensione FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Connessione non riuscita!" @@ -2421,11 +2414,15 @@ msgstr "Connessione non riuscita!" msgid "Failed to download codes." msgstr "Download dei codici non riuscito." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Estrazione in %s non riuscita!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2480,7 +2477,7 @@ msgstr "Accesso a banner.bin non riuscito" msgid "Failed to read bk header" msgstr "Fallita lettura dell'header bk" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2491,7 +2488,7 @@ msgstr "" "La Memory Card potrebbe essere incompleta\n" "FilePosition:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2499,7 +2496,7 @@ msgstr "" "Fallita lettura del backup della tabella di allocazione blocchi\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2517,7 +2514,7 @@ msgstr "Fallita la lettura del file %d" msgid "Failed to read data from file: %s" msgstr "Fallita lettura dei dati dal file: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2525,7 +2522,7 @@ msgstr "" "Accesso alla directory di backup non riuscito\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2537,7 +2534,7 @@ msgstr "" msgid "Failed to read header" msgstr "Fallita lettura dell'header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2550,7 +2547,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Fallita lettura dell'header del file %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Lettura dell'ID univoco dall'immagine del disco non riuscita" @@ -2572,7 +2569,7 @@ msgstr "Fallita scrittura di dati sul file: %s" msgid "Failed to write header for %s" msgstr "Fallita la scrittura dell'intestazione di %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Farsi" @@ -2584,7 +2581,7 @@ msgstr "Rapida" msgid "Fast Depth Calculation" msgstr "Calcolo Rapido di Profondità" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Versione velocizzata della MMU. Non funziona per tutti i giochi." @@ -2620,7 +2617,7 @@ msgstr "" "Il file non può essere aperto\n" "o non possiede un'estensione valida" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2633,7 +2630,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Il file non è riconosciuto come una memory card" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "File non compresso" @@ -2642,11 +2639,11 @@ msgstr "File non compresso" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Modalità di apertura sconosciuta : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Filesystem" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Il tipo 'ini' è sconosciuto! Il file non verrà aperto!" @@ -2674,7 +2671,7 @@ msgstr "Forza 16:9" msgid "Force 4:3" msgstr "Forza 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Forza Console a NTSC-J" @@ -2708,7 +2705,7 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2719,7 +2716,7 @@ msgstr "" "abilita automaticamente questa impostazione durante l'utilizzo dei giochi " "giapponesi." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2731,7 +2728,7 @@ msgstr "" msgid "Forward" msgstr "in Avanti" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Forward port (UPnP)" @@ -2774,7 +2771,7 @@ msgstr "Intervallo Fotogramma" msgid "Frame S&kipping" msgstr "Salta &Fotogrammi" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Framelimiter:" @@ -2786,9 +2783,9 @@ msgstr "Fotogrammi da Registrare:" msgid "Free Look" msgstr "Visuale Libera" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francese" @@ -2821,27 +2818,27 @@ msgstr "Pad GC" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID Gioco:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Il Gioco è già in esecuzione!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Il Gioco non è in esecuzione!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Gioco non trovato!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Impostazioni Specifiche del Gioco" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Configurazione di Gioco" @@ -2849,7 +2846,7 @@ msgstr "Configurazione di Gioco" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "File Salvataggio GameCube (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "GameCube" @@ -2858,7 +2855,7 @@ msgid "Gamecube &Pad Settings" msgstr "Impostazioni &Controlli GameCube" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Schede di Memoria GameCube (*.raw,*.gcp)" @@ -2866,12 +2863,12 @@ msgstr "Schede di Memoria GameCube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Impostazioni Controlli GameCube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Codici Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2885,7 +2882,7 @@ msgstr "" "cartella Sys e riavviando Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Generale" @@ -2894,13 +2891,13 @@ msgstr "Generale" msgid "General Settings" msgstr "Impostazioni Generali" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Tedesco" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2915,7 +2912,7 @@ msgstr "Video" msgid "Graphics settings" msgstr "Impostazioni Grafiche" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Maggiore di" @@ -2938,7 +2935,7 @@ msgstr "" "\n" "Nel dubbio, lascia selezionato." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Greco" @@ -2962,11 +2959,11 @@ msgstr "Chitarra" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Somma di controllo dell'intestazione non riuscita" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Ebreaico" @@ -2978,7 +2975,7 @@ msgstr "Altezza" msgid "Help" msgstr "Aiuto" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2999,7 +2996,7 @@ msgstr "" "\n" "Sayonara!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3039,7 +3036,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -3048,11 +3045,11 @@ msgid "Hotkey Configuration" msgstr "Configurazione Tasti di Scelta Rapida" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Tasti di Scelta Rapida" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Ungherese" @@ -3060,18 +3057,18 @@ msgstr "Ungherese" msgid "Hybrid Wiimote" msgstr "Wiimote Ibrido" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Tentativo di ottenere dati da un ticket sconosciuto: %08x/" "%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3080,15 +3077,15 @@ msgstr "" "TitleID %016llx.\n" "Ora Dolphin probabilmente si bloccherà." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - Destinazione invalida" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Impostazioni IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "Puntamento IR" @@ -3100,15 +3097,15 @@ msgstr "Puntatore a infrarossi (IR)" msgid "IR Sensitivity:" msgstr "Sensibilità IR:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Dettagli ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Directory ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITALIA" @@ -3116,7 +3113,7 @@ msgstr "ITALIA" msgid "Icon" msgstr "Icona" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3189,7 +3186,7 @@ msgstr "" "Il file importato ha estensione .sav\n" "ma non ha un'intestazione corretta" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "In Game" @@ -3198,7 +3195,7 @@ msgid "Increase Frame limit" msgstr "Aumenta limite Frame" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3218,7 +3215,7 @@ msgstr "Ins" msgid "Insert Encrypted or Decrypted code here..." msgstr "Inserisci qui il codice Criptato o Decriptato..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Inserisci SD Card" @@ -3230,35 +3227,35 @@ msgstr "Inserire qui il nome..." msgid "Install WAD" msgstr "Installa WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Installa nel Menu Wii" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "Chiamata di InstallExceptionHandler avvenuta, tuttavia questa piattaforma " "non la supporta ancora." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Installazione WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Errore di Controllo d'Integrità" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Controllo d'integrità completato" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Controllo d'integrità completato. Non sono stati trovati errori." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3267,11 +3264,11 @@ msgstr "" "Fallito il controllo d'integrità per la partizione %d. Il tuo dump è " "probabilmente corrotto o è stata applicata scorrettamente una patch." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Interfaccia" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Impostazioni Interfaccia" @@ -3300,7 +3297,7 @@ msgstr "Risoluzione Interna:" msgid "Interpreter (VERY slow)" msgstr "Interprete (MOLTO lento)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3309,7 +3306,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Dimensione (%x) o Magic word (%x) non valida" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Valore non Valido!" @@ -3317,16 +3314,16 @@ msgstr "Valore non Valido!" msgid "Invalid bat.map or dir entry" msgstr "bat.map o voce directory non valide" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Tipo di evento %i non valido" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "File non valido" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3355,34 +3352,36 @@ msgstr "" "Stringa di ricerca non valida (solo stringhe di lunghezza pari sono " "supportate)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Stato non valido" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italiano" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "GIAPPONE" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "Ricompilatore JIT (consigliato)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "Ricompilatore sperimentale JITIL" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Giapponese" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3404,8 +3403,9 @@ msgstr "Finestra sempre in cima" msgid "Key" msgstr "Combinazione Tasti" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Coreano" @@ -3423,7 +3423,7 @@ msgstr "Pulsante L" msgid "L-Analog" msgstr "L-Analogico" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Lingua:" @@ -3432,7 +3432,7 @@ msgstr "Lingua:" msgid "Last %i" msgstr "Salvataggio in %i Posizione" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Latenza:" @@ -3471,11 +3471,11 @@ msgstr "" "Click sinistro/destro per altre opzioni.\n" "Click centrale del mouse per cancellare." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Minore di" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Limita per FPS" @@ -3567,11 +3567,11 @@ msgstr "Carica Stato di Gioco nello Slot 9" msgid "Load State..." msgstr "Carica Stato di Gioco..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Carica Menu di Sistema Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Carica il Menu di Sistema Wii %d%c" @@ -3622,12 +3622,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Destinazione Logger" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Registrazione Eventi" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Persa connessione al server!" @@ -3644,7 +3644,7 @@ msgstr "" "L'MD5 non corrisponde\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Speed Hack MMU" @@ -3658,11 +3658,11 @@ msgstr "File Gameshark MadCatz(*.gcs)" msgid "Main Stick" msgstr "Levetta Principale" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID Produttore:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Produttore:" @@ -3699,7 +3699,7 @@ msgid "Memory Byte" msgstr "Byte" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Scheda di Memoria" @@ -3711,7 +3711,7 @@ msgstr "" "Gestore Schede di Memoria - AVVISO: Eseguire una copia di sicurezza prima " "dell'uso!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3728,7 +3728,7 @@ msgstr "" "%s\n" "Si desidera copiare il precedente file in questa nuova locazione?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" "La dimensione della Memory Card non coincide con la dimensione " @@ -3738,7 +3738,7 @@ msgstr "" msgid "Menu" msgstr "Menu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mic" @@ -3751,7 +3751,7 @@ msgstr "Min" msgid "Misc" msgstr "Varie" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Impostazioni Varie" @@ -3776,11 +3776,11 @@ msgstr "" msgid "Monospaced font" msgstr "Carattere a spaziatura fissa" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motore" @@ -3900,15 +3900,15 @@ msgstr "TN Tab" msgid "NP Up" msgstr "TN Su" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Nome:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Nome: " @@ -3918,7 +3918,7 @@ msgstr "Nome: " msgid "Native GCI files(*.gci)" msgstr "File GCI nativi(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nuova Ricerca" @@ -3927,7 +3927,7 @@ msgstr "Nuova Ricerca" msgid "Next Page" msgstr "Pagina Successiva" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Ricerca Successiva" @@ -3935,11 +3935,11 @@ msgstr "Ricerca Successiva" msgid "Nickname :" msgstr "Nickname:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Nessun Paese (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Nessun ISO o WAD trovati" @@ -3978,24 +3978,25 @@ msgstr "Nessun file registrato" msgid "No save folder found for title %s" msgstr "Nessuna cartella di salvataggio trovata per il titolo %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Nessuno" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norvegese" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Diverso" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Non Impostato" @@ -4006,11 +4007,11 @@ msgstr "" "Non è un file di salvataggio Wii o fallita lettura a causa della dimensione " "%x dell'intestazione del file" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Non collegato" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Note" @@ -4031,7 +4032,7 @@ msgstr "Avviso/i" msgid "Num Lock" msgstr "Bloc Num" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Numero Di Codici:" @@ -4052,7 +4053,7 @@ msgstr "Oggetto" msgid "Object Range" msgstr "Intervallo Oggetto" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Off" @@ -4060,7 +4061,7 @@ msgstr "Off" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Mostra Messaggi su Schermo" @@ -4078,11 +4079,11 @@ msgstr "Solo %d blocchi disponibili" msgid "Open" msgstr "Apri" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Apri &percorso file" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Apri cartella dei &salvataggi" @@ -4112,7 +4113,7 @@ msgstr "Decoder Texture OpenCL" msgid "OpenMP Texture Decoder" msgstr "Decoder Texture OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4120,13 +4121,7 @@ msgstr "" "Apre il file di configurazione (in sola lettura) predefinito per questo " "gioco in un editor di testo separato." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" -"Apre le sovrascritture specificate dall'utente in un editor di testo " -"separato." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opzioni" @@ -4150,7 +4145,7 @@ msgstr "" msgid "Other" msgstr "Altro" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4166,11 +4161,11 @@ msgstr "Output" msgid "P&lay Recording..." msgstr "&Riproduci Registrazione..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Pad" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Pad " @@ -4194,26 +4189,26 @@ msgstr "Paragrafo" msgid "Parameters" msgstr "Parametri" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partizione %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Partizione inesistente: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patch" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Percorsi" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pausa" @@ -4226,7 +4221,7 @@ msgstr "Pausa al termine del filmato" msgid "Per-Pixel Lighting" msgstr "Illuminazione Per-Pixel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfetto" @@ -4237,8 +4232,8 @@ msgstr "Prospettiva %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Gioca" @@ -4250,7 +4245,7 @@ msgstr "Riproduci Registrazione" msgid "Play/Pause" msgstr "Gioca/Pausa" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Giocabile" @@ -4258,11 +4253,11 @@ msgstr "Giocabile" msgid "Playback Options" msgstr "Opzioni di Riproduzione" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Giocatori" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Per favore confermare..." @@ -4274,36 +4269,36 @@ msgstr "Si prega di creare un prospettiva prima di salvare" msgid "Plus-Minus" msgstr "Più-Meno" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polacco" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Porta 1:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Porta 2:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Porta 3:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Porta 4:" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Porta:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portoghese" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portoghese (Brasiliano)" @@ -4316,7 +4311,7 @@ msgstr "Effetto di Post-Processing:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Termine prematuro del filmato in PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Termine prematuro del filmato in PlayWiimote. %u + %d > %u" @@ -4338,7 +4333,7 @@ msgstr "Pag. Precedente" msgid "Previous Page" msgstr "Pagina Precedente" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Valore Precedente" @@ -4362,8 +4357,8 @@ msgstr "Ripulisci Cache" msgid "Question" msgstr "Conferma" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Esci" @@ -4385,7 +4380,7 @@ msgstr "R-Analogico" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSSIA" @@ -4424,7 +4419,7 @@ msgstr "Wiimote Reali" msgid "Record" msgstr "Registra" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Registra input" @@ -4476,10 +4471,10 @@ msgstr "Aggiorna Elenco" msgid "Refresh game list" msgstr "Aggiorna l'elenco dei giochi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Rimuovi" @@ -4502,7 +4497,7 @@ msgstr "Renderizza nella Finestra Principale" msgid "Reset" msgstr "Resetta" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Risultati" @@ -4510,7 +4505,7 @@ msgstr "Risultati" msgid "Return" msgstr "Invio" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revisione:" @@ -4523,18 +4518,18 @@ msgstr "Destra" msgid "Right Stick" msgstr "Levetta Destra" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Vibrazione" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Esegue DSP LLE su un thread dedicato (non consigliato: potrebbe bloccarsi)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russo" @@ -4608,12 +4603,12 @@ msgstr "Salva Stato di Gioco nello Slot 9" msgid "Save State..." msgstr "Salva Stato di Gioco..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Salva come..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Salva GCM/ISO compressa" @@ -4621,7 +4616,7 @@ msgstr "Salva GCM/ISO compressa" msgid "Save current perspective" msgstr "Salva prospettiva corrente" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Salva GCM/ISO decompressa" @@ -4634,16 +4629,16 @@ msgstr "Il salvataggio del filmato %s è corrotto, arresto registrazione..." msgid "Scaled EFB Copy" msgstr "Copia EFB in scala" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Analizzo %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Ricerca ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Ricerca..." @@ -4659,11 +4654,11 @@ msgstr "Bloc Scroll" msgid "Search" msgstr "Cerca" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Filtro di Ricerca" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Cerca nelle Sottocartelle" @@ -4686,12 +4681,12 @@ msgstr "Sezione %s non trovata in SYSCONF" msgid "Select" msgstr "Seleziona" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Seleziona la Registrazione" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Seleziona un file WAD Wii da installare" @@ -4713,19 +4708,19 @@ msgstr "Seleziona un file di salvataggio da importare" msgid "Select floating windows" msgstr "Seleziona finestre libere/mobili" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Seleziona il file da caricare" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Seleziona il file di salvataggio" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Seleziona lo stato di gioco da caricare" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Seleziona lo stato di gioco da salvare" @@ -4748,7 +4743,7 @@ msgstr "" "\n" "Nel dubbio, seleziona Auto." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Il profilo controller selezionato non esiste" @@ -4772,39 +4767,28 @@ msgstr "" "Nel dubbio, usa la stessa risoluzione del desktop.\n" "Se sei ancora incerto, usa la più alta risoluzione funzionante." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Scegli quale API grafica usare internamente.\n" -"Direct3D 9 è di solito la più rapida. OpenGL è la più precisa. Direct3D 11 " -"si posiziona tra le due.\n" -"Tieni presente che i motori Direct3D sono disponibili soltanto su Windows.\n" -"\n" -"Nel dubbio, usa Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Scegli quale API grafica usare internamente.\n" -"Direct3D 9 è di solito la più rapida. OpenGL è la più precisa. Direct3D 11 " -"si posiziona tra le due.\n" -"Tieni presente che i motori Direct3D sono disponibili soltanto su Windows.\n" -"\n" -"Nel dubbio, usa Direct3D 11." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Invia" @@ -4816,18 +4800,18 @@ msgstr "Posizione della Sensor Bar: " msgid "Separator" msgstr "Separatore" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Porta Seriale 1 - Questa porta viene utilizzata da dispositivi come " "l'adattatore di rete" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Imposta come ISO &predefinita" @@ -4836,14 +4820,14 @@ msgstr "Imposta come ISO &predefinita" msgid "Set as default Memcard %c" msgstr "Imposta %c come Memory Card predefinita" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: Indice troppo grande rispetto alla dimensione " "dell'elenco dei codici AR %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4851,19 +4835,19 @@ msgstr "" "Imposta la latenza (in ms). Valori maggiori possono ridurre la scattosità " "dell'audio. Solo con motore OpenAL." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Impostazioni..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Impossibile creare file di configurazione" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Scuoti" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Nome breve:" @@ -4887,7 +4871,7 @@ msgstr "Mostra Barra di &Stato" msgid "Show &Toolbar" msgstr "Mostra Barra degli St&rumenti" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Mostra Predefiniti" @@ -4927,7 +4911,7 @@ msgstr "Mostra JAP" msgid "Show Korea" msgstr "Mostra Corea" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Mostra Lingua:" @@ -4967,11 +4951,11 @@ msgstr "Mostra Wad" msgid "Show Wii" msgstr "Mostra Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Mostra una messaggio di conferma prima di arrestare un gioco." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4990,7 +4974,7 @@ msgstr "Mostra primo blocco" msgid "Show lag counter" msgstr "Mostra contatore lag" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5042,23 +5026,24 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Wiimote in posizione di traverso" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Cinese Semplificato" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Dimensioni" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Salta BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Salta ripulitura DCBZ" @@ -5088,11 +5073,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Ingresso A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Ingresso B" @@ -5100,7 +5085,7 @@ msgstr "Ingresso B" msgid "Snapshot" msgstr "Stamp" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Renderer Software" @@ -5116,27 +5101,27 @@ msgstr "" "È utile solamente ai fini di debugging.\n" "Vuoi davvero abilitare il rendering software? Nel dubbio, seleziona 'No'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Impostazioni Audio" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Il motore audio %s non è valido." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Creazione del buffer audio non riuscita: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Spazio" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spagnolo" @@ -5164,7 +5149,7 @@ msgstr "" "\n" "Nel dubbio, seleziona 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Aumenta la velocità di trasferimento dal Disco" @@ -5172,13 +5157,13 @@ msgstr "Aumenta la velocità di trasferimento dal Disco" msgid "Square Stick" msgstr "Squadratura" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Controller Standard" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5194,7 +5179,7 @@ msgstr "Avvia Re&gistrazione" msgid "Start Recording" msgstr "Avvia Registrazione" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Stato" @@ -5202,7 +5187,7 @@ msgstr "Stato" msgid "State Saves" msgstr "Stati di Gioco" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Volante" @@ -5251,19 +5236,19 @@ msgstr "Il file è stato esportato in %s con successo" msgid "Successfully imported save files" msgstr "I file di salvataggio sono stati importati con successo." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Svedese" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Ruota/Oscilla" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Sincronizza thread GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5271,12 +5256,13 @@ msgstr "" "Sincronizza i thread della GPU e della CPU per prevenire alcuni blocchi " "casuali in modalità Dual Core. (ON = Compatibilità, OFF = Velocità)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Lingua di Sistema:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5307,7 +5293,7 @@ msgstr "Semipiano destro" msgid "Take Screenshot" msgstr "Cattura uno Screenshot" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongo)" @@ -5327,11 +5313,11 @@ msgstr "Cache Texture" msgid "Texture Format Overlay" msgstr "Overlay Formato Texture" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "Il WAD è stato installato con successo" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "L'indirizzo non è valido" @@ -5339,13 +5325,13 @@ msgstr "L'indirizzo non è valido" msgid "The checksum was successfully fixed" msgstr "Il checksum è stato corretto con successo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "La directory scelta è già in lista" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5368,7 +5354,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Il file %s è già stato aperto, l'intestazione non verrà scritta." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Il file specificato (%s) non esiste" @@ -5401,7 +5387,7 @@ msgstr "" "Il file di salvataggio che si sta provando a copiare ha una dimensione non " "valida" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5409,19 +5395,19 @@ msgstr "" "La lingua selezionata non è supportata dal tuo sistema. Ritorno alla " "predefinita di sistema." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Le versioni di NetPlay del server e del client non sono compatibili!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Il server è pieno!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Il server ha risposto: il gioco è correntemente in esecuzione!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Il server invia un messaggio d'errore sconosciuto!" @@ -5430,15 +5416,15 @@ msgstr "Il server invia un messaggio d'errore sconosciuto!" msgid "The specified file \"%s\" does not exist" msgstr "il file specificato \"%s\" non esiste" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Il valore non è valido" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5446,7 +5432,7 @@ msgstr "" "Deve esistere un ticket per 00000001/00000002. Il dump della tua NAND è " "probabilmente incompleto." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5454,14 +5440,14 @@ msgstr "" "Queste impostazioni possono sovrascrivere quelle settate in Dolphin. \n" "L'opzione 'indeterminato' utilizzerà le impostazioni di Dolphin." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "" "Questo simulatore di action replay non supporta codici automodificanti." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" "Ciò potrebbe causare rallentamenti all'interno del Menu Wii e in alcuni " @@ -5487,7 +5473,7 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5500,7 +5486,7 @@ msgstr "" "correggere l'audio a scatti ma potrebbe causare un rumore costante a seconda " "del gioco)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5512,7 +5498,7 @@ msgstr "" "Migliora la velocità sui PC multiprocessore, ma può anche ma può anche " "provocare occasionali crash o malfunzionamenti." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Permette di modificare manualmente il file di configurazione INI" @@ -5521,12 +5507,12 @@ msgstr "Permette di modificare manualmente il file di configurazione INI" msgid "Threshold" msgstr "Sensibilità" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Inclina" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Titolo" @@ -5561,15 +5547,16 @@ msgid "Toggle IR" msgstr "Imposta IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Sopra" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Cinese Tradizionale" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Tentativo di caricamento di un tipo di file sconosciuto." @@ -5589,7 +5576,7 @@ msgstr "" "Tentativo di lettura da una SYSCONF non valida\n" "Gli identificativi Wiimote bt non sono disponibili" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turco" @@ -5605,12 +5592,12 @@ msgstr "Tipo" msgid "UDP Port:" msgstr "Porta UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "Wiimote UDP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "SCONOSCIUTO" @@ -5619,7 +5606,7 @@ msgstr "SCONOSCIUTO" msgid "UNKNOWN_%02X" msgstr "UNKNOWN_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5632,9 +5619,9 @@ msgstr "" "Voce non modificata." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5659,11 +5646,11 @@ msgstr "Annulla Salvataggio dello Stato di Gioco" msgid "Unexpected 0x80 call? Aborting..." msgstr "Chiamata 0x80 inaspettata? Interruzione..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Sconosciuto" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Comando DVD %08x sconosciuto - errore fatale" @@ -5678,12 +5665,12 @@ msgstr "Comando 0x%08x sconosciuto" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Voce %i sconosciuta in SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Messaggio ricevuto sconosciuto avente id : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5695,16 +5682,16 @@ msgstr "" msgid "Up" msgstr "Su" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Aggiorna" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Wiimote in posizione verticale" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Utilizza Modalità EuRGB60 (PAL60)" @@ -5712,11 +5699,11 @@ msgstr "Utilizza Modalità EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Usa Schermo Intero" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Usa Hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Avvisi di Errore" @@ -5783,11 +5770,11 @@ msgstr "Utilità" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Speed Hack VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Valore" @@ -5795,7 +5782,7 @@ msgstr "Valore" msgid "Value:" msgstr "Valore:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Valore: " @@ -5807,7 +5794,7 @@ msgstr "Verboso" msgid "Vertex Streaming Hack" msgstr "Vertex Streaming Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Video" @@ -5815,7 +5802,7 @@ msgstr "Video" msgid "Virtual" msgstr "Virtuale" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volume" @@ -5847,15 +5834,15 @@ msgstr "" msgid "Warning" msgstr "Attenzione" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Attenzione - avvio DOL in modalità console errata!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Attenzione - avvio ELF in modalità console errata!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Attenzione - avvio ISO in modalità console errata!" @@ -5960,19 +5947,19 @@ msgstr "Hack Widescreen" msgid "Width" msgstr "Larghezza" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Console Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Root NAND Wii:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "File di Salvataggio Wii (*.bin)|*.bin" @@ -5985,12 +5972,18 @@ msgstr "WiiWAD: Impossibile leggere dal file" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote Collegato" @@ -6022,14 +6015,14 @@ msgstr "Windows Destro" msgid "Word Wrap" msgstr "Adatta Testo" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Attività in corso..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Scrivi Memory Card (GC)" @@ -6049,21 +6042,36 @@ msgstr "Scrivi su File" msgid "Write to Window" msgstr "Scrivi in Finestra" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "CreateSourceVoice XAudio2 non riuscita: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "Inizializzazione XAudio2 non riuscita: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "Creazione master voice XAudio2 non riuscita: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "CreateSourceVoice XAudio2 non riuscita: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "Inizializzazione XAudio2 non riuscita: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "Creazione master voice XAudio2 non riuscita: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -6095,15 +6103,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Non è possibile chiudere riquadri che hanno pagine al loro interno" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "È necessario selezionare un gioco!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Devi inserire un nome!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "È necessario inserire un valore decimale, esadecimale o ottale." @@ -6111,7 +6119,7 @@ msgstr "È necessario inserire un valore decimale, esadecimale o ottale." msgid "You must enter a valid profile name." msgstr "Devi inserire un nome valido per il profilo." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "È necessario riavviare Dolphin affinché le modifiche abbiano effetto." @@ -6125,7 +6133,7 @@ msgstr "" "Vuoi interrompere ora l'emulazione per correggere il problema?\n" "Se scegli \"No\", l'audio potrebbe essere disturbato." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6144,15 +6152,15 @@ msgstr "" "Dovrebbe essere 0x%04x (invece di 0x%04llx)\n" "Desideri generarne uno nuovo?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "Hack ZTP" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3 codice non supportato" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero codice sconosciuto per dolphin: %08x" @@ -6211,29 +6219,24 @@ msgstr "" "\n" "Nel dubbio, lascia deselezionato." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Lettura Opcode da %x. Si prega di segnalarlo." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "caratteristica sconosciuta %d (ci si aspettava %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "messaggio sconosciuto ricevuto" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute ritorna -1 all'avvio dell'applicazione!" @@ -6248,3 +6251,52 @@ msgstr "Correzione zNear: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OR" + +#~ msgid "Could not create %s" +#~ msgstr "Impossibile creare %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Modifica Sovrascritture Locali" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Apre le sovrascritture specificate dall'utente in un editor di testo " +#~ "separato." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Scegli quale API grafica usare internamente.\n" +#~ "Direct3D 9 è di solito la più rapida. OpenGL è la più precisa. Direct3D " +#~ "11 si posiziona tra le due.\n" +#~ "Tieni presente che i motori Direct3D sono disponibili soltanto su " +#~ "Windows.\n" +#~ "\n" +#~ "Nel dubbio, usa Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Scegli quale API grafica usare internamente.\n" +#~ "Direct3D 9 è di solito la più rapida. OpenGL è la più precisa. Direct3D " +#~ "11 si posiziona tra le due.\n" +#~ "Tieni presente che i motori Direct3D sono disponibili soltanto su " +#~ "Windows.\n" +#~ "\n" +#~ "Nel dubbio, usa Direct3D 11." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Lettura Opcode da %x. Si prega di segnalarlo." diff --git a/Languages/po/ja.po b/Languages/po/ja.po index 17f4bdfe3e..bfd207366d 100644 --- a/Languages/po/ja.po +++ b/Languages/po/ja.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-20 13:38+0000\n" "Last-Translator: DanbSky \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(該当数が多すぎます)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "タイトル:" @@ -34,7 +34,7 @@ msgstr "タイトル:" msgid "! NOT" msgstr "! (...で無い)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$s コピー %1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d x" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d x (品質 %d)" @@ -74,12 +74,12 @@ msgstr "%d x (品質 %d)" msgid "%s already exists, overwrite?" msgstr "%s はすでに存在します。上書きしますか?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s のスクラビングに失敗しました。おそらく壊れています。" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -88,7 +88,7 @@ msgstr "" "%s メモリーカードの読み込みに失敗\n" " 不正なカードファイルサイズです (0x%x バイト)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -97,7 +97,7 @@ msgstr "" "%s メモリーカードの読み込みに失敗\n" " 不正なカード容量です (0x%x バイト)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -112,7 +112,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s を開くのに失敗" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s failed: kr=%x" @@ -122,7 +122,7 @@ msgstr "%s failed: kr=%x" msgid "%s is a 0 byte file" msgstr "%s は0バイトのファイルです" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s は圧縮済みです!これ以上圧縮することはできません。" @@ -180,11 +180,11 @@ msgstr "チートコード編集ツール(&C)" msgid "&DSP Settings" msgstr "サウンド設定(&D)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "このタイトルの実体を削除(&D)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "選択したタイトルの実体を全て削除(&D)" @@ -248,7 +248,7 @@ msgstr "一時停止(&P)" msgid "&Play" msgstr "開始(&P)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "プロパティ(&P)" @@ -292,7 +292,7 @@ msgstr "表示(&V)" msgid "&Wiimote Settings" msgstr "Wii入力設定(&W)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "公式Wiki(英語)で動作状況を確認(&W)" @@ -328,7 +328,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Native (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 ビット" @@ -344,7 +344,7 @@ msgstr "2.5x Native (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Native (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 ビット" @@ -360,7 +360,7 @@ msgstr "3x Native (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Native (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 ビット" @@ -372,7 +372,7 @@ msgstr "コード名を入力してください" msgid "" msgstr "<対応できる解像度が見つかりません>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "なし" @@ -380,7 +380,7 @@ msgstr "なし" msgid "" msgstr "入力を待機..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<システムの言語>" @@ -388,13 +388,13 @@ msgstr "<システムの言語>" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "ネットプレイウィンドウはすでに開かれています!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "ゲームは現在、起動されていません" @@ -407,6 +407,7 @@ msgstr "" "手動でWii リモコンを接続する必要があります。" #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -415,10 +416,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -437,13 +439,13 @@ msgstr "" "\n" "ホスト側は、TCPポートの開放を忘れずに!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "Triforce基板" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "アクションリプレイコード" @@ -491,14 +493,14 @@ msgstr "" "問題のあるコード:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" "Action Replay エラー: 不正なサイズ (%08x : address = %08x) in Add Code (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -507,7 +509,7 @@ msgstr "" "Action Replay エラー: 不正なサイズ (%08x : address = %08x) in Fill and Slide " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -516,7 +518,7 @@ msgstr "" "Action Replay エラー: 不正なサイズ (%08x : address = %08x) in Ram Write And " "Fill (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -525,12 +527,12 @@ msgstr "" "Action Replay エラー: 不正なサイズ (%08x : address = %08x) in Write To " "Pointer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay エラー: 不正な値 (%08x) in Memory Copy (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -540,27 +542,27 @@ msgstr "" "(%s)\n" "マスターコードは必要ありません。使用しないでください。" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "エラー: 無効なコード ライン: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: 条件付きコード: 不正なサイズ %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: 不正な種類の通常コード %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: 通常コード %i: 不正なサブタイプ %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: 通常コード 0: 不正なサブタイプ %08x (%s)" @@ -574,11 +576,11 @@ msgstr "ビデオカード:" msgid "Add" msgstr "追加" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "コードを追加" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "パッチを追加" @@ -586,9 +588,9 @@ msgstr "パッチを追加" msgid "Add new pane" msgstr "Add new pane" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "追加" @@ -638,36 +640,36 @@ msgstr "ボタンが反応する感度を調整します" msgid "Advanced" msgstr "高度な設定" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "高度な設定" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "全ての GC/Wii ファイル (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "全ての GC/Wii イメージ (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "GC GCMファイル (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "全てのステートセーブファイル (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Wii ISOファイル (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "圧縮されたGC/Wii ISOファイル (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "全てのファイル (*.*)|*.*" @@ -687,20 +689,20 @@ msgstr "異方性フィルタリング:" msgid "Anti-Aliasing:" msgstr "アンチエイリアス:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" "Apploader のサイズが間違っています。このファイルは本当にApploaderですか?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader ファイルから読み込むことができません" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "適用" @@ -714,7 +716,7 @@ msgstr "" "\n" "よく分からなければ、【オフ】を選択してください。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "アラビア語" @@ -723,7 +725,7 @@ msgstr "アラビア語" msgid "Are you sure you want to delete \"%s\"?" msgstr "\"%s\" このプロファイルを削除しますか?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -731,7 +733,7 @@ msgstr "" "これら複数のタイトルの実体ファイルを削除しますか?\n" "元に戻すことはできません!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "このタイトルの実体ファイルを削除しますか?元に戻すことはできません!" @@ -739,7 +741,12 @@ msgstr "このタイトルの実体ファイルを削除しますか?元に戻 msgid "Arm JIT (experimental)" msgstr "Arm JIT (実験的)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (実験的)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "アスペクト比:" @@ -748,12 +755,12 @@ msgstr "アスペクト比:" msgid "At least one pane must remain open." msgstr "At least one pane must remain open." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "サウンド" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "出力API (Audio Backend)" @@ -761,7 +768,7 @@ msgstr "出力API (Audio Backend)" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Error opening AO device.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "自動" @@ -800,16 +807,16 @@ msgstr "BP register " msgid "Back" msgstr "Back" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "出力設定" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "描画API:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "バックグラウンド入力を許可" @@ -827,15 +834,15 @@ msgid "Balance Board" msgstr "バランスWii ボード" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "バナー" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "バナーの詳細" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "バナー表示" @@ -847,7 +854,7 @@ msgstr "バー" msgid "Basic" msgstr "基本設定" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "基本設定" @@ -855,7 +862,7 @@ msgstr "基本設定" msgid "Bass" msgstr "バスドラ" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Block Allocation Table checksum failed" @@ -876,7 +883,7 @@ msgid "Blue Right" msgstr "青 - 右" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "下部" @@ -885,7 +892,7 @@ msgstr "下部" msgid "Bound Controls: %lu" msgstr "コマンド数: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "ダメダメ" @@ -893,7 +900,7 @@ msgstr "ダメダメ" msgid "Browse" msgstr "選択" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "ゲームリストに追加するフォルダを選択してください" @@ -901,11 +908,11 @@ msgstr "ゲームリストに追加するフォルダを選択してください msgid "Browse for an ISO directory..." msgstr "ISOのあるフォルダをブラウズ" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "出力先を選択" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "バッファ:" @@ -915,7 +922,7 @@ msgstr "バッファ:" msgid "Buttons" msgstr "ボタン" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -940,7 +947,7 @@ msgstr "C-スティック" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPUエミュレーション方式" @@ -962,17 +969,17 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Can't find WiiMote by connection handle %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "キャンセル" @@ -984,11 +991,11 @@ msgstr "キャンセル" msgid "Cannot open %s" msgstr "%s を開くことができません" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Cannot unregister events with events pending" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -999,7 +1006,7 @@ msgstr "" "%s\n" "これは不正なメモリーカードデータです" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1011,7 +1018,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "カタルーニャ語" @@ -1019,7 +1026,7 @@ msgstr "カタルーニャ語" msgid "Center" msgstr "Center" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "変更" @@ -1031,11 +1038,11 @@ msgstr "ディスクの入れ替え(&D)" msgid "Change Disc" msgstr "ディスクの入れ替え" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "ゲームを変更" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1051,11 +1058,11 @@ msgstr "" msgid "Changes sign to zNear Parameter (after correction)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "この設定は次回のゲーム開始時に反映されます!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "チャット欄" @@ -1063,47 +1070,47 @@ msgstr "チャット欄" msgid "Cheat Code" msgstr "チートコード" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "コードサーチ" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "チートコード編集ツール" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "パーティションの整合性をチェック" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "チェックしています..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "簡体字中国語" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "繁体字中国語" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "DVDルートフォルダを選択してください" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "NANDのあるルートフォルダを選択してください" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "ディスクチャンネルに表示するタイトルを選択" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "追加したいフォルダを選択" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "メモリーカードを選択" @@ -1111,7 +1118,7 @@ msgstr "メモリーカードを選択" msgid "Choose a memory card:" msgstr "メモリーカードを選択" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1119,8 +1126,8 @@ msgstr "" "apploaderとして使用するファイルを選択:(フォルダからのみ構築されたディスクに" "適用されます)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "保存先のフォルダを選択してください" @@ -1139,7 +1146,7 @@ msgstr "クラシックコントローラ" msgid "Clear" msgstr "全消去" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1149,7 +1156,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "閉じる" @@ -1158,11 +1165,11 @@ msgstr "閉じる" msgid "Co&nfigure..." msgstr "Dolphin本体の設定(&N)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "コードの情報" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "コード:" @@ -1174,20 +1181,20 @@ msgstr "Command" msgid "Comment" msgstr "コメント" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "ゲーム紹介" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "このタイトルを圧縮" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "選択したISOファイルを全て圧縮" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "圧縮しています..." @@ -1205,8 +1212,8 @@ msgstr "設定" msgid "Configure Control" msgstr "コントロールの設定" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "パッド設定" @@ -1214,13 +1221,13 @@ msgstr "パッド設定" msgid "Configure..." msgstr "Dolphin本体の設定を行います" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "ファイルの上書きを確認" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "動作停止時に確認" @@ -1234,7 +1241,7 @@ msgstr "接続" msgid "Connect Balance Board" msgstr "バランスWii ボードを接続" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "USBキーボードの接続をエミュレート" @@ -1259,7 +1266,7 @@ msgstr "3PのWii リモコンを接続" msgid "Connect Wiimote 4" msgstr "4PのWii リモコンを接続" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "接続中..." @@ -1279,7 +1286,7 @@ msgstr "Control" msgid "Convert to GCI" msgstr "GCIファイルに変換" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "コピーに失敗" @@ -1288,16 +1295,11 @@ msgstr "コピーに失敗" msgid "Copy to Memcard %c" msgstr "メモリーカード%cにコピー" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "コア" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "%s を作成することができませんでした" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Could not initialize backend %s." @@ -1313,12 +1315,12 @@ msgstr "" "プディスクではありません。オリジナルのGC/Wii のディスクはほとんどのPC用DVDド" "ライブでは読み込めない点に留意してください" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "ISOファイル %s を認識できませんでした" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "%s をセーブできませんでした" @@ -1343,11 +1345,11 @@ msgstr "" "メモリーカードファイルをデフォルトの場所から移動した場合は、本体設定よりその" "場所を再指定してください" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "拡張子'ini'に対して関連付けられているプログラムが見つかりません!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1355,17 +1357,17 @@ msgstr "" "コアを初期化できませんでした。\n" "設定を確認してください。" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "該当:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "発売国" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "アクションリプレイコードを作成" @@ -1401,12 +1403,12 @@ msgstr "" msgid "Crossfade" msgstr "クロスフェーダー" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Current directory changed from %s to %s after wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Custom Projection Hack" @@ -1414,11 +1416,11 @@ msgstr "Custom Projection Hack" msgid "Custom Projection Hack Settings" msgstr "Custom Projection Hackの設定" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "設定画面に入ります" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "チェコ語" @@ -1434,20 +1436,20 @@ msgstr "十字キー" msgid "DSP" msgstr "サウンド" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSPエミュレーション方式" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP-HLE エミュレーション (高速)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP-LLE インタプリタ (低速)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP-LLE リコンパイラ" @@ -1455,11 +1457,11 @@ msgstr "DSP-LLE リコンパイラ" msgid "DSP settings" msgstr "サウンドに関する設定を行います" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE on Separate Thread" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVDルート" @@ -1471,15 +1473,15 @@ msgstr "DVDLowRead - Fatal Error: failed to read from volume" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "マットコントローラ" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "データサイズ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "発売日" @@ -1508,16 +1510,16 @@ msgstr "デバッグ用項目" msgid "Decimal" msgstr "Decimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "ISOファイルへ復元" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "選択したファイルを全てISOファイルへ復元" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "復元中..." @@ -1529,7 +1531,7 @@ msgstr "フレームリミットを下げる" msgid "Default" msgstr "既定" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "デフォルトISO" @@ -1573,8 +1575,8 @@ msgstr "" msgid "Device" msgstr "デバイス" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "デバイス設定" @@ -1582,15 +1584,12 @@ msgstr "デバイス設定" msgid "Dial" msgstr "ダイアル" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1652,7 +1651,7 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "ディスク" @@ -1679,20 +1678,20 @@ msgstr "" msgid "Divide" msgstr "Divide" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "動作中のゲームを停止しますか?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II decoder" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1722,9 +1721,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1779,12 +1777,12 @@ msgstr "Wii リモコンのエミュレーション設定" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "GCコントローラ設定" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS ムービー (*.dtm)" @@ -1796,7 +1794,7 @@ msgstr "Wiiリモコンの設定" msgid "Dolphin at &Google Code" msgstr "Dolphin 開発状況(&G)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1804,7 +1802,7 @@ msgstr "" "ゲームリストは空です。この文章をダブルクリックして GC/Wii のISO または WBFS " "もしくは WADファイルのあるフォルダを選択してください。" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1812,12 +1810,12 @@ msgstr "" "リスト中の全てのゲームが設定により表示されていません。この文章をダブルクリッ" "クすると表示されるようになります" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "要求された操作を完了することができませんでした。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1843,11 +1841,11 @@ msgstr "%lu個のコードが見つかりました。( 新規追加: %lu個 )" msgid "Drums" msgstr "ドラムコントローラ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "ダミーデバイス" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "サウンドのダンプ" @@ -1894,9 +1892,9 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "オランダ語" @@ -1920,7 +1918,7 @@ msgstr "" "Dolphinのバージョンを更新した場合は、ドライバを認識させるためにWindowsの再起" "動が必要になるかもしれません。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "欧州" @@ -1936,14 +1934,10 @@ msgstr "編集" msgid "Edit ActionReplay Code" msgstr "コードを編集" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "iniを編集" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "パッチを編集" @@ -1952,8 +1946,8 @@ msgstr "パッチを編集" msgid "Edit current perspective" msgstr "Edit current perspective" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "編集" @@ -1965,7 +1959,7 @@ msgstr "エフェクト" msgid "Embedded Frame Buffer" msgstr "Embedded Frame Buffer (内蔵フレームバッファ)" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "エミュレーションスレッドはすでに稼働中です" @@ -2004,7 +1998,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Wii リモコンをエミュレート" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "動作状況:" @@ -2028,15 +2022,15 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "アクションリプレイコードのログを取得する" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Enable Block Merging" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Enable Bounding Box Calculation" @@ -2044,27 +2038,27 @@ msgstr "Enable Bounding Box Calculation" msgid "Enable Cache" msgstr "Enable Cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "チートコードを有効化" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Enable Dual Core" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "デュアルコア動作を行う (速度向上)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Enable Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "アイドルスキップ処理を行う (速度向上)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Enable MMU" @@ -2072,7 +2066,7 @@ msgstr "Enable MMU" msgid "Enable Progressive Scan" msgstr "プログレッシブ表示を有効化" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "スクリーンセーバーを有効化" @@ -2080,7 +2074,7 @@ msgstr "スクリーンセーバーを有効化" msgid "Enable Speaker Data" msgstr "スピーカー出力の有効化" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Enable WideScreen" @@ -2102,7 +2096,7 @@ msgstr "" "\n" "よく分からなければ、【1x】を選択してください。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2137,7 +2131,7 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2145,11 +2139,11 @@ msgstr "" "トワイライトプリンセスにおいて、広大なエリアで発生するFPS低下を抑えます。他の" "タイトルでは無効にしてください" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Enables Custom Projection Hack" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2157,7 +2151,7 @@ msgstr "" "Dolby Pro Logic II を使用した5.1サラウンドのエミュレーションを行います。OSX " "には現在未対応です" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2176,7 +2170,7 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2198,9 +2192,9 @@ msgstr "" msgid "End" msgstr "End" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "英語" @@ -2223,22 +2217,21 @@ msgstr "エントリ %d/%d" msgid "Entry 1/%d" msgstr "エントリ 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "に一致する" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "エラー" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "選択した言語の読み込みに失敗しました。<システムの言語>に設定を戻します" -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2284,7 +2277,7 @@ msgstr "全てのWiiセーブデータをエクスポート" msgid "Export Failed" msgstr "エクスポートに失敗" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "ファイルを抽出" @@ -2300,7 +2293,7 @@ msgstr "録画ファイルのエクスポート" msgid "Export Save" msgstr "セーブデータをエクスポート" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "セーブデータをエクスポート (実験的)" @@ -2316,7 +2309,7 @@ msgstr "エクスポートに失敗" msgid "Export save as..." msgstr "セーブデータのエクスポート先を選択" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "拡張コントローラ" @@ -2332,44 +2325,44 @@ msgstr "特殊パラメータ" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "『メトロイド Other M』のみに有用な設定です" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "全てのファイルを抽出" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Apploaderを抽出" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "DOLを抽出" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "このフォルダを抽出" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "このファイルを抽出" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "このパーティションを抽出" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "%s を抽出" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "全てのファイルをエクスポート" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "フォルダをエクスポート" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "抽出しています..." @@ -2381,15 +2374,15 @@ msgstr "FIFO バイト" msgid "FIFO Player" msgstr "FIFO プレーヤー" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "フランス" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FSTサイズ" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "接続に失敗!" @@ -2397,11 +2390,15 @@ msgstr "接続に失敗!" msgid "Failed to download codes." msgstr "コードの取得に失敗しました" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "%s への抽出に失敗" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2454,7 +2451,7 @@ msgstr "Failed to read banner.bin" msgid "Failed to read bk header" msgstr "Failed to read bk header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2465,7 +2462,7 @@ msgstr "" "Memcard may be truncated\n" "FilePosition:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2473,7 +2470,7 @@ msgstr "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2491,7 +2488,7 @@ msgstr "Failed to read data from file %d" msgid "Failed to read data from file: %s" msgstr "Failed to read data from file: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2499,7 +2496,7 @@ msgstr "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2511,7 +2508,7 @@ msgstr "" msgid "Failed to read header" msgstr "Failed to read header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2524,7 +2521,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "ファイル %d のヘッダ読み込みに失敗" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Failed to read unique ID from disc image" @@ -2546,7 +2543,7 @@ msgstr "次のファイルへの書き込みに失敗: %s" msgid "Failed to write header for %s" msgstr "Failed to write header for %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "ペルシア語" @@ -2558,7 +2555,7 @@ msgstr "Fast" msgid "Fast Depth Calculation" msgstr "Fast Depth Calculation" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "高速なMMUを使用します。全てのゲームでうまく動くわけではありません" @@ -2594,7 +2591,7 @@ msgstr "" "ファイルを開くことができませんでした\n" "もしくは有効な拡張子ではありません" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2607,7 +2604,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "このファイルはメモリーカードとして認識されませんでした" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "圧縮されていないファイル" @@ -2616,11 +2613,11 @@ msgstr "圧縮されていないファイル" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Unknown open mode : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "構造" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr " 'ini' は不明な拡張子です。開くことができません!" @@ -2648,7 +2645,7 @@ msgstr "強制的に 16:9 にする" msgid "Force 4:3" msgstr "強制的に 4:3 にする" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "コンソールを日本向け (NTSC-J) に設定" @@ -2682,7 +2679,7 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2693,7 +2690,7 @@ msgstr "" "チェックを外した状態ではDolphinは NTSC-U を使用しますが、日本のタイトルをプレ" "イ時には自動的にこの設定は有効になります" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2705,7 +2702,7 @@ msgstr "" msgid "Forward" msgstr "前方" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "ポート開放を自動で設定 (UPnP)" @@ -2748,7 +2745,7 @@ msgstr "フレームの範囲" msgid "Frame S&kipping" msgstr "フレームスキップ(&K)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "フレームリミット:" @@ -2760,9 +2757,9 @@ msgstr "録画フレーム数設定" msgid "Free Look" msgstr "フリールック" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "フランス語" @@ -2795,27 +2792,27 @@ msgstr "入力(GC)" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ゲームID" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "すでに起動しています!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "ゲームが起動していません!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "ゲームが見つかりません!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "固有設定" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "ゲーム設定" @@ -2823,7 +2820,7 @@ msgstr "ゲーム設定" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GCセーブファイル(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "ゲームキューブ" @@ -2832,7 +2829,7 @@ msgid "Gamecube &Pad Settings" msgstr "ゲームキューブ入力設定(&P)" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "メモリーカードファイル (*.raw,*.gcp)" @@ -2840,12 +2837,12 @@ msgstr "メモリーカードファイル (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "ゲームキューブの入力設定を行います" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Geckoコード" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2859,7 +2856,7 @@ msgstr "" "を置き、Dolphinを再起動することで利用できます)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "一般" @@ -2868,13 +2865,13 @@ msgstr "一般" msgid "General Settings" msgstr "一般" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "ドイツ語" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2888,7 +2885,7 @@ msgstr "ビデオ" msgid "Graphics settings" msgstr "描画に関する設定を行います" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "より大きい" @@ -2908,7 +2905,7 @@ msgstr "" "動作速度は少々低下し、まれに描画バグの原因にもなることもあります。\n" "よく分からなければ、チェックを外さないでください。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "ギリシア語" @@ -2932,11 +2929,11 @@ msgstr "ギターコントローラ" msgid "Hacks" msgstr "高速化(Hacks)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Header checksum failed" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "ヘブライ語" @@ -2948,7 +2945,7 @@ msgstr "範囲(縦)" msgid "Help" msgstr "ヘルプ" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2969,7 +2966,7 @@ msgstr "" "\n" "さよなら!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3010,7 +3007,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "ホスト" @@ -3019,11 +3016,11 @@ msgid "Hotkey Configuration" msgstr "ホットキーの設定" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "ホットキー" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "ハンガリー語" @@ -3031,16 +3028,16 @@ msgstr "ハンガリー語" msgid "Hybrid Wiimote" msgstr "Hybrid Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3049,15 +3046,15 @@ msgstr "" "TitleID %016llx.\n" " Dolphin を停止します" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - bad destination" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL設定" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "ポインタ" @@ -3069,15 +3066,15 @@ msgstr "IR ポインタ" msgid "IR Sensitivity:" msgstr "感度" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ゲームの詳細" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "フォルダ一覧" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "イタリア" @@ -3085,7 +3082,7 @@ msgstr "イタリア" msgid "Icon" msgstr "アイコン" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3156,7 +3153,7 @@ msgstr "" "インポートされたのは'sav'ファイルのようです\n" "しかし正しいヘッダではありません" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "ソコソコ" @@ -3165,7 +3162,7 @@ msgid "Increase Frame limit" msgstr "フレームリミットを上げる" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "情報" @@ -3185,7 +3182,7 @@ msgstr "Insert" msgid "Insert Encrypted or Decrypted code here..." msgstr "ここに暗号化or復号化されたコードを貼り付けてください" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "SDカードの挿入をエミュレート" @@ -3197,35 +3194,35 @@ msgstr "コード名を入力してください" msgid "Install WAD" msgstr "WiiメニューにWADファイルを追加" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Wiiメニューへインストール" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler が呼び出されましたが、このプラットフォームはまだサ" "ポートされていません" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "追加しています..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "エラーが確認されました!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "完了" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "チェック終了。整合性に問題はありませんでした。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3234,11 +3231,11 @@ msgstr "" "パーティション %d に問題が見つかりました。 データが破損しているか、正しくパッ" "チが当てられていない可能性があります。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "表示" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Dolphinの表示に関する設定" @@ -3267,7 +3264,7 @@ msgstr "内部解像度の変更:" msgid "Interpreter (VERY slow)" msgstr "Interpreter (非常に低速)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "イントロ" @@ -3276,7 +3273,7 @@ msgstr "イントロ" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Invalid Size(%x) or Magic word (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "無効な値です!" @@ -3284,16 +3281,16 @@ msgstr "無効な値です!" msgid "Invalid bat.map or dir entry" msgstr "Invalid bat.map or dir entry" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Invalid event type %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "不正なファイル" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3320,34 +3317,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "不正なステートファイル" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "イタリア語" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "日本" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT Recompiler (推奨)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL experimental recompiler (実験的)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "日本語" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "韓国" @@ -3370,8 +3369,9 @@ msgstr "最前面に表示" msgid "Key" msgstr "キー設定" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "韓国語" @@ -3389,7 +3389,7 @@ msgstr "Lボタン" msgid "L-Analog" msgstr "L (アナログ)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "GUI言語:" @@ -3398,7 +3398,7 @@ msgstr "GUI言語:" msgid "Last %i" msgstr "%iつ前のステートをロード" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "レイテンシー:" @@ -3437,11 +3437,11 @@ msgstr "" "左or右クリックで設定画面に入ります\n" "中クリックで消去します" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "より小さい" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "FPSによる制限を有効化" @@ -3533,11 +3533,11 @@ msgstr "ステートロード - スロット 9" msgid "Load State..." msgstr "ファイルからロード" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Wiiメニューを起動" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Wiiメニューを起動 ( バージョン:%d %c )" @@ -3588,12 +3588,12 @@ msgstr "" msgid "Logger Outputs" msgstr "ログ出力先" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "ログ" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "サーバーとの接続が切断されました!" @@ -3610,7 +3610,7 @@ msgstr "" "MD5の不整合\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Speed Hack" @@ -3624,11 +3624,11 @@ msgstr "MadCatz Gameshark セーブファイル(*.gcs)" msgid "Main Stick" msgstr "コントロールスティック" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "メーカーID" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "メーカー" @@ -3664,7 +3664,7 @@ msgid "Memory Byte" msgstr "メモリバイト" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "メモリーカード" @@ -3674,7 +3674,7 @@ msgid "" "could mangle stuff!" msgstr "メモリーカードマネージャ ~使用前にはバックアップを!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3691,7 +3691,7 @@ msgstr "" "%s\n" "この場所に古いファイルをコピーしますか?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "メモリカードのファイルサイズが、ヘッダのサイズに一致していません" @@ -3699,7 +3699,7 @@ msgstr "メモリカードのファイルサイズが、ヘッダのサイズに msgid "Menu" msgstr "メニュー" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "マイク" @@ -3712,7 +3712,7 @@ msgstr "最小" msgid "Misc" msgstr "その他" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "その他の設定" @@ -3737,11 +3737,11 @@ msgstr "" msgid "Monospaced font" msgstr "等幅フォント" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "モーションプラス" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "モーター" @@ -3860,15 +3860,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Up" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "名前" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "名前: " @@ -3878,7 +3878,7 @@ msgstr "名前: " msgid "Native GCI files(*.gci)" msgstr "ネイティブ GCI ファイル(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "新規検索" @@ -3887,7 +3887,7 @@ msgstr "新規検索" msgid "Next Page" msgstr "次のページ" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "続けて検索" @@ -3895,11 +3895,11 @@ msgstr "続けて検索" msgid "Nickname :" msgstr "ニックネーム:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "No Country (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "リストに項目がありません!" @@ -3938,24 +3938,25 @@ msgstr "録画ファイルなし" msgid "No save folder found for title %s" msgstr "%s のセーブフォルダがありません" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "なし" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "ノルウェー語" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "に一致しない" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "未確認" @@ -3964,11 +3965,11 @@ msgstr "未確認" msgid "Not a Wii save or read failure for file header size %x" msgstr "Not a Wii save or read failure for file header size %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "未接続" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "ノート" @@ -3989,7 +3990,7 @@ msgstr "注意" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "行数:" @@ -4010,7 +4011,7 @@ msgstr "オブジェクト" msgid "Object Range" msgstr "オブジェクトの範囲" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "オフ" @@ -4018,7 +4019,7 @@ msgstr "オフ" msgid "Offset:" msgstr "オフセット値:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "オンスクリーンメッセージを表示" @@ -4036,11 +4037,11 @@ msgstr "残り %d ブロックしかありません!" msgid "Open" msgstr "開く" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "実体のあるフォルダを開く(&C)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "セーブデータのあるフォルダを開く(&S)" @@ -4070,17 +4071,13 @@ msgstr "OpenCL Texture Decoder" msgid "OpenMP Texture Decoder" msgstr "OpenMP Texture Decoder" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "設定" @@ -4104,7 +4101,7 @@ msgstr "" msgid "Other" msgstr "その他" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4120,11 +4117,11 @@ msgstr "出力" msgid "P&lay Recording..." msgstr "録画ファイルを再生(&L)" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "パッド" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Pad " @@ -4148,26 +4145,26 @@ msgstr "Paragraph" msgid "Parameters" msgstr "パラメータ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "パーティション %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "パーティションが存在しません: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "パッチ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "フォルダ" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "一時停止" @@ -4180,7 +4177,7 @@ msgstr "再生終了時に一時停止" msgid "Per-Pixel Lighting" msgstr "Per-Pixel Lighting" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "カンペキ!" @@ -4191,8 +4188,8 @@ msgstr "Perspective %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "開始" @@ -4204,7 +4201,7 @@ msgstr "録画ファイルを再生" msgid "Play/Pause" msgstr "開始/一時停止" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "サクサク" @@ -4212,11 +4209,11 @@ msgstr "サクサク" msgid "Playback Options" msgstr "再生オプション" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "プレイヤー一覧" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "確認" @@ -4228,36 +4225,36 @@ msgstr "Please create a perspective before saving" msgid "Plus-Minus" msgstr "Plus-Minus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "ポーランド語" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "ポート 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "ポート 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "ポート 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "ポート 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "ポート:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "ポルトガル語" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "ブラジル語" @@ -4270,7 +4267,7 @@ msgstr "Post-Processing Effect:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -4292,7 +4289,7 @@ msgstr "前のページ" msgid "Previous Page" msgstr "前のページ" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "ここより前" @@ -4316,8 +4313,8 @@ msgstr "キャッシュの整頓を実行" msgid "Question" msgstr "確認" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "終了" @@ -4339,7 +4336,7 @@ msgstr "R (アナログ)" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "ロシア" @@ -4378,7 +4375,7 @@ msgstr "実機Wii リモコンの設定" msgid "Record" msgstr "録画" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "入力を記録" @@ -4431,10 +4428,10 @@ msgstr "ゲームリストを再更新" msgid "Refresh game list" msgstr "ゲームリストを再更新します" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "削除" @@ -4457,7 +4454,7 @@ msgstr "メインウィンドウ部分に描画" msgid "Reset" msgstr "初期化" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "結果表示欄" @@ -4465,7 +4462,7 @@ msgstr "結果表示欄" msgid "Return" msgstr "Return" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "リビジョン" @@ -4478,18 +4475,18 @@ msgstr "右" msgid "Right Stick" msgstr "右スティック" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "振動" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "DSP-LLEの処理を別スレッドに分離して行います (非推奨:フリーズの原因になります)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "ロシア語" @@ -4563,12 +4560,12 @@ msgstr "ステートセーブ - スロット 9" msgid "Save State..." msgstr "ファイルとして保存" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "ファイルとして保存" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "圧縮するタイトルの保存先を選択" @@ -4576,7 +4573,7 @@ msgstr "圧縮するタイトルの保存先を選択" msgid "Save current perspective" msgstr "Save current perspective" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "復元するタイトルの保存先を選択" @@ -4589,16 +4586,16 @@ msgstr "Savestate movie %s の破損を確認しました。録画を中止し msgid "Scaled EFB Copy" msgstr "Scaled EFB Copy" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "確認しています... .%s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "確認中..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "確認中..." @@ -4614,11 +4611,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "検索" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "フィルタリング" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "サブフォルダも検索" @@ -4641,12 +4638,12 @@ msgstr "Section %s not found in SYSCONF" msgid "Select" msgstr "選択" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "録画ファイルを選択" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "追加するWADファイルを選択" @@ -4668,19 +4665,19 @@ msgstr "インポートするセーブファイルを選択" msgid "Select floating windows" msgstr "Select floating windows" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "ロードするファイルを選択" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "セーブファイルを選択" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "ロードするステートセーブファイルを選択" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "ステートセーブの保存先を選択" @@ -4700,7 +4697,7 @@ msgstr "" "\n" "よく分からなければ、【自動】を選択してください。" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "選択されたプロファイルは存在しません" @@ -4724,39 +4721,28 @@ msgstr "" "よく分からなければ、デスクトップの解像度と同じものを、\n" "もしくは、正常に動作する一番高い解像度を選択してください。" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"描画に使用するグラフィックスAPIを選択します。\n" -"通常【Direct3D9】が最も高速ですが、【OpenGL】はより正確です。\n" -"【Direct3D11】は2つの間のような動作になります。\n" -"Direct3D9/Direct3D11 は Windows のみ使用可能です。\n" -"\n" -"よく分からなければ、【Direct3D11】を選択してください。" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"描画に使用するグラフィックスAPIを選択します。\n" -"通常【Direct3D9】が最も高速ですが、【OpenGL】はより正確です。\n" -"【Direct3D11】は2つの間のような動作になります。\n" -"Direct3D9/Direct3D11 は Windows のみ使用可能です。\n" -"\n" -"よく分からなければ、【OpenGL】を選択してください。" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "送信" @@ -4768,16 +4754,16 @@ msgstr "センサーバーの位置" msgid "Separator" msgstr "Separator" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "セルビア語" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "シリアルポート:ブロードバンドアダプタなどのデバイスが接続できます" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Wiiメニュー(ディスクチャンネル)に表示(&D)" @@ -4786,14 +4772,14 @@ msgstr "Wiiメニュー(ディスクチャンネル)に表示(&D)" msgid "Set as default Memcard %c" msgstr "メモリーカード%cを既定として設定" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: インデックスのサイズがコードリストのサイズを上回っていま" "す %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4801,19 +4787,19 @@ msgstr "" "レイテンシーを調整します(単位:ms)。高くすることで音の問題を軽減できます。" "OpenALのみ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "設定" -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Cant create setting file" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "シェイク" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "通称" @@ -4837,7 +4823,7 @@ msgstr "ステータスバー(&S)" msgid "Show &Toolbar" msgstr "ツールバー(&T)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4877,7 +4863,7 @@ msgstr "日本" msgid "Show Korea" msgstr "韓国" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "次の言語で表示" @@ -4917,11 +4903,11 @@ msgstr "WAD(Wiiウェア/VC/チャンネル)" msgid "Show Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "ゲーム停止前に確認ウィンドウが表示されるようになります" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4939,7 +4925,7 @@ msgstr "ブロック開始位置を表示" msgid "Show lag counter" msgstr "ラグカウンターを表示" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4991,23 +4977,24 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "横持ち(Sideways)で使用" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "簡体字中国語" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "サイズ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "BIOSをスキップ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Skip DCBZ clearing" @@ -5038,11 +5025,11 @@ msgstr "" msgid "Slot %i" msgstr "スロット %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "スロットA" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "スロットB" @@ -5050,7 +5037,7 @@ msgstr "スロットB" msgid "Snapshot" msgstr "スクリーンショット" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Software Renderer" @@ -5065,27 +5052,27 @@ msgstr "" "デバッグ用途としてのみ有用なものです。\n" "それでも使用しますか?よく分からなければ、選択しないでください。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "サウンド設定" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Sound backend %s is not valid." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Sound buffer creation failed: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Space" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "スペイン語" @@ -5113,7 +5100,7 @@ msgstr "" "\n" "よく分からなければ、【1x Native】を選択してください。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Speed up Disc Transfer Rate" @@ -5121,13 +5108,13 @@ msgstr "Speed up Disc Transfer Rate" msgid "Square Stick" msgstr "丸み" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "標準コントローラ" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "スタート" @@ -5143,7 +5130,7 @@ msgstr "録画を開始(&C)" msgid "Start Recording" msgstr "録画を開始" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "動作率" @@ -5151,7 +5138,7 @@ msgstr "動作率" msgid "State Saves" msgstr "ステートセーブ/ロード" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "SPEED FORCE" @@ -5200,19 +5187,19 @@ msgstr "%s へのエクスポートに成功しました" msgid "Successfully imported save files" msgstr "セーブファイルのインポートに成功" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "スウェーデン語" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "動き" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Synchronize GPU thread" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5220,12 +5207,13 @@ msgstr "" "CPU/GPUスレッドを同期させることでデュアルコア動作時のフリーズを抑制します " "[有効=互換性・安定性重視/無効=動作速度向上]" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "システムの言語:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "台湾" @@ -5256,7 +5244,7 @@ msgstr "右テーブル" msgid "Take Screenshot" msgstr "画面撮影" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "タルコンガ" @@ -5276,11 +5264,11 @@ msgstr "Texture Cache" msgid "Texture Format Overlay" msgstr "テクスチャフォーマット情報表示" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WADファイルの追加に成功" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "無効なアドレスです" @@ -5288,13 +5276,13 @@ msgstr "無効なアドレスです" msgid "The checksum was successfully fixed" msgstr "チェックサムの修正に成功しました" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "選択したフォルダはすでにリストに存在します!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5318,7 +5306,7 @@ msgid "The file %s was already open, the file header will not be written." msgstr "" "ファイル %s は既に開かれているため、ファイルヘッダーは書き込まれません。" -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "指定したファイル (%s) は存在しません" @@ -5351,7 +5339,7 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "コピーしようとしているセーブファイルのサイズが正しくありません" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5359,19 +5347,19 @@ msgstr "" "選択した言語はこのシステムではサポートされていません。デフォルト設定を使用し" "ます" -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "サーバーとクライアントでネットプレイのバージョンに互換性がありません!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "このサーバーは満員です!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "サーバーより:このゲームは、現在実行中です!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "サーバーは、不明なエラーメッセージを送信しました!" @@ -5380,22 +5368,22 @@ msgstr "サーバーは、不明なエラーメッセージを送信しました msgid "The specified file \"%s\" does not exist" msgstr "指定されたファイル \"%s\" は存在しません" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "無効な値です" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "テーマ:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "" "00000001/00000002のチケットが必要です。おそらく不完全なNANDダンプです。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5405,7 +5393,7 @@ msgstr "" "   本体設定でデュアルコア処理を有効化している場合でも、このゲームのみシング" "ルコア動作が可能" -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5413,7 +5401,7 @@ msgstr "" "このアクションリプレイシミュレータは、アクションリプレイそのものを変更する" "コードはサポートしていません。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" "有効にしているとWiiメニューやいくつかのタイトルで動作速度が低下する場合があり" @@ -5439,7 +5427,7 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5451,7 +5439,7 @@ msgstr "" "れは一部のゲームでクリックノイズを改善しますが、別のノイズを生み出す可能性が" "あります。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5462,7 +5450,7 @@ msgstr "" "有効にすると動作速度が大きく向上しますが、クラッシュやバグの原因になる場合も" "あります" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "このゲームの設定をテキストで編集します" @@ -5471,12 +5459,12 @@ msgstr "このゲームの設定をテキストで編集します" msgid "Threshold" msgstr "しきい値" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "傾き" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "タイトル" @@ -5511,15 +5499,16 @@ msgid "Toggle IR" msgstr "内部解像度 設定切替" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "上部" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "繁体字中国語" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "不明なファイルタイプを読み込もうとしました" @@ -5539,7 +5528,7 @@ msgstr "" "Trying to read from invalid SYSCONF\n" "Wiimote bt ids are not available" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "トルコ語" @@ -5555,12 +5544,12 @@ msgstr "形式" msgid "UDP Port:" msgstr "UDPポート:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDPで接続" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "不明" @@ -5569,7 +5558,7 @@ msgstr "不明" msgid "UNKNOWN_%02X" msgstr "UNKNOWN_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "アメリカ合衆国" @@ -5582,9 +5571,9 @@ msgstr "" "入力された値が不正です。" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5609,11 +5598,11 @@ msgstr "直前のステートセーブの取消" msgid "Unexpected 0x80 call? Aborting..." msgstr "Unexpected 0x80 call? Aborting..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "フィルタ無し" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Unknown DVD command %08x - fatal error" @@ -5628,12 +5617,12 @@ msgstr "Unknown command 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Unknown entry type %i in SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "次のIDから不明なメッセージを受信 : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5643,16 +5632,16 @@ msgstr "" msgid "Up" msgstr "上" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "再取得" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "直立状態(Upright)で使用" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "EuRGB60 (PAL60) モードを使用" @@ -5660,11 +5649,11 @@ msgstr "EuRGB60 (PAL60) モードを使用" msgid "Use Fullscreen" msgstr "全画面で表示" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "16進" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "パニックハンドラを使用" @@ -5729,11 +5718,11 @@ msgstr "ユーティリティ" msgid "V-Sync" msgstr "垂直同期 (V-Sync)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam Speed Hack" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "値" @@ -5741,7 +5730,7 @@ msgstr "値" msgid "Value:" msgstr "値:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "値:" @@ -5753,7 +5742,7 @@ msgstr "Verbosityモード" msgid "Vertex Streaming Hack" msgstr "Vertex Streaming Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "描画" @@ -5761,7 +5750,7 @@ msgstr "描画" msgid "Virtual" msgstr "Virtual" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "音量" @@ -5793,15 +5782,15 @@ msgstr "" msgid "Warning" msgstr "警告" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Warning - starting DOL in wrong console mode!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Warning - starting ELF in wrong console mode!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Warning - starting ISO in wrong console mode!" @@ -5882,19 +5871,19 @@ msgstr "疑似ワイドスクリーン化" msgid "Width" msgstr "範囲(横)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii コンソール" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NANDルート" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wiiセーブデータ (*.bin)|*.bin" @@ -5907,12 +5896,18 @@ msgstr "WiiWAD: ファイルからの読み込みができませんでした" msgid "Wiimote" msgstr "入力(Wii)" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "入力(Wii)" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wii リモコン %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wii リモコン接続中" @@ -5944,14 +5939,14 @@ msgstr "Windows Right" msgid "Word Wrap" msgstr "ワードラップ" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "動作中..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "メモリーカードへの書込を許可" @@ -5971,21 +5966,36 @@ msgstr "ファイルに出力" msgid "Write to Window" msgstr "ウィンドウに出力" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice failed: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 init failed: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 master voice creation failed: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice failed: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 init failed: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 master voice creation failed: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -6017,15 +6027,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "You can't close panes that have pages in them." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "ソフトが選ばれていません" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "名前が入力されていません!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "10進数・16進数・8進数いずれかの有効な値を入力してください。" @@ -6033,7 +6043,7 @@ msgstr "10進数・16進数・8進数いずれかの有効な値を入力して msgid "You must enter a valid profile name." msgstr "有効なプロファイル名を入力してください" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "変更を有効にするにはDolphinを再起動してください" @@ -6047,7 +6057,7 @@ msgstr "" "この問題を修正するために動作を停止しますか?\n" "\"いいえ\"を選択した場合、歪んだ音のままゲームが始まるでしょう" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6066,15 +6076,15 @@ msgstr "" "正しくは 0x%04x (このファイルは 0x%04llx)\n" "新しく作成しますか?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "03コードはサポートされていません" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero code unknown to dolphin: %08x" @@ -6132,29 +6142,24 @@ msgstr "" "\n" "よく分からなければ、チェックを入れないでください。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Reading Opcode from %x. Please report." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr " " -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "unknown flavor %d (expected %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "unknown message received" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute returned -1 on application run!" @@ -6169,3 +6174,42 @@ msgstr "zNear 補正値:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| (...もしくは)" + +#~ msgid "Could not create %s" +#~ msgstr "%s を作成することができませんでした" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "描画に使用するグラフィックスAPIを選択します。\n" +#~ "通常【Direct3D9】が最も高速ですが、【OpenGL】はより正確です。\n" +#~ "【Direct3D11】は2つの間のような動作になります。\n" +#~ "Direct3D9/Direct3D11 は Windows のみ使用可能です。\n" +#~ "\n" +#~ "よく分からなければ、【Direct3D11】を選択してください。" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "描画に使用するグラフィックスAPIを選択します。\n" +#~ "通常【Direct3D9】が最も高速ですが、【OpenGL】はより正確です。\n" +#~ "【Direct3D11】は2つの間のような動作になります。\n" +#~ "Direct3D9/Direct3D11 は Windows のみ使用可能です。\n" +#~ "\n" +#~ "よく分からなければ、【OpenGL】を選択してください。" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Reading Opcode from %x. Please report." diff --git a/Languages/po/ko.po b/Languages/po/ko.po index 9d786d2dae..5912cd7da7 100644 --- a/Languages/po/ko.po +++ b/Languages/po/ko.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Korean (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr " (표시하기에 너무 많은)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "게임 :" @@ -34,7 +34,7 @@ msgstr "게임 :" msgid "! NOT" msgstr "! NOT" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$s복사%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d 샘플들" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d 샘플들 (품질 수준 %d)" @@ -74,12 +74,12 @@ msgstr "%d 샘플들 (품질 수준 %d)" msgid "%s already exists, overwrite?" msgstr "%s가 이미 존재함, 덮어씁니까?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s 가 실패해서 취소되었습니다. 이미지가 손상된 것 같습니다." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -88,7 +88,7 @@ msgstr "" "%s 는 메모리카드로써 불러오기에 실패했습니다 \n" " 카드 파일 크기가 유효하지 않습니다 (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -97,7 +97,7 @@ msgstr "" "%s 는 메모리카드로써 로드하는데에 실패했습니다 \n" " 카드 크기가 유효하지 않습니다 (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -111,7 +111,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s가 열기에 실패했습니다" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -121,7 +121,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s 는 0 바이트 파일임" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s 는 이미 압축됨! 그것을 더이상 압축할 수 없습니다." @@ -179,11 +179,11 @@ msgstr "치트 매니저(&C)" msgid "&DSP Settings" msgstr "오디오 설정(&D)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "ISO 삭제(&D)..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "선택된 ISO들 삭제(&D)..." @@ -247,7 +247,7 @@ msgstr "일시정지(&P)" msgid "&Play" msgstr "실행(&P)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "속성(&P)" @@ -291,7 +291,7 @@ msgstr "보기(&V)" msgid "&Wiimote Settings" msgstr "위모트 설정(&W)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "위키(&W)" @@ -327,7 +327,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x 원본 (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 비트" @@ -343,7 +343,7 @@ msgstr "2.5x 원본 (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x 원본 (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 비트" @@ -359,7 +359,7 @@ msgstr "3x 원본 (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x 원본 (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 비트" @@ -371,7 +371,7 @@ msgstr "<여기에 이름을 넣으세요>" msgid "" msgstr "<발견된 해상도가 없음>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "<없음>" @@ -379,7 +379,7 @@ msgstr "<없음>" msgid "" msgstr "<키를 누르세요>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<시스템>" @@ -387,13 +387,13 @@ msgstr "<시스템>" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "넷플레이 윈도우가 이미 열려있습니다!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "현재 게임이 구동되고 있지 않습니다." @@ -414,21 +414,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-기반보드" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR 코드" @@ -476,14 +477,14 @@ msgstr "" "범인 코드:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" "액션 리플레이 에러: 비적합 크기 (%08x : address = %08x) 코드 추가 (%s)에" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -492,7 +493,7 @@ msgstr "" "액션 리플레이 에러: 비적합 크기 (%08x : address = %08x) 채우기와 슬라이드(%s)" "에" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -501,7 +502,7 @@ msgstr "" "액션 리플레이 에러: 비적합 크기 (%08x : address = %08x) 램 쓰기와 채우기 (%s)" "에" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -509,12 +510,12 @@ msgid "" msgstr "" "액션 리플레이 에러: 비적합 크기 (%08x : address = %08x) 포인터 (%s)에 쓰기에" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "액션 리플레이 에러: 비적합 크기 (%08x), 메모리 복사 (%s)에" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -524,27 +525,27 @@ msgstr "" "(%s)\n" "마스터 코드가 필요하지 않습니다. 마스터 코드를 사용하지 마세요." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "액션 리플레이 에러: 비적합 AR 코드 라인: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "액션 리플레이: 조건적 코드: 비적합 크기 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "액션 리플레이: 비적합 일반 코드 타입 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "액션 리플레이: 일반 코드 %i: 비적합 서브타입 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "액션 리플레이: 일반 코드 0: 비적합 서브타입 %08x (%s)" @@ -558,11 +559,11 @@ msgstr "어댑터:" msgid "Add" msgstr "추가" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "액션리플레이 코드 추가" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "패치 추가" @@ -570,9 +571,9 @@ msgstr "패치 추가" msgid "Add new pane" msgstr "새로운 창 추가" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "추가..." @@ -624,36 +625,36 @@ msgstr "버튼들 활성화에 필요한 아날로그 컨트롤 압력을 조정 msgid "Advanced" msgstr "고급" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "고급 설정" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "모든 GC/Wii 파일들 (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "모든 GC/Wii 이미지들 (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "모든 게임큐브 GCM 파일들 (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "모든 상태들 저장 (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "모든 Wii ISO 파일들 (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "모든 압축된 GC/Wii ISO 파일들 (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "모든 파일 (*.*)|*.*" @@ -673,19 +674,19 @@ msgstr "비등방성 필터링:" msgid "Anti-Aliasing:" msgstr "안티-앨리어싱:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "앱로더가 잘못된 크기임... 정말 앱로더입니까?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "앱로더가 파일로 부터 로드할 수 없음" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "앱로더:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "적용" @@ -699,7 +700,7 @@ msgstr "" "\n" "모르겠으면, (끄기)를 선택하세요." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "아랍어" @@ -708,7 +709,7 @@ msgstr "아랍어" msgid "Are you sure you want to delete \"%s\"?" msgstr "\"%s\" 를 정말로 지우고 싶습니까?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -716,7 +717,7 @@ msgstr "" "이 파일들을 정말로 지우고 싶습니까?\n" "그것들은 영원히 사라집니다!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "이 파일을 정말로 지우고 싶습니까? 그것은 영원히 사라집니다!" @@ -724,7 +725,12 @@ msgstr "이 파일을 정말로 지우고 싶습니까? 그것은 영원히 사 msgid "Arm JIT (experimental)" msgstr "Arm JIT (실험적)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (실험적)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "종횡비:" @@ -733,12 +739,12 @@ msgstr "종횡비:" msgid "At least one pane must remain open." msgstr "적어도 하나의 창이 열려 있어야합니다." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "오디오" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "오디오 백엔드:" @@ -746,7 +752,7 @@ msgstr "오디오 백엔드:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: AO 장치를 열기 에러.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "자동" @@ -785,16 +791,16 @@ msgstr "BP 레지스터" msgid "Back" msgstr "뒤로" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "백엔드 설정" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "백엔드:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "백그라운드 입력" @@ -812,15 +818,15 @@ msgid "Balance Board" msgstr "밸런스 보드" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr " 배너" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "배너 세부사항" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "배너:" @@ -832,7 +838,7 @@ msgstr "바" msgid "Basic" msgstr "기본" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "기본 설정" @@ -840,7 +846,7 @@ msgstr "기본 설정" msgid "Bass" msgstr "베이스" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "블럭 할당 테이블 체크섬을 실패했습니다" @@ -861,7 +867,7 @@ msgid "Blue Right" msgstr "파랑 오른쪽" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "아래" @@ -870,7 +876,7 @@ msgstr "아래" msgid "Bound Controls: %lu" msgstr "바운드 컨트롤들: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "고장남" @@ -878,7 +884,7 @@ msgstr "고장남" msgid "Browse" msgstr "폴더탐색" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "추가할 디렉토리 둘러보기" @@ -886,11 +892,11 @@ msgstr "추가할 디렉토리 둘러보기" msgid "Browse for an ISO directory..." msgstr "ISO 디렉토리 불러오기..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "출력 디렉토리 둘러보기" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "버퍼:" @@ -900,7 +906,7 @@ msgstr "버퍼:" msgid "Buttons" msgstr "버튼" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -923,7 +929,7 @@ msgstr "C-스틱" msgid "CP reg" msgstr "CP 레지" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU 에뮬레이터 엔진" @@ -945,17 +951,17 @@ msgstr "" "\n" "모르겠으면, 언체크 상태로 두세요." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "%02x 연결핸들에 의해 위모트를 찾을 수 없음" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "DVD_플러그인 - DVD-인터페이스에서 읽을 수 없음: 치명적 에러" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "취소" @@ -967,11 +973,11 @@ msgstr "취소" msgid "Cannot open %s" msgstr "%s를 열수 없음" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "이벤트들 미해결을 지닌 이벤트들을 등록하지 않을 수 없음" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -982,7 +988,7 @@ msgstr "" "%s\n" "는 유효한 게임큐브 메모리 카드 파일이 아닙니다" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -994,7 +1000,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "카탈로니아어" @@ -1002,7 +1008,7 @@ msgstr "카탈로니아어" msgid "Center" msgstr "중앙" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "변경" @@ -1014,11 +1020,11 @@ msgstr "디스크 변경(&D)..." msgid "Change Disc" msgstr "디스크 변경" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "게임 변경" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1034,11 +1040,11 @@ msgstr "표시를 z원거리 파라미터로 변경 (정정 후에)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "표시를 z근거리 파라미터로 변경 (정정 후에)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "에뮬레이터가 작동하고 있는 동안에 이 변경은 효과가 없을 겁니다!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "채팅" @@ -1046,47 +1052,47 @@ msgstr "채팅" msgid "Cheat Code" msgstr "치트 코드" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "치트 찾기" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "치트들 관리자" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "파티션 완전성 체크" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "파티션 완전성 체크중..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "중국어 (간소화)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "중국어 (전통)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "DVD 루트 디렉토리 선택:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "NAND 루트 디렉토리 선택:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "디폴트 ISO 선택:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "추가할 디렉토리 선택" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "열려는 파일 선택" @@ -1094,15 +1100,15 @@ msgstr "열려는 파일 선택" msgid "Choose a memory card:" msgstr "메모리 카드 선택:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" "앱로더로 사용할 파일을 선택: (디렉토리들로만 구성된 디스크들에게만 적용됨)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "압축해제할 폴더를 선택" @@ -1121,7 +1127,7 @@ msgstr "클래식" msgid "Clear" msgstr "깨끗이" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1131,7 +1137,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "닫기" @@ -1140,11 +1146,11 @@ msgstr "닫기" msgid "Co&nfigure..." msgstr "환경설정(&n)..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "코드 정보" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "코드:" @@ -1156,20 +1162,20 @@ msgstr "명령" msgid "Comment" msgstr "주석" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "주석:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "ISO 압축..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "선택된 ISO들 압축..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "ISO 압축하기" @@ -1187,8 +1193,8 @@ msgstr "환경설정" msgid "Configure Control" msgstr "컨트롤 설정" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "패드들 설정" @@ -1196,13 +1202,13 @@ msgstr "패드들 설정" msgid "Configure..." msgstr "환경설정..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "파일 덮어쓰기 확정" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "중지시 확인" @@ -1216,7 +1222,7 @@ msgstr "연결" msgid "Connect Balance Board" msgstr "밸런스 보드 연결" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "USB 키보드 연결" @@ -1241,7 +1247,7 @@ msgstr "위모트 3 연결" msgid "Connect Wiimote 4" msgstr "위모트 4 연결" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "연결중..." @@ -1261,7 +1267,7 @@ msgstr "컨트롤" msgid "Convert to GCI" msgstr "GCI 로 변환" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "복사 실패했습니다" @@ -1270,16 +1276,11 @@ msgstr "복사 실패했습니다" msgid "Copy to Memcard %c" msgstr "메모리카드 %c 에 복사" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "코어" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "%s 를 생성할 수 없었습니다" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "백엔드 %s 를 초기화할 수 없었습니다" @@ -1295,12 +1296,12 @@ msgstr "" "백업이 아님. 본래의 게임큐브와 Wii 디스크들은 대부분의 PC DVD 드라이브들에서 " "읽어질 수 없음을 아세요." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "%s ISO 파일을 인식할 수 없었습니다" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "%s 를 저장할 수 없었습니다" @@ -1324,11 +1325,11 @@ msgstr "" "에뮬레이터 디렉토리를 이동한 후에 이 메시지를 받고 있나요?\n" "그렇다면, 옵션에서 메모리카드 위치를 재지정해야 할겁니다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "확장자 'ini'에 대한 열린 명령을 발견할 수 없었습니다!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1336,17 +1337,17 @@ msgstr "" "코어를 초기화할 수 없었습니다\n" "당신의 환경설정을 체크하세요." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "카운트:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "국가:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "AR 코드 생성" @@ -1381,12 +1382,12 @@ msgstr "" msgid "Crossfade" msgstr "크로스페이드" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "wxFileSelector후에 현재 디렉토리가 %s에서 %s로 변경됨!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "사용자 지정 프로젝션 핵:" @@ -1394,11 +1395,11 @@ msgstr "사용자 지정 프로젝션 핵:" msgid "Custom Projection Hack Settings" msgstr "사용자 지정 프로젝션 핵 설정" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "일부 정 투영 파라미터들을 커스터마이즈." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "체코" @@ -1414,20 +1415,20 @@ msgstr "D-패드" msgid "DSP" msgstr "오디오" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP 에뮬레이터 엔진" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE 에뮬레이션 (빠름)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE 인터프리터 (느림)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE 리컴파일러" @@ -1435,11 +1436,11 @@ msgstr "DSP LLE 리컴파일러" msgid "DSP settings" msgstr "DSP 설정" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD 루트:" @@ -1451,15 +1452,15 @@ msgstr "DVD저수준읽기 - 치명적 에러: 볼륨에서 읽기를 실패했 msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVD저수준비암호화읽기 - 치명적 에러: 볼륨에서 읽기를 실패했습니다." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "댄스 매트" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "데이터 크기" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "날짜:" @@ -1488,16 +1489,16 @@ msgstr "디버깅" msgid "Decimal" msgstr "10진수의" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "ISO 압축해제..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "선택된 ISO들 압축해제..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "ISO 압축해제하기" @@ -1509,7 +1510,7 @@ msgstr "프레임 제한 감소" msgid "Default" msgstr "기본" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "기본 ISO:" @@ -1553,8 +1554,8 @@ msgstr "" msgid "Device" msgstr "장비" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "장비 설정" @@ -1562,15 +1563,12 @@ msgstr "장비 설정" msgid "Dial" msgstr "다이얼" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1631,7 +1629,7 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "디스크" @@ -1658,19 +1656,19 @@ msgstr "" msgid "Divide" msgstr "나누기" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "현재 에뮬레이션을 중단하고 싶습니까?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "돌비 프로 로직 II 디코더" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "돌핀" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1701,9 +1699,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1727,12 +1724,12 @@ msgstr "돌핀 에뮬된 위모트 환경설정" msgid "Dolphin FIFO" msgstr "돌핀 FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "돌핀 GC패드 환경설정" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "돌핀 TAS 동영상 (*.dtm)" @@ -1744,7 +1741,7 @@ msgstr "돌핀 위모트 환경설정" msgid "Dolphin at &Google Code" msgstr "돌핀 구글 코드(&G)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1752,7 +1749,7 @@ msgstr "" "돌핀이 어느 GC/Wii ISO도 찾을 수 없었습니다. 파일을 둘러보려면 여기를 더블클" "릭하세요..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1760,12 +1757,12 @@ msgstr "" "돌핀이 현재 모든 게임들을 숨기게 설정됨. 모든 게임들을 보려면 여기를 더블클" "릭..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "돌핀이 요청된 액션을 완수할 수 없었습니다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1791,11 +1788,11 @@ msgstr "%lu 코드들이 다운로드됨. (추가된 %lu)" msgid "Drums" msgstr "드럼" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "더미" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "오디오 덤프" @@ -1841,9 +1838,9 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "네덜란드어" @@ -1867,7 +1864,7 @@ msgstr "" "-- 최근에 돌핀 배포를 업그레이드했다면, 윈도우즈가 새로운 드라이버를 인식하" "는 관점에서 재부팅이 필요할 겁니다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "유럽" @@ -1883,14 +1880,10 @@ msgstr "편집" msgid "Edit ActionReplay Code" msgstr "액션리플레이 코드 편집" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "환경 편집" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "패치 편집" @@ -1899,8 +1892,8 @@ msgstr "패치 편집" msgid "Edit current perspective" msgstr "현재 관점 편집" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "편집..." @@ -1912,7 +1905,7 @@ msgstr "효과" msgid "Embedded Frame Buffer" msgstr "내장형 프레임 버퍼" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "에뮬 쓰레드가 이미 구동중임" @@ -1950,7 +1943,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "에뮬된 위모트" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "에뮬레이션 상태:" @@ -1974,15 +1967,15 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "AR 로깅 활성" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "블록 합치기 활성" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "바운딩 박스 계산 켜기" @@ -1990,27 +1983,27 @@ msgstr "바운딩 박스 계산 켜기" msgid "Enable Cache" msgstr "캐쉬 활성" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "치트 활성" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "듀얼 코어 활성" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "듀얼 코어 활성 (속도상승)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "아이들 스킵 활성" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "아이들 스킵 활성 (속도상승)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "MMU 활성" @@ -2018,7 +2011,7 @@ msgstr "MMU 활성" msgid "Enable Progressive Scan" msgstr "프로그레시브 스캔 활성" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "스크린 세이버 활성" @@ -2026,7 +2019,7 @@ msgstr "스크린 세이버 활성" msgid "Enable Speaker Data" msgstr "스피커 데이터를 켭니다" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "와이드스크린 활성" @@ -2048,7 +2041,7 @@ msgstr "" "\n" "모르겠으면, 1x를 선택하세요." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2083,7 +2076,7 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2091,18 +2084,18 @@ msgstr "" "The Legend of Zelda: Twilight Princess를 속도를 올리려면 켬. 다른 게임을 위해" "서는 끔." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "사용자 지정 프로젝션 핵 활성화" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" "5.1 서라운드를 이용한 돌비 프로 로직 II 에뮬레이션을 켭니다. OSX에서는 않됨." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2121,7 +2114,7 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2141,9 +2134,9 @@ msgstr "" msgid "End" msgstr "끝" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "영어" @@ -2166,21 +2159,20 @@ msgstr "엔트리 %d/%d" msgid "Entry 1/%d" msgstr "엔트리 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "같음" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "에러" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "선택된 언어 로딩 에러. 시스템 기본으로 돌아갑니다." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2228,7 +2220,7 @@ msgstr "" msgid "Export Failed" msgstr "내보내기 실패했습니다" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "파일 내보내기" @@ -2244,7 +2236,7 @@ msgstr "(입력) 기록 내보내기..." msgid "Export Save" msgstr "저장 내보내기" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Wii 저장 내보내기 (실험적)" @@ -2260,7 +2252,7 @@ msgstr "" msgid "Export save as..." msgstr "저장을 다른 이름으로 내보내기..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "확장" @@ -2276,44 +2268,44 @@ msgstr "추가 매개변수" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "추가 매개변수는 ''Metroid: Other M''에서만 유용합니다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "모든 파일들 압축풀기..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "앱로더 압축풀기..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "DOL 압축풀기..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "디렉토리 압축풀기..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "파일 압축 풀기..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "파티션 압축풀기..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "%s 압축풀기" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "모든 파일들 압축풀기" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "디렉토리 압축풀기" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "압축풀기..." @@ -2325,15 +2317,15 @@ msgstr "FIFO 바이트" msgid "FIFO Player" msgstr "FIFO 플레이어" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "프랑스" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST 크기:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "연결에 실패했습니다!" @@ -2341,11 +2333,15 @@ msgstr "연결에 실패했습니다!" msgid "Failed to download codes." msgstr "코드들 다운로드에 실패했습니다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "%s로 압축풀기 실패했습니다!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2398,7 +2394,7 @@ msgstr "banner.bin 읽기에 실패했습니다" msgid "Failed to read bk header" msgstr "bk 헤더 읽기에 실패했습니다" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2409,7 +2405,7 @@ msgstr "" "메모리카드가 잘렸을 지도\n" "파일위치:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2417,7 +2413,7 @@ msgstr "" "블럭 할당 테이블 백업을 올바르게 읽기에 실패했습니다\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2435,7 +2431,7 @@ msgstr "%d 파일로 부터 데이터 읽기 실패" msgid "Failed to read data from file: %s" msgstr "파일: %s 에서 데이터 읽기에 실패했습니다" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2443,7 +2439,7 @@ msgstr "" "디렉토리 백업을 올바르게 읽기에 실패했습니다\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2455,7 +2451,7 @@ msgstr "" msgid "Failed to read header" msgstr "헤더 읽기에 실패했습니다" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2468,7 +2464,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "디스크 이미지로 부터 유일한 ID를 읽기에 실패했습니다" @@ -2490,7 +2486,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "%s 에 대한 헤더 쓰기에 실패" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "페르시아어" @@ -2502,7 +2498,7 @@ msgstr "빠름" msgid "Fast Depth Calculation" msgstr "빠른 깊이 계산" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "MMU의 빠른 버전. 모든 게임에 대해 작동하지는 않는다." @@ -2538,7 +2534,7 @@ msgstr "" "파일을 열 수 없었습니다\n" "혹은 적합한 확장자가 아닙니다" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2551,7 +2547,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "파일이 메모리카드로 인식되지 않는다" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "파일이 압축되지 않었습니다" @@ -2560,11 +2556,11 @@ msgstr "파일이 압축되지 않었습니다" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: 알려지지 않은 열기 모드: 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "파일시스템" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "'ini'파일타입은 알려지지 않음! 열지 않겠습니다!" @@ -2592,7 +2588,7 @@ msgstr "강제 16:9" msgid "Force 4:3" msgstr "강제 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "콘솔을 NTSC-J로 강제시킴" @@ -2624,7 +2620,7 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2634,7 +2630,7 @@ msgstr "" "언체크로 두면, 돌핀 기본은 NTSC-U 이고 일본 게임들을 플레이할 때 자동적으로 " "이 세팅이 활성화됩니다." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2646,7 +2642,7 @@ msgstr "" msgid "Forward" msgstr "앞으로" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "앞 포트(UPnP)" @@ -2689,7 +2685,7 @@ msgstr "프레임 범위" msgid "Frame S&kipping" msgstr "프레임 스킵(&k)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "프레임제한:" @@ -2701,9 +2697,9 @@ msgstr "녹화할 프레임" msgid "Free Look" msgstr "자유로운 보기" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "프랑스어" @@ -2736,27 +2732,27 @@ msgstr "GC패드" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "게임 ID:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "게임이 이미 구동중입니다!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "게임이 구동중이지 않습니다!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "게임이 없습니다!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "게임-상세 설정" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "게임환경" @@ -2764,7 +2760,7 @@ msgstr "게임환경" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "게임큐브 게임저장 파일(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "게임큐브" @@ -2773,7 +2769,7 @@ msgid "Gamecube &Pad Settings" msgstr "게임큐브 패드 설정(&P)" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "게임큐브 메모리 카드들 (*.raw,*.gcp)" @@ -2781,12 +2777,12 @@ msgstr "게임큐브 메모리 카드들 (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "게임큐브 패드 설정" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko 코드" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2799,7 +2795,7 @@ msgstr "" "을 Sys 폴더에 위치시키고 돌핀을 재시작해서 원본 코드 핸들러를 사용해보세요.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "일반" @@ -2808,13 +2804,13 @@ msgstr "일반" msgid "General Settings" msgstr "일반 설정" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "독일어" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: 인덱스가 ar 코드 리스트 크기 %lu 보다 더 큽니다 " @@ -2827,7 +2823,7 @@ msgstr "그래픽" msgid "Graphics settings" msgstr "그래픽 설정" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "보다 큰" @@ -2848,7 +2844,7 @@ msgstr "" "\n" "모르겠으면, 이것을 체크로 두세요." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "그리스어" @@ -2872,11 +2868,11 @@ msgstr "기타" msgid "Hacks" msgstr "핵" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "헤더 체크섬 실패했습니다" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "히브리어" @@ -2888,7 +2884,7 @@ msgstr "높이" msgid "Help" msgstr "도움" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2908,7 +2904,7 @@ msgstr "" "\n" "사요나라!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2948,7 +2944,7 @@ msgid "Home" msgstr "홈" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "호스트" @@ -2957,11 +2953,11 @@ msgid "Hotkey Configuration" msgstr "단축키 설정" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "단축키들" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "헝가리어" @@ -2969,18 +2965,18 @@ msgstr "헝가리어" msgid "Hybrid Wiimote" msgstr "하이브리드 위모트" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: 알려지지 않은 티켓: %08x/%08x 에서 데이터를 얻으려 시도했" "습니다" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -2989,15 +2985,15 @@ msgstr "" "TitleID %016llx.\n" "돌핀은 이제 멈추려할 것입니다." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - 잘못된 대상" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL 설정" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3009,15 +3005,15 @@ msgstr "IR 포인터" msgid "IR Sensitivity:" msgstr "IR 감도:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO 세부사항" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "ISO 디렉토리들" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "이탈리아" @@ -3025,7 +3021,7 @@ msgstr "이탈리아" msgid "Icon" msgstr "아이콘" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3097,7 +3093,7 @@ msgstr "" "가져온 파일이 sav 확장자를 지닌다\n" "하지만 올바른 해더를 지니지 않는다" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "게임안" @@ -3106,7 +3102,7 @@ msgid "Increase Frame limit" msgstr "프레임 제한 증가" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "정보" @@ -3126,7 +3122,7 @@ msgstr "삽입" msgid "Insert Encrypted or Decrypted code here..." msgstr "암호화되거나 암호해독된 코드를 여기에 삽입하세요..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "SD 카드 삽입" @@ -3138,35 +3134,35 @@ msgstr "이름을 여기에 넣으시오..." msgid "Install WAD" msgstr "WAD 설치" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Wii 메뉴에 설치" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler 호출됨, 하지만 이 플랫폼은 아직 그것을 지원하지 않습" "니다." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "WAD 설치하기..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "완전성 체크 에러" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "완전성 체크 완료됨" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "완전성 체크가 완료되었습니다. 에러가 발견되지 않었습니다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3175,11 +3171,11 @@ msgstr "" "파티션 %d 에 대한 완전성 체크가 실패하였습니다. 당신의 덤프가 오염되었거나 잘" "못 패치된 것 같습니다." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "인터페이스" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "인터페이스 설정" @@ -3208,7 +3204,7 @@ msgstr "내부 해상도:" msgid "Interpreter (VERY slow)" msgstr "인터프리터 (매우 느림)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "소개화면" @@ -3217,7 +3213,7 @@ msgstr "소개화면" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "비적합 크기(%x) 혹은 마법 낱말 (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "비적합 값!" @@ -3225,16 +3221,16 @@ msgstr "비적합 값!" msgid "Invalid bat.map or dir entry" msgstr "비적합 bat.map 혹은 디렉토리 엔트리" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "비적합 이벤트 타입 %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "비적합 파일" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3261,34 +3257,36 @@ msgstr "비적합 찾기 스트링 (숫자로 변환될 수 없었습니다)" msgid "Invalid search string (only even string lengths supported)" msgstr "비적합 찾기 스트링 (짝수 길이 스트링만 지원됩니다)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "비적합 상태" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "이탈리아어" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "일본" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT 리컴파일러 (권장)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL 실험적 리컴파일러" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "일본어" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "한국" @@ -3310,8 +3308,9 @@ msgstr "윈도우를 맨위로 유지" msgid "Key" msgstr " [ 키 ]" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "한국어" @@ -3329,7 +3328,7 @@ msgstr "L 버튼" msgid "L-Analog" msgstr "L-아날로그" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "언어:" @@ -3338,7 +3337,7 @@ msgstr "언어:" msgid "Last %i" msgstr "최근 %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "지연:" @@ -3377,11 +3376,11 @@ msgstr "" "좌/우-클릭 옵션들 더.\n" "중-클릭 지우기." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "보다 더 적은" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "FPS로 제한" @@ -3473,11 +3472,11 @@ msgstr "최근 9 상태 로드" msgid "Load State..." msgstr "상태 로드..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Wii 시스템 메뉴 로드" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Wii 시스템 메뉴 %d %c 로드" @@ -3528,12 +3527,12 @@ msgstr "" msgid "Logger Outputs" msgstr "로거 출력" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "로깅" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "서버에 연결을 잃어버림!" @@ -3550,7 +3549,7 @@ msgstr "" "MD5 미스매치\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU 스피드 핵" @@ -3564,11 +3563,11 @@ msgstr "MadCatz 게임샤크 파일들(*.gcs)" msgid "Main Stick" msgstr "메인 스틱" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "제작사 ID:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "제작사:" @@ -3605,7 +3604,7 @@ msgid "Memory Byte" msgstr "메모리 바이트" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "메모리 카드" @@ -3617,7 +3616,7 @@ msgstr "" "메모리 카드 메니저 경고-사용하기 전에 백업을 만드세요, 고쳐져야 겠지만 훼손" "될 수 있습니다." -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3634,7 +3633,7 @@ msgstr "" "%s로\n" "오래된 파일을 이 새로운 위치로 복사하고 싶습니까?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "메모리카드 파일크기가 헤더 크기와 불일치합니다" @@ -3642,7 +3641,7 @@ msgstr "메모리카드 파일크기가 헤더 크기와 불일치합니다" msgid "Menu" msgstr "메뉴" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "마이크" @@ -3655,7 +3654,7 @@ msgstr "최소값" msgid "Misc" msgstr "기타" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "기타 설정" @@ -3680,11 +3679,11 @@ msgstr "" msgid "Monospaced font" msgstr "단일띄어쓰기 폰트" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "모션 플러스" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "모터" @@ -3803,15 +3802,15 @@ msgstr "NP 탭" msgid "NP Up" msgstr "NP 위" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "이름:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "이름:" @@ -3821,7 +3820,7 @@ msgstr "이름:" msgid "Native GCI files(*.gci)" msgstr "원본 GCI 파일들(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "새로운 스캔" @@ -3830,7 +3829,7 @@ msgstr "새로운 스캔" msgid "Next Page" msgstr "다음 페이지" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "다음 스캔" @@ -3838,11 +3837,11 @@ msgstr "다음 스캔" msgid "Nickname :" msgstr "별명 :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "국가 없음 (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "ISO나 WADS가 없음" @@ -3881,24 +3880,25 @@ msgstr "녹화된 파일이 없음" msgid "No save folder found for title %s" msgstr "%s 타이틀에 대한 저장 폴더가 없음" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "없음" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "노르웨이 북몰어" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "같지 않음" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "설정 안함" @@ -3907,11 +3907,11 @@ msgstr "설정 안함" msgid "Not a Wii save or read failure for file header size %x" msgstr "Wii 저장이 아니거나 파일 헤더 크기 %x 에 대한 읽기 실패 " -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "연결되지 않음" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "참고 사항" @@ -3932,7 +3932,7 @@ msgstr "알림" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "코드 번호:" @@ -3953,7 +3953,7 @@ msgstr "오브젝트" msgid "Object Range" msgstr "오브젝트 범위" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "끔" @@ -3961,7 +3961,7 @@ msgstr "끔" msgid "Offset:" msgstr "오프셋:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "온-스크린 메시지 보여주기" @@ -3979,11 +3979,11 @@ msgstr "%d 블럭들만 유용한" msgid "Open" msgstr "열기" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "담고 있는 폴더 열기(&c)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Wii 저장 폴더 열기(&s)" @@ -4013,17 +4013,13 @@ msgstr "OpenCL 텍스처 디코더" msgid "OpenMP Texture Decoder" msgstr "OpenMP 텍스처 디코더" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "옵션" @@ -4047,7 +4043,7 @@ msgstr "" msgid "Other" msgstr "다른 것들" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4063,11 +4059,11 @@ msgstr "출력" msgid "P&lay Recording..." msgstr "(입력) 기록 재생(&l)..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "패드" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "패드" @@ -4091,26 +4087,26 @@ msgstr "단락" msgid "Parameters" msgstr "매개변수들" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "파티션 %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "파티션이 존재하지 않습니다: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "패치" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "경로" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "일시정지" @@ -4123,7 +4119,7 @@ msgstr "무비의 끝에서 멈추기" msgid "Per-Pixel Lighting" msgstr "픽셀단위 광원" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "완벽한" @@ -4134,8 +4130,8 @@ msgstr "관점 %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr " 실행 " @@ -4147,7 +4143,7 @@ msgstr "(입력) 기록 재생" msgid "Play/Pause" msgstr "실행/일시정지" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "플레이가능" @@ -4155,11 +4151,11 @@ msgstr "플레이가능" msgid "Playback Options" msgstr "재생 옵션" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "플레이어" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "확인해주세요..." @@ -4171,36 +4167,36 @@ msgstr "저장하기전에 관점을 생성해 주세요." msgid "Plus-Minus" msgstr "플러스-마이너스" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "폴란드어" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "포트 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "포트 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "포트 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "포트 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "포트:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "포르투갈어" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "포르투갈어 (브라질)" @@ -4213,7 +4209,7 @@ msgstr "후-처리 효과:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "PlayController에 영상마무리가 미완성되었습니다. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "PlayWiimote에 영상 마무리가 미완성되었습니다. %u + %d > %u" @@ -4235,7 +4231,7 @@ msgstr "이전 페이지" msgid "Previous Page" msgstr "이전 페이지" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "이전 값" @@ -4259,8 +4255,8 @@ msgstr "캐쉬 제거(Purge)" msgid "Question" msgstr "질문" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "종료" @@ -4282,7 +4278,7 @@ msgstr "R-아날로그" msgid "RAM" msgstr "램" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "러시아" @@ -4321,7 +4317,7 @@ msgstr "리얼 위모트" msgid "Record" msgstr "녹화" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4373,10 +4369,10 @@ msgstr "목록 새로 고침" msgid "Refresh game list" msgstr "게임 목록 새로 고침" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "제거" @@ -4399,7 +4395,7 @@ msgstr "메인 윈도우에 렌더" msgid "Reset" msgstr "리셋" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "결과" @@ -4407,7 +4403,7 @@ msgstr "결과" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "개정판:" @@ -4420,17 +4416,17 @@ msgstr "오른쪽" msgid "Right Stick" msgstr "오른쪽 스틱" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "진동" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "러시아어" @@ -4504,12 +4500,12 @@ msgstr "슬롯 9 상태 저장" msgid "Save State..." msgstr "상태 저장..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "다른 이름으로 저장..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "압축된 GCM/ISO를 저장" @@ -4517,7 +4513,7 @@ msgstr "압축된 GCM/ISO를 저장" msgid "Save current perspective" msgstr "현재 관점을 저장" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "압축풀린 GCM/ISO를 저장" @@ -4530,16 +4526,16 @@ msgstr "%s 영상 상태저장이 손상되었습니다, 영상 기록 중지... msgid "Scaled EFB Copy" msgstr "스케일된 EFB 복사" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "스캐닝 %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "ISO들을 검사하기" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "스캐닝..." @@ -4555,11 +4551,11 @@ msgstr "스크롤 락" msgid "Search" msgstr "찾기" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "필터 찾기" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "하위폴더들 찾기" @@ -4582,12 +4578,12 @@ msgstr "섹션 %s를 SYSCONF에서 찾을 수 없음" msgid "Select" msgstr "선택" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "기록 파일 선택" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "설치할 Wii WAD 파일 선택" @@ -4609,19 +4605,19 @@ msgstr "가져올 저장 파일을 선택" msgid "Select floating windows" msgstr "유동적인 윈도우즈 선택" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "로드할 파일 선택" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "저장 파일을 선택" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "로드할 상태 선택" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "저장할 상태 선택" @@ -4643,7 +4639,7 @@ msgstr "" "\n" "모르겠으면, 자동을 선택하세요." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "선택된 컨트롤러 프로파일이 존재하지 않습니다" @@ -4667,39 +4663,28 @@ msgstr "" "모르겠으면, 데스크탑 해상도를 사용하세요.\n" "그래도 모르겠으면, 작동하는 최고 해상도를 사용하세요." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"내부적으로 사용할 그래픽 API를 선택합니다.\n" -"Direct3D 9은 보통 가장 빠릅니다. OpenGL이 더 정확하긴합니다. Direct3D 11은 " -"둘 사이쯤 입니다.\n" -"Direct3D 백엔드들은 윈도우즈들에서만 이용할 수 있다는 것을 알아두세요.\n" -"\n" -"모르겠으면, Direct3D 11을 사용하세요." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"내부적으로 어떤 그래픽 API를 사용할지 선택합니다.\n" -"Direct3D 9은 보통 가장 빠릅니다. OpenGL은 더 정확하긴 합니다. Dirct3D 11은 " -"둘 사이 어딘가입니다.\n" -"Direct3D 백엔드들은 윈도우즈들에서만 이용할 수 있다는 것을 알아두세요.\n" -"\n" -"모르겠으면, Direct3D 9을 사용하세요." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "보내기" @@ -4711,16 +4696,16 @@ msgstr "센서 바 위치:" msgid "Separator" msgstr "분리자" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "세르비아어" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "시리얼 포트 1 - 이것은 넷 어댑터같은 디바이스가 사용하는 포트이다" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "디폴트 ISO로 설정(&d)" @@ -4729,12 +4714,12 @@ msgstr "디폴트 ISO로 설정(&d)" msgid "Set as default Memcard %c" msgstr "기본 메모리카드 %c 로 설정" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive: 목록이 ar 코드 목록 크기 %lu 보다 더 큽니다" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4742,19 +4727,19 @@ msgstr "" "지연(ms 단위로)을 설정합니다. 더 높은 값은 오디오 튐을 줄일 지도 모릅니다. " "OpenAL 백엔드 전용." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "설정..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "흔들기" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "단축 이름:" @@ -4778,7 +4763,7 @@ msgstr "상태바 표시(&S)" msgid "Show &Toolbar" msgstr "툴바 표시(&T)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4818,7 +4803,7 @@ msgstr "JAP (일본 방식)" msgid "Show Korea" msgstr "한국" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "언어 보기:" @@ -4858,11 +4843,11 @@ msgstr "Wad" msgid "Show Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "게임을 멈추기 전에 확인 상자 보여주기." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4880,7 +4865,7 @@ msgstr "첫번째 블럭 보기" msgid "Show lag counter" msgstr "랙 계측기 보여주기" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4931,23 +4916,24 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "사이드웨이 위모트" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "간소화 중국어" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "크기" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "바이오스 스킵" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "DCBZ 청소 건너뛰기" @@ -4977,11 +4963,11 @@ msgstr "" msgid "Slot %i" msgstr "슬롯 %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "슬롯 A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "슬롯 B" @@ -4989,7 +4975,7 @@ msgstr "슬롯 B" msgid "Snapshot" msgstr "스냅샷" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "소프트웨어 렌더러" @@ -5004,27 +4990,27 @@ msgstr "" "디버깅 목적으로만 유용합니다.\n" "소프트웨어 렌더링을 활성을 정말 원합니까? 모르겠으면, '아니오'를 선택하세요." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "사운드 설정" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "사운드 백엔드 %s는 적합하지 않습니다." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "사운드 버퍼 생성 실패했습니다: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "스페이스" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "스페인어" @@ -5052,7 +5038,7 @@ msgstr "" "\n" "모르겠으면, 640x528를 선택하세요." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "디스크 전송율 속도 상승" @@ -5060,13 +5046,13 @@ msgstr "디스크 전송율 속도 상승" msgid "Square Stick" msgstr "스퀘어 스틱" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "표준 컨트롤러" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "시작" @@ -5082,7 +5068,7 @@ msgstr "(입력) 기록 시작(&c)" msgid "Start Recording" msgstr "(입력) 기록 시작" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "상태" @@ -5090,7 +5076,7 @@ msgstr "상태" msgid "State Saves" msgstr "상태 저장" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "운전대" @@ -5138,19 +5124,19 @@ msgstr "성공적으로 파일을 %s로 내보냈음" msgid "Successfully imported save files" msgstr "세이브 파일들을 성공적으로 가져왔음" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "스웨덴어" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "스윙" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "GPU 쓰레드 동기화" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5158,12 +5144,13 @@ msgstr "" "듀얼 코어 모드에서 랜덤 프리징들 막기를 돕기위해 GPU와 CPU 쓰레드들을 동기화" "합니다. (켬 = 호환성, 끔 = 빠름)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "시스템 언어:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "타이완" @@ -5194,7 +5181,7 @@ msgstr "테이블 오른쪽" msgid "Take Screenshot" msgstr "스크린샷 찍기" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "타루콩가 (봉고스)" @@ -5214,11 +5201,11 @@ msgstr "텍스처 캐쉬" msgid "Texture Format Overlay" msgstr "텍스처 포멧 오버레이" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD가 성공적으로 설치되었습니다" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "그 주소는 비적합 입니다" @@ -5226,13 +5213,13 @@ msgstr "그 주소는 비적합 입니다" msgid "The checksum was successfully fixed" msgstr "체크섬이 성공적으로 고쳐졌습니다" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "선택된 디렉토리는 이미 리스트에 있다" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5255,7 +5242,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "%s 파일이 이미 열려 있었습니다, 파일 헤더는 기록되지 않을 것입니다." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "당신이 기술한 파일 (%s)는 존재하지 않습니다" @@ -5287,7 +5274,7 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "당신이 복사하려는 저장은 비적합 파일 크기입니다." -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5295,19 +5282,19 @@ msgstr "" "선택된 언어는 당신의 시스템에서 지원되지 않습니다. 시스템 디폴트로 돌아갑니" "다." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "서버와 클라이언트의 넷플레이 버전들이 호환되지 않는다!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "서버가 가득참!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "서버가 응답했습니다: 그 게임은 현재 구동중이다!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "서버가 알려지지 않은 에러 메시지를 보냈음!" @@ -5316,15 +5303,15 @@ msgstr "서버가 알려지지 않은 에러 메시지를 보냈음!" msgid "The specified file \"%s\" does not exist" msgstr "기술된 \"%s\" 파일은 존재하지 않는다" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "값이 비적합 합니다" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "테마:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5332,7 +5319,7 @@ msgstr "" "00000001/00000002에 대한 티켓이 있어야한다. 당신의 NAND 덤프는 아마도 미완성" "이다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5340,7 +5327,7 @@ msgstr "" "이 설정들은 핵심 돌핀 설정들을 덮어씁니다.\n" "결정되지않은 것은 게임이 돌핀의 설정을 사용함을 뜻합니다." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5348,7 +5335,7 @@ msgstr "" "이 액션 리플레이 시뮬레이터는 액션 리플레이 스스로 수정한 코드를 지원하지 않" "는다." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "이것은 Wii 메뉴와 일부 게임들에서 느려짐을 유발할 수 있다." @@ -5372,7 +5359,7 @@ msgstr "" "\\n\n" "모르겠으면. 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5383,7 +5370,7 @@ msgstr "" "60 PAL 50 입니다). 대안으로, DSP (오디오 클릭들을 고치나 또한 게임에 따라서" "는 지속적인 노이즈를 유발할 수 있는)를 이용하는 오디오 병목을 사용합니다." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5395,7 +5382,7 @@ msgstr "" "두개 이상의 코어를 가진 PC들 상에서 주요 속도 향상들을 유발한다, 하지만 갑작" "스런 깨짐/결함들을 일으킬 수도 있다." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "이것은 수동으로 INI 환경파일을 수정하게 해줄겁니다" @@ -5404,12 +5391,12 @@ msgstr "이것은 수동으로 INI 환경파일을 수정하게 해줄겁니다" msgid "Threshold" msgstr "한계점" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "기울기" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr " 제목" @@ -5444,15 +5431,16 @@ msgid "Toggle IR" msgstr "IR 토글" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "위" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "전통 중국어" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "알려지지 않은 파일 타입을 로드시도했다." @@ -5472,7 +5460,7 @@ msgstr "" "효한 SYSCONF에서 읽기 시도\n" "위모트 bt id들은 유용하지 않습니다" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "터키어" @@ -5488,12 +5476,12 @@ msgstr "타입" msgid "UDP Port:" msgstr "UDP 포트:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP 위모트" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "알려지지 않음" @@ -5502,7 +5490,7 @@ msgstr "알려지지 않음" msgid "UNKNOWN_%02X" msgstr "알려지지않은_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "미국" @@ -5515,9 +5503,9 @@ msgstr "" "항목이 수정되지 않았습니다." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5542,11 +5530,11 @@ msgstr "상태 저장 풀기" msgid "Unexpected 0x80 call? Aborting..." msgstr "예상하지 못한 0x80 콜? 중단시킴..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "알려지지 않은" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "알려지지 않은 DVD 명령 %08x - 치명적 에러" @@ -5561,12 +5549,12 @@ msgstr "알려지지 않은 명령 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "알려지지 않은 엔트리 타입 %i SYSCONF (%s@%x)안에!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "id : %d의 알려지지 않은 메시지를 받었다" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5577,16 +5565,16 @@ msgstr "" msgid "Up" msgstr "위" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "업데이트" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "업라이트 위모트" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "EuRGB60 모드 (PAL60) 사용" @@ -5594,11 +5582,11 @@ msgstr "EuRGB60 모드 (PAL60) 사용" msgid "Use Fullscreen" msgstr "전체화면 사용" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "16진수 사용" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "패닉 핸들러 사용" @@ -5657,11 +5645,11 @@ msgstr "유틸리티" msgid "V-Sync" msgstr "수직-동기화" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam 스피드 핵" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "값" @@ -5669,7 +5657,7 @@ msgstr "값" msgid "Value:" msgstr "값:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "값:" @@ -5681,7 +5669,7 @@ msgstr "상세설명" msgid "Vertex Streaming Hack" msgstr "버텍스 스트리밍 핵" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "비디오" @@ -5689,7 +5677,7 @@ msgstr "비디오" msgid "Virtual" msgstr "가상" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "볼륨" @@ -5721,15 +5709,15 @@ msgstr "" msgid "Warning" msgstr "경고" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "경고 - 잘못된 콘솔 모드에서 DOL을 시작!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "경고 - 잘못된 콘솔 모드에서 ELF 시작!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "경고 - 잘못된 콘솔 모드에서 ISO 시작!" @@ -5829,19 +5817,19 @@ msgstr "와이드스크린 핵" msgid "Width" msgstr "너비" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii 콘솔" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND 루트:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii 저장 파일들 (*.bin)|*.bin" @@ -5854,12 +5842,18 @@ msgstr "WiiWAD: 파일로 부터 읽을 수 없었습니다" msgid "Wiimote" msgstr "위모트" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "위모트" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "위모트 %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "위모트가 연결됨" @@ -5891,14 +5885,14 @@ msgstr "윈도우즈 오른쪽" msgid "Word Wrap" msgstr "자동 줄바꿈" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "작동중..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "메모리카드를 기록합니다 (GC)" @@ -5918,21 +5912,36 @@ msgstr "파일에 쓰기" msgid "Write to Window" msgstr "윈도우에 쓰기" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice 실패: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 초기화 실패: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 매스터 보이스 생성 실패: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice 실패: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 초기화 실패: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 매스터 보이스 생성 실패: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF 레지" @@ -5963,15 +5972,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "당신은 페이지들을 가진 창을 닫을 수 없습니다." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "게임을 선택해야 합니다!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "이름을 넣어야 합니다!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "적합한 10진수나 16진수나 8진수 값을 넣어야 합니다." @@ -5979,7 +5988,7 @@ msgstr "적합한 10진수나 16진수나 8진수 값을 넣어야 합니다." msgid "You must enter a valid profile name." msgstr "적합한 프로파일 이름을 넣어야 합니다." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "변경이 적용되려면 돌핀을 재시작 해야 합니다." @@ -5993,7 +6002,7 @@ msgstr "" "문제를 고치기위해 지금 중단하시겠습니까?\n" "\"아니오\"를 선택하면, 오디오가 왜곡될 지도 모릅니다." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6012,15 +6021,15 @@ msgstr "" "0x%04x 이어야합니다 (하지만 0x%04llx 임) \n" "새로 생성하시겠습니까?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP 핵" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3 코드는 지원되지 않습니다" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "돌핀에 알려지지 않은 Zero 코드: %08x" @@ -6078,29 +6087,24 @@ msgstr "" "\n" "모르겠으면, 이것을 언체크로 두세요." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "앱로더 (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: %x 에서 옵코드 읽기. 보고해주세요." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "들" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "애플리케이션 구동상에서 wxExecute가 -1을 반환했습니다!" @@ -6115,3 +6119,42 @@ msgstr "z근거리 정정:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OR" + +#~ msgid "Could not create %s" +#~ msgstr "%s 를 생성할 수 없었습니다" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "내부적으로 사용할 그래픽 API를 선택합니다.\n" +#~ "Direct3D 9은 보통 가장 빠릅니다. OpenGL이 더 정확하긴합니다. Direct3D 11" +#~ "은 둘 사이쯤 입니다.\n" +#~ "Direct3D 백엔드들은 윈도우즈들에서만 이용할 수 있다는 것을 알아두세요.\n" +#~ "\n" +#~ "모르겠으면, Direct3D 11을 사용하세요." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "내부적으로 어떤 그래픽 API를 사용할지 선택합니다.\n" +#~ "Direct3D 9은 보통 가장 빠릅니다. OpenGL은 더 정확하긴 합니다. Dirct3D 11" +#~ "은 둘 사이 어딘가입니다.\n" +#~ "Direct3D 백엔드들은 윈도우즈들에서만 이용할 수 있다는 것을 알아두세요.\n" +#~ "\n" +#~ "모르겠으면, Direct3D 9을 사용하세요." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: %x 에서 옵코드 읽기. 보고해주세요." diff --git a/Languages/po/nb.po b/Languages/po/nb.po index 23ae8fcade..409a55a721 100644 --- a/Languages/po/nb.po +++ b/Languages/po/nb.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-17 20:01+0000\n" "Last-Translator: KHRZ \n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/projects/p/dolphin-" @@ -22,13 +22,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(for mange å vise)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Spill :" @@ -36,7 +36,7 @@ msgstr "Spill :" msgid "! NOT" msgstr "! IKKE" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -60,12 +60,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sKopier%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d samples" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d samples (kvalitetsnivå %d)" @@ -76,12 +76,12 @@ msgstr "%d samples (kvalitetsnivå %d)" msgid "%s already exists, overwrite?" msgstr "%s eksisterer allerede. Overskriv?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s mislykket i å skrubbe. Sannsynligvis er bildefilen korrupt." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -90,7 +90,7 @@ msgstr "" "%s mislyktes i å laste som et minnekort \n" " Minnekortstørrelse er ugyldig (0x%x byte)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -99,7 +99,7 @@ msgstr "" "%s mislyktes i å laste som et minnekort \n" " Minnekortstørrelse ugyldig (0x%x byte)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -113,7 +113,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s kunne ikke åpne" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s mislyktes: kr=%x" @@ -123,7 +123,7 @@ msgstr "%s mislyktes: kr=%x" msgid "%s is a 0 byte file" msgstr "%s er en 0-byte fil" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s er allerede komprimert! Kan ikke komprimere videre." @@ -181,11 +181,11 @@ msgstr "Jukse&kode-manager" msgid "&DSP Settings" msgstr "Innstillinger for &DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Slett ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Slett merkede ISO-filer..." @@ -249,7 +249,7 @@ msgstr "&Pause" msgid "&Play" msgstr "&Spill" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Egenskaper" @@ -293,7 +293,7 @@ msgstr "Vi&s" msgid "&Wiimote Settings" msgstr "Innstillinger for &Wiikontroller" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -329,7 +329,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Opprinnelig størrelse (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16-bit" @@ -345,7 +345,7 @@ msgstr "2.5x Opprinnelig størrelse (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Opprinnelig størrelse (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32-bit" @@ -361,7 +361,7 @@ msgstr "3x Opprinnelig størrelse (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Opprinnelig størrelse (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8-bit" @@ -373,7 +373,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -381,7 +381,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -389,13 +389,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Et NetPlay-vindu er allerede oppe!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Det kjøres ingen spill nå." @@ -408,6 +408,7 @@ msgstr "" " Du må manuelt koble til dine WiiMote-er." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -416,10 +417,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -450,13 +452,13 @@ msgstr "" "Hosten må ha valgt TCP-port åpen/forwarded!\n" "\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "" @@ -505,7 +507,7 @@ msgstr "" "Skyldig-kode:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -513,7 +515,7 @@ msgstr "" "Action Replay Feil: Ugyldig størrelse (%08x : addresse = %08x) i Legg Til " "Kode (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -522,7 +524,7 @@ msgstr "" "Action Replay Feil: Ugyldig størrelse (%08x : addresse = %08x) in Fyll Og " "Skli (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -531,7 +533,7 @@ msgstr "" "Action Replay Feil: Ugyldig størrelse (%08x : addresse = %08x) i Ram-skriv " "Og Fyll (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -540,12 +542,12 @@ msgstr "" "Action Replay Feil: Ugyldig størrelse (%08x : addresse = %08x) i Skriv Til " "Peker (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay Feil: Ugyldig verdi (%08x) i Minnekopi (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -555,27 +557,27 @@ msgstr "" "(%s)\n" " Master koder behøves ikke. Ikke bruk master koder." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay Feil: Ugyldig AR-kode linje: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Kondisjonsbasert Kode: Ugyldig Størrelse %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Ugyldig Normal Kodetype %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normal Kode %i: ugyldig Sub-type %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Kode 0: Ugyldig Sub-type %08x (%s)" @@ -589,11 +591,11 @@ msgstr "Adapter:" msgid "Add" msgstr "Legg Til" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Legg til Action Replay Kode" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Legg til Patch" @@ -601,9 +603,9 @@ msgstr "Legg til Patch" msgid "Add new pane" msgstr "Legg til ny rute" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Legg til..." @@ -655,36 +657,36 @@ msgstr "Juster analogkontrolltrykket som kreves for å aktivere knapper." msgid "Advanced" msgstr "Avansert" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Avanserte innstillinger" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Alle GameCube/Wii filer (elf, dol, gcm, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Alle GameCube/Wii avbildningsfiler/rip (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Alle GameCube GCM-filer (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Alle hurtiglagringene (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Alle Wii ISO-filer (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Alle komprimerte GC/Wii-filer (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Alle filer (*.*)|*.*" @@ -704,21 +706,21 @@ msgstr "Anisotropisk filtrering:" msgid "Anti-Aliasing:" msgstr "Kantutjevning:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" "Applikasjonslasteren er i feil størrelse... er dette virkelig en " "applikasjonslaster?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Applikasjonlaster klarte ikke å laste fra fil" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Applikasjonslaster:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Bruk" @@ -732,7 +734,7 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabisk" @@ -741,7 +743,7 @@ msgstr "Arabisk" msgid "Are you sure you want to delete \"%s\"?" msgstr "Er du sikker på at du vil slette \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -749,7 +751,7 @@ msgstr "" "Er du sikker på at du vil slette disse filene?\n" "De vil bli borte for alltid!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Er du sikker på at du vil slette denne filen?\n" @@ -759,7 +761,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "Arm JIT (eksperimentell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (eksperimentell)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Aspektforhold:" @@ -768,12 +775,12 @@ msgstr "Aspektforhold:" msgid "At least one pane must remain open." msgstr "Minst en rute må stå åpen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Audio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Audio Backend:" @@ -781,7 +788,7 @@ msgstr "Audio Backend:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Feil ved åpning av AO-device.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Automatisk" @@ -820,16 +827,16 @@ msgstr "BP-register" msgid "Back" msgstr "Tilbake" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Backend-innstillinger" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Backend:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Bakgrunnsinndata" @@ -847,15 +854,15 @@ msgid "Balance Board" msgstr "Balansebrett" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Bannerdetaljer" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Banner:" @@ -867,7 +874,7 @@ msgstr "Bar" msgid "Basic" msgstr "Grunnleggende" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Grunnleggende Innstillinger" @@ -875,7 +882,7 @@ msgstr "Grunnleggende Innstillinger" msgid "Bass" msgstr "Bass" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Blokkallokasjontabellsjekksum feilet" @@ -896,7 +903,7 @@ msgid "Blue Right" msgstr "Blå Høyre" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Bunn" @@ -905,7 +912,7 @@ msgstr "Bunn" msgid "Bound Controls: %lu" msgstr "Bundede Kontroller: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Ødelagt" @@ -913,7 +920,7 @@ msgstr "Ødelagt" msgid "Browse" msgstr "Bla etter" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Bla etter en mappe å legge til" @@ -921,11 +928,11 @@ msgstr "Bla etter en mappe å legge til" msgid "Browse for an ISO directory..." msgstr "Bla etter en ISO-mappe..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Bla etter lagringssted" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -935,7 +942,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Knapper" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -959,7 +966,7 @@ msgstr "C-joystick" msgid "CP reg" msgstr "CP-register" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU-emulatormotor" @@ -981,17 +988,17 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Kan ikke finne WiiMote fra koblingshandler %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Kan ikke lese fra DVD_Plugin - DVD-Interface: Fatal Feil" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Avbryt" @@ -1003,11 +1010,11 @@ msgstr "Avbryt" msgid "Cannot open %s" msgstr "Kan ikke åpne %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Kan ikke avregistrere events med events under behandling" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1018,7 +1025,7 @@ msgstr "" " %s\n" " er ikke en gyldig GameCube-minnekortfil." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1030,7 +1037,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Katalansk" @@ -1038,7 +1045,7 @@ msgstr "Katalansk" msgid "Center" msgstr "Senter" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Endre" @@ -1050,11 +1057,11 @@ msgstr "Endre &Disk..." msgid "Change Disc" msgstr "Endre Disk" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Endre Spill" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1070,11 +1077,11 @@ msgstr "Endringer signeres til zFar-parameteren (etter korreksjon)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Endringer signeres til zNear-parameteren (etter korreksjon)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Å endre dette vil ikke ha noen effekt mens emulatoren kjører!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1082,47 +1089,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Juksekode" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Juksekodesøk" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Juksekode Manager" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Sjekk partisjonsintegritet" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Sjekker integritet..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Kinesisk (Simplifisert)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Kinesisk (Tradisjonell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Velg en DVD-rotmappe" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Velg en NAND-rotmappe" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Velg en standard-ISO:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Velg en mappe å legge til" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Velg en fil å åpne" @@ -1130,7 +1137,7 @@ msgstr "Velg en fil å åpne" msgid "Choose a memory card:" msgstr "Velg et minnekort:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1138,8 +1145,8 @@ msgstr "" "Velg fil til å bruke som applikasjonslaster: (gjelder kun for disker laget " "fra mapper)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Velg mappen å ekstrahere til" @@ -1158,7 +1165,7 @@ msgstr "Klassisk" msgid "Clear" msgstr "Tøm" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1168,7 +1175,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Lukk" @@ -1177,11 +1184,11 @@ msgstr "Lukk" msgid "Co&nfigure..." msgstr "Ko&nfigurer..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Kodeinfo" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Kode:" @@ -1193,20 +1200,20 @@ msgstr "Kommando" msgid "Comment" msgstr "Kommentar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Kommentar:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Komprimer ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Komprimer valgte ISO-er..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Komprimerer ISO" @@ -1224,8 +1231,8 @@ msgstr "Konfigurer" msgid "Configure Control" msgstr "Konfigurer Kontroller" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Konfigurer Kontrollere" @@ -1233,13 +1240,13 @@ msgstr "Konfigurer Kontrollere" msgid "Configure..." msgstr "Konfigurer..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Bekreft filoverskriving" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Bekreft ved Stans" @@ -1253,7 +1260,7 @@ msgstr "Koble til" msgid "Connect Balance Board" msgstr "Koble til balansebrett" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Koble til USB-tastatur" @@ -1278,7 +1285,7 @@ msgstr "Koble til Wiikontroller 3" msgid "Connect Wiimote 4" msgstr "Koble til Wiikontroller 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Kobler til..." @@ -1298,7 +1305,7 @@ msgstr "Kontroll" msgid "Convert to GCI" msgstr "Konverter til GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopi feilet" @@ -1307,16 +1314,11 @@ msgstr "Kopi feilet" msgid "Copy to Memcard %c" msgstr "Kopier til minnekort %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Kjerne" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Kunne ikke lage %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Kunne ikke initialisere backend %s." @@ -1332,12 +1334,12 @@ msgstr "" "ikke en GC/Wii-backup. Vennligst merk at originale GameCube og Wii-disker " "ikke kan leses av de fleste PC-DVD-diskstasjoner." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Kunne ikke gjennkjenne ISO-fil %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Kunne ikke lagre %s" @@ -1368,11 +1370,11 @@ msgstr "" "I så tilfelle, må du kanskje re-spesifisere minnekortslokasjonen i " "innstillingene." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Kunne ikke finne åpningskommandoen for utvidelsen 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1380,17 +1382,17 @@ msgstr "" "Kunne ikke initialisere kjernen.\n" "Sjekk kofigurasjonen din." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Antall:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Land:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Lag AR-kode" @@ -1425,12 +1427,12 @@ msgstr "" msgid "Crossfade" msgstr "Kryssutfase" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Nåværende mappe endret fra %s til %s etter wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Selvdefinert projeksjons-hack" @@ -1438,11 +1440,11 @@ msgstr "Selvdefinert projeksjons-hack" msgid "Custom Projection Hack Settings" msgstr "Innstillinger for selvdefinerte projeksjons-hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Selvdefiner noen ortografisk projeksjons-parametere." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Tsjekkisk" @@ -1458,20 +1460,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "CPU Emulatormotor" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE-emulering (raskt)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE interpreter (tregt)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE re-kompilering" @@ -1479,11 +1481,11 @@ msgstr "DSP LLE re-kompilering" msgid "DSP settings" msgstr "Innstillinger for DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE på Separat Tråd" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD-rot:" @@ -1495,15 +1497,15 @@ msgstr "DVDLowRead - Fatal Feil: Mislyktes i å lese fra volum" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Fatal Feil: Mislyktes i å lese fra volum" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Dansematte" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Datastørrelse" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Dato:" @@ -1532,16 +1534,16 @@ msgstr "Debugging" msgid "Decimal" msgstr "Desimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Dekomprimer ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Dekomprimer valgte ISO-filer..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Dekomprimerer ISO" @@ -1553,7 +1555,7 @@ msgstr "Reduser bilder i sekundet begrensning" msgid "Default" msgstr "Standard" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Standard-ISO:" @@ -1597,8 +1599,8 @@ msgstr "" msgid "Device" msgstr "Device" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Innstillinger for enhet" @@ -1606,15 +1608,12 @@ msgstr "Innstillinger for enhet" msgid "Dial" msgstr "Ring" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1677,7 +1676,7 @@ msgstr "" "\n" "Hvis du er usikker så la denne være urørt!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disk" @@ -1704,20 +1703,20 @@ msgstr "" msgid "Divide" msgstr "Del" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Vil du stoppe pågående emulering?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II-dekoder" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1747,9 +1746,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "\n" @@ -1834,12 +1832,12 @@ msgstr "Dolphin emulert Wiikontroller konfigurasjon" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GC-kontroll konfigurasjon" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS-Filmer (*.dtm)" @@ -1851,7 +1849,7 @@ msgstr "Dolphin Wiimote Konfigurasjon" msgid "Dolphin at &Google Code" msgstr "Dolphin på &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1859,7 +1857,7 @@ msgstr "" "Dolphin kunne ikke finne noen GC/Wii ISO-filer. Dobbeltklikk her for å bla " "etter filer..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1867,12 +1865,12 @@ msgstr "" "Dolphin er satt til å gjemme alle spill. Dobbeltklikk her for å vise alle " "spill..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin kunne ikke fullføre den forespurte handligen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1898,11 +1896,11 @@ msgstr "Lastet ned %lu koder. (la til %lu)" msgid "Drums" msgstr "Trommer" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Juksedukke" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Dump Audio" @@ -1948,9 +1946,9 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Nederlansk" @@ -1974,7 +1972,7 @@ msgstr "" "%d. %d -- Hvis du nylig har oppdatert din Dolphin distribusjon, kreves " "sannsynligvis en reboot for at Windows skal detektere defn nye driveren." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1990,14 +1988,10 @@ msgstr "Endre" msgid "Edit ActionReplay Code" msgstr "Endre ActionReplay-kode" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Endre konfigurasjon" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Endre Lokale Overkjøringer" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Endre patch" @@ -2006,8 +2000,8 @@ msgstr "Endre patch" msgid "Edit current perspective" msgstr "Endre nåværende perspektiv" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Endre..." @@ -2019,7 +2013,7 @@ msgstr "Effekt" msgid "Embedded Frame Buffer" msgstr "Embedded Frame Buffer (EFB)" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Emulator-CPU-tråden kjører allerede" @@ -2057,7 +2051,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Emulert Wiikontroller" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Emulasjonsstatus:" @@ -2081,15 +2075,15 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Aktiver AR-logging" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Aktiver Block Merging" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Aktiver Bounding Box-kalkulasjoner" @@ -2097,27 +2091,27 @@ msgstr "Aktiver Bounding Box-kalkulasjoner" msgid "Enable Cache" msgstr "Aktiver cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Aktiver juksekoder" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Aktiver bruk av dobbelkjerne" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Aktiver bruk av dobbelkjerne (for bedre ytelse)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Aktiver Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Aktiver Idle Skipping (for bedre ytelse)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Aktiver MMU" @@ -2125,7 +2119,7 @@ msgstr "Aktiver MMU" msgid "Enable Progressive Scan" msgstr "Aktiver progressiv skanning" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Aktiver skjermbeskytter" @@ -2133,7 +2127,7 @@ msgstr "Aktiver skjermbeskytter" msgid "Enable Speaker Data" msgstr "Tillat høytaler data" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Aktiver widescreen" @@ -2154,7 +2148,7 @@ msgstr "" "\n" "Hvis usikker, velg 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2190,7 +2184,7 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2198,11 +2192,11 @@ msgstr "" "Aktiver dette for å bedre ytelsen i The Legend Of Zelda: Twillight Princess. " "Deaktiver for andre spill." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Tillater Selvdefinerte Projeksjons-hack" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2210,7 +2204,7 @@ msgstr "" "Aktiver Dolby Pro Logic II-emulering med 5.1 surround. Ikke tilgjengelig på " "OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2230,7 +2224,7 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2252,9 +2246,9 @@ msgstr "" msgid "End" msgstr "Slutt" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Engelsk" @@ -2277,21 +2271,20 @@ msgstr "Entry %d/%d" msgid "Entry 1/%d" msgstr "Entry 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Lik" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Feil" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "Feil ved lasting av valgt språk. Faller tilbake til systemstandarden." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2339,7 +2332,7 @@ msgstr "Eksporter alle Wii-lagringsfiler" msgid "Export Failed" msgstr "Eksportering mislyktes" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Eksporter fil" @@ -2355,7 +2348,7 @@ msgstr "Eksporter opptak..." msgid "Export Save" msgstr "Eksporter lagringsfil" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Eksporter Wii-lagringsfil (Eksperimentiell)" @@ -2371,7 +2364,7 @@ msgstr "Eksportering mislyktes" msgid "Export save as..." msgstr "Eksporter lagringsfil som..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Utvidelse" @@ -2387,44 +2380,44 @@ msgstr "Ekstra parameter" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Ekstra parameter nyttig kun i ''Metroid: Other M\"." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Ekstraher alle filer..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Ekstraher applikasjonslaster..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Ekstraher DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Ekstraher mappe..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Ekstraher fil..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Ekstraher partisjon..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Ekstraherer %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Ekstraherer alle filer" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Ekstraherer mappe" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Ekstraherer..." @@ -2436,15 +2429,15 @@ msgstr "FIFO-Byte" msgid "FIFO Player" msgstr "FIFO-spiller" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANKRIKE" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST-størrelse:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Tilkobling mislyktes!" @@ -2452,11 +2445,15 @@ msgstr "Tilkobling mislyktes!" msgid "Failed to download codes." msgstr "Nedlasting av koder mislyktes." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Ekstrahering til %s mislyktes!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2509,7 +2506,7 @@ msgstr "Kunne ikke lese banner.bin" msgid "Failed to read bk header" msgstr "Kunne ikke lese bk-header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2520,7 +2517,7 @@ msgstr "" " Minnekortet kan ha blitt trunktert\n" " Filposisjon:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2528,7 +2525,7 @@ msgstr "" "Kunne ikke lese blokkallokasjonstabell-backup'en korrekt\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2546,7 +2543,7 @@ msgstr "Kunne ikke lese data fra filen %d" msgid "Failed to read data from file: %s" msgstr "Kunne ikke lese data fra fil: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2554,7 +2551,7 @@ msgstr "" "Kunne ikke lese mappesti-backup'en korrekt\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2566,7 +2563,7 @@ msgstr "" msgid "Failed to read header" msgstr "Kunne ikke lese header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2579,7 +2576,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Kunne ikke lese header for fil %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Kunne ikke lese unik ID fra disk-bildet" @@ -2601,7 +2598,7 @@ msgstr "Kunne ikke skrive data til fil: %s" msgid "Failed to write header for %s" msgstr "Kunne ikke skrive header for %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Persisk" @@ -2613,7 +2610,7 @@ msgstr "Rask" msgid "Fast Depth Calculation" msgstr "Kjapp dyp kalkulasjon" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Rask versjon av MMU. Fungerer ikke for alle spill." @@ -2649,7 +2646,7 @@ msgstr "" "Filen kunne ikke åpnes\n" "eller har ingen gyldig utvidelse" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2662,7 +2659,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Filen kjennes ikke igjen som et minnekort" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Filen ikke komprimert" @@ -2671,11 +2668,11 @@ msgstr "Filen ikke komprimert" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Ukjent åpenmodus: 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Filsystem" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Filtypen 'ini' er ukjent! kan ikke åpnes!" @@ -2703,7 +2700,7 @@ msgstr "Tving 16:9" msgid "Force 4:3" msgstr "Tving 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Tving konsoll til NTSC-J" @@ -2736,7 +2733,7 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2746,7 +2743,7 @@ msgstr "" "Er dette avslått, benytter Dolphin NTSC-U som standard og går automatisk " "over til denne innstillingen når japanske spill spilles." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2758,7 +2755,7 @@ msgstr "" msgid "Forward" msgstr "Send frem" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Forward port (UPnP)" @@ -2801,7 +2798,7 @@ msgstr "Bilderekkevidde" msgid "Frame S&kipping" msgstr "Frame S&kipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Framelimit:" @@ -2813,9 +2810,9 @@ msgstr "Bilder til opptak:" msgid "Free Look" msgstr "Fri utkikk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Fransk" @@ -2848,27 +2845,27 @@ msgstr "GC-kontroll" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "Spill-ID:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Spillet kjører allerede!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Et spill kjører ikke!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Spill ikke funnet!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Spill-spesifikke Innstillinger" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Spillkonfigurasjon" @@ -2876,7 +2873,7 @@ msgstr "Spillkonfigurasjon" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube-lagringsfiler(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "GameCube" @@ -2885,7 +2882,7 @@ msgid "Gamecube &Pad Settings" msgstr "Innstillinger for &GameCube-kontroll" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "GameCube-minnekort (*.raw,*.gcp)" @@ -2893,12 +2890,12 @@ msgstr "GameCube-minnekort (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Innstillinger for GameCube-kontroll" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko-juksekoder" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2912,7 +2909,7 @@ msgstr "" "restart Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Generelt" @@ -2921,13 +2918,13 @@ msgstr "Generelt" msgid "General Settings" msgstr "Generelle innstillinger" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Tysk" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Indeksen er større enn AR-kodelistens størrelse %lu" @@ -2940,7 +2937,7 @@ msgstr "Grafikk" msgid "Graphics settings" msgstr "Innstillinger for grafikk" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Større enn" @@ -2962,7 +2959,7 @@ msgstr "" " \n" " Hvis usikker, la stå deaktivert." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Gresk" @@ -2986,11 +2983,11 @@ msgstr "Gitar" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Header-sjekksum feilet" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebraisk" @@ -3002,7 +2999,7 @@ msgstr "Høyde" msgid "Help" msgstr "Hjelp" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -3029,7 +3026,7 @@ msgstr "" "\n" "Sayonara!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3068,7 +3065,7 @@ msgid "Home" msgstr "Hjem" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Vert" @@ -3077,11 +3074,11 @@ msgid "Hotkey Configuration" msgstr "Konfigurer hurtigtaster" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Hurtigtaster" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Ungarsk" @@ -3089,16 +3086,16 @@ msgstr "Ungarsk" msgid "Hybrid Wiimote" msgstr "Hybrid Wiikontroller" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "IOCTL_ES_GETVIEWS: Forsøkte å få data fra en ukjent billett: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3109,15 +3106,15 @@ msgstr "" "\n" "Dolphin vil sannsynligvis krasje nå." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - dårlig destinasjon" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Innstillinger for IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3129,15 +3126,15 @@ msgstr "IR-peker" msgid "IR Sensitivity:" msgstr "IR-sensitivitet:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO-detaljer" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "ISO-mapper" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITALIA" @@ -3145,7 +3142,7 @@ msgstr "ITALIA" msgid "Icon" msgstr "Ikon" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3217,7 +3214,7 @@ msgstr "" "Importert fil har .sav-utvidelse\n" "men har ikke korrekt header" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "I spillet" @@ -3226,7 +3223,7 @@ msgid "Increase Frame limit" msgstr "Øke bilder i sekundet begrensning" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3246,7 +3243,7 @@ msgstr "Sett inn" msgid "Insert Encrypted or Decrypted code here..." msgstr "Sett inn Kryptert eller Dekryptert kode her..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Sett inn SD-kort" @@ -3258,33 +3255,33 @@ msgstr "Sett inn navn her..." msgid "Install WAD" msgstr "Installer WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Installer til Wii Meny" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "InstallExceptionHandler kalt, men denne plattformen støtter den ikke." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Installer WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Feil i Integritetssjekk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Integritetssjekk fullført" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Integritetssjekk fullført. Ingen feil ble oppdaget." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3293,11 +3290,11 @@ msgstr "" "Integritetssjekk for partisjonen %d feilet. Ditt spill-rip er mest " "sannsynlig korrupt, eller har blitt patchet feil." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Kontrollpanel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Innstillinger for kontrollpanel" @@ -3326,7 +3323,7 @@ msgstr "Intern bildeoppløsning:" msgid "Interpreter (VERY slow)" msgstr "Interpreter (VELDIG treg)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3335,7 +3332,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Ugyldig størrelse (%x) eller magisk ord (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Ugyldig verdi!" @@ -3343,16 +3340,16 @@ msgstr "Ugyldig verdi!" msgid "Invalid bat.map or dir entry" msgstr "Ugyldig bat.map eller mappesti" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Ugyldig event-type %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Ugyldig fil" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3379,34 +3376,36 @@ msgstr "Ugyldig søkestring (kunne ikke konverte til tall)" msgid "Invalid search string (only even string lengths supported)" msgstr "Ugyldig søkestring (bare strenger av partallslengde støttes)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Ugyldig hurtiglagring" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italiensk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPAN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT rekompilator (anbefalt)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL eksperimentell rekompilator" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japansk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3428,8 +3427,9 @@ msgstr "Hold vindu på toppen" msgid "Key" msgstr "Tast" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Koreansk" @@ -3447,7 +3447,7 @@ msgstr "L-Knappen" msgid "L-Analog" msgstr "Venstre-Analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Språk:" @@ -3456,7 +3456,7 @@ msgstr "Språk:" msgid "Last %i" msgstr "Siste %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Forsinkelse:" @@ -3495,11 +3495,11 @@ msgstr "" "Venstre/Høyre-klikk for flere alternativer.\n" "Middelklikk for å tømme." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Mindre enn" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Begrens med FPS (bilder-per-sekund)" @@ -3591,11 +3591,11 @@ msgstr "Last inn hurtiglagring siste 9" msgid "Load State..." msgstr "Åpne hurtiglagring..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Last inn Wii System Meny" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Last inn Wii System Meny %d %c" @@ -3644,12 +3644,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Logger utdata" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Logging" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Mistet koblingen til server!" @@ -3666,7 +3666,7 @@ msgstr "" "MD5 mismatch\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Ytelses-hack for MMU" @@ -3680,11 +3680,11 @@ msgstr "MadCatz Gameshark-filer(*.gcs)" msgid "Main Stick" msgstr "Hoved-joystick" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "Skaper-ID:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Skaper:" @@ -3721,7 +3721,7 @@ msgid "Memory Byte" msgstr "Memory Byte" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Minnekort" @@ -3733,7 +3733,7 @@ msgstr "" "Minnekort Manager ADVARSEL - Lag backup før du benytter, det skal bli " "fikset, men den kan tukle med lagringsfilene dine!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3750,7 +3750,7 @@ msgstr "" "%s\n" "Vil du kopiere den gamle filen til denne nye plasseringen?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "Minnekortfilstørrelse matcher ikke header-størrelsen" @@ -3758,7 +3758,7 @@ msgstr "Minnekortfilstørrelse matcher ikke header-størrelsen" msgid "Menu" msgstr "Meny" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mic" @@ -3771,7 +3771,7 @@ msgstr "Minimum" msgid "Misc" msgstr "Diverse" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Diverse Innstillinger" @@ -3796,11 +3796,11 @@ msgstr "" msgid "Monospaced font" msgstr "Mono-mellomrom tekst-font" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3919,15 +3919,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Opp" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Navn:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Navn:" @@ -3937,7 +3937,7 @@ msgstr "Navn:" msgid "Native GCI files(*.gci)" msgstr "Maskinvare-innfødte GCI-filer(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nytt Søk" @@ -3946,7 +3946,7 @@ msgstr "Nytt Søk" msgid "Next Page" msgstr "Neste Side" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Neste Søk" @@ -3954,11 +3954,11 @@ msgstr "Neste Søk" msgid "Nickname :" msgstr "Brukernavn :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Intet Land (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Ingen ISO- eller WAD-filer funnet" @@ -3997,24 +3997,25 @@ msgstr "Ingen opptaksfil" msgid "No save folder found for title %s" msgstr "Ingen lagringsmappe funnet for tittel %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Ingen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norsk Bokmål" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Ikke lik" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Ikke satt" @@ -4023,11 +4024,11 @@ msgstr "Ikke satt" msgid "Not a Wii save or read failure for file header size %x" msgstr "Ikke en Wii-lagringsfil, eller lesefeil for filheaderstørrelse %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Ikke tilkoblet" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notater" @@ -4048,7 +4049,7 @@ msgstr "Merknad" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Antall koder:" @@ -4069,7 +4070,7 @@ msgstr "Objekt" msgid "Object Range" msgstr "Objekt Radius" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Av" @@ -4077,7 +4078,7 @@ msgstr "Av" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "On-Screen Meldinger" @@ -4095,11 +4096,11 @@ msgstr "Kun %d blokker tilgjengelig" msgid "Open" msgstr "Åpne" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Åpne &tilholdsmappe" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Åpne Wii-&lagringsfil-mappe" @@ -4129,7 +4130,7 @@ msgstr "OpenCL Teksturdekoder" msgid "OpenMP Texture Decoder" msgstr "OpenMP Teksturdekoder" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4137,11 +4138,7 @@ msgstr "" "Åpner standard (read-only) konfigurasjon for dette spillet i en ekstern " "teksteditor." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "Åpner de valgte overkjøringene i en ekstern teksteditor." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Alternativer" @@ -4166,7 +4163,7 @@ msgstr "" msgid "Other" msgstr "Annet" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4182,11 +4179,11 @@ msgstr "Utdata" msgid "P&lay Recording..." msgstr "Spi&ll av opptak..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Kontroll" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Kontroll" @@ -4210,26 +4207,26 @@ msgstr "Paragraf" msgid "Parameters" msgstr "Parametere" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partisjon %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Partisjonen finnes ikke: &lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patcher" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Mappestier" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pause" @@ -4242,7 +4239,7 @@ msgstr "Pause på slutten av filmen" msgid "Per-Pixel Lighting" msgstr "Per-Pikselbelysning" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfekt" @@ -4253,8 +4250,8 @@ msgstr "Perspektiv %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Spill" @@ -4266,7 +4263,7 @@ msgstr "Spill av opptak" msgid "Play/Pause" msgstr "Spill/Pause" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Spillbar" @@ -4274,11 +4271,11 @@ msgstr "Spillbar" msgid "Playback Options" msgstr "Avspillingsalterntiver" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Spillere" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Vennligst bekreft..." @@ -4290,36 +4287,36 @@ msgstr "Vennligst lag et persektiv før du lagrer" msgid "Plus-Minus" msgstr "Pluss-Minus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polsk" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugisisk" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasilsk)" @@ -4332,7 +4329,7 @@ msgstr "postprosesseringseffekt:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Prematur filmslutt i PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Prematur filmslutt i PlayWiimote. %u + %d > %u" @@ -4354,7 +4351,7 @@ msgstr "Forrige side" msgid "Previous Page" msgstr "Forrige side" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Forrige verdi" @@ -4378,8 +4375,8 @@ msgstr "Tøm hurtigbuffer" msgid "Question" msgstr "Spørsmål" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Avslutt" @@ -4401,7 +4398,7 @@ msgstr "Høyre-analog" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSSLAND" @@ -4440,7 +4437,7 @@ msgstr "Ekte Wiikontrollere" msgid "Record" msgstr "Opptak" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Gjør input opptak" @@ -4493,10 +4490,10 @@ msgstr "Oppdater liste" msgid "Refresh game list" msgstr "Oppdater spilliste" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Fjern" @@ -4519,7 +4516,7 @@ msgstr "Spill i hovedvinduet" msgid "Reset" msgstr "Restart" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Resultater" @@ -4527,7 +4524,7 @@ msgstr "Resultater" msgid "Return" msgstr "Tilbake" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revisjon:" @@ -4540,18 +4537,18 @@ msgstr "Høyre" msgid "Right Stick" msgstr "Høyre Joystick" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Rumble" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Kjør DSP LLE på en dedikert CPU-tråd (ikke anbefalt: Kan forårsake frys)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russisk" @@ -4625,12 +4622,12 @@ msgstr "Lagre hurtiglagring nr 9" msgid "Save State..." msgstr "Hurtiglagring..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Lagre som..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Lagre komprimert GCM/ISO" @@ -4638,7 +4635,7 @@ msgstr "Lagre komprimert GCM/ISO" msgid "Save current perspective" msgstr "Lagre nåværende perspektiv" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Lagre dekomprimert GCM/ISO" @@ -4651,16 +4648,16 @@ msgstr "Save State-film %s er korrupt, opptak avsluttes..." msgid "Scaled EFB Copy" msgstr "Skalert EFB-kopi" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Søker i %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Søker etter ISO-filer" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Søker..." @@ -4676,11 +4673,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Søk" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Søkefilter" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Søk i Undermapper" @@ -4703,12 +4700,12 @@ msgstr "Seksjon %s ikke funnet i SYSCONF" msgid "Select" msgstr "Velg" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Velg opptaksfil" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Velg en Wii WAD-fil å innstallere" @@ -4730,19 +4727,19 @@ msgstr "Velg en lagringsfil å importere" msgid "Select floating windows" msgstr "Velg flytvindu" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Velg fil å laste" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Velg lagringsfil" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Velg en save state å laste" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Velg en save state å lagre" @@ -4764,7 +4761,7 @@ msgstr "" "\n" "Hvis usikker, velg Automatisk." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Valgt kontrolprofil eksisterer ikke" @@ -4788,39 +4785,28 @@ msgstr "" "Hvis usikker, velg skrivebordsoppløsningen din.\n" "Hvis fortsatt usikker, bruk den høyeste oppløsingen som fungerer for deg." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Velg hvilken grafikk-API som skal brukes internt.\n" -" Direct3D 9 er vanligvis den raskeste. OpenGL er mer nøyaktig. Direct3D 11 " -"ligger et sted imellom de to.\n" -" Merk at Direct3D bakendene kun er tilgjengelig på Windows.\n" -" \n" -" Hvis usikker, benytt Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Velg hvilken grafikk-API som skal brukes internt.\n" -" Direct3D 9 er vanligvis den raskeste. OpenGL er mer nøyaktig. Direct3D 11 " -"ligger et sted imellom de to.\n" -" Merk at Direct3D bakendene kun er tilgjengelig på Windows.\n" -" \n" -" Hvis usikker, benytt OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Send" @@ -4832,16 +4818,16 @@ msgstr "Sensorbarposisjon:" msgid "Separator" msgstr "Separatør" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbisk" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "Serieport 1 - Dette er porten enheter som nettadapter bruker" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Sett som &standard-ISO" @@ -4850,12 +4836,12 @@ msgstr "Sett som &standard-ISO" msgid "Set as default Memcard %c" msgstr "Sett som standard Minnekort %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive: indeks er større enn AR-kodelistestørrelsen %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4863,19 +4849,19 @@ msgstr "" "Sett forsinkelsen (i ms). Høyere verdier kan redusere audioknaking. Kun for " "OpenAL backend." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Innstillinger..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Kan ikke lage innstillingsfil" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Rist" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Kortnavn:" @@ -4899,7 +4885,7 @@ msgstr "Vis &Statusbar" msgid "Show &Toolbar" msgstr "Vis &Verktøylinje" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Vis Standardverdier" @@ -4939,7 +4925,7 @@ msgstr "Vis JAP" msgid "Show Korea" msgstr "Vis Korea" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Vis Språk:" @@ -4979,11 +4965,11 @@ msgstr "Vis WAD" msgid "Show Wii" msgstr "Vis Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Vis en bekreftelsesboks før spill stoppes." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -5002,7 +4988,7 @@ msgstr "Vis første blokk" msgid "Show lag counter" msgstr "Vis lagteller" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5053,23 +5039,24 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Sideveis-pekende Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Simplifisert Kinesisk" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Størrelse" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Dropp BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Hopp over DCBZ-tømming" @@ -5099,11 +5086,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -5111,7 +5098,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Stillbilde" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Software-renderer" @@ -5126,27 +5113,27 @@ msgstr "" "Det er kun nyttig for å debugge.\n" "Vil du virkelig benytte programvarerendering? Hvis usikker, velg 'nei'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Innstillinger for Audio" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Audio backend %s er ugyldig" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Laging av lydbuffer mislyktes: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Mellomrom" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spansk" @@ -5173,7 +5160,7 @@ msgstr "" "\n" "Hvis usikker, velg 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Øk diskoverføringshatighet" @@ -5181,13 +5168,13 @@ msgstr "Øk diskoverføringshatighet" msgid "Square Stick" msgstr "Kvadrat-joystick" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Standardkontroller" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5203,7 +5190,7 @@ msgstr "Start &opptak" msgid "Start Recording" msgstr "Start opptak" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Hurtiglagring" @@ -5211,7 +5198,7 @@ msgstr "Hurtiglagring" msgid "State Saves" msgstr "Hurtiglagringsfiler" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Ratt" @@ -5260,19 +5247,19 @@ msgstr "Eksportering av fil til %s vellykket" msgid "Successfully imported save files" msgstr "Importering av lagringsfiler vellykket" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Svensk" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Sving" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Synkroniser GPU-tråd" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5280,12 +5267,13 @@ msgstr "" "Synkroniserer GPU- og CPU-trådene for å hindre tilfeldige krasj i " "dobbelkjernemodus. (PÅ = kompatibel, AV = raskt)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Systemspråk:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5316,7 +5304,7 @@ msgstr "Tabell Høyre" msgid "Take Screenshot" msgstr "Ta skjermbilde" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongoer)" @@ -5336,11 +5324,11 @@ msgstr "Tekstur-cache" msgid "Texture Format Overlay" msgstr "Teksturformat overlegg" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "Installasjon av WAD-fil var vellykket" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Adressen er ugyldig" @@ -5348,13 +5336,13 @@ msgstr "Adressen er ugyldig" msgid "The checksum was successfully fixed" msgstr "Fiksing av sjekksummen var vellykket" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Den valgte mappen finnes allerede i listen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5377,7 +5365,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Filen %s er allerede åpen, fil-headeren vil ikke bli skrevet." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Filen du spesifiserte (%s) eksisterer ikke" @@ -5410,26 +5398,26 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "Lagringsfilen du forsøker å åpne har en ugyldig filstørrelse" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" "Det valgte språket støttes ikke av ditt system. Går tilbake til standard." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Serverens og klientens NetPlay-versjoner er ukompitable!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Serveren er full!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Serveren responderte: Spillet kjører!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Serveren sendte en ukjent feilmelding!" @@ -5438,22 +5426,22 @@ msgstr "Serveren sendte en ukjent feilmelding!" msgid "The specified file \"%s\" does not exist" msgstr "Den spesifiserte filen \"%s\" eksisterer ikke" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Verdien er ugyldig" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "" "Det må være en billett for 00000001/00000002. Din NAND-dump er ukomplett." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5461,7 +5449,7 @@ msgstr "" "Disse innstillingene overstyrer Dolphins kjerneinnstillinger.\n" "Ubestemt betyr at spillet bruker Dolphins kjerneinnstillinger." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5469,7 +5457,7 @@ msgstr "" "Denne Action Replay-simulatoren støtter ikke koder som modifiserer selve " "Action Replay." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Dette kan føre til ytelsesreduksjon i Wii Meny og noen spill." @@ -5490,7 +5478,7 @@ msgstr "" "for å flytte raskere og SHIFT + 9 for å flytte saktere). Trykk SHIFT + R for " "å resette kameraet. Hvis usikker, la stå deaktivert." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5501,7 +5489,7 @@ msgstr "" "NTSC og 50 for PAL). Alternativt kan du bruke innstillingen Audio (kan fikse " "diverse klikkelyder, men kan også forårsake konstant støy i enkelte spill)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5513,7 +5501,7 @@ msgstr "" "Øker ytelsen på datamaskiner med mer enn én kjerne,\n" "men kan også føre til feil/krasj." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Dette lar deg manuelt endre INI-konfigurasjonsfilen" @@ -5522,12 +5510,12 @@ msgstr "Dette lar deg manuelt endre INI-konfigurasjonsfilen" msgid "Threshold" msgstr "Terskel" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Tilt" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Tittel" @@ -5562,15 +5550,16 @@ msgid "Toggle IR" msgstr "Slå på IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Topp" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Tradisjonell Kinesisk" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Forsøkte å laste en ukjent filtype." @@ -5590,7 +5579,7 @@ msgstr "" "Forsøker å lese fra ugyldig SYSCONF\n" "Wiikontroller bt ids er ikke tilgjengelig" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Tyrkisk" @@ -5606,12 +5595,12 @@ msgstr "Type" msgid "UDP Port:" msgstr "UDP Port:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "UKJENT" @@ -5620,7 +5609,7 @@ msgstr "UKJENT" msgid "UNKNOWN_%02X" msgstr "UKJENT_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5633,9 +5622,9 @@ msgstr "" " Modifiseringen ble ikke gjort." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5660,11 +5649,11 @@ msgstr "Angre hurtiglagring" msgid "Unexpected 0x80 call? Aborting..." msgstr "Uforventet 0x80 kall? Avbryter..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Ukjent" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Ukjent DVD-kommando%08x - fatal feil" @@ -5679,12 +5668,12 @@ msgstr "Ukjent kommando 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Ukjent entry-type %i in SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Ukjent melding mottatt med ID: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "Ukjent melding mottatt med ID: %d fra spiller: %d Sparker spiller!" @@ -5694,16 +5683,16 @@ msgstr "Ukjent melding mottatt med ID: %d fra spiller: %d Sparker spiller!" msgid "Up" msgstr "Opp" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Oppdater" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Mot-skjerm-pekende Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Bruk EuRGB60-modus (PAL60)" @@ -5711,11 +5700,11 @@ msgstr "Bruk EuRGB60-modus (PAL60)" msgid "Use Fullscreen" msgstr "Bruk fullskjerm" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Bruk Hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Bruk panikkadvarslere" @@ -5783,11 +5772,11 @@ msgstr "Verktøyet" msgid "V-Sync" msgstr "Vertikal synkronisering" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam Speed Hack" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Verdi" @@ -5795,7 +5784,7 @@ msgstr "Verdi" msgid "Value:" msgstr "Verdi:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Verdi:" @@ -5807,7 +5796,7 @@ msgstr "Verbøsitet" msgid "Vertex Streaming Hack" msgstr "Vertex Streaming Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Video" @@ -5815,7 +5804,7 @@ msgstr "Video" msgid "Virtual" msgstr "Virtuell" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volum" @@ -5847,15 +5836,15 @@ msgstr "" msgid "Warning" msgstr "Advarsel" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Advarsel - starter DOL i feil konsollmodus!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Advarsel - starter ELF i feil konsollmodus!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Advarsel - starter ISO i feil konsollmodus!" @@ -5957,19 +5946,19 @@ msgstr "Widescreen Hack" msgid "Width" msgstr "Bredde" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii-konsoll" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND-rot:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii-lagringsfiler (*.bin)|*.bin" @@ -5982,12 +5971,18 @@ msgstr "WiiWAD: Kunne ikke lese fra fil" msgid "Wiimote" msgstr "Wiikontroller" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiikontroller" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiikontroller %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiikontroller tilkoblet" @@ -6019,14 +6014,14 @@ msgstr "Windows Høyre" msgid "Word Wrap" msgstr "Ordkrumning" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Arbeider..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Skriv til minnekortene (GC)" @@ -6046,21 +6041,36 @@ msgstr "Skriv til fil" msgid "Write to Window" msgstr "Skriv til vindu ->" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice mislyktes: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2-initialisering mislyktes: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 master voice-laging mislyktes: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice mislyktes: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2-initialisering mislyktes: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 master voice-laging mislyktes: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF-register" @@ -6091,15 +6101,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Du kan ikke lukke panelene som har sider/faner i dem." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Du må velge et spill!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Du må skrive inn et navn!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Du må skrive inn en gyldig desimal, hexadesimal eller octal verdi." @@ -6107,7 +6117,7 @@ msgstr "Du må skrive inn en gyldig desimal, hexadesimal eller octal verdi." msgid "You must enter a valid profile name." msgstr "Du må skrive inn et gyldig profilnavn." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Du må restarte Dolphin for at endringen skal tre i kraft." @@ -6121,7 +6131,7 @@ msgstr "" " Vil du stoppe nå for å fikse problemet=\n" " Hvis du velger \"Nei\", kan audio ha knasing." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6140,15 +6150,15 @@ msgstr "" "Den skal være 0x%04x (men er 0x%04llx)\n" "Ønsker du å generere en ny en?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP-hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3-kode støttes ikke" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero-kode ukjent for Dolphin: %08x" @@ -6206,29 +6216,24 @@ msgstr "" "\n" "Hvis usikker, la stå avslått." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "applikasjonslaster (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Leser Opcode fra %x. Vennligst rapporter." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "Ukjent smak %d (forventet %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "Ukjent melding mottatt" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute returnerte -1 på applikasjonskjøring!" @@ -6243,3 +6248,48 @@ msgstr "zNear korreksjon: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| ELLER" + +#~ msgid "Could not create %s" +#~ msgstr "Kunne ikke lage %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Endre Lokale Overkjøringer" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "Åpner de valgte overkjøringene i en ekstern teksteditor." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Velg hvilken grafikk-API som skal brukes internt.\n" +#~ " Direct3D 9 er vanligvis den raskeste. OpenGL er mer nøyaktig. Direct3D " +#~ "11 ligger et sted imellom de to.\n" +#~ " Merk at Direct3D bakendene kun er tilgjengelig på Windows.\n" +#~ " \n" +#~ " Hvis usikker, benytt Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Velg hvilken grafikk-API som skal brukes internt.\n" +#~ " Direct3D 9 er vanligvis den raskeste. OpenGL er mer nøyaktig. Direct3D " +#~ "11 ligger et sted imellom de to.\n" +#~ " Merk at Direct3D bakendene kun er tilgjengelig på Windows.\n" +#~ " \n" +#~ " Hvis usikker, benytt OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Leser Opcode fra %x. Vennligst rapporter." diff --git a/Languages/po/nl.po b/Languages/po/nl.po index 6e39f4daf6..f65bbb1eb9 100644 --- a/Languages/po/nl.po +++ b/Languages/po/nl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-15 14:49+0000\n" "Last-Translator: Garteal \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/dolphin-emu/" @@ -21,13 +21,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(te veel om weer te geven)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " Spel :" @@ -35,7 +35,7 @@ msgstr " Spel :" msgid "! NOT" msgstr "! NIET" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -59,12 +59,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sKopieer%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d samples" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d samples (kwaliteitsniveau %d)" @@ -75,13 +75,13 @@ msgstr "%d samples (kwaliteitsniveau %d)" msgid "%s already exists, overwrite?" msgstr "%s bestaat al, wilt u het vervangen?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" "Het lukte niet om %s te comprimeren. Waarschijnlijk is de image corrupt." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -90,7 +90,7 @@ msgstr "" "%s kon niet worden geladen als een geheugenkaart\\n\n" "Bestandsgrootte op kaart is onjuist (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -99,7 +99,7 @@ msgstr "" "%s kon niet worden geladen als een geheugenkaart\\n\n" "Kaartgrootte is onjuist (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -114,7 +114,7 @@ msgstr "" msgid "%s failed to open" msgstr "Kon %s niet openen" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s gefaald: kr=%x" @@ -124,7 +124,7 @@ msgstr "%s gefaald: kr=%x" msgid "%s is a 0 byte file" msgstr "%s is een 0 byte bestand" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s is al gecomprimeerd! Kan niet nog meer comprimeren." @@ -182,11 +182,11 @@ msgstr "&Cheats Manager" msgid "&DSP Settings" msgstr "&DSP Instellingen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Verwijder ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Verwijder geselecteerde ISOs..." @@ -250,7 +250,7 @@ msgstr "&Pauze" msgid "&Play" msgstr "&Speel " -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Eigenschappen " @@ -294,7 +294,7 @@ msgstr "&Bekijk " msgid "&Wiimote Settings" msgstr "&Wiimote Instellingen " -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -330,7 +330,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Native (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -346,7 +346,7 @@ msgstr "2.5x Native (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Native (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -362,7 +362,7 @@ msgstr "3x Native (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Native (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -374,7 +374,7 @@ msgstr " " msgid "" msgstr " " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -382,7 +382,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -390,13 +390,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Er is al een NetPlay venster geopend!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Er staat geen spel aan." @@ -409,6 +409,7 @@ msgstr "" "Koppel je Wiimotes handmadig aan het systeem." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -417,10 +418,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -440,13 +442,13 @@ msgstr "" "\n" "Je moet de TCP poort forwarden voor het hosten!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR Codes" @@ -495,7 +497,7 @@ msgstr "" "Verantwoordelijke code:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -503,7 +505,7 @@ msgstr "" "Action Replay Fout: Verkeerde grootte (%08x : address = %08x) in Voeg Code " "Toe (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -512,7 +514,7 @@ msgstr "" "Action Replay Fout: Verkeerde grootte (%08x : adres = %08x) in Vul en Schuif " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -521,7 +523,7 @@ msgstr "" "Action Replay Fout: Verkeerde grootte (%08x : adres = %08x) in Ram Schrijf " "En Vul (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -530,12 +532,12 @@ msgstr "" "Action Replay Fout: Verkeerde grootte (%08x : adres = %08x) in Schrijf Naar " "Pointer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay Fout: Verkeerde waarde (%08x) in Geheugen Kopie (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -545,27 +547,27 @@ msgstr "" "geimplementeerd (%s)\\n\n" "Master codes zijn niet nodig. Gebruik geen master codes." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay Fout: foutive AR code regel: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Conditionele Code: Onjuiste Grootte %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Onjuiste Normal Code Type %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normal Code %i: Onjuist subtype %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Code 0: Onjuist Subtype %08x (%s)" @@ -579,11 +581,11 @@ msgstr "Adapter:" msgid "Add" msgstr "Voeg toe" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Voeg een ActionReplay Code toe" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Voeg een Patch toe" @@ -591,9 +593,9 @@ msgstr "Voeg een Patch toe" msgid "Add new pane" msgstr "Voeg een nieuwe paneel toe" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Voeg toe..." @@ -646,36 +648,36 @@ msgstr "" msgid "Advanced" msgstr "Geavanceerd" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Geavanceerde Instellingen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Alle GC/Wii bestanden (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Alle GC/Wii images (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Alle Gamecube GCM bestanden (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Alle Save Staten (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Alle Wii ISO Bestanden (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Alle gecomprimeerde GC/Wii ISO-bestanden (GCZ)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Alle Bestanden (*.*)|*.*" @@ -695,19 +697,19 @@ msgstr "Anisotropic Filtering:" msgid "Anti-Aliasing:" msgstr "Anti-Aliasing:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Apploader heeft de verkeerde grootte.. is het wel echt een Apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader kan het bestand niet laden" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader :" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Toepassen" @@ -721,7 +723,7 @@ msgstr "" "\n" "In geval van twijfel selecteer (uit)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabisch" @@ -730,7 +732,7 @@ msgstr "Arabisch" msgid "Are you sure you want to delete \"%s\"?" msgstr "Weet je zeker dat je \"%s\"? wilt verwijderen?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -738,7 +740,7 @@ msgstr "" "Weet je zeker dat je dit bestand wilt verwijderen?\n" "Deze gegevens zijn niet terug te halen!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Weet je zeker dat je dit bestand wilt verwijderen? Deze gegevens zijn niet " @@ -748,7 +750,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "Arm JIT (Experimenteel)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (Experimenteel)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Beeldverhouding:" @@ -757,12 +764,12 @@ msgstr "Beeldverhouding:" msgid "At least one pane must remain open." msgstr "Er moet tenminste één paneel open blijven." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Geluid" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Geluid Backend:" @@ -770,7 +777,7 @@ msgstr "Geluid Backend:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Fout bij het openen van een AO toestel. \n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -809,16 +816,16 @@ msgstr "BP register " msgid "Back" msgstr "Terug" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Backend Instellingen" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Geluids backend:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Achtergrond invoer" @@ -836,15 +843,15 @@ msgid "Balance Board" msgstr "Balance Board" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Banner Details" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Banner:" @@ -856,7 +863,7 @@ msgstr "Balk" msgid "Basic" msgstr "Basis" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Basis Instellingen" @@ -864,7 +871,7 @@ msgstr "Basis Instellingen" msgid "Bass" msgstr "Bass" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Block Allocation Table checksum is mislukt" @@ -885,7 +892,7 @@ msgid "Blue Right" msgstr "Blauw Rechts" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Onder" @@ -894,7 +901,7 @@ msgstr "Onder" msgid "Bound Controls: %lu" msgstr "Gekoppelde controls: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Defect" @@ -902,7 +909,7 @@ msgstr "Defect" msgid "Browse" msgstr "Zoek" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Zoek een folder om toe te voegen" @@ -910,11 +917,11 @@ msgstr "Zoek een folder om toe te voegen" msgid "Browse for an ISO directory..." msgstr "Zoek een ISO folder" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Zoek een uitvoer folder" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -924,7 +931,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Knoppen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -948,7 +955,7 @@ msgstr "C-Stick" msgid "CP reg" msgstr "CP Reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU Emulatie Motor" @@ -972,17 +979,17 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Kan Wiimote met verbinding %02x niet vinden" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Kan niet lezen van DVD_Plugin - DVD-Interface: Fatale Error" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Annuleer" @@ -994,11 +1001,11 @@ msgstr "Annuleer" msgid "Cannot open %s" msgstr "Kan %s niet openen" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Kan geen events afmelden als er events in afwachting zijn" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1009,7 +1016,7 @@ msgstr "" "%s\\n\n" "is geen geldig gamecube geheugenkaart bestand." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1021,7 +1028,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Catalaans" @@ -1029,7 +1036,7 @@ msgstr "Catalaans" msgid "Center" msgstr "Middelpunt" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Verander" @@ -1041,11 +1048,11 @@ msgstr "Verander &Schijf" msgid "Change Disc" msgstr "Verander Schijf" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Spel veranderen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1061,11 +1068,11 @@ msgstr "Verandert teken van zVer parameter (na correctie)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Verandert teken van zDichtbij parameter (na correctie)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Het heeft geen effect als je dit veranderd wanneer de emulator draait!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1073,47 +1080,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Cheat Code" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Cheat Zoeken" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Cheats Manager" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Controleer Partitie integriteit" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Integriteit controleren..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chinees (Vereenvoudigd)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinees (Traditioneel)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Kies een DVD Station:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Kies een NAND basismap:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Kies een standaard ISO:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Kies een folder om toe te voegen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Kies een bestand om te openen" @@ -1121,7 +1128,7 @@ msgstr "Kies een bestand om te openen" msgid "Choose a memory card:" msgstr "Kies een geheugen kaart:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1129,8 +1136,8 @@ msgstr "" "Kies Bestand te gebruiken als apploader: (geldt voor disks die alleen mappen " "uit mappen zijn opgebouwd)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Kies de folder om naar uit te pakken" @@ -1149,7 +1156,7 @@ msgstr "Klassiek" msgid "Clear" msgstr "Legen" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1159,7 +1166,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Sluit" @@ -1168,11 +1175,11 @@ msgstr "Sluit" msgid "Co&nfigure..." msgstr "In&stellingen" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Code Info" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Code: " @@ -1184,20 +1191,20 @@ msgstr "Commando" msgid "Comment" msgstr "Reactie" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Reactie:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Comprimeer ISO ..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Comprimeer geselecteerde ISO's ..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "ISO wordt gecomprimeerd" @@ -1215,8 +1222,8 @@ msgstr "Configureer" msgid "Configure Control" msgstr "Configureer Besturing" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Configureer Besturing Pads" @@ -1224,13 +1231,13 @@ msgstr "Configureer Besturing Pads" msgid "Configure..." msgstr "Configureer..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Bevestig om bestand over te schrijven." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Bevestiging bij Stop" @@ -1244,7 +1251,7 @@ msgstr "Verbind" msgid "Connect Balance Board" msgstr "Verbind Balance Board" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Verbind USB Toetsenbord" @@ -1269,7 +1276,7 @@ msgstr "Verbind Wiimote 3" msgid "Connect Wiimote 4" msgstr "Verbind Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Verbinden..." @@ -1289,7 +1296,7 @@ msgstr "Bestuur" msgid "Convert to GCI" msgstr "Omzetten naar GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopiëren mislukt" @@ -1298,16 +1305,11 @@ msgstr "Kopiëren mislukt" msgid "Copy to Memcard %c" msgstr "Kopieer naar MemKaart %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Core" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Het volgende bestanden kon niet gemaakt worden %s " - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Kon de %s backend niet initialiseren." @@ -1323,12 +1325,12 @@ msgstr "" "geen GC/Wii backup.Meeste PC DVD drives kunnen geen originele Gamecube en " "Wii schijven lezen!" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Kon ISO bestand %s niet herkennen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Kon %s niet opslaan" @@ -1354,11 +1356,11 @@ msgstr "" "Zo ja, dan moet je je memory card locatie opnieuw aangeven in de " "configuratie." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Kon geen open commando vinden voor extensie 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1366,17 +1368,17 @@ msgstr "" "Kon de kern niet initialiseren.\n" "Controleer je instellingen." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Tel:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Land:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Maak AR Code" @@ -1411,12 +1413,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Huidige map verandert van %s naar %s na wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Aangepaste Projectie Hack" @@ -1424,11 +1426,11 @@ msgstr "Aangepaste Projectie Hack" msgid "Custom Projection Hack Settings" msgstr "Aangepaste Projectie Instellingen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Pas sommige orthogonale projectie parameters aan." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Tsjechisch" @@ -1444,20 +1446,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP Emulator Motor" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE emulatie (snel)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE Interpreteer (Behoorlijk langzaam)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE hercompileerder" @@ -1465,11 +1467,11 @@ msgstr "DSP LLE hercompileerder" msgid "DSP settings" msgstr "DSP Instellingen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE op toegeweide thread" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD Station:" @@ -1481,15 +1483,15 @@ msgstr "DVDLowRead - Fatale Error: kan het volume niet lezen" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Fatale Error: kan het volume niet lezen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Dansmat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Data grootte" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Datum:" @@ -1518,16 +1520,16 @@ msgstr "Fouthersteller" msgid "Decimal" msgstr "Decimaal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Decomprimeer ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Decomprimeer geselecteerde ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Decomprimeer ISO" @@ -1539,7 +1541,7 @@ msgstr "Verlaag framelimit" msgid "Default" msgstr "Standaard" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Standaard ISO:" @@ -1583,8 +1585,8 @@ msgstr "" msgid "Device" msgstr "Apparaat" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Apparaat Instellingen" @@ -1592,15 +1594,12 @@ msgstr "Apparaat Instellingen" msgid "Dial" msgstr "Bellen" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1663,7 +1662,7 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Schijf" @@ -1690,20 +1689,20 @@ msgstr "" msgid "Divide" msgstr "Verdelen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Wil je de emulatie stoppen?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II decodering" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1733,9 +1732,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1788,12 +1786,12 @@ msgstr "Dolphin Geëmuleerde Wiimote configuratie" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GCPad Configuratie" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS Film (*.dtm)" @@ -1805,14 +1803,14 @@ msgstr "Dolphin Wiimote configuratie" msgid "Dolphin at &Google Code" msgstr "Dolphin op &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "" "Dolphin kan geen GC/Wii ISO's vinden. Dubbelklik om bestanden te zoeken..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1820,12 +1818,12 @@ msgstr "" "Dolphin is ingesteld om alle spellen te verbergen. Dubbelklik hier om alle " "spellen te weergeven..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin kan de verzochte actie niet uitvoeren." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1851,11 +1849,11 @@ msgstr "%lu codes gedownload. (%lu toegevoegd)" msgid "Drums" msgstr "Drums" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Pop" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Dump Geluid" @@ -1901,9 +1899,9 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Nederlands" @@ -1927,7 +1925,7 @@ msgstr "" "versie %d.%d -- Als je recentelijk Dolphin hebt geupgrade is het mogelijk " "dat je Windows moet herstarten om deze de driver te detecteren." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1943,14 +1941,10 @@ msgstr "Wijzig" msgid "Edit ActionReplay Code" msgstr "Wijzig ActionReplay Code" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Wijzig Configuratie" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Wijzig lokale overschrijvingen" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Wijzig Patch" @@ -1959,8 +1953,8 @@ msgstr "Wijzig Patch" msgid "Edit current perspective" msgstr "Wijzig het huidige perspectief" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Wijzig..." @@ -1972,7 +1966,7 @@ msgstr "Effect" msgid "Embedded Frame Buffer" msgstr "Ingebedde Frame Buffer" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Emu Thread draait al!" @@ -2010,7 +2004,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Geëmuleerde Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Emulatie Staat:" @@ -2034,15 +2028,15 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Activeer AR Logging" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Activeer Block Merging" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Activeer Bounding Box Berekeningen" @@ -2050,27 +2044,27 @@ msgstr "Activeer Bounding Box Berekeningen" msgid "Enable Cache" msgstr "Activeer Cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Activeer Cheats" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Activeer Dual Core" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Activeer Dual Core (verhoogt de snelheid)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Activeer Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Activeer Idle Skipping (verhoogt de snelheid)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Activeer MMU" @@ -2078,7 +2072,7 @@ msgstr "Activeer MMU" msgid "Enable Progressive Scan" msgstr "Activeer Progressive Scan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Activeer Schermbeveiliger" @@ -2086,7 +2080,7 @@ msgstr "Activeer Schermbeveiliger" msgid "Enable Speaker Data" msgstr "Activeer Speaker Data" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Activeer BreedBeeld" @@ -2108,7 +2102,7 @@ msgstr "" "\n" "In geval van twijfel selecteer 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2144,7 +2138,7 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2152,11 +2146,11 @@ msgstr "" "Activeer dit om The Legend of Zelda: Twilight Princess te versnellen. " "Uitschakelen voor elk ander spel." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Schakelt aangepaste projectie hack in" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2164,7 +2158,7 @@ msgstr "" "Activeert Dolby Pro Logic II emulatie met 5.1 surround. Niet beschikbaar met " "OSX" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2184,7 +2178,7 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2206,9 +2200,9 @@ msgstr "" msgid "End" msgstr "Einde" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Engels" @@ -2231,23 +2225,22 @@ msgstr "Toegang %d/%d" msgid "Entry 1/%d" msgstr "Toegang 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Gelijk" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Error (Fout)" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Fout bij het laden van de geselecteerde taal. Dolphin zal terugvallen op de " "systeemtaal." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2296,7 +2289,7 @@ msgstr "Exporteer alle Wii saves" msgid "Export Failed" msgstr "Exporteren Mislukt" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exporteer Bestand" @@ -2312,7 +2305,7 @@ msgstr "Exporteer Opname..." msgid "Export Save" msgstr "Exporteer Save" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exporteer Wii save (Experimenteel)" @@ -2328,7 +2321,7 @@ msgstr "Exporteren mislukt" msgid "Export save as..." msgstr "Exporteer save als..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Extensie" @@ -2344,44 +2337,44 @@ msgstr "Extra Parameter" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Extra parameter, alleen nuttig in \"Metroid: Other M\"." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Alle Bestanden Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Apploader Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "DOL Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Map Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Bestand Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Partitie Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "%s Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Alle Bestanden Uitpakken" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Uitpakken van de map" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Uitpakken..." @@ -2393,15 +2386,15 @@ msgstr "FIFO Byte" msgid "FIFO Player" msgstr "FIFO Speler" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "Frankrijk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST Groote:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Verbinden Mislukt!" @@ -2409,11 +2402,15 @@ msgstr "Verbinden Mislukt!" msgid "Failed to download codes." msgstr "Mislukt om de codes te downloaden." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Mislukt om naar %s uit te pakken!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2467,7 +2464,7 @@ msgstr "Mislukt om banner.bin te lezen" msgid "Failed to read bk header" msgstr "bk header lezen mislukt" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2478,7 +2475,7 @@ msgstr "" "De geheugenkaart is wellicht afgeknot\\n\n" "BestandsPositie:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2486,7 +2483,7 @@ msgstr "" "Het lezen van de block allocation table backup is mislukt\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2504,7 +2501,7 @@ msgstr "Mislukt om gegevens uit %d te lezen" msgid "Failed to read data from file: %s" msgstr "Kon geen data lezen van bestand: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2512,7 +2509,7 @@ msgstr "" "Het lezen van de map backup is mislukt\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2524,7 +2521,7 @@ msgstr "" msgid "Failed to read header" msgstr "Kon de header niet lezen" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2537,7 +2534,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Kon de header niet lezen voor bestand %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Het lezen van de unieke ID van de schijf image is mislukt" @@ -2559,7 +2556,7 @@ msgstr "Kon geen data schrijven in bestand: %s" msgid "Failed to write header for %s" msgstr "Het schrijven van header voor %s is mislukt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Farsi" @@ -2571,7 +2568,7 @@ msgstr "Snel" msgid "Fast Depth Calculation" msgstr "Snelle Diepte Calculatie" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Snelle versie van de MMU. Werkt niet voor elk spel." @@ -2607,7 +2604,7 @@ msgstr "" "Bestand kon niet geopend worden\n" "of heeft geen valide extensie" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2620,7 +2617,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Bestand is niet herkend als geheugenkaart" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Bestand niet gecompressed" @@ -2629,11 +2626,11 @@ msgstr "Bestand niet gecompressed" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Onbekende open mode: 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Bestand systeem" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Bestandstype 'ini' is onbekend! Kan niet openen!" @@ -2661,7 +2658,7 @@ msgstr "Forceer 16:9" msgid "Force 4:3" msgstr "Forceer 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Forceer Textuur Filtering" @@ -2694,7 +2691,7 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2705,7 +2702,7 @@ msgstr "" "deze instelling automatisch aanzetten als je de Japanese versie van spellen " "speelt." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2717,7 +2714,7 @@ msgstr "" msgid "Forward" msgstr "Vooruit" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Poort forwarden (UPnP)" @@ -2760,7 +2757,7 @@ msgstr "Frame Bereik" msgid "Frame S&kipping" msgstr "Frame O&verslaan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Framelimiet:" @@ -2772,9 +2769,9 @@ msgstr "Frames om op te nemen" msgid "Free Look" msgstr "Vrije kijk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Frans" @@ -2807,27 +2804,27 @@ msgstr "GCPad" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "Spel ID:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Het spel draait al!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Het spel draait niet!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Spel niet gevonden!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Spel Specifieke Instellingen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Spel Config" @@ -2835,7 +2832,7 @@ msgstr "Spel Config" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube Savegame bestanden(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2844,7 +2841,7 @@ msgid "Gamecube &Pad Settings" msgstr "Gamecube &Pad Instellingen" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Gamecube Memory Kaarten (*.raw,*.gcp)" @@ -2852,12 +2849,12 @@ msgstr "Gamecube Memory Kaarten (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Gamecube Pad Instellingen" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko Codes" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2871,7 +2868,7 @@ msgstr "" "directory te plaatsen en Dolphin opnieuw op te starten.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Algemeen" @@ -2880,13 +2877,13 @@ msgstr "Algemeen" msgid "General Settings" msgstr "Algemene Instellingen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Duits" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Index is groter dan de grootte van de AR code lijst %lu" @@ -2899,7 +2896,7 @@ msgstr "Grafische" msgid "Graphics settings" msgstr "Grafische instellingen" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Grooter dan" @@ -2922,7 +2919,7 @@ msgstr "" "\n" "Bij geval van twijfel gemarkeerd laten." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Grieks" @@ -2946,11 +2943,11 @@ msgstr "Gitaar" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Header checksum is mislukt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebreeuws" @@ -2962,7 +2959,7 @@ msgstr "Hoogte" msgid "Help" msgstr "Help" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2983,7 +2980,7 @@ msgstr "" "\n" "Sayonara!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3022,7 +3019,7 @@ msgid "Home" msgstr "Thuis" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -3031,11 +3028,11 @@ msgid "Hotkey Configuration" msgstr "Sneltoets Configuratie" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Hotkeys" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Hongaarse" @@ -3043,18 +3040,18 @@ msgstr "Hongaarse" msgid "Hybrid Wiimote" msgstr "Hybride Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Poging tot verkrijgen van data van een onbekende ticket: " "%08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3063,15 +3060,15 @@ msgstr "" "TitleID %016llx.\n" "Dolphin zal waarschijnlijk blijven hangen." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - onjuiste bestemming" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL Instellingen" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3083,15 +3080,15 @@ msgstr "IR Aanwijzer" msgid "IR Sensitivity:" msgstr "IR Gevoeligheid:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO Details" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "ISO Map" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITALIË" @@ -3099,7 +3096,7 @@ msgstr "ITALIË" msgid "Icon" msgstr "Icoon" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3171,7 +3168,7 @@ msgstr "" "Geimporteerd bestand heeft sav extension\n" "maar heeft geen juiste header" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "In Game" @@ -3180,7 +3177,7 @@ msgid "Increase Frame limit" msgstr "Verhoog framelimit" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3200,7 +3197,7 @@ msgstr "Toevoegen" msgid "Insert Encrypted or Decrypted code here..." msgstr "Voer Gecodeerde of Gedecodeerde code hier in..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Schakel SD Card in" @@ -3212,35 +3209,35 @@ msgstr "Voeg naam hier toe" msgid "Install WAD" msgstr "Installeer WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Installeren in Wii-menu" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler opgeroepen, maar dit platform ondersteund dit nog " "niet." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "WAD aan het installeren..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Integriteitscontrole Fout" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Integriteitscontrole afgerond" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Integriteitscontrole afgerond. Geen fouten gevonden." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3249,11 +3246,11 @@ msgstr "" "Integriteitscontrole for partitie %d mislukt. De dump is waarschijnlijk " "corrupt or is verkeerd gepatcht. " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Interface Instellingen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Interface Instellingen" @@ -3282,7 +3279,7 @@ msgstr "Interne Resolutie:" msgid "Interpreter (VERY slow)" msgstr "Interpreteer (Behoorlijk langzaam)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3291,7 +3288,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Onjuiste grootte (%x) of Magic word (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Onjuiste waarde!" @@ -3299,16 +3296,16 @@ msgstr "Onjuiste waarde!" msgid "Invalid bat.map or dir entry" msgstr "Onjuiste bat.map of map vermelding" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Onjuist event type %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Onjuist bestand" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3335,34 +3332,36 @@ msgstr "Ongeldige zoekopdracht (niet in staat naar nummers te converteren)" msgid "Invalid search string (only even string lengths supported)" msgstr "Ongeldige zoekopdracht (alleen even string lengte ondersteund)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Onjuiste staat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italië" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPAN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT Recompiler (aanbevolen)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL experimentele recompiler" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japans" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3384,8 +3383,9 @@ msgstr "Houdt venster bovenop" msgid "Key" msgstr "Toets" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Koreaans" @@ -3403,7 +3403,7 @@ msgstr "L Knop" msgid "L-Analog" msgstr "L-Analoog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Taal:" @@ -3412,7 +3412,7 @@ msgstr "Taal:" msgid "Last %i" msgstr "Laatste %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Wachttijd:" @@ -3451,11 +3451,11 @@ msgstr "" "Links / Rechts-klik voor meer opties.\n" "Midden-klik om te wissen." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Minder dan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Limiteer met behulp van FPS" @@ -3547,11 +3547,11 @@ msgstr "Laad staat 9" msgid "Load State..." msgstr "Laad staat..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Laad Wii System Menu" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Laad Wii System Menu %d%c" @@ -3602,12 +3602,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Logger Uitvoer" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Logboek Bijhouden" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Verbinding met de server verloren!" @@ -3624,7 +3624,7 @@ msgstr "" "Verkeerde MD5\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Snelheids Hack" @@ -3638,11 +3638,11 @@ msgstr "MadCatz Gameshark bestanden(*.gcs)" msgid "Main Stick" msgstr "Hoofd Knuppel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "Maker ID:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Maker:" @@ -3678,7 +3678,7 @@ msgid "Memory Byte" msgstr "Geheugen Byte" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Geheugen Kaart" @@ -3690,7 +3690,7 @@ msgstr "" "Geheugenkaart Manager Waarschuwing - Maak backups voor gebruik, het zou " "moeten werken" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3707,7 +3707,7 @@ msgstr "" "%s\n" "Wil je de oude bestanden naar de nieuwe lokatie kopiëren?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" "Het formaat van de geheugenkaart komt niet overeen met het formaat van de " @@ -3717,7 +3717,7 @@ msgstr "" msgid "Menu" msgstr "Menu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Microfoon" @@ -3730,7 +3730,7 @@ msgstr "Min" msgid "Misc" msgstr "Overig" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Overige Instellingen" @@ -3755,11 +3755,11 @@ msgstr "" msgid "Monospaced font" msgstr "Niet-proportioneel (monospace) lettertype" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3879,15 +3879,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Omhoog" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Naam:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Naam:" @@ -3897,7 +3897,7 @@ msgstr "Naam:" msgid "Native GCI files(*.gci)" msgstr "Native GCI-bestanden (*. GCI)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nieuwe Scan" @@ -3906,7 +3906,7 @@ msgstr "Nieuwe Scan" msgid "Next Page" msgstr "Volgende Pagina" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Volgende Scan" @@ -3914,11 +3914,11 @@ msgstr "Volgende Scan" msgid "Nickname :" msgstr "Gebruikersnaam :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Geen land (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Geen ISOs of WADS gevonden." @@ -3957,24 +3957,25 @@ msgstr "Geen opgenomen bestand" msgid "No save folder found for title %s" msgstr "Geen save map gevonden voor titel %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Geen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Noorweegse Bokmaal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Niet gelijk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Niet ingesteld" @@ -3984,11 +3985,11 @@ msgid "Not a Wii save or read failure for file header size %x" msgstr "" "Geen Wii save of het lezen van de grootte van bestandsheader %x is mislukt" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Niet verbonden" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Opmerkingen" @@ -4009,7 +4010,7 @@ msgstr "Opmerkingen" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Aantal Codes:" @@ -4030,7 +4031,7 @@ msgstr "Object" msgid "Object Range" msgstr "Object Bereik" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Uit" @@ -4038,7 +4039,7 @@ msgstr "Uit" msgid "Offset:" msgstr "Afstand:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "In-Scherm Berichtgeving" @@ -4056,11 +4057,11 @@ msgstr "Er zijn maar %d blocks beschikaarr" msgid "Open" msgstr "Open" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Open &bevattende map" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Open Wii &save map" @@ -4090,7 +4091,7 @@ msgstr "OpenCL Texture Decoder" msgid "OpenMP Texture Decoder" msgstr "OpenMP Texture Decoder" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4098,13 +4099,7 @@ msgstr "" "Opent de standaard (alleen lezen) configuratie voor deze spel in een externe " "tekst editor." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" -"Opent de gebruiker gespecificeerde overschrijvingen in een externe tekst " -"editor." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opties" @@ -4129,7 +4124,7 @@ msgstr "" msgid "Other" msgstr "Overige" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4145,11 +4140,11 @@ msgstr "Uitgang" msgid "P&lay Recording..." msgstr "Opname afspelen" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Pad" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Pad" @@ -4173,26 +4168,26 @@ msgstr "Paragraaf" msgid "Parameters" msgstr "Parameters" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partitie %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Patitie bestaat niet: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patches" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Pad" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pauze" @@ -4205,7 +4200,7 @@ msgstr "Pauze aan het eind van de film" msgid "Per-Pixel Lighting" msgstr "Per-Pixel Belichting" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfect" @@ -4216,8 +4211,8 @@ msgstr "Perspectief %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Speel" @@ -4229,7 +4224,7 @@ msgstr "Speel Opname" msgid "Play/Pause" msgstr "Spel/Pauze" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Speelbaar" @@ -4237,11 +4232,11 @@ msgstr "Speelbaar" msgid "Playback Options" msgstr "Terugspeel Opties" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Spelers" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Bevestig alsjeblieft..." @@ -4253,36 +4248,36 @@ msgstr "Maak een perspectief voor het opslaan" msgid "Plus-Minus" msgstr "Ongeveer" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Pools" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Poort 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Poort 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Poort 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Poort 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Poort :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugees" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugees (Braziliaans)" @@ -4295,7 +4290,7 @@ msgstr "Post-Processing Effect:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Vroegtijdige beeïndiging van filmpje in PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Vroegtijdige beeïndiging van filmpje in PlayWiimote. %u + %d > %u" @@ -4317,7 +4312,7 @@ msgstr "Vorige Pagina" msgid "Previous Page" msgstr "Vorige Pagina" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Vorige waarden" @@ -4341,8 +4336,8 @@ msgstr "Cache leegmaken" msgid "Question" msgstr "Vraag" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Stoppen" @@ -4364,7 +4359,7 @@ msgstr "R-Analoog" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSLAND" @@ -4403,7 +4398,7 @@ msgstr "Echte Wiimotes" msgid "Record" msgstr "Speel Opnemen" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Neem input op" @@ -4455,10 +4450,10 @@ msgstr "Lijst Verversen" msgid "Refresh game list" msgstr "Ververs de speellijst" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Verwijder" @@ -4482,7 +4477,7 @@ msgstr "Geef weer op hoofdscherm" msgid "Reset" msgstr "Opnieuw" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Resultaten" @@ -4490,7 +4485,7 @@ msgstr "Resultaten" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revisie:" @@ -4503,19 +4498,19 @@ msgstr "Rechts" msgid "Right Stick" msgstr "Rechter Stick" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Rumble" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Zet DSP LLE op een toegeweide thread (niet aangeraden omdat het freezes kan " "veroorzaken)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russisch" @@ -4589,12 +4584,12 @@ msgstr "Sla Staat 9 op" msgid "Save State..." msgstr "Sla staat op als..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Opslaan als..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Sla gecomprimeerde GCM / ISO op" @@ -4602,7 +4597,7 @@ msgstr "Sla gecomprimeerde GCM / ISO op" msgid "Save current perspective" msgstr "Sla huidige perspectief op" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Sla gedecomprimeerd GCM / ISO op" @@ -4615,16 +4610,16 @@ msgstr "Save staat film %s is corrupt, het opnemen van de film is gestopt..." msgid "Scaled EFB Copy" msgstr "Geschaalde EFB Kopie" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Scannen van %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Scannen voor ISO's" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Scannen..." @@ -4640,11 +4635,11 @@ msgstr "Scroll Slot" msgid "Search" msgstr "Zoeken" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Zoekfilter" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Zoeken in submappen" @@ -4667,12 +4662,12 @@ msgstr "Sectie %s niet gevonden in SYSCONF" msgid "Select" msgstr "Selecteer" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Selecteer de opname Bestand" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Selecteer een Wii WAD bestand om te installeren" @@ -4694,19 +4689,19 @@ msgstr "Selecteer een save file om te importeren" msgid "Select floating windows" msgstr "Selecteer zwevende vensters" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Selecteer het bestand om het te laden" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Selecteer het save - bestand" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Selecteer de Staat om te laden" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Selecteer de Staat om op te slaan" @@ -4726,7 +4721,7 @@ msgstr "" "Force 4:3: Strek de afbeelding naar een beeldverhouding van 4:3\n" "Stretch naar het venster: Stretch de afbeelding naar je venster grootte." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Geselecteerd controller profiel bestaat niet" @@ -4751,39 +4746,28 @@ msgstr "" "In geval van twijfel, gebruik je desktop resolutie. \n" "Als je nog steeds twijfelt, gebruik de hoogste resolutie die voor jou werkt." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Selecteer de intern te gebruiken grafische API.\n" -"Direct3D 9 is meestal de snelste. OpenGL is echter nauwkeuriger. Direct3D 11 " -"zit ergens tussenin.\n" -"Let erop dat de Direct3D backends alleen op Windows beschikbaar zijn.\n" -"\n" -"In geval van twijfel gebruik Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Selecteer de intern te gebruiken grafische API.\n" -"Direct3D 9 is meestal de snelste. OpenGL is echter nauwkeuriger. Direct3D 11 " -"zit ergens tussenin.\n" -"Let erop dat de Direct3D backends alleen op Windows beschikbaar zijn.\n" -"\n" -"In geval van twijfel gebruik OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Verzend" @@ -4795,17 +4779,17 @@ msgstr "Sensor Bar Positie:" msgid "Separator" msgstr "Scheidingsteken" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Servisch" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Serial Port 1 - Dit is de poort die apparaten zoals de net-adapter gebruiken" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Ingesteld als &standaard ISO" @@ -4814,13 +4798,13 @@ msgstr "Ingesteld als &standaard ISO" msgid "Set as default Memcard %c" msgstr "Ingesteld als standaard memcard% c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: Index is groter dan de grootte van de AR Code lijst %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4828,19 +4812,19 @@ msgstr "" "Zet de wachttijd (in ms). Hogere waarden kunnen krakende audio verminderen. " "Alleen voor OpenAL instellingen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Instellingen..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Kan het instellingen bestand niet aanmaken" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Schudden" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Korte Naam:" @@ -4864,7 +4848,7 @@ msgstr "Toon &Statusbar" msgid "Show &Toolbar" msgstr "Toon &Toolbar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Toon standaarden" @@ -4904,7 +4888,7 @@ msgstr "Toon JAP" msgid "Show Korea" msgstr "Toon Korea" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Toon Taal:" @@ -4944,11 +4928,11 @@ msgstr "Toon Wad" msgid "Show Wii" msgstr "Toon Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Toon een bevestigingsvenster voordat u stopt met een spel." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4966,7 +4950,7 @@ msgstr "Toon eerste blok" msgid "Show lag counter" msgstr "Toon vertragingsteller" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5018,23 +5002,24 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Zijdelings Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Vereenvoudigd Chinees" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Grootte" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Sla BIOS Over" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Sla het legen van DCBZ over" @@ -5065,11 +5050,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -5077,7 +5062,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Snapshot" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Software Weergever" @@ -5093,27 +5078,27 @@ msgstr "" "Weet je zeker dat je software rendering aan wil zetten? In geval van " "twijfel, selecteer 'Nee'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Geluids Instellingen" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Geluids backend %s is niet juist." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Het aanmaken van de geluids buffer is mislukt: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Ruimte" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spaans" @@ -5141,7 +5126,7 @@ msgstr "" "\n" "In geval van twijfel selecteer 640x528" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Versnel Disc Transfer Rate" @@ -5149,13 +5134,13 @@ msgstr "Versnel Disc Transfer Rate" msgid "Square Stick" msgstr "Vierkante knuppel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Standaard Controller" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5171,7 +5156,7 @@ msgstr "Start Op&nemen" msgid "Start Recording" msgstr "Start Opnemen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Staat" @@ -5179,7 +5164,7 @@ msgstr "Staat" msgid "State Saves" msgstr "Opgeslage Staten" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Stuurwiel" @@ -5228,19 +5213,19 @@ msgstr "Bestand succesvol gexporteerd naar %s" msgid "Successfully imported save files" msgstr "Succesvol save games geimporteerd" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Zweeds" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Zwaai" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Synchroniseer GPU thread" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5248,12 +5233,13 @@ msgstr "" "Synchroniseert de GPU en CPU threads om willekeurige freezes te voorkomen in " "Dual Core modus. (Aan = Compatibel, Uit = Snel)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Systeem Taal:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5284,7 +5270,7 @@ msgstr "Rechter Tabel" msgid "Take Screenshot" msgstr "Neem een Schermafdruk" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5304,11 +5290,11 @@ msgstr "Texture Cache" msgid "Texture Format Overlay" msgstr "Texture Formaat Overlay" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "De WAD is succesvol geinstalleerd" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Het adres is onjuist" @@ -5316,13 +5302,13 @@ msgstr "Het adres is onjuist" msgid "The checksum was successfully fixed" msgstr "De checksum was met succes gefixt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "De gekozen map is al in de lijst" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5346,7 +5332,7 @@ msgid "The file %s was already open, the file header will not be written." msgstr "" "Het bestand %s was al open, de bestands header zal niet worden weggeschreven." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Het opgegeven bestand(%s) bestaat niet" @@ -5381,7 +5367,7 @@ msgstr "" "Het save bestand dat je probeert te kopiëren heeft een onjuiste bestands " "grootte" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5389,19 +5375,19 @@ msgstr "" "De geselecteerde taal wordt niet door je systeem ondersteund. Dolphin zal " "terugvallen op je systeems taal." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "De NetPlay versie van de server en client zijn incompatibel!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "De server is vol!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "De server reageerde: het spel draait al!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "De server verstuurde een onbekende foutmelding!" @@ -5410,15 +5396,15 @@ msgstr "De server verstuurde een onbekende foutmelding!" msgid "The specified file \"%s\" does not exist" msgstr "Het opgegeven bestand \"%s\" bestaat niet" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "De waarde is onjuist" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Thema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5426,7 +5412,7 @@ msgstr "" "Er moet een ticket zijn voor 00000001/00000002. Je NAND dump is " "waarschijnlijk incompleet." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5434,7 +5420,7 @@ msgstr "" "Deze instellingen overschrijven interne Dolphin instellingen.\n" "Onbepaald betekent dat het spel maakt gebruik van Dolphin's instellingen." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5442,7 +5428,7 @@ msgstr "" "Deze action replay simulator ondersteund geen codes die de Action Replay " "zelf aanpassen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Dit kan leiden tot vertraging van het Wii-menu en een aantal games." @@ -5465,7 +5451,7 @@ msgstr "" "\\n\n" "Bij twijfel, ongeselecteerd laten." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5477,7 +5463,7 @@ msgstr "" "van de DSP (kan het klikkend geluid verhelpen, maar kan ook constant lawaai " "ten gevolge hebben, afhankelijk van welk spel gespeelt wordt)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5489,7 +5475,7 @@ msgstr "" "Leidt tot grote snelheid verbeteringen op pc's met meer dan een kern, maar " "kan ook leiden tot crashes / glitches zo nu en dan." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Dit laat je handmatig het INI configuratie bestand wijzigen" @@ -5498,12 +5484,12 @@ msgstr "Dit laat je handmatig het INI configuratie bestand wijzigen" msgid "Threshold" msgstr "Drempelwaarde" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Kantelen" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Titel" @@ -5538,15 +5524,16 @@ msgid "Toggle IR" msgstr "Schakel IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Boven" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Chinees (Traditioneel)" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Poging tot het laden van een onbekend bestands type." @@ -5566,7 +5553,7 @@ msgstr "" "Poging tot het inlezen van een ongeldige SYSCONF\n" "Wiimote bt ids zijn niet beschikbaar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turks" @@ -5582,12 +5569,12 @@ msgstr "Type" msgid "UDP Port:" msgstr "UDP Port:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "ONBEKEND" @@ -5596,7 +5583,7 @@ msgstr "ONBEKEND" msgid "UNKNOWN_%02X" msgstr "ONBEKEND_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5609,9 +5596,9 @@ msgstr "" "Entry niet aangepast." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5637,11 +5624,11 @@ msgstr "Save staat ongedaan maken" msgid "Unexpected 0x80 call? Aborting..." msgstr "Onverwachtte 0x80 fout? Annuleren..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Onbekend" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Onbekend DVD commando %08x - fatale fout" @@ -5656,12 +5643,12 @@ msgstr "Onbekende commando 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Onbekende vermeldingstype %i in SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Onbekend bericht ontvangen met id : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5673,16 +5660,16 @@ msgstr "" msgid "Up" msgstr "Omhoog" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Update" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Wiimote rechtop" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Gebruik EuRGB60 Mode (PAL60)" @@ -5690,11 +5677,11 @@ msgstr "Gebruik EuRGB60 Mode (PAL60)" msgid "Use Fullscreen" msgstr "Gebruik &Volledig Scherm" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Gebruik Hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Gebruik Panic Handlers" @@ -5758,11 +5745,11 @@ msgstr "Hulpprogramma" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam Speed Hack" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Waarde" @@ -5770,7 +5757,7 @@ msgstr "Waarde" msgid "Value:" msgstr "Waarde:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Waarde:" @@ -5782,7 +5769,7 @@ msgstr "Breedsprakigheid" msgid "Vertex Streaming Hack" msgstr "Vertex Streaming Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Video" @@ -5790,7 +5777,7 @@ msgstr "Video" msgid "Virtual" msgstr "Virtueel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volume" @@ -5822,15 +5809,15 @@ msgstr "" msgid "Warning" msgstr "Waarschuwing" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Waarschuwing - DOL wordt in de verkeerde console mode gestart!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Waarschuwing - ELF wordt in de verkeerde console mode gestart!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Waarschuwing - ISO wordt in de verkeerde console mode gestart!" @@ -5934,19 +5921,19 @@ msgstr "Breedbeeld Hack" msgid "Width" msgstr "Breedte" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii Console " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND basismap:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii save bestanden (*.bin)|*.bin" @@ -5959,12 +5946,18 @@ msgstr "WiiWAD: Kon het bestand niet lezen" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote Connected" @@ -5996,14 +5989,14 @@ msgstr "Venster Rechts" msgid "Word Wrap" msgstr "Regelafbreking" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Werken..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Schrijf memcards (GC)" @@ -6023,21 +6016,36 @@ msgstr "Schrijf naar Bestand" msgid "Write to Window" msgstr "Schrijf naar venster" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice is mislukt: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 initialisatie mislukt: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 master voice creatie mislukt: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice is mislukt: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 initialisatie mislukt: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 master voice creatie mislukt: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF Reg" @@ -6068,15 +6076,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "U kunt geen panelen sluiten die paginas bevatten." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Je moet een spel kiezen!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Je moet een naam invoeren!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Je moet een juiste decimale, hexadecimale of octale waarde opgeven" @@ -6084,7 +6092,7 @@ msgstr "Je moet een juiste decimale, hexadecimale of octale waarde opgeven" msgid "You must enter a valid profile name." msgstr "Je moet een geldige profiel naam invoeren!" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Je moet Dolphin herstarten voordat deze optie effect zal hebben." @@ -6098,7 +6106,7 @@ msgstr "" "Wil je nu stoppen om het probleem op te lossen?\n" "Als je \"Nee\" selecteert kan het geluid vervromd klinken." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6117,15 +6125,15 @@ msgstr "" "Het zou 0x%04x moet zijn, maar is 0x%04llx \n" "Wil je een nieuwe genereren?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3 code niet ondersteund" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero code onbekend voor Dolphin: %08x" @@ -6183,29 +6191,24 @@ msgstr "" "\n" "In geval van twijfel leeg laten." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "applader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Lezen van Opcode vanaf %x. Graag rapporteren." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "onbekende flavor %d (verwacht %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "onbekende bericht ontvangen" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute retourneerde -1 bij het draaien van de applicatie!" @@ -6220,3 +6223,50 @@ msgstr "zDichtbij correctie:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OF" + +#~ msgid "Could not create %s" +#~ msgstr "Het volgende bestanden kon niet gemaakt worden %s " + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Wijzig lokale overschrijvingen" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Opent de gebruiker gespecificeerde overschrijvingen in een externe tekst " +#~ "editor." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Selecteer de intern te gebruiken grafische API.\n" +#~ "Direct3D 9 is meestal de snelste. OpenGL is echter nauwkeuriger. Direct3D " +#~ "11 zit ergens tussenin.\n" +#~ "Let erop dat de Direct3D backends alleen op Windows beschikbaar zijn.\n" +#~ "\n" +#~ "In geval van twijfel gebruik Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Selecteer de intern te gebruiken grafische API.\n" +#~ "Direct3D 9 is meestal de snelste. OpenGL is echter nauwkeuriger. Direct3D " +#~ "11 zit ergens tussenin.\n" +#~ "Let erop dat de Direct3D backends alleen op Windows beschikbaar zijn.\n" +#~ "\n" +#~ "In geval van twijfel gebruik OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Lezen van Opcode vanaf %x. Graag rapporteren." diff --git a/Languages/po/pl.po b/Languages/po/pl.po index 088b004393..03910ce86b 100644 --- a/Languages/po/pl.po +++ b/Languages/po/pl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Polish (http://www.transifex.com/projects/p/dolphin-emu/" @@ -21,13 +21,13 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(za dużo do wyświetlenia)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Gra :" @@ -35,7 +35,7 @@ msgstr "Gra :" msgid "! NOT" msgstr "! NOT" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -61,12 +61,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sKopiuj%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d próbki" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d próbki (poziom jakości %d)" @@ -77,13 +77,13 @@ msgstr "%d próbki (poziom jakości %d)" msgid "%s already exists, overwrite?" msgstr "%s już istnieje, zastąpić?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "" "Oczyszczanie %s nie powiodło się. Obraz prawdopodobnie jest uszkodzony." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -92,7 +92,7 @@ msgstr "" "Wczytanie %s jako karty pamięci nie powiodło się\n" "Niewłaściwa wielkość pliku (0x%x bajtów)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -101,7 +101,7 @@ msgstr "" "Wczytanie %s jako karty pamięci nie powiodło się\n" "Niewłaściwa wielkość karty (0x%x bajtów)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -116,7 +116,7 @@ msgstr "" msgid "%s failed to open" msgstr "Nie można otworzyć %s" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -126,7 +126,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s jest plikiem o wadze 0 bajtów" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s jest już skompresowany! Bardziej się nie da." @@ -184,11 +184,11 @@ msgstr "&Menadżer cheatów" msgid "&DSP Settings" msgstr "&Ustawienia DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Usuń ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Usuń wybrane ISO..." @@ -252,7 +252,7 @@ msgstr "&Wstrzymaj" msgid "&Play" msgstr "&Graj" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Właściwości" @@ -296,7 +296,7 @@ msgstr "&Widok" msgid "&Wiimote Settings" msgstr "&Ustawienia Wiilota" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -332,7 +332,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Native (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bitów" @@ -348,7 +348,7 @@ msgstr "2.5x Native (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Native (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bity" @@ -364,7 +364,7 @@ msgstr "3x Native (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Native (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bitów" @@ -376,7 +376,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -384,7 +384,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -392,13 +392,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Okno NetPlay jest już otwarte!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Gra nie jest aktualnie uruchomiona." @@ -419,21 +419,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Kody AR" @@ -481,7 +482,7 @@ msgstr "" "Kod:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -489,7 +490,7 @@ msgstr "" "Błąd Action Replay: Niewłaściwy rozmiar (%08x : address = %08x) w Add Code " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -498,7 +499,7 @@ msgstr "" "Błąd Action Replay: Niewłaściwy rozmiar (%08x : address = %08x) w Fill and " "Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -507,7 +508,7 @@ msgstr "" "Błąd Action Replay: Niewłaściwy rozmiar (%08x : address = %08x) w Ram Write " "And Fill (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -516,12 +517,12 @@ msgstr "" "Błąd Action Replay: Niewłaściwy rozmiar (%08x : address = %08x) w Write To " "Pointer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Błąd Action Replay: Niewłaściwa wartość (%08x) w Memory Copy (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -531,27 +532,27 @@ msgstr "" "zaimplementowane (%s)\n" "Master kody nie są potrzebne. Nie używaj master kodów." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Błąd Action Replay: niewłaściwa linia kodu AR: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Conditional Code: Niewłaściwy rozmiar %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Niewłaściwy typ Normal Code %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normal Code %i: Niewłaściwy podtyp %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Code 0: Niewłaściwy podtyp %08x (%s)" @@ -565,11 +566,11 @@ msgstr "Adapter:" msgid "Add" msgstr "Dodaj" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Dodaj kod ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Dodaj łatkę" @@ -577,9 +578,9 @@ msgstr "Dodaj łatkę" msgid "Add new pane" msgstr "Dodaj nowy panel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Dodaj..." @@ -631,36 +632,36 @@ msgstr "Reguluje siłę nacisku wymaganego do aktywacji przycisków." msgid "Advanced" msgstr "Zaawansowane" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Ustawienia zaawansowane" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Wszystkie pliki GC/Wii (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Wszystkie obrazy GC/Wii (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Pliki GCM" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Stany zapisu (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Wszystkie obrazy Wii (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Spakowane obrazy GC/Wii (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Wszystkie pliki (*.*)|*.*" @@ -680,19 +681,19 @@ msgstr "Filtrowanie anizotropowe:" msgid "Anti-Aliasing:" msgstr "Antyaliasing:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Apploader niewłaściwego rozmiaru... Czy to rzeczywiście apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader nie mógł wczytać z pliku" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Zastosuj" @@ -706,7 +707,7 @@ msgstr "" "\n" "W razie wątpliwości, wybierz (wyłączone)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabski" @@ -715,7 +716,7 @@ msgstr "Arabski" msgid "Are you sure you want to delete \"%s\"?" msgstr "Czy jesteś pewny by usunąc \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -723,7 +724,7 @@ msgstr "" "Czy jesteś pewny by usunąc te pliki?\n" "Przepadną na zawsze!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "Czy jesteś pewny by usunąc ten plik? Przepadnie na zawsze!" @@ -731,7 +732,12 @@ msgstr "Czy jesteś pewny by usunąc ten plik? Przepadnie na zawsze!" msgid "Arm JIT (experimental)" msgstr "Arm JIT (eksperymentalne)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (eksperymentalne)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Proporcje ekranu:" @@ -740,12 +746,12 @@ msgstr "Proporcje ekranu:" msgid "At least one pane must remain open." msgstr "Przynajmniej jeden panel musi pozostać otwarty." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Audio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Audio Backend :" @@ -753,7 +759,7 @@ msgstr "Audio Backend :" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Błąd otwarcia urządzenia AO.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -792,16 +798,16 @@ msgstr "BP rejestr" msgid "Back" msgstr "Wstecz" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Ustawienia Backend'u" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Backend :" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Wejście w tle" @@ -819,15 +825,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Baner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Szczegóły banera" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Baner:" @@ -839,7 +845,7 @@ msgstr "Wajcha" msgid "Basic" msgstr "Podstawowy" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Ustawienia podstawowe" @@ -847,7 +853,7 @@ msgstr "Ustawienia podstawowe" msgid "Bass" msgstr "Bass" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Suma kontrolna Block Allocation Table nie powiodła się" @@ -868,7 +874,7 @@ msgid "Blue Right" msgstr "Niebieski prawo" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Dół" @@ -877,7 +883,7 @@ msgstr "Dół" msgid "Bound Controls: %lu" msgstr "Bound Controls: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Zepsuty" @@ -885,7 +891,7 @@ msgstr "Zepsuty" msgid "Browse" msgstr "Szukaj" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Szukaj folder do dodania" @@ -893,11 +899,11 @@ msgstr "Szukaj folder do dodania" msgid "Browse for an ISO directory..." msgstr "Szukaj folder ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Szukaj folderu wyjściowego" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Bufor:" @@ -907,7 +913,7 @@ msgstr "Bufor:" msgid "Buttons" msgstr "Przyciski" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -931,7 +937,7 @@ msgstr "C-Stick" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Silnik emulacji CPU" @@ -952,17 +958,17 @@ msgstr "" "Zazwyczaj bezpieczne ulepszenie, ale czasami może powodować błędy.\\nW razie " "wątpliwości, pozostaw włączone." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Nie można odnaleźć Wiilota przez handle połączenia %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Nie można odczytać z wtyczki DVD - Interfejs DVD: Poważny błąd" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Anuluj" @@ -974,11 +980,11 @@ msgstr "Anuluj" msgid "Cannot open %s" msgstr "Nie moża otworzyć %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Nie można wyrejestrować zdarzeń podczas ich wykonywania" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -989,7 +995,7 @@ msgstr "" "%s\n" "nie jest właściwym plikiem karty pamięci GC" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1001,7 +1007,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Kataloński" @@ -1009,7 +1015,7 @@ msgstr "Kataloński" msgid "Center" msgstr "Środek" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Zmień" @@ -1021,11 +1027,11 @@ msgstr "Zmień &dysk" msgid "Change Disc" msgstr "Zmień dysk" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Zmień grę" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1041,12 +1047,12 @@ msgstr "Zmienia symbol do parametru zFar (po poprawce)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Zmienia symbol do parametru zNear (po poprawce)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "Zmiana tego nie będzie miała wpływu jeśli emulator jest w trakcie pracy!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1054,47 +1060,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Cheat Code" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Szukaj cheatów" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Menadżer cheatów" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Sprawdź integralność partycji" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Sprawdzanie integralności..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chiński uproszczony" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinski (Tradycyjny)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Wybierz folder źródłowy DVD" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Wybierz folder źródłowy NAND" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Wybierz domyślne ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Wybierz folder do dodania" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Wybierz plik do otwarcia" @@ -1102,7 +1108,7 @@ msgstr "Wybierz plik do otwarcia" msgid "Choose a memory card:" msgstr "Wybierz kartę pamięci:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1110,8 +1116,8 @@ msgstr "" "Wybierz plik używany jako apploader: (dotyczy dysków stworzonych tylko z " "folderów)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Wypakuj do" @@ -1130,7 +1136,7 @@ msgstr "Classic" msgid "Clear" msgstr "Wyczyść" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1140,7 +1146,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Zamknij" @@ -1149,11 +1155,11 @@ msgstr "Zamknij" msgid "Co&nfigure..." msgstr "Ko&nfiguruj..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Info kodu" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Kod:" @@ -1165,20 +1171,20 @@ msgstr "Polecenie" msgid "Comment" msgstr "Komentarz" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Komentarz:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Kompresuj ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Kompresuj wybrane ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Kompresowanie ISO" @@ -1196,8 +1202,8 @@ msgstr "Konfiguracja" msgid "Configure Control" msgstr "Konfiguracja sterowania" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Konfiguracja padów" @@ -1205,13 +1211,13 @@ msgstr "Konfiguracja padów" msgid "Configure..." msgstr "Konfiguruj..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Potwierdź nadpis pliku" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Potwierdź przy zatrzymaniu" @@ -1225,7 +1231,7 @@ msgstr "Połącz" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Podłącz klawiaturę USB" @@ -1250,7 +1256,7 @@ msgstr "Połącz Wiilot 3" msgid "Connect Wiimote 4" msgstr "Połącz Wiilot 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Łączę..." @@ -1270,7 +1276,7 @@ msgstr "Sterowanie" msgid "Convert to GCI" msgstr "Konwertuj do GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopiowanie nie powiodło się" @@ -1279,16 +1285,11 @@ msgstr "Kopiowanie nie powiodło się" msgid "Copy to Memcard %c" msgstr "Kopiuj do Memcard %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Rdzeń" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Nie można utworzyć %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Beckend %s nie mógł zostać zainicjalizowany." @@ -1304,12 +1305,12 @@ msgstr "" "Wii. Zwróć uwagę, że oryginalne nośniki GC i Wii nie będą odczytywane przez " "większość napędów DVD." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Nie rozpoznao pliku ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Nie można zapisać %s" @@ -1334,11 +1335,11 @@ msgstr "" "Czy wiadomość ta pojawia się po przeniesieniu folderu emulatora?\n" "Jeśli tak, należy ponownie określić ścieżki kart pamięci w opcjach programu." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Nie odnaleziono polecenia otwarcia dla rozszerzenia 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1346,17 +1347,17 @@ msgstr "" "Nie można zainicjować rdzenia.\n" "Sprawdź konfigurację." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Ilość:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Kraj:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Utwórz kod AR" @@ -1391,12 +1392,12 @@ msgstr "" msgid "Crossfade" msgstr "Suwak" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Aktualny folder zmieniono z %s na %s po wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Custom Projection Hack" @@ -1404,11 +1405,11 @@ msgstr "Custom Projection Hack" msgid "Custom Projection Hack Settings" msgstr "Ustawienia Custom Projection Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Własne parametry Orthographic Projection" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Czeski" @@ -1424,20 +1425,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP Emulator Engine" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE emulacja (szybkie)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE interpreter (wolne)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE rekompilator" @@ -1445,11 +1446,11 @@ msgstr "DSP LLE rekompilator" msgid "DSP settings" msgstr "Ustawienia DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Źródło DVD:" @@ -1461,15 +1462,15 @@ msgstr "DVDLowRead - Fatal Error: błąd odczytu dysku" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Fatal Error: błąd odczytu dysku" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Rozmiar danych" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Data:" @@ -1498,16 +1499,16 @@ msgstr "Debugowanie" msgid "Decimal" msgstr "Dziesiętnie" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Wypakuj ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Wypakuj wybrane ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Wypakowywanie ISO" @@ -1519,7 +1520,7 @@ msgstr "" msgid "Default" msgstr "Domyślne" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Domyślne ISO:" @@ -1563,8 +1564,8 @@ msgstr "" msgid "Device" msgstr "Urządzenie" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Ustawienia urządzenia" @@ -1572,15 +1573,12 @@ msgstr "Ustawienia urządzenia" msgid "Dial" msgstr "Pokrętło" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1639,7 +1637,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Dysk" @@ -1666,19 +1664,19 @@ msgstr "" msgid "Divide" msgstr "Podziel" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Zatrzymać aktualną emulację?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dekoder Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1709,9 +1707,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1735,12 +1732,12 @@ msgstr "Konfiguracja emulowanego Wiilota" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Konfiguracja GCPad'a" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Filmy TAS (*.dtm)" @@ -1752,7 +1749,7 @@ msgstr "Konfiguracja Wiilot'a" msgid "Dolphin at &Google Code" msgstr "Dolphin na &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1760,7 +1757,7 @@ msgstr "" "Program nie mógł znaleść żadnych obrazów GC/Wii ISO. Kliknij tutaj by " "przeglądać pliki..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1768,12 +1765,12 @@ msgstr "" "Program jest obecnie ustawiony by ukrywać wszystkie gry. Kliknij tutaj by " "pokazać wszystkie gry..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Program nie był w stanie zakończyć żądanej akcji." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1797,11 +1794,11 @@ msgstr "Pobrano %lu kodów. (dodano %lu)" msgid "Drums" msgstr "Perkusja" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Atrapa" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Zrzut audio" @@ -1847,9 +1844,9 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Holenderski" @@ -1873,7 +1870,7 @@ msgstr "" "%d. %d -- Jeśli ostatnio aktualizowałeś program, ponowne uruchomienie " "systemu jest wymagane aby sterownik zaczął działać." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "Europa" @@ -1889,14 +1886,10 @@ msgstr "Edycja" msgid "Edit ActionReplay Code" msgstr "Edytuj kody ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Edytuj konfigurację" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Edytuj patch" @@ -1905,8 +1898,8 @@ msgstr "Edytuj patch" msgid "Edit current perspective" msgstr "Edytuj bierzącą perspektywę" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Edytuj..." @@ -1918,7 +1911,7 @@ msgstr "Efekt" msgid "Embedded Frame Buffer" msgstr "Embedded Frame Buffer" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Wątek emulacji jest już uruchomiony" @@ -1957,7 +1950,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Emulowany Wiilot" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Stan emulacji:" @@ -1981,15 +1974,15 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Włącz log AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Włącz łączenie bloków" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Włącz Bounding Box Calculation" @@ -1997,27 +1990,27 @@ msgstr "Włącz Bounding Box Calculation" msgid "Enable Cache" msgstr "Włącz cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Włącz kody" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Włącz 2 rdzenie" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Włącz 2 rdzenie (przyspieszenie)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Włącz Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Włącz Idle Skipping (przyspieszenie)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Włącz MMU" @@ -2025,7 +2018,7 @@ msgstr "Włącz MMU" msgid "Enable Progressive Scan" msgstr "Włącz Progressive Scan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Włącz wygaszacz ekranu" @@ -2033,7 +2026,7 @@ msgstr "Włącz wygaszacz ekranu" msgid "Enable Speaker Data" msgstr "Włącz dane głosu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Włącz WideScreen" @@ -2055,7 +2048,7 @@ msgstr "" "\n" "W razie wątpliwości, wybierz 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2091,7 +2084,7 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2099,18 +2092,18 @@ msgstr "" "Włącz to by przyspieszyć The Legend of Zelda: Twilight Princess. Wyłącz dla " "KAŻDEJ innej gry." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Włącza Custom Projection Hack" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" "Włącza emulację Dolby Pro Logic II używając 5.1 surround. Niedostępne na OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2128,7 +2121,7 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2150,9 +2143,9 @@ msgstr "" msgid "End" msgstr "Koniec" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Angielski" @@ -2175,21 +2168,20 @@ msgstr "Wejście %d/%d" msgid "Entry 1/%d" msgstr "Wejście 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Równy" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Błąd" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "Błąd wczytywania wybranego języka. Ustawienia domyślne." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2237,7 +2229,7 @@ msgstr "" msgid "Export Failed" msgstr "Eksportuj nieudany" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Eksportuj plik" @@ -2253,7 +2245,7 @@ msgstr "Eksportuj nagranie..." msgid "Export Save" msgstr "Eksportuj zapis" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Eksportuj zapis Wii (eksperymentalne)" @@ -2269,7 +2261,7 @@ msgstr "" msgid "Export save as..." msgstr "Eksportuj zapis jako..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Rozszerzenie" @@ -2285,44 +2277,44 @@ msgstr "Parametr Dodatkowy" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Parametr Dodatkowy przydatny tylko w ''Metroid: Other M\"." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Wypakuj wszystkie pliki..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Wypakuj Apploader'a..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Wypakuj DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Wypakuj folder..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Wypakuj plik..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Wypakuj partycję..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Wypakowywanie %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Wypakowywanie wszystkich plików" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Wypakowywanie folderu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Wypakowywanie..." @@ -2334,15 +2326,15 @@ msgstr "Bajt FIFO" msgid "FIFO Player" msgstr "FIFO Player" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "Francja" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Rozmiar FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Połączenie nieudane!" @@ -2350,11 +2342,15 @@ msgstr "Połączenie nieudane!" msgid "Failed to download codes." msgstr "Pobieranie kodów nieudane!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Wypakowanie do %s nie udało się!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2403,7 +2399,7 @@ msgstr "Błąd odczytu banner.bin" msgid "Failed to read bk header" msgstr "Odczyt nagłówka bk nie powiódł się" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2414,7 +2410,7 @@ msgstr "" "Karta pamięci może być okrojona\n" "FilePosition:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2422,7 +2418,7 @@ msgstr "" "Błąd poprawnego odczytu block allocation table backup\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2440,7 +2436,7 @@ msgstr "Odczyt z %d nieudany" msgid "Failed to read data from file: %s" msgstr "Odczyt z pliku %s nie powiódł się" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2448,7 +2444,7 @@ msgstr "" "Błąd poprawnego odczytu folderu zapasowego\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2460,7 +2456,7 @@ msgstr "" msgid "Failed to read header" msgstr "Odczyt nagłówka nie powiódł się" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2473,7 +2469,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Błąd odczytu unikalnego ID z obrazu dysku" @@ -2495,7 +2491,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "Zapis nagłówka do %s nie powiódł się" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Farsi" @@ -2507,7 +2503,7 @@ msgstr "Szybki" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Szybka wersja MMU. Nie funkcjonuje dla każdej gry." @@ -2543,7 +2539,7 @@ msgstr "" "Nie można otworzyć pliku\n" "lub posiada niewłaściwe rozszerzenie" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2556,7 +2552,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Plik nierozpoznany jako karta pamięci" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Plik nie skompresowany" @@ -2565,11 +2561,11 @@ msgstr "Plik nie skompresowany" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Nieznany tryb otwarcia: 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "System plików" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Nieznany plik typu 'ini'! Nie otworzy się!" @@ -2597,7 +2593,7 @@ msgstr "Wymuś 16:9" msgid "Force 4:3" msgstr "Wymuś 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Wymuś konsolę jako NTSC-J" @@ -2629,7 +2625,7 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2639,7 +2635,7 @@ msgstr "" "Pozostaw wyłączone, domyślnie NTSC-U i automatycznie włącza gdy gramy w " "japońskie gry." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2651,7 +2647,7 @@ msgstr "" msgid "Forward" msgstr "W przód" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2694,7 +2690,7 @@ msgstr "Zasięg klatki" msgid "Frame S&kipping" msgstr "Frame S&kipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Limit klatek:" @@ -2706,9 +2702,9 @@ msgstr "Klatki do nagrania" msgid "Free Look" msgstr "Free Look" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francuski" @@ -2741,27 +2737,27 @@ msgstr "GCPad" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID gry:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Gra jest już uruchomiona!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Gra nie jest uruchomiona!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Nie znaleziono gry!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Specyficzne ustawienia gry" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Konfiguracja gry" @@ -2769,7 +2765,7 @@ msgstr "Konfiguracja gry" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "Pliki zapisu GameCube(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2778,7 +2774,7 @@ msgid "Gamecube &Pad Settings" msgstr "Ustawienia &pada GC" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Karty pamięci GC (*.raw,*.gcp)" @@ -2786,12 +2782,12 @@ msgstr "Karty pamięci GC (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Ustawienia pada GC" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Kody Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2805,7 +2801,7 @@ msgstr "" "zrestartowaniiu programu)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Główne" @@ -2814,13 +2810,13 @@ msgstr "Główne" msgid "General Settings" msgstr "Ustawienia ogólne" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Niemiecki" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Indeks jest większy niż rozmiar listy kodów AR %lu" @@ -2833,7 +2829,7 @@ msgstr "Grafika" msgid "Graphics settings" msgstr "Ustawienia graficzne" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Większy niż" @@ -2855,7 +2851,7 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw włączone." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Grecki" @@ -2879,11 +2875,11 @@ msgstr "Gitara" msgid "Hacks" msgstr "Hacki" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Suma kontrolna nagłówka nie powiodła się" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebrajski" @@ -2895,7 +2891,7 @@ msgstr "Wysokość" msgid "Help" msgstr "Pomoc" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2916,7 +2912,7 @@ msgstr "" "\n" "Narka!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2954,7 +2950,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -2963,11 +2959,11 @@ msgid "Hotkey Configuration" msgstr "Konfiguracja skrótów klawiszowych" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Skróty klawiszowe" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Węgierski" @@ -2975,17 +2971,17 @@ msgstr "Węgierski" msgid "Hybrid Wiimote" msgstr "Hybrydowy Wiilot" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Próba otrzymania danych z nieznanego ticket'u: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -2994,15 +2990,15 @@ msgstr "" "TitleID %016llx.\n" "Program teraz chyba się zawiesi :C" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - zła ścieżka" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Ustawienia IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3014,15 +3010,15 @@ msgstr "Wskaźnik IR" msgid "IR Sensitivity:" msgstr "Czułość IR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Szczegóły ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Foldery ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "Włochy" @@ -3030,7 +3026,7 @@ msgstr "Włochy" msgid "Icon" msgstr "Ikona" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3102,7 +3098,7 @@ msgstr "" "Zaimportowany plik posiada rozszerzenie sav\n" "lecz nie posiada właściwego nagłówka" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "W grze" @@ -3111,7 +3107,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3131,7 +3127,7 @@ msgstr "Wstaw" msgid "Insert Encrypted or Decrypted code here..." msgstr "Wprowadź zaszyfrowany/zdeszyfrowany kod tutaj..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Włóż kartę SD" @@ -3143,34 +3139,34 @@ msgstr "Wprowadź nazwę tutaj..." msgid "Install WAD" msgstr "Zainstaluj WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Zainstaluj do Wii Menu" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler wywołany, ale ta platforma nie wspiera go jeszcze." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Instalacja WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Błąd sprawdzania integralności" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Sprawdzanie integralności zakończone" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Sprawdzanie integralności zakończone. Nie znaleziono błędów." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3179,11 +3175,11 @@ msgstr "" "Sprawdzenie integralności dla partycji %d nie powiodło się. Twój zrzut jest " "prawdopodobnie uszkodzony lub został źle spatchowany." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Interfejs" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Ustawienia interfejsu" @@ -3212,7 +3208,7 @@ msgstr "Wewnętrzna rozdzielczość:" msgid "Interpreter (VERY slow)" msgstr "Interpreter (BARDZO wolne)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3221,7 +3217,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Niewłaściwy rozmiar (%x) lub Magic word (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Niewłaściwa wartość!" @@ -3229,16 +3225,16 @@ msgstr "Niewłaściwa wartość!" msgid "Invalid bat.map or dir entry" msgstr "Niewłaściwe bat.map lub wejście folderu" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Niewłaściwy typ zdarzenia %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Niewłaściwy plik" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3267,34 +3263,36 @@ msgstr "" "Niewłaściwy łańcuch przeszukiwania (wspierane są tylko równe długości " "łańcucha)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Niewłaściwy stan" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Włoski" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "Japonia" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT Recompiler (zalecane)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL experimental recompiler" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japoński" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "Korea" @@ -3316,8 +3314,9 @@ msgstr "Okno na wierzchu" msgid "Key" msgstr "Klawisz" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Koreański" @@ -3335,7 +3334,7 @@ msgstr "L Button" msgid "L-Analog" msgstr "L-Analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Język:" @@ -3344,7 +3343,7 @@ msgstr "Język:" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Opóźnienie:" @@ -3383,11 +3382,11 @@ msgstr "" "LPM/PPM więcej opcji.\n" "ŚPM by wyczyścić." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Mniej niż" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Limit FPS" @@ -3479,11 +3478,11 @@ msgstr "" msgid "Load State..." msgstr "Wczytaj stan..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Wczytaj Wii System Menu" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Wczytaj Wii System Menu %d %c" @@ -3534,12 +3533,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Logger Outputs" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Logging" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Połączenie z serwerem przerwane!" @@ -3556,7 +3555,7 @@ msgstr "" "MD5 niepoprawne\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Speed Hack" @@ -3570,11 +3569,11 @@ msgstr "Pliki MadCatz Gameshark(*.gcs)" msgid "Main Stick" msgstr "Główna gałka" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID twórcy:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Twórca:" @@ -3611,7 +3610,7 @@ msgid "Memory Byte" msgstr "Bajt pamięci" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Karta pamięci" @@ -3623,7 +3622,7 @@ msgstr "" "Memory Card Manager OSTRZEŻENIE - Twórz kopie zapasowe przed użyciem, " "powinno zostać naprawione, ale może namieszać!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3640,7 +3639,7 @@ msgstr "" "%s\n" "Czy chcesz skopiować stary plik do nowej lokacji?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "Wielkość pliku karty pamięci nie odpowiada wielkości nagłówka" @@ -3648,7 +3647,7 @@ msgstr "Wielkość pliku karty pamięci nie odpowiada wielkości nagłówka" msgid "Menu" msgstr "Menu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mikrofon" @@ -3661,7 +3660,7 @@ msgstr "Min" msgid "Misc" msgstr "Różne" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Ustawienia różne" @@ -3686,11 +3685,11 @@ msgstr "" msgid "Monospaced font" msgstr "Nieproporcjonalna czcionka" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3810,15 +3809,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Up" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Nazwa:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Nazwa:" @@ -3828,7 +3827,7 @@ msgstr "Nazwa:" msgid "Native GCI files(*.gci)" msgstr "Natywne pliki GCI(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nowe skanowanie" @@ -3837,7 +3836,7 @@ msgstr "Nowe skanowanie" msgid "Next Page" msgstr "Następna strona" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Następne skanowanie" @@ -3845,11 +3844,11 @@ msgstr "Następne skanowanie" msgid "Nickname :" msgstr "Ksywa:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "No Country (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Nie odnaleziono IOS/WAD" @@ -3888,24 +3887,25 @@ msgstr "Brak nagranego pliku" msgid "No save folder found for title %s" msgstr "Nie odnaleziono folderu zapisu dla tytułu %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Żadne" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norweski" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Nie równe" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Nie ustawiono" @@ -3914,11 +3914,11 @@ msgstr "Nie ustawiono" msgid "Not a Wii save or read failure for file header size %x" msgstr "To nie jest zapis Wii lub błąd odczytu rozmiaru nagłówka pliku %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Nie połączono" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notatki" @@ -3939,7 +3939,7 @@ msgstr "Uwagi" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Liczba kodów:" @@ -3960,7 +3960,7 @@ msgstr "Objekt" msgid "Object Range" msgstr "Zasięg objektu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Wyłączone" @@ -3968,7 +3968,7 @@ msgstr "Wyłączone" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "On-Screen Display Messages" @@ -3986,11 +3986,11 @@ msgstr "Dostępnych tylko %d bloków" msgid "Open" msgstr "Otwórz" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Otwórz &folder zawartości" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Otwórz folder &zapisów Wii" @@ -4020,17 +4020,13 @@ msgstr "OpenCL Texture Decoder" msgid "OpenMP Texture Decoder" msgstr "OpenMP Texture Decoder" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opcje" @@ -4051,7 +4047,7 @@ msgstr "" msgid "Other" msgstr "Pozostałe" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4067,11 +4063,11 @@ msgstr "Wyjście" msgid "P&lay Recording..." msgstr "Od&twórz nagranie" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Pad" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Pad " @@ -4095,26 +4091,26 @@ msgstr "Paragraf" msgid "Parameters" msgstr "Paramerty" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partycja %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patche" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Ścieżki" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pause" @@ -4127,7 +4123,7 @@ msgstr "Zatrzymaj na koncu filmu" msgid "Per-Pixel Lighting" msgstr "Per-Pixel Lighting" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfekcyjny" @@ -4138,8 +4134,8 @@ msgstr "Perspekrtywa %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Play" @@ -4151,7 +4147,7 @@ msgstr "Odtwórz nagranie" msgid "Play/Pause" msgstr "Play/Pause" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Grywalny" @@ -4159,11 +4155,11 @@ msgstr "Grywalny" msgid "Playback Options" msgstr "Opcje playback'u" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Gracze" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Potwierdź..." @@ -4175,36 +4171,36 @@ msgstr "Proszę utworzyć perspektywę przed zapisem" msgid "Plus-Minus" msgstr "Plus-Minus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polski" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugalski" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugalski (Brazylijski)" @@ -4217,7 +4213,7 @@ msgstr "Post-Processing Effect:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Premature movie end in PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Premature movie end in PlayWiimote. %u + %d > %u" @@ -4239,7 +4235,7 @@ msgstr "Poprzednia strona" msgid "Previous Page" msgstr "Poprzednia strona" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Poprzednia wartość" @@ -4263,8 +4259,8 @@ msgstr "Purge Cache" msgid "Question" msgstr "Pytanie" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Zamknij" @@ -4286,7 +4282,7 @@ msgstr "R-Analog" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "Rosja" @@ -4325,7 +4321,7 @@ msgstr "Prawdziwe Wiiloty" msgid "Record" msgstr "Nagranie" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4377,10 +4373,10 @@ msgstr "Odśwież listę" msgid "Refresh game list" msgstr "Odśwież listę gier" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Usuń" @@ -4403,7 +4399,7 @@ msgstr "Generuj w oknie głównym" msgid "Reset" msgstr "Reset" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Wynik" @@ -4411,7 +4407,7 @@ msgstr "Wynik" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4424,17 +4420,17 @@ msgstr "Prawo" msgid "Right Stick" msgstr "Gałka prawa" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Wibracje" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Rosyjski" @@ -4508,12 +4504,12 @@ msgstr "" msgid "Save State..." msgstr "Zapisz stan..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Zapisz jako..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Zapisz spakowany GCM/ISO" @@ -4521,7 +4517,7 @@ msgstr "Zapisz spakowany GCM/ISO" msgid "Save current perspective" msgstr "Zapisz bierzącą perspektywę" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Zapisz wypakowany GCM/ISO" @@ -4534,16 +4530,16 @@ msgstr "Stan zapisu filmu %s jest uszkodzony, nagrywanie zatrzymane..." msgid "Scaled EFB Copy" msgstr "Scaled EFB Copy" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Sknauję %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Przeszukuję obrazy ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Przeszukuję..." @@ -4559,11 +4555,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Szukaj" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Filtr wyszukiwania" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Przeszukuj podfoldery" @@ -4586,12 +4582,12 @@ msgstr "Nie odnaleziono sekcji %s w SYSCONF" msgid "Select" msgstr "Select" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Wybierz plik nagrania" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Wybierz plik Wii WAD do zainstalowania" @@ -4613,19 +4609,19 @@ msgstr "Wybierz plik zapisu do importowania" msgid "Select floating windows" msgstr "Select floating windows" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Wybierz plik do wczytania" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Wybierz plik do zapisu" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Wybierz stan do wczytania" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Wybierz stan do zapisu" @@ -4647,7 +4643,7 @@ msgstr "" "\n" "W razie wątpliwości, wybierz Auto." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Wybrany progil kontrolera nie istnieje" @@ -4671,39 +4667,28 @@ msgstr "" "W razie wątpliwości, użyj rozdzielczości komputera.\n" "Jeśli nadal masz wątpliwości, użyj najwyższej działającej rozdzielczości." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Wybiera, które graficzne API ma być użyte wewnętrznie.\n" -"Direct3D 9 zazwyczaj jest najszybsze. OpenGL jest bardziej dokładne. " -"Direct3D 11 jest pomiędzy tymi opcjami.\n" -"Należy zauważyć, że Direct3D dostępny jest tylko pod systemami Windows.\n" -"\n" -"W razie wątpliwości, użyj Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Wybiera, które graficzne API ma być użyte wewnętrznie.\n" -"Direct3D 9 zazwyczaj jest najszybsze. OpenGL jest bardziej dokładne. " -"Direct3D 11 jest pomiędzy tymi opcjami.\n" -"Należy zauważyć, że Direct3D dostępny jest tylko pod systemami Windows.\n" -"\n" -"W razie wątpliwości, użyj OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Wyślij" @@ -4715,16 +4700,16 @@ msgstr "Pozycja Sensor Bar'a" msgid "Separator" msgstr "Separator" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbski" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "Serial Port 1 - Port używany przez urządzenia takie jak net adapter" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Ustaw jako domyślne ISO" @@ -4733,12 +4718,12 @@ msgstr "Ustaw jako domyślne ISO" msgid "Set as default Memcard %c" msgstr "Ustaw jako domyślną kartę pamięci %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive: Indeks jest większy niz rozmiar listy kodu AR %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4746,19 +4731,19 @@ msgstr "" "Ustaw opóźnienie (ms). Wyższe wartości mogą zniwelować trzaski dźwięków. " "Tylko OpenAL." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Ustawienia..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Wstrząs" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Krótka nazwa:" @@ -4782,7 +4767,7 @@ msgstr "Pokaż pasek &stanu" msgid "Show &Toolbar" msgstr "Pokaż pasek &narzędzi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4822,7 +4807,7 @@ msgstr "Pokaż Japonię" msgid "Show Korea" msgstr "Pokaż Koreę" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Pokaż język:" @@ -4862,11 +4847,11 @@ msgstr "Pokaż WAD" msgid "Show Wii" msgstr "Pokaż Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Pokazuje okno potwierdzenia przed zatrzymaniem gry." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4884,7 +4869,7 @@ msgstr "Pokaż pierwszy blok" msgid "Show lag counter" msgstr "Pokaż licznik opóźnienia" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4935,23 +4920,24 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Willot bokiem" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Chiński uproszczony" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Rozmiar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Pomiń BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Pomiń oczyszczanie DCBZ" @@ -4981,11 +4967,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -4993,7 +4979,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Snapshot" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Renderer Programowy" @@ -5009,27 +4995,27 @@ msgstr "" "Czy na pewno chcesz włączyć renderowanie programowe? W razie wątpliwości, " "wybierz 'Nie'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Ustawienia dźwięku" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Niewłaściwy sound beckend %s." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Utworzenie bufora dźwięku nie powiodło się: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Space" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Hiszpański" @@ -5057,7 +5043,7 @@ msgstr "" "\n" "W razie wątpliwości, wybierz 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Przyspiesz Disc Transfer Rate" @@ -5065,13 +5051,13 @@ msgstr "Przyspiesz Disc Transfer Rate" msgid "Square Stick" msgstr "Square Stick" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Standardowy kontroler" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5087,7 +5073,7 @@ msgstr "&Rozpocznij nagrywanie" msgid "Start Recording" msgstr "Rozpocznij nagrywanie" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Stan" @@ -5095,7 +5081,7 @@ msgstr "Stan" msgid "State Saves" msgstr "Stany zapisu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Kierownica" @@ -5144,19 +5130,19 @@ msgstr "Sukcesywnie wyeksportowano plik do %s" msgid "Successfully imported save files" msgstr "Importowanie zapisów zakończone powodzeniem" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Zamach" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Synchronizuj wątek GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5164,12 +5150,13 @@ msgstr "" "Synchronizuje wątki GPU i CPU by zapobiec zawieszaniu w trybie dwóch rdzeni " "(ON = zgodne, OFF = szybkie)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Język systemu:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "Taiwan" @@ -5200,7 +5187,7 @@ msgstr "Talerz prawo" msgid "Take Screenshot" msgstr "Zrób zdjęcie" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5220,11 +5207,11 @@ msgstr "Cache tekstur" msgid "Texture Format Overlay" msgstr "Format pokrycia tekstur" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD zainstalowany poprawnie" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Nieprawidłowy adres" @@ -5232,13 +5219,13 @@ msgstr "Nieprawidłowy adres" msgid "The checksum was successfully fixed" msgstr "Suma kontrolna poprawnie naprawiona" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Wybrany folder jest już na liście" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5261,7 +5248,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Plik %s jest już otwarty, nagłówek pliku nie zostanie zapisany." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Plik, który wybrałeś (%s) nie istnieje" @@ -5294,26 +5281,26 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "Zapis, który chcesz skopiować posiada niewłaściwą wielkość pliku." -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" "Wybrany język nie jest wspierany przez Twój system. Ustawienia domyślne." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Wersje NetPlay klienta i serwera są niekompatybilne!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Serwer pełny!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Odpowiedź serwera: gra aktualnie uruchomiona!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Serwer odesłał nieznany błąd!" @@ -5322,15 +5309,15 @@ msgstr "Serwer odesłał nieznany błąd!" msgid "The specified file \"%s\" does not exist" msgstr "Wskazany plik \"%s\" nie istnieje." -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Niewłaściwa wartość" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Kompozycja:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5338,7 +5325,7 @@ msgstr "" "Tutaj musi być ticket dla 00000001/00000002. Twój zrzut NAND jes " "prawdopodobnie niekompletny." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5346,7 +5333,7 @@ msgstr "" "Te ustawienia przewyższaja źródłowe ustawienia programu.\n" "Nieokreślone ustawienia odczytywane są ze źródłowych." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5354,7 +5341,7 @@ msgstr "" "Ten symulator action replay nie wspiera kodów, które modyfikują Action " "Replay'a." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Może powodować spowolnienie w Wii Menu i niektórych grach." @@ -5378,7 +5365,7 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5386,7 +5373,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5397,7 +5384,7 @@ msgstr "" "Znacznie zwiększa wydajność na komputerach z więcej niż jednym rdzeniem, ale " "powoduje także okazjonalne błedy." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Pozwala na ręczną edycję pliku konfiguracyjnego." @@ -5406,12 +5393,12 @@ msgstr "Pozwala na ręczną edycję pliku konfiguracyjnego." msgid "Threshold" msgstr "Threshold" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Przechylenie" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Tytuł" @@ -5446,15 +5433,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Góra" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Chiński tradycyjny" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Próbowano odczytać nieznany typ pliku." @@ -5474,7 +5462,7 @@ msgstr "" "Próba odczytu z niewłaściwego SYSCONF\n" "bt id Wiilota niedostępne" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turecki" @@ -5490,12 +5478,12 @@ msgstr "Typ" msgid "UDP Port:" msgstr "Port UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiilot" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "Nieznany" @@ -5504,7 +5492,7 @@ msgstr "Nieznany" msgid "UNKNOWN_%02X" msgstr "Nieznany_%X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5517,9 +5505,9 @@ msgstr "" "Wejście nie zostało zmienione." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5544,11 +5532,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "Nieoczekiwane wywołanie 0x80? Przerywanie..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Nieznany" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Nieznane polecenie DVD %08x - poważny błąd" @@ -5563,12 +5551,12 @@ msgstr "Nieznane polecenie 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Nieznany typ wejścia %i w SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Nieznana wiadomość o ID: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "Nieznana wiadomość o ID: %d od gracza: %d Gracz wylatuje!" @@ -5578,16 +5566,16 @@ msgstr "Nieznana wiadomość o ID: %d od gracza: %d Gracz wylatuje!" msgid "Up" msgstr "Góra" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Aktualizuj" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Willot pionowo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Użyj trybu EuRGB60 (PAL60)" @@ -5595,11 +5583,11 @@ msgstr "Użyj trybu EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Użyj trybu pełnoekranowego" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Użyj HEX" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Użyj Panic Handlers" @@ -5655,11 +5643,11 @@ msgstr "Narzędzie" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Wartość" @@ -5667,7 +5655,7 @@ msgstr "Wartość" msgid "Value:" msgstr "Wartość:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Wartość:" @@ -5679,7 +5667,7 @@ msgstr "Verbosity" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Wideo" @@ -5687,7 +5675,7 @@ msgstr "Wideo" msgid "Virtual" msgstr "Wirtualny" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Poziom" @@ -5719,15 +5707,15 @@ msgstr "" msgid "Warning" msgstr "Ostrzeżenie" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Ostrzeżenie - uruchomienie DOL w złym trybie konsoli!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Ostrzeżenie - uruchomienie ELF w złym trybie konsoli!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Ostrzeżenie - uruchomienie ISO w złym trybie konsoli!" @@ -5828,19 +5816,19 @@ msgstr "Widescreen Hack" msgid "Width" msgstr "Szerokość" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Konsola Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Źródło Wii NAND:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Pliki zapisu Wii (*.bin)|*.bin" @@ -5853,12 +5841,18 @@ msgstr "WiiWAD: nie moża odczytać z pliku" msgid "Wiimote" msgstr "Wiilot" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiilot" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiilot %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiilot połączony" @@ -5890,14 +5884,14 @@ msgstr "Windows Right" msgid "Word Wrap" msgstr "Zawijanie wierszy" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Pracuję..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5917,21 +5911,36 @@ msgstr "Zapisz do pliku" msgid "Write to Window" msgstr "Wpisz do okna" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice nie powiodło się: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "Inicjalizacja XAudio2 nie powiodła się: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "Utworzenie XAudio2 master voice nie powiodło się: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice nie powiodło się: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "Inicjalizacja XAudio2 nie powiodła się: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "Utworzenie XAudio2 master voice nie powiodło się: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -5962,15 +5971,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Nie możesz zamknąć paneli jeśli są w nich strony." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Wybierz grę!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Musisz wprowadzić nazwę!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "" "Musisz wprowadzić poprawną wartość dziesiętną, szestnastkową lub ósemkową." @@ -5979,7 +5988,7 @@ msgstr "" msgid "You must enter a valid profile name." msgstr "Musisz wprowadzić poprawną nazwę profilu." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Musisz ponownie uruchomić program w celu zaaplikowania zmian." @@ -5993,7 +6002,7 @@ msgstr "" "Czy chcesz zatrzymać i naprawić problrm?\n" "Jeśli wybierzesz \"Nie\", audio będzie zniekształcone." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6012,15 +6021,15 @@ msgstr "" "Powinno być 0x%04x (jest 0x%04llx)\n" "Czy chcesz wygenerować nowy?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Kod 3 zero niewspierany" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Kod zero nieznany dla programu: %08x" @@ -6079,29 +6088,24 @@ msgstr "" "\n" "W razie wątpliwości, pozostaw wyłączone." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Odczyt Opcode z %x. Raportuj." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute zwrócił -1 przy uruchamianiu programu!" @@ -6116,3 +6120,42 @@ msgstr "zNear Correction: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OR" + +#~ msgid "Could not create %s" +#~ msgstr "Nie można utworzyć %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Wybiera, które graficzne API ma być użyte wewnętrznie.\n" +#~ "Direct3D 9 zazwyczaj jest najszybsze. OpenGL jest bardziej dokładne. " +#~ "Direct3D 11 jest pomiędzy tymi opcjami.\n" +#~ "Należy zauważyć, że Direct3D dostępny jest tylko pod systemami Windows.\n" +#~ "\n" +#~ "W razie wątpliwości, użyj Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Wybiera, które graficzne API ma być użyte wewnętrznie.\n" +#~ "Direct3D 9 zazwyczaj jest najszybsze. OpenGL jest bardziej dokładne. " +#~ "Direct3D 11 jest pomiędzy tymi opcjami.\n" +#~ "Należy zauważyć, że Direct3D dostępny jest tylko pod systemami Windows.\n" +#~ "\n" +#~ "W razie wątpliwości, użyj OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Odczyt Opcode z %x. Raportuj." diff --git a/Languages/po/pt.po b/Languages/po/pt.po index b741aac1e4..62db97137d 100644 --- a/Languages/po/pt.po +++ b/Languages/po/pt.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-16 18:55+0000\n" "Last-Translator: 100tpt <100nome.portugal@gmail.com>\n" "Language-Team: Portuguese (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(demasiados para mostrar)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Jogo: " @@ -34,7 +34,7 @@ msgstr "Jogo: " msgid "! NOT" msgstr "! NÃO" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "" msgid "%1$sCopy%1$s" msgstr "%1$sCopiar%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d amostras" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d amostras (nível de qualidade %d)" @@ -74,26 +74,26 @@ msgstr "%d amostras (nível de qualidade %d)" msgid "%s already exists, overwrite?" msgstr "%s já existe, substituir?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s falha ao ficar scrubbed. Provavelmente a imagem está corrompida." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card file size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -105,7 +105,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s falha ao abrir" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -115,7 +115,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s é um ficheiro com 0 bytes" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s já está comprimido! Não é possível comprimir mais." @@ -174,11 +174,11 @@ msgstr "&Gestor de Cheats" msgid "&DSP Settings" msgstr "&Definições de DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Eliminar ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Eliminar ISOs seleccionados..." @@ -242,7 +242,7 @@ msgstr "&Pausa" msgid "&Play" msgstr "&Começar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Propriedades" @@ -286,7 +286,7 @@ msgstr "&Ver" msgid "&Wiimote Settings" msgstr "&Definições Wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -322,7 +322,7 @@ msgstr "" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -338,7 +338,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -354,7 +354,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -366,7 +366,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -374,7 +374,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -382,13 +382,13 @@ msgstr "" msgid "A" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Uma janela NetPlay já está aberta!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Nenhum jogo actualmente a correr." @@ -407,21 +407,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Códigos AR" @@ -465,7 +466,7 @@ msgstr "" "Culprit Code:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -473,7 +474,7 @@ msgstr "" "Erro Action Replay: Tamanho Inválido (%08x : address = %08x) em Adição de " "Código (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -482,7 +483,7 @@ msgstr "" "Erro Action Replay: Tamanho inválido (%08x : address = %08x) em " "Preenchimento e Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -491,7 +492,7 @@ msgstr "" "Erro Action Replay: Tamanho inválido (%08x : address = %08x) em Escrita e " "Preenchimento Ram (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -500,39 +501,39 @@ msgstr "" "Erro Action Replay: Tamanho inválido (%08x : address = %08x) em Escrita para " "Ponteiro (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Erro Action Replay: Valor inválido (%08x) em cópia de memória (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" "Master codes are not needed. Do not use master codes." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Erro Action Replay: linha de código AR inválida: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay:Código Condicional: Tamanho Inválido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Tipo de código normal inválido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Código normal %i: Subtipo inválido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Código Normal 0: Subtipo Inválido %08x (%s)" @@ -546,11 +547,11 @@ msgstr "Adaptador:" msgid "Add" msgstr "Adicionar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Adicionar Código ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Adicionar Patch" @@ -558,9 +559,9 @@ msgstr "Adicionar Patch" msgid "Add new pane" msgstr "Adicionar novo painel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Adicionar..." @@ -613,36 +614,36 @@ msgstr "" msgid "Advanced" msgstr "Avançadas" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Definições avançadas" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Todos os ficheiros Gamecube GCM (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Todos os Estados Guardados (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Todos os ficheiros Wii ISO (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Todos os ficheiros GC/Wii ISO comprimidos (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Todos os ficheiros (*.*)|*.*" @@ -662,19 +663,19 @@ msgstr "Filtro Anisotrópico" msgid "Anti-Aliasing:" msgstr "Anti-Serrilhamento" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Apploader é do tamanho errado...é mesmo uma apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader impossibilitada de carregar através do ficheiro" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Aplicar" @@ -688,7 +689,7 @@ msgstr "" "\n" "Em caso de dúvida, seleccione (off)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Árabe" @@ -697,7 +698,7 @@ msgstr "Árabe" msgid "Are you sure you want to delete \"%s\"?" msgstr "Tem a certeza que quer apagar \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -705,7 +706,7 @@ msgstr "" "Tem a certeza que quer apagar estes ficheiros?\n" "Serão eliminados permanentemente!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Tem a certeza que quer eliminar este ficheiro? Será eliminado " @@ -715,7 +716,11 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Proporção de ecrã:" @@ -724,12 +729,12 @@ msgstr "Proporção de ecrã:" msgid "At least one pane must remain open." msgstr "Pelo menos um painel deve manter-se aberto." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Áudio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Áudio Backend :" @@ -737,7 +742,7 @@ msgstr "Áudio Backend :" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Erro ao abrir dispositivo AO.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Automático" @@ -776,16 +781,16 @@ msgstr "" msgid "Back" msgstr "Trás" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Definições Backend" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Backend:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Introdução em segundo plano" @@ -803,15 +808,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Detalhes de Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Banner:" @@ -823,7 +828,7 @@ msgstr "Barra" msgid "Basic" msgstr "Básico" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Definições Básicas" @@ -831,7 +836,7 @@ msgstr "Definições Básicas" msgid "Bass" msgstr "Baixo" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Verificação da Tabela de Atribuição de Blocos falhou" @@ -852,7 +857,7 @@ msgid "Blue Right" msgstr "Azul Direita" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Inferior" @@ -861,7 +866,7 @@ msgstr "Inferior" msgid "Bound Controls: %lu" msgstr "Controlos agregados: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Inactivo" @@ -869,7 +874,7 @@ msgstr "Inactivo" msgid "Browse" msgstr "Procurar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Procurar por uma pasta para adicionar" @@ -877,11 +882,11 @@ msgstr "Procurar por uma pasta para adicionar" msgid "Browse for an ISO directory..." msgstr "Procurar por uma pasta de ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Procurar por pasta de destino" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -891,7 +896,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Botões" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -913,7 +918,7 @@ msgstr "C-Stick" msgid "CP reg" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Motor de emulador de CPU" @@ -937,17 +942,17 @@ msgstr "" "\n" "Em caso de dúvida, mantenha esta opção desactivada." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Cancelar" @@ -959,11 +964,11 @@ msgstr "Cancelar" msgid "Cannot open %s" msgstr "Impossível abrir %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Impossível retirar registo de eventos quando há eventos pendentes" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -971,7 +976,7 @@ msgid "" "is not a valid gamecube memory card file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -983,7 +988,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Catalão" @@ -991,7 +996,7 @@ msgstr "Catalão" msgid "Center" msgstr "Centro" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Mudar" @@ -1003,11 +1008,11 @@ msgstr "Mudar &Disco..." msgid "Change Disc" msgstr "Mudar Disco" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Mudar de Jogo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1023,12 +1028,12 @@ msgstr "Alterações assinaladas a parâmetro zFar (após correcção)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Mudanças assinaladas a parâmetro zNear (após correcção)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "Alterações não vão surtir efeito enquanto o emulador estiver em execução!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Conversa" @@ -1036,47 +1041,47 @@ msgstr "Conversa" msgid "Cheat Code" msgstr "Código de Cheat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Procura de Cheats" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Gestor de Cheats" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "A verificar integridade..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chinês (Simplificado)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinês (Tradicional)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Escolha uma pasta de raiz do DVD:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Escolha uma pasta de raiz NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Escolha um ISO padrão:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Escolha uma pasta para adicionar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Escolha um ficheiro para abrir" @@ -1084,7 +1089,7 @@ msgstr "Escolha um ficheiro para abrir" msgid "Choose a memory card:" msgstr "Escolha um cartão de memória:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1092,8 +1097,8 @@ msgstr "" "Escolha o ficheiro a usar como apploader: (aplica-se a apenas a discos " "construídos através de pastas)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Escolha a pasta para extrair" @@ -1112,7 +1117,7 @@ msgstr "Clássico" msgid "Clear" msgstr "Limpar" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1122,7 +1127,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Fechar" @@ -1131,11 +1136,11 @@ msgstr "Fechar" msgid "Co&nfigure..." msgstr "Co&nfigurar..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Info de Código" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Código:" @@ -1147,20 +1152,20 @@ msgstr "Comando" msgid "Comment" msgstr "Comentário" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Comentar:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Comprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Comprimir ISOs seleccionados..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "A comprimir ISO" @@ -1178,8 +1183,8 @@ msgstr "Configuração" msgid "Configure Control" msgstr "Configuração de Controlos" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Configuração de Comandos" @@ -1187,13 +1192,13 @@ msgstr "Configuração de Comandos" msgid "Configure..." msgstr "Configurar..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Confirmar Substituição de Ficheiro" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Confirmar Ao Parar" @@ -1207,7 +1212,7 @@ msgstr "Conectar" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Conectar Teclado USB" @@ -1232,7 +1237,7 @@ msgstr "Conectar Wiimote 3" msgid "Connect Wiimote 4" msgstr "Conectar Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "A conectar..." @@ -1252,7 +1257,7 @@ msgstr "Controlo" msgid "Convert to GCI" msgstr "Converter para GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Cópia Falhou" @@ -1261,16 +1266,11 @@ msgstr "Cópia Falhou" msgid "Copy to Memcard %c" msgstr "Copiar para o Cartão de memória %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Core" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Não foi possível criar %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Não foi possível iniciar o backend %s." @@ -1286,12 +1286,12 @@ msgstr "" "de GC/Wii. Tenha atenção que discos de jogos originais Gamecube ou Wii não " "serão lidos na maioria das unidades de DVD." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Não foi possível reconhecer ficheiro ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Não foi possível guardar %s" @@ -1309,11 +1309,11 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Não foi possível encontrar comando aberto para a extensão 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1321,17 +1321,17 @@ msgstr "" "Não foi possível iniciar o core.\n" "Verifique a sua configuração." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Contador:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "País" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Criar um código AR" @@ -1366,12 +1366,12 @@ msgstr "" msgid "Crossfade" msgstr "Desvanecimento cruzado" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Hack de projecção personalizada" @@ -1379,11 +1379,11 @@ msgstr "Hack de projecção personalizada" msgid "Custom Projection Hack Settings" msgstr "Definições de Hack de projecção customizada" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Personalizar alguns parâmetros de Projecção Ortogonal." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Checo" @@ -1399,20 +1399,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Motor de Emulador DSP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "Emulação de DSP HLE (rápido)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "Interpretador DSP LLE (lento)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "Recompilador de DSP LLE" @@ -1420,11 +1420,11 @@ msgstr "Recompilador de DSP LLE" msgid "DSP settings" msgstr "Definições de DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Raiz de DVD:" @@ -1436,15 +1436,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Dimensão de Dados" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Data:" @@ -1473,16 +1473,16 @@ msgstr "Depuração" msgid "Decimal" msgstr "Decimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Descomprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Descomprimir ISOs seleccionados..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "A descomprimir ISO" @@ -1494,7 +1494,7 @@ msgstr "" msgid "Default" msgstr "Padrão" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "ISO Padrão:" @@ -1538,8 +1538,8 @@ msgstr "" msgid "Device" msgstr "Dispositivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Definições de Dispositivo" @@ -1547,15 +1547,12 @@ msgstr "Definições de Dispositivo" msgid "Dial" msgstr "Marcação" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1614,7 +1611,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disco" @@ -1641,19 +1638,19 @@ msgstr "" msgid "Divide" msgstr "Dividir" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Deseja parar a emulação actual?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1684,9 +1681,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1710,12 +1706,12 @@ msgstr "Configuração da emulação de Wiimote" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Configuração de GCPad " -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS filmes (*.dtm)" @@ -1727,7 +1723,7 @@ msgstr "Configuração Dolphin do Wiimote" msgid "Dolphin at &Google Code" msgstr "Dolphin em &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1735,7 +1731,7 @@ msgstr "" "O Dolphin não conseguiu encontrar ISOs de GC/Wii. Duplo clique aqui para " "procurar ficheiros..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1743,12 +1739,12 @@ msgstr "" "Dolphin está actualmente definido para esconder todos os jogos. Duplo " "clique aqui para mostrar todos os jogos..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1772,11 +1768,11 @@ msgstr "Descarregados %lu códigos. (adicionados %lu)" msgid "Drums" msgstr "Tambores" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Dummy" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Depositar Áudio" @@ -1823,9 +1819,9 @@ msgstr "" "\n" "Em caso de dúvida, mantenha esta opção desactivada." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Holandês" @@ -1846,7 +1842,7 @@ msgid "" "driver." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1862,14 +1858,10 @@ msgstr "Editar" msgid "Edit ActionReplay Code" msgstr "Editar Código ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Editar Configuração" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Editar Patch" @@ -1878,8 +1870,8 @@ msgstr "Editar Patch" msgid "Edit current perspective" msgstr "Editar perspectiva actual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Editar..." @@ -1891,7 +1883,7 @@ msgstr "Efeito" msgid "Embedded Frame Buffer" msgstr "Frame Buffer Embutido" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Thread de Emulador já em execução" @@ -1929,7 +1921,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Wiimote Emulado" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Estado da Emulação:" @@ -1953,15 +1945,15 @@ msgstr "" "Necessita de ecrã inteiro para funcionar.\n" "Em caso de dúvida mantenha esta opção desactivada." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Activar Execução de relatórios AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Activar Fusão de blocos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "" @@ -1969,27 +1961,27 @@ msgstr "" msgid "Enable Cache" msgstr "Activar Cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Activar Cheats" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Activar Dual Core" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Activar Dual Core (aumento de desempenho)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Activar Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Activar Idle Skipping (aumento de desempenho)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Activar MMU" @@ -1997,7 +1989,7 @@ msgstr "Activar MMU" msgid "Enable Progressive Scan" msgstr "Activar Progressive Scan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Activar Protector de Ecrã" @@ -2005,7 +1997,7 @@ msgstr "Activar Protector de Ecrã" msgid "Enable Speaker Data" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Activar Ecrã Panorâmico" @@ -2027,7 +2019,7 @@ msgstr "" "\n" "Em caso de dúvida, seleccione 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2064,7 +2056,7 @@ msgstr "" "\n" "Em caso de dúvida, mantenha esta opção desactivada." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2072,17 +2064,17 @@ msgstr "" "Activar isto para aumentar desempenho no The Legend of Zelda: Twilight " "Princess. Desactive para qualquer outro jogo." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Hack de projecção customizada" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2099,7 +2091,7 @@ msgstr "" "\n" "Em caso de dúvida, mantenha esta opção desactivada." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2121,9 +2113,9 @@ msgstr "" msgid "End" msgstr "Fim" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Inglês" @@ -2146,23 +2138,22 @@ msgstr "Entrada %d/%d" msgid "Entry 1/%d" msgstr "Entrada 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Igual" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Erro" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Erro ao carregar o idioma seleccionado. Será revertido para o idioma padrão " "do sistema." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2209,7 +2200,7 @@ msgstr "Exportar Todos os Jogos Guardados Wii" msgid "Export Failed" msgstr "A Exportação Falhou" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exportar Ficheiro" @@ -2225,7 +2216,7 @@ msgstr "Exportar Gravação..." msgid "Export Save" msgstr "Exportar Jogo Guardado" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exportar jogo guardado Wii (Experimental)" @@ -2241,7 +2232,7 @@ msgstr "A exportação falhou" msgid "Export save as..." msgstr "Exportar guardar como..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Extensão" @@ -2257,44 +2248,44 @@ msgstr "Parâmetro Extra" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Parâmetro Extra apenas útil em \"Metroid: Other M\"." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Extrair Todos os Ficheiros..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Extrair Apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Extrair DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Extrair Pasta..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Extrair Ficheiro..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Extrair Partição..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "A Extrair %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "A Extrair Todos os Ficheiros" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "A Extrair Pasta" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "A Extrair..." @@ -2306,15 +2297,15 @@ msgstr "FIFO Byte" msgid "FIFO Player" msgstr "Reprodutor FIFO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANÇA" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Tamanho FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "A Conexão Falhou!" @@ -2322,11 +2313,15 @@ msgstr "A Conexão Falhou!" msgid "Failed to download codes." msgstr "Falha ao descarregar códigos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Falha ao extrair para %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2376,7 +2371,7 @@ msgstr "Falha ao ler banner.bin" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2384,7 +2379,7 @@ msgid "" "FilePosition:%llx" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2393,7 +2388,7 @@ msgstr "" "atribuídos\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2411,7 +2406,7 @@ msgstr "Falha ao ler dados do ficheiro %d" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2419,7 +2414,7 @@ msgstr "" "Falha ao ler correctamente a pasta com cópia de segurança\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2431,7 +2426,7 @@ msgstr "" msgid "Failed to read header" msgstr "Falha ao ler cabeçalho" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2444,7 +2439,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Falha ao ler ID único da imagem do disco" @@ -2466,7 +2461,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "Falha ao escrever cabeçalho para %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "" @@ -2478,7 +2473,7 @@ msgstr "Rápido" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Versão rápida do MMU. Não funciona em todos os jogos." @@ -2512,7 +2507,7 @@ msgstr "" "O ficheiro não pôde ser aberto\n" "ou não tem uma extensão válida" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2525,7 +2520,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Ficheiros não são reconhecidos como sendo de cartão de memória" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Ficheiro não comprimido" @@ -2534,11 +2529,11 @@ msgstr "Ficheiro não comprimido" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Modo aberto desconhecido : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Sistema de ficheiros" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Tipo de ficheiro 'ini' é desconhecido! Não será aberto!" @@ -2566,7 +2561,7 @@ msgstr "Forçar 16:9" msgid "Force 4:3" msgstr "Forçar 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Definir a consola como NTSC-J" @@ -2599,7 +2594,7 @@ msgstr "" "\n" "Em caso de dúvida, mantenha esta opção desactivada." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2609,7 +2604,7 @@ msgstr "" "Se deixar desactivada, o dolphin utiliza a NTSC-U como padrão e " "automaticamente activa esta definição quando um jogo Japonês é jogado." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2621,7 +2616,7 @@ msgstr "" msgid "Forward" msgstr "Frente" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2664,7 +2659,7 @@ msgstr "Alcance de Quadros" msgid "Frame S&kipping" msgstr "S&altar Quadros" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Limite de Quadros:" @@ -2676,9 +2671,9 @@ msgstr "Quadros para Gravar" msgid "Free Look" msgstr "Vista Livre" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francês" @@ -2711,27 +2706,27 @@ msgstr "ComandoGC" msgid "GX_CMD_INVL_VC" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID do Jogo:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "O jogo já está a correr!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "O jogo não está a correr!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Jogo não encontrado!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Definições específicas por jogo" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Configuração de Jogo" @@ -2739,7 +2734,7 @@ msgstr "Configuração de Jogo" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2748,7 +2743,7 @@ msgid "Gamecube &Pad Settings" msgstr "Definições de Comando &Gamecube" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Cartões de memória Gamecube (*.raw,*.gcp)" @@ -2756,12 +2751,12 @@ msgstr "Cartões de memória Gamecube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Definições de Comando Gamecube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Códigos Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2771,7 +2766,7 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Geral" @@ -2780,13 +2775,13 @@ msgstr "Geral" msgid "General Settings" msgstr "Definições Gerais" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Alemão" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Index é maior que o tamanho da lista de código %lu" @@ -2799,7 +2794,7 @@ msgstr "Gráficos" msgid "Graphics settings" msgstr "Definições Gráficas" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Maior Que" @@ -2814,7 +2809,7 @@ msgid "" "If unsure, leave this checked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Grego" @@ -2838,11 +2833,11 @@ msgstr "Guitarra" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Verificação de Cabeçalho falhou" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebraico" @@ -2854,7 +2849,7 @@ msgstr "Altura" msgid "Help" msgstr "Ajuda" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2866,7 +2861,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2905,7 +2900,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -2914,11 +2909,11 @@ msgid "Hotkey Configuration" msgstr "Configuração de Teclas de atalho" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Teclas de Atalho" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Húngaro" @@ -2926,31 +2921,31 @@ msgstr "Húngaro" msgid "Hybrid Wiimote" msgstr "Wiimote Hibrido" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS:Tentativa de obter dados de um ticket desconhecido: %08x/" "%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - destino inválido" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Definições IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IV" @@ -2962,15 +2957,15 @@ msgstr "Ponteiro Infra Vermelho" msgid "IR Sensitivity:" msgstr "Sensibilidade de Infra Vermelhos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Detalhes ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Pastas ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "Itália" @@ -2978,7 +2973,7 @@ msgstr "Itália" msgid "Icon" msgstr "Ícone" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3048,7 +3043,7 @@ msgstr "" "O ficheiro importado tem a extensão sav\n" "mas não tem um cabeçalho correcto" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Em Jogo" @@ -3057,7 +3052,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Informação" @@ -3077,7 +3072,7 @@ msgstr "Inserir" msgid "Insert Encrypted or Decrypted code here..." msgstr "Insira o código criptográfado ou \"descriptografado\" aqui..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Inserir Cartão SD" @@ -3089,45 +3084,45 @@ msgstr "Introduza o nome aqui..." msgid "Install WAD" msgstr "Instalar WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Instalar para o Menu Wii" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler chamado, mas esta plataforma ainda não a suporta." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "A Instalar WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Iinterface" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Definições de interface" @@ -3156,7 +3151,7 @@ msgstr "Resolução Interna:" msgid "Interpreter (VERY slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3165,7 +3160,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Tamanho Inválido(%x) ou palavra mágica (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Valor inválido!" @@ -3173,16 +3168,16 @@ msgstr "Valor inválido!" msgid "Invalid bat.map or dir entry" msgstr "bat.map inválido ou entrada de pasta" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Tipo de evento inválido %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Ficheiro inválido" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3209,34 +3204,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Estado Inválido" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italiano" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPÃO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japonês" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "COREIA" @@ -3255,8 +3252,9 @@ msgstr "" msgid "Key" msgstr "Tecla" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Coreano" @@ -3274,7 +3272,7 @@ msgstr "Botão L" msgid "L-Analog" msgstr "L-Analógico" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Idioma:" @@ -3283,7 +3281,7 @@ msgstr "Idioma:" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "" @@ -3322,11 +3320,11 @@ msgstr "" "Clique Esquerdo/Direito para mais opções.\n" "Botão do meio para limpar." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Inferior que" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Limitar por FPS" @@ -3418,11 +3416,11 @@ msgstr "" msgid "Load State..." msgstr "Carregar Estado..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Carregar Sistema de Menu Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Carregar Sistema de Menu Wii %d%c" @@ -3469,12 +3467,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Saídas de Gerador de Relatórios" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Relatório em execução" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "A ligação ao servidor perdeu-se!" @@ -3491,7 +3489,7 @@ msgstr "" "MD5 não combina\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Hack de velocidade" @@ -3505,11 +3503,11 @@ msgstr "ficheiros MadCatz Gameshark(*.gcs)" msgid "Main Stick" msgstr "Stick Principal" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID do autor:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Fabricante:" @@ -3540,7 +3538,7 @@ msgid "Memory Byte" msgstr "Byte de Memória" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Cartão de memória" @@ -3552,7 +3550,7 @@ msgstr "" "Gestor de Cartões de memória AVISO-Faça cópias de segurança antes de " "utilizar, deve estar corrigido mas também pode danificar!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3569,7 +3567,7 @@ msgstr "" "%s\n" "Quer fazer uma cópia do ficheiro antigo para esta nova localização?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" @@ -3577,7 +3575,7 @@ msgstr "" msgid "Menu" msgstr "Menu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mic" @@ -3590,7 +3588,7 @@ msgstr "Min" msgid "Misc" msgstr "Diversos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Configurações Diversas" @@ -3615,11 +3613,11 @@ msgstr "" msgid "Monospaced font" msgstr "Tipo de letra monoespaçada" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3739,15 +3737,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Cima" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Nome:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Nome:" @@ -3757,7 +3755,7 @@ msgstr "Nome:" msgid "Native GCI files(*.gci)" msgstr "Ficheiros GCI nativos(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nova procura" @@ -3766,7 +3764,7 @@ msgstr "Nova procura" msgid "Next Page" msgstr "Próxima Página" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Próxima Procura" @@ -3774,11 +3772,11 @@ msgstr "Próxima Procura" msgid "Nickname :" msgstr "Alcunha :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Sem País (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Nenhum ISO ou WAD encontrado" @@ -3817,24 +3815,25 @@ msgstr "Nenhum ficheiro de gravação" msgid "No save folder found for title %s" msgstr "Não foi encontrada a pasta de jogo guardado para o título %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Nenhum" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Bokmaal Norueguês" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Não igual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Não definido" @@ -3843,11 +3842,11 @@ msgstr "Não definido" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Não conectado" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notas" @@ -3868,7 +3867,7 @@ msgstr "Noticia" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Número De Códigos" @@ -3889,7 +3888,7 @@ msgstr "Objecto" msgid "Object Range" msgstr "Alcance de Objecto" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Desligado" @@ -3897,7 +3896,7 @@ msgstr "Desligado" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "" @@ -3915,11 +3914,11 @@ msgstr "Apenas %d blocos disponíveis" msgid "Open" msgstr "Abrir" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Abrir &Pasta" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Abrir Pasta de &Jogo guardado Wii " @@ -3949,17 +3948,13 @@ msgstr "Descodificador de Textura OpenCL" msgid "OpenMP Texture Decoder" msgstr "Descodificador de Textura OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opções" @@ -3980,7 +3975,7 @@ msgstr "" msgid "Other" msgstr "Outro" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3996,11 +3991,11 @@ msgstr "Destino" msgid "P&lay Recording..." msgstr "R&eproduzir Gravação..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Comando" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Comando" @@ -4024,26 +4019,26 @@ msgstr "Parágrafo" msgid "Parameters" msgstr "Parâmetros" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partição %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patches" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Caminhos" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pausa" @@ -4056,7 +4051,7 @@ msgstr "Fazer pausa no fim do filme" msgid "Per-Pixel Lighting" msgstr "Iluminação por Pixel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfeito" @@ -4067,8 +4062,8 @@ msgstr "Perspectiva %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Começar" @@ -4080,7 +4075,7 @@ msgstr "Tocar Gravação" msgid "Play/Pause" msgstr "Começar/Pausar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Jogável" @@ -4088,11 +4083,11 @@ msgstr "Jogável" msgid "Playback Options" msgstr "Opções de Reprodução" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Jogadores" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Por favor confirme..." @@ -4104,36 +4099,36 @@ msgstr "Por favor crie uma perspectiva antes de guardar" msgid "Plus-Minus" msgstr "Mais-Menos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polaco" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Português" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Português (Brasileiro)" @@ -4146,7 +4141,7 @@ msgstr "Efeito de Pós-Processamento" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -4168,7 +4163,7 @@ msgstr "Pág Anterior" msgid "Previous Page" msgstr "Página Anterior" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Valor anterior" @@ -4192,8 +4187,8 @@ msgstr "Limpar Cache" msgid "Question" msgstr "Questão" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Sair" @@ -4215,7 +4210,7 @@ msgstr "R-Analógico" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSSIA" @@ -4254,7 +4249,7 @@ msgstr "Wiimotes Reais" msgid "Record" msgstr "Gravar" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Gravar entradas" @@ -4307,10 +4302,10 @@ msgstr "Actualizar Lista" msgid "Refresh game list" msgstr "Actualizar lista de Jogos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Remover" @@ -4333,7 +4328,7 @@ msgstr "Renderizar para a Janela Principal" msgid "Reset" msgstr "Reset" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Resultados" @@ -4341,7 +4336,7 @@ msgstr "Resultados" msgid "Return" msgstr "Return" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revisão:" @@ -4354,17 +4349,17 @@ msgstr "Direita" msgid "Right Stick" msgstr "Stick Direito" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Vibração" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russo" @@ -4438,12 +4433,12 @@ msgstr "" msgid "Save State..." msgstr "Guardar Estado..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Guardar como..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Guardar GCM/ISO comprimido" @@ -4451,7 +4446,7 @@ msgstr "Guardar GCM/ISO comprimido" msgid "Save current perspective" msgstr "Guardar perspectiva actual" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Jogo guardado descomprimido GCM/ISO" @@ -4464,16 +4459,16 @@ msgstr "O filme de Savestate %s está corrupto, gravação de filme a parar..." msgid "Scaled EFB Copy" msgstr "Cópia EFB Escalada" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "A procurar %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "A procurar ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Em Analise..." @@ -4489,11 +4484,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Filtro de Pesquisa" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Procurar em Sub-Pastas" @@ -4516,12 +4511,12 @@ msgstr "Selecção %s não encontrada em SYSCONF" msgid "Select" msgstr "Seleccionar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Seleccione o Ficheiro de Gravação" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Seleccione um ficheiro Wii WAD para instalar" @@ -4543,19 +4538,19 @@ msgstr "Seleccione um ficheiro de jogo guardado para importar" msgid "Select floating windows" msgstr "Seleccionar janelas flutuantes" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Seleccione o ficheiro para carregar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Seleccione o ficheiro de jogo guardado" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Seleccione o estado para carregar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Seleccione o estado para gravar" @@ -4577,7 +4572,7 @@ msgstr "" "da sua proporção.\n" "Em caso de dúvida, seleccione Automático." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "" @@ -4601,27 +4596,28 @@ msgstr "" "Em caso de dúvida, utilize a resolução do ambiente de trabalho.\n" "Se ainda tiver dúvidas, utilize a resolução mais alta que funcione melhor." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Enviar" @@ -4633,18 +4629,18 @@ msgstr "Posição da Barra de Sensor:" msgid "Separator" msgstr "Separador" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Sérvio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Serial Port 1 - Esta é a porta em que dispositivos tais como adaptadores de " "rede utilizam" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Definir como ISO &padrão" @@ -4653,30 +4649,30 @@ msgstr "Definir como ISO &padrão" msgid "Set as default Memcard %c" msgstr "Definir como cartão de memória padrão %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive:O Index é maior que a lista de códigos ar %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Definições..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Abanar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Abreviatura:" @@ -4700,7 +4696,7 @@ msgstr "Mostrar &Barra de estado" msgid "Show &Toolbar" msgstr "Mostrar Barra de Ferramen&tas" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4740,7 +4736,7 @@ msgstr "Mostrar Japão" msgid "Show Korea" msgstr "Mostrar Coreia" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Mostrar Idioma:" @@ -4780,11 +4776,11 @@ msgstr "Mostrar Wad" msgid "Show Wii" msgstr "Mostrar Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Mostrar uma caixa de confirmação antes de parar um jogo." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4802,7 +4798,7 @@ msgstr "Mostrar primeiro bloco" msgid "Show lag counter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4851,23 +4847,24 @@ msgstr "" "\n" "Em caso de dúvida, mantenha esta opção desactivada." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Wiimote na horizontal" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Chinês Simplificado" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Dimensão" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Saltar Bios" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4898,11 +4895,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -4910,7 +4907,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Captura de ecrã" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Renderizador por Software" @@ -4927,27 +4924,27 @@ msgstr "" "Tem a certeza que quer activar a renderização por software? Em caso de " "dúvida, seleccione 'Não'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Definições de Som" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Backend de Som %s não é válido" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Criação do buffer de som falhou: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Espaço" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Espanhol" @@ -4975,7 +4972,7 @@ msgstr "" "\n" "Em caso de dúvida, seleccione 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Aumente a taxa de transferência do disco" @@ -4983,13 +4980,13 @@ msgstr "Aumente a taxa de transferência do disco" msgid "Square Stick" msgstr "Stick quadrado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Comando padrão" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Começar" @@ -5005,7 +5002,7 @@ msgstr "&Começar Gravação" msgid "Start Recording" msgstr "Começar Gravação" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Estado" @@ -5013,7 +5010,7 @@ msgstr "Estado" msgid "State Saves" msgstr "Estados Guardados" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "" @@ -5062,30 +5059,31 @@ msgstr "Ficheiros extraídos com sucesso para %s" msgid "Successfully imported save files" msgstr "Sucesso na importação de ficheiros de jogo guardado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Balanço" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Idioma do sistema:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5116,7 +5114,7 @@ msgstr "Table Direita" msgid "Take Screenshot" msgstr "Tirar Screenshot" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "" @@ -5136,11 +5134,11 @@ msgstr "Cache de Textura" msgid "Texture Format Overlay" msgstr "Formato da textura" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "O WAD foi instalado correctamente" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "O caminho é inválido" @@ -5148,13 +5146,13 @@ msgstr "O caminho é inválido" msgid "The checksum was successfully fixed" msgstr "A checksum foi reparada com sucesso" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "A pasta escolhida já está na lista" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5179,7 +5177,7 @@ msgstr "" "O ficheiro %s já estava aberto, o cabeçalho do ficheiro não poderá ser " "escrito." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "O ficheiro que especificou (%s) não existe" @@ -5209,7 +5207,7 @@ msgid "The save you are trying to copy has an invalid file size" msgstr "" "O Jogo Guardado que está a tentar copiar tem um tamanho de ficheiro inválido" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5217,19 +5215,19 @@ msgstr "" "O idioma seleccionado não é suportado pelo seu sistema. A repor padrão do " "sistema." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "O servidor e a versão NetPlay do cliente são incompatíveis" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "O servidor está cheio!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "O servidor respondeu: O jogo está a correr neste momento!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "O servidor enviou uma mensagem de erro desconhecida!" @@ -5238,15 +5236,15 @@ msgstr "O servidor enviou uma mensagem de erro desconhecida!" msgid "The specified file \"%s\" does not exist" msgstr "O ficheiro especificado \"%s\" não existe" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "O valor é inválido" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5254,7 +5252,7 @@ msgstr "" "Tem que existir um ticket para 00000001/00000002. O seu NAND depositado está " "provavelmente incompleto." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5262,7 +5260,7 @@ msgstr "" "Estas definições substituem as definições raiz do Dolphin .\n" "Indeterminado significa que o jogo usa as definições do Dolphin." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5270,7 +5268,7 @@ msgstr "" "Este simulador de Action Replay não suporta códigos que modifiquem o próprio " "Action Replay" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Isto poderá causar lentidão no menu Wii e em alguns jogos." @@ -5286,7 +5284,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5294,7 +5292,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5306,7 +5304,7 @@ msgstr "" "Provoca aumentos significativos de velocidade em PCs com mais de um núcleo, " "mas também poderá causar crashes ou falhas." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Isto permite a edição manual do ficheiro de configuração INI" @@ -5315,12 +5313,12 @@ msgstr "Isto permite a edição manual do ficheiro de configuração INI" msgid "Threshold" msgstr "Limite" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Tilt" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Título" @@ -5355,15 +5353,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Topo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Chinês Tradicional" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Tentou carregar um tipo de ficheiro desconhecido." @@ -5383,7 +5382,7 @@ msgstr "" "Tentativa de leitura inválida de SYSCONF\n" " ids bt de wiimote não estão disponíveis" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turco" @@ -5399,12 +5398,12 @@ msgstr "Tipo" msgid "UDP Port:" msgstr "Porta UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "DESCONHECIDO" @@ -5413,7 +5412,7 @@ msgstr "DESCONHECIDO" msgid "UNKNOWN_%02X" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "EUA" @@ -5424,9 +5423,9 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5451,11 +5450,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Desconhecido" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Comando de DVD desconhecido %08x - Erro fatal" @@ -5470,12 +5469,12 @@ msgstr "Comando desconhecido 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Tipo de entrada desconhecida %i em SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Mensagem desconhecida recebida com a id : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5487,16 +5486,16 @@ msgstr "" msgid "Up" msgstr "Cima" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Actualizar" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Wiimote na vertical" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Usar modo EuRGB60 (PAL60)" @@ -5504,11 +5503,11 @@ msgstr "Usar modo EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Utilizar Ecrã Inteiro" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Usar Hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Usar Manipuladores de Pânico" @@ -5565,11 +5564,11 @@ msgstr "Utilidade" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Valor" @@ -5577,7 +5576,7 @@ msgstr "Valor" msgid "Value:" msgstr "Valor:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Valor: " @@ -5589,7 +5588,7 @@ msgstr "Verbosidade" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Vídeo" @@ -5597,7 +5596,7 @@ msgstr "Vídeo" msgid "Virtual" msgstr "Virtual" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volume" @@ -5630,15 +5629,15 @@ msgstr "" msgid "Warning" msgstr "Aviso" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Aviso - a começar DOL em modo errado de consola!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Aviso - A iniciar um ELF em modo errado de consola!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Aviso - A iniciar um ISO em modo errado de consola!" @@ -5719,19 +5718,19 @@ msgstr "Hack de Ecrã Panorâmico" msgid "Width" msgstr "Largura" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Consola Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Raiz de NAND Wii:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Ficheiros de jogo guardado Wii (*.bin)|*.bin" @@ -5744,12 +5743,18 @@ msgstr "WiiWAD: Não foi possível ler do ficheiro" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote Conectado" @@ -5781,14 +5786,14 @@ msgstr "Janelas Direita" msgid "Word Wrap" msgstr "Moldar o texto" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "A trabalhar..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5808,21 +5813,36 @@ msgstr "Escrever para Ficheiro" msgid "Write to Window" msgstr "Escrever para a Janela" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice falhou: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "Inicialização do XAudio2 falhou: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "Criação de master voice do XAudio2 falhou: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice falhou: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "Inicialização do XAudio2 falhou: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "Criação de master voice do XAudio2 falhou: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "" @@ -5848,15 +5868,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Não pode fechar painéis que contenham páginas." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Tem que escolher um jogo!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Tem que introduzir um nome!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Tem que introduzir um valor decimal, hexadecimal ou octal válido." @@ -5864,7 +5884,7 @@ msgstr "Tem que introduzir um valor decimal, hexadecimal ou octal válido." msgid "You must enter a valid profile name." msgstr "Tem que introduzir um nome de perfil válido." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Tem que reiniciar o Dolphin para que as alterações sejam efectuadas" @@ -5875,7 +5895,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5894,15 +5914,15 @@ msgstr "" "Deveria ser 0x%04x (mas é 0x%04llx)\n" "Pretende gerar um novo?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Código Zero 3 não é suportado" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Código Zero desconhecido para o Dolphin: %08x" @@ -5962,29 +5982,24 @@ msgstr "" "\n" "Em caso de dúvida, mantenha esta opção desactivada." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: A ler Opcode de %x. Por favor reportar." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "mensagem desconhecida recebida" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute devolveu -1 quando a aplicação executou!" @@ -5999,3 +6014,12 @@ msgstr "Correcção zNear: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OU" + +#~ msgid "Could not create %s" +#~ msgstr "Não foi possível criar %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: A ler Opcode de %x. Por favor reportar." diff --git a/Languages/po/pt_BR.po b/Languages/po/pt_BR.po index 67769caddd..5b680970ff 100644 --- a/Languages/po/pt_BR.po +++ b/Languages/po/pt_BR.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-14 12:33+0000\n" "Last-Translator: Maldonny \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" @@ -25,13 +25,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(muitos para mostrar)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " Jogo : " @@ -39,7 +39,7 @@ msgstr " Jogo : " msgid "! NOT" msgstr "! NÃO" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -64,12 +64,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sCopiar%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d amostras" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d amostras (nível de qualidade %d)" @@ -80,12 +80,12 @@ msgstr "%d amostras (nível de qualidade %d)" msgid "%s already exists, overwrite?" msgstr "%s já existe, deseja substituir?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s não pôde ser \"limpo\". A imagem provavelmente está corrompida." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -94,7 +94,7 @@ msgstr "" "%s falhou ao ser carregado como Memory Card\n" " O tamanho é inválido (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -103,7 +103,7 @@ msgstr "" "%s falhou ao ser carregado como Memory Card\n" " O tamanho é inválido (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -118,7 +118,7 @@ msgstr "" msgid "%s failed to open" msgstr "Falha ao abrir %s" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s falhou: kr=%x" @@ -128,7 +128,7 @@ msgstr "%s falhou: kr=%x" msgid "%s is a 0 byte file" msgstr "%s é um arquivo de 0 bytes" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s Já está comprimido! Não é possível comprimir mais." @@ -186,11 +186,11 @@ msgstr "Gerenciador de &Cheats" msgid "&DSP Settings" msgstr "Configurações do &DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Deletar ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Deletar ISOs selecionadas..." @@ -254,7 +254,7 @@ msgstr "&Pausar" msgid "&Play" msgstr "&Jogar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Propriedades" @@ -298,7 +298,7 @@ msgstr "&Ver" msgid "&Wiimote Settings" msgstr "Configurações de &Wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -334,7 +334,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Nativo (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -350,7 +350,7 @@ msgstr "2.5x Nativo (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Nativo (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -366,7 +366,7 @@ msgstr "3x Nativo (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Nativo (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -378,7 +378,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -386,7 +386,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -394,13 +394,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Uma janela de Netplay já está aberta!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Não tem nenhum jogo rodando no momento." @@ -413,6 +413,7 @@ msgstr "" "Você deve conectar seus Wiimotes manualmente." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -421,10 +422,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -442,13 +444,13 @@ msgstr "" "\n" "O host deve escolher uma porta TCP aberta/encaminhada! \n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "Códigos AR" @@ -497,7 +499,7 @@ msgstr "" "Código Culpado:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -505,7 +507,7 @@ msgstr "" "Erro no Action Replay: Tamanho inválido (%08x : address = %08x) em Add Code " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -514,7 +516,7 @@ msgstr "" "Erro no Action Replay: Tamanho inválido (%08x : address = %08x) em Fill e " "Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -523,7 +525,7 @@ msgstr "" "Erro no Action Replay: Tamanho inválido (%08x : address = %08x) em RAM Write " "e Fill (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -532,12 +534,12 @@ msgstr "" "Erro no Action Replay: Tamanho inválido (%08x : address = %08x) em Write to " "Pointer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Erro no Action Replay: Valor inválido (%08x) na Cópia de Memória (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -547,27 +549,27 @@ msgstr "" "(%s)\n" "Master codes não são necessários. Não use master codes." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Erro no Action Replay: Linha de código AR inválida: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Código Condicional: Tamanho Inválido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Tipo de Normal Code Inválido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normal Code %i: Subtipo inválido %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Code 0: Subtipo inválido %08x (%s)" @@ -581,11 +583,11 @@ msgstr "Adaptador:" msgid "Add" msgstr "Adicionar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Adicionar Código de ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Adicionar Patch" @@ -593,9 +595,9 @@ msgstr "Adicionar Patch" msgid "Add new pane" msgstr "Adicionar novo painel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Adicionar..." @@ -647,36 +649,36 @@ msgstr "Ajustar o controle de pressão análogo requerido para ativar os botões msgid "Advanced" msgstr "Avançado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Configurações Avançadas" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Todos os arquivos de GC/WII (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Todas as imagens CG/Wii (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Todos os arquivos Gamecube CGM (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Todos os Instantes Salvos (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Todos os Arquivos ISO Wii" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Todos os arquivos ISO GC/Wii comprimidos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Todos os arquivos (*.*)|*.*" @@ -696,19 +698,19 @@ msgstr "Filtragem Anisotrópica" msgid "Anti-Aliasing:" msgstr "Anti-Aliasing:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "O Apploader é do tamanho errado... Isso é mesmo um Apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "O Apploader não pôde carregar do arquivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Aplicar" @@ -722,7 +724,7 @@ msgstr "" "\n" "Se estiver em dúvida, selecione (desligado)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Árabe" @@ -731,7 +733,7 @@ msgstr "Árabe" msgid "Are you sure you want to delete \"%s\"?" msgstr "Você tem certeza de que quer apagar \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -739,7 +741,7 @@ msgstr "" "Você tem certeza que deseja apagar estes arquivos?\n" "Eles estarão perdidos para sempre!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Você tem certeza que quer deletar este arquivo? Ele ficará perdido para " @@ -749,7 +751,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "Arm JIT (experimental)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (experimental)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Proporção:" @@ -758,12 +765,12 @@ msgstr "Proporção:" msgid "At least one pane must remain open." msgstr "Pelo menos um painél deve permanecer aberto." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Áudio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Backend de Audio" @@ -771,7 +778,7 @@ msgstr "Backend de Audio" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Erro ao abrir o dispositivo AO.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Automático" @@ -810,16 +817,16 @@ msgstr "Registrador BP" msgid "Back" msgstr "Voltar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Configurações do Backend" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Backend:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Input em Background" @@ -837,15 +844,15 @@ msgid "Balance Board" msgstr "Balance Board" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Detalhes de Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Banner:" @@ -857,7 +864,7 @@ msgstr "Alavanca" msgid "Basic" msgstr "Básico" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Configurações Básicas" @@ -865,7 +872,7 @@ msgstr "Configurações Básicas" msgid "Bass" msgstr "Baixo" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Falha no teste de Mesa de Alocação de Blocos" @@ -886,7 +893,7 @@ msgid "Blue Right" msgstr "Azul Direito" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Embaixo" @@ -895,7 +902,7 @@ msgstr "Embaixo" msgid "Bound Controls: %lu" msgstr "Controles Acoplados: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Quebrado" @@ -903,7 +910,7 @@ msgstr "Quebrado" msgid "Browse" msgstr "Procurar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Procurar por um diretório para adicionar" @@ -911,11 +918,11 @@ msgstr "Procurar por um diretório para adicionar" msgid "Browse for an ISO directory..." msgstr "Procurar por um diretório de ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Procurar por um diretório de output" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -925,7 +932,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Botões" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -949,7 +956,7 @@ msgstr "Analógico-C" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Motor de Emulação do CPU" @@ -971,17 +978,17 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Não foi possível encontrar o WiiMote pela conexão %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Não é possível ler do DVD_Plugin - DVD-Interface: Erro Fatal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Cancelar" @@ -993,11 +1000,11 @@ msgstr "Cancelar" msgid "Cannot open %s" msgstr "Não é possível abrir %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Não é possível cancelar o registro de evnetos com eventos pendentes" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1008,7 +1015,7 @@ msgstr "" "%s\n" "não é um arquivo de Memory Card válido" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1020,7 +1027,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Catalão" @@ -1028,7 +1035,7 @@ msgstr "Catalão" msgid "Center" msgstr "Centralizar" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Mudar" @@ -1040,11 +1047,11 @@ msgstr "Mudar &Disco..." msgid "Change Disc" msgstr "Mudar o Disco" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Mudar Jogo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1060,11 +1067,11 @@ msgstr "Muda o sinal para o parâmetro do zFar (após a correção)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Muda o sinal para o parâmetro do zNear (após a correção)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Mudar isso não vai ter efeito enquanto o emulador estiver rodando!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat" @@ -1072,47 +1079,47 @@ msgstr "Chat" msgid "Cheat Code" msgstr "Códigos de Cheat" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Busca de Cheats" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Gerenciador de Cheat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Checar Integridade da Partição" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Checando Integridade..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chinês (Simplificado)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinês (Tradicional)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Escolher um diretório raiz de DVD:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Escolha um diretório raíz para o NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Escolher uma ISO padrão:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Escolher um diretório para adicionar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Escolher um arquivo para abrir" @@ -1120,7 +1127,7 @@ msgstr "Escolher um arquivo para abrir" msgid "Choose a memory card:" msgstr "Escolher um cartão de memória:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1128,8 +1135,8 @@ msgstr "" "Escolher um arquivo para ser usado como apploader: (aplicável somente para " "discos construídos de diretórios)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Escolha a pasta para extrair" @@ -1148,7 +1155,7 @@ msgstr "Clássico" msgid "Clear" msgstr "Limpar" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1158,7 +1165,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Fechar" @@ -1167,11 +1174,11 @@ msgstr "Fechar" msgid "Co&nfigure..." msgstr "Co&nfigurar..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Informação do Código" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Código:" @@ -1183,20 +1190,20 @@ msgstr "Comandos" msgid "Comment" msgstr "Comentário" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Comentário:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Comprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Comprimir ISOs selecionadas..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Comprimindo ISO" @@ -1214,8 +1221,8 @@ msgstr "Configurar" msgid "Configure Control" msgstr "Configurar Controle" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Configurar Controles" @@ -1223,13 +1230,13 @@ msgstr "Configurar Controles" msgid "Configure..." msgstr "Configurar..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Confirmar sobrescrição de arquivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Confirmar ao Parar" @@ -1243,7 +1250,7 @@ msgstr "Conectar" msgid "Connect Balance Board" msgstr "Conectar Balance Board" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Conectar Teclado USB" @@ -1268,7 +1275,7 @@ msgstr "Conectar Wiimote 3" msgid "Connect Wiimote 4" msgstr "Conectar Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Conectando..." @@ -1288,7 +1295,7 @@ msgstr "Controle" msgid "Convert to GCI" msgstr "Converter para GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Falha na Cópia" @@ -1297,16 +1304,11 @@ msgstr "Falha na Cópia" msgid "Copy to Memcard %c" msgstr "Copiar para Cartão de Memória %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Núcleo" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Não pôde criar %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Não foi possível inicializar o Backend 5s. %s" @@ -1322,12 +1324,12 @@ msgstr "" "cópia de GC/Wii. Note que os discos originais de Gamecube e Wii não podem " "ser lidos pela maioria dos leitores de DVD dos PCs." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Não foi possível reconhecer o arquivo ISO %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Não foi possível salvar %s" @@ -1353,11 +1355,11 @@ msgstr "" "Se sim, então você precisa especificar a localização do Memory Card na " "opções." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Não foi possível encontrar comando de abertura para a extensão 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1365,17 +1367,17 @@ msgstr "" "Não foi possível iniciar o Núcleo (core). \n" "Cheque suas configurações" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Contagem:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "País:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Criar Código AR" @@ -1410,12 +1412,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Diretória atual foi alterado de %s para %s conforme wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Hack de Projeção Customizado" @@ -1423,11 +1425,11 @@ msgstr "Hack de Projeção Customizado" msgid "Custom Projection Hack Settings" msgstr "Configurações de Hack de Projeção Customizado" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Cuztomize alguns parâmetros de Projeção Ortográfica." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Tcheco" @@ -1443,20 +1445,20 @@ msgstr "Direcional Digital" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Motor de Emulação do DSP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "Emulação HLE do DSP (rápido)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "Interpretador LLE do DSP (lento)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "Recompilador LLE do DSP" @@ -1464,11 +1466,11 @@ msgstr "Recompilador LLE do DSP" msgid "DSP settings" msgstr "Configurações de Áudio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE em um Thread Separado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "Raiz do DVD:" @@ -1480,15 +1482,15 @@ msgstr "DVDLowRead - Erro Fatal: falha ao ler do volume" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Erro Fatal: falha ao ler do volume" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Tapete de Dança" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Tamanho de Arquivo" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Data:" @@ -1517,16 +1519,16 @@ msgstr "Debugging" msgid "Decimal" msgstr "Decimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Descomprimir ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Descomprimir ISOs selecionados..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Descomprimindo ISO" @@ -1538,7 +1540,7 @@ msgstr "Diminuir limite de Quadros" msgid "Default" msgstr "Padrão" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "ISO Padrão:" @@ -1582,8 +1584,8 @@ msgstr "" msgid "Device" msgstr "Dispositivo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Configurações de Dispositivo" @@ -1591,15 +1593,12 @@ msgstr "Configurações de Dispositivo" msgid "Dial" msgstr "Discar" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1662,7 +1661,7 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disco" @@ -1689,20 +1688,20 @@ msgstr "" msgid "Divide" msgstr "Dividir" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Você quer parar a emulação atual?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Decodificador Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1732,9 +1731,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1789,12 +1787,12 @@ msgstr "Configuração de Wiimote Emulado do Dolphin" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Configuração do GCPad do Dolphin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Filmes TAS do Dolphin (*.dtm)" @@ -1806,7 +1804,7 @@ msgstr "Configuração de Wiimote Dolphin" msgid "Dolphin at &Google Code" msgstr "Dolphin no &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1814,7 +1812,7 @@ msgstr "" "Dolphin não pôde encontrar ISOs de GC/Wii. Clique duas vezes aqui para " "procurar por arquivos..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1822,12 +1820,12 @@ msgstr "" "Dolphin atualmente está configurado para esconder todos os jogos. Duplo-" "clique aqui para mostrar todos os jogos..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "O Dolphin não conseguiu completar a ação requisitada." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1853,11 +1851,11 @@ msgstr "Códigos %lu baixados. (Adicionados %lu)" msgid "Drums" msgstr "Bateria" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Dummy" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Extrair Áudio" @@ -1903,9 +1901,9 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Holandês" @@ -1930,7 +1928,7 @@ msgstr "" "PC é provavelmente necessário no momento para que o Windows veja o novo " "driver." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1946,14 +1944,10 @@ msgstr "Editar" msgid "Edit ActionReplay Code" msgstr "Editar Código ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Editar Configuração" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Editar substituições locais" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Editar Patch" @@ -1962,8 +1956,8 @@ msgstr "Editar Patch" msgid "Edit current perspective" msgstr "Editar perspectiva atual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Editar..." @@ -1975,7 +1969,7 @@ msgstr "Efeito" msgid "Embedded Frame Buffer" msgstr "Frame Buffer Embutido" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Este Thread de Emulação já está rodando" @@ -2013,7 +2007,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Emular Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Estado de Emulação" @@ -2037,15 +2031,15 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Ativar Registro AR" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Ativar Block Merging" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Ativar Cálculo de Caixas Limitadoras" @@ -2053,27 +2047,27 @@ msgstr "Ativar Cálculo de Caixas Limitadoras" msgid "Enable Cache" msgstr "Ativar Cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Ativar Cheats" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Ativar Modo de Dois Núcleos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Ativar Modo de Dois Núcleos (Aumento na velocidade)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Ativar Idle Skipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Ativar Idle Skipping (Aumento na velocidade)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Ativar MMU" @@ -2081,7 +2075,7 @@ msgstr "Ativar MMU" msgid "Enable Progressive Scan" msgstr "Ativar Varredura Progressiva" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Ativar Salva-Tela" @@ -2089,7 +2083,7 @@ msgstr "Ativar Salva-Tela" msgid "Enable Speaker Data" msgstr "Ativar Dados do Auto-falante" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Ativar WideScreen" @@ -2112,7 +2106,7 @@ msgstr "" "\n" "Se estiver em dúvida, selecione 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2148,7 +2142,7 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2156,11 +2150,11 @@ msgstr "" "Ative isso para ter ganho de velocidade em The legend of Zelda: Twilight " "Princess. Disative para QUALQUER UM outro jogo." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Ativa Hack de Projeção Personalizado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2168,7 +2162,7 @@ msgstr "" "Habilita emulação do Dolby Pro Logic II usando surround 5.1. Não disponível " "no OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2187,7 +2181,7 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2209,9 +2203,9 @@ msgstr "" msgid "End" msgstr "Fim" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Inglês" @@ -2234,21 +2228,20 @@ msgstr "Entry %d/%d" msgid "Entry 1/%d" msgstr "Entry 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Igual" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Erro" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "Erro ao carregar o idioma selecionado. Voltando ao padrão do sistema." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2297,7 +2290,7 @@ msgstr "Exportar todos os saves do Wii" msgid "Export Failed" msgstr "Falha na Exportação" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exportar Arquivo" @@ -2313,7 +2306,7 @@ msgstr "Exportar Gravação..." msgid "Export Save" msgstr "Exportar Save" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exportar save do Wii (Experimental)" @@ -2329,7 +2322,7 @@ msgstr "Falha na exportação" msgid "Export save as..." msgstr "Exportar Salvar como..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Extensão" @@ -2345,44 +2338,44 @@ msgstr "Parâmetro Extra" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Parâmetro Extra útil apenas em \"Metroid Other M\"" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Extrair Todos os arquivos..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Extrair Apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Extrair DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Extrair diretorio..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Extrair Arquivo..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Extrair Partição..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Extraindo %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Extraindo todos os arquivos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Extraindo diretorio" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Extraindo..." @@ -2394,15 +2387,15 @@ msgstr "Byte do FIFO" msgid "FIFO Player" msgstr "FIFO Player" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANÇA" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Tamanho FST:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Falha ao Conectar\"" @@ -2410,11 +2403,15 @@ msgstr "Falha ao Conectar\"" msgid "Failed to download codes." msgstr "Falha ao dazer o download de códigos." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Falha ao extrair %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2467,7 +2464,7 @@ msgstr "Falha ao ler banner.bin" msgid "Failed to read bk header" msgstr "Falha ao ler o bk header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2478,7 +2475,7 @@ msgstr "" "O Memory Card pode estar truncado\n" "Posição no Arquivo:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2486,7 +2483,7 @@ msgstr "" "Falha ao ler mesa de alocação de blocos corretamente\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2504,7 +2501,7 @@ msgstr "Falha ao ler dados do arquivo %d" msgid "Failed to read data from file: %s" msgstr "Falha ao ler dados do arquivo: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2512,7 +2509,7 @@ msgstr "" "Não foii possível ler o Backup do diretório corretamente\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2524,7 +2521,7 @@ msgstr "" msgid "Failed to read header" msgstr "Falha ao ler o header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2537,7 +2534,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Falha ao ler o header para o arquivo %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Não foi possível ler ID exclusivo da imagem do disco" @@ -2559,7 +2556,7 @@ msgstr "Falha ao escrever dados no arquivo: %s" msgid "Failed to write header for %s" msgstr "Falha ao escrever o header para %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Persa" @@ -2571,7 +2568,7 @@ msgstr "Rápido" msgid "Fast Depth Calculation" msgstr "Cálculo Rápido de Profundidade" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Rápida versão do MMU. Não funciona para todos os jogos." @@ -2607,7 +2604,7 @@ msgstr "" "O arquivo não pode ser aberto\n" "ou não tem uma extensão válida" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2620,7 +2617,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Arquivo não reconhecido como Memory Card" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Arquivo não comprimido" @@ -2629,11 +2626,11 @@ msgstr "Arquivo não comprimido" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Modo de abertura desconhecido : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Arquivo de sistema" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Tipo do arquivo 'ini' desconhecido! Não vai abrir!" @@ -2661,7 +2658,7 @@ msgstr "Forçar 16:9" msgid "Force 4:3" msgstr "Forçar 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Forçar Console para NTSC-J" @@ -2694,7 +2691,7 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2704,7 +2701,7 @@ msgstr "" "Se isto ficar desativado, o Dolphin usa NTSC-U e ativa esta opção " "automaticamente quando você jogar jogos japoneses." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2716,7 +2713,7 @@ msgstr "" msgid "Forward" msgstr "Para frente" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Porta adiante (UPnP)" @@ -2759,7 +2756,7 @@ msgstr "Alcanço do Quadro" msgid "Frame S&kipping" msgstr "Frame S&kipping" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Limitador de FPS:" @@ -2771,9 +2768,9 @@ msgstr "QUadros para Capturar" msgid "Free Look" msgstr "Olhar Livre" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Francês" @@ -2806,27 +2803,27 @@ msgstr "GCPad" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID do jogo:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "O jogo já está rodando!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "O jogo não está rodando!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Jogo não encontrado!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Opções especificas do jogo" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Opçõesdojogo" @@ -2834,7 +2831,7 @@ msgstr "Opçõesdojogo" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "Arquivos de Save do GameCube (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2843,7 +2840,7 @@ msgid "Gamecube &Pad Settings" msgstr "Configurações de &Controle de Gamecube" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Memory Cards do Gamecube (*.raw,*.gcp)" @@ -2851,12 +2848,12 @@ msgstr "Memory Cards do Gamecube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Configurações do controle de Gamecube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Códigos Gecko" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2870,7 +2867,7 @@ msgstr "" "diretório Sys e reiniciando o Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Geral" @@ -2879,13 +2876,13 @@ msgstr "Geral" msgid "General Settings" msgstr "Configurações Gerais" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Alemão" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: O índice é maior que a lista de códigos AR de tamanho %lu" @@ -2898,7 +2895,7 @@ msgstr "Gráficos" msgid "Graphics settings" msgstr "Configurações Gráficas" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Maior do que" @@ -2920,7 +2917,7 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto ativado." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Grego" @@ -2944,11 +2941,11 @@ msgstr "Guitarra" msgid "Hacks" msgstr "Hacks" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "A checagem do header falhou" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebreu" @@ -2960,7 +2957,7 @@ msgstr "Altura" msgid "Help" msgstr "Ajuda" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2980,7 +2977,7 @@ msgstr "" "\n" "Até mais!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3020,7 +3017,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Host" @@ -3029,11 +3026,11 @@ msgid "Hotkey Configuration" msgstr "Configuração de Teclas de Atalho" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Teclas de Atalho" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Húngaro" @@ -3041,17 +3038,17 @@ msgstr "Húngaro" msgid "Hybrid Wiimote" msgstr "Wiimote Hibrido" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS:Tentou adiquirir dados de um ticket desconhecido: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3060,15 +3057,15 @@ msgstr "" "TitleID %016llx.\n" "Dolphin provavelmente vai travar agora." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - Destino ruim" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Definições de IPL" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3080,15 +3077,15 @@ msgstr "Ponteiro IR" msgid "IR Sensitivity:" msgstr "Sensibilidade IR:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Detalhes da ISO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Diretórios de ISO" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITÁLIA" @@ -3096,7 +3093,7 @@ msgstr "ITÁLIA" msgid "Icon" msgstr "Icone" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3168,7 +3165,7 @@ msgstr "" "O arquivo importado tem a extensão sav\n" "mas não tem um header correto" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Funciona" @@ -3177,7 +3174,7 @@ msgid "Increase Frame limit" msgstr "Aumentar limite de Quadros" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3197,7 +3194,7 @@ msgstr "Inserir" msgid "Insert Encrypted or Decrypted code here..." msgstr "Inserir Código Encryptado ou Decriptado aqui..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Insira cartão SD" @@ -3209,35 +3206,35 @@ msgstr "Insira nome aqui.." msgid "Install WAD" msgstr "Instalar WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Instalar para o menu do WII" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler foi chamado, mas esta plataforma ainda não tem " "suporte a ele." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Instalando WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Erro na Checagem de Integridade" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Checagem de Integridade completa" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Checagem de Integridade completa. Nenhum erro foi encontrado." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3246,11 +3243,11 @@ msgstr "" "Checagem de Integridade para a partição %d falhou. Sua cópia deve estar " "corrompida ou foi incorretamente corrigido (patch)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Interface" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Opções de interface" @@ -3279,7 +3276,7 @@ msgstr "Resolução Interna:" msgid "Interpreter (VERY slow)" msgstr "Interpretador (MUITO lento)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3288,7 +3285,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Tamanho Inválido(%x) ou palavra Mágica(%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Valor Inválido!" @@ -3296,16 +3293,16 @@ msgstr "Valor Inválido!" msgid "Invalid bat.map or dir entry" msgstr "Bat.map ou entrada de Diretório inválidas" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Tipo de evento %i inválido" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Arquivo inválido" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3334,34 +3331,36 @@ msgstr "" "String de busca inválida (apenas comprimentos correspondentes de string são " "suportados)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Estado Salvo Inválido" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italiano" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPÃO" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "Recompilador JIT (Recomendado)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "Recompilador experimental JITIL" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japonês" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "CORÉIA" @@ -3383,8 +3382,9 @@ msgstr "Manter Janela no Topo" msgid "Key" msgstr "Tecla" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Coreano" @@ -3402,7 +3402,7 @@ msgstr "Botão L" msgid "L-Analog" msgstr "L-Analógico" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Linguagem:" @@ -3411,7 +3411,7 @@ msgstr "Linguagem:" msgid "Last %i" msgstr "Último %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Latência:" @@ -3450,11 +3450,11 @@ msgstr "" "Clique da Esquerda/Direita para mais opções.\n" "Clique do meio para limpar." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Menor que" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Limitar por FPS" @@ -3546,11 +3546,11 @@ msgstr "Carregar Instante Salvo do Slot 9" msgid "Load State..." msgstr "Carregar Instante Salvo..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Carregar Menu de Sistema do Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Carregar Menu de Sistema do Wii %d %c" @@ -3602,12 +3602,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Resposta do Logger" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Logando" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "A conexão com o servidor foi perdida!" @@ -3624,7 +3624,7 @@ msgstr "" "Incompatibilidade do MD5\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Hack de velocidade MMU" @@ -3638,11 +3638,11 @@ msgstr "Arquivos de Gameshark MadCatz(*.gcs)" msgid "Main Stick" msgstr "Analógico Principal" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID da fabricante:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Fabricante:" @@ -3679,7 +3679,7 @@ msgid "Memory Byte" msgstr "Byte de Memória" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Cartão de memoria" @@ -3691,7 +3691,7 @@ msgstr "" "AVISO - Faça backups antes de usar, deve estar funcionando mas pode " "corromper coisas!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3708,7 +3708,7 @@ msgstr "" "%s\n" "Você gostaria de copiar o arquivo antigo para o novo local?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "O tamanho do arquivo do Memory Card é diferente do tamanho do header" @@ -3716,7 +3716,7 @@ msgstr "O tamanho do arquivo do Memory Card é diferente do tamanho do header" msgid "Menu" msgstr "Menu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Microfone" @@ -3729,7 +3729,7 @@ msgstr "Mínimo" msgid "Misc" msgstr "Diversas" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Opções diversas" @@ -3755,11 +3755,11 @@ msgstr "" msgid "Monospaced font" msgstr "Fonte Monospaced" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3878,15 +3878,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Cima" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Nome:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Nome:" @@ -3896,7 +3896,7 @@ msgstr "Nome:" msgid "Native GCI files(*.gci)" msgstr "Arquivos GCI nativos(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Nova Busca" @@ -3905,7 +3905,7 @@ msgstr "Nova Busca" msgid "Next Page" msgstr "Próxima Página" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Próxima Busca" @@ -3913,11 +3913,11 @@ msgstr "Próxima Busca" msgid "Nickname :" msgstr "Nick:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Sem região (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Sem ISOs ou WADs achados" @@ -3956,24 +3956,25 @@ msgstr "Nenhum arquivo gravado" msgid "No save folder found for title %s" msgstr "Nenhuma pasta de salva encontrada para o título %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Nenhum" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norueguês Bokmaal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Não igual" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Indefinido" @@ -3983,11 +3984,11 @@ msgid "Not a Wii save or read failure for file header size %x" msgstr "" "Nenhum arquivo salvo do Wii save ou falha ao ler o header de tamanho %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Não conectado" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notas" @@ -4008,7 +4009,7 @@ msgstr "Noticía" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Números dos códigos:" @@ -4029,7 +4030,7 @@ msgstr "Objeto" msgid "Object Range" msgstr "Alcance do Objeto" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Desligado" @@ -4037,7 +4038,7 @@ msgstr "Desligado" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Mostrar Mensagens na Tela" @@ -4055,11 +4056,11 @@ msgstr "Apenas %d blocos disponíveis" msgid "Open" msgstr "Abrir" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Abrir &conteúdo da pasta" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Abrir pasta do &save do WII" @@ -4089,7 +4090,7 @@ msgstr "Decodificador de Texturas OpenCL" msgid "OpenMP Texture Decoder" msgstr "Decodificador de Texturas OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4097,13 +4098,7 @@ msgstr "" "Abre a configuração padrão (somente leitura) para este jogo em um editor de " "texto externo." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" -"Abre as substituições especificadas pelo usuário em um editor de texto " -"externo." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opções" @@ -4127,7 +4122,7 @@ msgstr "" msgid "Other" msgstr "Outros" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4143,11 +4138,11 @@ msgstr "Saída" msgid "P&lay Recording..." msgstr "R&eproduzir gravação..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Controle" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Controle" @@ -4171,26 +4166,26 @@ msgstr "Parágrafo" msgid "Parameters" msgstr "Parâmetros" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partição %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Partição não existe: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patches" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Diretórios" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pausar" @@ -4203,7 +4198,7 @@ msgstr "Pausar no fim do vídeo" msgid "Per-Pixel Lighting" msgstr "Iluminação Por Pixels" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfeito" @@ -4214,8 +4209,8 @@ msgstr "Perspectiva %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Executar" @@ -4227,7 +4222,7 @@ msgstr "Reproduzir Gravação" msgid "Play/Pause" msgstr "Executar/Pausar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Jogável" @@ -4235,11 +4230,11 @@ msgstr "Jogável" msgid "Playback Options" msgstr "Opções de Reprodução" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Jogadores" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Favor confirmar..." @@ -4251,36 +4246,36 @@ msgstr "Favor criar uma perspectiva antes de salvar" msgid "Plus-Minus" msgstr "Positivo-Negativo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polonês" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Porta 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Porta 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Porta 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Porta 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Porta:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Português" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Português (Brasil)" @@ -4293,7 +4288,7 @@ msgstr "Efeito Pós-Processamento" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "Fim prematuro do vídeo no PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "Fim prematuro do vídeo no PlayWiimote. %u + %d > %u" @@ -4315,7 +4310,7 @@ msgstr "Pág. Anterior" msgid "Previous Page" msgstr "Página Anterior" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Valor anterior" @@ -4339,8 +4334,8 @@ msgstr "Limpar o Cache" msgid "Question" msgstr "Questão" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Sair" @@ -4362,7 +4357,7 @@ msgstr "R-Analógico" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RÚSSIA" @@ -4401,7 +4396,7 @@ msgstr "Wiimotes Reais" msgid "Record" msgstr "Gravar" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Gravar entrada" @@ -4453,10 +4448,10 @@ msgstr "Atualizar Lista" msgid "Refresh game list" msgstr "Atualizar a lista de jogos" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Remover" @@ -4479,7 +4474,7 @@ msgstr "Renderizar na Janela Principal" msgid "Reset" msgstr "Reiniciar" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Resultados" @@ -4487,7 +4482,7 @@ msgstr "Resultados" msgid "Return" msgstr "Retornar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revisão:" @@ -4500,19 +4495,19 @@ msgstr "Direita" msgid "Right Stick" msgstr "Analógico Direito" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Vibração" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Executar DSP LLE em um thread dedicado (não recomendado: pode causar " "congelamentos)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russo" @@ -4586,12 +4581,12 @@ msgstr "Salvar Instante Atual no Slot 9" msgid "Save State..." msgstr "Salvar Instante Atual..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Salvar como..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Salvar GCM/ISO comprimido" @@ -4599,7 +4594,7 @@ msgstr "Salvar GCM/ISO comprimido" msgid "Save current perspective" msgstr "Salvar perspectiva atual" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Salvar GCM/ISO descomprimido" @@ -4612,16 +4607,16 @@ msgstr "O Instante Salvo capturado %s está corrompido, parando captura..." msgid "Scaled EFB Copy" msgstr "Cópia Escalada do EFB" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Escaneando %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Procurando por ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Escaneando..." @@ -4637,11 +4632,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Busca" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Filtro de Busca" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Procurar em sub-pastas" @@ -4664,12 +4659,12 @@ msgstr "A seção %s não foi encontrada no SYSCONF" msgid "Select" msgstr "Selecionar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Selecione o arquivo de Gravação" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Selecione um arquivo WAD de Wii para instalar" @@ -4690,19 +4685,19 @@ msgstr "Selecione um arquivo de jogo salvo para importar" msgid "Select floating windows" msgstr "Selecionar Janelas flutuantes" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Selecione um arquivo para carregar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Selecione o arquivo de salva" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Selecione um instante para carregar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Selecione um instante para salvar" @@ -4724,7 +4719,7 @@ msgstr "" "\n" "Se estiver em dúvida, selecione Automático." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "O perfil de controle especificado não existe" @@ -4748,39 +4743,28 @@ msgstr "" "Se estiver em dúvida, use a resolução da sua Área de Trabalho.\n" "Se ainda estiver em dúvida, use a maior disponível.." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Selecione qual API gráfica será usada internamente.\n" -"Direct3D 9 geralmente é a mais rápida. No entanto, a OpenGL é a mais " -"precisa. Direct3D 11 fica entre as outras duas.\n" -"Lembre-se que os Direct3D backends só estão disponíveis no Windows.\n" -"\n" -"Se estiver em dúvida, use Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Selecione qual API gráfica será usada internamente.\n" -"Direct3D 9 geralmente é a mais rápida. No entanto, a OpenGL é a mais " -"precisa. Direct3D 11 fica entre as outras duas.\n" -"Lembre-se que os Direct3D backends só estão disponíveis no Windows.\n" -"\n" -"Se estiver em dúvida, use Direct3D 11." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Enviar" @@ -4792,18 +4776,18 @@ msgstr "Posição da Sensor Bar:" msgid "Separator" msgstr "Separador" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Sérvio" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Porta Serial 1 - Esta é a porta usada por dispositivos como o adaptador de " "rede" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Definir como ISO &padrão" @@ -4812,13 +4796,13 @@ msgstr "Definir como ISO &padrão" msgid "Set as default Memcard %c" msgstr "Definir como Memory Card padrão%c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: O índice é maior que a lista de códigos AR de tamanho %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4826,19 +4810,19 @@ msgstr "" "Configura a latência (em ms). Valores mais altos podem reduzir problemas de " "corte no áudio. Disponível apenas no backend OpenAL." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Configurações..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Não foi possível criar o arquivo de configurações" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Sacudir" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Nome Curto:" @@ -4862,7 +4846,7 @@ msgstr "Mostrar barra de &Status" msgid "Show &Toolbar" msgstr "Mostrar Barra de &Ferramentas" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Mostrar Padrões" @@ -4902,7 +4886,7 @@ msgstr "Mostrar JAP" msgid "Show Korea" msgstr "Mostrar Coréia" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Mostrar Idioma:" @@ -4942,11 +4926,11 @@ msgstr "Mostrar Wad" msgid "Show Wii" msgstr "Mostrar Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Mostrar uma janela de confirmação antes de parar um jogo." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4964,7 +4948,7 @@ msgstr "Mostrar o primeiro bloco" msgid "Show lag counter" msgstr "Mostar o contador de lag" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5016,23 +5000,24 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Wiimote na Horizontal" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Chinês Simplificado" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Tamanho" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Pular a BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Pular limpeza DCBZ" @@ -5063,11 +5048,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -5075,7 +5060,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Captura de tela" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Renderizador por Software" @@ -5091,27 +5076,27 @@ msgstr "" "Você realmente quer utilizar o Renderizador por Software? Se estiver em " "dúvida, pressione 'Não'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Configurações de Som" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "O Backend de Som %s não é válido." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Falha na criação do buffer de som: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Barra de Espaço" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Espanhol" @@ -5139,7 +5124,7 @@ msgstr "" "\n" "Se estiver em dúvida, selecione 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Aumentar a velocidade de transferência do disco" @@ -5147,13 +5132,13 @@ msgstr "Aumentar a velocidade de transferência do disco" msgid "Square Stick" msgstr "Analógico Quadrado" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Controle Padrão" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5169,7 +5154,7 @@ msgstr "Iniciar Ca&ptura" msgid "Start Recording" msgstr "Iniciar Captura" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Instante Atual" @@ -5177,7 +5162,7 @@ msgstr "Instante Atual" msgid "State Saves" msgstr "Instante Salvos" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Volante" @@ -5226,19 +5211,19 @@ msgstr "Arquivo exportado com sucesso para %s" msgid "Successfully imported save files" msgstr "Arquivos de salva importados com sucesso" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Sueco" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Balançar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Sincronizar thread da GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5246,12 +5231,13 @@ msgstr "" "Sincroniza as threads da GPU e da CPU para ajudar a evitar travamentos " "aleatórios no modo Dual Core. (ATIVADO = Compatível, DESATIVADO = Rápido)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Idioma do Sistema:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5282,7 +5268,7 @@ msgstr "Direita da Mesa" msgid "Take Screenshot" msgstr "Capturar Tela" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5302,11 +5288,11 @@ msgstr "Cache de Texturas" msgid "Texture Format Overlay" msgstr "Sobreposição Formato das Texturas" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "O WAD foi instalado com sucesso" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "O endereço é inválido" @@ -5314,13 +5300,13 @@ msgstr "O endereço é inválido" msgid "The checksum was successfully fixed" msgstr "O Checksum foi corrigido com sucesso" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "O diretório escolhido já está na lista" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5343,7 +5329,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "O Arquivo %s já foi aberto, o header do arquivo não será escrito." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "O arquivo que você especificou (%s) não existe" @@ -5377,7 +5363,7 @@ msgid "The save you are trying to copy has an invalid file size" msgstr "" "O Salva que você está tentando copiar tem um tamanho de arquivo inválido" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5385,19 +5371,19 @@ msgstr "" "O idioma selecionado não é suportado pelo seu sistema. Voltando ao padrão do " "sistema." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "As versões de NetPlay do Client e do Servidor são incompatíveis!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "O servidor está cheio!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "O servidor respondeu: O jogo está rodando no momento!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "O servidor enviou uma mensagem de erro desconhecida!" @@ -5406,15 +5392,15 @@ msgstr "O servidor enviou uma mensagem de erro desconhecida!" msgid "The specified file \"%s\" does not exist" msgstr "O arquivo especificado \"%s\" não existe" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "O valor é inválido" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5422,7 +5408,7 @@ msgstr "" "É necessário um ticket para 00000001/00000002. O NAND que você extraiu " "provavelmente está incompleto." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5430,7 +5416,7 @@ msgstr "" "Estas configurações substituem as configurações do núcleo do Dolphin.\n" "Indeterminado significa que o jogo usa as configurações do Dolphin." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5438,7 +5424,7 @@ msgstr "" "Este simulador de Action Replay não suporta códigos que modifiquem o Action " "Replay em si." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" "Isto pode causar diminuição da performance no Wii Menu e em alguns jogos." @@ -5463,7 +5449,7 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5475,7 +5461,7 @@ msgstr "" "acelerar usando DSP (deve consertar cortes no áudio mas pode causar ruído " "constante dependendo do jogo)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5487,7 +5473,7 @@ msgstr "" "Dá um grande aumento de velocidade para PCs com mais de um núcleo, mas " "também pode causar travamentos/erros ocasionais." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Isto vai deixar você editar manualmente o arquivo de configuração .INI" @@ -5496,12 +5482,12 @@ msgstr "Isto vai deixar você editar manualmente o arquivo de configuração .IN msgid "Threshold" msgstr "Threshold" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Inclinar" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Título" @@ -5536,15 +5522,16 @@ msgid "Toggle IR" msgstr "Ligar/Desligar IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Topo" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Chinês Tradicional" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Houve a tentativa de carregar um tipo de arquivo desconhecido." @@ -5564,7 +5551,7 @@ msgstr "" "Tentando ler de um SYSCONF inválido\n" "Os Bt IDs do Wiimote não estão disponíveis" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turco" @@ -5580,12 +5567,12 @@ msgstr "Tipo" msgid "UDP Port:" msgstr "Porta UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "Wiimote UDP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "DESCONHECIDO" @@ -5594,7 +5581,7 @@ msgstr "DESCONHECIDO" msgid "UNKNOWN_%02X" msgstr "DESCONHECIDO_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "EUA" @@ -5607,9 +5594,9 @@ msgstr "" "Nada modificado." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5635,11 +5622,11 @@ msgstr "Desfazer Instante Salvo" msgid "Unexpected 0x80 call? Aborting..." msgstr "Chamada 0x80 inesperada? Abortando..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Desconhecido" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Comando de DVD desconhecido %08x - Erro Fatal" @@ -5654,12 +5641,12 @@ msgstr "Comando desconhecido 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Tipo de entrada desconhecido %i no SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Menssagem desconhecida recebida com identificação: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5670,16 +5657,16 @@ msgstr "" msgid "Up" msgstr "Para cima" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Atualizar" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Wiimote na Vertical" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Usar modo EuRGB60 (PAL60)" @@ -5687,11 +5674,11 @@ msgstr "Usar modo EuRGB60 (PAL60)" msgid "Use Fullscreen" msgstr "Usar Tela Cheia" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Usar Hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Usar Panic Handlers" @@ -5758,11 +5745,11 @@ msgstr "Utilitário" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Hack de Velocidade VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Valor" @@ -5770,7 +5757,7 @@ msgstr "Valor" msgid "Value:" msgstr "Valor:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Valor:" @@ -5782,7 +5769,7 @@ msgstr "Verbosidade" msgid "Vertex Streaming Hack" msgstr "Hack de Fluxo de Vértice" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Vídeo" @@ -5790,7 +5777,7 @@ msgstr "Vídeo" msgid "Virtual" msgstr "Virtual" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volume" @@ -5822,15 +5809,15 @@ msgstr "" msgid "Warning" msgstr "Aviso" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Aviso - Inicializando DOL no modo de console errado!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Aviso - Inicializando ELF no modo de console errado!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Aviso - Inicializando ISO no modo de console errado!" @@ -5933,19 +5920,19 @@ msgstr "Hack de Widescreen" msgid "Width" msgstr "Largura" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Console do Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Raiz do Wii NAND" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Arquivos de Save do Wii (*.bin)|*.bin" @@ -5958,12 +5945,18 @@ msgstr "WiiWAD: Não foi possível ler o arquivo" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote Conectado" @@ -5995,14 +5988,14 @@ msgstr "Janelas da Direita" msgid "Word Wrap" msgstr "Word Wrap" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Funcionando..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Gravar memcards (GC)" @@ -6022,21 +6015,36 @@ msgstr "Escrever para o Arquivo" msgid "Write to Window" msgstr "Escrever na Janela" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice falhou: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 Falha na inicialização: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 Criação de Master Voice falhou: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice falhou: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 Falha na inicialização: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 Criação de Master Voice falhou: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -6067,15 +6075,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Você não pode fechar painéis que têm páginas neles." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Você deve escolher um jogo!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Você deve digitar um nome!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Você deve digitar um valor válido decimal, hexadecimal ou octal." @@ -6083,7 +6091,7 @@ msgstr "Você deve digitar um valor válido decimal, hexadecimal ou octal." msgid "You must enter a valid profile name." msgstr "Você deve digitar um nome válido para o perfil." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Você deve reiniciar o Dolphin para que as modificações tenham efeito." @@ -6097,7 +6105,7 @@ msgstr "" "Gostaria de parar agora para resolver o problema?\n" "Se você escolher \"Não\", o áudio pode falhar." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6116,15 +6124,15 @@ msgstr "" "Ele deveria ter 0x%04x (mas tem 0x%04llx)\n" "Você gostaria de gerar um novo?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "Hack do ZTP" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Código Zero 3 não é suportado" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Código Zero desconhecido pelo Dolphin: %08x" @@ -6184,29 +6192,24 @@ msgstr "" "\n" "Se estiver em dúvida, deixe isto desativado." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Lendo Opcode de %x. Favor reportar." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "flavor desconhecido %d (esperado %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "mensagem desconhecida recebida" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute retornou -1 ao rodar o aplicativo!" @@ -6221,3 +6224,50 @@ msgstr "Correção do zNear:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| OR" + +#~ msgid "Could not create %s" +#~ msgstr "Não pôde criar %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Editar substituições locais" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Abre as substituições especificadas pelo usuário em um editor de texto " +#~ "externo." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Selecione qual API gráfica será usada internamente.\n" +#~ "Direct3D 9 geralmente é a mais rápida. No entanto, a OpenGL é a mais " +#~ "precisa. Direct3D 11 fica entre as outras duas.\n" +#~ "Lembre-se que os Direct3D backends só estão disponíveis no Windows.\n" +#~ "\n" +#~ "Se estiver em dúvida, use Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Selecione qual API gráfica será usada internamente.\n" +#~ "Direct3D 9 geralmente é a mais rápida. No entanto, a OpenGL é a mais " +#~ "precisa. Direct3D 11 fica entre as outras duas.\n" +#~ "Lembre-se que os Direct3D backends só estão disponíveis no Windows.\n" +#~ "\n" +#~ "Se estiver em dúvida, use Direct3D 11." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Lendo Opcode de %x. Favor reportar." diff --git a/Languages/po/ru.po b/Languages/po/ru.po index 461239c829..0e0632c987 100644 --- a/Languages/po/ru.po +++ b/Languages/po/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Russian (http://www.transifex.com/projects/p/dolphin-emu/" @@ -21,13 +21,13 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(слишком много)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " Игра : " @@ -35,7 +35,7 @@ msgstr " Игра : " msgid "! NOT" msgstr "! НЕТ" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -60,12 +60,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sКопировать%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d примеры" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d примеры (уровень качества %d)" @@ -76,12 +76,12 @@ msgstr "%d примеры (уровень качества %d)" msgid "%s already exists, overwrite?" msgstr "%s уже существует, переписать?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s не может быть сжат. Возможно образ поврежден." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -90,7 +90,7 @@ msgstr "" "%s невозможно загрузить карту памяти\n" "Размер файла карты поврежден (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -99,7 +99,7 @@ msgstr "" "%s невозможно загрузить карту памяти\n" "Размер карты поврежден (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -113,7 +113,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s не может быть открыт" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -123,7 +123,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s - пустой файл" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s уже сжат! Больше сжать нельзя." @@ -181,11 +181,11 @@ msgstr "Менеджер &читов" msgid "&DSP Settings" msgstr "Настройка &DSP" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Удалить ISO-файл..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Удалить выбранные ISO-файлы..." @@ -249,7 +249,7 @@ msgstr "&Пауза" msgid "&Play" msgstr "&Запустить" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Свойства" @@ -293,7 +293,7 @@ msgstr "&Вид" msgid "&Wiimote Settings" msgstr "Настройка &Wiimote" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Энциклопедия" @@ -329,7 +329,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x Native (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 бит" @@ -345,7 +345,7 @@ msgstr "2.5x Native (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x Native (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 бита" @@ -361,7 +361,7 @@ msgstr "3x Native (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x Native (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 бит" @@ -373,7 +373,7 @@ msgstr "<Введите название>" msgid "" msgstr "<Разрешений экрана не найдено>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "<Ничего>" @@ -381,7 +381,7 @@ msgstr "<Ничего>" msgid "" msgstr "<Нажмите кнопку>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<Системный>" @@ -389,13 +389,13 @@ msgstr "<Системный>" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Окно сетевой игры уже открыто!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Игра не запущена." @@ -416,21 +416,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR-коды" @@ -474,7 +475,7 @@ msgstr "" "Ошибочный код:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -482,7 +483,7 @@ msgstr "" "Ошибка ActionReplay: неверный размер (%08x : адрес = %08x) в добавляемом " "коде (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -491,7 +492,7 @@ msgstr "" "Ошибка Action Replay: Неверный размер (%08x : address = %08x) в Fill и " "Slide (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -500,7 +501,7 @@ msgstr "" "Ошибка Action Replay: Неверный размер (%08x : address = %08x) в заполнении " "ОЗУ (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -509,12 +510,12 @@ msgstr "" "Ошибка Action Replay: Неверный размер (%08x : address = %08x) в ОЗУ к точке " "(%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Ошибка Action Replay: Неверное значение (%08x) в копии памяти (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -523,27 +524,27 @@ msgstr "" "Ошибка Action Replay: основной код и запись в CCXXXXXX не реализована (%s) ⏎ " "основные коды не нужны. Не используйте основные кодоы." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Ошибка Action Replay: неверная линия AR кода: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Неврный размер условного кода %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Неверный тип нормального кода %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Нормальный код %i: неверный подтип %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Нормальный код 0: неверный подтип %08x (%s)" @@ -557,11 +558,11 @@ msgstr "Адаптер:" msgid "Add" msgstr "Добавить" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Добавление ActionReplay-кода" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Добавление патча" @@ -569,9 +570,9 @@ msgstr "Добавление патча" msgid "Add new pane" msgstr "Добавить панель" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Добавить..." @@ -609,36 +610,36 @@ msgstr "Настройка давления аналога, необходима msgid "Advanced" msgstr "Расширенные" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Расширенные настройки" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Все GC/Wii файлы (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Все GC/Wii образы (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Все GCM-файлы Gamecube (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Файлы быстрых сохранений (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Файлы образов Wii (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Сжатые образа дисков GC/Wii (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Все файлы (*.*)|*.*" @@ -658,19 +659,19 @@ msgstr "Анизотропная фильтрация" msgid "Anti-Aliasing:" msgstr "Сглаживание:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Загрузчик неверноего размера... это точно загрузчик?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Загрузчик недоступен при загрузке из файла" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Загрузчик:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Применить" @@ -683,7 +684,7 @@ msgstr "" "Включить эффекты пост-процесса после завершения кадра. ⏎ ⏎ Если не уверены, " "выберете (выкл)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabic" @@ -692,7 +693,7 @@ msgstr "Arabic" msgid "Are you sure you want to delete \"%s\"?" msgstr "Вы уверены, что хотите удалить \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -700,7 +701,7 @@ msgstr "" "Вы уверены, что хотите удалить эти файлы?\n" "Они исчезнут навсегда!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "Вы уверены, что хотите удалить этот файл? Он исчезнет навсегда!" @@ -708,7 +709,12 @@ msgstr "Вы уверены, что хотите удалить этот фай msgid "Arm JIT (experimental)" msgstr "Arm JIT (экспериментальный)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (экспериментальный)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Соотношение сторон:" @@ -717,12 +723,12 @@ msgstr "Соотношение сторон:" msgid "At least one pane must remain open." msgstr "Хотя бы одна панель должна быть открыта." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Аудио" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Вывод аудио:" @@ -730,7 +736,7 @@ msgstr "Вывод аудио:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Ошибка открытия устройства вывода звука.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Авто" @@ -768,16 +774,16 @@ msgstr "BP регистры" msgid "Back" msgstr "Назад" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Настройка вывода" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Вывод:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Фоновой ввод" @@ -795,15 +801,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Логотип" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Данные логотипа" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Логотип:" @@ -815,7 +821,7 @@ msgstr "Панель" msgid "Basic" msgstr "Основные" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Основные настройки" @@ -823,7 +829,7 @@ msgstr "Основные настройки" msgid "Bass" msgstr "Басы" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Блок таблицы размещения контрольной суммы неудачна" @@ -844,7 +850,7 @@ msgid "Blue Right" msgstr "Синяя справа" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "снизу" @@ -853,7 +859,7 @@ msgstr "снизу" msgid "Bound Controls: %lu" msgstr "Элементы управления с привязкой: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Не работает" @@ -861,7 +867,7 @@ msgstr "Не работает" msgid "Browse" msgstr "Обзор" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Выберите папку с образами игр" @@ -869,11 +875,11 @@ msgstr "Выберите папку с образами игр" msgid "Browse for an ISO directory..." msgstr "Выбор папки с ISO-файлами..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Укажите папку для сохранения" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Буфер:" @@ -883,7 +889,7 @@ msgstr "Буфер:" msgid "Buttons" msgstr "Кнопки" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -905,7 +911,7 @@ msgstr "C Stick" msgid "CP reg" msgstr "CP reg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Режим эмуляции CPU" @@ -922,17 +928,17 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Отмена" @@ -944,11 +950,11 @@ msgstr "Отмена" msgid "Cannot open %s" msgstr "Не удалось открыть %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -956,7 +962,7 @@ msgid "" "is not a valid gamecube memory card file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -968,7 +974,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Catalan" @@ -976,7 +982,7 @@ msgstr "Catalan" msgid "Center" msgstr "Центр" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Сменить" @@ -988,11 +994,11 @@ msgstr "Сменить &диск..." msgid "Change Disc" msgstr "Изменить диск" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Сменить игру" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1008,12 +1014,12 @@ msgstr "" msgid "Changes sign to zNear Parameter (after correction)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "Изменения данной опции вступят в силу только после перезапуска эмулятора." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Чат" @@ -1021,47 +1027,47 @@ msgstr "Чат" msgid "Cheat Code" msgstr "Чит-код" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Поиск кодов" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Менеджер чит-кодов" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Проверка целостности раздела" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Проверка целостности ..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chinese (Simplified)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinese (Traditional)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Выберите основной DVD-диск:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Выберете папку с NAND:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Выберите файл образа:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Выберите папку для добавления в список" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Выберите файл карты памяти" @@ -1069,14 +1075,14 @@ msgstr "Выберите файл карты памяти" msgid "Choose a memory card:" msgstr "Выберите карту памяти:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Выберите папку для сохранения файлов" @@ -1095,7 +1101,7 @@ msgstr "Circle Stick" msgid "Clear" msgstr "Очистить" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1105,7 +1111,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Закрыть" @@ -1114,11 +1120,11 @@ msgstr "Закрыть" msgid "Co&nfigure..." msgstr "&Настройка эмулятора..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Информация о коде" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Код:" @@ -1130,20 +1136,20 @@ msgstr "Команда" msgid "Comment" msgstr "Комментарий" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Комментарий:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Сжать ISO-файл..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Сжать выбранные ISO-файлы..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Сжатие образа" @@ -1161,8 +1167,8 @@ msgstr "Настройка" msgid "Configure Control" msgstr "Настройка управления" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Настроить контроллеры" @@ -1170,13 +1176,13 @@ msgstr "Настроить контроллеры" msgid "Configure..." msgstr "Настройка эмулятора..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Подтвердить перезапись файла" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Спрашивать при остановке" @@ -1190,7 +1196,7 @@ msgstr "Подключиться" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Подключить USB-клавиатуру" @@ -1215,7 +1221,7 @@ msgstr "Подключить Wiimote 3" msgid "Connect Wiimote 4" msgstr "Подключить Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Подключение..." @@ -1235,7 +1241,7 @@ msgstr "Ctrl" msgid "Convert to GCI" msgstr "Конвертировать в GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Копирование неудачно" @@ -1244,16 +1250,11 @@ msgstr "Копирование неудачно" msgid "Copy to Memcard %c" msgstr "Копировать на карту памяти %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Ядро" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Не удалось создать %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Не удалось инициализировать вывод %s." @@ -1269,12 +1270,12 @@ msgstr "" "игры GC/Wii. Пожалйста, учитывайте, что большинство приводов для ПК не " "способны прочитать оригинальные диски для Gamecube и Wii." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Не удалось определить ISO образ %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Не удалось сохранить %s" @@ -1292,27 +1293,27 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." msgstr "Невозможно инициализировать ядро.⏎ Проверьте вашу конфигурацию." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Счетчик:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Страна:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Создать новый AR-код" @@ -1344,12 +1345,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Custom Projection Hack" @@ -1357,11 +1358,11 @@ msgstr "Custom Projection Hack" msgid "Custom Projection Hack Settings" msgstr "Настройки Custom Projection Hack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Czech" @@ -1377,20 +1378,20 @@ msgstr "D-Pad" msgid "DSP" msgstr "Аудио" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Эмулятор движка DSP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "Эмуляция DSP HLE (быстрая)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "Интерпретатор DSP LLE (медленный)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE рекомпилятор" @@ -1398,11 +1399,11 @@ msgstr "DSP LLE рекомпилятор" msgid "DSP settings" msgstr "Настройка аудио (DSP)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD-диск:" @@ -1414,15 +1415,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Размер данных" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Дата:" @@ -1451,16 +1452,16 @@ msgstr "Отладчик" msgid "Decimal" msgstr "Десятичный" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Распаковка ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Снять сжатие с выбранных ISO-файлов..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Распаковка ISO..." @@ -1472,7 +1473,7 @@ msgstr "" msgid "Default" msgstr "Сброс" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Образ по умолчанию:" @@ -1514,8 +1515,8 @@ msgstr "" msgid "Device" msgstr "Устройство" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Настройки устройств" @@ -1523,15 +1524,12 @@ msgstr "Настройки устройств" msgid "Dial" msgstr "Вызов" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1577,7 +1575,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Диск" @@ -1601,19 +1599,19 @@ msgstr "" msgid "Divide" msgstr "/" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Вы хотите остановить эмуляцию?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Декодер Dolby Pro Logic II" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1644,9 +1642,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1670,12 +1667,12 @@ msgstr "Настройки эмулируемого Wiimote" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Настройки Dolphin GCPad" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS ролики (*.dtm)" @@ -1687,7 +1684,7 @@ msgstr "Настройка Wiimote" msgid "Dolphin at &Google Code" msgstr "&Репозиторий на Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1695,7 +1692,7 @@ msgstr "" "Dolphin не нашел образов игр GC/Wii. Щелкните дважды по этой надписи, чтобы " "указать путь..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1703,12 +1700,12 @@ msgstr "" "Dolphin настроен на скрытие всех игр. Кликните здесь два раза, чтобы " "показать игры..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1732,11 +1729,11 @@ msgstr "Скачано %lu кодов. (добавлено %lu)" msgid "Drums" msgstr "Барабаны" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Макет" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Дампить аудио" @@ -1773,9 +1770,9 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Dutch" @@ -1799,7 +1796,7 @@ msgstr "" "-- Если вы недавно обновили Dolphin , то скорее всего необходимо перегрузить " "компьютер, чтобы Windows обнаружил новый драйвер." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "ЕВРОПА" @@ -1815,14 +1812,10 @@ msgstr "Изменить" msgid "Edit ActionReplay Code" msgstr "Изменить код ActionReplay" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Править вручную" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Изменить патч" @@ -1831,8 +1824,8 @@ msgstr "Изменить патч" msgid "Edit current perspective" msgstr "Изменить точку" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Изменить..." @@ -1844,7 +1837,7 @@ msgstr "Эффект" msgid "Embedded Frame Buffer" msgstr "" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "" @@ -1871,7 +1864,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Эмулируемый Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Качество эмуляции:" @@ -1889,15 +1882,15 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Включить логирование AR-событий" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Включить совмещение блоков" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "" @@ -1905,27 +1898,27 @@ msgstr "" msgid "Enable Cache" msgstr "Включить кэш" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Включить чит-коды" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Включить DualCore-режим" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Включить DualCore-режим (ускорение)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Включить IdleSkipping-режим" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Включить IdleSkipping-режим (ускорение)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Включить MMU" @@ -1933,7 +1926,7 @@ msgstr "Включить MMU" msgid "Enable Progressive Scan" msgstr "Включить прогрессивную развертку" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Включить режим \"Сохранения экрана\"" @@ -1941,7 +1934,7 @@ msgstr "Включить режим \"Сохранения экрана\"" msgid "Enable Speaker Data" msgstr "Включить динамик" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Включить широкий экран" @@ -1962,7 +1955,7 @@ msgstr "" "В некоторых играх возможны проблемы.\n" " Если не уверены , выберите 1х." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -1990,7 +1983,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -1998,11 +1991,11 @@ msgstr "" "Ускоряет игру The Legend of Zelda: Twilight Princess. Для любой ДРУГОЙ игры " "данный хак должен быть ОТКЛЮЧЕН." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Включить Custom Projection Hack" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2010,7 +2003,7 @@ msgstr "" "Включить Dolby Pro Logic II эмуляцию, используя 5.1 канальный звук. Нет " "поддержки в OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2025,7 +2018,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2044,9 +2037,9 @@ msgstr "" msgid "End" msgstr "Конец" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "English" @@ -2069,21 +2062,20 @@ msgstr "Запись %d/%d" msgid "Entry 1/%d" msgstr "Запись 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Равно" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Ошибки" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "Ошибка загрузки выбранного языка. Возвращаемся к стандартному." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2129,7 +2121,7 @@ msgstr "" msgid "Export Failed" msgstr "Экспорт неудачен" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Экспортирование файла" @@ -2145,7 +2137,7 @@ msgstr "&Экспортировать запись процесса" msgid "Export Save" msgstr "Экспортировать сохранение" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Экспортировать сохранение Wii (эксперемент)" @@ -2161,7 +2153,7 @@ msgstr "" msgid "Export save as..." msgstr "&Экспортировать сохранение как..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Расширение" @@ -2177,44 +2169,44 @@ msgstr "Экстра параметр" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Извлечь все файлы..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Извлечь apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Извлечь DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Извлесь папку..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Извлечь файл..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Извлечь раздел..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Извлечение %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Извлечение всех файлов" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Извлечение папки" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Подождите..." @@ -2226,15 +2218,15 @@ msgstr "Байт FIFO" msgid "FIFO Player" msgstr "FIFO Player" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "ФРАНЦИЯ" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "Размер ТФС:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Ошибка подключания!" @@ -2242,11 +2234,15 @@ msgstr "Ошибка подключания!" msgid "Failed to download codes." msgstr "Ошибка скачивания кодов." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Ошибка извлечения в %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2287,7 +2283,7 @@ msgstr "Ошибка чтения banner.bin" msgid "Failed to read bk header" msgstr "Невозможно прочитать bk-заголовок" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2295,13 +2291,13 @@ msgid "" "FilePosition:%llx" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2317,13 +2313,13 @@ msgstr "Ошибка чтения данных из файла %d" msgid "Failed to read data from file: %s" msgstr "Невозможно прочитать данные из файла: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2335,7 +2331,7 @@ msgstr "" msgid "Failed to read header" msgstr "Невозможно прочитать заголовок" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2346,7 +2342,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Ошибка чтения уникального ID из образа диска" @@ -2368,7 +2364,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "Ошибка записи заголовка для %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Farsi" @@ -2380,7 +2376,7 @@ msgstr "быстрое" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Более быстрая верси MMU (работает не со всеми играми)." @@ -2414,7 +2410,7 @@ msgstr "" "Файл не может быть открыт\n" "или имеет неверное расширение" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2427,7 +2423,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Файл не распознается как карта памяти" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Файл не сжат" @@ -2436,11 +2432,11 @@ msgstr "Файл не сжат" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: неизвестный режим открытия : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Файловая система" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Тип файла 'ini' неизвестен! Его нельзя открыть!" @@ -2468,7 +2464,7 @@ msgstr "16:9" msgid "Force 4:3" msgstr "4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Запускать консоль в режиме NTSC-J" @@ -2492,14 +2488,14 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " "setting when playing Japanese games." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2511,7 +2507,7 @@ msgstr "" msgid "Forward" msgstr "Вперед" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2554,7 +2550,7 @@ msgstr "Диапазон кадра" msgid "Frame S&kipping" msgstr "&Пропуск кадров" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Лимит кадров:" @@ -2566,9 +2562,9 @@ msgstr "Кадров для записи" msgid "Free Look" msgstr "Свободный обзор" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "French" @@ -2601,27 +2597,27 @@ msgstr "Джойстик" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "ID игры:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Игра уже запущена!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Игра не запущена!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Игры не найдены!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Персональные настройки игр" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Настройки игры" @@ -2629,7 +2625,7 @@ msgstr "Настройки игры" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "Файлы созранений GameCube(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2638,7 +2634,7 @@ msgid "Gamecube &Pad Settings" msgstr "Настройки джойстика Gamecube" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Файлы карт памяти Gamecube (*.raw,*.gcp)" @@ -2646,12 +2642,12 @@ msgstr "Файлы карт памяти Gamecube (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Настройка контроллера GameCube" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko-коды" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2661,7 +2657,7 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Общие" @@ -2670,13 +2666,13 @@ msgstr "Общие" msgid "General Settings" msgstr "Основные настройки" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "German" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2689,7 +2685,7 @@ msgstr "Видео" msgid "Graphics settings" msgstr "Настройка видео" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Больше чем" @@ -2704,7 +2700,7 @@ msgid "" "If unsure, leave this checked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Greek" @@ -2728,11 +2724,11 @@ msgstr "Гитара" msgid "Hacks" msgstr "Хаки" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Ошибка контрольной суммы заголовка" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebrew" @@ -2744,7 +2740,7 @@ msgstr "Высота" msgid "Help" msgstr "Помощь" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2756,7 +2752,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2793,7 +2789,7 @@ msgid "Home" msgstr "Дом" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Создать" @@ -2802,11 +2798,11 @@ msgid "Hotkey Configuration" msgstr "Настройка \"горячих\" клавиш" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Клавиши" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Hungarian" @@ -2814,29 +2810,29 @@ msgstr "Hungarian" msgid "Hybrid Wiimote" msgstr "Гибридный Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - bad destination" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "Настройки консоли (IPL)" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "ИК" @@ -2848,15 +2844,15 @@ msgstr "ИК указатель" msgid "IR Sensitivity:" msgstr "Чувствительность IR-сигнала:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Данные образа" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Папки с файлами образов" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ИТАЛИЯ" @@ -2864,7 +2860,7 @@ msgstr "ИТАЛИЯ" msgid "Icon" msgstr "Иконка" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -2924,7 +2920,7 @@ msgstr "" "Импортированный файл имеет расширение sav\n" "но содержит неверный заголовок" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Почти играбельна" @@ -2933,7 +2929,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Информация" @@ -2953,7 +2949,7 @@ msgstr "Insert" msgid "Insert Encrypted or Decrypted code here..." msgstr "Вставьте сюда сам код (шифрованный или нешифрованный)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Вставить SD-карту" @@ -2965,45 +2961,45 @@ msgstr "Введите имя кода..." msgid "Install WAD" msgstr "Установить WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Установить в меню Wii" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "Вызван InstallExceptionHandler, но ваша платформа его еще не поддерживает." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Установка WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Ошибка проверки целостности" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Проверка целостности завершена" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Проверка целостности завершена. Ошибок не было найдено." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Интерфейс" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Настройки интерфейса" @@ -3032,7 +3028,7 @@ msgstr "Внутреннее разрешение:" msgid "Interpreter (VERY slow)" msgstr "Интерпретатор (ОЧЕНЬ медленно)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Заставка" @@ -3041,7 +3037,7 @@ msgstr "Заставка" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Invalid Size(%x) or Magic word (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Неверное значение!" @@ -3049,16 +3045,16 @@ msgstr "Неверное значение!" msgid "Invalid bat.map or dir entry" msgstr "Неверный bat.map или каталог" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Неверный тип события %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Неверный файл" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3085,34 +3081,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Неверное сохранение" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italian" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "ЯПОНИЯ" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT-рекомпилятор (рекомендуется)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL-экспериментальный рекомпилятор" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Italian" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "КОРЕЯ" @@ -3131,8 +3129,9 @@ msgstr "Держать окно главным" msgid "Key" msgstr "Комбинация" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Korean" @@ -3150,7 +3149,7 @@ msgstr "Кнопка L" msgid "L-Analog" msgstr "L-Analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Язык" @@ -3159,7 +3158,7 @@ msgstr "Язык" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Задержка:" @@ -3193,11 +3192,11 @@ msgstr "" "Левый/Правый клик для доп. опций\n" "Средний-клик - очистить." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Меньше чем" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Лимитировать FPS" @@ -3289,11 +3288,11 @@ msgstr "" msgid "Load State..." msgstr "Загрузить игру..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Загрузить системное меню Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Загрузить системное меню Wii %d%c" @@ -3340,12 +3339,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Logger Outputs" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Окно лога" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Соединение с сервером потеряно!" @@ -3362,7 +3361,7 @@ msgstr "" "MD5 не совпадает\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Ускорить MMU (спидхак)" @@ -3376,11 +3375,11 @@ msgstr "Файлы Gameshark MadCatz (*.gcs)" msgid "Main Stick" msgstr "Основной стик" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "ID создателя:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Создатель:" @@ -3411,7 +3410,7 @@ msgid "Memory Byte" msgstr "Байт памяти" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Карта памяти" @@ -3421,7 +3420,7 @@ msgid "" "could mangle stuff!" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3432,7 +3431,7 @@ msgid "" "Would you like to copy the old file to this new location?\n" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" @@ -3440,7 +3439,7 @@ msgstr "" msgid "Menu" msgstr "Меню" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Мик." @@ -3453,7 +3452,7 @@ msgstr "Мин." msgid "Misc" msgstr "Разное" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Разное" @@ -3474,11 +3473,11 @@ msgstr "" msgid "Monospaced font" msgstr "Моноширный шрифт" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Мотор" @@ -3590,15 +3589,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Вверх" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Имя:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Имя:" @@ -3608,7 +3607,7 @@ msgstr "Имя:" msgid "Native GCI files(*.gci)" msgstr "Стандартные CGI-файлы (*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Новый поиск" @@ -3617,7 +3616,7 @@ msgstr "Новый поиск" msgid "Next Page" msgstr "След. страница" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Искать далее" @@ -3625,11 +3624,11 @@ msgstr "Искать далее" msgid "Nickname :" msgstr "Ник :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Страна не указана (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "ISO/WAD-файлов не обнаружено" @@ -3668,24 +3667,25 @@ msgstr "Нет файла для записи" msgid "No save folder found for title %s" msgstr "Не найдена папка с сохранениями для %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Отсутствует" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norwegian Bokmaal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Не равно" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Неизвестно" @@ -3694,11 +3694,11 @@ msgstr "Неизвестно" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Не подключено" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Примечания" @@ -3719,7 +3719,7 @@ msgstr "Уведомления" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Кол-во кодов:" @@ -3740,7 +3740,7 @@ msgstr "Объект" msgid "Object Range" msgstr "Объект диапазона" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Выкл" @@ -3748,7 +3748,7 @@ msgstr "Выкл" msgid "Offset:" msgstr "Смещение:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Выводить сообщения на экран" @@ -3766,11 +3766,11 @@ msgstr "Доступно только %d блоков" msgid "Open" msgstr "Открыть" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Открыть &папку с образом" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Открыть папку с &сохранениями Wii" @@ -3800,17 +3800,13 @@ msgstr "Декодер текстур OpenCL" msgid "OpenMP Texture Decoder" msgstr "Декодер текстур OpenMP" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Опции" @@ -3831,7 +3827,7 @@ msgstr "" msgid "Other" msgstr "Другой" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3845,11 +3841,11 @@ msgstr "Вывод" msgid "P&lay Recording..." msgstr "Про&играть запись процесса" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Джойстик" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Джойстик" @@ -3873,26 +3869,26 @@ msgstr "Параграф" msgid "Parameters" msgstr "Параметры " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Раздел %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Патчи" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Папки" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Пауза" @@ -3905,7 +3901,7 @@ msgstr "Пауза в конце ролика" msgid "Per-Pixel Lighting" msgstr "По-пискельное освещение" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Отлично" @@ -3916,8 +3912,8 @@ msgstr "Точка %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Запуск" @@ -3929,7 +3925,7 @@ msgstr "Проиграть записанное" msgid "Play/Pause" msgstr "Старт/Пауза" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Играбельна" @@ -3937,11 +3933,11 @@ msgstr "Играбельна" msgid "Playback Options" msgstr "Параметры просмотра" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Игроки" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Пожалуйста, подтвердите..." @@ -3953,36 +3949,36 @@ msgstr "Пожалуйста, создайте точку обозрения, п msgid "Plus-Minus" msgstr "Плюс-Минус" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polish" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Порт 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Порт 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Порт 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Порт 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Порт :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portuguese" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portuguese (Brazilian)" @@ -3995,7 +3991,7 @@ msgstr "Эффекты пост-обработки:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -4017,7 +4013,7 @@ msgstr "Пред. страница" msgid "Previous Page" msgstr "Пред. страница" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Предыдущее значение" @@ -4041,8 +4037,8 @@ msgstr "Очистить кэш" msgid "Question" msgstr "Вопрос" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Выход" @@ -4064,7 +4060,7 @@ msgstr "R-Analog" msgid "RAM" msgstr "Память" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "РОССИЯ" @@ -4103,7 +4099,7 @@ msgstr "Настоящий Wiimotes" msgid "Record" msgstr "Запись" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4150,10 +4146,10 @@ msgstr "Обновить список" msgid "Refresh game list" msgstr "Обновление списка игр" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Удалить" @@ -4173,7 +4169,7 @@ msgstr "Выводить изображение в главное окно" msgid "Reset" msgstr "Сброс настроек" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Результаты" @@ -4181,7 +4177,7 @@ msgstr "Результаты" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Ревизия:" @@ -4194,17 +4190,17 @@ msgstr "Вправо" msgid "Right Stick" msgstr "Правый стик" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Видбрация" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Русский" @@ -4278,12 +4274,12 @@ msgstr "" msgid "Save State..." msgstr "Сохранить игру как..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Сохранить как..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Выберите место для сохранения сжатого GCM/ISO-образа" @@ -4291,7 +4287,7 @@ msgstr "Выберите место для сохранения сжатого G msgid "Save current perspective" msgstr "Сохранить точку" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Выберите место для сохранения несжатого GCM/ISO-образа" @@ -4304,16 +4300,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "Масштабируемые EFB копии" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Сканирование %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Поиск образов дисков" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Поиск..." @@ -4329,11 +4325,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Поиск" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Фильтр поиска" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Искать в подпапках" @@ -4356,12 +4352,12 @@ msgstr "Секция %s не найдена в SYSCONF" msgid "Select" msgstr "Выбрать" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Выберите файл для записи игрового процесса" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Выберете Wii WAD файл для установки" @@ -4380,19 +4376,19 @@ msgstr "Выберите файл сохранения для импорта" msgid "Select floating windows" msgstr "Выберите плавающие окна" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Выберите файл для запуска..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Выберите файл сохранений Wii" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Выберите файл сохранения для загрузки" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Выберите или укажите файл для быстрого сохранения" @@ -4407,7 +4403,7 @@ msgid "" "If unsure, select Auto." msgstr "" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "" @@ -4425,27 +4421,28 @@ msgid "" "If still unsure, use the highest resolution which works for you." msgstr "" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Отправить" @@ -4457,18 +4454,18 @@ msgstr "Месторасположение сенсора:" msgid "Separator" msgstr "Разделитель" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbian" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Последовательный порт №1 - тип порта, который используют такие устройства " "как сетевой адаптер." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Сделать &игрой по умолчанию" @@ -4477,30 +4474,30 @@ msgstr "Сделать &игрой по умолчанию" msgid "Set as default Memcard %c" msgstr "Установить картой памяти по умолчанию %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Настройки..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Встряска" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Короткое имя:" @@ -4524,7 +4521,7 @@ msgstr "Отображать панель &статуса" msgid "Show &Toolbar" msgstr "Отображать панель &инструментов" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4564,7 +4561,7 @@ msgstr "JAP" msgid "Show Korea" msgstr "Кореи" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Отображать язык:" @@ -4604,11 +4601,11 @@ msgstr "WAD-файлы" msgid "Show Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Активирует запрос подтверждения об остановке процесса эмуляции игры." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4628,7 +4625,7 @@ msgstr "Показать первый блок" msgid "Show lag counter" msgstr "Показать лаги счетчика" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4670,23 +4667,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Повернутый Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Simplified Chinese" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Размер" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Пропускать загрузку BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Пропустить очистку DCBZ" @@ -4710,11 +4708,11 @@ msgstr "" msgid "Slot %i" msgstr "Слот %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Слот A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Слот B" @@ -4722,7 +4720,7 @@ msgstr "Слот B" msgid "Snapshot" msgstr "Снапшот" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Программный рендинг" @@ -4734,27 +4732,27 @@ msgid "" "Do you really want to enable software rendering? If unsure, select 'No'." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Настройки эмуляции звука" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Вывод звука %s не верен." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Ошибка создания аудио-буфера %s." #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Пробел" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spanish" @@ -4774,7 +4772,7 @@ msgid "" "If unsure, select 640x528." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Ускорить чтение с диска" @@ -4782,13 +4780,13 @@ msgstr "Ускорить чтение с диска" msgid "Square Stick" msgstr "Квадратный стик" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Стандартный контроллер" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Старт" @@ -4804,7 +4802,7 @@ msgstr "Начать &запись процесса" msgid "Start Recording" msgstr "Начать запись" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Статус" @@ -4812,7 +4810,7 @@ msgstr "Статус" msgid "State Saves" msgstr "Быстрые сохранения" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Рулевое колесо" @@ -4856,19 +4854,19 @@ msgstr "Файл успешно экспортирован в %s" msgid "Successfully imported save files" msgstr "Сохранение успешно импортировано" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Покачивание" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Синхронизировать поток GPU" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -4876,12 +4874,13 @@ msgstr "" "Синхронизировать GPU и CPU потоки, для исправления случайных зависаний в " "Двухядерном режиме. (ВКЛ = Совместимость, ВЫКЛ = Скорость)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Язык системы:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "ТАЙВАНЬ" @@ -4912,7 +4911,7 @@ msgstr "Правая панель" msgid "Take Screenshot" msgstr "Сделать скриншот" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -4932,11 +4931,11 @@ msgstr "Кэширование текстур" msgid "Texture Format Overlay" msgstr "Наложение форматов текстур" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD-файл успешно установлен" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Неверный адрес" @@ -4944,13 +4943,13 @@ msgstr "Неверный адрес" msgid "The checksum was successfully fixed" msgstr "Контрольная сумма успешно исправлена" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Выбпвнная папка уже в списке" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -4971,7 +4970,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Файл %s уже открыт, нельзя записать заголовок." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Указанный файл (%s) не существует" @@ -5000,26 +4999,26 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "Сохранение, которое вы пытаетесь скопировать имеет неверный размер" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" "Выбранный язык не поддерживается вашей системой. Возвращаемся к стандартному." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Версии \"сетевой игры\" сервера и клиента несовместимы!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Сервер заполнен!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Ответ с сервера: игра уже запущена!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Сервер прислал неизвестное сообщение об ошибке!" @@ -5028,15 +5027,15 @@ msgstr "Сервер прислал неизвестное сообщение о msgid "The specified file \"%s\" does not exist" msgstr "Указанный файл \"%s\" не существует" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Неверное значение" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Тема:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5044,7 +5043,7 @@ msgstr "" "Не найден билет для 00000001/00000002. Ваша копия NAND скорее всего не " "полная." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5056,7 +5055,7 @@ msgstr "" "включена, выключена и неопределена (применяется глобальное значение данной " "опции)." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5064,7 +5063,7 @@ msgstr "" "Симулятор action replay не поддерживает коды, которые меняют сам Action " "Replay. " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" "Активация данной опции может привести к замедлению эмуляции в Wii-меню и " @@ -5082,7 +5081,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5090,7 +5089,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5098,7 +5097,7 @@ msgid "" "cause occasional crashes/glitches." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Это позволит вам вручную править INI файл с конфигурацией" @@ -5107,12 +5106,12 @@ msgstr "Это позволит вам вручную править INI фай msgid "Threshold" msgstr "Порог" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Наклон" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Название" @@ -5147,15 +5146,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "сверху" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Traditional Chinese" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Попытка загрузить неизвестный тип файла." @@ -5173,7 +5173,7 @@ msgid "" "Wiimote bt ids are not available" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turkish" @@ -5189,12 +5189,12 @@ msgstr "Тип:" msgid "UDP Port:" msgstr "Порт UDP:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "НЕИЗВЕСТНО" @@ -5203,7 +5203,7 @@ msgstr "НЕИЗВЕСТНО" msgid "UNKNOWN_%02X" msgstr "UNKNOWN_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "США" @@ -5216,7 +5216,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 #, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5238,11 +5238,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "Неожиданный вызов 0x80? Отмена..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Неизвестно" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Неизвестная комманда DVD %08x - критическая ошибка" @@ -5257,12 +5257,12 @@ msgstr "Неизвестная команда 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Неизвестный тип записи %i в SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Получено неизвестное сообщение с id : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "Получено неизвестное сообщение с id : %d от игрока:%d Игрок выкинут!" @@ -5272,16 +5272,16 @@ msgstr "Получено неизвестное сообщение с id : %d о msgid "Up" msgstr "Вверх" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Обновить" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Перевернутый Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Использовать EuRGB60-режим (PAL60)" @@ -5289,11 +5289,11 @@ msgstr "Использовать EuRGB60-режим (PAL60)" msgid "Use Fullscreen" msgstr "Использовать полноэкранный режим" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Использовать HEX" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Показывать panic-уведомления (ошибки)" @@ -5339,11 +5339,11 @@ msgstr "Утилиты" msgid "V-Sync" msgstr "V-Sync" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Ускорение VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Значение" @@ -5351,7 +5351,7 @@ msgstr "Значение" msgid "Value:" msgstr "Значение:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Значение:" @@ -5363,7 +5363,7 @@ msgstr "Глубина анализа" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Видео" @@ -5371,7 +5371,7 @@ msgstr "Видео" msgid "Virtual" msgstr "Виртуальный" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Громкость" @@ -5399,15 +5399,15 @@ msgstr "" msgid "Warning" msgstr "Предупреждение" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Предупреждение: запуск DOL в неправильном режиме!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Предупреждение: запуск ELF в неправильном режиме!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Предупреждение: запуск ISO в неправильном режиме!" @@ -5486,19 +5486,19 @@ msgstr "Форсировать \"Широкоформатный экран\"" msgid "Width" msgstr "Ширина" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND Root:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Файлы сохранений Wii (*.bin)|*.bin" @@ -5511,12 +5511,18 @@ msgstr "WiiWAD: Нельзя прочесть файл" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote подключен" @@ -5548,14 +5554,14 @@ msgstr "Windows Right" msgid "Word Wrap" msgstr "Перенос строк" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Подождите..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Записывать карты памяти (GC)" @@ -5575,21 +5581,36 @@ msgstr "Сохранять в файл" msgid "Write to Window" msgstr "Записать в окно" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice ошибка: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 ошибка инициализации: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 ошибка создания master voice: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice ошибка: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 ошибка инициализации: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 ошибка создания master voice: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF reg" @@ -5615,15 +5636,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Вы не можете закрыть панель, в которой есть страницы." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Выберите игру!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Введите название!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Нужно ввести десятичное или шестнадцатиричное число." @@ -5631,7 +5652,7 @@ msgstr "Нужно ввести десятичное или шестнадцат msgid "You must enter a valid profile name." msgstr "Введите правильное имя профиля." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Необходимо перезапустить Dolphin, чтобы изменения вступили в силу." @@ -5642,7 +5663,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5660,15 +5681,15 @@ msgstr "" "Ваш файл SYSCONF неверного размера (0x%2$04llx), а должен быть 0x%1$04x\n" "Вы хотите создать новый?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "Включить ZTP-хак" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3 code не поддерживается" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero code неизвестен dolphin: %08x" @@ -5710,29 +5731,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "загрузчик (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Чтение кода операции из %x. Пожалуйста сообщите." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute вернул -1 при запуске приложения!" @@ -5747,3 +5763,12 @@ msgstr "zNear Коррекция: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| ИЛИ" + +#~ msgid "Could not create %s" +#~ msgstr "Не удалось создать %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Чтение кода операции из %x. Пожалуйста сообщите." diff --git a/Languages/po/sr.po b/Languages/po/sr.po index 021deff775..dec349f532 100644 --- a/Languages/po/sr.po +++ b/Languages/po/sr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "&" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Igra" @@ -34,7 +34,7 @@ msgstr "Igra" msgid "! NOT" msgstr "! NE" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "" msgid "%1$sCopy%1$s" msgstr "%1$sKopiraj%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -74,26 +74,26 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "%s vec postoji, zameniti?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s ije uspelo da bude scrubbed. Najverovatnije je \"image\" ostecen." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card file size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -105,7 +105,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s nije uspelo da otvori" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -115,7 +115,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s je 0 byte fajl" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s je vec kompresovan! Nemoze se kompresovati vise." @@ -173,11 +173,11 @@ msgstr "&Chit Meneger " msgid "&DSP Settings" msgstr "&DSP Opcije" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Obrisi ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Obrisi oznacene ISO fajlove..." @@ -241,7 +241,7 @@ msgstr "&Pauza" msgid "&Play" msgstr "&Pokreni" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Pribor/Opcije" @@ -285,7 +285,7 @@ msgstr "&Pogledaj" msgid "&Wiimote Settings" msgstr "&Wiimote Opcije" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "" @@ -321,7 +321,7 @@ msgstr "" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -337,7 +337,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -353,7 +353,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -365,7 +365,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -373,7 +373,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -381,13 +381,13 @@ msgstr "" msgid "A" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Netplay prozor je vec otvoren!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Nijedna igra trenutno nije pokrenuta." @@ -406,21 +406,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR Kodovi" @@ -459,66 +460,66 @@ msgid "" "%s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " "(%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " "Fill (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " "Pointer (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" "Master codes are not needed. Do not use master codes." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "" @@ -532,11 +533,11 @@ msgstr "Adapter" msgid "Add" msgstr "Dodaj" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Dodaj ActionReplay kod" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Dodaj Patch " @@ -544,9 +545,9 @@ msgstr "Dodaj Patch " msgid "Add new pane" msgstr "Dodaj nova okna" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Dodaj..." @@ -584,36 +585,36 @@ msgstr "" msgid "Advanced" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "" @@ -633,19 +634,19 @@ msgstr "" msgid "Anti-Aliasing:" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Primeni " @@ -656,7 +657,7 @@ msgid "" "If unsure, select (off)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "" @@ -665,7 +666,7 @@ msgstr "" msgid "Are you sure you want to delete \"%s\"?" msgstr "Jeste li sigurni da zelite da obrisete \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -673,7 +674,7 @@ msgstr "" "Jeste li sigurni da zelite da obrisete ove fajlove?\n" "Nestace zauvek!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "Jesi li siguran da zelis da obrises ovaj fajl? Nestace zauvek!" @@ -681,7 +682,11 @@ msgstr "Jesi li siguran da zelis da obrises ovaj fajl? Nestace zauvek!" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "" @@ -690,12 +695,12 @@ msgstr "" msgid "At least one pane must remain open." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Zvuk" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "" @@ -703,7 +708,7 @@ msgstr "" msgid "AudioCommon: Error opening AO device.\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -739,16 +744,16 @@ msgstr "" msgid "Back" msgstr "Nazad " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "" @@ -766,15 +771,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Baner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Detalji o Baneru" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Baner:" @@ -786,7 +791,7 @@ msgstr "Bar" msgid "Basic" msgstr "Osnovno/ni/ne" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Osnovne opcije" @@ -794,7 +799,7 @@ msgstr "Osnovne opcije" msgid "Bass" msgstr "Bas" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "" @@ -815,7 +820,7 @@ msgid "Blue Right" msgstr "Blue right " #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Donji deo/dno" @@ -824,7 +829,7 @@ msgstr "Donji deo/dno" msgid "Bound Controls: %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Ostecen/a/nje..." @@ -832,7 +837,7 @@ msgstr "Ostecen/a/nje..." msgid "Browse" msgstr "Trazi" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "" @@ -840,11 +845,11 @@ msgstr "" msgid "Browse for an ISO directory..." msgstr "Trazi ISO direktoriju" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "" @@ -854,7 +859,7 @@ msgstr "" msgid "Buttons" msgstr "Tasteri" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -876,7 +881,7 @@ msgstr "C-Stick" msgid "CP reg" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU Emulacije \"Engine\"" @@ -893,17 +898,17 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Odustani" @@ -915,11 +920,11 @@ msgstr "Odustani" msgid "Cannot open %s" msgstr "Nemoze otvoriti %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -927,7 +932,7 @@ msgid "" "is not a valid gamecube memory card file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -937,7 +942,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "" @@ -945,7 +950,7 @@ msgstr "" msgid "Center" msgstr "Centar " -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Promeni" @@ -957,11 +962,11 @@ msgstr "Promeni &Disk..." msgid "Change Disc" msgstr "Promeni Disk" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Promeni Igru" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -977,11 +982,11 @@ msgstr "" msgid "Changes sign to zNear Parameter (after correction)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chat/Caskanje" @@ -989,47 +994,47 @@ msgstr "Chat/Caskanje" msgid "Cheat Code" msgstr "Chit kod" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Trazi Chit" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Chit Meneger" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Kineski (pojednostavljen)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Kineski (tradicionalan)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Biraj fajl da otvoris " @@ -1037,14 +1042,14 @@ msgstr "Biraj fajl da otvoris " msgid "Choose a memory card:" msgstr "Biraj memorisku karticu:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Biraj folder u kome zelis da ekstraktujes " @@ -1063,7 +1068,7 @@ msgstr "Klasik/a" msgid "Clear" msgstr "Ocisti" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1073,7 +1078,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Zatvori" @@ -1082,11 +1087,11 @@ msgstr "Zatvori" msgid "Co&nfigure..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Informacija o kodu " -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Kod:" @@ -1098,20 +1103,20 @@ msgstr "Komanda" msgid "Comment" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Koment:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Kompresuj ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Kompresuj oznaceni ISO fajlovi..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Kompresivanje ISO fajla u toku" @@ -1129,8 +1134,8 @@ msgstr "" msgid "Configure Control" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "" @@ -1138,13 +1143,13 @@ msgstr "" msgid "Configure..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "" @@ -1158,7 +1163,7 @@ msgstr "" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "" @@ -1183,7 +1188,7 @@ msgstr "" msgid "Connect Wiimote 4" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Povezivanje..." @@ -1203,7 +1208,7 @@ msgstr "Kontrola" msgid "Convert to GCI" msgstr "Konvertuj u GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopiranje neuspesno " @@ -1212,16 +1217,11 @@ msgstr "Kopiranje neuspesno " msgid "Copy to Memcard %c" msgstr "Kopiraj na memorisku karticu %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "" @@ -1234,12 +1234,12 @@ msgid "" "most PC DVD drives." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "" @@ -1257,27 +1257,27 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Zemlja:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Kreiraj AR Kod" @@ -1309,12 +1309,12 @@ msgstr "" msgid "Crossfade" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "" @@ -1322,11 +1322,11 @@ msgstr "" msgid "Custom Projection Hack Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "" @@ -1342,20 +1342,20 @@ msgstr "" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "" @@ -1363,11 +1363,11 @@ msgstr "" msgid "DSP settings" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "" @@ -1379,15 +1379,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "" @@ -1416,16 +1416,16 @@ msgstr "" msgid "Decimal" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "" @@ -1437,7 +1437,7 @@ msgstr "" msgid "Default" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "" @@ -1479,8 +1479,8 @@ msgstr "" msgid "Device" msgstr "Uredjaj " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Opcije Uredjaja " @@ -1488,15 +1488,12 @@ msgstr "Opcije Uredjaja " msgid "Dial" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1542,7 +1539,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disk" @@ -1566,19 +1563,19 @@ msgstr "" msgid "Divide" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1609,9 +1606,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1635,12 +1631,12 @@ msgstr "" msgid "Dolphin FIFO" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "" @@ -1652,24 +1648,24 @@ msgstr "" msgid "Dolphin at &Google Code" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1693,11 +1689,11 @@ msgstr "" msgid "Drums" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "" @@ -1734,9 +1730,9 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "" @@ -1757,7 +1753,7 @@ msgid "" "driver." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "" @@ -1773,14 +1769,10 @@ msgstr "" msgid "Edit ActionReplay Code" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "" @@ -1789,8 +1781,8 @@ msgstr "" msgid "Edit current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "" @@ -1802,7 +1794,7 @@ msgstr "" msgid "Embedded Frame Buffer" msgstr "" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "" @@ -1829,7 +1821,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "" @@ -1847,15 +1839,15 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "" @@ -1863,27 +1855,27 @@ msgstr "" msgid "Enable Cache" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "" @@ -1891,7 +1883,7 @@ msgstr "" msgid "Enable Progressive Scan" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "" @@ -1899,7 +1891,7 @@ msgstr "" msgid "Enable Speaker Data" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "" @@ -1916,7 +1908,7 @@ msgid "" "If unsure, select 1x." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -1942,23 +1934,23 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -1971,7 +1963,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -1988,9 +1980,9 @@ msgstr "" msgid "End" msgstr "Kraj" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "" @@ -2013,21 +2005,20 @@ msgstr "" msgid "Entry 1/%d" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Error" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2071,7 +2062,7 @@ msgstr "" msgid "Export Failed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "" @@ -2087,7 +2078,7 @@ msgstr "" msgid "Export Save" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "" @@ -2103,7 +2094,7 @@ msgstr "" msgid "Export save as..." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "" @@ -2119,44 +2110,44 @@ msgstr "" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "" @@ -2168,15 +2159,15 @@ msgstr "" msgid "FIFO Player" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "" @@ -2184,11 +2175,15 @@ msgstr "" msgid "Failed to download codes." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2229,7 +2224,7 @@ msgstr "" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2237,13 +2232,13 @@ msgid "" "FilePosition:%llx" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2259,13 +2254,13 @@ msgstr "" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2275,7 +2270,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2286,7 +2281,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "" @@ -2308,7 +2303,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "" @@ -2320,7 +2315,7 @@ msgstr "Brzo " msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "" @@ -2352,7 +2347,7 @@ msgid "" "or does not have a valid extension" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2363,7 +2358,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "" @@ -2372,11 +2367,11 @@ msgstr "" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "" @@ -2404,7 +2399,7 @@ msgstr "" msgid "Force 4:3" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "" @@ -2428,14 +2423,14 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " "setting when playing Japanese games." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2445,7 +2440,7 @@ msgstr "" msgid "Forward" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2488,7 +2483,7 @@ msgstr "" msgid "Frame S&kipping" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "" @@ -2500,9 +2495,9 @@ msgstr "" msgid "Free Look" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "" @@ -2535,27 +2530,27 @@ msgstr "" msgid "GX_CMD_INVL_VC" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Igra je vec pokrenuta!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Igra nije pokrenuta!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "" @@ -2563,7 +2558,7 @@ msgstr "" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube " @@ -2572,7 +2567,7 @@ msgid "Gamecube &Pad Settings" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "" @@ -2580,12 +2575,12 @@ msgstr "" msgid "Gamecube Pad settings" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2595,7 +2590,7 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "" @@ -2604,13 +2599,13 @@ msgstr "" msgid "General Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Nemacki " -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "" @@ -2623,7 +2618,7 @@ msgstr "Grafike" msgid "Graphics settings" msgstr "Graficke opcije/podesavanja/konfiguracije..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "" @@ -2638,7 +2633,7 @@ msgid "" "If unsure, leave this checked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "" @@ -2662,11 +2657,11 @@ msgstr "Gitara " msgid "Hacks" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "" @@ -2678,7 +2673,7 @@ msgstr "" msgid "Help" msgstr "Pomoc" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2690,7 +2685,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2720,7 +2715,7 @@ msgid "Home" msgstr "" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "" @@ -2729,11 +2724,11 @@ msgid "Hotkey Configuration" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "" @@ -2741,29 +2736,29 @@ msgstr "" msgid "Hybrid Wiimote" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "" @@ -2775,15 +2770,15 @@ msgstr "" msgid "IR Sensitivity:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO Detalji " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "" @@ -2791,7 +2786,7 @@ msgstr "" msgid "Icon" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -2847,7 +2842,7 @@ msgid "" "but does not have a correct header" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "" @@ -2856,7 +2851,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info " @@ -2876,7 +2871,7 @@ msgstr "" msgid "Insert Encrypted or Decrypted code here..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "" @@ -2888,44 +2883,44 @@ msgstr "Ubaci ime ovde..." msgid "Install WAD" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "" @@ -2952,7 +2947,7 @@ msgstr "" msgid "Interpreter (VERY slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Uvod" @@ -2961,7 +2956,7 @@ msgstr "Uvod" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "" @@ -2969,16 +2964,16 @@ msgstr "" msgid "Invalid bat.map or dir entry" msgstr "" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3002,34 +2997,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italianski " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPAN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japanski " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA " @@ -3048,8 +3045,9 @@ msgstr "" msgid "Key" msgstr "Taster " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Korejski " @@ -3067,7 +3065,7 @@ msgstr "" msgid "L-Analog" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "" @@ -3076,7 +3074,7 @@ msgstr "" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "" @@ -3108,11 +3106,11 @@ msgid "" "Middle-click to clear." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "" @@ -3204,11 +3202,11 @@ msgstr "" msgid "Load State..." msgstr "Ucitaj State" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "" @@ -3252,12 +3250,12 @@ msgstr "" msgid "Logger Outputs" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "" @@ -3272,7 +3270,7 @@ msgid "" " %016llx%016llx != %016llx%016llx" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "" @@ -3286,11 +3284,11 @@ msgstr "" msgid "Main Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "" @@ -3321,7 +3319,7 @@ msgid "Memory Byte" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "" @@ -3331,7 +3329,7 @@ msgid "" "could mangle stuff!" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3342,7 +3340,7 @@ msgid "" "Would you like to copy the old file to this new location?\n" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" @@ -3350,7 +3348,7 @@ msgstr "" msgid "Menu" msgstr "Meni" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "" @@ -3363,7 +3361,7 @@ msgstr "" msgid "Misc" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "" @@ -3384,11 +3382,11 @@ msgstr "" msgid "Monospaced font" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "" @@ -3500,15 +3498,15 @@ msgstr "" msgid "NP Up" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "" @@ -3518,7 +3516,7 @@ msgstr "" msgid "Native GCI files(*.gci)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "" @@ -3527,7 +3525,7 @@ msgstr "" msgid "Next Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "" @@ -3535,11 +3533,11 @@ msgstr "" msgid "Nickname :" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "" @@ -3578,24 +3576,25 @@ msgstr "" msgid "No save folder found for title %s" msgstr "" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "" @@ -3604,11 +3603,11 @@ msgstr "" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "" @@ -3629,7 +3628,7 @@ msgstr "" msgid "Num Lock" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "" @@ -3650,7 +3649,7 @@ msgstr "" msgid "Object Range" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Izskljucen/o" @@ -3658,7 +3657,7 @@ msgstr "Izskljucen/o" msgid "Offset:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "" @@ -3676,11 +3675,11 @@ msgstr "" msgid "Open" msgstr "Otvori " -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "" @@ -3710,17 +3709,13 @@ msgstr "" msgid "OpenMP Texture Decoder" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Opcije " @@ -3741,7 +3736,7 @@ msgstr "" msgid "Other" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3755,11 +3750,11 @@ msgstr "" msgid "P&lay Recording..." msgstr "" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "" @@ -3783,26 +3778,26 @@ msgstr "" msgid "Parameters" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pauza " @@ -3815,7 +3810,7 @@ msgstr "" msgid "Per-Pixel Lighting" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfektno " @@ -3826,8 +3821,8 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Pokreni " @@ -3839,7 +3834,7 @@ msgstr "Pokreni snimanje " msgid "Play/Pause" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "" @@ -3847,11 +3842,11 @@ msgstr "" msgid "Playback Options" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "" @@ -3863,36 +3858,36 @@ msgstr "" msgid "Plus-Minus" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polski " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugalski " -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "" @@ -3905,7 +3900,7 @@ msgstr "" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -3927,7 +3922,7 @@ msgstr "" msgid "Previous Page" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "" @@ -3951,8 +3946,8 @@ msgstr "" msgid "Question" msgstr "Pitanje " -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Izadji " @@ -3974,7 +3969,7 @@ msgstr "" msgid "RAM" msgstr "RAM " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "Rusija" @@ -4013,7 +4008,7 @@ msgstr "" msgid "Record" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4060,10 +4055,10 @@ msgstr "" msgid "Refresh game list" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "" @@ -4083,7 +4078,7 @@ msgstr "" msgid "Reset" msgstr "Reset/Restart " -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Rezultati " @@ -4091,7 +4086,7 @@ msgstr "Rezultati " msgid "Return" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4104,17 +4099,17 @@ msgstr "" msgid "Right Stick" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "" @@ -4188,12 +4183,12 @@ msgstr "" msgid "Save State..." msgstr "Snimaj state..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Snimaj kao..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Snimaj kompresovani GCM/ISO" @@ -4201,7 +4196,7 @@ msgstr "Snimaj kompresovani GCM/ISO" msgid "Save current perspective" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "" @@ -4214,16 +4209,16 @@ msgstr "" msgid "Scaled EFB Copy" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Skeniranje za ISO fajlove " -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Skeniranje..." @@ -4239,11 +4234,11 @@ msgstr "" msgid "Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Trazi Filter" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Trazi Subfoldere " @@ -4266,12 +4261,12 @@ msgstr "" msgid "Select" msgstr "Izaberi " -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Izaberi Snimani fajl" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "" @@ -4290,19 +4285,19 @@ msgstr "Izaberi \"Snimani fajl/Save file\" za importovanje " msgid "Select floating windows" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Izaberi fajl za ucitavanje " -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Izaberi \"snimani fajl/the save state\"" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Izaberi state za ucitavanje " -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Izaberi state za snimanje/save" @@ -4317,7 +4312,7 @@ msgid "" "If unsure, select Auto." msgstr "" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "" @@ -4335,27 +4330,28 @@ msgid "" "If still unsure, use the highest resolution which works for you." msgstr "" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Isprati" @@ -4367,16 +4363,16 @@ msgstr "" msgid "Separator" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "" @@ -4385,30 +4381,30 @@ msgstr "" msgid "Set as default Memcard %c" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "" -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "" @@ -4432,7 +4428,7 @@ msgstr "" msgid "Show &Toolbar" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4472,7 +4468,7 @@ msgstr "" msgid "Show Korea" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "" @@ -4512,11 +4508,11 @@ msgstr "" msgid "Show Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4531,7 +4527,7 @@ msgstr "" msgid "Show lag counter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4573,23 +4569,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Velicina" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4613,11 +4610,11 @@ msgstr "" msgid "Slot %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "" @@ -4625,7 +4622,7 @@ msgstr "" msgid "Snapshot" msgstr "" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "" @@ -4637,27 +4634,27 @@ msgid "" "Do you really want to enable software rendering? If unsure, select 'No'." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 #, c-format -msgid "Sound buffer creation failed: %s" +msgid "Sound buffer creation failed: %08x" msgstr "" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "" @@ -4677,7 +4674,7 @@ msgid "" "If unsure, select 640x528." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "" @@ -4685,13 +4682,13 @@ msgstr "" msgid "Square Stick" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Pokreni " @@ -4707,7 +4704,7 @@ msgstr "Pokreni Sni&manje" msgid "Start Recording" msgstr "Pokreni Snimanje" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "" @@ -4715,7 +4712,7 @@ msgstr "" msgid "State Saves" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "" @@ -4759,30 +4756,31 @@ msgstr "" msgid "Successfully imported save files" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "" @@ -4813,7 +4811,7 @@ msgstr "" msgid "Take Screenshot" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "" @@ -4833,11 +4831,11 @@ msgstr "" msgid "Texture Format Overlay" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "" @@ -4845,13 +4843,13 @@ msgstr "" msgid "The checksum was successfully fixed" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -4870,7 +4868,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "" @@ -4899,25 +4897,25 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "" @@ -4926,33 +4924,33 @@ msgstr "" msgid "The specified file \"%s\" does not exist" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "" @@ -4968,7 +4966,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -4976,7 +4974,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -4984,7 +4982,7 @@ msgid "" "cause occasional crashes/glitches." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "" @@ -4993,12 +4991,12 @@ msgstr "" msgid "Threshold" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "" @@ -5033,15 +5031,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "" @@ -5059,7 +5058,7 @@ msgid "" "Wiimote bt ids are not available" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "" @@ -5075,12 +5074,12 @@ msgstr "" msgid "UDP Port:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "" @@ -5089,7 +5088,7 @@ msgstr "" msgid "UNKNOWN_%02X" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "" @@ -5102,7 +5101,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 #, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5124,11 +5123,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Nepoznat/o" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "" @@ -5143,12 +5142,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5158,16 +5157,16 @@ msgstr "" msgid "Up" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Updejt " -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "" @@ -5175,11 +5174,11 @@ msgstr "" msgid "Use Fullscreen" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "" @@ -5225,11 +5224,11 @@ msgstr "" msgid "V-Sync" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "" @@ -5237,7 +5236,7 @@ msgstr "" msgid "Value:" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "" @@ -5249,7 +5248,7 @@ msgstr "" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Video " @@ -5257,7 +5256,7 @@ msgstr "Video " msgid "Virtual" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Jacina zvuka " @@ -5285,15 +5284,15 @@ msgstr "" msgid "Warning" msgstr "Upozorenje " -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Upozorenje - pokrece se DOL u pogresan konzol mod!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Upozorenje - pokrece se ELF u pogresan konzol mod!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Upozorenje - pogretanje ISO fajla u pogresan konzol mod!" @@ -5371,19 +5370,19 @@ msgstr "" msgid "Width" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "" @@ -5396,12 +5395,18 @@ msgstr "" msgid "Wiimote" msgstr "" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "&Wiimote Opcije" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "" @@ -5433,14 +5438,14 @@ msgstr "" msgid "Word Wrap" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Radi..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5460,21 +5465,36 @@ msgstr "" msgid "Write to Window" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "" @@ -5500,15 +5520,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "" @@ -5516,7 +5536,7 @@ msgstr "" msgid "You must enter a valid profile name." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "" @@ -5527,7 +5547,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5541,15 +5561,15 @@ msgid "" "Do you want to generate a new one?" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "" @@ -5591,29 +5611,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "" - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "" @@ -5628,3 +5643,6 @@ msgstr "" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| ILI" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" diff --git a/Languages/po/sv.po b/Languages/po/sv.po index c3edd5e6fc..9809784169 100644 --- a/Languages/po/sv.po +++ b/Languages/po/sv.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-11 20:36+0000\n" "Last-Translator: DolphinPhoenix \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(för många att visa)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Spel: " @@ -34,7 +34,7 @@ msgstr "Spel: " msgid "! NOT" msgstr "! INTE" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sKopiera%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d prov" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d prov (kvalitetsnivå %d)" @@ -74,12 +74,12 @@ msgstr "%d prov (kvalitetsnivå %d)" msgid "%s already exists, overwrite?" msgstr "%s finns redan, vill du skriva över?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s misslyckades att rensas. Förmodligen är bilden korrupt." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -88,7 +88,7 @@ msgstr "" "%s misslyckades att läsas in som ett minneskort \n" " Kortets filstorlek är ogiltig (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -97,7 +97,7 @@ msgstr "" "%s misslyckades att läsas in som ett minneskort \n" " Kortets storlek är ogiltig (0x%x bytes)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -112,7 +112,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s misslyckades att öppnas" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s misslyckades: kr=%x" @@ -122,7 +122,7 @@ msgstr "%s misslyckades: kr=%x" msgid "%s is a 0 byte file" msgstr "%s är en fil på 0 byte" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s är redan komprimerad! Kan inte komprimera den ytterligare." @@ -180,11 +180,11 @@ msgstr "&Fuskhanterare" msgid "&DSP Settings" msgstr "&DSP-inställningar" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "&Radera ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "&Radera valda ISOs..." @@ -248,7 +248,7 @@ msgstr "&Pausa" msgid "&Play" msgstr "&Spela" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "&Egenskaper" @@ -292,7 +292,7 @@ msgstr "&Visa" msgid "&Wiimote Settings" msgstr "Inställningar för &Wiimotes" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -328,7 +328,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x ursprunglig (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bitar" @@ -344,7 +344,7 @@ msgstr "2.5x ursprunglig (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x ursprunglig (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bitar" @@ -360,7 +360,7 @@ msgstr "3x ursprunglig (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x ursprunglig (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bitar" @@ -372,7 +372,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -380,7 +380,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -388,13 +388,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Ett nätspelsfönster är redan öppet!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Ett spel körs inte för tillfället." @@ -407,6 +407,7 @@ msgstr "" "Du måste ansluta dina wiimotes manuellt." #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -415,10 +416,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -437,13 +439,13 @@ msgstr "" "\n" "Värden måste ha angivit TCP-porten som öppen/vidarebefordrad!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-fotlist" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR-koder" @@ -492,7 +494,7 @@ msgstr "" "Brottkod:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" @@ -500,7 +502,7 @@ msgstr "" "Action Replay-fel: Ogiltig storlek (%08x : address = %08x) i 'Lägg till " "kod' (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -509,7 +511,7 @@ msgstr "" "Action Replay-fel: Ogiltig storlek (%08x : adress = %08x) i 'Fill and " "Slide' (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -518,7 +520,7 @@ msgstr "" "Action Replay-fel: Ogiltig storlek (%08x : adress = %08x) i 'Ram Write And " "Fill' (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -527,12 +529,12 @@ msgstr "" "Action Replay-fel: Ogiltig storlek (%08x : adress = %08x) i 'Write To " "Pointer' (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay-fel: Ogiltigt värde (%08x) i minneskopia (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -542,27 +544,27 @@ msgstr "" "(%s)\n" "Masterkoder behövs inte. Använd inte masterkoder." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay-fel: ogiltig AR-kodrad: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Tillståndskod: Ogiltig storlek %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Ogiltig typ av normalkod %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normalkod %i: Ogiltig undertyp %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normalkod 0: Ogiltig undertyp %08x (%s)" @@ -576,11 +578,11 @@ msgstr "Adapter:" msgid "Add" msgstr "Lägg till" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Lägg till ActionReplay-kod" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Lägg till patch" @@ -588,9 +590,9 @@ msgstr "Lägg till patch" msgid "Add new pane" msgstr "Lägg till ny panel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Lägg till..." @@ -642,36 +644,36 @@ msgstr "Justerar analoga kontrolltrycket som krävs för att aktivera knappar." msgid "Advanced" msgstr "Avancerat" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Avancerade inställningar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Alla GC/Wii-filer (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Alla GC/Wii-bilder (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Alla GCM-filer för Gamecube (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Alla snabbsparningar (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Alla ISO-filer för Wii (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Alla komprimerade ISO-filer för GC/Wii (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Alla filer (*.*)|*.*" @@ -691,19 +693,19 @@ msgstr "Anisotropisk filtrering:" msgid "Anti-Aliasing:" msgstr "Kantutjämning:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Apploader är i fel storlek...är det verkligen en apploader?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Det gick inte att läsa in apploader från fil" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Verkställ" @@ -717,7 +719,7 @@ msgstr "" "\n" "Om du är osäker kan du välja (av)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arabiska" @@ -726,7 +728,7 @@ msgstr "Arabiska" msgid "Are you sure you want to delete \"%s\"?" msgstr "Vill du verkligen radera \"%s\"?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -734,7 +736,7 @@ msgstr "" "Vill du verkligen ta bort dessa filer?\n" "De kommer att försvinna för alltid!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Vill du verkligen radera denna fil? Den kommer att försvinna för alltid!" @@ -743,7 +745,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "Arm JIT (experimentell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (experimentell)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "Bildförhållande:" @@ -752,12 +759,12 @@ msgstr "Bildförhållande:" msgid "At least one pane must remain open." msgstr "Åtminstone en panel måste vara öppen." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Ljud" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Ljudbackend:" @@ -765,7 +772,7 @@ msgstr "Ljudbackend:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: Fel uppstod när AO-enhet skulle öppnas.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Auto" @@ -804,16 +811,16 @@ msgstr "BP-register" msgid "Back" msgstr "Backsteg" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Backendinställningar" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Backend:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Bakgrundsindata" @@ -831,15 +838,15 @@ msgid "Balance Board" msgstr "Balansbräda" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Banner" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Bannerdetaljer" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Banner:" @@ -851,7 +858,7 @@ msgstr "Takt" msgid "Basic" msgstr "Grundläggande" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Grundläggande inställningar" @@ -859,7 +866,7 @@ msgstr "Grundläggande inställningar" msgid "Bass" msgstr "Bas" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Kontrollsummering för blockallokeringstabellen misslyckades" @@ -880,7 +887,7 @@ msgid "Blue Right" msgstr "Blå höger" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Under" @@ -889,7 +896,7 @@ msgstr "Under" msgid "Bound Controls: %lu" msgstr "Bundna kontroller: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Trasig" @@ -897,7 +904,7 @@ msgstr "Trasig" msgid "Browse" msgstr "Bläddra" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Bläddra efter en filmapp som ska läggas till" @@ -905,11 +912,11 @@ msgstr "Bläddra efter en filmapp som ska läggas till" msgid "Browse for an ISO directory..." msgstr "Bläddra efter en ISO-sökväg..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Bläddra mapp för utdata" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Buffer:" @@ -919,7 +926,7 @@ msgstr "Buffer:" msgid "Buttons" msgstr "Knappar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -943,7 +950,7 @@ msgstr "C-spak" msgid "CP reg" msgstr "CP-register" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "Processorns emulatormotor" @@ -967,17 +974,17 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Kan inte hitta Wiimote med anslutningshandtaget %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "Kan inte läsa från DVD_Plugin - DVD-gränssnitt: Allvarligt fel" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "Avbryt" @@ -989,11 +996,11 @@ msgstr "Avbryt" msgid "Cannot open %s" msgstr "Kan inte öppna %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Kan inte avregistrera händelser när händelser väntar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -1004,7 +1011,7 @@ msgstr "" "%s\n" "är inte en giltig minneskortsfil för GameCube" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1016,7 +1023,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Katalanska" @@ -1024,7 +1031,7 @@ msgstr "Katalanska" msgid "Center" msgstr "Centrum" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Byt" @@ -1036,11 +1043,11 @@ msgstr "Byt s&kiva" msgid "Change Disc" msgstr "Byt skiva" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Byt spel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1056,11 +1063,11 @@ msgstr "Ändrar tecken till parametern zFar (efter korrektion)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "Ändrar tecken till parametern zNear (efter korrigering)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "Detta kommer inte ha någon effekt om det ändras medan emulatorn körs!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Chatt" @@ -1068,47 +1075,47 @@ msgstr "Chatt" msgid "Cheat Code" msgstr "Fuskkod" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Sök efter fusk" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Fuskhanterare" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Kontrollera partitionintegritet" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Kontrollerar integritet..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Kinesiska (förenklad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Kinesiska (traditionell)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "Välj en DVD-filkatalog:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "Välj en mapp till NAND-rot:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Välj en standard-ISO:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Välj en filkatalog att lägga till" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Välj en fil att öppna" @@ -1116,7 +1123,7 @@ msgstr "Välj en fil att öppna" msgid "Choose a memory card:" msgstr "Välj ett minneskort:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1124,8 +1131,8 @@ msgstr "" "Välj fil som ska användas som apploader: (gäller endast skivor som är " "tillverkade från mappar)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Välj mappen att extrahera till" @@ -1144,7 +1151,7 @@ msgstr "Klassisk" msgid "Clear" msgstr "Rensa" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1154,7 +1161,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Stäng" @@ -1163,11 +1170,11 @@ msgstr "Stäng" msgid "Co&nfigure..." msgstr "Ko&nfigurera..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Kodinfo" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Kod:" @@ -1179,20 +1186,20 @@ msgstr "Kommando" msgid "Comment" msgstr "Kommentar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Kommentar:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Komprimera ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Komprimera valda ISOs..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Komprimerar ISO" @@ -1210,8 +1217,8 @@ msgstr "Konfigurera" msgid "Configure Control" msgstr "Konfigurera kontroll" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Konfigurera styrplattor" @@ -1219,13 +1226,13 @@ msgstr "Konfigurera styrplattor" msgid "Configure..." msgstr "Konfigurera..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Bekräfta överskrivning av fil" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Bekräfta vid stopp" @@ -1239,7 +1246,7 @@ msgstr "Anslut" msgid "Connect Balance Board" msgstr "Anslut balansbräda" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "Anslut USB-tangentbord" @@ -1264,7 +1271,7 @@ msgstr "Anslut Wiimote 3" msgid "Connect Wiimote 4" msgstr "Anslut Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Ansluter..." @@ -1284,7 +1291,7 @@ msgstr "Kontroll" msgid "Convert to GCI" msgstr "Konvertera till GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopiering misslyckades" @@ -1293,16 +1300,11 @@ msgstr "Kopiering misslyckades" msgid "Copy to Memcard %c" msgstr "Kopiera till minneskortet %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Kärna" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "Kunde inte skapa %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Kunde inte initiera backend %s." @@ -1318,12 +1320,12 @@ msgstr "" "ingen GC/Wii-backup. Var god notera att originalskivor för GameCube och Wii " "inte kan läsas av de flesta PC DVD-läsare." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Kunde inte känna igen ISO-fil %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "Kunde inte spara %s" @@ -1349,11 +1351,11 @@ msgstr "" "I så fall kan du behöva ställa in dina minneskortsplatser i inställningarna " "igen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Kunde inte öppna kommandot för tillägget 'ini'!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1361,17 +1363,17 @@ msgstr "" "Kunde inte initiera kärnan.\n" "Kontrollera dina konfigurationer." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Räkna:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Land:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "Skapa AR-kod" @@ -1406,12 +1408,12 @@ msgstr "" msgid "Crossfade" msgstr "Överbländning" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "Den aktuella filmappen ändrades från %s till %s efter wxFileSelector!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Anpassad projektionshackning" @@ -1419,11 +1421,11 @@ msgstr "Anpassad projektionshackning" msgid "Custom Projection Hack Settings" msgstr "Anpassade inställnignar för projektionhackning" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Anpassa några ortografiska projektionsparametrar." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Tjeckiska" @@ -1439,20 +1441,20 @@ msgstr "Styrplatta" msgid "DSP" msgstr "DSP" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP-emulatormotor" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE-emulation (snabb)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE-interpreterare (långsam)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE-omkompilator" @@ -1460,11 +1462,11 @@ msgstr "DSP LLE-omkompilator" msgid "DSP settings" msgstr "DSP-inställningar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "DSPLLE på separat tråd" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD-rotkatalog:" @@ -1477,15 +1479,15 @@ msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" "DVDLowUnencryptedRead - Allvarligt fel: Misslyckades att läsa från volym" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "Dansmatta" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Datastorlek" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Datum:" @@ -1514,16 +1516,16 @@ msgstr "Debuggning" msgid "Decimal" msgstr "Decimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Avkomprimera ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Avkomprimera valda ISOs..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Avkomprimerar ISO" @@ -1535,7 +1537,7 @@ msgstr "Sänk bildrutegräns" msgid "Default" msgstr "Standard" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Standard-ISO:" @@ -1579,8 +1581,8 @@ msgstr "" msgid "Device" msgstr "Enhet" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Enhetsinställningar" @@ -1588,15 +1590,12 @@ msgstr "Enhetsinställningar" msgid "Dial" msgstr "Ring" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1659,7 +1658,7 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Skiva" @@ -1686,20 +1685,20 @@ msgstr "" msgid "Divide" msgstr "Dividera" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Vill du stoppa den aktuella emulationen?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II-dekoder" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1729,9 +1728,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin-teamet\n" @@ -1786,12 +1784,12 @@ msgstr "Dolphin konfiguration för emulerad Wiimote" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GC-kontrollskonfiguration" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS-filmer (*.dtm)" @@ -1803,7 +1801,7 @@ msgstr "Dolphin konfiguration för Wiimote" msgid "Dolphin at &Google Code" msgstr "Dolphin på &Google Code" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1811,7 +1809,7 @@ msgstr "" "Dolphin kunde inte hitta några GC/Wii-ISOs. Dubbelklicka här för att bläddra " "efter filer..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1819,12 +1817,12 @@ msgstr "" "Dolphin är inställd på att gömma alla spel. Dubbelklicka här för att visa " "alla spel..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin kunde inte slutföra den begärda handlingen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1850,11 +1848,11 @@ msgstr "Laddade ned %lu koder. (Lade till %lu)" msgid "Drums" msgstr "Trummor" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Dummy" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Dumpa ljud" @@ -1900,9 +1898,9 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Nederländska" @@ -1927,7 +1925,7 @@ msgstr "" "förmodligen en omstart för tillfället för att få Windows att hitta den nya " "drivrutinen." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPA" @@ -1943,14 +1941,10 @@ msgstr "Redigera" msgid "Edit ActionReplay Code" msgstr "Redigera Action Replay-kod" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Redigera konfig." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "Redigera lokala upphävanden" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Redigera patch" @@ -1959,8 +1953,8 @@ msgstr "Redigera patch" msgid "Edit current perspective" msgstr "Redigera aktuellt perspektiv" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Redigera..." @@ -1972,7 +1966,7 @@ msgstr "Effekt" msgid "Embedded Frame Buffer" msgstr "Inbäddad bildrutebuffer" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Emuleringstråd körs redan" @@ -2010,7 +2004,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Emulerad Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Emulationsnabbsparning:" @@ -2034,15 +2028,15 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "Aktivera AR-loggning" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Aktivera blocksammanfogning" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Aktivera beräkning av Bounding Box" @@ -2050,27 +2044,27 @@ msgstr "Aktivera beräkning av Bounding Box" msgid "Enable Cache" msgstr "Aktivera cache" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Aktivera fusk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Aktivera dubbla kärnor" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Aktivera dubbla kärnor (höjer prestandan)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Aktivera överhoppning av tomgångsloopar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Aktivera överhoppning av tomgångsloopar (höjer prestandan)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "Aktivera MMU" @@ -2078,7 +2072,7 @@ msgstr "Aktivera MMU" msgid "Enable Progressive Scan" msgstr "Aktivera Progressive scan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Aktivera skärmsläckare" @@ -2086,7 +2080,7 @@ msgstr "Aktivera skärmsläckare" msgid "Enable Speaker Data" msgstr "Aktivera högtalardata" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Aktivera bredbild" @@ -2109,7 +2103,7 @@ msgstr "" "\n" "Om du är osäker kan du välja 1x." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2146,7 +2140,7 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2154,11 +2148,11 @@ msgstr "" "Aktivera detta för att snabba upp The Legend of Zelda: Twilight Princess. " "Inaktivera för NÅGOT ANNAT spel." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Aktiverar anpassat projektionshack" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2166,7 +2160,7 @@ msgstr "" "Aktiverar emulation av Dolby Pro Logic II med hjälp av 5.1 surround. Inte " "tillgänglig för OSX." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2185,7 +2179,7 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2207,9 +2201,9 @@ msgstr "" msgid "End" msgstr "End" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "Engelska" @@ -2232,23 +2226,22 @@ msgstr "Ingång %d/%d" msgid "Entry 1/%d" msgstr "Ingång 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Samma" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Fel" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "" "Fel uppstod när valt språk skulle läsas in. Byter tillbaka till " "systemstandard." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2296,7 +2289,7 @@ msgstr "Exportera alla Wii-sparningar" msgid "Export Failed" msgstr "Exportering misslyckades" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Exportera fil" @@ -2312,7 +2305,7 @@ msgstr "Exportera inspelning..." msgid "Export Save" msgstr "Exportera sparning" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Exportera Wii-sparningar (experimentell)" @@ -2328,7 +2321,7 @@ msgstr "Exportering misslyckades" msgid "Export save as..." msgstr "Exportera sparning som..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Tillägg" @@ -2344,44 +2337,44 @@ msgstr "Extra parameter" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "Extra parameter som endast är användbar i ''Metroid: Other M''." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Extraherar alla filer..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Extrahera apploader..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "Extrahera DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Extrahera filkatalog..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Extrahera fil..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Extrahera partition..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "Extraherar %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Extraherar alla filer" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Extraherar filmapp" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Extraherar..." @@ -2393,15 +2386,15 @@ msgstr "FIFO-byte" msgid "FIFO Player" msgstr "FIFO-spelare" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANKRIKE" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST-storlek:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Misslyckades att ansluta!" @@ -2409,11 +2402,15 @@ msgstr "Misslyckades att ansluta!" msgid "Failed to download codes." msgstr "Misslyckades att ladda ned koder." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "Misslyckades att extrahera till %s!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2467,7 +2464,7 @@ msgstr "Misslyckades att läsa banner.bin" msgid "Failed to read bk header" msgstr "Misslyckades att läsa bk-header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2478,7 +2475,7 @@ msgstr "" "Minneskortet kan vara trunkerad\n" "Filposition: %llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2487,7 +2484,7 @@ msgstr "" "korrekt\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2505,7 +2502,7 @@ msgstr "Misslyckades att läsa data från fil %d" msgid "Failed to read data from file: %s" msgstr "Misslyckades att läsa data från fil: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2513,7 +2510,7 @@ msgstr "" "Misslyckades att läsa systemåterställningsmappen korrekt\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2525,7 +2522,7 @@ msgstr "" msgid "Failed to read header" msgstr "Misslyckades att läsa header" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2538,7 +2535,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "Misslyckades att läsa header för filen %d" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Misslyckades att läsa unikt ID från disk-bilden" @@ -2560,7 +2557,7 @@ msgstr "Misslyckades att skriva data till fil: %s" msgid "Failed to write header for %s" msgstr "Misslyckades att skriva header för %s" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Persiska" @@ -2572,7 +2569,7 @@ msgstr "Snabb" msgid "Fast Depth Calculation" msgstr "Snabb kalkylering av djup" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "Snabb version av MMU. Fungerar inte för alla spel." @@ -2608,7 +2605,7 @@ msgstr "" "Filen kunde inte öppnas\n" "eller har inte en giltig filändelse" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2621,7 +2618,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Filen känns inte igen som ett minneskort" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Filen är inte komprimerad" @@ -2630,11 +2627,11 @@ msgstr "Filen är inte komprimerad" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Okänt öppet läge: 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Filsystem" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Filtypen 'ini' är okänd! Kommer inte att öppnas!" @@ -2662,7 +2659,7 @@ msgstr "Tvinga 16:9" msgid "Force 4:3" msgstr "Tvinga 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Tvinga konsol som NTSC-J" @@ -2694,7 +2691,7 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2705,7 +2702,7 @@ msgstr "" "Lämna omarkerat, eftersom Dolphin anger NTSC-U som standardval och aktiverar " "automatiskt denna inställning när japanska spel spelas." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2717,7 +2714,7 @@ msgstr "" msgid "Forward" msgstr "Framåt" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "Framåtport (UPnP)" @@ -2760,7 +2757,7 @@ msgstr "Räckvidd för bildrutor" msgid "Frame S&kipping" msgstr "&Hoppa över bildrutor" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Bildrutegräns:" @@ -2772,9 +2769,9 @@ msgstr "Bildrutor som ska spelas in" msgid "Free Look" msgstr "Fri vy" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Franska" @@ -2807,27 +2804,27 @@ msgstr "GC-kontroll" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "Spelets ID:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Spelet körs redan!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Spelet körs inte!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Spelet hittades inte!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Spelspecifika inställningar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Spelkonfig." @@ -2835,7 +2832,7 @@ msgstr "Spelkonfig." msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube sparningsfiler (*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "GameCube" @@ -2844,7 +2841,7 @@ msgid "Gamecube &Pad Settings" msgstr "Inställningar för &GameCube-kontroller" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "GameCube-minneskort (*.raw,*.gcp)" @@ -2852,12 +2849,12 @@ msgstr "GameCube-minneskort (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Inställningar för GameCube-kontroller" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko-koder" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2871,7 +2868,7 @@ msgstr "" "till mappen \"Sys\" och starta om Dolphin.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Allmänt" @@ -2880,13 +2877,13 @@ msgstr "Allmänt" msgid "General Settings" msgstr "Allmänna inställningar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Tyska" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Index är större än AR-kodlistans storlek %lu" @@ -2899,7 +2896,7 @@ msgstr "Grafik" msgid "Graphics settings" msgstr "Grafikinställningar" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Större än" @@ -2921,7 +2918,7 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta markerat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Grekiska" @@ -2945,11 +2942,11 @@ msgstr "Gitarr" msgid "Hacks" msgstr "Hackningar" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Kontrollsumma för header misslyckades" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebreiska" @@ -2961,7 +2958,7 @@ msgstr "Höjd" msgid "Help" msgstr "Hjälp" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2982,7 +2979,7 @@ msgstr "" "\n" "Adjö!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -3021,7 +3018,7 @@ msgid "Home" msgstr "Hem" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Värd" @@ -3030,11 +3027,11 @@ msgid "Hotkey Configuration" msgstr "Kortkommandoskonfiguration" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Kortkommandon" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Ungerska" @@ -3042,17 +3039,17 @@ msgstr "Ungerska" msgid "Hybrid Wiimote" msgstr "Hybrid-Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "" "IOCTL_ES_GETVIEWS: Försökte att hämta data från en okänd biljett: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3061,15 +3058,15 @@ msgstr "" "Titel-ID %016llx.\n" " Dolphin kommer troligtvis frysa sig nu" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - dålig destination" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL-inställningar" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -3081,15 +3078,15 @@ msgstr "IR-pekare" msgid "IR Sensitivity:" msgstr "IR-känslighet:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO-detaljer" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "ISO-filmapp" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITALIEN" @@ -3097,7 +3094,7 @@ msgstr "ITALIEN" msgid "Icon" msgstr "Ikon" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3170,7 +3167,7 @@ msgstr "" "Den importerade filen har filändelsen sav\n" "men har inte en giltig header" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "I spelet" @@ -3179,7 +3176,7 @@ msgid "Increase Frame limit" msgstr "Höj bildrutegräns" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Info" @@ -3199,7 +3196,7 @@ msgstr "Sätt in" msgid "Insert Encrypted or Decrypted code here..." msgstr "Skriv in krypterad eller dekrypterad kod här..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "Sätt in SD-kort" @@ -3211,34 +3208,34 @@ msgstr "Ange namn här..." msgid "Install WAD" msgstr "Installera WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Installera till Wii-meny" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "InstallExceptionHandler anropade, man denna plattform stödjer inte det ännu." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "Installerar WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Integritetskontrollfel" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Integritetskontroll slutförd" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Integritetskontroll slutförd. Inga fel har hittats." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3247,11 +3244,11 @@ msgstr "" "Integritetskontroll för partition %d misslyckades. Din dumpning är troligvis " "korrupt eller har blivit patchad inkorrekt." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Gränssnitt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Gränssnittsinställningar" @@ -3280,7 +3277,7 @@ msgstr "Intern upplösning:" msgid "Interpreter (VERY slow)" msgstr "Interpreterare (RIKTIG långsam)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "Intro" @@ -3289,7 +3286,7 @@ msgstr "Intro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Ogiltig storlek (%x) eller magiskt ord (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Ogiltigt värde!" @@ -3297,16 +3294,16 @@ msgstr "Ogiltigt värde!" msgid "Invalid bat.map or dir entry" msgstr "Ogiltig bat.map eller mappingång" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Ogiltig händelsetyp %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Ogiltig fil" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3333,34 +3330,36 @@ msgstr "Ogiltig söksträng (kunde inte konvertera till nummer)" msgid "Invalid search string (only even string lengths supported)" msgstr "Ogiltig söksträng (endast jämna stränglängder stöds)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Ogiltig snabbsparning" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italienska" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPAN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT-kompilator (rekommenderas)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "Experimentell JITIL-kompilator" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japanska" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3382,8 +3381,9 @@ msgstr "Låt fönster vara överst" msgid "Key" msgstr "Tangent" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Koreanska" @@ -3401,7 +3401,7 @@ msgstr "L-knapp" msgid "L-Analog" msgstr "L-analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Språk:" @@ -3410,7 +3410,7 @@ msgstr "Språk:" msgid "Last %i" msgstr "Senaste %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Latens:" @@ -3449,11 +3449,11 @@ msgstr "" "Vänster-/högerklicka för kler alternativ.\n" "Mittenklicka för att rensa." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Mindre än" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "Begränsa efter bildrutefrekvens" @@ -3545,11 +3545,11 @@ msgstr "Läs in snabbsparningsspår 9" msgid "Load State..." msgstr "Läs in snabbsparning" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Läs in Wii-systemmeny" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Läs in Wii-systemmeny %d%c" @@ -3600,12 +3600,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Loggningsutgångar" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Loggning" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Förlorade anslutning till server!" @@ -3622,7 +3622,7 @@ msgstr "" "MD5 misspassar\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "Hastighetshack för MMU" @@ -3636,11 +3636,11 @@ msgstr "MadCatz Gameshark-filer (*.gcs)" msgid "Main Stick" msgstr "Huvudspak" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "Skapar-ID:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Skapare:" @@ -3677,7 +3677,7 @@ msgid "Memory Byte" msgstr "Minnesbyte" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Minneskort" @@ -3689,7 +3689,7 @@ msgstr "" "Minneskorthanterare - VARNING: Gör en säkerhetskopiering innan du använder " "detta, bör fungera men kan fördärva saker!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3706,7 +3706,7 @@ msgstr "" "%s\n" "Vill du kopiera den gamla filen till denna nya plats?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "Minneskortets filstorlek stämmer inte överens med headerstorleken" @@ -3714,7 +3714,7 @@ msgstr "Minneskortets filstorlek stämmer inte överens med headerstorleken" msgid "Menu" msgstr "Meny" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mikrofon" @@ -3727,7 +3727,7 @@ msgstr "Min" msgid "Misc" msgstr "Övrigt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Övriga inställningar" @@ -3752,11 +3752,11 @@ msgstr "" msgid "Monospaced font" msgstr "Teckensnitt med fast teckenbredd" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3876,15 +3876,15 @@ msgstr "NP Tabb" msgid "NP Up" msgstr "NP Upp" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "Namn:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "Namn:" @@ -3894,7 +3894,7 @@ msgstr "Namn:" msgid "Native GCI files(*.gci)" msgstr "Ursprungliga GCI-filer (*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Ny sökning" @@ -3903,7 +3903,7 @@ msgstr "Ny sökning" msgid "Next Page" msgstr "Nästa sida" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Nästa sökning" @@ -3911,11 +3911,11 @@ msgstr "Nästa sökning" msgid "Nickname :" msgstr "Smeknamn:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Inget land (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Inga ISOs eller WADS hittades" @@ -3954,24 +3954,25 @@ msgstr "Ingen inspelad fil" msgid "No save folder found for title %s" msgstr "Ingen sparningsmapp hittades för titeln %s" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Ingen" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norsk bokmål" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Inte samma" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Inte angiven" @@ -3980,11 +3981,11 @@ msgstr "Inte angiven" msgid "Not a Wii save or read failure for file header size %x" msgstr "Varken en Wii-sparning eller ett läsningsfel för headerfilstorleken %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Inte ansluten" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Anteckningar" @@ -4005,7 +4006,7 @@ msgstr "Meddelande" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Antal koder:" @@ -4026,7 +4027,7 @@ msgstr "Objekt" msgid "Object Range" msgstr "Räckvidd för objekt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Av" @@ -4034,7 +4035,7 @@ msgstr "Av" msgid "Offset:" msgstr "Offset:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "Visningsmeddelanden på skärmen" @@ -4052,11 +4053,11 @@ msgstr "Endast %d block tillgängliga" msgid "Open" msgstr "Öppna" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Öppna &sökvägsmappen" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Öppnar sparningsmappen för Wii" @@ -4086,7 +4087,7 @@ msgstr "OpenCL-texturdekodare" msgid "OpenMP Texture Decoder" msgstr "OpenMP-texturdekodare" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." @@ -4094,11 +4095,7 @@ msgstr "" "Öppnar standardkonfigurationen (skrivskyddat) för detta spel i en extern " "textredigerare." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "Öppnar användarens specifika upphävanden i en extern textredigerare." - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Inställningar" @@ -4122,7 +4119,7 @@ msgstr "" msgid "Other" msgstr "Övrigt" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4138,11 +4135,11 @@ msgstr "Utdata" msgid "P&lay Recording..." msgstr "Spe&la upp inspelning..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Kontroll" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Kontroll" @@ -4166,26 +4163,26 @@ msgstr "Paragraf" msgid "Parameters" msgstr "Parametrar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Partition %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "Partition finns inte: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Patcher" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Sökvägar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Pausa" @@ -4198,7 +4195,7 @@ msgstr "Pausa vid slutet av film" msgid "Per-Pixel Lighting" msgstr "Ljus per bildpunkt" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Perfekt" @@ -4209,8 +4206,8 @@ msgstr "Perspektiv %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Spela" @@ -4222,7 +4219,7 @@ msgstr "Spela upp inspelning" msgid "Play/Pause" msgstr "Spela/Pausa" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Spelbar" @@ -4230,11 +4227,11 @@ msgstr "Spelbar" msgid "Playback Options" msgstr "Uppspelningsalternativ" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Spelare" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Var god bekräfta..." @@ -4246,36 +4243,36 @@ msgstr "Var god skapa ett perspektiv innan du sparar" msgid "Plus-Minus" msgstr "Plus-minus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polska" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Port 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Port 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Port 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Port 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Port:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portugisiska" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portugisiska (brasiliansk)" @@ -4288,7 +4285,7 @@ msgstr "Efterprocesseringseffekt:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "För tidigt filmslut i PlayController. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "För tidigt filmslut i PlayWiimote. %u + %d > %u" @@ -4310,7 +4307,7 @@ msgstr "Föreg. sida" msgid "Previous Page" msgstr "Föregående sida" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Föregående värde" @@ -4334,8 +4331,8 @@ msgstr "Töm cache" msgid "Question" msgstr "Fråga" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Avsluta" @@ -4357,7 +4354,7 @@ msgstr "R-analog" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RYSSLAND" @@ -4396,7 +4393,7 @@ msgstr "Verkliga Wiimotes" msgid "Record" msgstr "Spela in" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Inspelningsinmatning" @@ -4448,10 +4445,10 @@ msgstr "Uppdatera lista" msgid "Refresh game list" msgstr "Uppdatera spellista" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Ta bort" @@ -4474,7 +4471,7 @@ msgstr "Rendera till huvudfönstret" msgid "Reset" msgstr "Återställ" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Resultat" @@ -4482,7 +4479,7 @@ msgstr "Resultat" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "Revision:" @@ -4495,18 +4492,18 @@ msgstr "Höger" msgid "Right Stick" msgstr "Höger spak" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Vibration" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" "Kör DSP LLE på en tillägnad tråd (rekommenderas inte; kan orsaka frysningar)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Ryska" @@ -4580,12 +4577,12 @@ msgstr "Spara snabbsparningsspår 9" msgid "Save State..." msgstr "Spara snabbsparning..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Spara som..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Spara komprimerad GCM/ISO" @@ -4593,7 +4590,7 @@ msgstr "Spara komprimerad GCM/ISO" msgid "Save current perspective" msgstr "Spara aktuellt perspektiv" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Spara avkomprimerad GCM/ISO" @@ -4606,16 +4603,16 @@ msgstr "Snabbsparningens film %s är korrupt. Filminspelningen stoppas..." msgid "Scaled EFB Copy" msgstr "Skalad EFB-kopia" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Skannar %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Skannar efter ISOs" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Skannar..." @@ -4631,11 +4628,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "Sök" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Sökfilter" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Sök undermappar" @@ -4658,12 +4655,12 @@ msgstr "Sektion %s hittades inte i SYSCONF" msgid "Select" msgstr "Välj" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Spara inspelningsfilen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Välj en Wii WAD-fil som ska installeras" @@ -4685,19 +4682,19 @@ msgstr "Välj en sparningsfil att importera" msgid "Select floating windows" msgstr "Välj flytande fönster" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Öppna fil" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Välj sparningsfilen" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Välj snabbsparning att läsa in" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Välj snabbsparning att spara" @@ -4719,7 +4716,7 @@ msgstr "" "\n" "Om du är osäker kan du välja Auto." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Den valda kontrollprofilen finns inte" @@ -4744,39 +4741,28 @@ msgstr "" "Om du fortfarande är osäker kan du använda den högsta upplösningen som " "fungerar för dig." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Väljer vilket grafik-API som ska användas internt.\n" -"Direct3D 9 är vanligtvis den snabbaste. OpenGL är mer noggrann. Direct3D 11 " -"ligger någonstans mellan de båda.\n" -"Observera att Direct3D-backend finns bara tillgängligt på Windows.\n" -"\n" -"Om du är osäker kan du använda Direct3D 11." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Väljer vilket grafik-API som ska användas internt.\n" -"Direct3D 9 är vanligtvis det snabbaste. OpenGL är dock mer noggrann. " -"Direct3D 11 är någonstans mellan de båda.\n" -"Notera att Direct3D-backends är endast tillgängliga för Windows.\n" -"\n" -"Om du är osäker kan du använda OpenGL." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Skicka" @@ -4788,16 +4774,16 @@ msgstr "Position för Sensor Bar:" msgid "Separator" msgstr "Avskiljare" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbiska" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "Serieport 1 - Detta är porten som enheter, t.ex. nätadaptern, använder" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Ange som &standard-ISO" @@ -4806,14 +4792,14 @@ msgstr "Ange som &standard-ISO" msgid "Set as default Memcard %c" msgstr "Ange som standardminneskort %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "" "SetARCode_IsActive: Indexet är större än storleken på listan över AR-koder " "%lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4821,19 +4807,19 @@ msgstr "" "Anger latensen (i millisekunder). Högre värden kan reducera ljudknaster. " "Endast för OpenAL-backend." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Inställningar..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "SetupWiiMem: Kan inte skapa inställningsfil" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Skakning" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Kort namn:" @@ -4857,7 +4843,7 @@ msgstr "Visa &statusfält" msgid "Show &Toolbar" msgstr "Visa &verktygsfält" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Visa standardvärden" @@ -4897,7 +4883,7 @@ msgstr "Visa JAP" msgid "Show Korea" msgstr "Visa Korea" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Visa språk:" @@ -4937,11 +4923,11 @@ msgstr "Visa WAD" msgid "Show Wii" msgstr "Visa Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Visa en bekräftelsedialog innan ett spel stoppas." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4960,7 +4946,7 @@ msgstr "Visa första blocket" msgid "Show lag counter" msgstr "Visa laggräknare" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -5012,23 +4998,24 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Vertikal Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Förenklad kinesiska" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Storlek" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "Hoppa över BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "Hoppa över rensning av DCBZ " @@ -5059,11 +5046,11 @@ msgstr "" msgid "Slot %i" msgstr "Spår %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Spår A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Spår B" @@ -5071,7 +5058,7 @@ msgstr "Spår B" msgid "Snapshot" msgstr "Ögonblicksbild" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Programrenderare" @@ -5088,27 +5075,27 @@ msgstr "" "Vill du verkligen aktivera programvarurendering? Om du är osäker kan du " "välja 'Nej'." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Ljudinställningar" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Ljudbackend %s är inte giltig." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Skapandet av ljudbuffer misslyckades: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Mellanrum" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spanska" @@ -5136,7 +5123,7 @@ msgstr "" "\n" "Om du är osäker kan du välja 640x528." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Snabba upp disköverförningshastigheten" @@ -5144,13 +5131,13 @@ msgstr "Snabba upp disköverförningshastigheten" msgid "Square Stick" msgstr "Fyrkantsspak" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Standardkontroll" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -5166,7 +5153,7 @@ msgstr "Starta &inspelning" msgid "Start Recording" msgstr "Starta inspelning" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Snabbsparning" @@ -5174,7 +5161,7 @@ msgstr "Snabbsparning" msgid "State Saves" msgstr "Snabbsparningar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Ratt" @@ -5223,19 +5210,19 @@ msgstr "Lyckades exportera fil till %s" msgid "Successfully imported save files" msgstr "Lyckades importera sparningsfiler" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "Svenska" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Svängning " -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "Synkronisera grafikprocessortråd" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" @@ -5244,12 +5231,13 @@ msgstr "" "slumpartade frysningar när läget \"Dubbla kärnor\" används. (PÅ = " "kompatibel, AV = snabb)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Systemspråk:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -5280,7 +5268,7 @@ msgstr "Tabell höger" msgid "Take Screenshot" msgstr "Ta en skärmdump" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5300,11 +5288,11 @@ msgstr "Texturcache" msgid "Texture Format Overlay" msgstr "Överlägg för texturformat" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD har installerats utan problem." -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Adressen är ogiltig" @@ -5312,13 +5300,13 @@ msgstr "Adressen är ogiltig" msgid "The checksum was successfully fixed" msgstr "Kontrollsumman fixades utan problem" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Valda filkatalogen finns redan i listan" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5341,7 +5329,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Filen %s var redan öppen, headerfilen kommer inte att skrivas." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Filen du valde (%s) finns inte" @@ -5374,7 +5362,7 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "Sparningen du försöker kopiera har en ogiltig filstorlek" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5382,19 +5370,19 @@ msgstr "" "Det valda språket stöds inte av ditt system. Ändrar tillbaka till " "systemstandard." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Serverns och klientens nätspelsversioner är inkompatibla!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Servern är full" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Servern svarade: Spelet körs för tillfället!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Servern skickade ett okänt felmeddelande!" @@ -5403,15 +5391,15 @@ msgstr "Servern skickade ett okänt felmeddelande!" msgid "The specified file \"%s\" does not exist" msgstr "Den valda filen \"%s\" finns inte" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Värdet är ogiltigt" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5419,7 +5407,7 @@ msgstr "" "Det måste finnas en biljett för 00000001/00000002. Din nanddump är " "förmodlingen ofullständig." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5427,7 +5415,7 @@ msgstr "" "Dessa inställningar upphäver Dolphins kärninställningar.\n" "'Undetermined' betyder att spelet använder Dolphins inställningar." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." @@ -5435,7 +5423,7 @@ msgstr "" "Denna Action Replay-simulator stödjer inte koder som ändrar Action Replay " "själv." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Detta kan orsaka fartminskningar i Wii-menyn och vissa spel." @@ -5459,7 +5447,7 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5471,7 +5459,7 @@ msgstr "" "Ljud för att strypa användningen av DSP (kan fixa ljudklickningar men kan " "även orsaka konstant brus beroende på spelet)." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5483,7 +5471,7 @@ msgstr "" "Detta orsakar stora förbättringar på datorer med mer än en kärna, men kan " "även orsaka en del kraschar/buggar." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "Detta låter redigera INI-kofigueringsfilen manuellt" @@ -5492,12 +5480,12 @@ msgstr "Detta låter redigera INI-kofigueringsfilen manuellt" msgid "Threshold" msgstr "Tröskel" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Lutning" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Titel" @@ -5532,15 +5520,16 @@ msgid "Toggle IR" msgstr "Slå på/av IR" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Ovan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Traditionell kinesiska" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Försökte installera en okänd filtyp." @@ -5560,7 +5549,7 @@ msgstr "" "Försöker att läsa från ogiltig SYSCONF\n" "Wiimote bt ids är inte tillgänglig" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turkiska" @@ -5576,12 +5565,12 @@ msgstr "Typ" msgid "UDP Port:" msgstr "UDP-port:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "OKÄND" @@ -5590,7 +5579,7 @@ msgstr "OKÄND" msgid "UNKNOWN_%02X" msgstr "OKÄND_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5603,9 +5592,9 @@ msgstr "" "Ingången ändrades inte." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5630,11 +5619,11 @@ msgstr "Ångra snabbsparning" msgid "Unexpected 0x80 call? Aborting..." msgstr "Oväntat 0x80-anrop? Avbryter..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Okänd" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Okänt DVD-kommando %08x - katastrofalt fel" @@ -5649,12 +5638,12 @@ msgstr "Okänd kommando 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "Okänd tillträdestyp %i i SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Tog emot ett okänt meddelande med id: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "" @@ -5665,16 +5654,16 @@ msgstr "" msgid "Up" msgstr "Upp" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Uppdatera" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Upprätt Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "Använd EuRGB60-läge (PAL60)" @@ -5682,11 +5671,11 @@ msgstr "Använd EuRGB60-läge (PAL60)" msgid "Use Fullscreen" msgstr "Använd helskärm" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "Använd hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Använd panikhanterare" @@ -5749,11 +5738,11 @@ msgstr "Hjälpprogram" msgid "V-Sync" msgstr "V-synk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "Hastighetshack för VBeam" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Värde" @@ -5761,7 +5750,7 @@ msgstr "Värde" msgid "Value:" msgstr "Värde:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Värde: " @@ -5773,7 +5762,7 @@ msgstr "Avlusningsnivå" msgid "Vertex Streaming Hack" msgstr "Hörnströmningshack" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Video" @@ -5781,7 +5770,7 @@ msgstr "Video" msgid "Virtual" msgstr "Virtuell" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Volym" @@ -5814,15 +5803,15 @@ msgstr "" msgid "Warning" msgstr "Varning" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Varning - startar DOL i fel konsolläge!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Varning - startar ELF i fel konsolläge!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Varning - startar ISO i fel konsolläge!" @@ -5926,19 +5915,19 @@ msgstr "Bredbildshack" msgid "Width" msgstr "Bredd" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii-konsol" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii nandrot:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii-sparningsfiler (*.bin)|*.bin" @@ -5951,12 +5940,18 @@ msgstr "WiiWAD: Kunde inte läsa från fil" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote ansluten" @@ -5988,14 +5983,14 @@ msgstr "Fönster höger" msgid "Word Wrap" msgstr "Radbytning" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Arbetar..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "Skriv minneskort (GC)" @@ -6015,21 +6010,36 @@ msgstr "Skriv till fil" msgid "Write to Window" msgstr "Skriv till fönster" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice misslyckades: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "Initiering av XAudio2 misslyckades: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "Misslyckades att skapa mästarröst för XAudio2: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice misslyckades: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "Initiering av XAudio2 misslyckades: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "Misslyckades att skapa mästarröst för XAudio2: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF-register" @@ -6060,15 +6070,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Du kan inte stänga paneler som har sidor inuti sig." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Du måste välja ett spel!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Du måste ange ett namn!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Du måste ange en giltig decimal, hexadecimal eller oktalt värde." @@ -6076,7 +6086,7 @@ msgstr "Du måste ange en giltig decimal, hexadecimal eller oktalt värde." msgid "You must enter a valid profile name." msgstr "Du måste ange ett giltigt profilnamn." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Du måste starta om Dolphin för att ändringarna ska träda i kraft." @@ -6090,7 +6100,7 @@ msgstr "" "Vill du stoppa nu för att fixa problemet?\n" "Om du väljer \"nej\" kan ljudet bli förvrängt." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6109,15 +6119,15 @@ msgstr "" "Den borde vara 0x%04x (but is 0x%04llx)\n" "Vill du generera en ny?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP-hack" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3-kod stöds inte" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero-kod okänd för Dolphin: %08x" @@ -6176,29 +6186,24 @@ msgstr "" "\n" "Om du är osäker kan du lämna detta omarkerat." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Läser opkod från %x. Var god rapportera detta." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "okänd funktion %d (förväntade %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "fick ett okänt meddelande" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute returnerade -1 i applikationkörningen!" @@ -6213,3 +6218,49 @@ msgstr "zNear-korrektion: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| ELLER" + +#~ msgid "Could not create %s" +#~ msgstr "Kunde inte skapa %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "Redigera lokala upphävanden" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "" +#~ "Öppnar användarens specifika upphävanden i en extern textredigerare." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Väljer vilket grafik-API som ska användas internt.\n" +#~ "Direct3D 9 är vanligtvis den snabbaste. OpenGL är mer noggrann. Direct3D " +#~ "11 ligger någonstans mellan de båda.\n" +#~ "Observera att Direct3D-backend finns bara tillgängligt på Windows.\n" +#~ "\n" +#~ "Om du är osäker kan du använda Direct3D 11." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Väljer vilket grafik-API som ska användas internt.\n" +#~ "Direct3D 9 är vanligtvis det snabbaste. OpenGL är dock mer noggrann. " +#~ "Direct3D 11 är någonstans mellan de båda.\n" +#~ "Notera att Direct3D-backends är endast tillgängliga för Windows.\n" +#~ "\n" +#~ "Om du är osäker kan du använda OpenGL." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Läser opkod från %x. Var god rapportera detta." diff --git a/Languages/po/tr.po b/Languages/po/tr.po index 3fd31ca59c..21692fc0d6 100644 --- a/Languages/po/tr.po +++ b/Languages/po/tr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-12 05:20+0000\n" "Last-Translator: mustafacan \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/dolphin-emu/" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr "(Göstermek için çok fazla)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr "Oyun :" @@ -34,7 +34,7 @@ msgstr "Oyun :" msgid "! NOT" msgstr "! YOK" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -60,12 +60,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$sKopyala%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -76,12 +76,12 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "%s zaten var, üzerine yazılsın mı?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "%s küçültülemedi. Kalıp dosyası bozuk olabilir." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -90,7 +90,7 @@ msgstr "" "%s hafıza kart dosyası olarak yüklenemedi \n" "Kart dosyası boyutu hatalı (0x%x bayt)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -99,7 +99,7 @@ msgstr "" "%s hafıza kartı olarak yüklenemedi \n" "Kart boyutu hatalı (0x%x bayt)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -113,7 +113,7 @@ msgstr "" msgid "%s failed to open" msgstr "%s açılamadı" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s başarısız: kr=%x" @@ -123,7 +123,7 @@ msgstr "%s başarısız: kr=%x" msgid "%s is a 0 byte file" msgstr "%s dosyasının boyutu 0 bayt'tır." -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s zaten sıkıştırılmış! Tekrar sıkıştırmayı denemeyin!" @@ -181,11 +181,11 @@ msgstr "Hile Yöneti&cisi" msgid "&DSP Settings" msgstr "Ses Ayarları (&D)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "Kalıbı Sil... (&D)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "Seçilen Kalıpları Sil... (&D)" @@ -249,7 +249,7 @@ msgstr "Duraklat (&P)" msgid "&Play" msgstr "Oynat (&P)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "Özellikler (&P)" @@ -293,7 +293,7 @@ msgstr "Görünüm (&V)" msgid "&Wiimote Settings" msgstr "&Wiimote Ayarları" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -329,7 +329,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "Orjinalin 1.5 katı (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 bit" @@ -345,7 +345,7 @@ msgstr "Orjinalin 2.5 katı (1600x1320)" msgid "2x Native (1280x1056)" msgstr "Orjinalin 2 katı (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 bit" @@ -361,7 +361,7 @@ msgstr "Orjinalin 3 katı (1920x1584)" msgid "4x Native (2560x2112)" msgstr "Orjinalin 4 katı (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 bit" @@ -373,7 +373,7 @@ msgstr "" msgid "" msgstr "<Çözünürlük bulunamadı>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "" @@ -381,7 +381,7 @@ msgstr "" msgid "" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "" @@ -389,13 +389,13 @@ msgstr "" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "Bir NetPlay penceresi zaten açık!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "Bir oyun şu anda düzgün çalışmıyor." @@ -414,21 +414,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR Kodları" @@ -476,14 +477,14 @@ msgstr "" "Suçlu Kod:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "" "Action Replay Hatası: Kod eklemede (%08x : adres = %08x) hatalı boyut (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " @@ -492,7 +493,7 @@ msgstr "" "Action Replay Hatası: Doldurma ve kaydırmada (%08x : adres = %08x) hatalı " "boyut (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -501,7 +502,7 @@ msgstr "" "Action Replay Hatası: Anabellek yazma ve doldurmasında (%08x : adres = %08x) " "hatalı boyut (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -510,12 +511,12 @@ msgstr "" "Action Replay Hatası: İşaretleyiciye yazarken (%08x : address = %08x) hatalı " "boyut (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay Hatası: Hafıza kopyalamada (%08x) hatalı değer (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -524,27 +525,27 @@ msgstr "" "Action Replay Hatası: Ana Kod ve CCXXXXXX kodu uygulanamadı (%s)\n" "Ana kodlar gerekli değil. Ana kodları kullanmayın." -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay Hatası: Hatalı AR kod satırı: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: Şartlı Kod: Hatalı Boyut %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: Hatalı Normal Kod Türü %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: Normal Kod %i: Hatalı alt tür %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: Normal Kod 0: Hatalı alt tür %08x (%s)" @@ -558,11 +559,11 @@ msgstr "Dönüştürücü:" msgid "Add" msgstr "Ekle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "Action Replay Kodu Ekle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "Yama Ekle" @@ -570,9 +571,9 @@ msgstr "Yama Ekle" msgid "Add new pane" msgstr "Bölme ekle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "Ekle..." @@ -626,36 +627,36 @@ msgstr "" msgid "Advanced" msgstr "Gelişmiş" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "Gelişmiş Ayarlar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "Tüm GC/Wii dosyaları (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "Tüm GC/Wii kalıpları (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "Tüm GameCube GCM Dosyaları (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "Tüm Kayıtlı Oyunlar (sav,s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "Tüm Wii kalıpları (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "Tüm sıkıştırılan GC/Wii kalıpları (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "Tüm dosyalar (*.*)|*.*" @@ -675,19 +676,19 @@ msgstr "Filtreleme:" msgid "Anti-Aliasing:" msgstr "Keskinleştirme:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "Apploader boyutu yanlış. Bu gerçekten bir apploader mı?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "Apploader dosyadan yüklenemiyor." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "Apploader:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "Uygula" @@ -701,7 +702,7 @@ msgstr "" "\n" "Emin değilseniz, kapalı seçin." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "Arapça" @@ -710,7 +711,7 @@ msgstr "Arapça" msgid "Are you sure you want to delete \"%s\"?" msgstr "\"%s\" dosyasını silmek istiyor musunuz?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -718,7 +719,7 @@ msgstr "" "Bu dosyaları gerçekten silmek istiyor musunuz?\n" "Silindikten sonra bu dosyaları geri döndüremezsiniz!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "" "Bu dosyayı gerçekten silmek istiyor musunuz? Silindikten sonra bu dosyaları " @@ -728,7 +729,12 @@ msgstr "" msgid "Arm JIT (experimental)" msgstr "Arm JIT (deneysel)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (deneysel)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "En-boy Oranı:" @@ -737,12 +743,12 @@ msgstr "En-boy Oranı:" msgid "At least one pane must remain open." msgstr "En az bir bölme açık kalmalıdır." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "Ses" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "Ses Çözücüsü:" @@ -750,7 +756,7 @@ msgstr "Ses Çözücüsü:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: AO sürücüyü açarken hata.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "Otomatik" @@ -789,16 +795,16 @@ msgstr "BP kaydı" msgid "Back" msgstr "Geri" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "Çözücü Ayarları" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "Çözücü:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "Arkaplanda Giriş" @@ -816,15 +822,15 @@ msgid "Balance Board" msgstr "Balance Board" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "Afiş" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "Afiş Ayrıntıları" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "Afiş:" @@ -836,7 +842,7 @@ msgstr "Çubuk" msgid "Basic" msgstr "Temel" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "Temel Ayarlar" @@ -844,7 +850,7 @@ msgstr "Temel Ayarlar" msgid "Bass" msgstr "Bass" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "Blok Ayırma Tablosu sağlaması başarısız." @@ -865,7 +871,7 @@ msgid "Blue Right" msgstr "Mavi Sağ" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "Alt" @@ -874,7 +880,7 @@ msgstr "Alt" msgid "Bound Controls: %lu" msgstr "Bağlı Denetimler: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "Bozuk" @@ -882,7 +888,7 @@ msgstr "Bozuk" msgid "Browse" msgstr "Gözat..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "Eklemek için bir klasöre gözat" @@ -890,11 +896,11 @@ msgstr "Eklemek için bir klasöre gözat" msgid "Browse for an ISO directory..." msgstr "Bir kalıp konumu için gözat..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "Çıkış klasörü için gözat" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "Tampon:" @@ -904,7 +910,7 @@ msgstr "Tampon:" msgid "Buttons" msgstr "Düğmeler" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -926,7 +932,7 @@ msgstr "C Çubuğu" msgid "CP reg" msgstr "CP kaydı" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU Emülatör Motoru" @@ -949,17 +955,17 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "Sap bağlantısı ile Wiimote bulunamadı: %02x" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "DVD Eklentisinden okunamıyor - DVD-Arabirimi : Önemli Hata" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "İptal" @@ -971,11 +977,11 @@ msgstr "İptal" msgid "Cannot open %s" msgstr "%s açılamadı." -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "Bekleyen olaylardan dolayı olaylar kayıttan kaldırılamıyor." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -986,7 +992,7 @@ msgstr "" "%s\n" "Geçerli bir Gamecube hafıza kartı dosyası değil." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -998,7 +1004,7 @@ msgstr "" msgid "Caps Lock" msgstr "Büyük Harf Kilidi" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "Katalanca" @@ -1006,7 +1012,7 @@ msgstr "Katalanca" msgid "Center" msgstr "Merkez" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "Değiştir" @@ -1018,11 +1024,11 @@ msgstr "&Diski Değiştir" msgid "Change Disc" msgstr "Diski Değiştir" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "Oyunu Değiştir" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1038,12 +1044,12 @@ msgstr "zFar Parametresinin işaretini değiştirir (düzeltme sonrası)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "zNear Parametresinin işaretini değiştirir (düzeltme sonrası)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "" "Emülatör çalışırken değiştirirseniz herhangi bir etkisini göremezsiniz!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "Sohbet" @@ -1051,47 +1057,47 @@ msgstr "Sohbet" msgid "Cheat Code" msgstr "Hile Kodu" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "Hile Arama" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "Hile Yöneticisi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "Bölüm Düzgünlüğünü Denetle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "Düzgünlük denetleniyor..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Çince (Basit)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "DVD kök dizinini seçin:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "NAND kök dizinini seçin:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "Varsayılan kalıbı seçin:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "Eklemek için bir konum seçin" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "Açmak için bir dosya seçin" @@ -1099,7 +1105,7 @@ msgstr "Açmak için bir dosya seçin" msgid "Choose a memory card:" msgstr "Bir hafıza kartı seçin:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" @@ -1107,8 +1113,8 @@ msgstr "" "Apploader olarak bir dosya seçin: (Sadece konumlardan yapılan disklere " "uygulanır)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "Genişletmek için bir klasör seçin" @@ -1127,7 +1133,7 @@ msgstr "Klasik" msgid "Clear" msgstr "Temizle" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1137,7 +1143,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "Kapat" @@ -1146,11 +1152,11 @@ msgstr "Kapat" msgid "Co&nfigure..." msgstr "Yapıla&ndır" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "Kod Bilgisi" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "Kod:" @@ -1162,20 +1168,20 @@ msgstr "Komut" msgid "Comment" msgstr "Yorum" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "Yorum:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "Kalıbı sıkıştır..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "Seçili kalıpları sıkıştır..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "Kalıp sıkıştırılıyor..." @@ -1193,8 +1199,8 @@ msgstr "Yapılandır" msgid "Configure Control" msgstr "Denetimleri Yapılandır" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "Kolları Yapılandır" @@ -1202,13 +1208,13 @@ msgstr "Kolları Yapılandır" msgid "Configure..." msgstr "Yapılandır..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "Dosyanın Üzerine Yazmaya İzin Ver" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "Durdurma Onayı İste" @@ -1222,7 +1228,7 @@ msgstr "Bağlan" msgid "Connect Balance Board" msgstr "Balance Board Bağla" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "USB Klavye Bağla" @@ -1247,7 +1253,7 @@ msgstr "Wiimote 3'ü Bağla" msgid "Connect Wiimote 4" msgstr "Wiimote 4'ü Bağla" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "Bağlanıyor..." @@ -1267,7 +1273,7 @@ msgstr "Denetim" msgid "Convert to GCI" msgstr "GCI'ya dönüştür" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "Kopyalama başarısız." @@ -1276,16 +1282,11 @@ msgstr "Kopyalama başarısız." msgid "Copy to Memcard %c" msgstr "Hafıza kartı %c 'ye kopyala" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "Çekirdek" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "%s oluşturulamadı." - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "Çözücü %s başlatılamadı." @@ -1301,12 +1302,12 @@ msgstr "" "Lütfen bilgisayarların çoğunun gerçek GameCube veya Wii disklerini " "okuyamadıklarını unutmayın." -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "Kalıp dosyası %s tanınamadı." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "%s kaydedilemedi." @@ -1331,11 +1332,11 @@ msgstr "" "Bunu emulatör klasörünü taşıdıktan sonra mı görüyorsunuz?\n" "Eğer öyleyse, ayarlardan memory card konumlarını düzeltin." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "Uzantı 'ini' için açma komutu bulunamadı." -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1343,17 +1344,17 @@ msgstr "" "Çekirdek başlatılamadı. \n" "Yapılandırmanızı denetleyin." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "Sayı:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "Ülke:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "AR Kodu Oluştur" @@ -1388,13 +1389,13 @@ msgstr "" msgid "Crossfade" msgstr "Geçişli" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" "wx Dosya Seçiciden sonra şu anki konum %s 'den %s 'ye değiştirilmiştir." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "Özel Görüntüleme Hilesi" @@ -1402,11 +1403,11 @@ msgstr "Özel Görüntüleme Hilesi" msgid "Custom Projection Hack Settings" msgstr "Özel Görüntüleme Hilesi Ayarları" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "Bazı ortografik projeksiyon parametrelerini özelleştir." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Çekçe" @@ -1422,20 +1423,20 @@ msgstr "Yön Tuşları" msgid "DSP" msgstr "Ses" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "Ses Emülatörü Motoru" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE Emülasyonu (Hızlı)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE Yorumlayıcı (Çok Yavaş)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE Yeniden Derleyici" @@ -1443,11 +1444,11 @@ msgstr "DSP LLE Yeniden Derleyici" msgid "DSP settings" msgstr "Ses ayarları" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "Ayrı İşlem Birimi Üzerinde DSP LLE" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD Kök Dizini:" @@ -1459,15 +1460,15 @@ msgstr "DVDLowRead - Kritik Hata: Birimden okuma başarısız." msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - Kritik Hata: Birimden okuma başarısız." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "Veri Boyutu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "Tarih:" @@ -1496,16 +1497,16 @@ msgstr "Hata ayıklama" msgid "Decimal" msgstr "Onluk taban" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "Kalıbı genişlet..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "Seçili kalıpları genişlet..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "Kalıp genişletiliyor..." @@ -1517,7 +1518,7 @@ msgstr "" msgid "Default" msgstr "Varsayılan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "Varsayılan kalıp:" @@ -1560,8 +1561,8 @@ msgstr "" msgid "Device" msgstr "Sürücü" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "Sürücü Ayarları" @@ -1569,15 +1570,12 @@ msgstr "Sürücü Ayarları" msgid "Dial" msgstr "Kadran" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "DirectX 10/11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "DirectX 9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1639,7 +1637,7 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "Disk" @@ -1666,19 +1664,19 @@ msgstr "" msgid "Divide" msgstr "Böl" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "Emülasyonu durdurmak istiyor musunuz?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "Dolby Pro Logic II dekoder" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1709,9 +1707,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1735,12 +1732,12 @@ msgstr "Dolphin Taklit Wiimote Yapılandırması" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GC Kolu Yapılandırması" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS Filmleri (*.dtm)" @@ -1752,7 +1749,7 @@ msgstr "Dolphin Wiimote Yapılandırması" msgid "Dolphin at &Google Code" msgstr "&Google Code'da Dolphin" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." @@ -1760,7 +1757,7 @@ msgstr "" "Dolphin herhangi bir GC veya Wii kalıbı bulamadı. Buraya çift tıklatarak " "dosyalara göz atabilirsiniz..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." @@ -1768,12 +1765,12 @@ msgstr "" "Dolphin şu anda oyunları gizlemeye ayarlıdır. Buraya çift tıklatarak tüm " "oyunları görebilirsiniz." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin istenen işlemi gerçekleştiremedi." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1797,11 +1794,11 @@ msgstr "%lu kod indirildi. (%lu eklendi.)" msgid "Drums" msgstr "Davullar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "Kukla" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "Sesi Dök" @@ -1848,9 +1845,9 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Flemenkçe" @@ -1874,7 +1871,7 @@ msgstr "" "azından %d.%d sürümü olmalıdır. --- Eğer Dolphin'i sürekli güncelliyorsanız, " "Windows'un sürücüyü görmesi için yeniden başlatma gerekebilir." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "AVRUPA" @@ -1890,14 +1887,10 @@ msgstr "Düzen" msgid "Edit ActionReplay Code" msgstr "Action Replay Kodunu Düzenle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "Yapılandırmayı Düzenle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "Yamayı Düzenle" @@ -1906,8 +1899,8 @@ msgstr "Yamayı Düzenle" msgid "Edit current perspective" msgstr "Şu anki perspektifi düzenle" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "Düzenle..." @@ -1919,7 +1912,7 @@ msgstr "Etki" msgid "Embedded Frame Buffer" msgstr "Gömülü Çerçeve Tamponu" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "Emülasyon İşlem Birimi zaten çalışıyor." @@ -1957,7 +1950,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "Taklit Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "Emülasyon Durumu:" @@ -1981,15 +1974,15 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "AR Geçmişine İzin Ver" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "Blok Birleşimine İzin Ver" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "Sınırlayıcı Kutu Hesaplama'yı Etkinleştir" @@ -1997,27 +1990,27 @@ msgstr "Sınırlayıcı Kutu Hesaplama'yı Etkinleştir" msgid "Enable Cache" msgstr "Ön Belleğe İzin Ver" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "Hilelere İzin Ver" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "Çift Çekirdeğe İzin Ver" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "Çift Çekirdeğe İzin Ver (hızı artırır)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "Boşta Atlamaya İzin Ver" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "Boşta Atlamaya İzin Ver (hızı artırır)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "MMU'ya İzin Ver" @@ -2025,7 +2018,7 @@ msgstr "MMU'ya İzin Ver" msgid "Enable Progressive Scan" msgstr "Progresif Taramaya İzin Ver" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "Ekran Koruyucusuna İzin Ver" @@ -2033,7 +2026,7 @@ msgstr "Ekran Koruyucusuna İzin Ver" msgid "Enable Speaker Data" msgstr "Hoparlör verisine izin ver" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "Geniş Ekrana İzin Ver" @@ -2055,7 +2048,7 @@ msgstr "" "\n" "Emin değilseniz, 1x seçin." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2093,7 +2086,7 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." @@ -2101,11 +2094,11 @@ msgstr "" "The Legend of Zelda: Twilight Princess oyununu hızlandırır. Diğer tüm " "oyunlarda iptal edin." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "Özel Gösterim Hilesini Etkinleştirir" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." @@ -2113,7 +2106,7 @@ msgstr "" "5.1 surround sistemini kullanarak Dolby Pro Logic II'nin emulasyonunu " "etkinleştir. OSX'de kullanılamaz." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2132,7 +2125,7 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2154,9 +2147,9 @@ msgstr "" msgid "End" msgstr "Son" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "İngilizce" @@ -2179,21 +2172,20 @@ msgstr "Giriş %d/%d" msgid "Entry 1/%d" msgstr "Giriş 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "Eşit" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "Hata" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "Seçili dili yüklerken hata. Sistem varsayılanlarına geri dönülüyor." -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2241,7 +2233,7 @@ msgstr "Tüm Wii Kayıtlarını Ver" msgid "Export Failed" msgstr "Verme başarısız." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "Dosya Ver" @@ -2257,7 +2249,7 @@ msgstr "Çekimi Ver..." msgid "Export Save" msgstr "Kaydı Ver" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "Wii Kayıtlı Oyununu Ver (Deneme Amaçlı)" @@ -2273,7 +2265,7 @@ msgstr "Verme başarısız." msgid "Export save as..." msgstr "Kaydı farklı ver..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "Uzantı" @@ -2289,44 +2281,44 @@ msgstr "İlave Parametre" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "İlave Parametre sadece \"Metroid: Other M\" oyununda kullanışlıdır." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "Tüm Dosyaları Genişlet..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "Apploader'i Genişlet..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "DOL'ü Genişlet..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "Konumu Genişlet..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "Dosyayı Genişlet..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "Bölüntüyü Genişlet..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "%s Genişletiliyor" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "Tüm Dosyalar Genişletiliyor" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "Konum Genişletiliyor" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "Genişletiliyor..." @@ -2338,15 +2330,15 @@ msgstr "FIFO Bayt'ı" msgid "FIFO Player" msgstr "FIFO Oynatıcısı" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANSA" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST Boyutu:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "Bağlantı başarısız!" @@ -2354,11 +2346,15 @@ msgstr "Bağlantı başarısız!" msgid "Failed to download codes." msgstr "Kod indirme başarısız." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "%s 'ye genişletme başarısız!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2407,7 +2403,7 @@ msgstr "banner.bin okunamadı." msgid "Failed to read bk header" msgstr "bk başlığı okunamadı" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2418,7 +2414,7 @@ msgstr "" "Hafıza kartında sorun olabilir\n" "Dosya Konumu: %llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2426,7 +2422,7 @@ msgstr "" "Blok Ayırma Tablosu yedeği doğru okunamadı.\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2444,7 +2440,7 @@ msgstr "%d dosyasından veri okunamadı." msgid "Failed to read data from file: %s" msgstr "%s dosyasından veri okunamadı" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2452,7 +2448,7 @@ msgstr "" "Konum yedeği doğru okunamadı.\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2464,7 +2460,7 @@ msgstr "" msgid "Failed to read header" msgstr "Başlık okunamadı" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2477,7 +2473,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "Disk kalıbının Unique ID'si okunamadı." @@ -2499,7 +2495,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "%s için başlık yazılamadı." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "Farsça" @@ -2511,7 +2507,7 @@ msgstr "Hızlı" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "MMU'nun hızlı sürümü. Her oyunda çalışmaz." @@ -2547,7 +2543,7 @@ msgstr "" "Dosya açılamadı\n" "veya geçersiz bir uzantıya sahip." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2560,7 +2556,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "Dosya bir hafıza kartı olarak tanınamadı." -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "Dosya sıkıştırılmadı." @@ -2569,11 +2565,11 @@ msgstr "Dosya sıkıştırılmadı." msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: Bilinmeyen açma modu : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "Dosya sistemi" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "Dosya türü 'ini' bilinmiyor! Açılmayacaktır!" @@ -2601,7 +2597,7 @@ msgstr "16:9 'a zorla" msgid "Force 4:3" msgstr "4:3 'e zorla" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "Konsolu NTSC-J Olmaya Zorla" @@ -2633,7 +2629,7 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2643,7 +2639,7 @@ msgstr "" "İşaretsiz bırakırsanız, Dolphin varsayılan olarak NTSC-U'yu seçecektir ve " "Japon oyunlarını oynarken bu ayarı etkinleştirecektir." -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2655,7 +2651,7 @@ msgstr "" msgid "Forward" msgstr "İleri" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2698,7 +2694,7 @@ msgstr "Çerçeve Aralığı" msgid "Frame S&kipping" msgstr "Çerçeve Atlama(&K)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "Çerçeve Sınırı:" @@ -2710,9 +2706,9 @@ msgstr "Çekilecek Çerçeveler" msgid "Free Look" msgstr "Serbest Bakış" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "Fransızca" @@ -2745,27 +2741,27 @@ msgstr "GC Kolu" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "Oyun ID'si:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "Oyun zaten çalışıyor!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "Oyun çalışmıyor!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "Oyun bulunamadı!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "Oyuna Özel Ayarlar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "Oyun Yapılandırması" @@ -2773,7 +2769,7 @@ msgstr "Oyun Yapılandırması" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube kayıtlı oyun dosyası(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "GameCube" @@ -2782,7 +2778,7 @@ msgid "Gamecube &Pad Settings" msgstr "Gamecube Kolu Ayarları (&P)" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "GameCube Hafıza Kartları (*.raw,*.gcp)" @@ -2790,12 +2786,12 @@ msgstr "GameCube Hafıza Kartları (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "GameCube Kolu Ayarları" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko Kodları" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2809,7 +2805,7 @@ msgstr "" "kullanmayı deneyebilirsiniz.)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "Genel" @@ -2818,13 +2814,13 @@ msgstr "Genel" msgid "General Settings" msgstr "Genel Ayarlar" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "Almanca" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: Ana sayfa kod liste boyutundan (%lu) daha büyük." @@ -2837,7 +2833,7 @@ msgstr "Görüntü" msgid "Graphics settings" msgstr "Görüntü Ayarları" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "Daha Büyük" @@ -2857,7 +2853,7 @@ msgstr "" "\n" "Emin değilseniz, işaretli bırakın." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Yunanca" @@ -2881,11 +2877,11 @@ msgstr "Gitar" msgid "Hacks" msgstr "Hack'ler" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "Başlık sağlama hatası" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "İbranice" @@ -2897,7 +2893,7 @@ msgstr "Yükseklik" msgid "Help" msgstr "Yardım" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2909,7 +2905,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2948,7 +2944,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "Barındırma" @@ -2957,11 +2953,11 @@ msgid "Hotkey Configuration" msgstr "Kısayol Tuşu Yapılandırması" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "Tuşlar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Macarca" @@ -2969,16 +2965,16 @@ msgstr "Macarca" msgid "Hybrid Wiimote" msgstr "Karışık Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "IOCTL_ES_GETVIEWS: Bilinmeyen biletten veri alma denemesi: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -2987,15 +2983,15 @@ msgstr "" "Başlık ID %016llx.\n" " Dolphin çakılacak gibi gözüküyor." -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - kötü durak" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL Ayarları" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "Kızılötesi" @@ -3007,15 +3003,15 @@ msgstr "Kızılötesi İşaretleyici" msgid "IR Sensitivity:" msgstr "Kızılötesi Hassasiyeti:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "Kalıp Ayrıntıları" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "Kalıp Konumları" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "İTALYA" @@ -3023,7 +3019,7 @@ msgstr "İTALYA" msgid "Icon" msgstr "Simge" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3095,7 +3091,7 @@ msgstr "" "Alınan dosya sav uzantısına sahip\n" "ama başlığı düzgün değil." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "Oyun İçi" @@ -3104,7 +3100,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "Bilgi" @@ -3124,7 +3120,7 @@ msgstr "Ekle" msgid "Insert Encrypted or Decrypted code here..." msgstr "Şifreli veya şifresiz kodu buraya ekleyin..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "SD Kart Ekle" @@ -3136,35 +3132,35 @@ msgstr "Adı buraya yazın..." msgid "Install WAD" msgstr "WAD Kur" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "Wii Menüsüne kur" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "" "Kurulum Özel Durum İşleyici çağrıldı, ama bu platform henüz bunu " "desteklemiyor." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "WAD kuruluyor..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "Düzgünlük Denetleme Hatası" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "Düzgünlük denetlemesi tamamlandı" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "Düzgünlük denetlemesi tamamlandı. Hata bulunmadı." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " @@ -3173,11 +3169,11 @@ msgstr "" "Bölüntü %d için düzgünlük denetlemesi başarısız. Dökümünüz hasar görmüş veya " "yanlış yamanmış olabilir." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "Arabirim" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "Arabirim Ayarları" @@ -3206,7 +3202,7 @@ msgstr "İç Çözünürlük:" msgid "Interpreter (VERY slow)" msgstr "Interpreter (ÇOK yavaş)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "İntro" @@ -3215,7 +3211,7 @@ msgstr "İntro" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "Yanlış boyut (%x) veya Sihirli kelime (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "Hatalı Değer!" @@ -3223,16 +3219,16 @@ msgstr "Hatalı Değer!" msgid "Invalid bat.map or dir entry" msgstr "Hatalı bat.map veya konum girişi" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "Hatalı olay türü: %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "Hatalı dosya" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3259,34 +3255,36 @@ msgstr "Geçersiz arama dizesi (sayıya dönüştürülemedi)" msgid "Invalid search string (only even string lengths supported)" msgstr "Geçersiz arama dizesi (sadece düz dize uzunluğu destekleniyor)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "Hatalı durum" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "İtalyanca" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPONYA" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT derleyici (önerilir)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL deneysel derleyici" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japonca" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KORE" @@ -3308,8 +3306,9 @@ msgstr "Pencereyi üstte tut" msgid "Key" msgstr "Tuş" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Korece" @@ -3327,7 +3326,7 @@ msgstr "L Düğmesi" msgid "L-Analog" msgstr "L Analog" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "Dil:" @@ -3336,7 +3335,7 @@ msgstr "Dil:" msgid "Last %i" msgstr "Son %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "Gecikme:" @@ -3375,11 +3374,11 @@ msgstr "" "Daha çok seçenek için sol veya sağ, \n" "temizlemek için orta tıklatın." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "Daha Az" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "FPS Sınırlaması" @@ -3471,11 +3470,11 @@ msgstr "Durumu Yükle: 9" msgid "Load State..." msgstr "Durumu Yükle..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "Wii Sistem Menüsünü Yükle" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "Wii Sistem Menüsünü Yükle %d%c" @@ -3527,12 +3526,12 @@ msgstr "" msgid "Logger Outputs" msgstr "Geçmiş Çıkışı" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "Geçmiş" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "Sunucu bağlantısı kayboldu!" @@ -3549,7 +3548,7 @@ msgstr "" "MD5 eşleşmiyor\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU Hız Hilesi" @@ -3563,11 +3562,11 @@ msgstr "MadCatz Gameshark dosyaları(*.gcs)" msgid "Main Stick" msgstr "Ana Çubuk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "Yapımcı ID'si:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "Yapımcı:" @@ -3598,7 +3597,7 @@ msgid "Memory Byte" msgstr "Hafıza Baytı" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "Hafıza Kartı" @@ -3610,7 +3609,7 @@ msgstr "" "Hafıza Kartı Yöneticisi Uyarısı-Kullanmadan önce yedekleme yapın, " "düzeltilmiş olması gerekiyor ama bozuk şeyler olabilir." -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3627,7 +3626,7 @@ msgstr "" "%s\n" "Eski dosyaları bu yeni yere kopyalamak ister misiniz?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "Hafıza kartı dosya boyutu başlık boyutuyla eşleşmiyor" @@ -3635,7 +3634,7 @@ msgstr "Hafıza kartı dosya boyutu başlık boyutuyla eşleşmiyor" msgid "Menu" msgstr "Menü" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "Mikrofon" @@ -3648,7 +3647,7 @@ msgstr "En az" msgid "Misc" msgstr "Çeşitli" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "Çeşitli Ayarlar" @@ -3673,11 +3672,11 @@ msgstr "" msgid "Monospaced font" msgstr "Boşluklu yazı" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "Motor" @@ -3796,15 +3795,15 @@ msgstr "NP Sekme" msgid "NP Up" msgstr "NP Yukarı" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "İsim:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "İsim:" @@ -3814,7 +3813,7 @@ msgstr "İsim:" msgid "Native GCI files(*.gci)" msgstr "Doğal GCI Dosyaları(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "Yeni Tarama" @@ -3823,7 +3822,7 @@ msgstr "Yeni Tarama" msgid "Next Page" msgstr "Sonraki Sayfa" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "Sonraki Tarama" @@ -3831,11 +3830,11 @@ msgstr "Sonraki Tarama" msgid "Nickname :" msgstr "Takma Ad :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "Ülke Yok (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "Kalıp bulunamadı" @@ -3874,24 +3873,25 @@ msgstr "Çekilmiş Dosya Yok" msgid "No save folder found for title %s" msgstr "Başlık %s için kayıt klasörü bulunamadı" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "Hiçbiri" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norveççe (Bokmaal Lehçesi)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "Eşit Değil" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "Ayarlanmamış" @@ -3900,11 +3900,11 @@ msgstr "Ayarlanmamış" msgid "Not a Wii save or read failure for file header size %x" msgstr "Bir Wii kaydı değil veya bu başlık boyutu için okuma hatası: %x" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "Bağlı değil" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "Notlar" @@ -3925,7 +3925,7 @@ msgstr "Duyuru" msgid "Num Lock" msgstr "Sayı Kilidi" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "Kod Sayısı:" @@ -3946,7 +3946,7 @@ msgstr "Nesne" msgid "Object Range" msgstr "Nesne Aralığı" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "Kapalı" @@ -3954,7 +3954,7 @@ msgstr "Kapalı" msgid "Offset:" msgstr "Uzantı:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "" @@ -3972,11 +3972,11 @@ msgstr "Sadece %d blok kullanılabilir" msgid "Open" msgstr "Aç" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "Dosya konumunu aç (&C)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "Wii kayıt kla&sörünü aç" @@ -4006,17 +4006,13 @@ msgstr "OpenCL Doku Çözücü" msgid "OpenMP Texture Decoder" msgstr "OpenMP Doku Çözücü" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "Seçenekler" @@ -4040,7 +4036,7 @@ msgstr "" msgid "Other" msgstr "Diğer" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4056,11 +4052,11 @@ msgstr "Çıkış" msgid "P&lay Recording..." msgstr "Çekimi Oynat... (&L)" -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "Kol" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "Kol" @@ -4084,26 +4080,26 @@ msgstr "Paragraf" msgid "Parameters" msgstr "Parametreler" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "Bölüntü %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "Yamalar" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "Yollar" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "Duraklat" @@ -4116,7 +4112,7 @@ msgstr "Videonun sonunda duraklat" msgid "Per-Pixel Lighting" msgstr "Piksel Aydınlatması" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "Mükemmel" @@ -4127,8 +4123,8 @@ msgstr "Perspektif %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "Oynat" @@ -4140,7 +4136,7 @@ msgstr "Çekimi Oynat" msgid "Play/Pause" msgstr "Oynat/Duraklat" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "Oynanabilir" @@ -4148,11 +4144,11 @@ msgstr "Oynanabilir" msgid "Playback Options" msgstr "Oynatma Seçenekleri" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "Oyuncular" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "Lütfen onaylayın..." @@ -4164,36 +4160,36 @@ msgstr "Kaydetmeden önce lütfen bir perspektif oluşturun" msgid "Plus-Minus" msgstr "Artı-Eksi" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Lehçe" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "Bağ. Nok. 1:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "Bağ. Nok. 2:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "Bağ. Nok. 3:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "Bağ. Nok. 4:" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "Bağ. Nok. :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portekizce" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portekizce (Brezilya)" @@ -4206,7 +4202,7 @@ msgstr "Geç İşleme Etkisi:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "PlayController'da erken kayıt bitişi. %u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "PlayWiimote'da erken kayıt bitişi. %u + %d > %u" @@ -4228,7 +4224,7 @@ msgstr "Önceki Sayfa" msgid "Previous Page" msgstr "Önceki Sayfa" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "Önceki Değer" @@ -4252,8 +4248,8 @@ msgstr "Önbelleği Temizle" msgid "Question" msgstr "Soru" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "Çık" @@ -4275,7 +4271,7 @@ msgstr "R Analog" msgid "RAM" msgstr "Anabellek" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSYA" @@ -4314,7 +4310,7 @@ msgstr "Gerçek Wiimote'lar" msgid "Record" msgstr "Çek" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "Girişi kaydet" @@ -4366,10 +4362,10 @@ msgstr "Listeyi Yenile" msgid "Refresh game list" msgstr "Oyun Listesini Yenile" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "Kaldır" @@ -4392,7 +4388,7 @@ msgstr "Ana pencerede yorumla" msgid "Reset" msgstr "Sıfırla" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "Sonuçlar" @@ -4400,7 +4396,7 @@ msgstr "Sonuçlar" msgid "Return" msgstr "Enter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4413,17 +4409,17 @@ msgstr "Sağ" msgid "Right Stick" msgstr "Sağ Çubuk" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "Gümbürtü" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Rusça" @@ -4497,12 +4493,12 @@ msgstr "" msgid "Save State..." msgstr "Durumu Kaydet..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "Farklı kaydet..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "Sıkıştırılan GCM/ISO'yu kaydet" @@ -4510,7 +4506,7 @@ msgstr "Sıkıştırılan GCM/ISO'yu kaydet" msgid "Save current perspective" msgstr "Şu anki perspektifi kaydet" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "Genişletilen GCM/ISO'yu kaydet" @@ -4523,16 +4519,16 @@ msgstr "Kayıtlı durum filmi %s bozuk, film çekimi duruyor..." msgid "Scaled EFB Copy" msgstr "Boyutlandırılmış EFB Kopyası" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "Taranıyor %s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "Kalıplar taranıyor" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "Taranıyor..." @@ -4548,11 +4544,11 @@ msgstr "Kaydırma Kilidi" msgid "Search" msgstr "Ara" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "Arama Filtresi" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "Alt Klasörleri Ara" @@ -4575,12 +4571,12 @@ msgstr "SYSCONF içinde %s bölümü bulunamadı" msgid "Select" msgstr "Seç" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "Çekim Dosyasını Seç" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "Kurmak için bir Wii WAD dosyası seçin" @@ -4602,19 +4598,19 @@ msgstr "Almak için bir kayıt dosyası seçin" msgid "Select floating windows" msgstr "Sabit olmayan pencereyi seçin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "Yüklemek için dosyayı seçin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "Kayıt dosyasını seçin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "Yüklemek için durum seçin" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "Kaydetmek için durum seçin" @@ -4636,7 +4632,7 @@ msgstr "" "\n" "Emin değilseniz, otomatik seçin." -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "Seçilmiş kumanda profili yok." @@ -4660,39 +4656,28 @@ msgstr "" "Emin değilseniz, masaüstü çözünürlüğünüzü seçin.\n" "Hala emin değilseniz, kullanabildiğiniz en yüksek çözünürlüğü seçin." -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"Hangi görüntü API'sinin kullanılacağını seçer.\n" -"Direct3D 9 genelde en hızlı olanlarıdır. OpenGL gerçekçiliğe önem verir. " -"Direct3D 11 ikisinin arasıdır.\n" -"Şunu unutmayın, Direct3D sadece Windows'da kullanılabilir.\n" -"\n" -"Emin değilseniz, Direct3D 11'i seçin." - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"Hangi görüntü API'sinin kullanılacağını seçer.\n" -"Direct3D 9 genelde en hızlı olanlarıdır. OpenGL gerçekçiliğe önem verir. " -"Direct3D 11 ikisinin arasıdır.\n" -"Şunu unutmayın, Direct3D sadece Windows'da kullanılabilir.\n" -"\n" -"Emin değilseniz, OpenGL'yi seçin." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "Gönder" @@ -4704,17 +4689,17 @@ msgstr "Sensör Çubuk Konumu:" msgid "Separator" msgstr "Bölücü" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Sırpça" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "" "Seri Bağ.Nok. 1 - Bu bağlantı noktasına ağ adaptörü gibi sürücüler bağlanır" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "Varsayılan Kalıp Olarak Ayarla (&D)" @@ -4723,12 +4708,12 @@ msgstr "Varsayılan Kalıp Olarak Ayarla (&D)" msgid "Set as default Memcard %c" msgstr "Varsayılan Hafıza Kartı %c olarak ayarla" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive: Anasayfa, kod listesi boyutu %lu dan daha büyük." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." @@ -4736,19 +4721,19 @@ msgstr "" "Gecikmeyi ayarlayın (ms olarak). Yüksek değerler ses hışırtısını " "azaltabilir. Sadece OpenAL ile kullanılabilir." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "Ayarlar..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "Sallama" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "Kısa İsim:" @@ -4772,7 +4757,7 @@ msgstr "Durum Çubuğunu Gö&ster" msgid "Show &Toolbar" msgstr "Araç Çubuğunu Gös&ter" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "Varsayılanları Göster" @@ -4812,7 +4797,7 @@ msgstr "Japonları Göster" msgid "Show Korea" msgstr "Korelileri Göster" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "Gösterme Dili:" @@ -4852,11 +4837,11 @@ msgstr "WAD'ları Göster" msgid "Show Wii" msgstr "Wii'leri Göster" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "Oyunu durdurmadan önce onay kutusu görüntüle." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4874,7 +4859,7 @@ msgstr "İlk bloğu göster" msgid "Show lag counter" msgstr "Lag sayacını göster" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4926,23 +4911,24 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "Yatay Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Basitleştirilmiş Çince" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "Boyut" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "BIOS'u Geç" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4971,11 +4957,11 @@ msgstr "" msgid "Slot %i" msgstr "Slot %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "Slot A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "Slot B" @@ -4983,7 +4969,7 @@ msgstr "Slot B" msgid "Snapshot" msgstr "Enstantene" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "Yazılımsal Yorumlayıcı" @@ -4999,27 +4985,27 @@ msgstr "" "Yazılım yorumlamasını açmayı gerçekten istiyor musunuz? Emin değilseniz, " "'Hayır' seçin." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "Ses Ayarları" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "Ses arkaucu %s geçerli değil." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "Ses tamponu oluşturulamadı: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Boşluk" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "İspanyolca" @@ -5047,7 +5033,7 @@ msgstr "" "\n" "Emin değilseniz, 640x528'i seçin." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "Disk Aktarım Oranını Hızlandır" @@ -5055,13 +5041,13 @@ msgstr "Disk Aktarım Oranını Hızlandır" msgid "Square Stick" msgstr "Kare Çubuk" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "Varsayılan Denetim Aygıtı" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Başlat" @@ -5077,7 +5063,7 @@ msgstr "Çekimi Başlat (&C)" msgid "Start Recording" msgstr "Çekimi Başlat" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "Durum" @@ -5085,7 +5071,7 @@ msgstr "Durum" msgid "State Saves" msgstr "Durum Kayıtları" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "Direksiyon" @@ -5134,30 +5120,31 @@ msgstr "Dosya %s 'ye başarıyla verildi" msgid "Successfully imported save files" msgstr "Kayıt dosyaları başarıyla alındı" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "Hareket" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "Sistem Dili:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAYVAN" @@ -5188,7 +5175,7 @@ msgstr "Tablo Sağ" msgid "Take Screenshot" msgstr "Ekran Görüntüsü Al" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (Bongos)" @@ -5208,11 +5195,11 @@ msgstr "Doku Ön Belleği" msgid "Texture Format Overlay" msgstr "Doku Biçimi Kaplaması" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD Başarıyla yüklendi." -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "Adres geçersiz" @@ -5220,13 +5207,13 @@ msgstr "Adres geçersiz" msgid "The checksum was successfully fixed" msgstr "Sağlama başarıyla düzeltildi" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "Seçilen konum zaten listede" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5249,7 +5236,7 @@ msgstr "" msgid "The file %s was already open, the file header will not be written." msgstr "Dosya %s zaten açık, dosya başlığı yazılmayacaktır." -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "Belirtilen dosya (%s) bulunamadı" @@ -5282,7 +5269,7 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "Kopyalamayı denediğiniz kaydın boyutu hatalı" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." @@ -5290,19 +5277,19 @@ msgstr "" "Seçilen dili sisteminiz desteklememektedir. Sistem varsayılanına geri " "dönülüyor." -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "Sunucu ve istemcinin NetPlay sürümleri uyumlu değil!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "Sunucu dolu!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "Sunucu yanıtı: oyun şu anda çalışıyor!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "Sunucu bilinmeyen bir hata mesajı gönderdi!" @@ -5311,15 +5298,15 @@ msgstr "Sunucu bilinmeyen bir hata mesajı gönderdi!" msgid "The specified file \"%s\" does not exist" msgstr "Belirtilen dosya \"%s\" bulunamadı" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "Değer hatalı" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "Tema:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." @@ -5327,7 +5314,7 @@ msgstr "" "Burada 00000001/00000002 için bir bilet olmalıdır. NAND dökümünüz " "tamamlanmamış olabilir." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5335,14 +5322,14 @@ msgstr "" "Bu ayarlar Dolphin'in kendi ayarları yerine kullanılır. \n" "Dolu kareler oyunun Dolphin'in ayarlarını kullandığını gösterir." -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "" "Bu Action Replay simülatörü, kodların kendisini düzenlemesini desteklemiyor." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "Bu Wii Menüsünde ve bazı oyunlarda yavaşlamaya neden olabilir." @@ -5365,7 +5352,7 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5373,7 +5360,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5385,7 +5372,7 @@ msgstr "" "Bilgisayarınızda çift çekirdek varsa hızınızı büyük oranda artırır,ama bazı " "çökme ve hatalara neden olabilir." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "INI Yapılandırma dosyasını elle düzenlemeye izin verir." @@ -5394,12 +5381,12 @@ msgstr "INI Yapılandırma dosyasını elle düzenlemeye izin verir." msgid "Threshold" msgstr "Eşik" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "Eğim" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "Başlık" @@ -5434,15 +5421,16 @@ msgid "Toggle IR" msgstr "IR aç/kapat" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "Üst" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Geleneksel Çince" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "Bilinmeyen bir dosya türünü yüklemeyi denedi." @@ -5462,7 +5450,7 @@ msgstr "" "Geçersiz SYSCONF'tan okumayı deniyor\n" "Wiimote BT ID'leri mevcut değil" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Türkçe" @@ -5478,12 +5466,12 @@ msgstr "Tür" msgid "UDP Port:" msgstr "UDP Bağ.Nok.:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "BİLİNMEYEN" @@ -5492,7 +5480,7 @@ msgstr "BİLİNMEYEN" msgid "UNKNOWN_%02X" msgstr "BİLİNMEYEN_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "AMERİKA" @@ -5505,9 +5493,9 @@ msgstr "" "Girilen veri değiştirilmemiş." #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5532,11 +5520,11 @@ msgstr "Durum Kaydetmeyi Geri Al" msgid "Unexpected 0x80 call? Aborting..." msgstr "Beklenmedik 0x80 çağrısı? Çıkılıyor..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "Bilinmeyen" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "Bilinmeyen DVD komutu %08x - önemli hata" @@ -5551,12 +5539,12 @@ msgstr "Bilinmeyen komut 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "SYSCONF içinde bilinmeyen giriş türü %i (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "Şu ID ile bilinmeyen mesaj alındı : %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "ID %d ile %d oyuncusundan bilinmeyen mesaj alındı. Oyuncu atılıyor!" @@ -5566,16 +5554,16 @@ msgstr "ID %d ile %d oyuncusundan bilinmeyen mesaj alındı. Oyuncu atılıyor!" msgid "Up" msgstr "Yukarı" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "Güncelle" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "Dik Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "EuRGB60 Modunu Kullan (PAL60)" @@ -5583,11 +5571,11 @@ msgstr "EuRGB60 Modunu Kullan (PAL60)" msgid "Use Fullscreen" msgstr "Tam Ekran Kullan" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "HEX Kullan" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "Önemli Hataları Bildir" @@ -5642,11 +5630,11 @@ msgstr "Gereçler" msgid "V-Sync" msgstr "Dikey Eşitleme" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam Hız Hilesi" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "Değer" @@ -5654,7 +5642,7 @@ msgstr "Değer" msgid "Value:" msgstr "Değer:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "Değer:" @@ -5666,7 +5654,7 @@ msgstr "Duyuru/Hata/Uyarı" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "Görüntü" @@ -5674,7 +5662,7 @@ msgstr "Görüntü" msgid "Virtual" msgstr "Sanal" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "Ses" @@ -5706,15 +5694,15 @@ msgstr "" msgid "Warning" msgstr "Uyarı" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "Uyarı - DOL yanlış konsol modunda başlatılıyor!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "Uyarı - ELF yanlış konsol modunda başlatılıyor!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "Uyarı - Kalıp yanlış konsol modunda başlatılıyor!" @@ -5818,19 +5806,19 @@ msgstr "Geniş Ekran Hilesi" msgid "Width" msgstr "Genişlik" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii Konsolu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND Kök Dizini:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii kayıt dosyaları (*.bin)|*.bin" @@ -5843,12 +5831,18 @@ msgstr "WiiWAD: Dosyadan okuma başarısız" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wiimote %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote Bağlandı" @@ -5880,14 +5874,14 @@ msgstr "Pencereleri Sağa Döşe" msgid "Word Wrap" msgstr "Heceleme" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "Çalışıyor..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5907,21 +5901,36 @@ msgstr "Dosyaya Yaz" msgid "Write to Window" msgstr "Pencereye Yaz" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice başarsız: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 başlatılamadı: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 ana ses oluşturulamadı: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice başarsız: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 başlatılamadı: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 ana ses oluşturulamadı: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF kaydı" @@ -5950,15 +5959,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "Sayfalı bölmeleri kapatamazsınız." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "Bir oyun seçmelisiniz!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "Bir isim girmelisiniz!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "Doğru bir sekizlik,onluk veya onaltılık değer girmelisiniz." @@ -5966,7 +5975,7 @@ msgstr "Doğru bir sekizlik,onluk veya onaltılık değer girmelisiniz." msgid "You must enter a valid profile name." msgstr "Geçerli bir profil ismi girmelisiniz." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "Değişikliğin etkili olması için Dolphin'i yeniden başlatmalısınız." @@ -5980,7 +5989,7 @@ msgstr "" "Sorunu düzeltmek için durdurmak istiyor musunuz?\n" "Eğer Hayır'ı, seçerseniz, seste sorun oluşabilir." -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5999,15 +6008,15 @@ msgstr "" "0x%04x olmalıdır (sizinki: 0x%04llx) \n" "Yenisini oluşturmak ister misiniz?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP Hilesi" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Sıfır-Üç kodu desteklenmemektedir." -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Dolphin Sıfır kodu bilinmiyor: %08x" @@ -6065,29 +6074,24 @@ msgstr "" "\n" "Emin değilseniz, işaretsiz bırakın." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "apploader (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: %x 'den işlem kodu okunuyor. Lütfen bildirin." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute uygulama çalışırken -1'e düştü!" @@ -6102,3 +6106,42 @@ msgstr "zNear Düzeltmesi:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| VEYA" + +#~ msgid "Could not create %s" +#~ msgstr "%s oluşturulamadı." + +#~ msgid "Direct3D11" +#~ msgstr "DirectX 10/11" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "Hangi görüntü API'sinin kullanılacağını seçer.\n" +#~ "Direct3D 9 genelde en hızlı olanlarıdır. OpenGL gerçekçiliğe önem verir. " +#~ "Direct3D 11 ikisinin arasıdır.\n" +#~ "Şunu unutmayın, Direct3D sadece Windows'da kullanılabilir.\n" +#~ "\n" +#~ "Emin değilseniz, Direct3D 11'i seçin." + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "Hangi görüntü API'sinin kullanılacağını seçer.\n" +#~ "Direct3D 9 genelde en hızlı olanlarıdır. OpenGL gerçekçiliğe önem verir. " +#~ "Direct3D 11 ikisinin arasıdır.\n" +#~ "Şunu unutmayın, Direct3D sadece Windows'da kullanılabilir.\n" +#~ "\n" +#~ "Emin değilseniz, OpenGL'yi seçin." + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: %x 'den işlem kodu okunuyor. Lütfen bildirin." diff --git a/Languages/po/zh_CN.po b/Languages/po/zh_CN.po index 563a67e553..73fcd1e541 100644 --- a/Languages/po/zh_CN.po +++ b/Languages/po/zh_CN.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-21 05:18+0000\n" "Last-Translator: lxf2000 \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/dolphin-" @@ -22,13 +22,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr " (项目太多,无法完全显示)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " 游戏 : " @@ -36,7 +36,7 @@ msgstr " 游戏 : " msgid "! NOT" msgstr "! 非" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -60,12 +60,12 @@ msgstr "%08X: " msgid "%1$sCopy%1$s" msgstr "%1$s复制%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "%d 采样" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "%d 采样 (质量等级 %d)" @@ -76,12 +76,12 @@ msgstr "%d 采样 (质量等级 %d)" msgid "%s already exists, overwrite?" msgstr "%s 已经存在,是否覆盖?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "缩减 %s 失败。镜像可能有错误。" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -90,7 +90,7 @@ msgstr "" "无法将 %s 载入为存储卡 \n" " 卡文件大小无效 (0x%x 字节)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -99,7 +99,7 @@ msgstr "" "无法将 %s 载入为存储卡 \n" " 卡大小无效 (0x%x 字节)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -113,7 +113,7 @@ msgstr "" msgid "%s failed to open" msgstr "无法打开 %s" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "%s 失败:kr=%x" @@ -123,7 +123,7 @@ msgstr "%s 失败:kr=%x" msgid "%s is a 0 byte file" msgstr "%s 是一个零字节文件" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s 已经被压缩过! 无法对它进一步压缩。" @@ -181,11 +181,11 @@ msgstr "金手指管理器(&C)" msgid "&DSP Settings" msgstr "DSP设置(&D)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "删除镜像(&D)..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "删除所选镜像(&D)..." @@ -249,7 +249,7 @@ msgstr "暂停游戏(&P)" msgid "&Play" msgstr "开始游戏(&P)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "属性(&P)" @@ -293,7 +293,7 @@ msgstr "视图(&V)" msgid "&Wiimote Settings" msgstr "Wii 控制器设置(&W)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "百科(&W)" @@ -329,7 +329,7 @@ msgstr "0x44" msgid "1.5x Native (960x792)" msgstr "1.5x 原生 (960x792)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 位" @@ -345,7 +345,7 @@ msgstr "2.5x 原生 (1600x1320)" msgid "2x Native (1280x1056)" msgstr "2x 原生 (1280x1056)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 位" @@ -361,7 +361,7 @@ msgstr "3x 原生 (1920x1584)" msgid "4x Native (2560x2112)" msgstr "4x 原生 (2560x2112)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 位" @@ -373,7 +373,7 @@ msgstr "<在这里插入名称>" msgid "" msgstr "<未找到分辨率>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "<无>" @@ -381,7 +381,7 @@ msgstr "<无>" msgid "" msgstr "<请按键>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<系统>" @@ -389,13 +389,13 @@ msgstr "<系统>" msgid "A" msgstr "A" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "已经有一个NetPlay窗口打开!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "目前没有游戏在运行。" @@ -408,6 +408,7 @@ msgstr "" "您需要手动连接您的 Wii 控制器。" #: Source/Core/DolphinWX/Src/NetWindow.cpp:104 +#, fuzzy msgid "" "ALERT:\n" "\n" @@ -416,10 +417,11 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" @@ -437,13 +439,13 @@ msgstr "" "\n" "主机必须开放/映射选定的 TCP 端口!\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-基板" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR 代码" @@ -491,20 +493,20 @@ msgstr "" "错误代码:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "Action Replay 错误: 无效大小 (%08x : 地址 = %08x) 于 添加代码 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " "(%s)" msgstr "Action Replay 错误: 无效大小 (%08x : 地址 = %08x) 于 填充和滑动 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -512,19 +514,19 @@ msgid "" msgstr "" "Action Replay 错误: 无效大小 (%08x : 地址 = %08x) 于 内存写入和填充 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " "Pointer (%s)" msgstr "Action Replay 错误: 无效大小 (%08x : 地址 = %08x) 于 写入到指针 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay 错误: 无效数值 (%08x) 于 内存复制 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" @@ -533,27 +535,27 @@ msgstr "" "Action Replay 错误: 主代码与写入到 CCXXXXXX 尚未实现(%s)\n" "不需要主代码。请不要使用主代码。" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay 错误: 无效 AR 代码行: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay: 条件代码: 无效大小 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay: 无效正常代码类型 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay: 正常代码 %i: 无效子类型 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay: 正常代码 0: 无效子类型 %08x (%s)" @@ -567,11 +569,11 @@ msgstr "适配器:" msgid "Add" msgstr "加号" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "添加 ActionReplay 代码" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "添加补丁" @@ -579,9 +581,9 @@ msgstr "添加补丁" msgid "Add new pane" msgstr "添加新面板" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "添加..." @@ -633,36 +635,36 @@ msgstr "调整激活按钮所需的模拟控制压力。" msgid "Advanced" msgstr "高级" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "高级设置" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "所有 GC/Wii 文件 (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "所有 GC/Wii 镜像 (gcm, iso, wbfs, ciso, gcz)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "所有 Gamecube GCM 文件 (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "所有存档状态 (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "所有 Wii 镜像文件 (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "所有压缩的 GC/Wii 镜像文件 (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "所有文件 (*.*)|*.*" @@ -682,19 +684,19 @@ msgstr "各向异性过滤:" msgid "Anti-Aliasing:" msgstr "抗锯齿:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "应用程序载入器大小错误...这真是一个应用程序载入器(apploader)?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "应用程序载入器不能从文件载入" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "应用载入器:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "应用" @@ -708,7 +710,7 @@ msgstr "" "\n" "如果没有把握,请选择 (关)。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "阿拉伯语" @@ -717,7 +719,7 @@ msgstr "阿拉伯语" msgid "Are you sure you want to delete \"%s\"?" msgstr "您确定要删除 \"%s\" ?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -725,7 +727,7 @@ msgstr "" "您确定想要删除这些文件?\n" "它们将无法恢复!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "您确定想要删除此文件? 它将无法恢复!" @@ -733,7 +735,12 @@ msgstr "您确定想要删除此文件? 它将无法恢复!" msgid "Arm JIT (experimental)" msgstr "Arm JIT (实验性)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +#, fuzzy +msgid "Arm JITIL (experimental)" +msgstr "Arm JIT (实验性)" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "宽高比:" @@ -742,12 +749,12 @@ msgstr "宽高比:" msgid "At least one pane must remain open." msgstr "必须有一个窗口保持打开" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "音频" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "音频后端:" @@ -755,7 +762,7 @@ msgstr "音频后端:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon: 打开 AO 设备错误.\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "自动" @@ -794,16 +801,16 @@ msgstr "BP 寄存器" msgid "Back" msgstr "后" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "后端设置" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "后端:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "后台输入" @@ -821,15 +828,15 @@ msgid "Balance Board" msgstr "平衡板" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "标志" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "标志详细信息" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "标志:" @@ -841,7 +848,7 @@ msgstr "摇把" msgid "Basic" msgstr "基本" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "基本设置" @@ -849,7 +856,7 @@ msgstr "基本设置" msgid "Bass" msgstr "低音" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "区块分配表校验失败" @@ -870,7 +877,7 @@ msgid "Blue Right" msgstr "蓝 右" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "底部" @@ -879,7 +886,7 @@ msgstr "底部" msgid "Bound Controls: %lu" msgstr "绑定控制器: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "损坏" @@ -887,7 +894,7 @@ msgstr "损坏" msgid "Browse" msgstr "浏览" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "浏览要添加的目录" @@ -895,11 +902,11 @@ msgstr "浏览要添加的目录" msgid "Browse for an ISO directory..." msgstr "浏览镜像目录..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "浏览输出目录" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "缓冲区:" @@ -909,7 +916,7 @@ msgstr "缓冲区:" msgid "Buttons" msgstr "按键" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -931,7 +938,7 @@ msgstr "C-摇杆" msgid "CP reg" msgstr "CP 注册" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU 模拟引擎" @@ -953,17 +960,17 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "不能按照连接句柄 %02x 找到 Wii 控制器" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "不能从 DVD插件 - DVD接口读取数据: 严重错误" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "取消" @@ -975,11 +982,11 @@ msgstr "取消" msgid "Cannot open %s" msgstr "无法打开 %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "事件未决时不能反注册事件" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -990,7 +997,7 @@ msgstr "" "%s\n" "不是有效的Gamecube存储卡文件" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -1002,7 +1009,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "加泰罗尼亚语" @@ -1010,7 +1017,7 @@ msgstr "加泰罗尼亚语" msgid "Center" msgstr "中心" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "切换" @@ -1022,11 +1029,11 @@ msgstr "切换光盘(&D)..." msgid "Change Disc" msgstr "切换光盘" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "切换游戏" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -1042,11 +1049,11 @@ msgstr "改变“远裁切平面”参数的符号 (修正后)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "改变“近裁切平面”参数的符号 (修正后)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "模拟器正在运行时改动将不会生效!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "聊天" @@ -1054,47 +1061,47 @@ msgstr "聊天" msgid "Cheat Code" msgstr "金手指" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "金手指搜索" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "金手指管理" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "检查分区完整性" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "正在检查完整性..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "简体中文" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "繁体中文" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "选择一个DVD根目录:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "选择一个NAND根目录:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "选择一个默认镜像:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "选择一个要添加的目录" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "选择要打开的文件" @@ -1102,14 +1109,14 @@ msgstr "选择要打开的文件" msgid "Choose a memory card:" msgstr "选择一个存储卡:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "选择要作为应用加载器的文件: (仅适用于由文件夹构成的光盘)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "选择提取目标文件夹" @@ -1128,7 +1135,7 @@ msgstr "传统控制器" msgid "Clear" msgstr "清除" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1136,7 +1143,7 @@ msgstr "游戏运行期间客户端断开连接!! NetPlay 已禁用。您必须 #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "关闭" @@ -1145,11 +1152,11 @@ msgstr "关闭" msgid "Co&nfigure..." msgstr "程序设置(&N)..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "代码信息" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "代码:" @@ -1161,20 +1168,20 @@ msgstr "命令" msgid "Comment" msgstr "注释" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "注释:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "压缩镜像..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "压缩所选镜像..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "正在压缩镜像" @@ -1192,8 +1199,8 @@ msgstr "设置" msgid "Configure Control" msgstr "设置面板" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "设置手柄" @@ -1201,13 +1208,13 @@ msgstr "设置手柄" msgid "Configure..." msgstr "设置..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "确认文件覆盖" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "停止游戏时确认" @@ -1221,7 +1228,7 @@ msgstr "连接" msgid "Connect Balance Board" msgstr "连接平衡板" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "连接 USB 键盘" @@ -1246,7 +1253,7 @@ msgstr "连接 Wii 控制器 3" msgid "Connect Wiimote 4" msgstr "连接 Wii 控制器 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "正在连接..." @@ -1266,7 +1273,7 @@ msgstr "控制" msgid "Convert to GCI" msgstr "转换到 GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "复制失败" @@ -1275,16 +1282,11 @@ msgstr "复制失败" msgid "Copy to Memcard %c" msgstr "复制到内存卡 %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "核心" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "无法创建 %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "无法初始化后端 %s。" @@ -1299,12 +1301,12 @@ msgstr "" "无法读取\"%s\"。驱动器里没有光盘或不是 GC/Wii 备份。请注意多数 PC DVD 驱动器" "不能读取原始的 Gamecube 与 Wii 光盘。" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "无法识别镜像文件 %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "无法保存 %s" @@ -1328,11 +1330,11 @@ msgstr "" "您是否是在移动模拟器目录后收到这个消息?\n" "如果是这样,您可能需要在选项中重新指定您的存储卡位置。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "找不到扩展名 'ini' 的打开命令!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1340,17 +1342,17 @@ msgstr "" "无法初始化核心。\n" "请检查您的配置。" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "数量:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "国家:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "创建 AR 代码" @@ -1384,12 +1386,12 @@ msgstr "" msgid "Crossfade" msgstr "淡入淡出" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "经过 wxFileSelector 之后当前目录从 %s 改变为 %s!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "自定义投影修正" @@ -1397,11 +1399,11 @@ msgstr "自定义投影修正" msgid "Custom Projection Hack Settings" msgstr "自定义投影修正设置" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "自定义一些正交投影参数。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "捷克语" @@ -1417,20 +1419,20 @@ msgstr "方向键" msgid "DSP" msgstr "DSP音频" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "音频模拟引擎" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "音频 HLE 模拟(很快)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "音频 LLE 解释(很慢)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "音频 LLE 重编译器" @@ -1438,11 +1440,11 @@ msgstr "音频 LLE 重编译器" msgid "DSP settings" msgstr "音频设置" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "独立音频 LLE 线程" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD 根目录:" @@ -1454,15 +1456,15 @@ msgstr "DVDLowRead - 致命错误: 读取卷失败" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "DVDLowUnencryptedRead - 致命错误: 读取卷失败" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "跳舞毯" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "数据大小" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "日期:" @@ -1491,16 +1493,16 @@ msgstr "调试" msgid "Decimal" msgstr "小数点" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "解压缩镜像..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "解压缩所选镜像..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "正在解压缩镜像" @@ -1512,7 +1514,7 @@ msgstr "减少帧数限制" msgid "Default" msgstr "默认" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "默认镜像:" @@ -1554,8 +1556,8 @@ msgstr "检测到尝试从DVD读取比合适的输出缓冲区内更多的数据 msgid "Device" msgstr "设备" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "设备设置" @@ -1563,15 +1565,12 @@ msgstr "设备设置" msgid "Dial" msgstr "拨号" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1634,7 +1633,7 @@ msgstr "" "\n" "如果不能确定,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "光盘" @@ -1661,20 +1660,20 @@ msgstr "" msgid "Divide" msgstr "除号" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "您确定是否停止当前模拟?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "杜比定向逻辑II解码器" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 -#, c-format +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 +#, fuzzy, c-format msgid "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin Team\n" @@ -1704,9 +1703,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" "Dolphin %s\n" "Copyright (c) 2003-2013+ Dolphin 团队\n" @@ -1759,12 +1757,12 @@ msgstr "Dolphin 模拟 Wii 控制器配置" msgid "Dolphin FIFO" msgstr "Dolphin FIFO" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GC 手柄设置" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS 电影 (*.dtm)" @@ -1776,24 +1774,24 @@ msgstr "Dolphin Wii 控制器配置" msgid "Dolphin at &Google Code" msgstr "&Google Code 上的 Dolphin" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "Dolphin 不能找到任何 GC/Wii 镜像。双击这里浏览文件..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." msgstr "Dolphin 当前设置为隐藏所有游戏。双击这里显示所有游戏..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "Dolphin未能完成请求的操作。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1817,11 +1815,11 @@ msgstr "已下载 %lu 代码(已添加 %lu)" msgid "Drums" msgstr "鼓 (太鼓达人)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "虚拟" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "转储音频" @@ -1870,9 +1868,9 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "荷兰语" @@ -1895,7 +1893,7 @@ msgstr "" "错误: 此版本的Dolphin需要%d.%d或更高版本的TAP-Win32驱动——如果您刚刚升级您的" "Dolphin,或许您现在需要重新启动您的计算机以使Windows加载新驱动。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "欧版" @@ -1911,14 +1909,10 @@ msgstr "编辑" msgid "Edit ActionReplay Code" msgstr "编辑 ActionReplay 代码" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "编辑设置" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "编辑本地覆盖设置" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "编辑补丁" @@ -1927,8 +1921,8 @@ msgstr "编辑补丁" msgid "Edit current perspective" msgstr "编辑当前布局" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "编辑..." @@ -1940,7 +1934,7 @@ msgstr "效果" msgid "Embedded Frame Buffer" msgstr "嵌入式帧缓冲 (EFB)" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "模拟线程已经在运行" @@ -1978,7 +1972,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "模拟 Wii 控制器" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "模拟器状态: " @@ -2002,15 +1996,15 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "启用AR记录" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "启用区块合并" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "启用边界框计算" @@ -2018,27 +2012,27 @@ msgstr "启用边界框计算" msgid "Enable Cache" msgstr "启用缓存" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "启用金手指" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "启用双核心" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "启用双核心 (加速)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "启用空闲步进" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "启用空闲步进 (加速)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "启用 MMU" @@ -2046,7 +2040,7 @@ msgstr "启用 MMU" msgid "Enable Progressive Scan" msgstr "启用逐行扫描" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "允许屏幕保护程序" @@ -2054,7 +2048,7 @@ msgstr "允许屏幕保护程序" msgid "Enable Speaker Data" msgstr "启用扬声器" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "启用宽屏" @@ -2076,7 +2070,7 @@ msgstr "" "\n" "如果没有把握,请选择1x。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -2110,23 +2104,23 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." msgstr "启用此项以提速《塞尔达传说:黄昏公主》。运行任何其它游戏时请禁用此项。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "启用自定义投影修正" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "启用杜比定向逻辑II模拟5.1环绕声。不适用于OSX。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "启用杜比定向逻辑II模拟5.1环绕声。仅适用于OpenAL后端。" @@ -2143,7 +2137,7 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2163,9 +2157,9 @@ msgstr "" msgid "End" msgstr "End" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "英语" @@ -2188,21 +2182,20 @@ msgstr "条目 %d/%d" msgid "Entry 1/%d" msgstr "条目 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "等于" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "错误" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "加载选定语言错误。正在退回系统默认。" -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2249,7 +2242,7 @@ msgstr "导出所有 Wii 存档" msgid "Export Failed" msgstr "导出失败" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "导出文件" @@ -2265,7 +2258,7 @@ msgstr "导出录制..." msgid "Export Save" msgstr "导出存档" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "导出 Wii 存档 (实验性)" @@ -2281,7 +2274,7 @@ msgstr "导出失败" msgid "Export save as..." msgstr "导出存档为..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "扩展" @@ -2297,44 +2290,44 @@ msgstr "外部参数" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "仅用于《银河战士:另一个M》的额外参数。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "提取所有文件..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "提取应用加载器..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "提取 DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "提取目录..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "提取文件..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "提取分区..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "正在提取 %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "正在提取所有文件" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "正在提取目录" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "正在提取..." @@ -2346,15 +2339,15 @@ msgstr "FIFO 字节" msgid "FIFO Player" msgstr "FIFO 回放器" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "法国" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST 大小:" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "连接失败!" @@ -2362,11 +2355,15 @@ msgstr "连接失败!" msgid "Failed to download codes." msgstr "下载代码失败。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "提取到 %s 失败!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2418,7 +2415,7 @@ msgstr "读取 banner.bin 失败" msgid "Failed to read bk header" msgstr "读取bk头失败" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2429,7 +2426,7 @@ msgstr "" "存储卡可能被截断\n" "文件位置:%llx" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2437,7 +2434,7 @@ msgstr "" "无法正确读取区块分配表备份\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2455,7 +2452,7 @@ msgstr "从文件 %d 读取数据失败" msgid "Failed to read data from file: %s" msgstr "从文件读取数据失败: %s" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2463,7 +2460,7 @@ msgstr "" "无法正确读取目录备份\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2475,7 +2472,7 @@ msgstr "" msgid "Failed to read header" msgstr "读取头部失败" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2488,7 +2485,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "无法读取 %d 的文件头" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "无法从光盘镜像读取独立 ID" @@ -2510,7 +2507,7 @@ msgstr "无法向文件 %s 写入数据" msgid "Failed to write header for %s" msgstr "写入文件头到 %s 失败" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "波斯语" @@ -2522,7 +2519,7 @@ msgstr "快速" msgid "Fast Depth Calculation" msgstr "快速深度计算" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "MMU快速版本。不是对所有游戏都有效。" @@ -2557,7 +2554,7 @@ msgstr "" "文件无法打开\n" "或没有有效的扩展名" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2570,7 +2567,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "文件不能被识别成内存卡" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "文件未压缩" @@ -2579,11 +2576,11 @@ msgstr "文件未压缩" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO: 未知打开模式 : 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "文件系统" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "文件类型 'ini' 未知! 不能打开!" @@ -2611,7 +2608,7 @@ msgstr "强制 16:9" msgid "Force 4:3" msgstr "强制 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "强制使用NTSC-J" @@ -2643,7 +2640,7 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " @@ -2653,7 +2650,7 @@ msgstr "" "建议不要勾选此项,Dolphin默认使用NTSC-U模式,当运行日版游戏时这个设置会自动开" "启。" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2665,7 +2662,7 @@ msgstr "" msgid "Forward" msgstr "前" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "转发端口(UPnP)" @@ -2708,7 +2705,7 @@ msgstr "帧范围" msgid "Frame S&kipping" msgstr "帧数跳跃(&K)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "帧数限制:" @@ -2720,9 +2717,9 @@ msgstr "录制帧数" msgid "Free Look" msgstr "自由视点" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "法语" @@ -2755,27 +2752,27 @@ msgstr "GC手柄" msgid "GX_CMD_INVL_VC" msgstr "GX_CMD_INVL_VC" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "游戏 ID:" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "游戏已经运行!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "游戏没有运行!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "游戏没有找到!" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "特定游戏设置" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "游戏配置" @@ -2783,7 +2780,7 @@ msgstr "游戏配置" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "GameCube存档文件(*.gci;*.gcs;*.sav)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2792,7 +2789,7 @@ msgid "Gamecube &Pad Settings" msgstr "Gamecube 手柄设置(&P)" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Gamecube 内存卡 (*.raw,*.gcp)" @@ -2800,12 +2797,12 @@ msgstr "Gamecube 内存卡 (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Gamecube 手柄设置" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko 代码" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2818,7 +2815,7 @@ msgstr "" "试使用原生代码。)" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "常规" @@ -2827,13 +2824,13 @@ msgstr "常规" msgid "General Settings" msgstr "常规设置" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "德语" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode: 索引大于 AR 码列表大小 %lu" @@ -2846,7 +2843,7 @@ msgstr "图形" msgid "Graphics settings" msgstr "图形设置" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "大于" @@ -2866,7 +2863,7 @@ msgstr "" "\n" "如果没有把握,请勾选此项。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "希腊语" @@ -2890,11 +2887,11 @@ msgstr "吉他 (吉他英雄)" msgid "Hacks" msgstr "修正" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "头部校检失败" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "希伯来语" @@ -2906,7 +2903,7 @@ msgstr "高度" msgid "Help" msgstr "帮助" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2926,7 +2923,7 @@ msgstr "" "\n" "感谢您的使用!\n" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2965,7 +2962,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "主机" @@ -2974,11 +2971,11 @@ msgid "Hotkey Configuration" msgstr "热键设置" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "热键" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "匈牙利语" @@ -2986,16 +2983,16 @@ msgstr "匈牙利语" msgid "Hybrid Wiimote" msgstr "混合 Wii 控制器" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "IOCTL_ES_GETVIEWS: 试图从一个未知的ticket(标签)获取数据: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 -#, c-format +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 +#, fuzzy, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" @@ -3003,15 +3000,15 @@ msgstr "" "标题ID %016llx。\n" "Dolphin 现在可能会中止。" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - 损坏的目标" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL 设置" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "红外线" @@ -3023,15 +3020,15 @@ msgstr "红外线指针" msgid "IR Sensitivity:" msgstr "红外灵敏度:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "镜像详细信息" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "镜像目录" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "意大利" @@ -3039,7 +3036,7 @@ msgstr "意大利" msgid "Icon" msgstr "图标" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -3109,7 +3106,7 @@ msgstr "" "导入的文件有一个 sav 扩展名\n" "但是它没有正确的文件头" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "进游戏" @@ -3118,7 +3115,7 @@ msgid "Increase Frame limit" msgstr "增加帧数限制" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "信息" @@ -3138,7 +3135,7 @@ msgstr "Insert" msgid "Insert Encrypted or Decrypted code here..." msgstr "在这里插入加密的或者解密的代码..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "插入 SD 卡" @@ -3150,44 +3147,44 @@ msgstr "在这里插入名称..." msgid "Install WAD" msgstr "安装 WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "安装到 Wii 菜单" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "安装异常处理程序已经呼叫,但是这个平台上还不支持。" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "正在安装 WAD..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "完整性校验失败" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "完整性校验完成" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "完整性校验完成。没有发现错误。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "分区 %d 完整性校验失败。您所转储的文件很可能已损坏或打了错误的补丁。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "界面" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "界面设置" @@ -3216,7 +3213,7 @@ msgstr "内部分辨率:" msgid "Interpreter (VERY slow)" msgstr "解释器 (非常慢)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "片头" @@ -3225,7 +3222,7 @@ msgstr "片头" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "无效大小(%x) 或 魔字(%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "无效值!" @@ -3233,16 +3230,16 @@ msgstr "无效值!" msgid "Invalid bat.map or dir entry" msgstr "无效 bat.map 或 目录项目" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "无效事件类型 %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "无效文件" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3269,34 +3266,36 @@ msgstr "无效的搜索字串 (无法转换成数字)" msgid "Invalid search string (only even string lengths supported)" msgstr "无效的搜索字符串(仅支持相等长度的字符串)" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "无效状态" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "意大利语" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "日本" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "JIT 重编译器 (推荐)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "JITIL 实验性重编译器" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "日语" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "韩国" @@ -3318,8 +3317,9 @@ msgstr "前端显示" msgid "Key" msgstr "按键" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "韩语" @@ -3337,7 +3337,7 @@ msgstr "左键" msgid "L-Analog" msgstr "L-模拟" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "语言:" @@ -3346,7 +3346,7 @@ msgstr "语言:" msgid "Last %i" msgstr "最近 %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "延迟:" @@ -3385,11 +3385,11 @@ msgstr "" "左/右单击得到更多选项。\n" "中键单击清除。" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "小于" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "依据FPS限速" @@ -3481,11 +3481,11 @@ msgstr "载入状态 9" msgid "Load State..." msgstr "载入状态..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "加载Wii系统菜单" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "加载Wii系统菜单 %d%c" @@ -3537,12 +3537,12 @@ msgstr "" msgid "Logger Outputs" msgstr "记录输出" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "记录中" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "丢失服务器连接!" @@ -3559,7 +3559,7 @@ msgstr "" "MD5 不匹配\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU 破解加速" @@ -3573,11 +3573,11 @@ msgstr "MadCatz Gameshark 文件(*.gcs)" msgid "Main Stick" msgstr "主摇杆" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "制作者ID:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "制作者:" @@ -3614,7 +3614,7 @@ msgid "Memory Byte" msgstr "内存字节" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "内存卡" @@ -3624,7 +3624,7 @@ msgid "" "could mangle stuff!" msgstr "内存卡管理器 ▲注意▲-使用前先备份,进行过修复但仍有可能损坏数据!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3641,7 +3641,7 @@ msgstr "" "%s\n" "你想复制旧文件到这个新位置吗?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "存储卡文件大小与文件头大小不匹配" @@ -3649,7 +3649,7 @@ msgstr "存储卡文件大小与文件头大小不匹配" msgid "Menu" msgstr "菜单" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "麦克" @@ -3662,7 +3662,7 @@ msgstr "最小" msgid "Misc" msgstr "其它" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "其它设置" @@ -3686,11 +3686,11 @@ msgstr "" msgid "Monospaced font" msgstr "等宽字体" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "动感强化器" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "马达" @@ -3809,15 +3809,15 @@ msgstr "小键盘 Tab" msgid "NP Up" msgstr "小键盘上" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "名称:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "名称:" @@ -3827,7 +3827,7 @@ msgstr "名称:" msgid "Native GCI files(*.gci)" msgstr "内部 GCI 文件(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "新建扫描" @@ -3836,7 +3836,7 @@ msgstr "新建扫描" msgid "Next Page" msgstr "下一页" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "下一扫描" @@ -3844,11 +3844,11 @@ msgstr "下一扫描" msgid "Nickname :" msgstr "昵称 :" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "无国家 (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "未找到镜像或者WAD" @@ -3887,24 +3887,25 @@ msgstr "没有已录制文件" msgid "No save folder found for title %s" msgstr "没有找到名称为 %s 的存档文件夹" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "无" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "书面挪威语" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "不等于" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "未设置" @@ -3913,11 +3914,11 @@ msgstr "未设置" msgid "Not a Wii save or read failure for file header size %x" msgstr "不是 Wii 存档或因为文件标头大小 %x 无法读取" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "未连接" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "说明" @@ -3938,7 +3939,7 @@ msgstr "提示" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "代码数量: " @@ -3959,7 +3960,7 @@ msgstr "对象" msgid "Object Range" msgstr "对象范围" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "关闭" @@ -3967,7 +3968,7 @@ msgstr "关闭" msgid "Offset:" msgstr "偏移量:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "屏幕显示消息" @@ -3985,11 +3986,11 @@ msgstr "只有 %d 区块有效" msgid "Open" msgstr "打开" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "打开包含文件夹(&C)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "打开 Wii 存档目录(&S)" @@ -4019,17 +4020,13 @@ msgstr "OpenCL 纹理解码器" msgid "OpenMP Texture Decoder" msgstr "OpenMP纹理解码器" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "在外部文本编辑器中打开本游戏的默认 (只读) 设置。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "在外部文本编辑器中打开用户指定的覆盖设置。" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "选项" @@ -4053,7 +4050,7 @@ msgstr "" msgid "Other" msgstr "其他" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -4067,11 +4064,11 @@ msgstr "输出" msgid "P&lay Recording..." msgstr "播放录制(&L)..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "手柄" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "手柄" @@ -4095,26 +4092,26 @@ msgstr "段落" msgid "Parameters" msgstr "参数" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "分区 %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 -#, c-format -msgid "Partition doesn't exist: %lu" +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 +#, fuzzy, c-format +msgid "Partition doesn't exist: %u" msgstr "分区不存在: %lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "补丁" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "路径" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "暂停" @@ -4127,7 +4124,7 @@ msgstr "在影片末尾暂停" msgid "Per-Pixel Lighting" msgstr "逐像素照明" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "完美" @@ -4138,8 +4135,8 @@ msgstr "布局 %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "开始" @@ -4151,7 +4148,7 @@ msgstr "播放录制" msgid "Play/Pause" msgstr "开始/暂停" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "尚可" @@ -4159,11 +4156,11 @@ msgstr "尚可" msgid "Playback Options" msgstr "回放选项" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "玩家" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "请确认..." @@ -4175,36 +4172,36 @@ msgstr "存储前请先创建一个布局" msgid "Plus-Minus" msgstr "加-减" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "波兰语" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "端口 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "端口 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "端口 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "端口 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "端口 :" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "葡萄牙语" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "葡萄牙语(巴西)" @@ -4217,7 +4214,7 @@ msgstr "后处理效果:" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "在PlayController中提前结束影片。%u + 8 > %u" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "在 PlayWiimote 中提前结束影片。%u + %d > %u" @@ -4239,7 +4236,7 @@ msgstr "上一页" msgid "Previous Page" msgstr "上一页" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "上一个值" @@ -4263,8 +4260,8 @@ msgstr "清除缓存" msgid "Question" msgstr "询问" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "退出" @@ -4286,7 +4283,7 @@ msgstr "R-模拟" msgid "RAM" msgstr "内存" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "俄罗斯" @@ -4325,7 +4322,7 @@ msgstr "真实 Wii 控制器" msgid "Record" msgstr "录制" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "录制输入" @@ -4377,10 +4374,10 @@ msgstr "刷新列表" msgid "Refresh game list" msgstr "刷新游戏列表" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "移除" @@ -4403,7 +4400,7 @@ msgstr "渲染到主窗口" msgid "Reset" msgstr "重置" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "结果" @@ -4411,7 +4408,7 @@ msgstr "结果" msgid "Return" msgstr "回车" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "修订版:" @@ -4424,17 +4421,17 @@ msgstr "向右键" msgid "Right Stick" msgstr "右摇杆" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "震动" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "在专用的线程中运行DSP LLE (不推荐: 可能导致卡死)。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "俄语" @@ -4508,12 +4505,12 @@ msgstr "保存状态 9" msgid "Save State..." msgstr "保存状态..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "另存为..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "保存压缩的GCM/镜像" @@ -4521,7 +4518,7 @@ msgstr "保存压缩的GCM/镜像" msgid "Save current perspective" msgstr "保存当前布局" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "保存解压缩的GCM/镜像" @@ -4534,16 +4531,16 @@ msgstr "即时存档影片 %s 被破坏, 影片录制停止..." msgid "Scaled EFB Copy" msgstr "缩放 EFB 副本" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "正在扫描%s" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "正在扫描镜像" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "正在扫描..." @@ -4559,11 +4556,11 @@ msgstr "Scroll Lock" msgid "Search" msgstr "搜索" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "搜索过滤" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "搜索子目录" @@ -4586,12 +4583,12 @@ msgstr "未在SYSCONF中找到部分%s" msgid "Select" msgstr "选择" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "选择录制文件" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "选择要安装的 Wii WAD 文件" @@ -4612,19 +4609,19 @@ msgstr "选择要导入的存档" msgid "Select floating windows" msgstr "选择浮动窗口" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "选择要载入的文件" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "选择一个存档文件" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "选择要载入的状态" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "选择要保存的状态" @@ -4646,7 +4643,7 @@ msgstr "" "\n" "如果没有把握,请选择“自动”。" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "所选控制器预设不存在" @@ -4670,39 +4667,28 @@ msgstr "" "如果没有把握,请使用您的桌面分辨率。\n" "如果仍然不能确定,使用最高的有效分辨率。" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" -"选择供内部使用的图像应用程序接口。\n" -"Direct3D 9 通常最快,而 OpenGL 会更加精确,\n" -"Direct3D 11 介乎两者之间。\n" -"请注意 Direct3D 后端只在 Windows 下可用。\n" -"\n" -"如果没有把握,请选择 Direct3D 11。" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -"选择内部使用哪种图像应用程序接口。\n" -"Direct3D 9 通常最快,而 OpenGL 更加精确,\n" -"Direct3D 11 介乎两者之间。\n" -"请注意 Direct3D 后端只在 Windows 下可用。\n" -"\n" -"如果没有把握,请选择 OpenGL。" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "发送" @@ -4714,16 +4700,16 @@ msgstr "传感器栏位置:" msgid "Separator" msgstr "Separator" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "塞尔维亚语" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "串行端口 1 - 这是网络适配器等设备使用的端口" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "设置为默认镜像(&D)" @@ -4732,30 +4718,30 @@ msgstr "设置为默认镜像(&D)" msgid "Set as default Memcard %c" msgstr "设置为默认内存卡 %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive: 索引大于 AR 码列表大小 %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "设置延迟 (以毫秒计) 。较高的值或将减少音频噼啪声。仅适用于OpenAL后端。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "设置..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "安装Wii内存:无法创建设置文件" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "震动" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "短名称:" @@ -4779,7 +4765,7 @@ msgstr "显示状态栏(&S)" msgid "Show &Toolbar" msgstr "显示工具栏(&T)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "显示默认值" @@ -4819,7 +4805,7 @@ msgstr "显示日本" msgid "Show Korea" msgstr "显示韩国" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "显示语言:" @@ -4859,11 +4845,11 @@ msgstr "显示 Wad" msgid "Show Wii" msgstr "显示 Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "停止游戏时显示确认对话框" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4881,7 +4867,7 @@ msgstr "显示第一区块" msgid "Show lag counter" msgstr "显示丢帧计数器" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4931,23 +4917,24 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "横置 Wii 控制器" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "简体中文" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "大小" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "跳过 BIOS" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "跳过DCBZ清除" @@ -4978,11 +4965,11 @@ msgstr "" msgid "Slot %i" msgstr "插槽 %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "插槽 A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "插槽 B" @@ -4990,7 +4977,7 @@ msgstr "插槽 B" msgid "Snapshot" msgstr "截图" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "软件渲染器" @@ -5005,27 +4992,27 @@ msgstr "" "该渲染器仅适用于调试目的。\n" "您真的想要启用软件渲染吗? 如果不确定,请选择“否”。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "声音设置" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "声音后端 %s 无效." -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "声音缓冲区创建失败: %s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "空格" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "西班牙语" @@ -5052,7 +5039,7 @@ msgstr "" "\n" "如果没有把握,请选择 640x528。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "提升光盘传输率" @@ -5060,13 +5047,13 @@ msgstr "提升光盘传输率" msgid "Square Stick" msgstr "方块键" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "标准控制器" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "开始" @@ -5082,7 +5069,7 @@ msgstr "开始录制(&C)" msgid "Start Recording" msgstr "开始录制" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "状态" @@ -5090,7 +5077,7 @@ msgstr "状态" msgid "State Saves" msgstr "状态存档" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "方向盘" @@ -5139,31 +5126,32 @@ msgstr "成功导出文件到 %s" msgid "Successfully imported save files" msgstr "成功导入存档文件" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "瑞典语" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "挥舞" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "同步 GPU 线程" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" "同步 GPU 与 CPU 线程以帮助防止双核模式下的偶发卡死。 (开=兼容,关=快速)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "系统语言:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "台湾" @@ -5194,7 +5182,7 @@ msgstr "右唱盘" msgid "Take Screenshot" msgstr "屏幕截图" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "TaruKonga (森喜刚鼓)" @@ -5214,11 +5202,11 @@ msgstr "纹理缓存" msgid "Texture Format Overlay" msgstr "纹理格式覆盖" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD 安装成功" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "地址无效" @@ -5226,13 +5214,13 @@ msgstr "地址无效" msgid "The checksum was successfully fixed" msgstr "校检和成功修复" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "选择的目录已经存在于列表" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -5253,7 +5241,7 @@ msgstr "文件%s无法以写入形式打开。请检查该文件是否已经被 msgid "The file %s was already open, the file header will not be written." msgstr "文件 %s 已经打开,文件头不会被写入。" -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "您指定的文件 %s 不存在" @@ -5286,25 +5274,25 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "您正在试图复制的存档文件大小无效" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "您的系统不支持选定的语言。正在退回系统默认。" -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "服务器与客户端的 NetPlay 版本不兼容!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "服务器已满!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "服务器回应: 游戏正在运行!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "服务器发送了一个未知错误消息!" @@ -5313,21 +5301,21 @@ msgstr "服务器发送了一个未知错误消息!" msgid "The specified file \"%s\" does not exist" msgstr "指定的文件 \"%s\" 不存在" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "这个值无效" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "主题:" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "必须有一个标签给 00000001/00000002。你的NAND转储可能不完整。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5335,13 +5323,13 @@ msgstr "" "这些设置将覆盖核心Dolphin设置。\n" "未决设置将使用Dolphin的设置。" -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "此Action Replay模拟器不支持修改Action Replay本身的代码。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "这会导致 Wii 菜单和一些游戏减速。" @@ -5365,7 +5353,7 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5375,7 +5363,7 @@ msgstr "" "该选项将游戏速度限制为制定的帧率 (NTSC全速为60,PAL全速为50) 。也可以选择音频" "以使用DSP限制速度 (可能修正咔嗒声但也可能导致持续的噪音,因游戏而异) 。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5385,7 +5373,7 @@ msgstr "" "这将分离视频与 CPU 线程,以便于在不同的核心中运行。\n" "在有多于一个核心的 PC 中将带来大幅提速,但可能导致偶发性的崩溃或故障。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "这将允许你手动编辑 INI 配置文件" @@ -5394,12 +5382,12 @@ msgstr "这将允许你手动编辑 INI 配置文件" msgid "Threshold" msgstr "阈值" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "倾斜" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "标题" @@ -5434,15 +5422,16 @@ msgid "Toggle IR" msgstr "切换内部分辨率" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "顶部" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "繁体中文" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "已经尝试载入未知文件类型." @@ -5462,7 +5451,7 @@ msgstr "" "正在尝试从无效的 SYSCONF 中读取\n" "Wiimote bt ids 不可用" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "土耳其语" @@ -5478,12 +5467,12 @@ msgstr "类型" msgid "UDP Port:" msgstr "UDP 端口:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wii 控制器" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "未知" @@ -5492,7 +5481,7 @@ msgstr "未知" msgid "UNKNOWN_%02X" msgstr "UNKNOWN_%02X" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "美国" @@ -5505,9 +5494,9 @@ msgstr "" "项目未修正。" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 -#, c-format +#, fuzzy, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5532,11 +5521,11 @@ msgstr "撤销保存状态" msgid "Unexpected 0x80 call? Aborting..." msgstr "意外的 0x80 呼叫? 正在中止..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "未知" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "未知 DVD 命令 %08x - 致命错误" @@ -5551,12 +5540,12 @@ msgstr "未知指令 0x%08x" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "未知的项目类型 %i 在 SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "收到未知的消息,ID: %d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "收到未知的消息,ID:%d 来自玩家:%d 剔除玩家!" @@ -5566,16 +5555,16 @@ msgstr "收到未知的消息,ID:%d 来自玩家:%d 剔除玩家!" msgid "Up" msgstr "向上键" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "更新" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "直握 Wii 控制器" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "使用欧洲 RGB60 模式 (PAL60)" @@ -5583,11 +5572,11 @@ msgstr "使用欧洲 RGB60 模式 (PAL60)" msgid "Use Fullscreen" msgstr "全屏显示" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "使用十六进制" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "使用警告程序" @@ -5650,11 +5639,11 @@ msgstr "实用扩展" msgid "V-Sync" msgstr "垂直同步" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "VBeam 破解加速" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "值" @@ -5662,7 +5651,7 @@ msgstr "值" msgid "Value:" msgstr "值:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "值: " @@ -5674,7 +5663,7 @@ msgstr "详细" msgid "Vertex Streaming Hack" msgstr "顶点流破解" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "视频" @@ -5682,7 +5671,7 @@ msgstr "视频" msgid "Virtual" msgstr "虚拟" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "音量" @@ -5714,15 +5703,15 @@ msgstr "" msgid "Warning" msgstr "警告" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "警告 - 正在错误的终端模式下开始 DOL!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "警告 - 正在错误的终端模式下开始 ELF!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "警告 - 正在错误的终端模式下开始 ISO!" @@ -5817,19 +5806,19 @@ msgstr "强制宽屏" msgid "Width" msgstr "宽度" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii 控制台" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "Wii NAND 根目录:" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii 存档文件 (*.bin)|*.bin" @@ -5842,12 +5831,18 @@ msgstr "WiiWAD: 不能从文件读取" msgid "Wiimote" msgstr "Wii 控制器" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wii 控制器" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "Wii 控制器 %i" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wii 控制器已连接" @@ -5879,14 +5874,14 @@ msgstr "右 Windows" msgid "Word Wrap" msgstr "自动换行" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "工作中..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "写入存储卡 (GC)" @@ -5906,21 +5901,36 @@ msgstr "写入到文件" msgid "Write to Window" msgstr "写入到窗口" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 CreateSourceVoice failed: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 加载失败: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 主声音创建失败: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 CreateSourceVoice failed: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 加载失败: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 主声音创建失败: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "XF 注册" @@ -5951,15 +5961,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "你不能关闭含有页面的面板。" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "您必须选择一个游戏!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "您必须输入一个名称!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "您必须输入一个有效的十进制、十六进制或八进制值。" @@ -5967,7 +5977,7 @@ msgstr "您必须输入一个有效的十进制、十六进制或八进制值。 msgid "You must enter a valid profile name." msgstr "您必须输入一个有效的预设名称。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "您必须重新启动Dolphin以使改动生效。 " @@ -5981,7 +5991,7 @@ msgstr "" "是否要现在停止以处理这个问题?\n" "如果选择“否”,声音可能会出现混乱。" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -6000,15 +6010,15 @@ msgstr "" "正确的大小为 0x%04x (但您的是 0x%04llx)\n" "是否要生成一个新的?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "塞尔达传说:黄昏公主 修正" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "Zero 3 代码不支持" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Dophin 未知的 Zero 代码: %08x" @@ -6066,29 +6076,24 @@ msgstr "" "\n" "如果没有把握,请不要勾选此项。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "应用程序载入器 (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT: Reading Opcode from %x. Please report." - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "s" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "未知的类型 %d (预期为 %d)" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "接收到未知消息" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute returned -1 on application run!" @@ -6103,3 +6108,48 @@ msgstr "近剪裁平面修正: " #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| 或" + +#~ msgid "Could not create %s" +#~ msgstr "无法创建 %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "Edit Local Overrides" +#~ msgstr "编辑本地覆盖设置" + +#~ msgid "Opens the user specified overrides in an external text editor." +#~ msgstr "在外部文本编辑器中打开用户指定的覆盖设置。" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use Direct3D 11." +#~ msgstr "" +#~ "选择供内部使用的图像应用程序接口。\n" +#~ "Direct3D 9 通常最快,而 OpenGL 会更加精确,\n" +#~ "Direct3D 11 介乎两者之间。\n" +#~ "请注意 Direct3D 后端只在 Windows 下可用。\n" +#~ "\n" +#~ "如果没有把握,请选择 Direct3D 11。" + +#~ msgid "" +#~ "Selects what graphics API to use internally.\n" +#~ "Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " +#~ "Direct3D 11 is somewhere between the two.\n" +#~ "Note that the Direct3D backends are only available on Windows.\n" +#~ "\n" +#~ "If unsure, use OpenGL." +#~ msgstr "" +#~ "选择内部使用哪种图像应用程序接口。\n" +#~ "Direct3D 9 通常最快,而 OpenGL 更加精确,\n" +#~ "Direct3D 11 介乎两者之间。\n" +#~ "请注意 Direct3D 后端只在 Windows 下可用。\n" +#~ "\n" +#~ "如果没有把握,请选择 OpenGL。" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT: Reading Opcode from %x. Please report." diff --git a/Languages/po/zh_TW.po b/Languages/po/zh_TW.po index a4ef9eb2fd..112c576df3 100644 --- a/Languages/po/zh_TW.po +++ b/Languages/po/zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Dolphin Emulator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-09 06:28-0500\n" +"POT-Creation-Date: 2013-11-03 08:51-0600\n" "PO-Revision-Date: 2013-09-10 08:16+0000\n" "Last-Translator: delroth \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/dolphin-" @@ -20,13 +20,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:516 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:518 msgid " (too many to display)" msgstr " (要顯示的項目太多)" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:291 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:521 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:558 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:295 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:527 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:564 msgid " Game : " msgstr " 遊戲:" @@ -34,7 +34,7 @@ msgstr " 遊戲:" msgid "! NOT" msgstr "! 非" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:58 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:23 #, c-format msgid "" "\"%s\" does not exist.\n" @@ -58,12 +58,12 @@ msgstr "" msgid "%1$sCopy%1$s" msgstr "%1$s複製%1$s" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:120 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:121 #, c-format msgid "%d samples" msgstr "" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:119 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:120 #, c-format msgid "%d samples (quality level %d)" msgstr "" @@ -74,26 +74,26 @@ msgstr "" msgid "%s already exists, overwrite?" msgstr "%s 已經存在,是否覆寫?" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:154 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:153 #, c-format msgid "%s failed to be scrubbed. Probably the image is corrupt." msgstr "抹除 %s 失敗。也許檔案是不正確的。" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:48 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card file size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:98 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:63 #, c-format msgid "" "%s failed to load as a memorycard \n" " Card size is invalid (0x%x bytes)" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:78 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:43 #, c-format msgid "" "%s failed to load as a memorycard \n" @@ -105,7 +105,7 @@ msgstr "" msgid "%s failed to open" msgstr "開啟 %s 失敗" -#: Source/Core/Core/Src/x64MemTools.cpp:182 +#: Source/Core/Core/Src/x64MemTools.cpp:154 #, c-format msgid "%s failed: kr=%x" msgstr "" @@ -115,7 +115,7 @@ msgstr "" msgid "%s is a 0 byte file" msgstr "%s 為 0 位元的檔案" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:146 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:145 #, c-format msgid "%s is already compressed! Cannot compress it further." msgstr "%s 已經被壓縮過了!無法再次進行壓縮。" @@ -173,11 +173,11 @@ msgstr "作弊檔管理器(&C)" msgid "&DSP Settings" msgstr "DSP 設定(&D)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:879 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 msgid "&Delete ISO..." msgstr "刪除 ISO 檔(&D)..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:900 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 msgid "&Delete selected ISOs..." msgstr "刪除已選取的 ISO 檔(&D)..." @@ -241,7 +241,7 @@ msgstr "暫停(&P)" msgid "&Play" msgstr "執行(&P)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:852 msgid "&Properties" msgstr "屬性(&P)" @@ -285,7 +285,7 @@ msgstr "檢視(&V)" msgid "&Wiimote Settings" msgstr "Wiimote 設定(&W)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:853 msgid "&Wiki" msgstr "&Wiki" @@ -321,7 +321,7 @@ msgstr "" msgid "1.5x Native (960x792)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 msgid "16 bit" msgstr "16 位元" @@ -337,7 +337,7 @@ msgstr "" msgid "2x Native (1280x1056)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:149 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:148 msgid "32 bit" msgstr "32 位元" @@ -353,7 +353,7 @@ msgstr "" msgid "4x Native (2560x2112)" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:147 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:146 msgid "8 bit" msgstr "8 位元" @@ -365,7 +365,7 @@ msgstr "<插入名稱>" msgid "" msgstr "<無解析度設定>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:86 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 msgid "" msgstr "<無>" @@ -373,7 +373,7 @@ msgstr "<無>" msgid "" msgstr "<按任意鍵>" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:289 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 msgid "" msgstr "<系統>" @@ -381,13 +381,13 @@ msgstr "<系統>" msgid "A" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:233 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:266 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:234 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:270 msgid "A NetPlay window is already open!!" msgstr "已經開啟一個網路對戰視窗!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:370 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:404 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:372 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:406 msgid "A game is not currently running." msgstr "目前沒有執行遊戲。" @@ -406,21 +406,22 @@ msgid "" " - DSP Emulator Engine Must be the same on all computers!\n" " - DSP on Dedicated Thread [OFF]\n" " - Framelimit NOT set to [Audio]\n" +" - Manually set the extensions for each wiimote\n" "\n" "All players should use the same Dolphin version and settings.\n" "All memory cards must be identical between players or disabled.\n" -"Wiimote support has not been implemented!\n" +"Wiimote support is probably terrible. Don't use it.\n" "\n" "The host must have the chosen TCP port open/forwarded!\n" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:94 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:99 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:95 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:100 msgid "AM-Baseboard" msgstr "AM-Baseboard" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:105 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:308 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:104 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 msgid "AR Codes" msgstr "AR 代碼" @@ -464,20 +465,20 @@ msgstr "" "兇手代碼:\n" "%s" -#: Source/Core/Core/Src/ActionReplay.cpp:657 +#: Source/Core/Core/Src/ActionReplay.cpp:663 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Add Code (%s)" msgstr "Action Replay 錯誤:無效的大小 (%08x : 位址 = %08x) 於添加的代碼 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:745 +#: Source/Core/Core/Src/ActionReplay.cpp:751 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Fill and Slide " "(%s)" msgstr "Action Replay 錯誤:無效的大小 (%08x : 位址 = %08x) 於輸入 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:537 +#: Source/Core/Core/Src/ActionReplay.cpp:543 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Ram Write And " @@ -485,7 +486,7 @@ msgid "" msgstr "" "Action Replay 錯誤:無效的大小 (%08x : 位址 = %08x) 於 Ram 寫入及 輸入 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:597 +#: Source/Core/Core/Src/ActionReplay.cpp:603 #, c-format msgid "" "Action Replay Error: Invalid size (%08x : address = %08x) in Write To " @@ -493,39 +494,39 @@ msgid "" msgstr "" "Action Replay 錯誤:無效的大小 (%08x : 位址 = %08x) 於寫入至 指示器 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:792 +#: Source/Core/Core/Src/ActionReplay.cpp:798 #, c-format msgid "Action Replay Error: Invalid value (%08x) in Memory Copy (%s)" msgstr "Action Replay 錯誤:無效的數值 (%08x) 於記憶體複製 (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:672 +#: Source/Core/Core/Src/ActionReplay.cpp:678 #, c-format msgid "" "Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n" "Master codes are not needed. Do not use master codes." msgstr "" -#: Source/Core/Core/Src/ActionReplay.cpp:184 +#: Source/Core/Core/Src/ActionReplay.cpp:188 #, c-format msgid "Action Replay Error: invalid AR code line: %s" msgstr "Action Replay 錯誤:無效的 AR 代碼行: %s" -#: Source/Core/Core/Src/ActionReplay.cpp:862 +#: Source/Core/Core/Src/ActionReplay.cpp:868 #, c-format msgid "Action Replay: Conditional Code: Invalid Size %08x (%s)" msgstr "Action Replay:有條件的代碼:無效的大小 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:935 +#: Source/Core/Core/Src/ActionReplay.cpp:941 #, c-format msgid "Action Replay: Invalid Normal Code Type %08x (%s)" msgstr "Action Replay:無效的一般代碼類型 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:886 +#: Source/Core/Core/Src/ActionReplay.cpp:892 #, c-format msgid "Action Replay: Normal Code %i: Invalid subtype %08x (%s)" msgstr "Action Replay:一般代碼 %i: 無效的副類型 %08x (%s)" -#: Source/Core/Core/Src/ActionReplay.cpp:828 +#: Source/Core/Core/Src/ActionReplay.cpp:834 #, c-format msgid "Action Replay: Normal Code 0: Invalid Subtype %08x (%s)" msgstr "Action Replay:一般代碼 0: 無效的副類型 %08x (%s)" @@ -539,11 +540,11 @@ msgstr "配接器:" msgid "Add" msgstr "新增" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1369 msgid "Add ActionReplay Code" msgstr "新增 ActionReplay 代碼" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1259 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1288 msgid "Add Patch" msgstr "新增修正" @@ -551,9 +552,9 @@ msgstr "新增修正" msgid "Add new pane" msgstr "新增面版" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:416 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:438 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:440 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:462 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 msgid "Add..." msgstr "新增..." @@ -604,36 +605,36 @@ msgstr "調整模擬搖桿控制壓力需要活動的按鈕。" msgid "Advanced" msgstr "進階" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:567 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:568 msgid "Advanced Settings" msgstr "進階設定" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:620 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:619 msgid "All GC/Wii files (elf, dol, gcm, iso, wbfs, ciso, gcz, wad)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:809 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 msgid "All GC/Wii images (gcm, iso, wbfs, ciso, gcz)" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1192 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1183 msgid "All Gamecube GCM files (gcm)" msgstr "所有 Gamecube GCM 檔案 (gcm)" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1475 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1489 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1480 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1494 msgid "All Save States (sav, s##)" msgstr "所有即時存檔 (sav, s##)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1190 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1181 msgid "All Wii ISO files (iso)" msgstr "所有 Wii ISO 檔案 (iso)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1201 msgid "All compressed GC/Wii ISO files (gcz)" msgstr "所有已壓縮的 GC/Wii ISO 檔案 (gcz)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:107 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:108 msgid "All files (*.*)|*.*" msgstr "所有檔案 (*.*)|*.*" @@ -653,19 +654,19 @@ msgstr "各向異性過濾:" msgid "Anti-Aliasing:" msgstr "邊緣抗鋸齒:" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:299 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:298 msgid "Apploader is the wrong size...is it really an apploader?" msgstr "程式讀取器為錯誤的大小...它是程式讀取器嗎?" -#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:293 +#: Source/Core/DiscIO/Src/VolumeDirectory.cpp:292 msgid "Apploader unable to load from file" msgstr "程式讀取器無法從檔案中讀取" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:834 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:833 msgid "Apploader:" msgstr "程式讀取器:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:112 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:111 msgid "Apply" msgstr "套用" @@ -676,7 +677,7 @@ msgid "" "If unsure, select (off)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:290 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 msgid "Arabic" msgstr "阿拉伯語" @@ -685,7 +686,7 @@ msgstr "阿拉伯語" msgid "Are you sure you want to delete \"%s\"?" msgstr "是否確認刪除 \"%s\" ?" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1015 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 msgid "" "Are you sure you want to delete these files?\n" "They will be gone forever!" @@ -693,7 +694,7 @@ msgstr "" "是否真的要刪除這些檔案?\n" "刪了之後就回不來了哦!" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1006 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:997 msgid "Are you sure you want to delete this file? It will be gone forever!" msgstr "是否真的要刪除這些檔案?刪了之後就回不來了哦!" @@ -701,7 +702,11 @@ msgstr "是否真的要刪除這些檔案?刪了之後就回不來了哦!" msgid "Arm JIT (experimental)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:782 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:46 +msgid "Arm JITIL (experimental)" +msgstr "" + +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:781 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:286 msgid "Aspect Ratio:" msgstr "畫面比例:" @@ -710,12 +715,12 @@ msgstr "畫面比例:" msgid "At least one pane must remain open." msgstr "必須剩餘至少一個面板。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:249 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 msgid "Audio" msgstr "聲音" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:681 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:680 msgid "Audio Backend:" msgstr "聲音裝置:" @@ -723,7 +728,7 @@ msgstr "聲音裝置:" msgid "AudioCommon: Error opening AO device.\n" msgstr "AudioCommon:開啟 AO 裝置出錯。\n" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:248 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:284 msgid "Auto" msgstr "自動" @@ -759,16 +764,16 @@ msgstr "" msgid "Back" msgstr "返回" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:685 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:684 msgid "Backend Settings" msgstr "裝置設定" -#: Source/Plugins/Plugin_VideoSoftware/Src/VideoConfigDialog.cpp:47 +#: Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp:47 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:212 msgid "Backend:" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:82 msgid "Background Input" msgstr "背景輸入" @@ -786,15 +791,15 @@ msgid "Balance Board" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:621 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:293 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 msgid "Banner" msgstr "橫幅" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:537 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 msgid "Banner Details" msgstr "圖示明細" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:499 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:534 msgid "Banner:" msgstr "橫幅:" @@ -806,7 +811,7 @@ msgstr "Bar" msgid "Basic" msgstr "基本" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:561 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:562 msgid "Basic Settings" msgstr "基本設定" @@ -814,7 +819,7 @@ msgstr "基本設定" msgid "Bass" msgstr "Bass" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:174 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:139 msgid "Block Allocation Table checksum failed" msgstr "區塊分配表校驗失敗" @@ -835,7 +840,7 @@ msgid "Blue Right" msgstr "藍 右" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:273 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 msgid "Bottom" msgstr "下方" @@ -844,7 +849,7 @@ msgstr "下方" msgid "Bound Controls: %lu" msgstr "綁定控制器:%lu" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 msgid "Broken" msgstr "破損" @@ -852,7 +857,7 @@ msgstr "破損" msgid "Browse" msgstr "瀏覽" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:246 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:247 msgid "Browse for a directory to add" msgstr "瀏覽要新增的資料夾" @@ -860,11 +865,11 @@ msgstr "瀏覽要新增的資料夾" msgid "Browse for an ISO directory..." msgstr "瀏覽 ISO 資料夾..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1073 msgid "Browse for output directory" msgstr "瀏覽輸出的資料夾" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:351 msgid "Buffer:" msgstr "緩衝:" @@ -874,7 +879,7 @@ msgstr "緩衝:" msgid "Buttons" msgstr "按鈕" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 msgid "" "Bypass the clearing of the data cache by the DCBZ instruction. Usually leave " "this option disabled." @@ -896,7 +901,7 @@ msgstr "C-搖桿" msgid "CP reg" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:553 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 msgid "CPU Emulator Engine" msgstr "CPU 模擬引擎" @@ -913,17 +918,17 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1848 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp:1847 #, c-format msgid "Can't find WiiMote by connection handle %02x" msgstr "" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:672 -#: Source/Core/Core/Src/HW/DVDInterface.cpp:682 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:676 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:686 msgid "Can't read from DVD_Plugin - DVD-Interface: Fatal Error" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:114 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:113 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:28 msgid "Cancel" msgstr "取消" @@ -935,11 +940,11 @@ msgstr "取消" msgid "Cannot open %s" msgstr "無法開啟 %s" -#: Source/Core/Core/Src/CoreTiming.cpp:128 +#: Source/Core/Core/Src/CoreTiming.cpp:106 msgid "Cannot unregister events with events pending" msgstr "事件未決定時無法註銷事件" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1073 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1072 #, c-format msgid "" "Cannot use that file as a memory card.\n" @@ -947,7 +952,7 @@ msgid "" "is not a valid gamecube memory card file" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1103 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1108 msgid "" "Cannot use that file as a memory card.\n" "Are you trying to use the same file in both slots?" @@ -959,7 +964,7 @@ msgstr "" msgid "Caps Lock" msgstr "Caps Lock" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:291 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 msgid "Catalan" msgstr "加泰隆尼亞語" @@ -967,7 +972,7 @@ msgstr "加泰隆尼亞語" msgid "Center" msgstr "中心" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:587 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:596 msgid "Change" msgstr "更改" @@ -979,11 +984,11 @@ msgstr "更換光碟(&D)..." msgid "Change Disc" msgstr "更換光碟" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:579 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:588 msgid "Change Game" msgstr "更換遊戲" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:503 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:504 msgid "" "Change the language of the user interface.\n" "Requires restart." @@ -999,11 +1004,11 @@ msgstr "更改 zFar 參數符號 (在修正後)" msgid "Changes sign to zNear Parameter (after correction)" msgstr "更改 zNear 參數的符號 (在修正後)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:508 msgid "Changing this will have no effect while the emulator is running!" msgstr "更改此選項在模擬器執行時沒有效果!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:316 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:320 msgid "Chat" msgstr "聊天" @@ -1011,47 +1016,47 @@ msgstr "聊天" msgid "Cheat Code" msgstr "作弊代碼" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 msgid "Cheat Search" msgstr "尋找作弊代碼" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:17 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:254 msgid "Cheats Manager" msgstr "作弊代碼管理器" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:645 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:683 msgid "Check Partition Integrity" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 msgid "Checking integrity..." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:292 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 msgid "Chinese (Simplified)" msgstr "Chinese (Simplified)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:293 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 msgid "Chinese (Traditional)" msgstr "Chinese (Traditional)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:810 msgid "Choose a DVD root directory:" msgstr "選擇一個 DVD 根目錄:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:815 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:814 msgid "Choose a NAND root directory:" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:808 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:807 msgid "Choose a default ISO:" msgstr "選擇一個預設 ISO:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1233 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1238 msgid "Choose a directory to add" msgstr "選擇一個要添加的資料夾" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1060 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1059 msgid "Choose a file to open" msgstr "選擇一個要開啟的檔案" @@ -1059,14 +1064,14 @@ msgstr "選擇一個要開啟的檔案" msgid "Choose a memory card:" msgstr "選擇一個記憶卡:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:811 msgid "" "Choose file to use as apploader: (applies to discs constructed from " "directories only)" msgstr "選擇作為程式讀取器的檔案:(僅用於來讀取 光碟的目錄結構)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:793 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:834 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:831 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 msgid "Choose the folder to extract to" msgstr "選擇提取的資料夾存放位置" @@ -1085,7 +1090,7 @@ msgstr "Classic" msgid "Clear" msgstr "清除" -#: Source/Core/Core/Src/NetPlayServer.cpp:230 +#: Source/Core/Core/Src/NetPlayServer.cpp:239 msgid "" "Client disconnect while game is running!! NetPlay is disabled. You must " "manually stop the game." @@ -1093,7 +1098,7 @@ msgstr "在遊戲執行時客戶端斷開連接!!網路對戰已經被關閉 #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:284 #: Source/Core/DolphinWX/Src/MemcardManager.cpp:234 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:572 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:606 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:587 msgid "Close" msgstr "關閉" @@ -1102,11 +1107,11 @@ msgstr "關閉" msgid "Co&nfigure..." msgstr "設定(&N)..." -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:63 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 msgid "Code Info" msgstr "代碼訊息" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:573 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:575 msgid "Code: " msgstr "代碼:" @@ -1118,20 +1123,20 @@ msgstr "命令" msgid "Comment" msgstr "註釋" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:497 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:532 msgid "Comment:" msgstr "註釋:" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:887 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:878 msgid "Compress ISO..." msgstr "壓縮 ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:902 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:893 msgid "Compress selected ISOs..." msgstr "壓縮選擇的 ISO 檔..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Compressing ISO" msgstr "正在壓縮 ISO" @@ -1149,8 +1154,8 @@ msgstr "設定" msgid "Configure Control" msgstr "設定控制器" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:327 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:606 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:331 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:615 msgid "Configure Pads" msgstr "設定控制器" @@ -1158,13 +1163,13 @@ msgstr "設定控制器" msgid "Configure..." msgstr "模擬器設定..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1122 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1150 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1220 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1113 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1141 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1211 msgid "Confirm File Overwrite" msgstr "確認檔案覆蓋" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:583 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:584 msgid "Confirm on Stop" msgstr "" @@ -1178,7 +1183,7 @@ msgstr "連接" msgid "Connect Balance Board" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:776 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 msgid "Connect USB Keyboard" msgstr "連接 USB 鍵盤" @@ -1203,7 +1208,7 @@ msgstr "連接 Wiimote 3" msgid "Connect Wiimote 4" msgstr "連接 Wiimote 4" -#: Source/Core/DolphinWX/Src/Main.cpp:670 +#: Source/Core/DolphinWX/Src/Main.cpp:672 msgid "Connecting..." msgstr "正在連接..." @@ -1223,7 +1228,7 @@ msgstr "控制器" msgid "Convert to GCI" msgstr "轉換為 GCI" -#: Source/Core/Core/Src/CoreParameter.cpp:384 +#: Source/Core/Core/Src/CoreParameter.cpp:381 msgid "Copy failed" msgstr "複製失敗" @@ -1232,16 +1237,11 @@ msgstr "複製失敗" msgid "Copy to Memcard %c" msgstr "複製至記憶卡 %c" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:391 msgid "Core" msgstr "核心" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:148 -#, c-format -msgid "Could not create %s" -msgstr "無法建立 %s" - -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:62 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:76 #, c-format msgid "Could not initialize backend %s." msgstr "無法初始化 backend %s。" @@ -1257,12 +1257,12 @@ msgstr "" "請注意,原始的 Gamecube 及 Wii 光碟在大多數的 PC DVD 光碟機中是無法被正常讀取" "的。" -#: Source/Core/Core/Src/CoreParameter.cpp:294 +#: Source/Core/Core/Src/CoreParameter.cpp:295 #, c-format msgid "Could not recognize ISO file %s" msgstr "無法識別 ISO 檔案 %s" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:589 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:627 #, c-format msgid "Could not save %s" msgstr "無法儲存 %s" @@ -1280,11 +1280,11 @@ msgid "" "options." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1162 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1154 msgid "Couldn't find open command for extension 'ini'!" msgstr "找不到副檔名 'ini' 的開啟命令!" -#: Source/Core/Core/Src/BootManager.cpp:158 +#: Source/Core/Core/Src/BootManager.cpp:177 msgid "" "Couldn't init the core.\n" "Check your configuration." @@ -1292,17 +1292,17 @@ msgstr "" "無法初始化核心。\n" "請檢查您的設定。" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:160 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:512 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:159 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:514 msgid "Count:" msgstr "數量:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:464 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 msgid "Country:" msgstr "國別:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:163 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:567 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:162 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:569 msgid "Create AR Code" msgstr "建立 AR 代碼" @@ -1334,12 +1334,12 @@ msgstr "" msgid "Crossfade" msgstr "Crossfade" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:633 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:632 #, c-format msgid "Current directory changed from %s to %s after wxFileSelector!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:371 msgid "Custom Projection Hack" msgstr "自訂投影修正" @@ -1347,11 +1347,11 @@ msgstr "自訂投影修正" msgid "Custom Projection Hack Settings" msgstr "自訂投影修正設定" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:374 msgid "Customize some Orthographic Projection parameters." msgstr "自訂一些直線投影參數。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:294 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 msgid "Czech" msgstr "Czech" @@ -1367,20 +1367,20 @@ msgstr "十字方向鍵" msgid "DSP" msgstr "聲音" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:645 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:644 msgid "DSP Emulator Engine" msgstr "DSP 模擬引擎" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:257 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 msgid "DSP HLE emulation (fast)" msgstr "DSP HLE 模擬器 (快)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:260 msgid "DSP LLE interpreter (slow)" msgstr "DSP LLE 解釋器 (慢)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:258 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:259 msgid "DSP LLE recompiler" msgstr "DSP LLE 重編譯器 (慢)" @@ -1388,11 +1388,11 @@ msgstr "DSP LLE 重編譯器 (慢)" msgid "DSP settings" msgstr "聲音設定" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:646 msgid "DSPLLE on Separate Thread" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:831 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:830 msgid "DVD Root:" msgstr "DVD 根:" @@ -1404,15 +1404,15 @@ msgstr "" msgid "DVDLowUnencryptedRead - Fatal Error: failed to read from volume" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 msgid "Dance Mat" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:153 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:152 msgid "Data Size" msgstr "資料大小" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:476 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:500 msgid "Date:" msgstr "日期:" @@ -1441,16 +1441,16 @@ msgstr "" msgid "Decimal" msgstr "Decimal" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:884 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:875 msgid "Decompress ISO..." msgstr "解壓 ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:903 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:894 msgid "Decompress selected ISOs..." msgstr "解壓選擇的 ISO..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1091 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1227 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1082 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1218 msgid "Decompressing ISO" msgstr "ISO 解壓中" @@ -1462,7 +1462,7 @@ msgstr "" msgid "Default" msgstr "預設值" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:828 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:827 msgid "Default ISO:" msgstr "預設的 ISO:" @@ -1506,8 +1506,8 @@ msgstr "" msgid "Device" msgstr "裝置" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:737 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:791 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:736 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:790 msgid "Device Settings" msgstr "裝置設定" @@ -1515,15 +1515,12 @@ msgstr "裝置設定" msgid "Dial" msgstr "Dial" -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:145 -msgid "Direct3D11" -msgstr "Direct3D11" - -#: Source/Plugins/Plugin_VideoDX9/Src/main.cpp:140 -msgid "Direct3D9" +#: Source/Core/VideoBackends/D3D/Src/main.cpp:146 +#, fuzzy +msgid "Direct3D" msgstr "Direct3D9" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:155 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:120 msgid "" "Directory checksum failed\n" " and Directory backup checksum failed" @@ -1571,7 +1568,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:561 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:596 msgid "Disc" msgstr "光碟" @@ -1595,19 +1592,19 @@ msgstr "" msgid "Divide" msgstr "Divide" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1039 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1044 msgid "Do you want to stop the current emulation?" msgstr "您要停止目前的模擬嗎?" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:650 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:649 msgid "Dolby Pro Logic II decoder" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:901 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:906 msgid "Dolphin" msgstr "Dolphin" -#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:21 +#: Source/Core/DolphinWX/Src/AboutDolphin.cpp:20 #, c-format msgid "" "Dolphin %s\n" @@ -1638,9 +1635,8 @@ msgid "" "\n" "We are not affiliated with Nintendo in any way.\n" "Gamecube and Wii are trademarks of Nintendo.\n" -"The emulator is for educational purposes only\n" -"and should not be used to play games you do\n" -"not legally own." +"The emulator should not be used to play games\n" +"you do not legally own." msgstr "" #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:189 @@ -1664,12 +1660,12 @@ msgstr "Dolphin 模擬 Wiimote 設定" msgid "Dolphin FIFO" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1205 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1210 msgid "Dolphin GCPad Configuration" msgstr "Dolphin GC 控制器設定" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:727 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1140 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:726 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1145 msgid "Dolphin TAS Movies (*.dtm)" msgstr "Dolphin TAS 影片 (*.dtm)" @@ -1681,24 +1677,24 @@ msgstr "Dolphin Wiimote 設定" msgid "Dolphin at &Google Code" msgstr "Dolphin SVN (&G)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:354 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:355 msgid "" "Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for " "files..." msgstr "Dolphin 找不到任何 GC/Wii ISO。按兩下這裡瀏覽檔案..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:358 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:359 msgid "" "Dolphin is currently set to hide all games. Doubleclick here to show all " "games..." msgstr "Dolphin 目前被設定為隱藏所有遊戲。按兩下這裡顯示所有遊戲..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1162 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1248 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1153 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1239 msgid "Dolphin was unable to complete the requested action." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:327 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:351 msgid "" "Doubles the emulated GPU clock rate. May speed up some games (ON = Fast, OFF " "= Compatible)" @@ -1722,11 +1718,11 @@ msgstr "已下載 %lu 條代碼。 (已添加 %lu 條)" msgid "Drums" msgstr "Drums" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:87 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:88 msgid "Dummy" msgstr "空" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:648 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:647 msgid "Dump Audio" msgstr "轉儲聲音" @@ -1763,9 +1759,9 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:490 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:295 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:514 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:269 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 msgid "Dutch" msgstr "Dutch" @@ -1786,7 +1782,7 @@ msgid "" "driver." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:151 msgid "EUROPE" msgstr "EUROPE" @@ -1802,14 +1798,10 @@ msgstr "編輯" msgid "Edit ActionReplay Code" msgstr "編輯 ActionReplay 代碼" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:286 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 msgid "Edit Config" msgstr "編輯 ini 設定檔" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:294 -msgid "Edit Local Overrides" -msgstr "" - #: Source/Core/DolphinWX/Src/PatchAddEdit.h:17 msgid "Edit Patch" msgstr "編輯修正" @@ -1818,8 +1810,8 @@ msgstr "編輯修正" msgid "Edit current perspective" msgstr "編輯目前版式" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:415 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:437 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:461 msgid "Edit..." msgstr "編輯..." @@ -1831,7 +1823,7 @@ msgstr "效果" msgid "Embedded Frame Buffer" msgstr "" -#: Source/Core/Core/Src/Core.cpp:191 +#: Source/Core/Core/Src/Core.cpp:190 msgid "Emu Thread already running" msgstr "模擬器線程已經執行中" @@ -1858,7 +1850,7 @@ msgstr "" msgid "Emulated Wiimote" msgstr "模擬 Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:378 msgid "Emulation State: " msgstr "模擬狀態:" @@ -1876,15 +1868,15 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:88 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:87 msgid "Enable AR Logging" msgstr "開啟 AR 日誌" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:332 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:356 msgid "Enable Block Merging" msgstr "開啟塊合併" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:363 msgid "Enable Bounding Box Calculation" msgstr "" @@ -1892,27 +1884,27 @@ msgstr "" msgid "Enable Cache" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:549 msgid "Enable Cheats" msgstr "開啟作弊" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 msgid "Enable Dual Core" msgstr "開啟雙核心" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:546 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 msgid "Enable Dual Core (speedup)" msgstr "開啟雙核心 (加速)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:319 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 msgid "Enable Idle Skipping" msgstr "開啟略過空閒" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:547 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:548 msgid "Enable Idle Skipping (speedup)" msgstr "開啟略過空閒 (加速)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:320 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:344 msgid "Enable MMU" msgstr "開啟 MMU" @@ -1920,7 +1912,7 @@ msgstr "開啟 MMU" msgid "Enable Progressive Scan" msgstr "開啟逐行掃瞄" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:768 msgid "Enable Screen Saver" msgstr "" @@ -1928,7 +1920,7 @@ msgstr "" msgid "Enable Speaker Data" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 msgid "Enable WideScreen" msgstr "開啟寬螢幕" @@ -1945,7 +1937,7 @@ msgid "" "If unsure, select 1x." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:331 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 msgid "" "Enable fast disc access. Needed for a few games. (ON = Fast, OFF = " "Compatible)" @@ -1971,23 +1963,23 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:343 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:367 msgid "" "Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for " "ANY other game." msgstr "開啟此選項將加速塞爾達傳說:曙光公主,請勿在其它遊戲中使用。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:372 msgid "Enables Custom Projection Hack" msgstr "開啟自訂投影修正" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:516 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:517 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on " "OSX." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:519 msgid "" "Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only." msgstr "" @@ -2000,7 +1992,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:321 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:345 msgid "" "Enables the Memory Management Unit, needed for some games. (ON = Compatible, " "OFF = Fast)" @@ -2017,9 +2009,9 @@ msgstr "" msgid "End" msgstr "End" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:485 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:263 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:296 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:509 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 msgid "English" msgstr "English" @@ -2042,21 +2034,20 @@ msgstr "項目 %d/%d" msgid "Entry 1/%d" msgstr "項目 1/%d" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 msgid "Equal" msgstr "等於" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:32 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:150 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "Error" msgstr "錯誤" -#: Source/Core/DolphinWX/Src/Main.cpp:424 +#: Source/Core/DolphinWX/Src/Main.cpp:417 msgid "Error loading selected language. Falling back to system default." msgstr "讀取選擇的語系出錯。返回使用系統預設值。" -#: Source/Core/Common/Src/ChunkFile.h:221 +#: Source/Core/Common/Src/ChunkFile.h:271 #, c-format msgid "" "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). " @@ -2101,7 +2092,7 @@ msgstr "" msgid "Export Failed" msgstr "匯出失敗" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:661 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:699 msgid "Export File" msgstr "匯出檔案" @@ -2117,7 +2108,7 @@ msgstr "匯出錄像..." msgid "Export Save" msgstr "匯出存檔" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:868 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:859 msgid "Export Wii save (Experimental)" msgstr "匯出 Wii 存檔 (實驗性)" @@ -2133,7 +2124,7 @@ msgstr "" msgid "Export save as..." msgstr "匯出存檔為..." -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:288 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:289 msgid "Extension" msgstr "擴充" @@ -2149,44 +2140,44 @@ msgstr "額外參數" msgid "Extra Parameter useful in ''Metroid: Other M'' only." msgstr "僅在 ''銀河戰士:另一個 M'' 中有效的額外參數。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:636 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:674 msgid "Extract All Files..." msgstr "提取所有檔案..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:642 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:680 msgid "Extract Apploader..." msgstr "提取程式讀取器..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:643 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:681 msgid "Extract DOL..." msgstr "提取 DOL..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:632 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:670 msgid "Extract Directory..." msgstr "提取資料夾..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:634 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:672 msgid "Extract File..." msgstr "提取檔案..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:629 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:667 msgid "Extract Partition..." msgstr "提取分割區..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:750 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:788 #, c-format msgid "Extracting %s" msgstr "%s 提取中" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting All Files" msgstr "所有檔案提取中" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:733 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:771 msgid "Extracting Directory" msgstr "資料夾提取中" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:736 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:774 msgid "Extracting..." msgstr "提取中..." @@ -2198,15 +2189,15 @@ msgstr "" msgid "FIFO Player" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:154 msgid "FRANCE" msgstr "FRANCE" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:504 msgid "FST Size:" msgstr "FST 大小" -#: Source/Core/Core/Src/NetPlayClient.cpp:127 +#: Source/Core/Core/Src/NetPlayClient.cpp:129 msgid "Failed to Connect!" msgstr "連接失敗!" @@ -2214,11 +2205,15 @@ msgstr "連接失敗!" msgid "Failed to download codes." msgstr "下載代碼失敗。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:872 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:910 #, c-format msgid "Failed to extract to %s!" msgstr "提取至 %s 失敗!" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:261 +msgid "Failed to listen. Is another instance of the NetPlay server running?" +msgstr "" + #: Source/Core/Core/Src/DSP/DSPCore.cpp:66 #, c-format msgid "" @@ -2259,7 +2254,7 @@ msgstr "讀取 banner.bin 失敗" msgid "Failed to read bk header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:211 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:176 #, c-format msgid "" "Failed to read block %d of the save data\n" @@ -2267,7 +2262,7 @@ msgid "" "FilePosition:%llx" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:136 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:101 msgid "" "Failed to read block allocation table backup correctly\n" "(0x8000-0x9FFF)" @@ -2275,7 +2270,7 @@ msgstr "" "讀取正確的塊分配表備份失敗\n" "(0x8000-0x9FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:130 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:95 msgid "" "Failed to read block allocation table correctly\n" "(0x6000-0x7FFF)" @@ -2293,7 +2288,7 @@ msgstr "從檔案 %d 讀取數據失敗" msgid "Failed to read data from file: %s" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:124 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:89 msgid "" "Failed to read directory backup correctly\n" "(0x4000-0x5FFF)" @@ -2301,7 +2296,7 @@ msgstr "" "讀取目錄備份失敗\n" "(0x4000-0x5FFF)" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:118 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:83 msgid "" "Failed to read directory correctly\n" "(0x2000-0x3FFF)" @@ -2313,7 +2308,7 @@ msgstr "" msgid "Failed to read header" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:107 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 msgid "" "Failed to read header correctly\n" "(0x0000-0x1FFF)" @@ -2326,7 +2321,7 @@ msgstr "" msgid "Failed to read header for file %d" msgstr "" -#: Source/Core/DiscIO/Src/VolumeGC.cpp:48 +#: Source/Core/DiscIO/Src/VolumeGC.cpp:46 msgid "Failed to read unique ID from disc image" msgstr "從光碟中讀取唯一的 ID 失敗" @@ -2348,7 +2343,7 @@ msgstr "" msgid "Failed to write header for %s" msgstr "檔案 %s 寫入檔頭失敗" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:297 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 msgid "Farsi" msgstr "波斯語" @@ -2360,7 +2355,7 @@ msgstr "快速" msgid "Fast Depth Calculation" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:323 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:347 msgid "Fast version of the MMU. Does not work for every game." msgstr "快速版本的 MMU。可能無法在所有遊戲上執行。" @@ -2394,7 +2389,7 @@ msgstr "" "無法開啟檔案\n" "或沒有一個有效的副檔名" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:72 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:37 #, c-format msgid "" "File has the extension \"%s\"\n" @@ -2407,7 +2402,7 @@ msgstr "" msgid "File is not recognized as a memcard" msgstr "檔案未被識別為一張記憶卡" -#: Source/Core/DiscIO/Src/CompressedBlob.cpp:281 +#: Source/Core/DiscIO/Src/CompressedBlob.cpp:280 msgid "File not compressed" msgstr "檔案未壓縮" @@ -2416,11 +2411,11 @@ msgstr "檔案未壓縮" msgid "FileIO: Unknown open mode : 0x%02x" msgstr "FileIO:未知開啟模式: 0x%02x" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:549 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:584 msgid "Filesystem" msgstr "檔案系統" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1155 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1147 msgid "Filetype 'ini' is unknown! Will not open!" msgstr "檔案類型 'ini' 未知! 無法開啟!" @@ -2448,7 +2443,7 @@ msgstr "強制 16:9" msgid "Force 4:3" msgstr "強制 4:3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:554 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:555 msgid "Force Console as NTSC-J" msgstr "" @@ -2472,14 +2467,14 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:496 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:497 msgid "" "Forces NTSC-J mode for using the Japanese ROM font.\n" "Left unchecked, dolphin defaults to NTSC-U and automatically enables this " "setting when playing Japanese games." msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:62 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:27 msgid "" "Format as ascii (NTSC\\PAL)?\n" "Choose no for sjis (NTSC-J)" @@ -2491,7 +2486,7 @@ msgstr "" msgid "Forward" msgstr "向前" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:156 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:157 msgid "Forward port (UPnP)" msgstr "" @@ -2534,7 +2529,7 @@ msgstr "" msgid "Frame S&kipping" msgstr "畫格省略(&K)" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:558 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:559 msgid "Framelimit:" msgstr "畫格速限制:" @@ -2546,9 +2541,9 @@ msgstr "" msgid "Free Look" msgstr "自由視點" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:487 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:298 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:511 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 msgid "French" msgstr "French" @@ -2581,27 +2576,27 @@ msgstr "GC 控制器" msgid "GX_CMD_INVL_VC" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:460 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 msgid "Game ID:" msgstr "遊戲 ID :" -#: Source/Core/Core/Src/NetPlayClient.cpp:418 +#: Source/Core/Core/Src/NetPlayClient.cpp:473 msgid "Game is already running!" msgstr "遊戲正在執行!" -#: Source/Core/Core/Src/NetPlayClient.cpp:592 +#: Source/Core/Core/Src/NetPlayClient.cpp:744 msgid "Game isn't running!" msgstr "遊戲未執行!" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:422 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:426 msgid "Game not found!" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:397 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:421 msgid "Game-Specific Settings" msgstr "遊戲規格設定" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:302 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:325 msgid "GameConfig" msgstr "遊戲設定" @@ -2609,7 +2604,7 @@ msgstr "遊戲設定" msgid "GameCube Savegame files(*.gci;*.gcs;*.sav)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:540 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 msgid "Gamecube" msgstr "Gamecube" @@ -2618,7 +2613,7 @@ msgid "Gamecube &Pad Settings" msgstr "Gamecube 控制器設定(&P)" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:205 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1064 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1063 msgid "Gamecube Memory Cards (*.raw,*.gcp)" msgstr "Gamecube 記憶卡 (*.raw,*.gcp)" @@ -2626,12 +2621,12 @@ msgstr "Gamecube 記憶卡 (*.raw,*.gcp)" msgid "Gamecube Pad settings" msgstr "Gamecube 控制器設定" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:107 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:310 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:106 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:333 msgid "Gecko Codes" msgstr "Gecko 代碼" -#: Source/Core/Core/Src/GeckoCode.cpp:246 +#: Source/Core/Core/Src/GeckoCode.cpp:247 #, c-format msgid "" "GeckoCode failed to run (CT%i CST%i) (%s)\n" @@ -2641,7 +2636,7 @@ msgid "" msgstr "" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:160 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:537 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:203 msgid "General" msgstr "一般" @@ -2650,13 +2645,13 @@ msgstr "一般" msgid "General Settings" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:486 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:264 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:299 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:265 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 msgid "German" msgstr "German" -#: Source/Core/Core/Src/ActionReplay.cpp:439 +#: Source/Core/Core/Src/ActionReplay.cpp:445 #, c-format msgid "GetARCode: Index is greater than ar code list size %lu" msgstr "GetARCode:索引大於 ar 代碼列表大小 %lu" @@ -2669,7 +2664,7 @@ msgstr "影像" msgid "Graphics settings" msgstr "影像設定" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:194 msgid "Greater Than" msgstr "大於" @@ -2684,7 +2679,7 @@ msgid "" "If unsure, leave this checked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:300 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 msgid "Greek" msgstr "Greek" @@ -2708,11 +2703,11 @@ msgstr "Guitar" msgid "Hacks" msgstr "" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:146 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:111 msgid "Header checksum failed" msgstr "檔頭校驗失敗" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:301 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 msgid "Hebrew" msgstr "Hebrew" @@ -2724,7 +2719,7 @@ msgstr "高度" msgid "Help" msgstr "說明" -#: Source/Core/DolphinWX/Src/Main.cpp:241 +#: Source/Core/DolphinWX/Src/Main.cpp:243 msgid "" "Hi,\n" "\n" @@ -2736,7 +2731,7 @@ msgid "" "Sayonara!\n" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:232 +#: Source/Core/DolphinWX/Src/Main.cpp:234 msgid "" "Hi,\n" "\n" @@ -2772,7 +2767,7 @@ msgid "Home" msgstr "Home" #: Source/Core/DolphinWX/Src/NetWindow.cpp:80 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:144 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:145 msgid "Host" msgstr "主機" @@ -2781,11 +2776,11 @@ msgid "Hotkey Configuration" msgstr "快捷鍵設定" #: Source/Core/DolphinWX/Src/HotkeyDlg.cpp:288 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:580 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:581 msgid "Hotkeys" msgstr "快捷鍵" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:302 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 msgid "Hungarian" msgstr "Hungarian" @@ -2793,29 +2788,29 @@ msgstr "Hungarian" msgid "Hybrid Wiimote" msgstr "混合 Wiimote" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:644 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:675 #, c-format msgid "IOCTL_ES_GETVIEWS: Tried to get data from an unknown ticket: %08x/%08x" msgstr "IOCTL_ES_GETVIEWS:試圖取得資料從未知的標簽: %08x/%08x" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:905 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:942 #, c-format msgid "" -"IOCTL_ES_LAUNCH: Game tried to reload an IOS or a title that is not " -"available in your NAND dump\n" +"IOCTL_ES_LAUNCH: Game tried to reload a title that is not available in your " +"NAND dump\n" "TitleID %016llx.\n" " Dolphin will likely hang now." msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:413 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:426 msgid "IOCTL_ES_READCONTENT - bad destination" msgstr "IOCTL_ES_READCONTENT - 損毀的目標" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:735 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:734 msgid "IPL Settings" msgstr "IPL 設定" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:273 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:274 msgid "IR" msgstr "IR" @@ -2827,15 +2822,15 @@ msgstr "IR 指示器" msgid "IR Sensitivity:" msgstr "IR 靈敏度:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:555 msgid "ISO Details" msgstr "ISO 明細" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:823 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:822 msgid "ISO Directories" msgstr "ISO 資料夾" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:166 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:157 msgid "ITALY" msgstr "ITALY" @@ -2843,7 +2838,7 @@ msgstr "ITALY" msgid "Icon" msgstr "圖示" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:340 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:364 msgid "" "If checked, the bounding box registers will be updated. Used by the Paper " "Mario games." @@ -2903,7 +2898,7 @@ msgstr "" "匯入的檔案有 sav 副檔名\n" "但是沒有正確的檔頭" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:358 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:382 msgid "In Game" msgstr "遊戲中" @@ -2912,7 +2907,7 @@ msgid "Increase Frame limit" msgstr "" #: Source/Core/DolphinWX/Src/LogConfigWindow.cpp:34 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:313 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:336 msgid "Info" msgstr "訊息" @@ -2932,7 +2927,7 @@ msgstr "Insert" msgid "Insert Encrypted or Decrypted code here..." msgstr "在這裡插入被加密或已解密的代碼..." -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:775 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:774 msgid "Insert SD Card" msgstr "插入 SD 卡" @@ -2944,44 +2939,44 @@ msgstr "在這裡插入名稱.." msgid "Install WAD" msgstr "安裝 WAD" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:891 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:882 msgid "Install to Wii Menu" msgstr "安裝至 Wii 選單" -#: Source/Core/Core/Src/x64MemTools.cpp:288 -#: Source/Core/Core/Src/x64MemTools.cpp:357 +#: Source/Core/Core/Src/x64MemTools.cpp:254 +#: Source/Core/Core/Src/x64MemTools.cpp:305 msgid "" "InstallExceptionHandler called, but this platform does not yet support it." msgstr "調用 InstallExceptionHandler,但是這個平台尚未支援此功能。" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1382 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1387 msgid "Installing WAD..." msgstr "正在安裝 WAD 至 Wii 選單..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:930 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:968 msgid "Integrity Check Error" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:936 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:974 msgid "Integrity check completed" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:935 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:973 msgid "Integrity check completed. No errors have been found." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:927 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:965 #, c-format msgid "" "Integrity check for partition %d failed. Your dump is most likely corrupted " "or has been patched incorrectly." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:538 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:539 msgid "Interface" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:633 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:632 msgid "Interface Settings" msgstr "界面設定" @@ -3010,7 +3005,7 @@ msgstr "内部解析度:" msgid "Interpreter (VERY slow)" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:357 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:381 msgid "Intro" msgstr "標題" @@ -3019,7 +3014,7 @@ msgstr "標題" msgid "Invalid Size(%x) or Magic word (%x)" msgstr "無效大小(%x) 或 Magic word (%x)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:617 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:619 msgid "Invalid Value!" msgstr "無效的數值!" @@ -3027,16 +3022,16 @@ msgstr "無效的數值!" msgid "Invalid bat.map or dir entry" msgstr "無效的 bat.map 或目錄項目" -#: Source/Core/Core/Src/CoreTiming.cpp:556 +#: Source/Core/Core/Src/CoreTiming.cpp:465 #, c-format msgid "Invalid event type %i" msgstr "無效的事件類型 %i" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:309 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:312 msgid "Invalid file" msgstr "無效的檔案" -#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:28 +#: Source/Core/DiscIO/Src/BannerLoaderGC.cpp:26 #, c-format msgid "" "Invalid opening.bnr found in gcm:\n" @@ -3063,34 +3058,36 @@ msgstr "" msgid "Invalid search string (only even string lengths supported)" msgstr "" -#: Source/Core/Core/Src/Core.cpp:530 +#: Source/Core/Core/Src/Core.cpp:528 msgid "Invalid state" msgstr "無效的狀態" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:489 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:303 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:268 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 msgid "Italian" msgstr "Italian" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:177 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 msgid "JAPAN" msgstr "JAPAN" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:47 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 msgid "JIT Recompiler (recommended)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:48 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:49 msgid "JITIL experimental recompiler" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:282 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:304 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:175 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:518 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 msgid "Japanese" msgstr "Japanese" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:182 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:181 msgid "KOREA" msgstr "KOREA" @@ -3109,8 +3106,9 @@ msgstr "" msgid "Key" msgstr "鍵" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:286 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 msgid "Korean" msgstr "Korean" @@ -3128,7 +3126,7 @@ msgstr "L 鈕" msgid "L-Analog" msgstr "L-類比" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:591 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:592 msgid "Language:" msgstr "語系:" @@ -3137,7 +3135,7 @@ msgstr "語系:" msgid "Last %i" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:683 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:682 msgid "Latency:" msgstr "" @@ -3176,11 +3174,11 @@ msgstr "" "左/右鍵取得更多選項。\n" "中鍵清除。" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:196 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:195 msgid "Less Than" msgstr "小於" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:551 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:552 msgid "Limit by FPS" msgstr "" @@ -3272,11 +3270,11 @@ msgstr "" msgid "Load State..." msgstr "讀取進度檔..." -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1422 msgid "Load Wii System Menu" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1412 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1417 #, c-format msgid "Load Wii System Menu %d%c" msgstr "讀取 Wii 系統選單 (%d%c)" @@ -3320,12 +3318,12 @@ msgstr "" msgid "Logger Outputs" msgstr "記錄輸出" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:109 -#: Source/Core/DolphinWX/Src/Frame.cpp:320 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:108 +#: Source/Core/DolphinWX/Src/Frame.cpp:333 msgid "Logging" msgstr "日誌" -#: Source/Core/Core/Src/NetPlayClient.cpp:323 +#: Source/Core/Core/Src/NetPlayClient.cpp:355 msgid "Lost connection to server!" msgstr "遺失與伺服器的連接" @@ -3342,7 +3340,7 @@ msgstr "" "MD5 不符合\n" " %016llx%016llx != %016llx%016llx" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:322 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:346 msgid "MMU Speed Hack" msgstr "MMU 速度修正" @@ -3356,11 +3354,11 @@ msgstr "MadCatz Gameshark 檔案(*.gcs)" msgid "Main Stick" msgstr "主搖桿" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:468 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:492 msgid "Maker ID:" msgstr "廠商 ID:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:495 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:530 msgid "Maker:" msgstr "廠商:" @@ -3391,7 +3389,7 @@ msgid "Memory Byte" msgstr "" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:212 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:96 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 msgid "Memory Card" msgstr "記憶卡" @@ -3401,7 +3399,7 @@ msgid "" "could mangle stuff!" msgstr "記憶卡管理器警告-在使用前請先備份,以防止出現損毀時無法復原!" -#: Source/Core/Core/Src/CoreParameter.cpp:376 +#: Source/Core/Core/Src/CoreParameter.cpp:373 #, c-format msgid "" "Memory Card filename in Slot %c is incorrect\n" @@ -3418,7 +3416,7 @@ msgstr "" "%s\n" "是否要複製舊檔案至新路徑?\n" -#: Source/Core/Core/Src/HW/GCMemcard.cpp:112 +#: Source/Core/Core/Src/HW/GCMemcard.cpp:77 msgid "Memorycard filesize does not match the header size" msgstr "" @@ -3426,7 +3424,7 @@ msgstr "" msgid "Menu" msgstr "選單" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:97 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:98 msgid "Mic" msgstr "麥克風" @@ -3439,7 +3437,7 @@ msgstr "" msgid "Misc" msgstr "雜項" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:788 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:787 msgid "Misc Settings" msgstr "其它設定" @@ -3460,11 +3458,11 @@ msgstr "" msgid "Monospaced font" msgstr "等寬字型" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:296 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:297 msgid "Motion Plus" msgstr "Motion Plus" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:301 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:73 msgid "Motor" msgstr "馬達" @@ -3583,15 +3581,15 @@ msgstr "NP Tab" msgid "NP Up" msgstr "NP Up" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:456 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:480 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:46 #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:37 msgid "Name:" msgstr "名稱:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:62 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:299 -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:570 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:61 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:301 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:572 #: Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp:16 msgid "Name: " msgstr "名稱:" @@ -3601,7 +3599,7 @@ msgstr "名稱:" msgid "Native GCI files(*.gci)" msgstr "原始 GCI 檔案(*.gci)" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:138 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:137 msgid "New Scan" msgstr "新的搜尋" @@ -3610,7 +3608,7 @@ msgstr "新的搜尋" msgid "Next Page" msgstr "下一頁" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:142 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:141 msgid "Next Scan" msgstr "尋找下一個" @@ -3618,11 +3616,11 @@ msgstr "尋找下一個" msgid "Nickname :" msgstr "暱稱:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:190 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 msgid "No Country (SDK)" msgstr "無國家 (SDK)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:360 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:361 msgid "No ISOs or WADS found" msgstr "找不到 ISO 或 WAD" @@ -3661,24 +3659,25 @@ msgstr "" msgid "No save folder found for title %s" msgstr "找不到標題 %s 的存檔資料夾" -#: Source/Plugins/Plugin_VideoOGL/Src/main.cpp:138 -#: Source/Plugins/Plugin_VideoDX11/Src/main.cpp:118 +#: Source/Core/VideoBackends/OGL/Src/main.cpp:152 +#: Source/Core/VideoBackends/D3D/Src/main.cpp:119 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:23 #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:64 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:614 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:624 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:629 msgid "None" msgstr "無" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:306 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 msgid "Norwegian Bokmaal" msgstr "Norwegian Bokmaal" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:193 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 msgid "Not Equal" msgstr "不相等" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:355 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:797 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:379 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:788 msgid "Not Set" msgstr "未設定" @@ -3687,11 +3686,11 @@ msgstr "未設定" msgid "Not a Wii save or read failure for file header size %x" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:669 +#: Source/Core/DolphinWX/Src/Main.cpp:671 msgid "Not connected" msgstr "未連接" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:299 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:300 msgid "Notes" msgstr "註釋" @@ -3712,7 +3711,7 @@ msgstr "注意" msgid "Num Lock" msgstr "Num Lock" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:65 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:64 msgid "Number Of Codes: " msgstr "代碼數量:" @@ -3733,7 +3732,7 @@ msgstr "" msgid "Object Range" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:246 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:247 msgid "Off" msgstr "關閉" @@ -3741,7 +3740,7 @@ msgstr "關閉" msgid "Offset:" msgstr "偏移:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:588 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:589 msgid "On-Screen Display Messages" msgstr "" @@ -3759,11 +3758,11 @@ msgstr "僅 %d 個區塊可用" msgid "Open" msgstr "開啟" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:870 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:861 msgid "Open &containing folder" msgstr "開啟內容資料夾(&C)" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:867 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:858 msgid "Open Wii &save folder" msgstr "開啟 Wii 存檔資料夾(&S)" @@ -3793,17 +3792,13 @@ msgstr "" msgid "OpenMP Texture Decoder" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:291 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:318 msgid "" "Opens the default (read-only) configuration for this game in an external " "text editor." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:295 -msgid "Opens the user specified overrides in an external text editor." -msgstr "" - -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:308 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:309 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:81 msgid "Options" msgstr "選項" @@ -3824,7 +3819,7 @@ msgstr "" msgid "Other" msgstr "" -#: Source/Core/Core/Src/NetPlayClient.cpp:259 +#: Source/Core/Core/Src/NetPlayClient.cpp:291 msgid "" "Other client disconnected while game is running!! NetPlay is disabled. You " "manually stop the game." @@ -3838,11 +3833,11 @@ msgstr "輸出" msgid "P&lay Recording..." msgstr "播放錄像(&L)..." -#: Source/Core/Core/Src/HW/GCPad.cpp:18 +#: Source/Core/Core/Src/HW/GCPad.cpp:17 msgid "Pad" msgstr "控制器" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:621 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:636 msgid "Pad " msgstr "控制器" @@ -3866,26 +3861,26 @@ msgstr "段落" msgid "Parameters" msgstr "參數" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:217 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:235 #, c-format msgid "Partition %i" msgstr "分割區 %i" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:852 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:890 #, c-format -msgid "Partition doesn't exist: %lu" +msgid "Partition doesn't exist: %u" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:305 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 msgid "Patches" msgstr "修正" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:543 msgid "Paths" msgstr "路徑" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1643 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1644 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1648 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1649 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:38 msgid "Pause" msgstr "暫停" @@ -3898,7 +3893,7 @@ msgstr "" msgid "Per-Pixel Lighting" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:360 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:384 msgid "Perfect" msgstr "完美" @@ -3909,8 +3904,8 @@ msgstr "版式 %d" #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:152 #: Source/Core/DolphinWX/Src/FrameTools.cpp:463 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1652 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1653 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1657 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1658 msgid "Play" msgstr "執行" @@ -3922,7 +3917,7 @@ msgstr "播放錄像" msgid "Play/Pause" msgstr "執行/暫停" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:359 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:383 msgid "Playable" msgstr "可玩" @@ -3930,11 +3925,11 @@ msgstr "可玩" msgid "Playback Options" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:322 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:326 msgid "Players" msgstr "玩家" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1040 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1045 msgid "Please confirm..." msgstr "請確認..." @@ -3946,36 +3941,36 @@ msgstr "請在儲存前建立一個新的透檢視" msgid "Plus-Minus" msgstr "Plus-Minus" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:307 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 msgid "Polish" msgstr "Polish" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:718 msgid "Port 1" msgstr "埠口 1" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:719 msgid "Port 2" msgstr "埠口 2" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:720 msgid "Port 3" msgstr "埠口 3" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:722 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:721 msgid "Port 4" msgstr "埠口 4" #: Source/Core/DolphinWX/Src/NetWindow.cpp:92 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:136 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:137 msgid "Port :" msgstr "埠口:" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:308 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 msgid "Portuguese" msgstr "Portuguese" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:309 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 msgid "Portuguese (Brazilian)" msgstr "Portuguese (Brazilian)" @@ -3988,7 +3983,7 @@ msgstr "" msgid "Premature movie end in PlayController. %u + 8 > %u" msgstr "" -#: Source/Core/Core/Src/Movie.cpp:1051 +#: Source/Core/Core/Src/Movie.cpp:1052 #, c-format msgid "Premature movie end in PlayWiimote. %u + %d > %u" msgstr "" @@ -4010,7 +4005,7 @@ msgstr "上一頁" msgid "Previous Page" msgstr "上一頁" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:173 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:172 msgid "Previous Value" msgstr "上一個數值" @@ -4034,8 +4029,8 @@ msgstr "清理快取" msgid "Question" msgstr "問題" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:169 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:337 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:170 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:341 msgid "Quit" msgstr "離開" @@ -4057,7 +4052,7 @@ msgstr "R-類比" msgid "RAM" msgstr "RAM" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:169 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:160 msgid "RUSSIA" msgstr "RUSSIA" @@ -4096,7 +4091,7 @@ msgstr "" msgid "Record" msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:361 msgid "Record input" msgstr "" @@ -4143,10 +4138,10 @@ msgstr "更新列表" msgid "Refresh game list" msgstr "更新遊戲列表" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:417 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:439 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:441 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:463 #: Source/Core/DolphinWX/Src/PatchAddEdit.cpp:64 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:805 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:804 msgid "Remove" msgstr "移除" @@ -4166,7 +4161,7 @@ msgstr "渲染至主視窗" msgid "Reset" msgstr "重置" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:167 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:166 msgid "Results" msgstr "結果" @@ -4174,7 +4169,7 @@ msgstr "結果" msgid "Return" msgstr "Return" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:472 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:496 msgid "Revision:" msgstr "" @@ -4187,17 +4182,17 @@ msgstr "右" msgid "Right Stick" msgstr "右 搖桿" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:299 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:300 #: Source/Core/Core/Src/HW/GCPadEmu.cpp:72 msgid "Rumble" msgstr "震動" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:506 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:507 msgid "" "Run DSP LLE on a dedicated thread (not recommended: might cause freezes)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:310 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 msgid "Russian" msgstr "Russian" @@ -4271,12 +4266,12 @@ msgstr "" msgid "Save State..." msgstr "另存進度..." -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:602 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:612 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:640 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:650 msgid "Save as..." msgstr "另存為..." -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1206 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1197 msgid "Save compressed GCM/ISO" msgstr "儲存已壓縮的 GCM/ISO" @@ -4284,7 +4279,7 @@ msgstr "儲存已壓縮的 GCM/ISO" msgid "Save current perspective" msgstr "儲存目前版式" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1195 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1186 msgid "Save decompressed GCM/ISO" msgstr "儲存已解壓縮的 GCM/ISO" @@ -4297,16 +4292,16 @@ msgstr "儲存的影片 %s 是損毀的,影片錄製停止..." msgid "Scaled EFB Copy" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:546 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:537 #, c-format msgid "Scanning %s" msgstr "" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:529 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:520 msgid "Scanning for ISOs" msgstr "正在掃瞄 ISO" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:530 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:521 msgid "Scanning..." msgstr "正在掃瞄..." @@ -4322,11 +4317,11 @@ msgstr "滾動鎖定" msgid "Search" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:204 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:203 msgid "Search Filter" msgstr "搜索篩選" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:803 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:802 msgid "Search Subfolders" msgstr "搜尋子資料夾" @@ -4349,12 +4344,12 @@ msgstr "項目 %s 在 SYSCONF 中找不到" msgid "Select" msgstr "選擇" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:725 -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1138 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:724 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1143 msgid "Select The Recording File" msgstr "選擇已錄製的檔案" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1370 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1375 msgid "Select a Wii WAD file to install" msgstr "選擇要安裝的 Wii WAD" @@ -4373,19 +4368,19 @@ msgstr "選擇要匯入的存檔" msgid "Select floating windows" msgstr "選擇浮動視窗" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:618 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:617 msgid "Select the file to load" msgstr "選擇要讀取的檔案" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1328 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1333 msgid "Select the save file" msgstr "選擇存檔" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1473 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1478 msgid "Select the state to load" msgstr "選擇要讀取的進度" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1487 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1492 msgid "Select the state to save" msgstr "選擇要儲存的進度" @@ -4400,7 +4395,7 @@ msgid "" "If unsure, select Auto." msgstr "" -#: Source/Core/InputCommon/Src/InputConfig.cpp:49 +#: Source/Core/InputCommon/Src/InputConfig.cpp:53 msgid "Selected controller profile does not exist" msgstr "" @@ -4418,27 +4413,28 @@ msgid "" "If still unsure, use the highest resolution which works for you." msgstr "" -#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 -msgid "" -"Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" -"\n" -"If unsure, use Direct3D 11." -msgstr "" - #: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:72 msgid "" "Selects what graphics API to use internally.\n" -"Direct3D 9 usually is the fastest one. OpenGL is more accurate though. " -"Direct3D 11 is somewhere between the two.\n" -"Note that the Direct3D backends are only available on Windows.\n" +"The software renderer is only used for debugging, so unless you have a " +"reason to use it you'll want to select OpenGL here.\n" "\n" "If unsure, use OpenGL." msgstr "" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:309 +#: Source/Core/DolphinWX/Src/VideoConfigDiag.cpp:70 +msgid "" +"Selects what graphics API to use internally.\n" +"The software renderer is only used for debugging, so you'll want to use " +"either Direct3D or OpenGL. Different games will behave differently on each " +"backend, so for best emulation experience it's recommended to try both and " +"chose the one that fits your requirements best.\n" +"Note that the Direct3D backend is not available on old Windows versions.\n" +"\n" +"If unsure, use Direct3D." +msgstr "" + +#: Source/Core/DolphinWX/Src/NetWindow.cpp:313 msgid "Send" msgstr "傳送" @@ -4450,16 +4446,16 @@ msgstr "傳感器位置:" msgid "Separator" msgstr "分離器" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:311 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 msgid "Serbian" msgstr "Serbian" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:510 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:511 msgid "" "Serial Port 1 - This is the port which devices such as the net adapter use" msgstr "埠口 1 - 這是類似於網卡等裝置使用的埠口。" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:871 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:862 msgid "Set as &default ISO" msgstr "設為預設 ISO (&D)" @@ -4468,30 +4464,30 @@ msgstr "設為預設 ISO (&D)" msgid "Set as default Memcard %c" msgstr "設定為預設記憶卡 %c" -#: Source/Core/Core/Src/ActionReplay.cpp:450 +#: Source/Core/Core/Src/ActionReplay.cpp:456 #, c-format msgid "SetARCode_IsActive: Index is greater than ar code list size %lu" msgstr "SetARCode_IsActive:索引大於 ar 代碼列表大小 %lu" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:521 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:522 msgid "" "Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL " "backend only." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:349 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:373 msgid "Settings..." msgstr "設定..." -#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:252 +#: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp:250 msgid "SetupWiiMem: Cant create setting file" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:282 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:283 msgid "Shake" msgstr "搖晃" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:493 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:528 msgid "Short Name:" msgstr "短名:" @@ -4515,7 +4511,7 @@ msgstr "顯示狀態欄(&S)" msgid "Show &Toolbar" msgstr "顯示工具列(&T)" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:290 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:317 msgid "Show Defaults" msgstr "" @@ -4555,7 +4551,7 @@ msgstr "顯示 JAP" msgid "Show Korea" msgstr "顯示 Korea" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:484 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:508 msgid "Show Language:" msgstr "顯示語系:" @@ -4595,11 +4591,11 @@ msgstr "顯示 Wad" msgid "Show Wii" msgstr "顯示 Wii" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:499 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 msgid "Show a confirmation box before stopping a game." msgstr "在停止遊戲後顯示一個確認框。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:500 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 msgid "" "Show a message box when a potentially serious error has occurred.\n" "Disabling this may avoid annoying and non-fatal messages, but it may also " @@ -4617,7 +4613,7 @@ msgstr "顯示第一個區塊" msgid "Show lag counter" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:501 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:502 msgid "" "Show messages on the emulation screen area.\n" "These messages include memory card writes, video backend and CPU " @@ -4659,23 +4655,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:310 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 msgid "Sideways Wiimote" msgstr "橫握 Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:283 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:519 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 msgid "Simplified Chinese" msgstr "Simplified Chinese" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:301 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 msgid "Size" msgstr "大小" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:702 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:701 msgid "Skip BIOS" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:324 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:348 msgid "Skip DCBZ clearing" msgstr "" @@ -4699,11 +4696,11 @@ msgstr "" msgid "Slot %i" msgstr "儲存格 %i" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:705 msgid "Slot A" msgstr "插槽 A" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:707 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:706 msgid "Slot B" msgstr "插槽 B" @@ -4711,7 +4708,7 @@ msgstr "插槽 B" msgid "Snapshot" msgstr "截圖" -#: Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp:45 +#: Source/Core/VideoBackends/Software/Src/SWmain.cpp:45 msgid "Software Renderer" msgstr "" @@ -4723,27 +4720,27 @@ msgid "" "Do you really want to enable software rendering? If unsure, select 'No'." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:670 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:669 msgid "Sound Settings" msgstr "聲音設定" -#: Source/Core/AudioCommon/Src/AudioCommon.cpp:64 +#: Source/Core/AudioCommon/Src/AudioCommon.cpp:79 #, c-format msgid "Sound backend %s is not valid." msgstr "聲音 backend %s 是無效的。" -#: Source/Core/AudioCommon/Src/DSoundStream.cpp:46 -#, c-format -msgid "Sound buffer creation failed: %s" +#: Source/Core/AudioCommon/Src/DSoundStream.cpp:45 +#, fuzzy, c-format +msgid "Sound buffer creation failed: %08x" msgstr "聲音緩衝建立失敗:%s" #: Source/Core/DolphinWX/Src/WXInputBase.cpp:18 msgid "Space" msgstr "Space" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:488 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:266 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:312 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:512 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:267 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 msgid "Spanish" msgstr "Spanish" @@ -4763,7 +4760,7 @@ msgid "" "If unsure, select 640x528." msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:330 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:354 msgid "Speed up Disc Transfer Rate" msgstr "加速光碟傳輸率" @@ -4771,13 +4768,13 @@ msgstr "加速光碟傳輸率" msgid "Square Stick" msgstr "Square Stick" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:89 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 msgid "Standard Controller" msgstr "標準控制器" #: Source/Core/Core/Src/HW/GCPadEmu.cpp:37 #: Source/Core/DolphinWX/Src/WXInputBase.cpp:25 -#: Source/Core/DolphinWX/Src/NetWindow.cpp:343 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:347 msgid "Start" msgstr "Start" @@ -4793,7 +4790,7 @@ msgstr "開始錄製(&C)" msgid "Start Recording" msgstr "開始錄製" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:302 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:303 msgid "State" msgstr "狀態" @@ -4801,7 +4798,7 @@ msgstr "狀態" msgid "State Saves" msgstr "即時存檔" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:90 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:91 msgid "Steering Wheel" msgstr "" @@ -4845,30 +4842,31 @@ msgstr "成功匯出檔案至 %s" msgid "Successfully imported save files" msgstr "成功匯入存檔" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:313 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 msgid "Swedish" msgstr "" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:276 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:277 msgid "Swing" msgstr "揮舞" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:328 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:352 msgid "Synchronize GPU thread" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:329 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:353 msgid "" "Synchronizes the GPU and CPU threads to help prevent random freezes in Dual " "Core mode. (ON = Compatible, OFF = Fast)" msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:731 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:785 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:730 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:784 msgid "System Language:" msgstr "系統語系:" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:185 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:184 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:187 msgid "TAIWAN" msgstr "TAIWAN" @@ -4899,7 +4897,7 @@ msgstr "Table 右" msgid "Take Screenshot" msgstr "截取畫面" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:92 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:93 msgid "TaruKonga (Bongos)" msgstr "" @@ -4919,11 +4917,11 @@ msgstr "" msgid "Texture Format Overlay" msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:228 +#: Source/Core/Core/Src/CoreParameter.cpp:229 msgid "The WAD has been installed successfully" msgstr "WAD 已經安裝成功" -#: Source/Core/Core/Src/ActionReplay.cpp:185 +#: Source/Core/Core/Src/ActionReplay.cpp:189 msgid "The address is invalid" msgstr "位址無效" @@ -4931,13 +4929,13 @@ msgstr "位址無效" msgid "The checksum was successfully fixed" msgstr "校驗已經被成功修復" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1240 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:1245 msgid "The chosen directory is already in the list" msgstr "選取的資料夾已經在列表中" -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1120 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1148 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1111 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1139 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1210 #, c-format msgid "" "The file %s already exists.\n" @@ -4958,7 +4956,7 @@ msgstr "檔案 %s 無法開啟進行寫入。請確認是否有別的程式正 msgid "The file %s was already open, the file header will not be written." msgstr "檔案 %s 已經開啟,檔頭無法被寫入。" -#: Source/Core/Core/Src/Boot/Boot.cpp:320 +#: Source/Core/Core/Src/Boot/Boot.cpp:319 #, c-format msgid "The file you specified (%s) does not exist" msgstr "指定的檔案 (%s) 不存在" @@ -4987,25 +4985,25 @@ msgstr "" msgid "The save you are trying to copy has an invalid file size" msgstr "您嘗試複製的檔案有一個無效的檔案大小" -#: Source/Core/DolphinWX/Src/Main.cpp:431 +#: Source/Core/DolphinWX/Src/Main.cpp:424 msgid "" "The selected language is not supported by your system. Falling back to " "system default." msgstr "選擇的語系不支援您的系統。將使用系統預設值。" -#: Source/Core/Core/Src/NetPlayClient.cpp:93 +#: Source/Core/Core/Src/NetPlayClient.cpp:95 msgid "The server and client's NetPlay versions are incompatible!" msgstr "伺服器與客戶端的網路對戰版本不兼容!" -#: Source/Core/Core/Src/NetPlayClient.cpp:90 +#: Source/Core/Core/Src/NetPlayClient.cpp:92 msgid "The server is full!" msgstr "伺服器已滿!" -#: Source/Core/Core/Src/NetPlayClient.cpp:96 +#: Source/Core/Core/Src/NetPlayClient.cpp:98 msgid "The server responded: the game is currently running!" msgstr "伺服器回應:遊戲目前正在執行!" -#: Source/Core/Core/Src/NetPlayClient.cpp:99 +#: Source/Core/Core/Src/NetPlayClient.cpp:101 msgid "The server sent an unknown error message!" msgstr "伺服器發生了一個未知錯誤訊息!" @@ -5014,21 +5012,21 @@ msgstr "伺服器發生了一個未知錯誤訊息!" msgid "The specified file \"%s\" does not exist" msgstr "指定的檔案 \"%s\" 不存在" -#: Source/Core/Core/Src/ActionReplay.cpp:186 +#: Source/Core/Core/Src/ActionReplay.cpp:190 msgid "The value is invalid" msgstr "這個數值無效" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:629 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:628 msgid "Theme:" msgstr "" -#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:588 +#: Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp:607 msgid "" "There must be a ticket for 00000001/00000002. Your NAND dump is probably " "incomplete." msgstr "必須有 00000001/00000002 的標簽。這個 NAND dump 可能是不完整的。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:316 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:339 msgid "" "These settings override core Dolphin settings.\n" "Undetermined means the game uses Dolphin's setting." @@ -5036,13 +5034,13 @@ msgstr "" "這些設定將替代核心 Dolphin 設定。\n" "未確定表示遊戲使用 Dolphin 的設定。" -#: Source/Core/Core/Src/ActionReplay.cpp:345 +#: Source/Core/Core/Src/ActionReplay.cpp:351 msgid "" "This action replay simulator does not support codes that modify Action " "Replay itself." msgstr "Action replay 模擬器不支援被 Action Replay 自身修改的代碼。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:513 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:514 msgid "This could cause slow down in Wii Menu and some games." msgstr "這可能會使 Wii Menu 和部分遊戲降速。" @@ -5058,7 +5056,7 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:494 msgid "" "This limits the game speed to the specified number of frames per second " "(full speed is 60 for NTSC and 50 for PAL). Alternatively, use Audio to " @@ -5066,7 +5064,7 @@ msgid "" "noise depending on the game)." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:492 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:493 msgid "" "This splits the Video and CPU threads, so they can be run on separate " "cores.\n" @@ -5076,7 +5074,7 @@ msgstr "" "這將分離影像和 CPU 線程,所以它們可以執行於獨立的內核中。\n" "可以在多核心的 PC 上取得非常大的加速,但是也可能導致偶爾崩潰或圖片問題。" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:287 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:314 msgid "This will let you Manually Edit the INI config file" msgstr "這將允許您手工編輯 INI 設定檔案" @@ -5085,12 +5083,12 @@ msgstr "這將允許您手工編輯 INI 設定檔案" msgid "Threshold" msgstr "閾值" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:279 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:280 msgid "Tilt" msgstr "傾斜" #: Source/Core/DolphinWX/Src/MemcardManager.cpp:622 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:294 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:295 msgid "Title" msgstr "標題" @@ -5125,15 +5123,16 @@ msgid "Toggle IR" msgstr "" #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:104 -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:274 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:275 msgid "Top" msgstr "上方" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:284 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:520 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:285 msgid "Traditional Chinese" msgstr "Traditional Chinese" -#: Source/Core/Core/Src/Boot/Boot.cpp:414 +#: Source/Core/Core/Src/Boot/Boot.cpp:413 msgid "Tried to load an unknown file type." msgstr "已嘗試讀取從未知的檔案類型。" @@ -5153,7 +5152,7 @@ msgstr "" "嘗試讀取從無效的 SYSCONF\n" "Wiimote bt ids 是無效的" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:314 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:315 msgid "Turkish" msgstr "Turkish" @@ -5169,12 +5168,12 @@ msgstr "類型" msgid "UDP Port:" msgstr "UDP 埠口:" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:270 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:271 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:12 msgid "UDP Wiimote" msgstr "UDP Wiimote" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:193 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:196 msgid "UNKNOWN" msgstr "未知" @@ -5183,7 +5182,7 @@ msgstr "未知" msgid "UNKNOWN_%02X" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:172 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:163 msgid "USA" msgstr "USA" @@ -5196,7 +5195,7 @@ msgstr "" #: Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp:111 #, c-format msgid "" -"Unable to parse line %lu of the entered AR code as a valid encrypted or " +"Unable to parse line %u of the entered AR code as a valid encrypted or " "decrypted code. Make sure you typed it correctly.\n" "Would you like to ignore this line and continue parsing?" msgstr "" @@ -5218,11 +5217,11 @@ msgstr "" msgid "Unexpected 0x80 call? Aborting..." msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:192 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:191 msgid "Unknown" msgstr "未知" -#: Source/Core/Core/Src/HW/DVDInterface.cpp:968 +#: Source/Core/Core/Src/HW/DVDInterface.cpp:972 #, c-format msgid "Unknown DVD command %08x - fatal error" msgstr "未知的 DVD 命令 %08x - 致命錯誤" @@ -5237,12 +5236,12 @@ msgstr "" msgid "Unknown entry type %i in SYSCONF (%s@%x)!" msgstr "未知的登錄類型 %i 於 SYSCONF (%s@%x)!" -#: Source/Core/Core/Src/NetPlayClient.cpp:296 +#: Source/Core/Core/Src/NetPlayClient.cpp:328 #, c-format msgid "Unknown message received with id : %d" msgstr "接收到帶有未知 id 的錯誤訊息:%d" -#: Source/Core/Core/Src/NetPlayServer.cpp:394 +#: Source/Core/Core/Src/NetPlayServer.cpp:476 #, c-format msgid "Unknown message with id:%d received from player:%d Kicking player!" msgstr "知訊息帶有 id:%d 接收於玩家:%d 正在提出玩家!" @@ -5252,16 +5251,16 @@ msgstr "知訊息帶有 id:%d 接收於玩家:%d 正在提出玩家!" msgid "Up" msgstr "上" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:85 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:84 #: Source/Core/DolphinWX/Src/UDPConfigDiag.cpp:17 msgid "Update" msgstr "更新" -#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:311 +#: Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp:312 msgid "Upright Wiimote" msgstr "直握 Wiimote" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:770 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:769 msgid "Use EuRGB60 Mode (PAL60)" msgstr "使用 EuRGB60 模式 (PAL60)" @@ -5269,11 +5268,11 @@ msgstr "使用 EuRGB60 模式 (PAL60)" msgid "Use Fullscreen" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:580 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:582 msgid "Use Hex" msgstr "使用 Hex" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:586 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:587 msgid "Use Panic Handlers" msgstr "顯示錯誤提示" @@ -5319,11 +5318,11 @@ msgstr "工具" msgid "V-Sync" msgstr "垂直同步" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:326 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:350 msgid "VBeam Speed Hack" msgstr "" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:186 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:185 msgid "Value" msgstr "數值" @@ -5331,7 +5330,7 @@ msgstr "數值" msgid "Value:" msgstr "數值:" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:577 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:579 msgid "Value: " msgstr "數值:" @@ -5343,7 +5342,7 @@ msgstr "事件" msgid "Vertex Streaming Hack" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:389 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:413 msgid "Video" msgstr "影像" @@ -5351,7 +5350,7 @@ msgstr "影像" msgid "Virtual" msgstr "虛擬" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:676 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:675 msgid "Volume" msgstr "音量" @@ -5379,15 +5378,15 @@ msgstr "" msgid "Warning" msgstr "警告" -#: Source/Core/Core/Src/Boot/Boot.cpp:279 +#: Source/Core/Core/Src/Boot/Boot.cpp:278 msgid "Warning - starting DOL in wrong console mode!" msgstr "警告 - DOL 啟動於錯誤的主機模式!" -#: Source/Core/Core/Src/Boot/Boot.cpp:329 +#: Source/Core/Core/Src/Boot/Boot.cpp:328 msgid "Warning - starting ELF in wrong console mode!" msgstr "警告 - ELF 啟動於錯誤的主機模式!" -#: Source/Core/Core/Src/Boot/Boot.cpp:209 +#: Source/Core/Core/Src/Boot/Boot.cpp:212 msgid "Warning - starting ISO in wrong console mode!" msgstr "警告 - ISO 啟動於錯誤的主機模式!" @@ -5467,19 +5466,19 @@ msgstr "寬螢幕修正" msgid "Width" msgstr "寬度" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:541 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:542 msgid "Wii" msgstr "Wii" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:380 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:404 msgid "Wii Console" msgstr "Wii 主機" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:837 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:836 msgid "Wii NAND Root:" msgstr "" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1330 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1335 msgid "Wii save files (*.bin)|*.bin" msgstr "Wii 存檔 (*.bin)|*.bin" @@ -5492,12 +5491,18 @@ msgstr "WiiWAD:無法從檔案中讀取" msgid "Wiimote" msgstr "Wiimote" +#: Source/Core/DolphinWX/Src/NetWindow.cpp:631 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:657 +#, fuzzy +msgid "Wiimote " +msgstr "Wiimote" + #: Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp:21 #, c-format msgid "Wiimote %i" msgstr "" -#: Source/Core/DolphinWX/Src/Main.cpp:671 +#: Source/Core/DolphinWX/Src/Main.cpp:673 msgid "Wiimote Connected" msgstr "Wiimote 已連接" @@ -5529,14 +5534,14 @@ msgstr "視窗 右" msgid "Word Wrap" msgstr "自動換行" -#: Source/Core/DolphinWX/Src/FrameTools.cpp:1383 -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:909 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1092 -#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1228 +#: Source/Core/DolphinWX/Src/FrameTools.cpp:1388 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:947 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1083 +#: Source/Core/DolphinWX/Src/GameListCtrl.cpp:1219 msgid "Working..." msgstr "執行中..." -#: Source/Core/DolphinWX/Src/NetWindow.cpp:353 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:357 msgid "Write memcards (GC)" msgstr "" @@ -5556,21 +5561,36 @@ msgstr "寫入至檔案" msgid "Write to Window" msgstr "寫入至視窗" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:47 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:80 #, c-format msgid "XAudio2 CreateSourceVoice failed: %#X" msgstr "XAudio2 建立原始聲音失敗: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:101 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:180 #, c-format msgid "XAudio2 init failed: %#X" msgstr "XAudio2 初始化失敗: %#X" -#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:111 +#: Source/Core/AudioCommon/Src/XAudio2Stream.cpp:190 #, c-format msgid "XAudio2 master voice creation failed: %#X" msgstr "XAudio2 主聲音建立失敗: %#X" +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:93 +#, fuzzy, c-format +msgid "XAudio2_7 CreateSourceVoice failed: %#X" +msgstr "XAudio2 建立原始聲音失敗: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:181 +#, fuzzy, c-format +msgid "XAudio2_7 init failed: %#X" +msgstr "XAudio2 初始化失敗: %#X" + +#: Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp:191 +#, fuzzy, c-format +msgid "XAudio2_7 master voice creation failed: %#X" +msgstr "XAudio2 主聲音建立失敗: %#X" + #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:776 msgid "XF reg" msgstr "" @@ -5596,15 +5616,15 @@ msgstr "" msgid "You can't close panes that have pages in them." msgstr "您不能關閉有頁面的面板。" -#: Source/Core/DolphinWX/Src/NetWindow.cpp:239 +#: Source/Core/DolphinWX/Src/NetWindow.cpp:240 msgid "You must choose a game!!" msgstr "您必須選擇一個遊戲!!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:610 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:612 msgid "You must enter a name!" msgstr "您必須輸入一個名稱!" -#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:455 +#: Source/Core/DolphinWX/Src/CheatsWindow.cpp:457 msgid "You must enter a valid decimal, hexadecimal or octal value." msgstr "您必須輸入一個有效的十進制,十六進制或八進制的數值。" @@ -5612,7 +5632,7 @@ msgstr "您必須輸入一個有效的十進制,十六進制或八進制的數 msgid "You must enter a valid profile name." msgstr "您必須輸入一個有效的設定檔名稱。" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:929 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:928 msgid "You must restart Dolphin in order for the change to take effect." msgstr "You must restart Dolphin in order for the change to take effect." @@ -5623,7 +5643,7 @@ msgid "" "If you select \"No\", audio might be garbled." msgstr "" -#: Source/Core/Core/Src/CoreParameter.cpp:177 +#: Source/Core/Core/Src/CoreParameter.cpp:178 msgid "" "Your GCM/ISO file seems to be invalid (invalid country).\n" "Continue with PAL region?" @@ -5642,15 +5662,15 @@ msgstr "" "應該是 0x%04x (而非 0x%04llx)\n" "是否要建立新的檔案?" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:342 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:366 msgid "ZTP hack" msgstr "ZTP 修正" -#: Source/Core/Core/Src/ActionReplay.cpp:377 +#: Source/Core/Core/Src/ActionReplay.cpp:383 msgid "Zero 3 code not supported" msgstr "不支援 Zero 3 代碼" -#: Source/Core/Core/Src/ActionReplay.cpp:398 +#: Source/Core/Core/Src/ActionReplay.cpp:404 #, c-format msgid "Zero code unknown to dolphin: %08x" msgstr "Zero code 未知於 dolphin: %08x" @@ -5692,29 +5712,24 @@ msgid "" "If unsure, leave this unchecked." msgstr "" -#: Source/Core/DolphinWX/Src/ConfigMain.cpp:813 +#: Source/Core/DolphinWX/Src/ConfigMain.cpp:812 msgid "apploader (.img)" msgstr "程式讀取器 (.img)" -#: Source/Core/Core/Src/PowerPC/JitInterface.cpp:272 -#, c-format -msgid "iCacheJIT: Reading Opcode from %x. Please report." -msgstr "iCacheJIT:從 %x 中讀取 Opcode 。請回報。" - #: Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp:947 msgid "s" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:242 +#: Source/Core/Core/Src/x64MemTools.cpp:214 #, c-format msgid "unknown flavor %d (expected %d)" msgstr "" -#: Source/Core/Core/Src/x64MemTools.cpp:236 +#: Source/Core/Core/Src/x64MemTools.cpp:208 msgid "unknown message received" msgstr "" -#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1165 +#: Source/Core/DolphinWX/Src/ISOProperties.cpp:1157 msgid "wxExecute returned -1 on application run!" msgstr "wxExecute 返回 -1 在應用程式執行時!" @@ -5729,3 +5744,12 @@ msgstr "zNear 修正:" #: Source/Core/DolphinWX/Src/InputConfigDiag.cpp:545 msgid "| OR" msgstr "| 或" + +#~ msgid "Could not create %s" +#~ msgstr "無法建立 %s" + +#~ msgid "Direct3D11" +#~ msgstr "Direct3D11" + +#~ msgid "iCacheJIT: Reading Opcode from %x. Please report." +#~ msgstr "iCacheJIT:從 %x 中讀取 Opcode 。請回報。" diff --git a/Source/Android/android.toolchain.cmake b/Source/Android/android.toolchain.cmake index 0f7e340678..4ca8f94266 100644 --- a/Source/Android/android.toolchain.cmake +++ b/Source/Android/android.toolchain.cmake @@ -119,7 +119,7 @@ # libraries. Automatically turned for NDK r5x and r6x due to GLESv2 # problems. # -# LIBRARY_OUTPUT_PATH_ROOT=${CMAKE_SOURCE_DIR} - where to output binary +# LIBRARY_OUTPUT_PATH_ROOT=${CMAKE_CURRENT_BINARY_DIR} - where to output binary # files. See additional details below. # # ANDROID_SET_OBSOLETE_VARIABLES=ON - if set, then toolchain defines some @@ -187,7 +187,7 @@ # # LIBRARY_OUTPUT_PATH_ROOT should be set in cache to determine where Android # libraries will be installed. -# Default is ${CMAKE_SOURCE_DIR}, and the android libs will always be +# Default is ${CMAKE_CURRENT_BINARY_DIR}, and the android libs will always be # under the ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME} # (depending on the target ABI). This is convenient for Android packaging. # @@ -1431,7 +1431,7 @@ include_directories( SYSTEM "${ANDROID_SYSROOT}/usr/include" ${ANDROID_STL_INCLU link_directories( "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ) # setup output directories -set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH "root for library output, set this to change where android libs are installed to" ) +set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are installed to" ) set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" ) if(NOT _CMAKE_IN_TRY_COMPILE) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java index c5d22ff821..97ed412d8d 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java @@ -190,14 +190,6 @@ public final class VideoSettingsFragment extends PreferenceFragment // Is a Tegra 4 since it supports 24bit depth mSupportsGLES3 = true; } - if (!mSupportsGLES3 && - m_GLVendor == null && - m_GLRenderer == null && - m_GLExtensions == null) - { - // Couldn't get information. Give them the benefit of the doubt - mSupportsGLES3 = true; - } return mSupportsGLES3; } diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 7c667ba551..fcfc1be7b6 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -2,7 +2,11 @@ set(CMAKE_FAKELANG_CREATE_STATIC_LIBRARY "touch ") if(ENABLE_PCH) # This is actually a .h file, but trick cmake into compiling it as a source file set(pch_out_filename "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/pch.dir/pch.h") - set(pch_lib_filename "${CMAKE_CURRENT_BINARY_DIR}/libpch.a") + if (ANDROID) + set(pch_lib_filename "${LIBRARY_OUTPUT_PATH}/libpch.a") + else() + set(pch_lib_filename "${CMAKE_CURRENT_BINARY_DIR}/libpch.a") + endif() set(pch_src_filename "${CMAKE_CURRENT_SOURCE_DIR}/pch.h") if(APPLE) diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index abb5dbf505..6f6d8a5aa7 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,210 +19,74 @@ - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05} - AudioCommon + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44} - + + StaticLibrary + v120 + Unicode + + true - StaticLibrary - Unicode - - true - StaticLibrary - Unicode - - + false - StaticLibrary - Unicode - - - StaticLibrary - false - Unicode - - - false - StaticLibrary - Unicode - - - StaticLibrary - false - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) - - - true - - - SoundTouchD.lib;OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories) - - - - - ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) - - - true - - - SoundTouchD.lib;OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories) - - - - - ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) - - - true - true - true - - - SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories) - - - - - ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) - - - true - true - true - - - SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories) - - - - - ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) - - - true - true - true - - - SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories) - - - - - ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) - - - true - true - true - - - SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories) - - - + + Create + + + $(DXSDK_DIR)Include;%(AdditionalIncludeDirectories) + + + + + + + - + - - {68a5dd20-7057-448b-8fe0-b6ac8d205509} - true - true - false - true - false + + {ec082900-b4d8-42e9-9663-77f02f6936ae} - {c87a4178-44f6-49b2-b7aa-c79af1b8c534} - true - true - false - true - false + {2e6c348c-c75c-4d94-8d1e-9c1fcbf3efe4} diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj.filters b/Source/Core/AudioCommon/AudioCommon.vcxproj.filters index 30ff35a073..5d0ae6c354 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj.filters +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj.filters @@ -1,14 +1,20 @@  + + + {25ec8f16-fc60-4a63-bc3e-ad0272fd5942} + + + - + SoundStreams - + SoundStreams @@ -17,14 +23,15 @@ SoundStreams - + + SoundStreams - + @@ -43,14 +50,24 @@ SoundStreams - + + + SoundStreams + + + SoundStreams + + + SoundStreams + + + SoundStreams + + + SoundStreams + - - - - - {efb9f5b5-ab0c-455d-b78b-26df725386af} - + \ No newline at end of file diff --git a/Source/Core/AudioCommon/Src/AOSoundStream.h b/Source/Core/AudioCommon/Src/AOSoundStream.h index f8fe67b727..1eb762492c 100644 --- a/Source/Core/AudioCommon/Src/AOSoundStream.h +++ b/Source/Core/AudioCommon/Src/AOSoundStream.h @@ -42,8 +42,8 @@ public: return true; } - virtual bool usesMixer() const { - return true; + virtual bool usesMixer() const { + return true; } virtual void Update(); diff --git a/Source/Core/AudioCommon/Src/AlsaSoundStream.cpp b/Source/Core/AudioCommon/Src/AlsaSoundStream.cpp index 2ccf4d22ae..4c84ae69e1 100644 --- a/Source/Core/AudioCommon/Src/AlsaSoundStream.cpp +++ b/Source/Core/AudioCommon/Src/AlsaSoundStream.cpp @@ -57,7 +57,7 @@ void AlsaSound::SoundLoop() // Underrun snd_pcm_prepare(handle); } - else if (rc < 0) + else if (rc < 0) { ERROR_LOG(AUDIO, "writei fail: %s", snd_strerror(rc)); } @@ -77,7 +77,7 @@ bool AlsaSound::AlsaInit() unsigned int periods; err = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Audio open error: %s\n", snd_strerror(err)); return false; @@ -86,21 +86,21 @@ bool AlsaSound::AlsaInit() snd_pcm_hw_params_alloca(&hwparams); err = snd_pcm_hw_params_any(handle, hwparams); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Broken configuration for this PCM: %s\n", snd_strerror(err)); return false; } - + err = snd_pcm_hw_params_set_access(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Access type not available: %s\n", snd_strerror(err)); return false; } err = snd_pcm_hw_params_set_format(handle, hwparams, SND_PCM_FORMAT_S16_LE); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Sample format not available: %s\n", snd_strerror(err)); return false; @@ -108,14 +108,14 @@ bool AlsaSound::AlsaInit() dir = 0; err = snd_pcm_hw_params_set_rate_near(handle, hwparams, &sample_rate, &dir); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Rate not available: %s\n", snd_strerror(err)); return false; } err = snd_pcm_hw_params_set_channels(handle, hwparams, 2); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Channels count not available: %s\n", snd_strerror(err)); return false; @@ -123,7 +123,7 @@ bool AlsaSound::AlsaInit() periods = BUFFER_SIZE_MAX / FRAME_COUNT_MIN; err = snd_pcm_hw_params_set_periods_max(handle, hwparams, &periods, &dir); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Cannot set Minimum periods: %s\n", snd_strerror(err)); return false; @@ -131,34 +131,34 @@ bool AlsaSound::AlsaInit() buffer_size_max = BUFFER_SIZE_MAX; err = snd_pcm_hw_params_set_buffer_size_max(handle, hwparams, &buffer_size_max); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Cannot set minimum buffer size: %s\n", snd_strerror(err)); return false; } err = snd_pcm_hw_params(handle, hwparams); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Unable to install hw params: %s\n", snd_strerror(err)); return false; } err = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Cannot get buffer size: %s\n", snd_strerror(err)); return false; } err = snd_pcm_hw_params_get_periods_max(hwparams, &periods, &dir); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Cannot get periods: %s\n", snd_strerror(err)); return false; } - //periods is the number of fragments alsa can wait for during one + //periods is the number of fragments alsa can wait for during one //buffer_size frames_to_deliver = buffer_size / periods; //limit the minimum size. pulseaudio advertises a minimum of 32 samples. @@ -172,28 +172,28 @@ bool AlsaSound::AlsaInit() snd_pcm_sw_params_alloca(&swparams); err = snd_pcm_sw_params_current(handle, swparams); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "cannot init sw params: %s\n", snd_strerror(err)); return false; } err = snd_pcm_sw_params_set_start_threshold(handle, swparams, 0U); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "cannot set start thresh: %s\n", snd_strerror(err)); return false; } err = snd_pcm_sw_params(handle, swparams); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "cannot set sw params: %s\n", snd_strerror(err)); return false; } err = snd_pcm_prepare(handle); - if (err < 0) + if (err < 0) { ERROR_LOG(AUDIO, "Unable to prepare: %s\n", snd_strerror(err)); return false; diff --git a/Source/Core/AudioCommon/Src/AlsaSoundStream.h b/Source/Core/AudioCommon/Src/AlsaSoundStream.h index 47c9e7ae82..56ab4176b9 100644 --- a/Source/Core/AudioCommon/Src/AlsaSoundStream.h +++ b/Source/Core/AudioCommon/Src/AlsaSoundStream.h @@ -28,8 +28,8 @@ public: static bool isValid() { return true; } - virtual bool usesMixer() const { - return true; + virtual bool usesMixer() const { + return true; } virtual void Update(); diff --git a/Source/Core/AudioCommon/Src/AudioCommon.cpp b/Source/Core/AudioCommon/Src/AudioCommon.cpp index 8b343aa493..c8c37ea891 100644 --- a/Source/Core/AudioCommon/Src/AudioCommon.cpp +++ b/Source/Core/AudioCommon/Src/AudioCommon.cpp @@ -7,6 +7,7 @@ #include "Mixer.h" #include "NullSoundStream.h" #include "DSoundStream.h" +#include "XAudio2_7Stream.h" #include "XAudio2Stream.h" #include "AOSoundStream.h" #include "AlsaSoundStream.h" @@ -18,34 +19,47 @@ #include "../../Core/Src/ConfigManager.h" // This shouldn't be a global, at least not here. -SoundStream *soundStream; +SoundStream *soundStream = nullptr; namespace AudioCommon -{ - SoundStream *InitSoundStream(CMixer *mixer, void *hWnd) +{ + SoundStream *InitSoundStream(CMixer *mixer, void *hWnd) { // TODO: possible memleak with mixer std::string backend = SConfig::GetInstance().sBackend; - if (backend == BACKEND_OPENAL && OpenALStream::isValid()) + if (backend == BACKEND_OPENAL && OpenALStream::isValid()) soundStream = new OpenALStream(mixer); - else if (backend == BACKEND_NULLSOUND && NullSound::isValid()) - soundStream = new NullSound(mixer, hWnd); - else if (backend == BACKEND_DIRECTSOUND && DSound::isValid()) + else if (backend == BACKEND_NULLSOUND && NullSound::isValid()) + soundStream = new NullSound(mixer); + else if (backend == BACKEND_DIRECTSOUND && DSound::isValid()) soundStream = new DSound(mixer, hWnd); - else if (backend == BACKEND_XAUDIO2 && XAudio2::isValid()) - soundStream = new XAudio2(mixer); - else if (backend == BACKEND_AOSOUND && AOSound::isValid()) + else if (backend == BACKEND_XAUDIO2) + { + if (XAudio2::isValid()) + soundStream = new XAudio2(mixer); + else if (XAudio2_7::isValid()) + soundStream = new XAudio2_7(mixer); + } + else if (backend == BACKEND_AOSOUND && AOSound::isValid()) soundStream = new AOSound(mixer); else if (backend == BACKEND_ALSA && AlsaSound::isValid()) soundStream = new AlsaSound(mixer); - else if (backend == BACKEND_COREAUDIO && CoreAudioSound::isValid()) + else if (backend == BACKEND_COREAUDIO && CoreAudioSound::isValid()) soundStream = new CoreAudioSound(mixer); else if (backend == BACKEND_PULSEAUDIO && PulseAudio::isValid()) soundStream = new PulseAudio(mixer); else if (backend == BACKEND_OPENSLES && OpenSLESStream::isValid()) soundStream = new OpenSLESStream(mixer); - if (soundStream != NULL) + + if (!soundStream && NullSound::isValid()) + { + WARN_LOG(DSPHLE, "Could not initialize backend %s, using %s instead.", + backend.c_str(), BACKEND_NULLSOUND); + soundStream = new NullSound(mixer); + } + + if (soundStream) { UpdateSoundStream(); if (soundStream->Start()) @@ -61,31 +75,32 @@ namespace AudioCommon } PanicAlertT("Could not initialize backend %s.", backend.c_str()); } + PanicAlertT("Sound backend %s is not valid.", backend.c_str()); delete soundStream; - soundStream = NULL; - return NULL; + soundStream = nullptr; + return nullptr; } - void ShutdownSoundStream() + void ShutdownSoundStream() { INFO_LOG(DSPHLE, "Shutting down sound stream"); - if (soundStream) + if (soundStream) { soundStream->Stop(); if (SConfig::GetInstance().m_DumpAudio) soundStream->GetMixer()->StopLogAudio(); //soundStream->StopLogAudio(); delete soundStream; - soundStream = NULL; + soundStream = nullptr; } - INFO_LOG(DSPHLE, "Done shutting down sound stream"); + INFO_LOG(DSPHLE, "Done shutting down sound stream"); } - std::vector GetSoundBackends() + std::vector GetSoundBackends() { std::vector backends; @@ -93,7 +108,7 @@ namespace AudioCommon backends.push_back(BACKEND_NULLSOUND); if (DSound::isValid()) backends.push_back(BACKEND_DIRECTSOUND); - if (XAudio2::isValid()) + if (XAudio2_7::isValid() || XAudio2::isValid()) backends.push_back(BACKEND_XAUDIO2); if (AOSound::isValid()) backends.push_back(BACKEND_AOSOUND); @@ -110,7 +125,7 @@ namespace AudioCommon return backends; } - bool UseJIT() + bool UseJIT() { if (!Movie::IsDSPHLE() && Movie::IsPlayingInput() && Movie::IsConfigSaved()) { diff --git a/Source/Core/AudioCommon/Src/AudioCommon.h b/Source/Core/AudioCommon/Src/AudioCommon.h index cd1896396e..9c49293a48 100644 --- a/Source/Core/AudioCommon/Src/AudioCommon.h +++ b/Source/Core/AudioCommon/Src/AudioCommon.h @@ -38,7 +38,7 @@ union UDSPControl UDSPControl(u16 _Hex = 0) : Hex(_Hex) {} }; -namespace AudioCommon +namespace AudioCommon { SoundStream *InitSoundStream(CMixer *mixer, void *hWnd); void ShutdownSoundStream(); diff --git a/Source/Core/AudioCommon/Src/DSoundStream.cpp b/Source/Core/AudioCommon/Src/DSoundStream.cpp index 41a1dd9951..c5d2e3afb8 100644 --- a/Source/Core/AudioCommon/Src/DSoundStream.cpp +++ b/Source/Core/AudioCommon/Src/DSoundStream.cpp @@ -6,7 +6,6 @@ #include #include -#include #include "AudioCommon.h" #include "DSoundStream.h" @@ -43,7 +42,7 @@ bool DSound::CreateBuffer() else { // Failed. - PanicAlertT("Sound buffer creation failed: %s", DXGetErrorString(res)); + PanicAlertT("Sound buffer creation failed: %08x", res); dsBuffer = NULL; return false; } diff --git a/Source/Core/AudioCommon/Src/DSoundStream.h b/Source/Core/AudioCommon/Src/DSoundStream.h index 6145ea62e9..a872e79181 100644 --- a/Source/Core/AudioCommon/Src/DSoundStream.h +++ b/Source/Core/AudioCommon/Src/DSoundStream.h @@ -9,6 +9,7 @@ #include "Thread.h" #ifdef _WIN32 +#include #include #include @@ -47,7 +48,7 @@ class DSound : public SoundStream bool WriteDataToBuffer(DWORD dwOffset, char* soundData, DWORD dwSoundBytes); public: - DSound(CMixer *mixer, void *_hWnd = NULL) + DSound(CMixer *mixer, void *_hWnd) : SoundStream(mixer) , bufferSize(0) , currentPos(0) @@ -58,7 +59,7 @@ public: {} virtual ~DSound() {} - + virtual bool Start(); virtual void SoundLoop(); virtual void SetVolume(int volume); @@ -70,7 +71,7 @@ public: #else public: - DSound(CMixer *mixer, void *hWnd = NULL) + DSound(CMixer *mixer, void *_hWnd) : SoundStream(mixer) {} #endif diff --git a/Source/Core/AudioCommon/Src/Mixer.cpp b/Source/Core/AudioCommon/Src/Mixer.cpp index fb29f4902f..61b4604dc1 100644 --- a/Source/Core/AudioCommon/Src/Mixer.cpp +++ b/Source/Core/AudioCommon/Src/Mixer.cpp @@ -52,7 +52,7 @@ unsigned int CMixer::Mix(short* samples, unsigned int numSamples) // interpolation loop. u32 indexR = Common::AtomicLoad(m_indexR); u32 indexW = Common::AtomicLoad(m_indexW); - + if (m_AIplaying) { numLeft = (numLeft > numSamples) ? numSamples : numLeft; @@ -125,8 +125,8 @@ unsigned int CMixer::Mix(short* samples, unsigned int numSamples) *(u32*)(samples+i) = *(u32*)(s); // memset(&samples[numLeft * 2], 0, (numSamples - numLeft) * 4); } - - // Flush cached variable + + // Flush cached variable Common::AtomicStore(m_indexR, indexR); //when logging, also throttle HLE audio @@ -158,13 +158,13 @@ void CMixer::PushSamples(const short *samples, unsigned int num_samples) // indexR isn't allowed to cache in the audio throttling loop as it // needs to get updates to not deadlock. u32 indexW = Common::AtomicLoad(m_indexW); - + if (m_throttle) { // The auto throttle function. This loop will put a ceiling on the CPU MHz. while (num_samples * 2 + ((indexW - Common::AtomicLoad(m_indexR)) & INDEX_MASK) >= MAX_SAMPLES * 2) { - if (*PowerPC::GetStatePtr() != PowerPC::CPU_RUNNING || soundStream->IsMuted()) + if (*PowerPC::GetStatePtr() != PowerPC::CPU_RUNNING || soundStream->IsMuted()) break; // Shortcut key for Throttle Skipping if (Host_GetKeyState('\t')) @@ -192,9 +192,9 @@ void CMixer::PushSamples(const short *samples, unsigned int num_samples) { memcpy(&m_buffer[indexW & INDEX_MASK], samples, num_samples * 4); } - + Common::AtomicAdd(m_indexW, num_samples * 2); - + return; } @@ -206,7 +206,7 @@ unsigned int CMixer::GetNumSamples() // We also can't say the current interpolation state (specially // the frac), so to be sure, subtract one again to be sure not // to underflow the fifo. - + u32 numSamples = ((Common::AtomicLoad(m_indexW) - Common::AtomicLoad(m_indexR)) & INDEX_MASK) / 2; if (AudioInterface::GetAIDSampleRate() == m_sampleRate) diff --git a/Source/Core/AudioCommon/Src/Mixer.h b/Source/Core/AudioCommon/Src/Mixer.h index 6d797d5c3e..144d22a183 100644 --- a/Source/Core/AudioCommon/Src/Mixer.h +++ b/Source/Core/AudioCommon/Src/Mixer.h @@ -14,7 +14,7 @@ #define RESERVED_SAMPLES (256) class CMixer { - + public: CMixer(unsigned int AISampleRate = 48000, unsigned int DACSampleRate = 48000, unsigned int BackendSampleRate = 32000) : m_aiSampleRate(AISampleRate) @@ -89,7 +89,7 @@ protected: int m_channels; WaveFileWriter g_wave_writer; - + bool m_HLEready; bool m_logAudio; diff --git a/Source/Core/AudioCommon/Src/NullSoundStream.h b/Source/Core/AudioCommon/Src/NullSoundStream.h index b82a584cde..aade06b9ac 100644 --- a/Source/Core/AudioCommon/Src/NullSoundStream.h +++ b/Source/Core/AudioCommon/Src/NullSoundStream.h @@ -16,7 +16,7 @@ class NullSound : public SoundStream short realtimeBuffer[BUF_SIZE / sizeof(short)]; public: - NullSound(CMixer *mixer, void *hWnd = NULL) + NullSound(CMixer *mixer) : SoundStream(mixer) {} diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index 488f0d0df4..bccf3bd824 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -48,9 +48,9 @@ public: OpenALStream(CMixer *mixer, void *hWnd = NULL) : SoundStream(mixer) , uiSource(0) - {}; + {} - virtual ~OpenALStream() {}; + virtual ~OpenALStream() {} virtual bool Start(); virtual void SoundLoop(); @@ -74,7 +74,9 @@ private: u8 numBuffers; #else public: - OpenALStream(CMixer *mixer, void *hWnd = NULL): SoundStream(mixer) {} + OpenALStream(CMixer *mixer) + : SoundStream(mixer) + {} #endif // HAVE_OPENAL }; diff --git a/Source/Core/AudioCommon/Src/OpenSLESStream.cpp b/Source/Core/AudioCommon/Src/OpenSLESStream.cpp index 26391d5d72..67e77a4d86 100644 --- a/Source/Core/AudioCommon/Src/OpenSLESStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenSLESStream.cpp @@ -21,7 +21,7 @@ static SLPlayItf bqPlayerPlay; static SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue; static SLMuteSoloItf bqPlayerMuteSolo; static SLVolumeItf bqPlayerVolume; -static CMixer *g_mixer; +static CMixer *g_mixer; #define BUFFER_SIZE 512 #define BUFFER_SIZE_IN_SAMPLES (BUFFER_SIZE / 2) diff --git a/Source/Core/AudioCommon/Src/PulseAudioStream.h b/Source/Core/AudioCommon/Src/PulseAudioStream.h index 62b7e86f82..8be8eae11d 100644 --- a/Source/Core/AudioCommon/Src/PulseAudioStream.h +++ b/Source/Core/AudioCommon/Src/PulseAudioStream.h @@ -24,7 +24,7 @@ public: PulseAudio(CMixer *mixer); virtual bool Start(); - virtual void Stop(); + virtual void Stop(); static bool isValid() {return true;} diff --git a/Source/Core/AudioCommon/Src/SoundStream.h b/Source/Core/AudioCommon/Src/SoundStream.h index 855a0cc4f0..b7b0b20a58 100644 --- a/Source/Core/AudioCommon/Src/SoundStream.h +++ b/Source/Core/AudioCommon/Src/SoundStream.h @@ -21,11 +21,11 @@ protected: WaveFileWriter g_wave_writer; bool m_muted; -public: - SoundStream(CMixer *mixer) : m_mixer(mixer), threadData(0), m_logAudio(false), m_muted(false) {} - virtual ~SoundStream() { delete m_mixer;} +public: + SoundStream(CMixer *mixer) : m_mixer(mixer), threadData(0), m_logAudio(false), m_muted(false) {} + virtual ~SoundStream() { delete m_mixer; } - static bool isValid() { return false; } + static bool isValid() { return false; } virtual CMixer *GetMixer() const { return m_mixer; } virtual bool Start() { return false; } virtual void SetVolume(int) {} diff --git a/Source/Core/AudioCommon/Src/WaveFile.cpp b/Source/Core/AudioCommon/Src/WaveFile.cpp index 7eabbb3b48..6443d1c112 100644 --- a/Source/Core/AudioCommon/Src/WaveFile.cpp +++ b/Source/Core/AudioCommon/Src/WaveFile.cpp @@ -121,7 +121,7 @@ void WaveFileWriter::AddStereoSamplesBE(const short *sample_data, u32 count) if (count > BUF_SIZE * 2) PanicAlert("WaveFileWriter - buffer too small (count = %u).", count); - if (skip_silence) + if (skip_silence) { bool all_zero = true; diff --git a/Source/Core/AudioCommon/Src/XAudio2Stream.cpp b/Source/Core/AudioCommon/Src/XAudio2Stream.cpp index 59a826365c..8c8a2253d0 100644 --- a/Source/Core/AudioCommon/Src/XAudio2Stream.cpp +++ b/Source/Core/AudioCommon/Src/XAudio2Stream.cpp @@ -2,9 +2,42 @@ // Licensed under GPLv2 // Refer to the license.txt file included. +#include #include "AudioCommon.h" #include "XAudio2Stream.h" +#ifndef XAUDIO2_DLL +#error You are building this module against the wrong version of DirectX. You probably need to remove DXSDK_DIR from your include path. +#endif + +struct StreamingVoiceContext : public IXAudio2VoiceCallback +{ +private: + CMixer* const m_mixer; + Common::Event& m_sound_sync_event; + IXAudio2SourceVoice* m_source_voice; + std::unique_ptr xaudio_buffer; + + void SubmitBuffer(PBYTE buf_data); + +public: + StreamingVoiceContext(IXAudio2 *pXAudio2, CMixer *pMixer, Common::Event& pSyncEvent); + + ~StreamingVoiceContext(); + + void StreamingVoiceContext::Stop(); + void StreamingVoiceContext::Play(); + + STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {} + STDMETHOD_(void, OnVoiceProcessingPassStart) (UINT32) {} + STDMETHOD_(void, OnVoiceProcessingPassEnd) () {} + STDMETHOD_(void, OnBufferStart) (void*) {} + STDMETHOD_(void, OnLoopEnd) (void*) {} + STDMETHOD_(void, OnStreamEnd) () {} + + STDMETHOD_(void, OnBufferEnd) (void* context); +}; + const int NUM_BUFFERS = 3; const int SAMPLES_PER_BUFFER = 96; @@ -90,13 +123,59 @@ void StreamingVoiceContext::OnBufferEnd(void* context) SubmitBuffer(static_cast(context)); } +HMODULE XAudio2::m_xaudio2_dll = nullptr; +typedef decltype(&XAudio2Create) XAudio2Create_t; +void *XAudio2::PXAudio2Create = nullptr; + +bool XAudio2::InitLibrary() +{ + if (m_xaudio2_dll) + { + return true; + } + + m_xaudio2_dll = ::LoadLibrary(XAUDIO2_DLL); + if (!m_xaudio2_dll) + { + return false; + } + + if (!PXAudio2Create) + { + PXAudio2Create = (XAudio2Create_t)::GetProcAddress(m_xaudio2_dll, "XAudio2Create"); + if (!PXAudio2Create) + { + ::FreeLibrary(m_xaudio2_dll); + m_xaudio2_dll = nullptr; + return false; + } + } + + return true; +} + +XAudio2::XAudio2(CMixer *mixer) + : SoundStream(mixer) + , m_mastering_voice(nullptr) + , m_volume(1.0f) + , m_cleanup_com(SUCCEEDED(CoInitializeEx(NULL, COINIT_MULTITHREADED))) +{ +} + +XAudio2::~XAudio2() +{ + Stop(); + if (m_cleanup_com) + CoUninitialize(); +} + bool XAudio2::Start() { HRESULT hr; // callback doesn't seem to run on a specific cpu anyways IXAudio2* xaudptr; - if (FAILED(hr = XAudio2Create(&xaudptr, 0, XAUDIO2_DEFAULT_PROCESSOR))) + if (FAILED(hr = ((XAudio2Create_t)PXAudio2Create)(&xaudptr, 0, XAUDIO2_DEFAULT_PROCESSOR))) { PanicAlertT("XAudio2 init failed: %#X", hr); Stop(); @@ -172,4 +251,11 @@ void XAudio2::Stop() } m_xaudio2.reset(); // release interface + + if (m_xaudio2_dll) + { + ::FreeLibrary(m_xaudio2_dll); + m_xaudio2_dll = nullptr; + PXAudio2Create = nullptr; + } } diff --git a/Source/Core/AudioCommon/Src/XAudio2Stream.h b/Source/Core/AudioCommon/Src/XAudio2Stream.h index 4310a46435..d85aafc4f7 100644 --- a/Source/Core/AudioCommon/Src/XAudio2Stream.h +++ b/Source/Core/AudioCommon/Src/XAudio2Stream.h @@ -2,43 +2,21 @@ // Licensed under GPLv2 // Refer to the license.txt file included. -#ifndef _XAUDIO2STREAM_H_ -#define _XAUDIO2STREAM_H_ +// This audio backend uses XAudio2 via XAUDIO2_DLL +// It works on Windows 8+, where it is included as an OS component. +// This backend is always compiled, but only available if running on Win8+ +#pragma once + +#include +#include "Thread.h" #include "SoundStream.h" #ifdef _WIN32 -#include "Thread.h" -#include -#include -struct StreamingVoiceContext : public IXAudio2VoiceCallback -{ -private: - CMixer* const m_mixer; - Common::Event& m_sound_sync_event; - IXAudio2SourceVoice* m_source_voice; - std::unique_ptr xaudio_buffer; - - void SubmitBuffer(PBYTE buf_data); - -public: - StreamingVoiceContext(IXAudio2 *pXAudio2, CMixer *pMixer, Common::Event& pSyncEvent); - - ~StreamingVoiceContext(); - - void StreamingVoiceContext::Stop(); - void StreamingVoiceContext::Play(); - - STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {} - STDMETHOD_(void, OnVoiceProcessingPassStart) (UINT32) {} - STDMETHOD_(void, OnVoiceProcessingPassEnd) () {} - STDMETHOD_(void, OnBufferStart) (void*) {} - STDMETHOD_(void, OnLoopEnd) (void*) {} - STDMETHOD_(void, OnStreamEnd) () {} - - STDMETHOD_(void, OnBufferEnd) (void* context); -}; +struct StreamingVoiceContext; +struct IXAudio2; +struct IXAudio2MasteringVoice; #endif @@ -46,6 +24,7 @@ class XAudio2 : public SoundStream { #ifdef _WIN32 +private: class Releaser { public: @@ -56,7 +35,6 @@ class XAudio2 : public SoundStream } }; -private: std::unique_ptr m_xaudio2; std::unique_ptr m_voice_context; IXAudio2MasteringVoice *m_mastering_voice; @@ -66,21 +44,15 @@ private: const bool m_cleanup_com; -public: - XAudio2(CMixer *mixer) - : SoundStream(mixer) - , m_mastering_voice(nullptr) - , m_volume(1.0f) - , m_cleanup_com(SUCCEEDED(CoInitializeEx(NULL, COINIT_MULTITHREADED))) - {} + static HMODULE m_xaudio2_dll; + static void *PXAudio2Create; + + static bool InitLibrary(); + +public: + XAudio2(CMixer *mixer); + virtual ~XAudio2(); - virtual ~XAudio2() - { - Stop(); - if (m_cleanup_com) - CoUninitialize(); - } - virtual bool Start(); virtual void Stop(); @@ -89,15 +61,14 @@ public: virtual void SetVolume(int volume); virtual bool usesMixer() const { return true; } - static bool isValid() { return true; } + static bool isValid() { return InitLibrary(); } #else public: - XAudio2(CMixer *mixer, void *hWnd = NULL) + XAudio2(CMixer *mixer) : SoundStream(mixer) {} + #endif }; - -#endif //_XAUDIO2STREAM_H_ diff --git a/Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp b/Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp new file mode 100644 index 0000000000..782a29a301 --- /dev/null +++ b/Source/Core/AudioCommon/Src/XAudio2_7Stream.cpp @@ -0,0 +1,289 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +// Note that this file *and this file only* must also have %DXSDK_DIR%/Include prepended +// to its include path in order fetch dxsdkver.h and XAudio2.h from the DXSDK +// instead of other possible places. This may be accomplished by adding the path to +// the AdditionalIncludeDirectories for this file via msbuild. + +#include "AudioCommon.h" +#include "XAudio2_7Stream.h" + +#ifdef HAVE_DXSDK +#include +#if (_DXSDK_PRODUCT_MAJOR == 9) && (_DXSDK_PRODUCT_MINOR == 29) && (_DXSDK_BUILD_MAJOR == 1962) && (_DXSDK_BUILD_MINOR == 0) +#define HAVE_DXSDK_JUNE_2010 +#else +#pragma message("You have DirectX SDK installed, but it is not the expected version (June 2010). Update it to build this module.") +#endif +#endif + +#ifdef HAVE_DXSDK_JUNE_2010 + +#include + +struct StreamingVoiceContext2_7 : public IXAudio2VoiceCallback +{ +private: + CMixer* const m_mixer; + Common::Event& m_sound_sync_event; + IXAudio2SourceVoice* m_source_voice; + std::unique_ptr xaudio_buffer; + + void SubmitBuffer(PBYTE buf_data); + +public: + StreamingVoiceContext2_7(IXAudio2 *pXAudio2, CMixer *pMixer, Common::Event& pSyncEvent); + + ~StreamingVoiceContext2_7(); + + void StreamingVoiceContext2_7::Stop(); + void StreamingVoiceContext2_7::Play(); + + STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {} + STDMETHOD_(void, OnVoiceProcessingPassStart) (UINT32) {} + STDMETHOD_(void, OnVoiceProcessingPassEnd) () {} + STDMETHOD_(void, OnBufferStart) (void*) {} + STDMETHOD_(void, OnLoopEnd) (void*) {} + STDMETHOD_(void, OnStreamEnd) () {} + + STDMETHOD_(void, OnBufferEnd) (void* context); +}; + +const int NUM_BUFFERS = 3; +const int SAMPLES_PER_BUFFER = 96; + +const int NUM_CHANNELS = 2; +const int BUFFER_SIZE = SAMPLES_PER_BUFFER * NUM_CHANNELS; +const int BUFFER_SIZE_BYTES = BUFFER_SIZE * sizeof(s16); + +void StreamingVoiceContext2_7::SubmitBuffer(PBYTE buf_data) +{ + XAUDIO2_BUFFER buf = {}; + buf.AudioBytes = BUFFER_SIZE_BYTES; + buf.pContext = buf_data; + buf.pAudioData = buf_data; + + m_source_voice->SubmitSourceBuffer(&buf); +} + +StreamingVoiceContext2_7::StreamingVoiceContext2_7(IXAudio2 *pXAudio2, CMixer *pMixer, Common::Event& pSyncEvent) + : m_mixer(pMixer) + , m_sound_sync_event(pSyncEvent) + , xaudio_buffer(new BYTE[NUM_BUFFERS * BUFFER_SIZE_BYTES]()) +{ + WAVEFORMATEXTENSIBLE wfx = {}; + + wfx.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; + wfx.Format.nSamplesPerSec = m_mixer->GetSampleRate(); + wfx.Format.nChannels = 2; + wfx.Format.wBitsPerSample = 16; + wfx.Format.nBlockAlign = wfx.Format.nChannels*wfx.Format.wBitsPerSample / 8; + wfx.Format.nAvgBytesPerSec = wfx.Format.nSamplesPerSec * wfx.Format.nBlockAlign; + wfx.Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX); + wfx.Samples.wValidBitsPerSample = 16; + wfx.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT; + wfx.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; + + // create source voice + HRESULT hr; + if (FAILED(hr = pXAudio2->CreateSourceVoice(&m_source_voice, &wfx.Format, XAUDIO2_VOICE_NOSRC, 1.0f, this))) + { + PanicAlertT("XAudio2_7 CreateSourceVoice failed: %#X", hr); + return; + } + + m_source_voice->Start(); + + // start buffers with silence + for (int i = 0; i != NUM_BUFFERS; ++i) + SubmitBuffer(xaudio_buffer.get() + (i * BUFFER_SIZE_BYTES)); +} + +StreamingVoiceContext2_7::~StreamingVoiceContext2_7() +{ + if (m_source_voice) + { + m_source_voice->Stop(); + m_source_voice->DestroyVoice(); + } +} + +void StreamingVoiceContext2_7::Stop() +{ + if (m_source_voice) + m_source_voice->Stop(); +} + +void StreamingVoiceContext2_7::Play() +{ + if (m_source_voice) + m_source_voice->Start(); +} + +void StreamingVoiceContext2_7::OnBufferEnd(void* context) +{ + // buffer end callback; gets SAMPLES_PER_BUFFER samples for a new buffer + + if (!m_source_voice || !context) + return; + + //m_sound_sync_event->Wait(); // sync + //m_sound_sync_event->Spin(); // or tight sync + + m_mixer->Mix(static_cast(context), SAMPLES_PER_BUFFER); + SubmitBuffer(static_cast(context)); +} + +HMODULE XAudio2_7::m_xaudio2_dll = nullptr; + +void XAudio2_7::ReleaseIXAudio2(IXAudio2* ptr) +{ + ptr->Release(); +} + +bool XAudio2_7::InitLibrary() +{ + if (m_xaudio2_dll) + { + return true; + } + + m_xaudio2_dll = ::LoadLibrary(TEXT("xaudio2_7.dll")); + + return m_xaudio2_dll != nullptr; +} + +XAudio2_7::XAudio2_7(CMixer *mixer) + : SoundStream(mixer) + , m_mastering_voice(nullptr) + , m_volume(1.0f) + , m_cleanup_com(SUCCEEDED(CoInitializeEx(NULL, COINIT_MULTITHREADED))) +{ +} + +XAudio2_7::~XAudio2_7() +{ + Stop(); + if (m_cleanup_com) + CoUninitialize(); +} + +bool XAudio2_7::Start() +{ + HRESULT hr; + + // callback doesn't seem to run on a specific cpu anyways + IXAudio2* xaudptr; + if (FAILED(hr = XAudio2Create(&xaudptr, 0, XAUDIO2_DEFAULT_PROCESSOR))) + { + PanicAlertT("XAudio2_7 init failed: %#X", hr); + Stop(); + return false; + } + m_xaudio2 = std::unique_ptr(xaudptr); + + // XAudio2 master voice + // XAUDIO2_DEFAULT_CHANNELS instead of 2 for expansion? + if (FAILED(hr = m_xaudio2->CreateMasteringVoice(&m_mastering_voice, 2, m_mixer->GetSampleRate()))) + { + PanicAlertT("XAudio2_7 master voice creation failed: %#X", hr); + Stop(); + return false; + } + + // Volume + m_mastering_voice->SetVolume(m_volume); + + m_voice_context = std::unique_ptr + (new StreamingVoiceContext2_7(m_xaudio2.get(), m_mixer, m_sound_sync_event)); + + return true; +} + +void XAudio2_7::SetVolume(int volume) +{ + //linear 1- .01 + m_volume = (float)volume / 100.f; + + if (m_mastering_voice) + m_mastering_voice->SetVolume(m_volume); +} + +void XAudio2_7::Update() +{ + //m_sound_sync_event.Set(); + + //static int xi = 0; + //if (100000 == ++xi) + //{ + // xi = 0; + // XAUDIO2_PERFORMANCE_DATA perfData; + // pXAudio2->GetPerformanceData(&perfData); + // NOTICE_LOG(DSPHLE, "XAudio2_7 latency (samples): %i", perfData.CurrentLatencyInSamples); + // NOTICE_LOG(DSPHLE, "XAudio2_7 total glitches: %i", perfData.GlitchesSinceEngineStarted); + //} +} + +void XAudio2_7::Clear(bool mute) +{ + m_muted = mute; + + if (m_voice_context) + { + if (m_muted) + m_voice_context->Stop(); + else + m_voice_context->Play(); + } +} + +void XAudio2_7::Stop() +{ + //m_sound_sync_event.Set(); + + m_voice_context.reset(); + + if (m_mastering_voice) + { + m_mastering_voice->DestroyVoice(); + m_mastering_voice = nullptr; + } + + m_xaudio2.reset(); // release interface + + if (m_xaudio2_dll) + { + ::FreeLibrary(m_xaudio2_dll); + m_xaudio2_dll = nullptr; + } +} + +bool XAudio2_7::usesMixer() const { return true; } + +#else + +struct StreamingVoiceContext2_7 {}; +struct IXAudio2 {}; +struct IXAudio2MasteringVoice {}; +void XAudio2_7::ReleaseIXAudio2(IXAudio2* ptr) {} + +XAudio2_7::XAudio2_7(CMixer *mixer) + : SoundStream(mixer) + , m_mastering_voice(nullptr) + , m_volume(1.0f) + , m_cleanup_com(false) +{} + +XAudio2_7::~XAudio2_7() {} + +bool XAudio2_7::Start() { return SoundStream::Start(); } +void XAudio2_7::Stop() {} +void XAudio2_7::Update() {} +void XAudio2_7::Clear(bool mute) {} +void XAudio2_7::SetVolume(int volume) {} +bool XAudio2_7::usesMixer() const { return false; } +bool XAudio2_7::InitLibrary() { return false; } + +#endif diff --git a/Source/Core/AudioCommon/Src/XAudio2_7Stream.h b/Source/Core/AudioCommon/Src/XAudio2_7Stream.h new file mode 100644 index 0000000000..bbea6dd2db --- /dev/null +++ b/Source/Core/AudioCommon/Src/XAudio2_7Stream.h @@ -0,0 +1,81 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +// This audio backend uses XAudio2 via XAudio2_7.dll +// This version of the library is included in the June 2010 DirectX SDK and +// works on all versions of Windows, however the SDK and/or redist must be +// seperately installed. +// Therefore this backend is available iff: +// * SDK is available at compile-time +// * runtime dll is available at runtime + +#pragma once + +#include +#include "Thread.h" +#include "SoundStream.h" + +#ifdef _WIN32 + +#include + +struct StreamingVoiceContext2_7; +struct IXAudio2; +struct IXAudio2MasteringVoice; + +#endif + +class XAudio2_7 : public SoundStream +{ +#ifdef _WIN32 + +private: + static void ReleaseIXAudio2(IXAudio2 *ptr); + + class Releaser + { + public: + template + void operator()(R *ptr) + { + ReleaseIXAudio2(ptr); + } + }; + + std::unique_ptr m_xaudio2; + std::unique_ptr m_voice_context; + IXAudio2MasteringVoice *m_mastering_voice; + + Common::Event m_sound_sync_event; + float m_volume; + + const bool m_cleanup_com; + + static HMODULE m_xaudio2_dll; + + static bool InitLibrary(); + +public: + XAudio2_7(CMixer *mixer); + virtual ~XAudio2_7(); + + virtual bool Start(); + virtual void Stop(); + + virtual void Update(); + virtual void Clear(bool mute); + virtual void SetVolume(int volume); + virtual bool usesMixer() const; + + static bool isValid() { return InitLibrary(); } + +#else + +public: + XAudio2_7(CMixer *mixer) + : SoundStream(mixer) + {} + +#endif +}; diff --git a/Source/Core/AudioCommon/Src/aldlist.cpp b/Source/Core/AudioCommon/Src/aldlist.cpp index fa11fe3282..577ed733fe 100644 --- a/Source/Core/AudioCommon/Src/aldlist.cpp +++ b/Source/Core/AudioCommon/Src/aldlist.cpp @@ -1,17 +1,17 @@ /* * Copyright (c) 2006, Creative Labs Inc. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are permitted provided * that the following conditions are met: - * + * * * Redistributions of source code must retain the above copyright notice, this list of conditions and * the following disclaimer. * * 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. * * Neither the name of Creative Labs Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR @@ -36,7 +36,7 @@ #endif -/* +/* * Init call */ ALDeviceList::ALDeviceList() @@ -61,30 +61,30 @@ ALDeviceList::ALDeviceList() defaultDeviceName = (char *)alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER); index = 0; // go through device list (each device terminated with a single NULL, list terminated with double NULL) - while (devices != NULL && strlen(devices) > 0) + while (devices != NULL && strlen(devices) > 0) { - if (strcmp(defaultDeviceName, devices) == 0) + if (strcmp(defaultDeviceName, devices) == 0) { defaultDeviceIndex = index; } ALCdevice *device = alcOpenDevice(devices); - if (device) + if (device) { ALCcontext *context = alcCreateContext(device, NULL); - if (context) + if (context) { alcMakeContextCurrent(context); // if new actual device name isn't already in the list, then add it... actualDeviceName = alcGetString(device, ALC_DEVICE_SPECIFIER); bool bNewName = true; - for (s32 i = 0; i < GetNumDevices(); i++) + for (s32 i = 0; i < GetNumDevices(); i++) { - if (strcmp(GetDeviceName(i), actualDeviceName) == 0) + if (strcmp(GetDeviceName(i), actualDeviceName) == 0) { bNewName = false; } } - if ((bNewName) && (actualDeviceName != NULL) && (strlen(actualDeviceName) > 0)) + if ((bNewName) && (actualDeviceName != NULL) && (strlen(actualDeviceName) > 0)) { ALDeviceInfo.bSelected = true; ALDeviceInfo.strDeviceName = actualDeviceName; @@ -107,7 +107,7 @@ ALDeviceList::ALDeviceList() ALDeviceInfo.pvstrExtensions->push_back("AL_EXT_LINEAR_DISTANCE"); if (alIsExtensionPresent("AL_EXT_EXPONENT_DISTANCE") == AL_TRUE) ALDeviceInfo.pvstrExtensions->push_back("AL_EXT_EXPONENT_DISTANCE"); - + if (alIsExtensionPresent("EAX2.0") == AL_TRUE) ALDeviceInfo.pvstrExtensions->push_back("EAX2.0"); if (alIsExtensionPresent("EAX3.0") == AL_TRUE) @@ -139,15 +139,15 @@ ALDeviceList::ALDeviceList() ResetFilters(); } -/* +/* * Exit call */ ALDeviceList::~ALDeviceList() { - for (u32 i = 0; i < vDeviceInfo.size(); i++) { - if (vDeviceInfo[i].pvstrExtensions) { - vDeviceInfo[i].pvstrExtensions->clear(); - delete vDeviceInfo[i].pvstrExtensions; + for (auto& di : vDeviceInfo) { + if (di.pvstrExtensions) { + di.pvstrExtensions->clear(); + delete di.pvstrExtensions; } } @@ -159,10 +159,10 @@ ALDeviceList::~ALDeviceList() */ s32 ALDeviceList::GetNumDevices() { - return (s32)vDeviceInfo.size(); + return (s32)vDeviceInfo.size(); } -/* +/* * Returns the device name at an index in the complete device list */ char * ALDeviceList::GetDeviceName(s32 index) @@ -206,11 +206,11 @@ bool ALDeviceList::IsExtensionSupported(s32 index, char *szExtName) bool bReturn = false; if (index < GetNumDevices()) { - for (u32 i = 0; i < vDeviceInfo[index].pvstrExtensions->size(); i++) { - if (!strcasecmp(vDeviceInfo[index].pvstrExtensions->at(i).c_str(), szExtName)) { + for (auto& ext : *vDeviceInfo[index].pvstrExtensions) { + if (!strcasecmp(ext.c_str(), szExtName)) { bReturn = true; break; - } + } } } @@ -225,7 +225,7 @@ s32 ALDeviceList::GetDefaultDevice() return defaultDeviceIndex; } -/* +/* * Deselects devices which don't have the specified minimum version */ void ALDeviceList::FilterDevicesMinVer(s32 major, s32 minor) @@ -239,7 +239,7 @@ void ALDeviceList::FilterDevicesMinVer(s32 major, s32 minor) } } -/* +/* * Deselects devices which don't have the specified maximum version */ void ALDeviceList::FilterDevicesMaxVer(s32 major, s32 minor) @@ -260,16 +260,16 @@ void ALDeviceList::FilterDevicesExtension(char *szExtName) { bool bFound; - for (u32 i = 0; i < vDeviceInfo.size(); i++) { + for (auto& di : vDeviceInfo) { bFound = false; - for (u32 j = 0; j < vDeviceInfo[i].pvstrExtensions->size(); j++) { - if (!strcasecmp(vDeviceInfo[i].pvstrExtensions->at(j).c_str(), szExtName)) { + for (auto& ext : *di.pvstrExtensions) { + if (!strcasecmp(ext.c_str(), szExtName)) { bFound = true; break; } } if (!bFound) - vDeviceInfo[i].bSelected = false; + di.bSelected = false; } } @@ -339,9 +339,9 @@ u32 ALDeviceList::GetMaxNumSources() alDeleteSources(iSourceCount, uiSources); if (alGetError() != AL_NO_ERROR) { - for (u32 i = 0; i < 256; i++) + for (auto& uiSource : uiSources) { - alDeleteSources(1, &uiSources[i]); + alDeleteSources(1, &uiSource); } } diff --git a/Source/Core/AudioCommon/Src/stdafx.cpp b/Source/Core/AudioCommon/Src/stdafx.cpp new file mode 100644 index 0000000000..b602b39925 --- /dev/null +++ b/Source/Core/AudioCommon/Src/stdafx.cpp @@ -0,0 +1,5 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "stdafx.h" diff --git a/Source/Core/AudioCommon/Src/stdafx.h b/Source/Core/AudioCommon/Src/stdafx.h new file mode 100644 index 0000000000..9cd419573c --- /dev/null +++ b/Source/Core/AudioCommon/Src/stdafx.h @@ -0,0 +1,17 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#pragma once +/* +#ifdef HAVE_DXSDK_JUNE_2010 +#define _WIN32_WINNT 0x501 +#else +#pragma message("Resulting binary will be compatible with DirectX >= Windows 8. Install the June 2010 DirectX SDK if you want to build for older environments.") +#define _WIN32_WINNT 0x602 +#endif +*/ +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +#include +#include diff --git a/Source/Core/Common/CMakeLists.txt b/Source/Core/Common/CMakeLists.txt index ce76f003da..e6701061d9 100644 --- a/Source/Core/Common/CMakeLists.txt +++ b/Source/Core/Common/CMakeLists.txt @@ -24,8 +24,6 @@ set(SRCS Src/BreakPoints.cpp Src/x64ABI.cpp Src/x64Analyzer.cpp Src/x64Emitter.cpp - Src/Crypto/aes_cbc.cpp - Src/Crypto/aes_core.cpp Src/Crypto/bn.cpp Src/Crypto/ec.cpp) diff --git a/Source/Core/Common/Common.vcxproj b/Source/Core/Common/Common.vcxproj index 20cf92dfc3..aeedafb20c 100644 --- a/Source/Core/Common/Common.vcxproj +++ b/Source/Core/Common/Common.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,161 +19,81 @@ - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - Common + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4} - - true - StaticLibrary - MultiByte - - - true - StaticLibrary - MultiByte - - - false + StaticLibrary + v120 Unicode - - StaticLibrary - false - MultiByte + + true - + false - StaticLibrary - Unicode - - - StaticLibrary - false - MultiByte - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - ..\..\..\Externals\polarssl\include - - - - - - true - - - - ..\..\..\Externals\polarssl\include - - - - - - true - true - true - - - - ..\..\..\Externals\polarssl\include - - - - - - true - true - true - - - - ..\..\..\Externals\polarssl\include - - - - - - true - true - true - - - - ..\..\..\Externals\polarssl\include - - - - - - true - true - true - - - - ..\..\..\Externals\polarssl\include - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - @@ -199,12 +111,7 @@ - Create - Create - Create - Create - Create - Create + Create @@ -219,56 +126,15 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + {bdb6578b-0691-4e80-a46c-df21639fd3b8} + + + {41279555-f94f-4ebc-99de-af863c10c5c4} + diff --git a/Source/Core/Common/Common.vcxproj.filters b/Source/Core/Common/Common.vcxproj.filters index 05b9edcb14..8b257398f6 100644 --- a/Source/Core/Common/Common.vcxproj.filters +++ b/Source/Core/Common/Common.vcxproj.filters @@ -1,52 +1,12 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - Logging - - - Logging - - - Crypto - - - Crypto - - - Crypto - - - Crypto - - - - - + + {0336df21-7c3f-48a9-b767-9cf11d8958a6} + + + {c54973ce-5723-491c-ac23-41cea3565b05} + @@ -67,6 +27,7 @@ + @@ -76,48 +37,75 @@ - - + + + + + + Crypto + + + Logging + Logging Logging - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Crypto + + + Crypto + + Logging - - - Crypto - - - Crypto - - - Crypto - - - - - + + + Logging + + - - - - - {21b7df68-af69-45f4-9741-590a6a7f1ed1} - - - {f078f36e-a0ff-4cd0-95f8-476100d68e68} - + diff --git a/Source/Core/Common/SVNRevGen.vcxproj b/Source/Core/Common/SCMRevGen.vcxproj similarity index 59% rename from Source/Core/Common/SVNRevGen.vcxproj rename to Source/Core/Common/SCMRevGen.vcxproj index 803e059d19..8b8b1867f3 100644 --- a/Source/Core/Common/SVNRevGen.vcxproj +++ b/Source/Core/Common/SCMRevGen.vcxproj @@ -1,44 +1,47 @@  - + - + Release - x64 + Win32 - - - - - - - - - {69F00340-5C3D-449F-9A80-958435C6CF06} - SVNRevGen - SCMRevGen + {41279555-F94F-4EBC-99DE-AF863C10C5C4} - + Utility false - Unicode + v120 - + + - - - + + + $(BuildRootDir) + + cscript /nologo /E:JScript "make_scmrev.h.js" + + + + + + + diff --git a/Source/Core/Common/Src/ArmCPUDetect.cpp b/Source/Core/Common/Src/ArmCPUDetect.cpp index ef49d6efb1..f04d7d9b49 100644 --- a/Source/Core/Common/Src/ArmCPUDetect.cpp +++ b/Source/Core/Common/Src/ArmCPUDetect.cpp @@ -34,7 +34,7 @@ char *GetCPUString() auto const fp = file.GetHandle(); if (!fp) return 0; - + while (fgets(buf, sizeof(buf), fp)) { if (strncmp(buf, marker, sizeof(marker) - 1)) @@ -43,7 +43,7 @@ char *GetCPUString() cpu_string = strndup(cpu_string, strlen(cpu_string) - 1); // Strip the newline break; } - + return cpu_string; } @@ -110,7 +110,7 @@ bool CheckCPUFeature(const char *feature) auto const fp = file.GetHandle(); if (!fp) return 0; - + while (fgets(buf, sizeof(buf), fp)) { if (strncmp(buf, marker, sizeof(marker) - 1)) @@ -120,11 +120,11 @@ bool CheckCPUFeature(const char *feature) while (token != NULL) { if (strstr(token, feature)) - return true; + return true; token = strtok(NULL, " "); } } - + return false; } #endif @@ -144,14 +144,14 @@ int GetCoreCount() auto const fp = file.GetHandle(); if (!fp) return 0; - + while (fgets(buf, sizeof(buf), fp)) { if (strncmp(buf, marker, sizeof(marker) - 1)) continue; ++cores; } - + return cores; #endif } @@ -170,10 +170,10 @@ void CPUInfo::Detect() HTT = false; OS64bit = false; CPU64bit = false; - Mode64bit = false; + Mode64bit = false; vendor = VENDOR_ARM; - - // Get the information about the CPU + + // Get the information about the CPU num_cores = GetCoreCount(); #if defined(__SYMBIAN32__) || defined(BLACKBERRY) || defined(IOS) bool isVFP3 = false; diff --git a/Source/Core/Common/Src/ArmEmitter.cpp b/Source/Core/Common/Src/ArmEmitter.cpp index bb90097f0f..6178d2c58c 100644 --- a/Source/Core/Common/Src/ArmEmitter.cpp +++ b/Source/Core/Common/Src/ArmEmitter.cpp @@ -104,7 +104,7 @@ bool ARMXEmitter::TrySetValue_TwoOp(ARMReg reg, u32 val) } if (ops > 2) return false; - + bool first = true; for (int i = 0; i < 16; i++, val >>=2) { if (val & 0x3) { @@ -418,7 +418,7 @@ void ARMXEmitter::SetJumpTarget(FixupBranch const &branch) branch.ptr); if(branch.type == 0) // B *(u32*)branch.ptr = (u32)(branch.condition | (10 << 24) | ((distance >> 2) & - 0x00FFFFFF)); + 0x00FFFFFF)); else // BL *(u32*)branch.ptr = (u32)(branch.condition | 0x0B000000 | ((distance >> 2) & 0x00FFFFFF)); @@ -497,7 +497,7 @@ void ARMXEmitter::WriteShiftedDataOp(u32 op, bool SetFlags, ARMReg dest, ARMReg Write32(condition | (13 << 21) | (SetFlags << 20) | (dest << 12) | op2.Imm5() | (op << 4) | src); } -// IMM, REG, IMMSREG, RSR +// IMM, REG, IMMSREG, RSR // -1 for invalid if the instruction doesn't support that const s32 InstOps[][4] = {{16, 0, 0, 0}, // AND(s) {17, 1, 1, 1}, // EOR(s) @@ -517,7 +517,7 @@ const s32 InstOps[][4] = {{16, 0, 0, 0}, // AND(s) {31, 15, 15, 15}, // MVN(s) {24, -1, -1, -1}, // MOVW {26, -1, -1, -1}, // MOVT - }; + }; const char *InstNames[] = { "AND", "EOR", @@ -586,7 +586,7 @@ void ARMXEmitter::WriteInstruction (u32 Op, ARMReg Rd, ARMReg Rn, Operand2 Rm, b } } if (op == -1) - _dbg_assert_msg_(DYNA_REC, false, "%s not yet support %d", InstNames[Op], Rm.GetType()); + _dbg_assert_msg_(DYNA_REC, false, "%s not yet support %d", InstNames[Op], Rm.GetType()); Write32(condition | (op << 21) | (SetFlags ? (1 << 20) : 0) | Rn << 16 | Rd << 12 | Data); } @@ -678,7 +678,7 @@ void ARMXEmitter::SXTH (ARMReg dest, ARMReg op2, u8 rotation) { SXTAH(dest, (ARMReg)15, op2, rotation); } -void ARMXEmitter::SXTAH(ARMReg dest, ARMReg src, ARMReg op2, u8 rotation) +void ARMXEmitter::SXTAH(ARMReg dest, ARMReg src, ARMReg op2, u8 rotation) { // bits ten and 11 are the rotation amount, see 8.8.232 for more // information @@ -688,7 +688,7 @@ void ARMXEmitter::RBIT(ARMReg dest, ARMReg src) { Write32(condition | (0x6F << 20) | (0xF << 16) | (dest << 12) | (0xF3 << 4) | src); } -void ARMXEmitter::REV (ARMReg dest, ARMReg src) +void ARMXEmitter::REV (ARMReg dest, ARMReg src) { Write32(condition | (0x6BF << 16) | (dest << 12) | (0xF3 << 4) | src); } @@ -768,7 +768,7 @@ void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool R bool SignedLoad = false; if (op == -1) - _dbg_assert_msg_(DYNA_REC, false, "%s does not support %d", LoadStoreNames[Op], Rm.GetType()); + _dbg_assert_msg_(DYNA_REC, false, "%s does not support %d", LoadStoreNames[Op], Rm.GetType()); switch (Op) { @@ -801,7 +801,7 @@ void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool R Data = abs(Temp); // The offset is encoded differently on this one. if (SpecialOp) - Data = (Data & 0xF0 << 4) | (Data & 0xF); + Data = ((Data & 0xF0) << 4) | (Data & 0xF); if (Temp >= 0) Add = true; } break; @@ -910,7 +910,7 @@ u32 EncodeVn(ARMReg Vn) { bool quad_reg = Vn >= Q0; bool double_reg = Vn >= D0; - + ARMReg Reg = SubBase(Vn); if (quad_reg) return ((Reg & 0xF) << 16) | ((Reg & 0x10) << 3); @@ -938,13 +938,13 @@ u32 EncodeVm(ARMReg Vm) // Double/single, Neon extern const VFPEnc VFPOps[16][2] = { - {{0xE0, 0xA0}, {0x20, 0xD1}}, // 0: VMLA + {{0xE0, 0xA0}, { -1, -1}}, // 0: VMLA {{0xE1, 0xA4}, { -1, -1}}, // 1: VNMLA - {{0xE0, 0xA4}, {0x22, 0xD1}}, // 2: VMLS + {{0xE0, 0xA4}, { -1, -1}}, // 2: VMLS {{0xE1, 0xA0}, { -1, -1}}, // 3: VNMLS - {{0xE3, 0xA0}, {0x20, 0xD0}}, // 4: VADD - {{0xE3, 0xA4}, {0x22, 0xD0}}, // 5: VSUB - {{0xE2, 0xA0}, {0x30, 0xD1}}, // 6: VMUL + {{0xE3, 0xA0}, { -1, -1}}, // 4: VADD + {{0xE3, 0xA4}, { -1, -1}}, // 5: VSUB + {{0xE2, 0xA0}, { -1, -1}}, // 6: VMUL {{0xE2, 0xA4}, { -1, -1}}, // 7: VNMUL {{0xEB, 0xAC}, { -1 /* 0x3B */, -1 /* 0x70 */}}, // 8: VABS(Vn(0x0) used for encoding) {{0xE8, 0xA0}, { -1, -1}}, // 9: VDIV @@ -980,7 +980,7 @@ void ARMXEmitter::WriteVFPDataOp(u32 Op, ARMReg Vd, ARMReg Vn, ARMReg Vm) VFPEnc enc = VFPOps[Op][quad_reg]; if (enc.opc1 == -1 && enc.opc2 == -1) - _dbg_assert_msg_(DYNA_REC, false, "%s does not support %s", VFPOpNames[Op], quad_reg ? "NEON" : "VFP"); + _dbg_assert_msg_(DYNA_REC, false, "%s does not support %s", VFPOpNames[Op], quad_reg ? "NEON" : "VFP"); u32 VdEnc = EncodeVd(Vd); u32 VnEnc = EncodeVn(Vn); u32 VmEnc = EncodeVm(Vm); @@ -995,7 +995,7 @@ void ARMXEmitter::WriteVFPDataOp6bit(u32 Op, ARMReg Vd, ARMReg Vn, ARMReg Vm, u3 VFPEnc enc = VFPOps[Op][quad_reg]; if (enc.opc1 == -1 && enc.opc2 == -1) - _dbg_assert_msg_(DYNA_REC, false, "%s does not support %s", VFPOpNames[Op], quad_reg ? "NEON" : "VFP"); + _dbg_assert_msg_(DYNA_REC, false, "%s does not support %s", VFPOpNames[Op], quad_reg ? "NEON" : "VFP"); u32 VdEnc = EncodeVd(Vd); u32 VnEnc = EncodeVn(Vn); u32 VmEnc = EncodeVm(Vm); @@ -1112,7 +1112,7 @@ void ARMXEmitter::VMOV(ARMReg Dest, ARMReg Src) if (Dest < D0) { // Moving to a Neon register FROM ARM Reg - Dest = (ARMReg)(Dest - S0); + Dest = (ARMReg)(Dest - S0); Write32(condition | (0xE0 << 20) | ((Dest & 0x1E) << 15) | (Src << 12) \ | (0xA << 8) | ((Dest & 0x1) << 7) | (1 << 4)); return; @@ -1121,9 +1121,9 @@ void ARMXEmitter::VMOV(ARMReg Dest, ARMReg Src) { // Move 64bit from Arm reg ARMReg Src2 = (ARMReg)(Src + 1); - Dest = SubBase(Dest); + Dest = SubBase(Dest); Write32(condition | (0xC4 << 20) | (Src2 << 16) | (Src << 12) \ - | (0xB << 8) | ((Dest & 0x10) << 1) | (1 << 4) | (Dest & 0xF)); + | (0xB << 8) | ((Dest & 0x10) << 1) | (1 << 4) | (Dest & 0xF)); return; } } @@ -1146,7 +1146,7 @@ void ARMXEmitter::VMOV(ARMReg Dest, ARMReg Src) ARMReg Dest2 = (ARMReg)(Dest + 1); Src = SubBase(Src); Write32(condition | (0xC5 << 20) | (Dest2 << 16) | (Dest << 12) \ - | (0xB << 8) | ((Dest & 0x10) << 1) | (1 << 4) | (Src & 0xF)); + | (0xB << 8) | ((Dest & 0x10) << 1) | (1 << 4) | (Src & 0xF)); return; } } @@ -1178,7 +1178,7 @@ void ARMXEmitter::VMOV(ARMReg Dest, ARMReg Src) // Double and quad if (Quad) { - _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Trying to use quad registers when you don't support ASIMD."); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Trying to use quad registers when you don't support ASIMD."); // Gets encoded as a Double register Write32((0xF2 << 24) | ((Dest & 0x10) << 18) | (2 << 20) | ((Src & 0xF) << 16) \ | ((Dest & 0xF) << 12) | (1 << 8) | ((Src & 0x10) << 3) | (1 << 6) \ @@ -1237,7 +1237,7 @@ void ARMXEmitter::VCVT(ARMReg Dest, ARMReg Source, int flags) } } -void NEONXEmitter::VABA(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VABA(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1248,7 +1248,7 @@ void NEONXEmitter::VABA(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) | (encodedSize(Size) << 20) | EncodeVd(Vd) | (0x71 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VABAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VABAL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Vn >= D0 && Vn < Q0, "Pass invalid register to " __FUNCTION__); @@ -1260,7 +1260,7 @@ void NEONXEmitter::VABAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) | (encodedSize(Size) << 20) | EncodeVd(Vd) | (0x50 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VABD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VABD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1273,7 +1273,7 @@ void NEONXEmitter::VABD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) | (encodedSize(Size) << 20) | EncodeVd(Vd) | (0x70 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VABDL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VABDL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Vn >= D0 && Vn < Q0, "Pass invalid register to " __FUNCTION__); @@ -1285,7 +1285,7 @@ void NEONXEmitter::VABDL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) | (encodedSize(Size) << 20) | EncodeVd(Vd) | (0x70 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VABS(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VABS(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1327,7 +1327,7 @@ void NEONXEmitter::VACLT(ARMReg Vd, ARMReg Vn, ARMReg Vm) VACGT(Vd, Vn, Vm); } -void NEONXEmitter::VADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1341,7 +1341,7 @@ void NEONXEmitter::VADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) | (0x8 << 8) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VADDHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VADDHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd < Q0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Vn >= Q0, "Pass invalid register to " __FUNCTION__); @@ -1353,7 +1353,7 @@ void NEONXEmitter::VADDHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) | EncodeVd(Vd) | (0x80 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VADDL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VADDL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Vn >= D0 && Vn < Q0, "Pass invalid register to " __FUNCTION__); @@ -1364,7 +1364,7 @@ void NEONXEmitter::VADDL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) \ | EncodeVd(Vd) | EncodeVm(Vm)); } -void NEONXEmitter::VADDW(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VADDW(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Vn >= Q0, "Pass invalid register to " __FUNCTION__); @@ -1420,7 +1420,7 @@ void NEONXEmitter::VBSL(ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF3 << 24) | (1 << 20) | EncodeVn(Vn) | EncodeVd(Vd) | (0x11 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCEQ(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VCEQ(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1433,7 +1433,7 @@ void NEONXEmitter::VCEQ(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) | (0x81 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCEQ(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCEQ(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1443,7 +1443,7 @@ void NEONXEmitter::VCEQ(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF2 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 16) \ | EncodeVd(Vd) | ((Size & F_32 ? 1 : 0) << 10) | (0x10 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCGE(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VCGE(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1455,7 +1455,7 @@ void NEONXEmitter::VCGE(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) \ | (0x31 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCGE(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCGE(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1464,7 +1464,7 @@ void NEONXEmitter::VCGE(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 16) \ | EncodeVd(Vd) | ((Size & F_32 ? 1 : 0) << 10) | (0x8 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCGT(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VCGT(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1476,7 +1476,7 @@ void NEONXEmitter::VCGT(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) \ | (0x30 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCGT(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCGT(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1485,11 +1485,11 @@ void NEONXEmitter::VCGT(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xD << 20) | (encodedSize(Size) << 18) | (1 << 16) \ | EncodeVd(Vd) | ((Size & F_32 ? 1 : 0) << 10) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCLE(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VCLE(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { VCGE(Size, Vd, Vm, Vn); } -void NEONXEmitter::VCLE(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCLE(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1498,7 +1498,7 @@ void NEONXEmitter::VCLE(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xD << 20) | (encodedSize(Size) << 18) | (1 << 16) \ | EncodeVd(Vd) | ((Size & F_32 ? 1 : 0) << 10) | (3 << 7) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCLS(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCLS(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1508,11 +1508,11 @@ void NEONXEmitter::VCLS(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xD << 20) | (encodedSize(Size) << 18) \ | EncodeVd(Vd) | (1 << 10) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCLT(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VCLT(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { VCGT(Size, Vd, Vm, Vn); } -void NEONXEmitter::VCLT(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCLT(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1521,7 +1521,7 @@ void NEONXEmitter::VCLT(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xD << 20) | (encodedSize(Size) << 18) | (1 << 16) \ | EncodeVd(Vd) | ((Size & F_32 ? 1 : 0) << 10) | (0x20 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCLZ(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCLZ(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1530,7 +1530,7 @@ void NEONXEmitter::VCLZ(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xD << 20) | (encodedSize(Size) << 18) \ | EncodeVd(Vd) | (0x48 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VCNT(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VCNT(u32 Size, ARMReg Vd, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1540,7 +1540,7 @@ void NEONXEmitter::VCNT(NEONElementType Size, ARMReg Vd, ARMReg Vm) Write32((0xF3 << 24) | (0xD << 20) | (encodedSize(Size) << 18) \ | EncodeVd(Vd) | (0x90 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VDUP(NEONElementType Size, ARMReg Vd, ARMReg Vm, u8 index) +void NEONXEmitter::VDUP(u32 Size, ARMReg Vd, ARMReg Vm, u8 index) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1562,7 +1562,7 @@ void NEONXEmitter::VDUP(NEONElementType Size, ARMReg Vd, ARMReg Vm, u8 index) Write32((0xF3 << 24) | (0xD << 20) | (sizeEncoded << 16) | (indexEncoded << 16) \ | EncodeVd(Vd) | (0xC0 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VDUP(NEONElementType Size, ARMReg Vd, ARMReg Rt) +void NEONXEmitter::VDUP(u32 Size, ARMReg Vd, ARMReg Rt) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Rt < D0, "Pass invalid register to " __FUNCTION__); @@ -1616,7 +1616,7 @@ void NEONXEmitter::VFMS(ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | (1 << 21) | EncodeVn(Vn) | EncodeVd(Vd) | (0xC1 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VHADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VHADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1627,7 +1627,7 @@ void NEONXEmitter::VHADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 23) | (encodedSize(Size) << 20) \ | EncodeVn(Vn) | EncodeVd(Vd) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VHSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VHSUB(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1638,7 +1638,7 @@ void NEONXEmitter::VHSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 23) | (encodedSize(Size) << 20) \ | EncodeVn(Vn) | EncodeVd(Vd) | (1 << 9) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VMAX(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VMAX(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1651,7 +1651,7 @@ void NEONXEmitter::VMAX(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 23) | (encodedSize(Size) << 20) \ | EncodeVn(Vn) | EncodeVd(Vd) | (0x60 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VMIN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VMIN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1664,7 +1664,7 @@ void NEONXEmitter::VMIN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 23) | (encodedSize(Size) << 20) \ | EncodeVn(Vn) | EncodeVd(Vd) | (0x61 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VMLA(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VMLA(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1676,7 +1676,7 @@ void NEONXEmitter::VMLA(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) else Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | (0x90 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VMLS(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VMLS(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); @@ -1688,7 +1688,7 @@ void NEONXEmitter::VMLS(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) else Write32((0xF2 << 24) | (1 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | (0x90 << 4) | (register_quad << 6) | EncodeVm(Vm)); } -void NEONXEmitter::VMLAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VMLAL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Vn >= Q0, "Pass invalid register to " __FUNCTION__); @@ -1699,7 +1699,7 @@ void NEONXEmitter::VMLAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 24) | (encodedSize(Size) << 20) \ | EncodeVn(Vn) | EncodeVd(Vd) | (0x80 << 4) | EncodeVm(Vm)); } -void NEONXEmitter::VMLSL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VMLSL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); _dbg_assert_msg_(DYNA_REC, Vn >= Q0, "Pass invalid register to " __FUNCTION__); @@ -1710,57 +1710,435 @@ void NEONXEmitter::VMLSL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) Write32((0xF2 << 24) | ((Size & I_UNSIGNED ? 1 : 0) << 24) | (encodedSize(Size) << 20) \ | EncodeVn(Vn) | EncodeVd(Vd) | (0xA0 << 4) | EncodeVm(Vm)); } - -void NEONXEmitter::VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +void NEONXEmitter::VMUL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) { - _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to VSUB(integer)"); - _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use VSUB(integer) when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); - // Gets encoded as a double register + bool register_quad = Vd >= Q0; + + if (Size & F_32) + Write32((0xF3 << 24) | EncodeVn(Vn) | EncodeVd(Vd) | (0xD1 << 4) | (register_quad << 6) | EncodeVm(Vm)); + else + Write32((0xF2 << 24) | ((Size & I_POLYNOMIAL) ? (1 << 24) : 0) | (encodedSize(Size) << 20) | \ + EncodeVn(Vn) | EncodeVd(Vd) | (0x91 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VMULL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xC0 << 4) | ((Size & I_POLYNOMIAL) ? 1 << 9 : 0) | EncodeVm(Vm)); +} +void NEONXEmitter::VNEG(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 16) | \ + EncodeVd(Vd) | ((Size & F_32) ? 1 << 10 : 0) | (0xE << 6) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VORN(ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (3 << 20) | EncodeVn(Vn) | EncodeVd(Vd) | (0x11 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VORR(ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (2 << 20) | EncodeVn(Vn) | EncodeVd(Vd) | (0x11 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VPADAL(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | EncodeVd(Vd) | \ + (0x60 << 4) | ((Size & I_UNSIGNED) ? 1 << 7 : 0) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VPADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + if (Size & F_32) + Write32((0xF3 << 24) | EncodeVn(Vn) | EncodeVd(Vd) | (0xD0 << 4) | EncodeVm(Vm)); + else + Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xB1 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VPADDL(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | EncodeVd(Vd) | \ + (0x20 << 4) | (Size & I_UNSIGNED ? 1 << 7 : 0) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VPMAX(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + if (Size & F_32) + Write32((0xF3 << 24) | EncodeVn(Vn) | EncodeVd(Vd) | (0xF0 << 4) | EncodeVm(Vm)); + else + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xA0 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VPMIN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + if (Size & F_32) + Write32((0xF3 << 24) | (1 << 21) | EncodeVn(Vn) | EncodeVd(Vd) | (0xF0 << 4) | EncodeVm(Vm)); + else + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xA1 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VQABS(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | EncodeVd(Vd) | \ + (0x70 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VQADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x1 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VQDMLAL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x90 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VQDMLSL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xB0 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VQDMULH(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xB0 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VQDMULL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF2 << 24) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xD0 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VQNEG(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | EncodeVd(Vd) | \ + (0x78 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VQRDMULH(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF3 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xB0 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VQRSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x51 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VQSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x41 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VQSUB(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x21 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRADDHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF3 << 24) | (1 << 23) | ((encodedSize(Size) - 1) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x40 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VRECPE(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (0xB << 16) | EncodeVd(Vd) | \ + (0x40 << 4) | (Size & F_32 ? 1 << 8 : 0) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRECPS(ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | EncodeVn(Vn) | EncodeVd(Vd) | (0xF1 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRHADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x10 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x50 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRSQRTE(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; Vd = SubBase(Vd); - Vn = SubBase(Vn); Vm = SubBase(Vm); - Write32((0xF3 << 24) | ((Vd & 0x10) << 18) | (encodedSize(Size) << 20) | ((Vn & 0xF) << 16) \ - | ((Vd & 0xF) << 12) | (0x8 << 8) | ((Vn & 0x10) << 3) | (1 << 6) \ - | ((Vm & 0x10) << 1) | (Vm & 0xF)); + Write32((0xF3 << 24) | (0xB << 20) | ((Vd & 0x10) << 18) | (0xB << 16) + | ((Vd & 0xF) << 12) | (9 << 7) | (Size & F_32 ? (1 << 8) : 0) | (register_quad << 6) + | ((Vm & 0x10) << 1) | (Vm & 0xF)); } - -void NEONXEmitter::VLD1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) +void NEONXEmitter::VRSQRTS(ARMReg Vd, ARMReg Vn, ARMReg Vm) { - u32 spacing = 0x7; // Only support loading to 1 reg + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (1 << 21) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xF1 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VRSUBHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + Write32((0xF3 << 24) | (1 << 23) | ((encodedSize(Size) - 1) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x60 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= D0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + _dbg_assert_msg_(DYNA_REC, !(Size & F_32), __FUNCTION__ " doesn't support float"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x40 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VSUB(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + if (Size & F_32) + Write32((0xF2 << 24) | (1 << 21) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0xD0 << 4) | (register_quad << 6) | EncodeVm(Vm)); + else + Write32((0xF3 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x80 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VSUBHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + Write32((0xF2 << 24) | (1 << 23) | ((encodedSize(Size) - 1) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x60 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VSUBL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x20 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VSUBW(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + Write32((0xF2 << 24) | (Size & I_UNSIGNED ? 1 << 24 : 0) | (1 << 23) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x30 << 4) | EncodeVm(Vm)); +} +void NEONXEmitter::VSWP(ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (1 << 17) | EncodeVd(Vd) | \ + (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VTRN(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 17) | EncodeVd(Vd) | \ + (1 << 7) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VTST(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF2 << 24) | (encodedSize(Size) << 20) | EncodeVn(Vn) | EncodeVd(Vd) | \ + (0x81 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VUZP(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 17) | EncodeVd(Vd) | \ + (0x10 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VZIP(u32 Size, ARMReg Vd, ARMReg Vm) +{ + _dbg_assert_msg_(DYNA_REC, Vd >= Q0, "Pass invalid register to " __FUNCTION__); + _dbg_assert_msg_(DYNA_REC, cpu_info.bNEON, "Can't use " __FUNCTION__ " when CPU doesn't support it"); + + bool register_quad = Vd >= Q0; + + Write32((0xF3 << 24) | (0xB << 20) | (encodedSize(Size) << 18) | (1 << 17) | EncodeVd(Vd) | \ + (0x18 << 4) | (register_quad << 6) | EncodeVm(Vm)); +} +void NEONXEmitter::VLD1(u32 Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) +{ + u32 spacing = 0x7; // Only support loading to 1 reg // Gets encoded as a double register Vd = SubBase(Vd); - Write32((0xF4 << 24) | ((Vd & 0x10) << 18) | (1 << 21) | (Rn << 16) + Write32((0xF4 << 24) | ((Vd & 0x10) << 18) | (1 << 21) | (Rn << 16) | ((Vd & 0xF) << 12) | (spacing << 8) | (encodedSize(Size) << 6) | (align << 4) | Rm); } - -void NEONXEmitter::VLD2(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) +void NEONXEmitter::VLD2(u32 Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) { u32 spacing = 0x8; // Single spaced registers // Gets encoded as a double register Vd = SubBase(Vd); - Write32((0xF4 << 24) | ((Vd & 0x10) << 18) | (1 << 21) | (Rn << 16) + Write32((0xF4 << 24) | ((Vd & 0x10) << 18) | (1 << 21) | (Rn << 16) | ((Vd & 0xF) << 12) | (spacing << 8) | (encodedSize(Size) << 6) | (align << 4) | Rm); } - -void NEONXEmitter::VST1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) +void NEONXEmitter::VST1(u32 Size, ARMReg Vd, ARMReg Rn, NEONAlignment align, ARMReg Rm) { u32 spacing = 0x7; // Single spaced registers // Gets encoded as a double register Vd = SubBase(Vd); - Write32((0xF4 << 24) | ((Vd & 0x10) << 18) | (Rn << 16) + Write32((0xF4 << 24) | ((Vd & 0x10) << 18) | (Rn << 16) | ((Vd & 0xF) << 12) | (spacing << 8) | (encodedSize(Size) << 6) | (align << 4) | Rm); } - -void NEONXEmitter::VREVX(u32 size, NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VREVX(u32 size, u32 Size, ARMReg Vd, ARMReg Vm) { bool register_quad = Vd >= Q0; Vd = SubBase(Vd); @@ -1771,44 +2149,19 @@ void NEONXEmitter::VREVX(u32 size, NEONElementType Size, ARMReg Vd, ARMReg Vm) | (register_quad << 6) | ((Vm & 0x10) << 1) | (Vm & 0xF)); } -void NEONXEmitter::VREV64(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VREV64(u32 Size, ARMReg Vd, ARMReg Vm) { VREVX(0, Size, Vd, Vm); } -void NEONXEmitter::VREV32(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VREV32(u32 Size, ARMReg Vd, ARMReg Vm) { VREVX(1, Size, Vd, Vm); } -void NEONXEmitter::VREV16(NEONElementType Size, ARMReg Vd, ARMReg Vm) +void NEONXEmitter::VREV16(u32 Size, ARMReg Vd, ARMReg Vm) { VREVX(2, Size, Vd, Vm); } - -void NEONXEmitter::VRSQRTE(NEONElementType Size, ARMReg Vd, ARMReg Vm) -{ - bool register_quad = Vd >= Q0; - Vd = SubBase(Vd); - Vm = SubBase(Vm); - - Write32((0xF3 << 24) | (0xB << 20) | ((Vd & 0x10) << 18) | (0xB << 16) - | ((Vd & 0xF) << 12) | (9 << 7) | (Size & F_32 ? (1 << 8) : 0) | (register_quad << 6) - | ((Vm & 0x10) << 1) | (Vm & 0xF)); -} - -void NEONXEmitter::VORR(ARMReg Vd, ARMReg Vn, ARMReg Vm) -{ - bool register_quad = Vd >= Q0; - Vd = SubBase(Vd); - Vn = SubBase(Vn); - Vm = SubBase(Vm); - - Write32((0xF2 << 24) | (0x1 << 21) | ((Vd & 0x10) << 18) | ((Vn & 0xF) << 16) - | ((Vd & 0xF) << 12) | (1 << 8) | ((Vn & 0x10) << 3) - | (register_quad << 6) | ((Vm & 0x10) << 1) | (1 << 4) | (Vm & 0xF)); -} - - } diff --git a/Source/Core/Common/Src/ArmEmitter.h b/Source/Core/Common/Src/ArmEmitter.h index 9f9727e4a4..99024f3b6f 100644 --- a/Source/Core/Common/Src/ArmEmitter.h +++ b/Source/Core/Common/Src/ArmEmitter.h @@ -66,7 +66,7 @@ enum ARMReg D8, D9, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30, D31, - + // ASIMD Quad-Word registers Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, @@ -142,11 +142,11 @@ public: { return Type; } - Operand2() {} + Operand2() {} Operand2(u32 imm, OpType type = TYPE_IMM) - { - Type = type; - Value = imm; + { + Type = type; + Value = imm; Rotation = 0; } @@ -338,12 +338,21 @@ struct LiteralPool }; typedef const u8* JumpTarget; +// XXX: Stop polluting the global namespace +const u32 I_8 = (1 << 0); +const u32 I_16 = (1 << 1); +const u32 I_32 = (1 << 2); +const u32 I_64 = (1 << 3); +const u32 I_SIGNED = (1 << 4); +const u32 I_UNSIGNED = (1 << 5); +const u32 F_32 = (1 << 6); +const u32 I_POLYNOMIAL = (1 << 7); // Only used in VMUL/VMULL u32 EncodeVd(ARMReg Vd); u32 EncodeVn(ARMReg Vn); u32 EncodeVm(ARMReg Vm); // Subtracts the base from the register to give us the real one -ARMReg SubBase(ARMReg Reg); +ARMReg SubBase(ARMReg Reg); class ARMXEmitter { @@ -474,7 +483,7 @@ public: void MOVW(ARMReg dest, Operand2 op2); void MOVT(ARMReg dest, Operand2 op2, bool TopBits = false); - // UDIV and SDIV are only available on CPUs that have + // UDIV and SDIV are only available on CPUs that have // the idiva hardare capacity void UDIV(ARMReg dest, ARMReg dividend, ARMReg divisor); void SDIV(ARMReg dest, ARMReg dividend, ARMReg divisor); @@ -526,7 +535,7 @@ public: // None of these will be created with conditional since ARM // is deprecating conditional execution of ASIMD instructions. // ASIMD instructions don't even have a conditional encoding. - + // VFP Only void VLDR(ARMReg Dest, ARMReg Base, s16 offset); void VSTR(ARMReg Src, ARMReg Base, s16 offset); @@ -572,17 +581,6 @@ public: }; // class ARMXEmitter -enum NEONElementType -{ - I_8 = (1 << 0), - I_16 = (1 << 1), - I_32 = (1 << 2), - I_64 = (1 << 3), - I_SIGNED = (1 << 4), - I_UNSIGNED = (1 << 5), - F_32 = (1 << 6) -}; - enum NEONAlignment { ALIGN_NONE = 0, @@ -597,7 +595,7 @@ class NEONXEmitter private: ARMXEmitter *_emit; inline void Write32(u32 value) { _emit->Write32(value); } - + inline u32 encodedSize(u32 value) { if (value & I_8) @@ -612,72 +610,106 @@ private: _dbg_assert_msg_(DYNA_REC, false, "Passed invalid size to integer NEON instruction"); return 0; } - - void VREVX(u32 size, NEONElementType Size, ARMReg Vd, ARMReg Vm); -public: + void VREVX(u32 size, u32 Size, ARMReg Vd, ARMReg Vm); + +public: NEONXEmitter(ARMXEmitter *emit) : _emit(emit) {} - void VABA(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VABAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VABD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VABDL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VABS(NEONElementType Size, ARMReg Vd, ARMReg Vm); + void VABA(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VABAL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VABD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VABDL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VABS(u32 Size, ARMReg Vd, ARMReg Vm); void VACGE(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VACGT(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VACLE(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VACLT(ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VADDHN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VADDL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VADDW(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VADDHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VADDL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VADDW(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); void VAND(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VBIC(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VBIF(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VBIT(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VBSL(ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VCEQ(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VCEQ(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VCGE(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VCGE(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VCGT(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VCGT(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VCLE(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VCLE(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VCLS(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VCLT(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VCLT(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VCLZ(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VCNT(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VDUP(NEONElementType Size, ARMReg Vd, ARMReg Vm, u8 index); - void VDUP(NEONElementType Size, ARMReg Vd, ARMReg Rt); + void VCEQ(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VCEQ(u32 Size, ARMReg Vd, ARMReg Vm); + void VCGE(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VCGE(u32 Size, ARMReg Vd, ARMReg Vm); + void VCGT(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VCGT(u32 Size, ARMReg Vd, ARMReg Vm); + void VCLE(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VCLE(u32 Size, ARMReg Vd, ARMReg Vm); + void VCLS(u32 Size, ARMReg Vd, ARMReg Vm); + void VCLT(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VCLT(u32 Size, ARMReg Vd, ARMReg Vm); + void VCLZ(u32 Size, ARMReg Vd, ARMReg Vm); + void VCNT(u32 Size, ARMReg Vd, ARMReg Vm); + void VDUP(u32 Size, ARMReg Vd, ARMReg Vm, u8 index); + void VDUP(u32 Size, ARMReg Vd, ARMReg Rt); void VEOR(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VEXT(ARMReg Vd, ARMReg Vn, ARMReg Vm, u8 index); void VFMA(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VFMS(ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VHADD(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VHSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VMAX(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VMIN(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VMLA(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VMLS(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VMLAL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VMLSL(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VSUB(NEONElementType Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); - void VREV64(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VREV32(NEONElementType Size, ARMReg Vd, ARMReg Vm); - void VREV16(NEONElementType Size, ARMReg Vd, ARMReg Vm); - - void VRSQRTE(NEONElementType Size, ARMReg Vd, ARMReg Vm); - + void VHADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VHSUB(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMAX(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMIN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMLA(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMLS(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMLAL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMLSL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMUL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VMULL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VNEG(u32 Size, ARMReg Vd, ARMReg Vm); + void VORN(ARMReg Vd, ARMReg Vn, ARMReg Vm); void VORR(ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VPADAL(u32 Size, ARMReg Vd, ARMReg Vm); + void VPADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VPADDL(u32 Size, ARMReg Vd, ARMReg Vm); + void VPMAX(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VPMIN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQABS(u32 Size, ARMReg Vd, ARMReg Vm); + void VQADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQDMLAL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQDMLSL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQDMULH(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQDMULL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQNEG(u32 Size, ARMReg Vd, ARMReg Vm); + void VQRDMULH(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQRSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VQSUB(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRADDHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRECPE(u32 Size, ARMReg Vd, ARMReg Vm); + void VRECPS(ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRHADD(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRSQRTE(u32 Size, ARMReg Vd, ARMReg Vm); + void VRSQRTS(ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VRSUBHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSHL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSUB(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSUBHN(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSUBL(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSUBW(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VSWP(ARMReg Vd, ARMReg Vm); + void VTRN(u32 Size, ARMReg Vd, ARMReg Vm); + void VTST(u32 Size, ARMReg Vd, ARMReg Vn, ARMReg Vm); + void VUZP(u32 Size, ARMReg Vd, ARMReg Vm); + void VZIP(u32 Size, ARMReg Vd, ARMReg Vm); + void VREV64(u32 Size, ARMReg Vd, ARMReg Vm); + void VREV32(u32 Size, ARMReg Vd, ARMReg Vm); + void VREV16(u32 Size, ARMReg Vd, ARMReg Vm); - void VLD1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align = ALIGN_NONE, ARMReg Rm = _PC); - void VLD2(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align = ALIGN_NONE, ARMReg Rm = _PC); + void VLD1(u32 Size, ARMReg Vd, ARMReg Rn, NEONAlignment align = ALIGN_NONE, ARMReg Rm = _PC); + void VLD2(u32 Size, ARMReg Vd, ARMReg Rn, NEONAlignment align = ALIGN_NONE, ARMReg Rm = _PC); - void VST1(NEONElementType Size, ARMReg Vd, ARMReg Rn, NEONAlignment align = ALIGN_NONE, ARMReg Rm = _PC); + void VST1(u32 Size, ARMReg Vd, ARMReg Rn, NEONAlignment align = ALIGN_NONE, ARMReg Rm = _PC); }; // Everything that needs to generate X86 code should inherit from this. @@ -703,7 +735,7 @@ public: // Always clear code space with breakpoints, so that if someone accidentally executes // uninitialized, it just breaks into the debugger. - void ClearCodeSpace() + void ClearCodeSpace() { // x86/64: 0xCC = breakpoint memset(region, 0xCC, region_size); diff --git a/Source/Core/Common/Src/BreakPoints.cpp b/Source/Core/Common/Src/BreakPoints.cpp index 57d1b06538..1dee12ffd1 100644 --- a/Source/Core/Common/Src/BreakPoints.cpp +++ b/Source/Core/Common/Src/BreakPoints.cpp @@ -12,16 +12,16 @@ bool BreakPoints::IsAddressBreakPoint(u32 _iAddress) { - for (TBreakPoints::iterator i = m_BreakPoints.begin(); i != m_BreakPoints.end(); ++i) - if (i->iAddress == _iAddress) + for (auto& bp : m_BreakPoints) + if (bp.iAddress == _iAddress) return true; return false; } bool BreakPoints::IsTempBreakPoint(u32 _iAddress) { - for (TBreakPoints::iterator i = m_BreakPoints.begin(); i != m_BreakPoints.end(); ++i) - if (i->iAddress == _iAddress && i->bTemporary) + for (auto& bp : m_BreakPoints) + if (bp.iAddress == _iAddress && bp.bTemporary) return true; return false; } @@ -29,29 +29,28 @@ bool BreakPoints::IsTempBreakPoint(u32 _iAddress) BreakPoints::TBreakPointsStr BreakPoints::GetStrings() const { TBreakPointsStr bps; - for (TBreakPoints::const_iterator i = m_BreakPoints.begin(); - i != m_BreakPoints.end(); ++i) + for (const auto& bp : m_BreakPoints) { - if (!i->bTemporary) + if (!bp.bTemporary) { - std::stringstream bp; - bp << std::hex << i->iAddress << " " << (i->bOn ? "n" : ""); - bps.push_back(bp.str()); + std::stringstream ss; + ss << std::hex << bp.iAddress << " " << (bp.bOn ? "n" : ""); + bps.push_back(ss.str()); } } return bps; } -void BreakPoints::AddFromStrings(const TBreakPointsStr& bps) +void BreakPoints::AddFromStrings(const TBreakPointsStr& bpstrs) { - for (TBreakPointsStr::const_iterator i = bps.begin(); i != bps.end(); ++i) + for (const auto& bpstr : bpstrs) { TBreakPoint bp; - std::stringstream bpstr; - bpstr << std::hex << *i; - bpstr >> bp.iAddress; - bp.bOn = i->find("n") != i->npos; + std::stringstream ss; + ss << std::hex << bpstr; + ss >> bp.iAddress; + bp.bOn = bpstr.find("n") != bpstr.npos; bp.bTemporary = false; Add(bp); } @@ -108,42 +107,41 @@ void BreakPoints::Clear() } ); } - + m_BreakPoints.clear(); } MemChecks::TMemChecksStr MemChecks::GetStrings() const { TMemChecksStr mcs; - for (TMemChecks::const_iterator i = m_MemChecks.begin(); - i != m_MemChecks.end(); ++i) + for (const auto& bp : m_MemChecks) { std::stringstream mc; - mc << std::hex << i->StartAddress; - mc << " " << (i->bRange ? i->EndAddress : i->StartAddress) << " " << - (i->bRange ? "n" : "") << (i->OnRead ? "r" : "") << - (i->OnWrite ? "w" : "") << (i->Log ? "l" : "") << (i->Break ? "p" : ""); + mc << std::hex << bp.StartAddress; + mc << " " << (bp.bRange ? bp.EndAddress : bp.StartAddress) << " " << + (bp.bRange ? "n" : "") << (bp.OnRead ? "r" : "") << + (bp.OnWrite ? "w" : "") << (bp.Log ? "l" : "") << (bp.Break ? "p" : ""); mcs.push_back(mc.str()); } return mcs; } -void MemChecks::AddFromStrings(const TMemChecksStr& mcs) +void MemChecks::AddFromStrings(const TMemChecksStr& mcstrs) { - for (TMemChecksStr::const_iterator i = mcs.begin(); i != mcs.end(); ++i) + for (const auto& mcstr : mcstrs) { TMemCheck mc; - std::stringstream mcstr; - mcstr << std::hex << *i; - mcstr >> mc.StartAddress; - mc.bRange = i->find("n") != i->npos; - mc.OnRead = i->find("r") != i->npos; - mc.OnWrite = i->find("w") != i->npos; - mc.Log = i->find("l") != i->npos; - mc.Break = i->find("p") != i->npos; + std::stringstream ss; + ss << std::hex << mcstr; + ss >> mc.StartAddress; + mc.bRange = mcstr.find("n") != mcstr.npos; + mc.OnRead = mcstr.find("r") != mcstr.npos; + mc.OnWrite = mcstr.find("w") != mcstr.npos; + mc.Log = mcstr.find("l") != mcstr.npos; + mc.Break = mcstr.find("p") != mcstr.npos; if (mc.bRange) - mcstr >> mc.EndAddress; + ss >> mc.EndAddress; else mc.EndAddress = mc.StartAddress; Add(mc); @@ -170,15 +168,15 @@ void MemChecks::Remove(u32 _Address) TMemCheck *MemChecks::GetMemCheck(u32 address) { - for (TMemChecks::iterator i = m_MemChecks.begin(); i != m_MemChecks.end(); ++i) + for (auto& bp : m_MemChecks) { - if (i->bRange) + if (bp.bRange) { - if (address >= i->StartAddress && address <= i->EndAddress) - return &(*i); + if (address >= bp.StartAddress && address <= bp.EndAddress) + return &(bp); } - else if (i->StartAddress == address) - return &(*i); + else if (bp.StartAddress == address) + return &(bp); } // none found diff --git a/Source/Core/Common/Src/CDUtils.cpp b/Source/Core/Common/Src/CDUtils.cpp index f697476df5..569ceb3c3b 100644 --- a/Source/Core/Common/Src/CDUtils.cpp +++ b/Source/Core/Common/Src/CDUtils.cpp @@ -211,24 +211,21 @@ std::vector cdio_get_devices () // Returns true if device is a cdrom/dvd drive bool cdio_is_cdrom(std::string device) { -#ifdef __linux__ +#ifndef _WIN32 // Resolve symbolic links. This allows symbolic links to valid // drives to be passed from the command line with the -e flag. char resolved_path[MAX_PATH]; char *devname = realpath(device.c_str(), resolved_path); if (!devname) return false; + device = devname; #endif std::vector devices = cdio_get_devices(); bool res = false; - for (unsigned int i = 0; i < devices.size(); i++) + for (auto& odevice : devices) { -#ifdef __linux__ - if (strncmp(devices[i].c_str(), devname, MAX_PATH) == 0) -#else - if (strncmp(devices[i].c_str(), device.c_str(), MAX_PATH) == 0) -#endif + if (strncmp(odevice.c_str(), device.c_str(), MAX_PATH) == 0) { res = true; break; diff --git a/Source/Core/Common/Src/CPUDetect.h b/Source/Core/Common/Src/CPUDetect.h index be6ce34985..e93a902d63 100644 --- a/Source/Core/Common/Src/CPUDetect.h +++ b/Source/Core/Common/Src/CPUDetect.h @@ -41,6 +41,7 @@ struct CPUInfo bool bLZCNT; bool bSSE4A; bool bAVX; + bool bFMA; bool bAES; bool bLAHFSAHF64; bool bLongMode; diff --git a/Source/Core/Common/Src/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h index 6fed73a7ed..d7aeba0558 100644 --- a/Source/Core/Common/Src/ChunkFile.h +++ b/Source/Core/Common/Src/ChunkFile.h @@ -16,6 +16,7 @@ // - Serialization code for anything complex has to be manually written. #include +#include #include #include #include @@ -25,6 +26,21 @@ #include "Common.h" #include "FileUtil.h" +// ewww +#if _LIBCPP_VERSION +#define IsTriviallyCopyable(T) std::is_trivially_copyable::value +#elif __GNUC__ +#define IsTriviallyCopyable(T) std::has_trivial_copy_constructor::value +#elif _MSC_VER >= 1800 +// work around bug +#define IsTriviallyCopyable(T) (std::is_trivially_copyable::value || std::is_pod::value) +#elif defined(_MSC_VER) +#define IsTriviallyCopyable(T) std::has_trivial_copy::value +#else +#error No version of is_trivially_copyable +#endif + + template struct LinkedListItem : public T { @@ -71,13 +87,41 @@ public: } break; + case MODE_WRITE: + case MODE_MEASURE: + case MODE_VERIFY: + for (auto& elem : x) + { + Do(elem.first); + Do(elem.second); + } + break; + } + } + + template + void Do(std::set& x) + { + u32 count = (u32)x.size(); + Do(count); + + switch (mode) + { + case MODE_READ: + for (x.clear(); count != 0; --count) + { + V value; + Do(value); + x.insert(value); + } + break; + case MODE_WRITE: case MODE_MEASURE: case MODE_VERIFY: for (auto itr = x.begin(); itr != x.end(); ++itr) { - Do(itr->first); - Do(itr->second); + Do(*itr); } break; } @@ -90,8 +134,8 @@ public: Do(size); x.resize(size); - for (auto itr = x.begin(); itr != x.end(); ++itr) - Do(*itr); + for (auto& elem : x) + Do(elem); } template @@ -118,6 +162,13 @@ public: DoContainer(x); } + template + void Do(std::pair& x) + { + Do(x.first); + Do(x.second); + } + template void DoArray(T* x, u32 count) { @@ -128,12 +179,10 @@ public: template void Do(T& x) { - // Ideally this would be std::is_trivially_copyable, but not enough support yet - static_assert(std::is_pod::value, "Only sane for POD types"); - + static_assert(IsTriviallyCopyable(T), "Only sane for trivially copyable types"); DoVoid((void*)&x, sizeof(x)); } - + template void DoPOD(T& x) { @@ -144,10 +193,12 @@ public: void DoPointer(T*& x, T* const base) { // pointers can be more than 2^31 apart, but you're using this function wrong if you need that much range - s32 offset = x - base; + ptrdiff_t offset = x - base; Do(offset); if (mode == MODE_READ) + { x = base + offset; + } } // Let's pretend std::list doesn't exist! @@ -271,7 +322,7 @@ public: if (!File::Exists(_rFilename)) return false; - + // Check file size const u64 fileSize = File::GetSize(_rFilename); static const u64 headerSize = sizeof(SChunkHeader); @@ -324,7 +375,7 @@ public: u8* ptr = &buffer[0]; PointerWrap p(&ptr, PointerWrap::MODE_READ); _class.DoState(p); - + INFO_LOG(COMMON, "ChunkReader: Done loading %s" , _rFilename.c_str()); return true; } diff --git a/Source/Core/Common/Src/CommonFuncs.h b/Source/Core/Common/Src/CommonFuncs.h index daf135373e..63bdc04dfb 100644 --- a/Source/Core/Common/Src/CommonFuncs.h +++ b/Source/Core/Common/Src/CommonFuncs.h @@ -27,11 +27,16 @@ struct ArraySizeImpl : public std::extent #define b2(x) ( (x) | ( (x) >> 1) ) #define b4(x) ( b2(x) | ( b2(x) >> 2) ) #define b8(x) ( b4(x) | ( b4(x) >> 4) ) -#define b16(x) ( b8(x) | ( b8(x) >> 8) ) +#define b16(x) ( b8(x) | ( b8(x) >> 8) ) #define b32(x) (b16(x) | (b16(x) >>16) ) #define ROUND_UP_POW2(x) (b32(x - 1) + 1) -#if defined __GNUC__ && !defined __SSSE3__ && !defined _M_GENERIC +#ifndef __GNUC_PREREQ + #define __GNUC_PREREQ(a, b) 0 +#endif + +#if (defined __GNUC__ && !__GNUC_PREREQ(4,9)) \ + && !defined __SSSE3__ && !defined _M_GENERIC #include static __inline __m128i __attribute__((__always_inline__)) _mm_shuffle_epi8(__m128i a, __m128i mask) @@ -95,12 +100,12 @@ inline u64 _rotr64(u64 x, unsigned int shift){ #define unlink _unlink #define snprintf _snprintf #define vscprintf _vscprintf - + // Locale Cross-Compatibility #define locale_t _locale_t #define freelocale _free_locale #define newlocale(mask, locale, base) _create_locale(mask, locale) - + #define LC_GLOBAL_LOCALE ((locale_t)-1) #define LC_ALL_MASK LC_ALL #define LC_COLLATE_MASK LC_COLLATE @@ -108,7 +113,7 @@ inline u64 _rotr64(u64 x, unsigned int shift){ #define LC_MONETARY_MASK LC_MONETARY #define LC_NUMERIC_MASK LC_NUMERIC #define LC_TIME_MASK LC_TIME - + inline locale_t uselocale(locale_t new_locale) { // Retrieve the current per thread locale setting @@ -184,8 +189,8 @@ inline u16 swap16(u16 _data) {return _byteswap_ushort(_data);} inline u32 swap32(u32 _data) {return _byteswap_ulong (_data);} inline u64 swap64(u64 _data) {return _byteswap_uint64(_data);} #elif _M_ARM -inline u16 swap16 (u16 _data) { u32 data = _data; __asm__ ("rev16 %0, %1\n" : "=l" (data) : "l" (data)); return (u16)data;} -inline u32 swap32 (u32 _data) {__asm__ ("rev %0, %1\n" : "=l" (_data) : "l" (_data)); return _data;} +inline u16 swap16 (u16 _data) { u32 data = _data; __asm__ ("rev16 %0, %1\n" : "=l" (data) : "l" (data)); return (u16)data;} +inline u32 swap32 (u32 _data) {__asm__ ("rev %0, %1\n" : "=l" (_data) : "l" (_data)); return _data;} inline u64 swap64(u64 _data) {return ((u64)swap32(_data) << 32) | swap32(_data >> 32);} #elif __linux__ inline u16 swap16(u16 _data) {return bswap_16(_data);} @@ -242,7 +247,7 @@ template inline T FromBigEndian(T data) { //static_assert(std::is_arithmetic::value, "function only makes sense with arithmetic types"); - + swap(reinterpret_cast(&data)); return data; } diff --git a/Source/Core/Common/Src/ConsoleListener.cpp b/Source/Core/Common/Src/ConsoleListener.cpp index d793f7261b..fa8780d598 100644 --- a/Source/Core/Common/Src/ConsoleListener.cpp +++ b/Source/Core/Common/Src/ConsoleListener.cpp @@ -87,7 +87,7 @@ bool ConsoleListener::IsOpen() /* LetterSpace: SetConsoleScreenBufferSize and SetConsoleWindowInfo are - dependent on each other, that's the reason for the additional checks. + dependent on each other, that's the reason for the additional checks. */ void ConsoleListener::BufferWidthHeight(int BufferWidth, int BufferHeight, int ScreenWidth, int ScreenHeight, bool BufferFirst) { @@ -226,7 +226,7 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool BytesWritten += cAttrWritten; coordScreen = GetCoordinates(BytesWritten, LBufWidth); - } + } const int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X; COORD Coo = GetCoordinates(OldCursor, LBufWidth); @@ -311,23 +311,23 @@ void ConsoleListener::Log(LogTypes::LOG_LEVELS Level, const char *Text) } // Clear console screen void ConsoleListener::ClearScreen(bool Cursor) -{ +{ #if defined(_WIN32) - COORD coordScreen = { 0, 0 }; - DWORD cCharsWritten; - CONSOLE_SCREEN_BUFFER_INFO csbi; - DWORD dwConSize; + COORD coordScreen = { 0, 0 }; + DWORD cCharsWritten; + CONSOLE_SCREEN_BUFFER_INFO csbi; + DWORD dwConSize; - HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); - GetConsoleScreenBufferInfo(hConsole, &csbi); + GetConsoleScreenBufferInfo(hConsole, &csbi); dwConSize = csbi.dwSize.X * csbi.dwSize.Y; // Write space to the entire console - FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); - GetConsoleScreenBufferInfo(hConsole, &csbi); + FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); + GetConsoleScreenBufferInfo(hConsole, &csbi); FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten); // Reset cursor - if (Cursor) SetConsoleCursorPosition(hConsole, coordScreen); + if (Cursor) SetConsoleCursorPosition(hConsole, coordScreen); #endif } diff --git a/Source/Core/Common/Src/Crypto/aes.h b/Source/Core/Common/Src/Crypto/aes.h deleted file mode 100644 index 8d5059e1be..0000000000 --- a/Source/Core/Common/Src/Crypto/aes.h +++ /dev/null @@ -1,143 +0,0 @@ -/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. 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 acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED 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 OpenSSL PROJECT OR - * ITS 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. - * ==================================================================== - * - */ - -#ifndef HEADER_AES_H -#define HEADER_AES_H - -// #include - -#ifdef OPENSSL_NO_AES -#error AES is disabled. -#endif - -#define AES_ENCRYPT 1 -#define AES_DECRYPT 0 - -/* Because array size can't be a const in C, the following two are macros. - Both sizes are in bytes. */ -#define AES_MAXNR 14 -#define AES_BLOCK_SIZE 16 - -#ifdef __cplusplus -extern "C" { -#endif - -/* This should be a hidden type, but EVP requires that the size be known */ -struct aes_key_st -{ -#ifdef AES_LONG - unsigned long rd_key[4 * (AES_MAXNR + 1)]; -#else - unsigned int rd_key[4 * (AES_MAXNR + 1)]; -#endif - int rounds; -}; -typedef struct aes_key_st AES_KEY; - -const char* AES_options(void); - -int AES_set_encrypt_key(const unsigned char* userKey, const int bits, - AES_KEY* key); -int AES_set_decrypt_key(const unsigned char* userKey, const int bits, - AES_KEY* key); - -void AES_encrypt(const unsigned char* in, unsigned char* out, - const AES_KEY* key); -void AES_decrypt(const unsigned char* in, unsigned char* out, - const AES_KEY* key); - -void AES_ecb_encrypt(const unsigned char* in, unsigned char* out, - const AES_KEY* key, const int enc); -void AES_cbc_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY* key, - unsigned char* ivec, const int enc); -void AES_cfb128_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY* key, - unsigned char* ivec, int* num, const int enc); -void AES_cfb1_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY* key, - unsigned char* ivec, int* num, const int enc); -void AES_cfb8_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY* key, - unsigned char* ivec, int* num, const int enc); -void AES_cfbr_encrypt_block(const unsigned char* in, unsigned char* out, - const int nbits, const AES_KEY* key, - unsigned char* ivec, const int enc); -void AES_ofb128_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY* key, - unsigned char* ivec, int* num); - - -void AES_ctr128_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY * key, - unsigned char ivec[AES_BLOCK_SIZE], - unsigned char ecount_buf[AES_BLOCK_SIZE], - unsigned int* num); - -/* For IGE, see also http://www.links.org/files/openssl-ige.pdf - NB: the IV is _two_ blocks long */ -void AES_ige_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY* key, - unsigned char* ivec, const int enc); - - -/* NB: the IV is _four_ blocks long */ -void AES_bi_ige_encrypt(const unsigned char* in, unsigned char* out, - const unsigned long length, const AES_KEY* key, - const AES_KEY* key2, const unsigned char* ivec, - const int enc); - - -#ifdef __cplusplus -} -#endif - -#endif /* !HEADER_AES_H */ diff --git a/Source/Core/Common/Src/Crypto/aes_cbc.cpp b/Source/Core/Common/Src/Crypto/aes_cbc.cpp deleted file mode 100644 index 780c35a88d..0000000000 --- a/Source/Core/Common/Src/Crypto/aes_cbc.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* crypto/aes/aes_cbc.c -*- mode:C; c-file-style: "eay" -*- */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. 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 acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED 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 OpenSSL PROJECT OR - * ITS 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. - * ==================================================================== - * - */ - -#ifndef AES_DEBUG -# ifndef NDEBUG -# define NDEBUG -# endif -#endif -#include - -#include "aes.h" -#include "aes_locl.h" - -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - const unsigned long length, const AES_KEY *key, - unsigned char *ivec, const int enc) { - - unsigned long n; - unsigned long len = length; - unsigned char tmp[AES_BLOCK_SIZE]; - const unsigned char *iv = ivec; - - assert(in && out && key && ivec); - assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc)); - - if (AES_ENCRYPT == enc) { - while (len >= AES_BLOCK_SIZE) { - for(n=0; n < AES_BLOCK_SIZE; ++n) - out[n] = in[n] ^ iv[n]; - AES_encrypt(out, out, key); - iv = out; - len -= AES_BLOCK_SIZE; - in += AES_BLOCK_SIZE; - out += AES_BLOCK_SIZE; - } - if (len) { - for(n=0; n < len; ++n) - out[n] = in[n] ^ iv[n]; - for(n=len; n < AES_BLOCK_SIZE; ++n) - out[n] = iv[n]; - AES_encrypt(out, out, key); - iv = out; - } - memcpy(ivec,iv,AES_BLOCK_SIZE); - } else if (in != out) { - while (len >= AES_BLOCK_SIZE) { - AES_decrypt(in, out, key); - for(n=0; n < AES_BLOCK_SIZE; ++n) - out[n] ^= iv[n]; - iv = in; - len -= AES_BLOCK_SIZE; - in += AES_BLOCK_SIZE; - out += AES_BLOCK_SIZE; - } - if (len) { - AES_decrypt(in,tmp,key); - for(n=0; n < len; ++n) - out[n] = tmp[n] ^ iv[n]; - iv = in; - } - memcpy(ivec,iv,AES_BLOCK_SIZE); - } else { - while (len >= AES_BLOCK_SIZE) { - memcpy(tmp, in, AES_BLOCK_SIZE); - AES_decrypt(in, out, key); - for(n=0; n < AES_BLOCK_SIZE; ++n) - out[n] ^= ivec[n]; - memcpy(ivec, tmp, AES_BLOCK_SIZE); - len -= AES_BLOCK_SIZE; - in += AES_BLOCK_SIZE; - out += AES_BLOCK_SIZE; - } - if (len) { - memcpy(tmp, in, AES_BLOCK_SIZE); - AES_decrypt(tmp, out, key); - for(n=0; n < len; ++n) - out[n] ^= ivec[n]; - for(n=len; n < AES_BLOCK_SIZE; ++n) - out[n] = tmp[n]; - memcpy(ivec, tmp, AES_BLOCK_SIZE); - } - } -} diff --git a/Source/Core/Common/Src/Crypto/aes_core.cpp b/Source/Core/Common/Src/Crypto/aes_core.cpp deleted file mode 100644 index ad54bc6006..0000000000 --- a/Source/Core/Common/Src/Crypto/aes_core.cpp +++ /dev/null @@ -1,1159 +0,0 @@ -/* crypto/aes/aes_core.c -*- mode:C; c-file-style: "eay" -*- */ -/** - * rijndael-alg-fst.c - * - * @version 3.0 (December 2000) - * - * Optimised ANSI C code for the Rijndael cipher (now AES) - * - * @author Vincent Rijmen - * @author Antoon Bosselaers - * @author Paulo Barreto - * - * This code is hereby placed in the public domain. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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. - */ - -/* Note: rewritten a little bit to provide error control and an OpenSSL- - compatible API */ - -#ifndef AES_DEBUG -# ifndef NDEBUG -# define NDEBUG -# endif -#endif -#include - -#include -#include "aes.h" -#include "aes_locl.h" - -/* -Te0[x] = S [x].[02, 01, 01, 03]; -Te1[x] = S [x].[03, 02, 01, 01]; -Te2[x] = S [x].[01, 03, 02, 01]; -Te3[x] = S [x].[01, 01, 03, 02]; - -Td0[x] = Si[x].[0e, 09, 0d, 0b]; -Td1[x] = Si[x].[0b, 0e, 09, 0d]; -Td2[x] = Si[x].[0d, 0b, 0e, 09]; -Td3[x] = Si[x].[09, 0d, 0b, 0e]; -Td4[x] = Si[x].[01]; -*/ - -static const u32 Te0[256] = { - 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU, - 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U, - 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU, - 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU, - 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U, - 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU, - 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU, - 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU, - 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU, - 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU, - 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U, - 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU, - 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU, - 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U, - 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU, - 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU, - 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU, - 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU, - 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU, - 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U, - 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU, - 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU, - 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU, - 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU, - 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U, - 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U, - 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U, - 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U, - 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU, - 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U, - 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U, - 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU, - 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU, - 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U, - 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U, - 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U, - 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU, - 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U, - 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU, - 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U, - 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU, - 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U, - 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U, - 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU, - 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U, - 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U, - 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U, - 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U, - 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U, - 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U, - 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U, - 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U, - 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU, - 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U, - 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U, - 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U, - 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U, - 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U, - 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U, - 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU, - 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U, - 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U, - 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U, - 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU, -}; -static const u32 Te1[256] = { - 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU, - 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U, - 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU, - 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U, - 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU, - 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U, - 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU, - 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U, - 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U, - 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU, - 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U, - 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U, - 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U, - 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU, - 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U, - 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U, - 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU, - 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U, - 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U, - 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U, - 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU, - 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU, - 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U, - 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU, - 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU, - 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U, - 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU, - 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U, - 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU, - 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U, - 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U, - 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U, - 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU, - 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U, - 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU, - 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U, - 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU, - 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U, - 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U, - 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU, - 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU, - 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU, - 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U, - 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U, - 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU, - 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U, - 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU, - 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U, - 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU, - 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U, - 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU, - 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU, - 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U, - 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU, - 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U, - 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU, - 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U, - 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U, - 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U, - 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU, - 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU, - 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U, - 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU, - 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U, -}; -static const u32 Te2[256] = { - 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU, - 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U, - 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU, - 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U, - 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU, - 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U, - 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU, - 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U, - 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U, - 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU, - 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U, - 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U, - 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U, - 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU, - 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U, - 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U, - 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU, - 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U, - 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U, - 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U, - 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU, - 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU, - 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U, - 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU, - 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU, - 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U, - 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU, - 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U, - 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU, - 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U, - 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U, - 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U, - 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU, - 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U, - 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU, - 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U, - 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU, - 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U, - 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U, - 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU, - 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU, - 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU, - 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U, - 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U, - 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU, - 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U, - 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU, - 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U, - 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU, - 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U, - 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU, - 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU, - 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U, - 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU, - 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U, - 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU, - 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U, - 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U, - 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U, - 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU, - 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU, - 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U, - 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU, - 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U, -}; -static const u32 Te3[256] = { - 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U, - 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U, - 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U, - 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU, - 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU, - 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU, - 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U, - 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU, - 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU, - 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U, - 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U, - 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU, - 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU, - 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU, - 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU, - 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU, - 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U, - 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU, - 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU, - 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U, - 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U, - 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U, - 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U, - 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U, - 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU, - 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U, - 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU, - 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU, - 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U, - 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U, - 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U, - 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU, - 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U, - 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU, - 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU, - 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U, - 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U, - 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU, - 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U, - 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU, - 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U, - 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U, - 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U, - 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U, - 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU, - 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U, - 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU, - 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U, - 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU, - 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U, - 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU, - 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU, - 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU, - 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU, - 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U, - 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U, - 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U, - 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U, - 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U, - 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U, - 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU, - 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U, - 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU, - 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU, -}; - -static const u32 Td0[256] = { - 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U, - 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U, - 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U, - 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU, - 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U, - 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U, - 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU, - 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U, - 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU, - 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U, - 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U, - 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U, - 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U, - 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU, - 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U, - 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU, - 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U, - 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU, - 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U, - 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U, - 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U, - 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU, - 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U, - 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU, - 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U, - 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU, - 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U, - 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU, - 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU, - 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U, - 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU, - 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U, - 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU, - 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U, - 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U, - 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U, - 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU, - 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U, - 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U, - 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU, - 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U, - 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U, - 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U, - 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U, - 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U, - 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU, - 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U, - 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U, - 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U, - 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U, - 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U, - 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU, - 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU, - 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU, - 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU, - 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U, - 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U, - 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU, - 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU, - 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U, - 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU, - 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U, - 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U, - 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U, -}; -static const u32 Td1[256] = { - 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU, - 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U, - 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU, - 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U, - 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U, - 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U, - 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U, - 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U, - 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U, - 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU, - 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU, - 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU, - 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U, - 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU, - 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U, - 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U, - 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U, - 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU, - 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU, - 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U, - 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU, - 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U, - 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU, - 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU, - 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U, - 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U, - 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U, - 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU, - 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U, - 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU, - 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U, - 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U, - 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U, - 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU, - 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U, - 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U, - 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U, - 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U, - 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U, - 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U, - 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU, - 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU, - 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U, - 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU, - 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U, - 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU, - 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU, - 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U, - 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU, - 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U, - 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U, - 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U, - 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U, - 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U, - 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U, - 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U, - 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU, - 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U, - 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U, - 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU, - 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U, - 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U, - 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U, - 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U, -}; -static const u32 Td2[256] = { - 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U, - 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U, - 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U, - 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U, - 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU, - 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U, - 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U, - 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U, - 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U, - 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU, - 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U, - 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U, - 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU, - 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U, - 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U, - 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U, - 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U, - 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U, - 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U, - 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU, - 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U, - 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U, - 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U, - 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U, - 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U, - 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU, - 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU, - 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U, - 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU, - 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U, - 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU, - 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU, - 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU, - 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU, - 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U, - 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U, - 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U, - 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U, - 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U, - 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U, - 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U, - 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU, - 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU, - 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U, - 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U, - 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU, - 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU, - 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U, - 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U, - 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U, - 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U, - 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U, - 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U, - 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U, - 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU, - 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U, - 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U, - 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U, - 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U, - 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U, - 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U, - 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU, - 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U, - 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U, -}; -static const u32 Td3[256] = { - 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU, - 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU, - 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U, - 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U, - 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU, - 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU, - 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U, - 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU, - 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U, - 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU, - 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U, - 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U, - 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U, - 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U, - 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U, - 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU, - 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU, - 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U, - 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U, - 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU, - 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU, - 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U, - 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U, - 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U, - 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U, - 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU, - 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U, - 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U, - 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU, - 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU, - 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U, - 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U, - 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U, - 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU, - 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U, - 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U, - 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U, - 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U, - 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U, - 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U, - 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U, - 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU, - 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U, - 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U, - 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU, - 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU, - 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U, - 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU, - 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U, - 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U, - 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U, - 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U, - 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U, - 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U, - 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU, - 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU, - 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU, - 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU, - 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U, - 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U, - 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U, - 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU, - 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U, - 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U, -}; -static const u8 Td4[256] = { - 0x52U, 0x09U, 0x6aU, 0xd5U, 0x30U, 0x36U, 0xa5U, 0x38U, - 0xbfU, 0x40U, 0xa3U, 0x9eU, 0x81U, 0xf3U, 0xd7U, 0xfbU, - 0x7cU, 0xe3U, 0x39U, 0x82U, 0x9bU, 0x2fU, 0xffU, 0x87U, - 0x34U, 0x8eU, 0x43U, 0x44U, 0xc4U, 0xdeU, 0xe9U, 0xcbU, - 0x54U, 0x7bU, 0x94U, 0x32U, 0xa6U, 0xc2U, 0x23U, 0x3dU, - 0xeeU, 0x4cU, 0x95U, 0x0bU, 0x42U, 0xfaU, 0xc3U, 0x4eU, - 0x08U, 0x2eU, 0xa1U, 0x66U, 0x28U, 0xd9U, 0x24U, 0xb2U, - 0x76U, 0x5bU, 0xa2U, 0x49U, 0x6dU, 0x8bU, 0xd1U, 0x25U, - 0x72U, 0xf8U, 0xf6U, 0x64U, 0x86U, 0x68U, 0x98U, 0x16U, - 0xd4U, 0xa4U, 0x5cU, 0xccU, 0x5dU, 0x65U, 0xb6U, 0x92U, - 0x6cU, 0x70U, 0x48U, 0x50U, 0xfdU, 0xedU, 0xb9U, 0xdaU, - 0x5eU, 0x15U, 0x46U, 0x57U, 0xa7U, 0x8dU, 0x9dU, 0x84U, - 0x90U, 0xd8U, 0xabU, 0x00U, 0x8cU, 0xbcU, 0xd3U, 0x0aU, - 0xf7U, 0xe4U, 0x58U, 0x05U, 0xb8U, 0xb3U, 0x45U, 0x06U, - 0xd0U, 0x2cU, 0x1eU, 0x8fU, 0xcaU, 0x3fU, 0x0fU, 0x02U, - 0xc1U, 0xafU, 0xbdU, 0x03U, 0x01U, 0x13U, 0x8aU, 0x6bU, - 0x3aU, 0x91U, 0x11U, 0x41U, 0x4fU, 0x67U, 0xdcU, 0xeaU, - 0x97U, 0xf2U, 0xcfU, 0xceU, 0xf0U, 0xb4U, 0xe6U, 0x73U, - 0x96U, 0xacU, 0x74U, 0x22U, 0xe7U, 0xadU, 0x35U, 0x85U, - 0xe2U, 0xf9U, 0x37U, 0xe8U, 0x1cU, 0x75U, 0xdfU, 0x6eU, - 0x47U, 0xf1U, 0x1aU, 0x71U, 0x1dU, 0x29U, 0xc5U, 0x89U, - 0x6fU, 0xb7U, 0x62U, 0x0eU, 0xaaU, 0x18U, 0xbeU, 0x1bU, - 0xfcU, 0x56U, 0x3eU, 0x4bU, 0xc6U, 0xd2U, 0x79U, 0x20U, - 0x9aU, 0xdbU, 0xc0U, 0xfeU, 0x78U, 0xcdU, 0x5aU, 0xf4U, - 0x1fU, 0xddU, 0xa8U, 0x33U, 0x88U, 0x07U, 0xc7U, 0x31U, - 0xb1U, 0x12U, 0x10U, 0x59U, 0x27U, 0x80U, 0xecU, 0x5fU, - 0x60U, 0x51U, 0x7fU, 0xa9U, 0x19U, 0xb5U, 0x4aU, 0x0dU, - 0x2dU, 0xe5U, 0x7aU, 0x9fU, 0x93U, 0xc9U, 0x9cU, 0xefU, - 0xa0U, 0xe0U, 0x3bU, 0x4dU, 0xaeU, 0x2aU, 0xf5U, 0xb0U, - 0xc8U, 0xebU, 0xbbU, 0x3cU, 0x83U, 0x53U, 0x99U, 0x61U, - 0x17U, 0x2bU, 0x04U, 0x7eU, 0xbaU, 0x77U, 0xd6U, 0x26U, - 0xe1U, 0x69U, 0x14U, 0x63U, 0x55U, 0x21U, 0x0cU, 0x7dU, -}; -static const u32 rcon[] = { - 0x01000000, 0x02000000, 0x04000000, 0x08000000, - 0x10000000, 0x20000000, 0x40000000, 0x80000000, - 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ -}; - -/** - * Expand the cipher key into the encryption key schedule. - */ -int AES_set_encrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key) { - - u32 *rk; - int i = 0; - u32 temp; - - if (!userKey || !key) - return -1; - if (bits != 128 && bits != 192 && bits != 256) - return -2; - - rk = key->rd_key; - - if (bits==128) - key->rounds = 10; - else if (bits==192) - key->rounds = 12; - else - key->rounds = 14; - - rk[0] = GETU32(userKey ); - rk[1] = GETU32(userKey + 4); - rk[2] = GETU32(userKey + 8); - rk[3] = GETU32(userKey + 12); - if (bits == 128) { - for (;;) { - temp = rk[3]; - rk[4] = rk[0] ^ - (Te2[(temp >> 16) & 0xff] & 0xff000000) ^ - (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^ - (Te0[(temp ) & 0xff] & 0x0000ff00) ^ - (Te1[(temp >> 24) ] & 0x000000ff) ^ - rcon[i]; - rk[5] = rk[1] ^ rk[4]; - rk[6] = rk[2] ^ rk[5]; - rk[7] = rk[3] ^ rk[6]; - if (++i == 10) { - return 0; - } - rk += 4; - } - } - rk[4] = GETU32(userKey + 16); - rk[5] = GETU32(userKey + 20); - if (bits == 192) { - for (;;) { - temp = rk[ 5]; - rk[ 6] = rk[ 0] ^ - (Te2[(temp >> 16) & 0xff] & 0xff000000) ^ - (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^ - (Te0[(temp ) & 0xff] & 0x0000ff00) ^ - (Te1[(temp >> 24) ] & 0x000000ff) ^ - rcon[i]; - rk[ 7] = rk[ 1] ^ rk[ 6]; - rk[ 8] = rk[ 2] ^ rk[ 7]; - rk[ 9] = rk[ 3] ^ rk[ 8]; - if (++i == 8) { - return 0; - } - rk[10] = rk[ 4] ^ rk[ 9]; - rk[11] = rk[ 5] ^ rk[10]; - rk += 6; - } - } - rk[6] = GETU32(userKey + 24); - rk[7] = GETU32(userKey + 28); - if (bits == 256) { - for (;;) { - temp = rk[ 7]; - rk[ 8] = rk[ 0] ^ - (Te2[(temp >> 16) & 0xff] & 0xff000000) ^ - (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^ - (Te0[(temp ) & 0xff] & 0x0000ff00) ^ - (Te1[(temp >> 24) ] & 0x000000ff) ^ - rcon[i]; - rk[ 9] = rk[ 1] ^ rk[ 8]; - rk[10] = rk[ 2] ^ rk[ 9]; - rk[11] = rk[ 3] ^ rk[10]; - if (++i == 7) { - return 0; - } - temp = rk[11]; - rk[12] = rk[ 4] ^ - (Te2[(temp >> 24) ] & 0xff000000) ^ - (Te3[(temp >> 16) & 0xff] & 0x00ff0000) ^ - (Te0[(temp >> 8) & 0xff] & 0x0000ff00) ^ - (Te1[(temp ) & 0xff] & 0x000000ff); - rk[13] = rk[ 5] ^ rk[12]; - rk[14] = rk[ 6] ^ rk[13]; - rk[15] = rk[ 7] ^ rk[14]; - - rk += 8; - } - } - return 0; -} - -/** - * Expand the cipher key into the decryption key schedule. - */ -int AES_set_decrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key) { - - u32 *rk; - int i, j, status; - u32 temp; - - /* first, start with an encryption schedule */ - status = AES_set_encrypt_key(userKey, bits, key); - if (status < 0) - return status; - - rk = key->rd_key; - - /* invert the order of the round keys: */ - for (i = 0, j = 4*(key->rounds); i < j; i += 4, j -= 4) { - temp = rk[i ]; rk[i ] = rk[j ]; rk[j ] = temp; - temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp; - temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp; - temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp; - } - /* apply the inverse MixColumn transform to all round keys but the first and the last: */ - for (i = 1; i < (key->rounds); i++) { - rk += 4; - rk[0] = - Td0[Te1[(rk[0] >> 24) ] & 0xff] ^ - Td1[Te1[(rk[0] >> 16) & 0xff] & 0xff] ^ - Td2[Te1[(rk[0] >> 8) & 0xff] & 0xff] ^ - Td3[Te1[(rk[0] ) & 0xff] & 0xff]; - rk[1] = - Td0[Te1[(rk[1] >> 24) ] & 0xff] ^ - Td1[Te1[(rk[1] >> 16) & 0xff] & 0xff] ^ - Td2[Te1[(rk[1] >> 8) & 0xff] & 0xff] ^ - Td3[Te1[(rk[1] ) & 0xff] & 0xff]; - rk[2] = - Td0[Te1[(rk[2] >> 24) ] & 0xff] ^ - Td1[Te1[(rk[2] >> 16) & 0xff] & 0xff] ^ - Td2[Te1[(rk[2] >> 8) & 0xff] & 0xff] ^ - Td3[Te1[(rk[2] ) & 0xff] & 0xff]; - rk[3] = - Td0[Te1[(rk[3] >> 24) ] & 0xff] ^ - Td1[Te1[(rk[3] >> 16) & 0xff] & 0xff] ^ - Td2[Te1[(rk[3] >> 8) & 0xff] & 0xff] ^ - Td3[Te1[(rk[3] ) & 0xff] & 0xff]; - } - return 0; -} - -#ifndef AES_ASM -/* - * Encrypt a single block - * in and out can overlap - */ -void AES_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key) { - - const u32 *rk; - u32 s0, s1, s2, s3, t0, t1, t2, t3; -#ifndef FULL_UNROLL - int r; -#endif /* ?FULL_UNROLL */ - - assert(in && out && key); - rk = key->rd_key; - - /* - * map byte array block to cipher state - * and add initial round key: - */ - s0 = GETU32(in ) ^ rk[0]; - s1 = GETU32(in + 4) ^ rk[1]; - s2 = GETU32(in + 8) ^ rk[2]; - s3 = GETU32(in + 12) ^ rk[3]; -#ifdef FULL_UNROLL - /* round 1: */ - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7]; - /* round 2: */ - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11]; - /* round 3: */ - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15]; - /* round 4: */ - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19]; - /* round 5: */ - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23]; - /* round 6: */ - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27]; - /* round 7: */ - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31]; - /* round 8: */ - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35]; - /* round 9: */ - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39]; - if (key->rounds > 10) { - /* round 10: */ - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43]; - /* round 11: */ - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47]; - if (key->rounds > 12) { - /* round 12: */ - s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48]; - s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49]; - s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50]; - s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51]; - /* round 13: */ - t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52]; - t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53]; - t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54]; - t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55]; - } - } - rk += key->rounds << 2; -#else /* !FULL_UNROLL */ - /* - * Nr - 1 full rounds: - */ - r = key->rounds >> 1; - for (;;) { - t0 = - Te0[(s0 >> 24) ] ^ - Te1[(s1 >> 16) & 0xff] ^ - Te2[(s2 >> 8) & 0xff] ^ - Te3[(s3 ) & 0xff] ^ - rk[4]; - t1 = - Te0[(s1 >> 24) ] ^ - Te1[(s2 >> 16) & 0xff] ^ - Te2[(s3 >> 8) & 0xff] ^ - Te3[(s0 ) & 0xff] ^ - rk[5]; - t2 = - Te0[(s2 >> 24) ] ^ - Te1[(s3 >> 16) & 0xff] ^ - Te2[(s0 >> 8) & 0xff] ^ - Te3[(s1 ) & 0xff] ^ - rk[6]; - t3 = - Te0[(s3 >> 24) ] ^ - Te1[(s0 >> 16) & 0xff] ^ - Te2[(s1 >> 8) & 0xff] ^ - Te3[(s2 ) & 0xff] ^ - rk[7]; - - rk += 8; - if (--r == 0) { - break; - } - - s0 = - Te0[(t0 >> 24) ] ^ - Te1[(t1 >> 16) & 0xff] ^ - Te2[(t2 >> 8) & 0xff] ^ - Te3[(t3 ) & 0xff] ^ - rk[0]; - s1 = - Te0[(t1 >> 24) ] ^ - Te1[(t2 >> 16) & 0xff] ^ - Te2[(t3 >> 8) & 0xff] ^ - Te3[(t0 ) & 0xff] ^ - rk[1]; - s2 = - Te0[(t2 >> 24) ] ^ - Te1[(t3 >> 16) & 0xff] ^ - Te2[(t0 >> 8) & 0xff] ^ - Te3[(t1 ) & 0xff] ^ - rk[2]; - s3 = - Te0[(t3 >> 24) ] ^ - Te1[(t0 >> 16) & 0xff] ^ - Te2[(t1 >> 8) & 0xff] ^ - Te3[(t2 ) & 0xff] ^ - rk[3]; - } -#endif /* ?FULL_UNROLL */ - /* - * apply last round and - * map cipher state to byte array block: - */ - s0 = - (Te2[(t0 >> 24) ] & 0xff000000) ^ - (Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^ - (Te0[(t2 >> 8) & 0xff] & 0x0000ff00) ^ - (Te1[(t3 ) & 0xff] & 0x000000ff) ^ - rk[0]; - PUTU32(out , s0); - s1 = - (Te2[(t1 >> 24) ] & 0xff000000) ^ - (Te3[(t2 >> 16) & 0xff] & 0x00ff0000) ^ - (Te0[(t3 >> 8) & 0xff] & 0x0000ff00) ^ - (Te1[(t0 ) & 0xff] & 0x000000ff) ^ - rk[1]; - PUTU32(out + 4, s1); - s2 = - (Te2[(t2 >> 24) ] & 0xff000000) ^ - (Te3[(t3 >> 16) & 0xff] & 0x00ff0000) ^ - (Te0[(t0 >> 8) & 0xff] & 0x0000ff00) ^ - (Te1[(t1 ) & 0xff] & 0x000000ff) ^ - rk[2]; - PUTU32(out + 8, s2); - s3 = - (Te2[(t3 >> 24) ] & 0xff000000) ^ - (Te3[(t0 >> 16) & 0xff] & 0x00ff0000) ^ - (Te0[(t1 >> 8) & 0xff] & 0x0000ff00) ^ - (Te1[(t2 ) & 0xff] & 0x000000ff) ^ - rk[3]; - PUTU32(out + 12, s3); -} - -/* - * Decrypt a single block - * in and out can overlap - */ -void AES_decrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key) { - - const u32 *rk; - u32 s0, s1, s2, s3, t0, t1, t2, t3; -#ifndef FULL_UNROLL - int r; -#endif /* ?FULL_UNROLL */ - - assert(in && out && key); - rk = key->rd_key; - - /* - * map byte array block to cipher state - * and add initial round key: - */ - s0 = GETU32(in ) ^ rk[0]; - s1 = GETU32(in + 4) ^ rk[1]; - s2 = GETU32(in + 8) ^ rk[2]; - s3 = GETU32(in + 12) ^ rk[3]; -#ifdef FULL_UNROLL - /* round 1: */ - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7]; - /* round 2: */ - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11]; - /* round 3: */ - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15]; - /* round 4: */ - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19]; - /* round 5: */ - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23]; - /* round 6: */ - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27]; - /* round 7: */ - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31]; - /* round 8: */ - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35]; - /* round 9: */ - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39]; - if (key->rounds > 10) { - /* round 10: */ - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43]; - /* round 11: */ - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47]; - if (key->rounds > 12) { - /* round 12: */ - s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48]; - s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49]; - s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50]; - s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51]; - /* round 13: */ - t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52]; - t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53]; - t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54]; - t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55]; - } - } - rk += key->rounds << 2; -#else /* !FULL_UNROLL */ - /* - * Nr - 1 full rounds: - */ - r = key->rounds >> 1; - for (;;) { - t0 = - Td0[(s0 >> 24) ] ^ - Td1[(s3 >> 16) & 0xff] ^ - Td2[(s2 >> 8) & 0xff] ^ - Td3[(s1 ) & 0xff] ^ - rk[4]; - t1 = - Td0[(s1 >> 24) ] ^ - Td1[(s0 >> 16) & 0xff] ^ - Td2[(s3 >> 8) & 0xff] ^ - Td3[(s2 ) & 0xff] ^ - rk[5]; - t2 = - Td0[(s2 >> 24) ] ^ - Td1[(s1 >> 16) & 0xff] ^ - Td2[(s0 >> 8) & 0xff] ^ - Td3[(s3 ) & 0xff] ^ - rk[6]; - t3 = - Td0[(s3 >> 24) ] ^ - Td1[(s2 >> 16) & 0xff] ^ - Td2[(s1 >> 8) & 0xff] ^ - Td3[(s0 ) & 0xff] ^ - rk[7]; - - rk += 8; - if (--r == 0) { - break; - } - - s0 = - Td0[(t0 >> 24) ] ^ - Td1[(t3 >> 16) & 0xff] ^ - Td2[(t2 >> 8) & 0xff] ^ - Td3[(t1 ) & 0xff] ^ - rk[0]; - s1 = - Td0[(t1 >> 24) ] ^ - Td1[(t0 >> 16) & 0xff] ^ - Td2[(t3 >> 8) & 0xff] ^ - Td3[(t2 ) & 0xff] ^ - rk[1]; - s2 = - Td0[(t2 >> 24) ] ^ - Td1[(t1 >> 16) & 0xff] ^ - Td2[(t0 >> 8) & 0xff] ^ - Td3[(t3 ) & 0xff] ^ - rk[2]; - s3 = - Td0[(t3 >> 24) ] ^ - Td1[(t2 >> 16) & 0xff] ^ - Td2[(t1 >> 8) & 0xff] ^ - Td3[(t0 ) & 0xff] ^ - rk[3]; - } -#endif /* ?FULL_UNROLL */ - /* - * apply last round and - * map cipher state to byte array block: - */ - s0 = - (Td4[(t0 >> 24) ] << 24) ^ - (Td4[(t3 >> 16) & 0xff] << 16) ^ - (Td4[(t2 >> 8) & 0xff] << 8) ^ - (Td4[(t1 ) & 0xff]) ^ - rk[0]; - PUTU32(out , s0); - s1 = - (Td4[(t1 >> 24) ] << 24) ^ - (Td4[(t0 >> 16) & 0xff] << 16) ^ - (Td4[(t3 >> 8) & 0xff] << 8) ^ - (Td4[(t2 ) & 0xff]) ^ - rk[1]; - PUTU32(out + 4, s1); - s2 = - (Td4[(t2 >> 24) ] << 24) ^ - (Td4[(t1 >> 16) & 0xff] << 16) ^ - (Td4[(t0 >> 8) & 0xff] << 8) ^ - (Td4[(t3 ) & 0xff]) ^ - rk[2]; - PUTU32(out + 8, s2); - s3 = - (Td4[(t3 >> 24) ] << 24) ^ - (Td4[(t2 >> 16) & 0xff] << 16) ^ - (Td4[(t1 >> 8) & 0xff] << 8) ^ - (Td4[(t0 ) & 0xff]) ^ - rk[3]; - PUTU32(out + 12, s3); -} - -#endif /* AES_ASM */ diff --git a/Source/Core/Common/Src/Crypto/aes_locl.h b/Source/Core/Common/Src/Crypto/aes_locl.h deleted file mode 100644 index c222ed744b..0000000000 --- a/Source/Core/Common/Src/Crypto/aes_locl.h +++ /dev/null @@ -1,88 +0,0 @@ -/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. 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 acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED 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 OpenSSL PROJECT OR - * ITS 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. - * ==================================================================== - * - */ - -#ifndef HEADER_AES_LOCL_H -#define HEADER_AES_LOCL_H - - -#ifdef OPENSSL_NO_AES -#error AES is disabled. -#endif - -#include -#include -#include - -#if defined (_MSC_VER) && (defined (_M_IX86) || defined (_M_AMD64) || defined (_M_X64)) -# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) -# define GETU32(p) SWAP(*((u32*)(p))) -# define PUTU32(ct, st) {*((u32*)(ct)) = SWAP((st));} -#else -# define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] << 8) ^ ((u32)(pt)[3])) -# define PUTU32(ct, st) {(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >> 8); (ct)[3] = (u8)(st);} -#endif - -#ifdef AES_LONG -typedef unsigned long u32; -#else -typedef unsigned int u32; -#endif -typedef unsigned short u16; -typedef unsigned char u8; - -#define MAXKC (256 / 32) -#define MAXKB (256 / 8) -#define MAXNR 14 - -/* This controls loop-unrolling in aes_core.c */ -#undef FULL_UNROLL - -#endif /* !HEADER_AES_LOCL_H */ diff --git a/Source/Core/Common/Src/Crypto/ec.cpp b/Source/Core/Common/Src/Crypto/ec.cpp index 6580dfb5ff..d360a5b659 100644 --- a/Source/Core/Common/Src/Crypto/ec.cpp +++ b/Source/Core/Common/Src/Crypto/ec.cpp @@ -323,7 +323,7 @@ void point_mul(u8 *d, const u8 *a, u8 *b) // a is bignum } } -void silly_random(u8 * rndArea, u8 count) +void silly_random(u8 * rndArea, u8 count) { u16 i; srand((unsigned) (time(NULL))); @@ -331,7 +331,7 @@ void silly_random(u8 * rndArea, u8 count) for(i=0;iName, lpszNonUnicodeUnDSymbol, BUFFERSIZE, - UNDNAME_COMPLETE | + UnDecorateSymbolName( pSym->Name, lpszNonUnicodeUnDSymbol, BUFFERSIZE, + UNDNAME_COMPLETE | UNDNAME_NO_THISTYPE | UNDNAME_NO_SPECIAL_SYMS | UNDNAME_NO_MEMBER_TYPE | @@ -224,7 +224,7 @@ static BOOL GetFunctionInfoFromAddresses( ULONG fnAddress, ULONG stackAddress, L _tcscat( lpszSymbol, lpszParsed ); ret = TRUE; - } + } GlobalFree( pSym ); return ret; @@ -330,14 +330,14 @@ void StackTrace( HANDLE hThread, const char* lpszMessage, FILE *file ) PrintFunctionAndSourceInfo(file, callStack); - for( ULONG index = 0; ; index++ ) + for( ULONG index = 0; ; index++ ) { bResult = StackWalk( IMAGE_FILE_MACHINE_I386, hProcess, hThread, &callStack, - NULL, + NULL, NULL, SymFunctionTableAccess, SymGetModuleBase, @@ -346,7 +346,7 @@ void StackTrace( HANDLE hThread, const char* lpszMessage, FILE *file ) if ( index == 0 ) continue; - if( !bResult || callStack.AddrFrame.Offset == 0 ) + if( !bResult || callStack.AddrFrame.Offset == 0 ) break; PrintFunctionAndSourceInfo(file, callStack); @@ -387,14 +387,14 @@ void StackTrace(HANDLE hThread, const char* lpszMessage, FILE *file, DWORD eip, PrintFunctionAndSourceInfo(file, callStack); - for( ULONG index = 0; ; index++ ) + for( ULONG index = 0; ; index++ ) { bResult = StackWalk( IMAGE_FILE_MACHINE_I386, hProcess, hThread, &callStack, - NULL, + NULL, NULL, SymFunctionTableAccess, SymGetModuleBase, @@ -403,7 +403,7 @@ void StackTrace(HANDLE hThread, const char* lpszMessage, FILE *file, DWORD eip, if ( index == 0 ) continue; - if( !bResult || callStack.AddrFrame.Offset == 0 ) + if( !bResult || callStack.AddrFrame.Offset == 0 ) break; PrintFunctionAndSourceInfo(file, callStack); diff --git a/Source/Core/Common/Src/FPURoundMode.h b/Source/Core/Common/Src/FPURoundMode.h index 4dc18012dd..fad4d5d6aa 100644 --- a/Source/Core/Common/Src/FPURoundMode.h +++ b/Source/Core/Common/Src/FPURoundMode.h @@ -35,12 +35,12 @@ namespace FPURoundMode void SetRoundMode(u32 mode); void SetPrecisionMode(u32 mode); - + void SetSIMDMode(u32 mode); /* * There are two different flavors of float to int conversion: - * _mm_cvtps_epi32() and _mm_cvttps_epi32(). + * _mm_cvtps_epi32() and _mm_cvttps_epi32(). * * The first rounds according to the MXCSR rounding bits. * The second one always uses round towards zero. diff --git a/Source/Core/Common/Src/FifoQueue.h b/Source/Core/Common/Src/FifoQueue.h index 19687e8a4e..c3d15ff7d8 100644 --- a/Source/Core/Common/Src/FifoQueue.h +++ b/Source/Core/Common/Src/FifoQueue.h @@ -48,7 +48,7 @@ public: // create the element, add it to the queue m_write_ptr->current = std::forward(t); // set the next pointer to a new element ptr - // then advance the write pointer + // then advance the write pointer ElementPtr* new_ptr = new ElementPtr(); AtomicStoreRelease(m_write_ptr->next, new_ptr); m_write_ptr = new_ptr; diff --git a/Source/Core/Common/Src/FileSearch.cpp b/Source/Core/Common/Src/FileSearch.cpp index 3a6b6c1dc9..7597b91496 100644 --- a/Source/Core/Common/Src/FileSearch.cpp +++ b/Source/Core/Common/Src/FileSearch.cpp @@ -21,11 +21,11 @@ CFileSearch::CFileSearch(const CFileSearch::XStringVector& _rSearchStrings, const CFileSearch::XStringVector& _rDirectories) { // Reverse the loop order for speed? - for (size_t j = 0; j < _rSearchStrings.size(); j++) + for (auto& _rSearchString : _rSearchStrings) { - for (size_t i = 0; i < _rDirectories.size(); i++) + for (auto& _rDirectory : _rDirectories) { - FindFiles(_rSearchStrings[j], _rDirectories[i]); + FindFiles(_rSearchString, _rDirectory); } } } diff --git a/Source/Core/Common/Src/FileUtil.cpp b/Source/Core/Common/Src/FileUtil.cpp index 84a48599da..7eed3f08f4 100644 --- a/Source/Core/Common/Src/FileUtil.cpp +++ b/Source/Core/Common/Src/FileUtil.cpp @@ -92,7 +92,7 @@ bool IsDirectory(const std::string &filename) #endif if (result < 0) { - WARN_LOG(COMMON, "IsDirectory: stat failed on %s: %s", + WARN_LOG(COMMON, "IsDirectory: stat failed on %s: %s", filename.c_str(), GetLastErrorMsg()); return false; } @@ -106,7 +106,7 @@ bool Delete(const std::string &filename) { INFO_LOG(COMMON, "Delete: file %s", filename.c_str()); - // Return true because we care about the file no + // Return true because we care about the file no // being there, not the actual delete. if (!Exists(filename)) { @@ -124,13 +124,13 @@ bool Delete(const std::string &filename) #ifdef _WIN32 if (!DeleteFile(UTF8ToTStr(filename).c_str())) { - WARN_LOG(COMMON, "Delete: DeleteFile failed on %s: %s", + WARN_LOG(COMMON, "Delete: DeleteFile failed on %s: %s", filename.c_str(), GetLastErrorMsg()); return false; } #else if (unlink(filename.c_str()) == -1) { - WARN_LOG(COMMON, "Delete: unlink failed on %s: %s", + WARN_LOG(COMMON, "Delete: unlink failed on %s: %s", filename.c_str(), GetLastErrorMsg()); return false; } @@ -234,10 +234,10 @@ bool DeleteDir(const std::string &filename) return false; } -// renames file srcFilename to destFilename, returns true on success +// renames file srcFilename to destFilename, returns true on success bool Rename(const std::string &srcFilename, const std::string &destFilename) { - INFO_LOG(COMMON, "Rename: %s --> %s", + INFO_LOG(COMMON, "Rename: %s --> %s", srcFilename.c_str(), destFilename.c_str()); #ifdef _WIN32 auto sf = UTF8ToTStr(srcFilename); @@ -256,7 +256,7 @@ bool Rename(const std::string &srcFilename, const std::string &destFilename) if (rename(srcFilename.c_str(), destFilename.c_str()) == 0) return true; #endif - ERROR_LOG(COMMON, "Rename: failed %s --> %s: %s", + ERROR_LOG(COMMON, "Rename: failed %s --> %s: %s", srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg()); return false; } @@ -296,16 +296,16 @@ bool RenameSync(const std::string &srcFilename, const std::string &destFilename) return true; } -// copies file srcFilename to destFilename, returns true on success +// copies file srcFilename to destFilename, returns true on success bool Copy(const std::string &srcFilename, const std::string &destFilename) { - INFO_LOG(COMMON, "Copy: %s --> %s", + INFO_LOG(COMMON, "Copy: %s --> %s", srcFilename.c_str(), destFilename.c_str()); #ifdef _WIN32 if (CopyFile(UTF8ToTStr(srcFilename).c_str(), UTF8ToTStr(destFilename).c_str(), FALSE)) return true; - ERROR_LOG(COMMON, "Copy: failed %s --> %s: %s", + ERROR_LOG(COMMON, "Copy: failed %s --> %s: %s", srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg()); return false; #else @@ -319,7 +319,7 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename) FILE *input = fopen(srcFilename.c_str(), "rb"); if (!input) { - ERROR_LOG(COMMON, "Copy: input failed %s --> %s: %s", + ERROR_LOG(COMMON, "Copy: input failed %s --> %s: %s", srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg()); return false; } @@ -329,7 +329,7 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename) if (!output) { fclose(input); - ERROR_LOG(COMMON, "Copy: output failed %s --> %s: %s", + ERROR_LOG(COMMON, "Copy: output failed %s --> %s: %s", srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg()); return false; } @@ -343,8 +343,8 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename) { if (ferror(input) != 0) { - ERROR_LOG(COMMON, - "Copy: failed reading from source, %s --> %s: %s", + ERROR_LOG(COMMON, + "Copy: failed reading from source, %s --> %s: %s", srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg()); goto bail; } @@ -354,8 +354,8 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename) int wnum = fwrite(buffer, sizeof(char), rnum, output); if (wnum != rnum) { - ERROR_LOG(COMMON, - "Copy: failed writing to output, %s --> %s: %s", + ERROR_LOG(COMMON, + "Copy: failed writing to output, %s --> %s: %s", srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg()); goto bail; } @@ -387,7 +387,7 @@ u64 GetSize(const std::string &filename) WARN_LOG(COMMON, "GetSize: failed %s: is a directory", filename.c_str()); return 0; } - + struct stat64 buf; #ifdef _WIN32 if (_tstat64(UTF8ToTStr(filename).c_str(), &buf) == 0) @@ -436,10 +436,10 @@ u64 GetSize(FILE *f) return size; } -// creates an empty file filename, returns true on success +// creates an empty file filename, returns true on success bool CreateEmptyFile(const std::string &filename) { - INFO_LOG(COMMON, "CreateEmptyFile: %s", filename.c_str()); + INFO_LOG(COMMON, "CreateEmptyFile: %s", filename.c_str()); if (!File::IOFile(filename, "wb")) { @@ -489,7 +489,7 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry) #endif // check for "." and ".." if (((virtualName[0] == '.') && (virtualName[1] == '\0')) || - ((virtualName[0] == '.') && (virtualName[1] == '.') && + ((virtualName[0] == '.') && (virtualName[1] == '.') && (virtualName[2] == '\0'))) continue; entry.virtualName = virtualName; @@ -504,14 +504,14 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry) foundEntries += (u32)entry.size; } else - { // is a file + { // is a file entry.isDirectory = false; entry.size = GetSize(entry.physicalName.c_str()); } ++foundEntries; // Push into the tree - parentEntry.children.push_back(entry); -#ifdef _WIN32 + parentEntry.children.push_back(entry); +#ifdef _WIN32 } while (FindNextFile(hFind, &ffd) != 0); FindClose(hFind); #else @@ -556,7 +556,7 @@ bool DeleteDirRecursively(const std::string &directory) // check for "." and ".." if (((virtualName[0] == '.') && (virtualName[1] == '\0')) || - ((virtualName[0] == '.') && (virtualName[1] == '.') && + ((virtualName[0] == '.') && (virtualName[1] == '.') && (virtualName[2] == '\0'))) continue; @@ -592,7 +592,7 @@ bool DeleteDirRecursively(const std::string &directory) closedir(dirp); #endif File::DeleteDir(directory); - + return true; } @@ -653,7 +653,7 @@ void CopyDir(const std::string &source_path, const std::string &dest_path) std::string GetCurrentDir() { char *dir; - // Get the current working directory (getcwd uses malloc) + // Get the current working directory (getcwd uses malloc) if (!(dir = __getcwd(NULL, 0))) { ERROR_LOG(COMMON, "GetCurrentDirectory failed: %s", @@ -687,7 +687,7 @@ std::string GetTempFilenameForAtomicWrite(const std::string &path) } #if defined(__APPLE__) -std::string GetBundleDirectory() +std::string GetBundleDirectory() { CFURLRef BundleRef; char AppBundlePath[MAXPATHLEN]; @@ -798,8 +798,8 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string &new if (File::Exists(ROOT_DIR DIR_SEP USERDATA_DIR)) paths[D_USER_IDX] = ROOT_DIR DIR_SEP USERDATA_DIR DIR_SEP; else - paths[D_USER_IDX] = std::string(getenv("HOME") ? - getenv("HOME") : getenv("PWD") ? + paths[D_USER_IDX] = std::string(getenv("HOME") ? + getenv("HOME") : getenv("PWD") ? getenv("PWD") : "") + DIR_SEP DOLPHIN_DATA_DIR DIR_SEP; #endif @@ -917,7 +917,7 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string &new paths[D_WIIUSER_IDX] = paths[D_WIIROOT_IDX] + DIR_SEP; paths[D_WIIWC24_IDX] = paths[D_WIIUSER_IDX] + WII_WC24CONF_DIR DIR_SEP; - paths[D_WIISYSCONF_IDX] = paths[D_WIIUSER_IDX] + WII_SYSCONF_DIR + DIR_SEP; + paths[D_WIISYSCONF_IDX] = paths[D_WIIUSER_IDX] + WII_SYSCONF_DIR + DIR_SEP; paths[F_WIISYSCONF_IDX] = paths[D_WIISYSCONF_IDX] + WII_SYSCONF; } @@ -935,14 +935,14 @@ std::string GetThemeDir(const std::string& theme_name) return dir; } -bool WriteStringToFile(bool text_file, const std::string &str, const char *filename) +bool WriteStringToFile(const std::string &str, const char *filename) { - return File::IOFile(filename, text_file ? "w" : "wb").WriteBytes(str.data(), str.size()); + return File::IOFile(filename, "wb").WriteBytes(str.data(), str.size()); } -bool ReadFileToString(bool text_file, const char *filename, std::string &str) +bool ReadFileToString(const char *filename, std::string &str) { - File::IOFile file(filename, text_file ? "r" : "rb"); + File::IOFile file(filename, "rb"); auto const f = file.GetHandle(); if (!f) @@ -952,29 +952,6 @@ bool ReadFileToString(bool text_file, const char *filename, std::string &str) str.resize(GetSize(f)); bool retval = file.ReadArray(&str[0], str.size(), &read_size); - // On Windows, reading a text file automatically translates \r\n to \n. - // This means we will read less characters than the expected size of the - // file. In that case, ignore the return value and count ourselves. -#ifdef _WIN32 - if (text_file) - { - size_t count = 0; - for (size_t i = 0; i < read_size; ++i) - { - if (str[i] == '\n') - count += 2; - else - count += 1; - } - - if (count != str.size()) - return false; - - str.resize(read_size); - return true; - } -#endif - return retval; } diff --git a/Source/Core/Common/Src/FileUtil.h b/Source/Core/Common/Src/FileUtil.h index 8de525d64a..b39135fa41 100644 --- a/Source/Core/Common/Src/FileUtil.h +++ b/Source/Core/Common/Src/FileUtil.h @@ -56,7 +56,7 @@ enum { namespace File { -// FileSystem tree node/ +// FileSystem tree node/ struct FSTEntry { bool isDirectory; @@ -94,16 +94,16 @@ bool Delete(const std::string &filename); // Deletes a directory filename, returns true on success bool DeleteDir(const std::string &filename); -// renames file srcFilename to destFilename, returns true on success +// renames file srcFilename to destFilename, returns true on success bool Rename(const std::string &srcFilename, const std::string &destFilename); // ditto, but syncs the source file and, on Unix, syncs the directories after rename bool RenameSync(const std::string &srcFilename, const std::string &destFilename); -// copies file srcFilename to destFilename, returns true on success +// copies file srcFilename to destFilename, returns true on success bool Copy(const std::string &srcFilename, const std::string &destFilename); -// creates an empty file filename, returns true on success +// creates an empty file filename, returns true on success bool CreateEmptyFile(const std::string &filename); // Scans the directory tree gets, starting from _Directory and adds the @@ -143,8 +143,8 @@ std::string GetBundleDirectory(); std::string &GetExeDirectory(); #endif -bool WriteStringToFile(bool text_file, const std::string &str, const char *filename); -bool ReadFileToString(bool text_file, const char *filename, std::string &str); +bool WriteStringToFile(const std::string &str, const char *filename); +bool ReadFileToString(const char *filename, std::string &str); // simple wrapper for cstdlib file functions to // hopefully will make error checking easier @@ -157,10 +157,10 @@ public: IOFile(const std::string& filename, const char openmode[]); ~IOFile(); - + IOFile(IOFile&& other); IOFile& operator=(IOFile&& other); - + void Swap(IOFile& other); bool Open(const std::string& filename, const char openmode[]); diff --git a/Source/Core/Common/Src/Hash.cpp b/Source/Core/Common/Src/Hash.cpp index 2e221ee396..ab017347e8 100644 --- a/Source/Core/Common/Src/Hash.cpp +++ b/Source/Core/Common/Src/Hash.cpp @@ -115,15 +115,15 @@ inline u64 getblock(const u64 * p, int i) inline void bmix64(u64 & h1, u64 & h2, u64 & k1, u64 & k2, u64 & c1, u64 & c2) { - k1 *= c1; - k1 = _rotl64(k1,23); + k1 *= c1; + k1 = _rotl64(k1,23); k1 *= c2; h1 ^= k1; h1 += h2; h2 = _rotl64(h2,41); - k2 *= c2; + k2 *= c2; k2 = _rotl64(k2,23); k2 *= c1; h2 ^= k2; @@ -250,7 +250,7 @@ u64 GetCRC32(const u8 *src, int len, u32 samples) } -/* +/* * NOTE: This hash function is used for custom texture loading/dumping, so * it should not be changed, which would require all custom textures to be * recalculated for their new hash values. If the hashing function is @@ -273,7 +273,7 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples) u64 k = data[0]; data+=Step; k *= m; - k ^= k >> r; + k ^= k >> r; k *= m; h ^= k; h *= m; @@ -292,13 +292,13 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples) case 1: h ^= u64(data2[0]); h *= m; }; - + h ^= h >> r; h *= m; h ^= h >> r; return h; -} +} #else // CRC32 hash using the SSE4.2 instruction u64 GetCRC32(const u8 *src, int len, u32 samples) @@ -351,15 +351,15 @@ inline u32 fmix32(u32 h) inline void bmix32(u32 & h1, u32 & h2, u32 & k1, u32 & k2, u32 & c1, u32 & c2) { - k1 *= c1; - k1 = _rotl(k1,11); + k1 *= c1; + k1 = _rotl(k1,11); k1 *= c2; h1 ^= k1; h1 += h2; h2 = _rotl(h2,17); - k2 *= c2; + k2 *= c2; k2 = _rotl(k2,11); k2 *= c1; h2 ^= k2; @@ -405,7 +405,7 @@ u64 GetMurmurHash3(const u8* src, int len, u32 samples) //---------- // tail - + const u8 * tail = (const u8*)(data + nblocks*8); u32 k1 = 0; @@ -439,7 +439,7 @@ u64 GetMurmurHash3(const u8* src, int len, u32 samples) out[0] = h1; out[1] = h2; - + return *((u64 *)&out); } @@ -463,11 +463,11 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples) { u64 k = data[0]; data+=Step; - k *= m; - k ^= k >> r; + k *= m; + k ^= k >> r; k *= m; h ^= k; - h *= m; + h *= m; } const u8 * data2 = (const u8*)end; @@ -483,7 +483,7 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples) case 1: h ^= u64(data2[0]); h *= m; }; - + h ^= h >> r; h *= m; h ^= h >> r; diff --git a/Source/Core/Common/Src/IniFile.cpp b/Source/Core/Common/Src/IniFile.cpp index fbce8254e3..a1a10ab372 100644 --- a/Source/Core/Common/Src/IniFile.cpp +++ b/Source/Core/Common/Src/IniFile.cpp @@ -81,10 +81,10 @@ void IniFile::Section::Set(const char* key, bool newValue, bool defaultValue) Delete(key); } -void IniFile::Section::Set(const char* key, const std::vector& newValues) +void IniFile::Section::Set(const char* key, const std::vector& newValues) { std::string temp; - // Join the strings with , + // Join the strings with , std::vector::const_iterator it; for (it = newValues.begin(); it != newValues.end(); ++it) { @@ -124,19 +124,17 @@ bool IniFile::Section::Get(const char* key, std::vector& out) size_t subStart = temp.find_first_not_of(","); size_t subEnd; - // split by , - while (subStart != std::string::npos) { - - // Find next , + // split by , + while (subStart != std::string::npos) + { + // Find next , subEnd = temp.find_first_of(",", subStart); - if (subStart != subEnd) - // take from first char until next , + if (subStart != subEnd) + // take from first char until next , out.push_back(StripSpaces(temp.substr(subStart, subEnd - subStart))); - // Find the next non , char subStart = temp.find_first_not_of(",", subEnd); - } - + } return true; } @@ -210,17 +208,17 @@ bool IniFile::Section::Delete(const char *key) const IniFile::Section* IniFile::GetSection(const char* sectionName) const { - for (std::vector
::const_iterator iter = sections.begin(); iter != sections.end(); ++iter) - if (!strcasecmp(iter->name.c_str(), sectionName)) - return (&(*iter)); + for (const auto& sect : sections) + if (!strcasecmp(sect.name.c_str(), sectionName)) + return (&(sect)); return 0; } IniFile::Section* IniFile::GetSection(const char* sectionName) { - for (std::vector
::iterator iter = sections.begin(); iter != sections.end(); ++iter) - if (!strcasecmp(iter->name.c_str(), sectionName)) - return (&(*iter)); + for (auto& sect : sections) + if (!strcasecmp(sect.name.c_str(), sectionName)) + return (&(sect)); return 0; } @@ -291,9 +289,9 @@ bool IniFile::GetLines(const char* sectionName, std::vector& lines, return false; lines.clear(); - for (std::vector::const_iterator iter = section->lines.begin(); iter != section->lines.end(); ++iter) + for (std::string line : section->lines) { - std::string line = StripSpaces(*iter); + line = StripSpaces(line); if (remove_comments) { @@ -399,20 +397,15 @@ bool IniFile::Save(const char* filename) return false; } - for (auto iter = sections.begin(); iter != sections.end(); ++iter) + for (auto& section : sections) { - const Section& section = *iter; - if (section.keys_order.size() != 0 || section.lines.size() != 0) out << "[" << section.name << "]" << std::endl; if (section.keys_order.size() == 0) { - for (auto liter = section.lines.begin(); liter != section.lines.end(); ++liter) - { - std::string s = *liter; + for (auto s : section.lines) out << s << std::endl; - } } else { @@ -442,7 +435,7 @@ bool IniFile::Get(const char* sectionName, const char* key, std::string* value, return section->Get(key, value, defaultValue); } -bool IniFile::Get(const char *sectionName, const char* key, std::vector& values) +bool IniFile::Get(const char *sectionName, const char* key, std::vector& values) { Section *section = GetSection(sectionName); if (!section) diff --git a/Source/Core/Common/Src/IniFile.h b/Source/Core/Common/Src/IniFile.h index 0cf4ab902b..abfb58b0a6 100644 --- a/Source/Core/Common/Src/IniFile.h +++ b/Source/Core/Common/Src/IniFile.h @@ -53,12 +53,12 @@ public: void Set(const char* key, double newValue) { Set(key, StringFromFormat("%f", newValue).c_str()); } - + void Set(const char* key, int newValue, int defaultValue); void Set(const char* key, int newValue) { Set(key, StringFromInt(newValue).c_str()); } - + void Set(const char* key, bool newValue, bool defaultValue); void Set(const char* key, bool newValue) { Set(key, StringFromBool(newValue).c_str()); diff --git a/Source/Core/Common/Src/LinearDiskCache.h b/Source/Core/Common/Src/LinearDiskCache.h index 527dfd7036..e139b064f3 100644 --- a/Source/Core/Common/Src/LinearDiskCache.h +++ b/Source/Core/Common/Src/LinearDiskCache.h @@ -63,7 +63,7 @@ public: m_file.seekg(0, std::ios::beg); std::fstream::pos_type start_pos = m_file.tellg(); std::streamoff file_size = end_pos - start_pos; - + if (m_file.is_open() && ValidateHeader()) { // good header, read some key/value pairs @@ -86,7 +86,7 @@ public: // read key/value and pass to reader if (Read(&key) && - Read(value, value_size) && + Read(value, value_size) && Read(&entry_number) && entry_number == m_num_entries+1) { @@ -114,7 +114,7 @@ public: WriteHeader(); return 0; } - + void Sync() { m_file.flush(); diff --git a/Source/Core/Common/Src/Log.h b/Source/Core/Common/Src/Log.h index 7ad70b779a..b0f3519579 100644 --- a/Source/Core/Common/Src/Log.h +++ b/Source/Core/Common/Src/Log.h @@ -6,7 +6,7 @@ #define _LOG_H_ #define NOTICE_LEVEL 1 // VERY important information that is NOT errors. Like startup and OSReports. -#define ERROR_LEVEL 2 // Critical errors +#define ERROR_LEVEL 2 // Critical errors #define WARNING_LEVEL 3 // Something is suspicious. #define INFO_LEVEL 4 // General information. #define DEBUG_LEVEL 5 // Detailed debugging - might make things slow. @@ -40,7 +40,7 @@ enum LOG_TYPE MEMMAP, MEMCARD_MANAGER, OSREPORT, - PAD, + PAD, PROCESSORINTERFACE, PIXELENGINE, SERIALINTERFACE, diff --git a/Source/Core/Common/Src/LogManager.cpp b/Source/Core/Common/Src/LogManager.cpp index 60f649b373..50c6ab400a 100644 --- a/Source/Core/Common/Src/LogManager.cpp +++ b/Source/Core/Common/Src/LogManager.cpp @@ -13,7 +13,7 @@ #include "Thread.h" #include "FileUtil.h" -void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, +void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char* fmt, ...) { va_list args; @@ -81,14 +81,14 @@ LogManager::LogManager() m_consoleLog = new ConsoleListener(); m_debuggerLog = new DebuggerLogListener(); - for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) + for (auto& container : m_Log) { - m_Log[i]->SetEnable(true); - m_Log[i]->AddListener(m_fileLog); - m_Log[i]->AddListener(m_consoleLog); + container->SetEnable(true); + container->AddListener(m_fileLog); + container->AddListener(m_consoleLog); #ifdef _MSC_VER if (IsDebuggerPresent()) - m_Log[i]->AddListener(m_debuggerLog); + container->AddListener(m_debuggerLog); #endif } } @@ -102,15 +102,15 @@ LogManager::~LogManager() m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_debuggerLog); } - for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) - delete m_Log[i]; + for (auto& container : m_Log) + delete container; delete m_fileLog; delete m_consoleLog; delete m_debuggerLog; } -void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, +void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char *format, va_list args) { char temp[MAX_MSGLEN]; @@ -128,7 +128,7 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, file, line, level_to_char[(int)level], log->GetShortName(), temp); #ifdef ANDROID - Host_SysMessage(msg); + Host_SysMessage(msg); #endif log->Trigger(level, msg); } diff --git a/Source/Core/Common/Src/LogManager.h b/Source/Core/Common/Src/LogManager.h index 120d7b5f98..101be5fc13 100644 --- a/Source/Core/Common/Src/LogManager.h +++ b/Source/Core/Common/Src/LogManager.h @@ -55,7 +55,7 @@ class LogContainer { public: LogContainer(const char* shortName, const char* fullName, bool enable = false); - + const char* GetShortName() const { return m_shortName; } const char* GetFullName() const { return m_fullName; } @@ -99,7 +99,7 @@ public: static u32 GetMaxLevel() { return MAX_LOGLEVEL; } - void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, + void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char *fmt, va_list args); void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level) diff --git a/Source/Core/Common/Src/MathUtil.cpp b/Source/Core/Common/Src/MathUtil.cpp index 435f18ab09..c92e659890 100644 --- a/Source/Core/Common/Src/MathUtil.cpp +++ b/Source/Core/Common/Src/MathUtil.cpp @@ -17,7 +17,7 @@ u32 ClassifyDouble(double dvalue) value.d = dvalue; u64 sign = value.i & DOUBLE_SIGN; u64 exp = value.i & DOUBLE_EXP; - if (exp > DOUBLE_ZERO && exp < DOUBLE_EXP) + if (exp > DOUBLE_ZERO && exp < DOUBLE_EXP) { // Nice normalized number. return sign ? PPC_FPCLASS_NN : PPC_FPCLASS_PN; @@ -57,7 +57,7 @@ u32 ClassifyFloat(float fvalue) value.f = fvalue; u32 sign = value.i & FLOAT_SIGN; u32 exp = value.i & FLOAT_EXP; - if (exp > FLOAT_ZERO && exp < FLOAT_EXP) + if (exp > FLOAT_ZERO && exp < FLOAT_EXP) { // Nice normalized number. return sign ? PPC_FPCLASS_NN : PPC_FPCLASS_PN; @@ -76,13 +76,13 @@ u32 ClassifyFloat(float fvalue) // Denormalized number. return sign ? PPC_FPCLASS_ND : PPC_FPCLASS_PD; } - } - else if (exp) + } + else if (exp) { // Infinite return sign ? PPC_FPCLASS_NINF : PPC_FPCLASS_PINF; - } - else + } + else { //Zero return sign ? PPC_FPCLASS_NZ : PPC_FPCLASS_PZ; diff --git a/Source/Core/Common/Src/MathUtil.h b/Source/Core/Common/Src/MathUtil.h index c0221836e3..31772c3c60 100644 --- a/Source/Core/Common/Src/MathUtil.h +++ b/Source/Core/Common/Src/MathUtil.h @@ -105,7 +105,7 @@ struct Rectangle Rectangle(T theLeft, T theTop, T theRight, T theBottom) : left(theLeft), top(theTop), right(theRight), bottom(theBottom) { } - + bool operator==(const Rectangle& r) { return left==r.left && top==r.top && right==r.right && bottom==r.bottom; } T GetWidth() const { return abs(right - left); } @@ -123,7 +123,7 @@ struct Rectangle // If the rectangle is in a coordinate system with an upper-left origin, // use this Clamp. - void ClampUL(T x1, T y1, T x2, T y2) + void ClampUL(T x1, T y1, T x2, T y2) { if (left < x1) left = x1; if (right > x2) right = x2; diff --git a/Source/Core/Common/Src/MemArena.cpp b/Source/Core/Common/Src/MemArena.cpp index 49c51fd2ee..6b69b63860 100644 --- a/Source/Core/Common/Src/MemArena.cpp +++ b/Source/Core/Common/Src/MemArena.cpp @@ -36,7 +36,7 @@ int AshmemCreateFileMapping(const char *name, size_t size) if (fd < 0) return fd; - // We don't really care if we can't set the name, it is optional + // We don't really care if we can't set the name, it is optional ret = ioctl(fd, ASHMEM_SET_NAME, name); ret = ioctl(fd, ASHMEM_SET_SIZE, size); @@ -257,13 +257,12 @@ u8 *MemoryMap_Setup(const MemoryView *views, int num_views, u32 flags, MemArena { base_attempts++; base = (u8 *)base_addr; - if (Memory_TryBase(base, views, num_views, flags, arena)) + if (Memory_TryBase(base, views, num_views, flags, arena)) { INFO_LOG(MEMMAP, "Found valid memory base at %p after %i tries.", base, base_attempts); base_attempts = 0; break; } - } #else // Linux32 is fine with the x64 method, although limited to 32-bit with no automirrors. @@ -289,9 +288,8 @@ void MemoryMap_Shutdown(const MemoryView *views, int num_views, u32 flags, MemAr { const MemoryView* view = &views[i]; u8** outptrs[2] = {view->out_ptr_low, view->out_ptr}; - for (int j = 0; j < 2; j++) + for (auto outptr : outptrs) { - u8** outptr = outptrs[j]; if (outptr && *outptr && !freeset.count(*outptr)) { arena->ReleaseView(*outptr, view->size); diff --git a/Source/Core/Common/Src/MsgHandler.h b/Source/Core/Common/Src/MsgHandler.h index 7de10c7b0a..f6e2f0f1dc 100644 --- a/Source/Core/Common/Src/MsgHandler.h +++ b/Source/Core/Common/Src/MsgHandler.h @@ -16,7 +16,7 @@ enum MSG_TYPE CRITICAL }; -typedef bool (*MsgAlertHandler)(const char* caption, const char* text, +typedef bool (*MsgAlertHandler)(const char* caption, const char* text, bool yes_no, int Style); typedef std::string (*StringTranslator)(const char* text); @@ -32,29 +32,29 @@ void SetEnableAlert(bool enable); #ifndef GEKKO #ifdef _WIN32 - #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__) - #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__) - #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__) - #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__) - #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__) + #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__) + #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__) + #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__) + #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__) + #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__) // Use these macros (that do the same thing) if the message should be translated. - #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__) - #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__) - #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__) - #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__) - #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__) + #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__) + #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__) + #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__) + #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__) + #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__) #else - #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__) - #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__) - #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__) - #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__) - #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__) + #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__) + #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__) + #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__) + #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__) + #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__) // Use these macros (that do the same thing) if the message should be translated. - #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__) - #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__) - #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__) - #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__) - #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__) + #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__) + #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__) + #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__) + #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__) + #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__) #endif #else // GEKKO diff --git a/Source/Core/Common/Src/NandPaths.cpp b/Source/Core/Common/Src/NandPaths.cpp index 601d2a51ee..3ca5550d40 100644 --- a/Source/Core/Common/Src/NandPaths.cpp +++ b/Source/Core/Common/Src/NandPaths.cpp @@ -58,7 +58,7 @@ bool CheckTitleTMD(u64 _titleID) bool CheckTitleTIK(u64 _titleID) { - const std::string ticketFileName = Common::GetTicketFileName(_titleID); + const std::string ticketFileName = Common::GetTicketFileName(_titleID); if (File::Exists(ticketFileName)) { File::IOFile pTIKFile(ticketFileName, "rb"); diff --git a/Source/Core/Common/Src/SDCardUtil.cpp b/Source/Core/Common/Src/SDCardUtil.cpp index cf37ffff3e..5475cf131d 100644 --- a/Source/Core/Common/Src/SDCardUtil.cpp +++ b/Source/Core/Common/Src/SDCardUtil.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #ifndef _WIN32 #include // for unlink() @@ -196,7 +197,7 @@ bool SDCardCreate(u64 disk_size /*in MB*/, const char* filename) disk_size *= 1024 * 1024; if (disk_size < 0x800000 || disk_size > 0x800000000ULL) { - ERROR_LOG(COMMON, "Trying to create SD Card image of size %lliMB is out of range (8MB-32GB)", disk_size/(1024*1024)); + ERROR_LOG(COMMON, "Trying to create SD Card image of size %" PRIu64 "MB is out of range (8MB-32GB)", disk_size/(1024*1024)); return false; } diff --git a/Source/Core/Common/Src/StdConditionVariable.h b/Source/Core/Common/Src/StdConditionVariable.h index 048a7e8975..1a05ce45e3 100644 --- a/Source/Core/Common/Src/StdConditionVariable.h +++ b/Source/Core/Common/Src/StdConditionVariable.h @@ -9,7 +9,7 @@ #define __has_include(s) 0 #endif -#if GCC_VERSION >= GCC_VER(4,4,0) && __GXX_EXPERIMENTAL_CXX0X__ +#if GCC_VERSION >= GCC_VER(4,4,0) && __GXX_EXPERIMENTAL_CXX0X__ // GCC 4.4 provides #include @@ -25,6 +25,11 @@ #include #define _(s) wxGetTranslation((s)) +#elif _MSC_VER >= 1700 + +// The standard implementation is included since VS2012 +#include + #else // partial std::condition_variable implementation for win32/pthread diff --git a/Source/Core/Common/Src/StdMutex.h b/Source/Core/Common/Src/StdMutex.h index ce46a2f591..4d3348d458 100644 --- a/Source/Core/Common/Src/StdMutex.h +++ b/Source/Core/Common/Src/StdMutex.h @@ -15,6 +15,12 @@ #elif __has_include() && !ANDROID // Clang + libc++ #include + +#elif _MSC_VER >= 1700 + +// The standard implementation is included since VS2012 +#include + #else // partial implementation for win32/pthread @@ -102,7 +108,7 @@ public: return (0 != TryEnterCriticalSection(&m_handle)); #else return !pthread_mutex_trylock(&m_handle); -#endif +#endif } native_handle_type native_handle() @@ -277,10 +283,10 @@ public: swap(other); return *this; } - + #ifdef USE_RVALUE_REFERENCES unique_lock(const unique_lock&) /*= delete*/; - + unique_lock(unique_lock&& other) : pm(NULL), owns(false) { @@ -289,7 +295,7 @@ public: : pm(NULL), owns(false) { // ugly const_cast to get around lack of rvalue references - unique_lock& other = const_cast(u); + unique_lock& other = const_cast(u); #endif swap(other); } @@ -310,7 +316,7 @@ public: //bool try_lock_for(const chrono::duration& rel_time); //template //bool try_lock_until(const chrono::time_point& abs_time); - + void unlock() { mutex()->unlock(); diff --git a/Source/Core/Common/Src/StdThread.h b/Source/Core/Common/Src/StdThread.h index e43d283443..9e589061b1 100644 --- a/Source/Core/Common/Src/StdThread.h +++ b/Source/Core/Common/Src/StdThread.h @@ -18,6 +18,12 @@ #elif __has_include() && !ANDROID // Clang + libc++ #include + +#elif _MSC_VER >= 1700 + +// The standard implementation is included since VS2012 +#include + #else // partial std::thread implementation for win32/pthread @@ -207,7 +213,7 @@ public: std::swap(m_handle, other.m_handle); #endif } - + static unsigned hardware_concurrency() { #ifdef _WIN32 @@ -221,7 +227,7 @@ public: private: id m_id; - + #ifdef _WIN32 native_handle_type m_handle; #endif @@ -241,7 +247,7 @@ private: m_id = id(); #endif } - + template class Func { diff --git a/Source/Core/Common/Src/StringUtil.cpp b/Source/Core/Common/Src/StringUtil.cpp index 16cf890ad6..7ad4ac6ca5 100644 --- a/Source/Core/Common/Src/StringUtil.cpp +++ b/Source/Core/Common/Src/StringUtil.cpp @@ -109,11 +109,11 @@ std::string ArrayToString(const u8 *data, u32 size, int line_len, bool spaces) { std::ostringstream oss; oss << std::setfill('0') << std::hex; - + for (int line = 0; size; ++data, --size) { oss << std::setw(2) << (int)*data; - + if (line_len == ++line) { oss << '\n'; @@ -156,7 +156,7 @@ bool TryParse(const std::string &str, u32 *const output) errno = 0; unsigned long value = strtoul(str.c_str(), &endptr, 0); - + if (!endptr || *endptr) return false; @@ -284,7 +284,7 @@ std::string ReplaceAll(std::string result, const std::string& src, const std::st //#include //#include -const char HEX2DEC[256] = +const char HEX2DEC[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ 16,16,16,16, 16,16,16,16, 16,16,16,16, 16,16,16,16, @@ -317,7 +317,7 @@ std::string UriDecode(const std::string & sSrc) const unsigned char * pSrc = (const unsigned char *)sSrc.c_str(); const size_t SRC_LEN = sSrc.length(); const unsigned char * const SRC_END = pSrc + SRC_LEN; - const unsigned char * const SRC_LAST_DEC = SRC_END - 2; // last decodable '%' + const unsigned char * const SRC_LAST_DEC = SRC_END - 2; // last decodable '%' char * const pStart = new char[SRC_LEN]; char * pEnd = pStart; @@ -384,7 +384,7 @@ std::string UriEncode(const std::string & sSrc) for (; pSrc < SRC_END; ++pSrc) { - if (SAFE[*pSrc]) + if (SAFE[*pSrc]) *pEnd++ = *pSrc; else { @@ -404,26 +404,30 @@ std::string UriEncode(const std::string & sSrc) std::string UTF16ToUTF8(const std::wstring& input) { - auto const size = WideCharToMultiByte(CP_UTF8, 0, input.data(), input.size(), nullptr, 0, nullptr, nullptr); + auto const size = WideCharToMultiByte(CP_UTF8, 0, input.data(), (int)input.size(), nullptr, 0, nullptr, nullptr); std::string output; output.resize(size); - if (size == 0 || size != WideCharToMultiByte(CP_UTF8, 0, input.data(), input.size(), &output[0], output.size(), nullptr, nullptr)) + if (size == 0 || size != WideCharToMultiByte(CP_UTF8, 0, input.data(), (int)input.size(), &output[0], (int)output.size(), nullptr, nullptr)) + { output.clear(); + } return output; } std::wstring CPToUTF16(u32 code_page, const std::string& input) { - auto const size = MultiByteToWideChar(code_page, 0, input.data(), input.size(), nullptr, 0); + auto const size = MultiByteToWideChar(code_page, 0, input.data(), (int)input.size(), nullptr, 0); std::wstring output; output.resize(size); - if (size == 0 || size != MultiByteToWideChar(code_page, 0, input.data(), input.size(), &output[0], output.size())) + if (size == 0 || size != MultiByteToWideChar(code_page, 0, input.data(), (int)input.size(), &output[0], (int)output.size())) + { output.clear(); + } return output; } @@ -494,10 +498,10 @@ std::string CodeToUTF8(const char* fromcode, const std::basic_string& input) out_buffer.resize(out_buffer_size - dst_bytes); out_buffer.swap(result); - + iconv_close(conv_desc); } - + return result; } diff --git a/Source/Core/Common/Src/StringUtil.h b/Source/Core/Common/Src/StringUtil.h index 56c223641b..46ed382724 100644 --- a/Source/Core/Common/Src/StringUtil.h +++ b/Source/Core/Common/Src/StringUtil.h @@ -58,7 +58,7 @@ template static bool TryParse(const std::string &str, N *const output) { std::istringstream iss(str); - + N tmp = 0; if (iss >> tmp) { diff --git a/Source/Core/Common/Src/SymbolDB.cpp b/Source/Core/Common/Src/SymbolDB.cpp index 2dd4ee7473..e7a716de0f 100644 --- a/Source/Core/Common/Src/SymbolDB.cpp +++ b/Source/Core/Common/Src/SymbolDB.cpp @@ -28,18 +28,18 @@ void SymbolDB::Clear(const char *prefix) void SymbolDB::Index() { int i = 0; - for (XFuncMap::iterator iter = functions.begin(); iter != functions.end(); ++iter) + for (auto& func : functions) { - iter->second.index = i++; + func.second.index = i++; } } Symbol *SymbolDB::GetSymbolFromName(const char *name) { - for (XFuncMap::iterator iter = functions.begin(); iter != functions.end(); ++iter) + for (auto& func : functions) { - if (!strcmp(iter->second.name.c_str(), name)) - return &iter->second; + if (!strcmp(func.second.name.c_str(), name)) + return &func.second; } return 0; } diff --git a/Source/Core/Common/Src/SysConf.cpp b/Source/Core/Common/Src/SysConf.cpp index 9f2581845e..acfb11b0ed 100644 --- a/Source/Core/Common/Src/SysConf.cpp +++ b/Source/Core/Common/Src/SysConf.cpp @@ -5,6 +5,8 @@ #include "FileUtil.h" #include "SysConf.h" +#include + SysConf::SysConf() : m_IsValid(false) { @@ -38,11 +40,11 @@ bool SysConf::LoadFromFile(const char *filename) GenerateSysConf(); return true; } - + u64 size = File::GetSize(filename); if (size != SYSCONF_SIZE) { - if (AskYesNoT("Your SYSCONF file is the wrong size.\nIt should be 0x%04x (but is 0x%04llx)\nDo you want to generate a new one?", + if (AskYesNoT("Your SYSCONF file is the wrong size.\nIt should be 0x%04x (but is 0x%04" PRIx64 ")\nDo you want to generate a new one?", SYSCONF_SIZE, size)) { GenerateSysConf(); @@ -151,7 +153,7 @@ unsigned int create_item(SSysConfEntry &item, SysconfType type, const std::strin { item.offset = offset; item.type = type; - item.nameLength = name.length(); + item.nameLength = (u8)(name.length()); strncpy(item.name, name.c_str(), 32); item.dataLength = data_length; item.data = new u8[data_length]; @@ -298,8 +300,8 @@ void SysConf::GenerateSysConf() items[26].data[0] = 0x01; - for (int i = 0; i < 27; i++) - m_Entries.push_back(items[i]); + for (auto& item : items) + m_Entries.push_back(item); File::CreateFullPath(m_FilenameDefault); File::IOFile g(m_FilenameDefault, "wb"); @@ -314,7 +316,7 @@ void SysConf::GenerateSysConf() } const u16 end_data_offset = Common::swap16(current_offset); g.WriteBytes(&end_data_offset, 2); - + // Write the items const u8 null_byte = 0; for (int i = 0; i != 27; ++i) @@ -398,7 +400,7 @@ void SysConf::UpdateLocation() if (m_IsValid) Save(); - // Clear the old filename and set the default filename to the new user path + // Clear the old filename and set the default filename to the new user path // So that it can be generated if the file does not exist in the new location m_Filename.clear(); m_FilenameDefault = File::GetUserPath(F_WIISYSCONF_IDX); diff --git a/Source/Core/Common/Src/Thread.cpp b/Source/Core/Common/Src/Thread.cpp index 4040d04e42..740750a8ea 100644 --- a/Source/Core/Common/Src/Thread.cpp +++ b/Source/Core/Common/Src/Thread.cpp @@ -28,7 +28,7 @@ int CurrentThreadId() return 0; #endif } - + #ifdef _WIN32 void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask) @@ -55,7 +55,7 @@ void SwitchCurrentThread() // Sets the debugger-visible name of the current thread. // Uses undocumented (actually, it is now documented) trick. // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vxtsksettingthreadname.asp - + // This is implemented much nicer in upcoming msvc++, see: // http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.100).aspx void SetCurrentThreadName(const char* szThreadName) @@ -84,7 +84,7 @@ void SetCurrentThreadName(const char* szThreadName) __except(EXCEPTION_CONTINUE_EXECUTION) {} } - + #else // !WIN32, so must be POSIX threads void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask) diff --git a/Source/Core/Common/Src/Thread.h b/Source/Core/Common/Src/Thread.h index b0328f7a1f..b2e9572ce5 100644 --- a/Source/Core/Common/Src/Thread.h +++ b/Source/Core/Common/Src/Thread.h @@ -32,13 +32,13 @@ int CurrentThreadId(); void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask); void SetCurrentThreadAffinity(u32 mask); - + class Event { public: Event() : is_set(false) - {}; + {} void Set() { @@ -53,34 +53,20 @@ public: void Wait() { std::unique_lock lk(m_mutex); - m_condvar.wait(lk, IsSet(this)); + m_condvar.wait(lk, [&]{ return is_set; }); is_set = false; } void Reset() { std::unique_lock lk(m_mutex); - // no other action required, since wait loops on the predicate and any lingering signal will get cleared on the first iteration + // no other action required, since wait loops on + // the predicate and any lingering signal will get + // cleared on the first iteration is_set = false; } private: - class IsSet - { - public: - IsSet(const Event* ev) - : m_event(ev) - {} - - bool operator()() - { - return m_event->is_set; - } - - private: - const Event* const m_event; - }; - volatile bool is_set; std::condition_variable m_condvar; std::mutex m_mutex; @@ -110,34 +96,18 @@ public: } else { - m_condvar.wait(lk, IsDoneWating(this)); + m_condvar.wait(lk, [&]{ return (0 == m_waiting); }); return false; } } private: - class IsDoneWating - { - public: - IsDoneWating(const Barrier* bar) - : m_bar(bar) - {} - - bool operator()() - { - return (0 == m_bar->m_waiting); - } - - private: - const Barrier* const m_bar; - }; - std::condition_variable m_condvar; std::mutex m_mutex; const size_t m_count; volatile size_t m_waiting; }; - + void SleepCurrentThread(int ms); void SwitchCurrentThread(); // On Linux, this is equal to sleep 1ms @@ -148,9 +118,9 @@ inline void YieldCPU() { std::this_thread::yield(); } - + void SetCurrentThreadName(const char *name); - + } // namespace Common #endif // _THREAD_H_ diff --git a/Source/Core/Common/Src/Version.cpp b/Source/Core/Common/Src/Version.cpp index 944cc55906..09bfa9b1af 100644 --- a/Source/Core/Common/Src/Version.cpp +++ b/Source/Core/Common/Src/Version.cpp @@ -29,7 +29,7 @@ const char *scm_rev_str = "Dolphin " #else #ifdef _M_ARM #define NP_ARCH "ARM" -#else +#else #define NP_ARCH "x86" #endif #endif diff --git a/Source/Core/Common/Src/stdafx.h b/Source/Core/Common/Src/stdafx.h index 1a2e716e34..de740c3c89 100644 --- a/Source/Core/Common/Src/stdafx.h +++ b/Source/Core/Common/Src/stdafx.h @@ -4,18 +4,20 @@ #pragma once +/* #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x501 #endif #ifndef _WIN32_IE #define _WIN32_IE 0x0500 // Default value is 0x0400 #endif +*/ #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers - +/* #define _CRT_SECURE_NO_DEPRECATE 1 #define _CRT_NONSTDC_NO_DEPRECATE 1 - +*/ #include #include #include diff --git a/Source/Core/Common/Src/x64ABI.cpp b/Source/Core/Common/Src/x64ABI.cpp index b590282a0b..6cced10084 100644 --- a/Source/Core/Common/Src/x64ABI.cpp +++ b/Source/Core/Common/Src/x64ABI.cpp @@ -13,7 +13,7 @@ unsigned int XEmitter::ABI_GetAlignedFrameSize(unsigned int frameSize, bool noPr // On platforms other than Windows 32-bit: At the beginning of a function, // the stack pointer is 4/8 bytes less than a multiple of 16; however, the // function prolog immediately subtracts an appropriate amount to align - // it, so no alignment is required around a call. + // it, so no alignment is required around a call. // In the functions generated by ThunkManager::ProtectFunction and some // others, we add the necessary subtraction (and 0x20 bytes shadow space // for Win64) into this rather than having a separate prolog. @@ -497,12 +497,12 @@ void XEmitter::ABI_PushAllCalleeSavedRegsAndAdjustStack() { //we only want to do this once PUSH(RBP); MOV(64, R(RBP), R(RSP)); - PUSH(RBX); - PUSH(RSI); + PUSH(RBX); + PUSH(RSI); PUSH(RDI); - PUSH(R12); - PUSH(R13); - PUSH(R14); + PUSH(R12); + PUSH(R13); + PUSH(R14); PUSH(R15); SUB(64, R(RSP), Imm8(0x28)); //TODO: Also preserve XMM0-3? @@ -511,12 +511,12 @@ void XEmitter::ABI_PushAllCalleeSavedRegsAndAdjustStack() { void XEmitter::ABI_PopAllCalleeSavedRegsAndAdjustStack() { ADD(64, R(RSP), Imm8(0x28)); POP(R15); - POP(R14); - POP(R13); + POP(R14); + POP(R13); POP(R12); POP(RDI); - POP(RSI); - POP(RBX); + POP(RSI); + POP(RBX); POP(RBP); } @@ -526,10 +526,10 @@ void XEmitter::ABI_PopAllCalleeSavedRegsAndAdjustStack() { void XEmitter::ABI_PushAllCalleeSavedRegsAndAdjustStack() { PUSH(RBP); MOV(64, R(RBP), R(RSP)); - PUSH(RBX); - PUSH(R12); - PUSH(R13); - PUSH(R14); + PUSH(RBX); + PUSH(R12); + PUSH(R13); + PUSH(R14); PUSH(R15); SUB(64, R(RSP), Imm8(8)); } @@ -537,10 +537,10 @@ void XEmitter::ABI_PushAllCalleeSavedRegsAndAdjustStack() { void XEmitter::ABI_PopAllCalleeSavedRegsAndAdjustStack() { ADD(64, R(RSP), Imm8(8)); POP(R15); - POP(R14); - POP(R13); + POP(R14); + POP(R13); POP(R12); - POP(RBX); + POP(RBX); POP(RBP); } diff --git a/Source/Core/Common/Src/x64ABI.h b/Source/Core/Common/Src/x64ABI.h index e06cdbcc0b..c315c9cdd0 100644 --- a/Source/Core/Common/Src/x64ABI.h +++ b/Source/Core/Common/Src/x64ABI.h @@ -48,7 +48,7 @@ #else // 64 bit calling convention -#ifdef _WIN32 // 64-bit Windows - the really exotic calling convention +#ifdef _WIN32 // 64-bit Windows - the really exotic calling convention #define ABI_PARAM1 RCX #define ABI_PARAM2 RDX diff --git a/Source/Core/Common/Src/x64Analyzer.cpp b/Source/Core/Common/Src/x64Analyzer.cpp index e41b8ce5dd..eac178ff21 100644 --- a/Source/Core/Common/Src/x64Analyzer.cpp +++ b/Source/Core/Common/Src/x64Analyzer.cpp @@ -10,7 +10,7 @@ bool DisassembleMov(const unsigned char *codePtr, InstructionInfo *info) u8 rex = 0; u8 codeByte = 0; u8 codeByte2 = 0; - + //Check for regular prefix info->operandSize = 4; info->zeroExtend = false; @@ -28,7 +28,7 @@ bool DisassembleMov(const unsigned char *codePtr, InstructionInfo *info) { info->operandSize = 2; codePtr++; - } + } else if (*codePtr == 0x67) { codePtr++; @@ -47,17 +47,17 @@ bool DisassembleMov(const unsigned char *codePtr, InstructionInfo *info) codeByte = *codePtr++; - // Skip two-byte opcode byte - bool twoByte = false; - if(codeByte == 0x0F) + // Skip two-byte opcode byte + bool twoByte = false; + if(codeByte == 0x0F) { - twoByte = true; + twoByte = true; codeByte2 = *codePtr++; } if (!twoByte) { - if ((codeByte & 0xF0) == 0x80 || + if ((codeByte & 0xF0) == 0x80 || ((codeByte & 0xF8) == 0xC0 && (codeByte & 0x0E) != 0x02)) { modRMbyte = *codePtr++; @@ -66,20 +66,20 @@ bool DisassembleMov(const unsigned char *codePtr, InstructionInfo *info) } else { - if (((codeByte2 & 0xF0) == 0x00 && (codeByte2 & 0x0F) >= 0x04 && (codeByte2 & 0x0D) != 0x0D) || - (codeByte2 & 0xF0) == 0x30 || - codeByte2 == 0x77 || - (codeByte2 & 0xF0) == 0x80 || - ((codeByte2 & 0xF0) == 0xA0 && (codeByte2 & 0x07) <= 0x02) || - (codeByte2 & 0xF8) == 0xC8) + if (((codeByte2 & 0xF0) == 0x00 && (codeByte2 & 0x0F) >= 0x04 && (codeByte2 & 0x0D) != 0x0D) || + (codeByte2 & 0xF0) == 0x30 || + codeByte2 == 0x77 || + (codeByte2 & 0xF0) == 0x80 || + ((codeByte2 & 0xF0) == 0xA0 && (codeByte2 & 0x07) <= 0x02) || + (codeByte2 & 0xF8) == 0xC8) { - // No mod R/M byte + // No mod R/M byte } - else + else { modRMbyte = *codePtr++; hasModRM = true; - } + } } if (hasModRM) @@ -99,7 +99,7 @@ bool DisassembleMov(const unsigned char *codePtr, InstructionInfo *info) } else { - //info->scaledReg = + //info->scaledReg = } } if (mrm.mod == 1 || mrm.mod == 2) diff --git a/Source/Core/Common/Src/x64CPUDetect.cpp b/Source/Core/Common/Src/x64CPUDetect.cpp index 43c93ae8d6..2b434ad2b6 100644 --- a/Source/Core/Common/Src/x64CPUDetect.cpp +++ b/Source/Core/Common/Src/x64CPUDetect.cpp @@ -114,19 +114,19 @@ void CPUInfo::Detect() OS64bit = (f64 == TRUE) ? true : false; #endif #endif - + // Set obvious defaults, for extra safety if (Mode64bit) { bSSE = true; bSSE2 = true; bLongMode = true; } - + // Assume CPU supports the CPUID instruction. Those that don't can barely // boot modern OS:es anyway. int cpu_id[4]; memset(cpu_string, 0, sizeof(cpu_string)); - + // Detect CPU's CPUID capabilities, and grab cpu string __cpuid(cpu_id, 0x00000000); u32 max_std_fn = cpu_id[0]; // EAX @@ -141,10 +141,10 @@ void CPUInfo::Detect() vendor = VENDOR_AMD; else vendor = VENDOR_OTHER; - + // Set reasonable default brand string even if brand string not available. strcpy(brand_string, cpu_string); - + // Detect family and other misc stuff. bool ht = false; HTT = ht; @@ -169,7 +169,11 @@ void CPUInfo::Detect() if (((cpu_id[2] >> 28) & 1) && ((cpu_id[2] >> 27) & 1)) { if ((_xgetbv(_XCR_XFEATURE_ENABLED_MASK) & 0x6) == 0x6) + { bAVX = true; + if ((cpu_id[2] >> 12) & 1) + bFMA = true; + } } } if (max_ex_fn >= 0x80000004) { @@ -189,7 +193,7 @@ void CPUInfo::Detect() } num_cores = (logical_cpu_count == 0) ? 1 : logical_cpu_count; - + if (max_ex_fn >= 0x80000008) { // Get number of cores. This is a bit complicated. Following AMD manual here. __cpuid(cpu_id, 0x80000008); @@ -210,7 +214,7 @@ void CPUInfo::Detect() // Use AMD's new method. num_cores = (cpu_id[2] & 0xFF) + 1; } - } + } } // Turn the cpu info into a string we can show @@ -225,6 +229,7 @@ std::string CPUInfo::Summarize() if (bSSE4_2) sum += ", SSE4.2"; if (HTT) sum += ", HTT"; if (bAVX) sum += ", AVX"; + if (bFMA) sum += ", FMA"; if (bAES) sum += ", AES"; if (bLongMode) sum += ", 64-bit support"; return sum; diff --git a/Source/Core/Common/Src/x64Emitter.cpp b/Source/Core/Common/Src/x64Emitter.cpp index a5d7cb2f0f..05540ba4a8 100644 --- a/Source/Core/Common/Src/x64Emitter.cpp +++ b/Source/Core/Common/Src/x64Emitter.cpp @@ -7,6 +7,8 @@ #include "x64ABI.h" #include "CPUDetect.h" +#include + namespace Gen { @@ -16,7 +18,7 @@ struct NormalOpDef u8 toRm8, toRm32, fromRm8, fromRm32, imm8, imm32, simm8, ext; }; -static const NormalOpDef nops[11] = +static const NormalOpDef nops[11] = { {0x00, 0x01, 0x02, 0x03, 0x80, 0x81, 0x83, 0}, //ADD {0x10, 0x11, 0x12, 0x13, 0x80, 0x81, 0x83, 2}, //ADC @@ -154,6 +156,40 @@ void OpArg::WriteRex(XEmitter *emit, int opBits, int bits, int customOp) const #endif } +void OpArg::WriteVex(XEmitter* emit, int size, int packed, Gen::X64Reg regOp1, Gen::X64Reg regOp2) const +{ + int R = !(regOp1 & 8); + int X = !(indexReg & 8); + int B = !(offsetOrBaseReg & 8); + + // not so sure about this one... + int W = 0; + + // aka map_select in AMD manuals + // only support VEX opcode map 1 for now (analog to secondary opcode map) + int mmmmm = 1; + + int vvvv = (regOp2 == X64Reg::INVALID_REG) ? 0xf : (regOp2 ^ 0xf); + int L = size == 256; + int pp = (packed << 1) | (size == 64); + + // do we need any VEX fields that only appear in the three-byte form? + if (X == 1 && B == 1 && W == 0 && mmmmm == 1) + { + u8 RvvvvLpp = (R << 7) | (vvvv << 3) | (L << 1) | pp; + emit->Write8(0xC5); + emit->Write8(RvvvvLpp); + } + else + { + u8 RXBmmmmm = (R << 7) | (X << 6) | (B << 5) | mmmmm; + u8 WvvvvLpp = (W << 7) | (vvvv << 3) | (L << 1) | pp; + emit->Write8(0xC4); + emit->Write8(RXBmmmmm); + emit->Write8(WvvvvLpp); + } +} + void OpArg::WriteRest(XEmitter *emit, int extraBytes, X64Reg _operandReg, bool warn_64bit_offset) const { @@ -176,7 +212,7 @@ void OpArg::WriteRest(XEmitter *emit, int extraBytes, X64Reg _operandReg, _assert_msg_(DYNA_REC, (distance < 0x80000000LL && distance >= -0x80000000LL) || !warn_64bit_offset, - "WriteRest: op out of range (0x%llx uses 0x%llx)", + "WriteRest: op out of range (0x%" PRIx64 " uses 0x%" PRIx64 ")", ripAddr, offset); s32 offs = (s32)distance; emit->Write32((u32)offs); @@ -230,7 +266,7 @@ void OpArg::WriteRest(XEmitter *emit, int extraBytes, X64Reg _operandReg, SIB = true; } - if (scale == SCALE_ATREG && ((_offsetOrBaseReg & 7) == 4)) + if (scale == SCALE_ATREG && ((_offsetOrBaseReg & 7) == 4)) { SIB = true; ireg = _offsetOrBaseReg; @@ -255,7 +291,7 @@ void OpArg::WriteRest(XEmitter *emit, int extraBytes, X64Reg _operandReg, int oreg = _offsetOrBaseReg; if (SIB) oreg = 4; - + // TODO(ector): WTF is this if about? I don't remember writing it :-) //if (RIP) // oreg = 5; @@ -268,7 +304,7 @@ void OpArg::WriteRest(XEmitter *emit, int extraBytes, X64Reg _operandReg, int ss; switch (scale) { - case SCALE_NONE: _offsetOrBaseReg = 4; ss = 0; break; //RSP + case SCALE_NONE: _offsetOrBaseReg = 4; ss = 0; break; //RSP case SCALE_1: ss = 0; break; case SCALE_2: ss = 1; break; case SCALE_4: ss = 2; break; @@ -299,7 +335,7 @@ void OpArg::WriteRest(XEmitter *emit, int extraBytes, X64Reg _operandReg, // B = base register# upper bit void XEmitter::Rex(int w, int r, int x, int b) { - w = w ? 1 : 0; + w = w ? 1 : 0; r = r ? 1 : 0; x = x ? 1 : 0; b = b ? 1 : 0; @@ -495,7 +531,7 @@ void XEmitter::NOP(int count) } break; } -} +} void XEmitter::PAUSE() {Write8(0xF3); NOP();} //use in tight spinloops for energy saving on some cpu void XEmitter::CLC() {Write8(0xF8);} //clear carry @@ -557,8 +593,8 @@ void XEmitter::CBW(int bits) void XEmitter::PUSH(X64Reg reg) {WriteSimple1Byte(32, 0x50, reg);} void XEmitter::POP(X64Reg reg) {WriteSimple1Byte(32, 0x58, reg);} -void XEmitter::PUSH(int bits, const OpArg ®) -{ +void XEmitter::PUSH(int bits, const OpArg ®) +{ if (reg.IsSimpleReg()) PUSH(reg.GetSimpleReg()); else if (reg.IsImm()) @@ -594,7 +630,7 @@ void XEmitter::PUSH(int bits, const OpArg ®) } void XEmitter::POP(int /*bits*/, const OpArg ®) -{ +{ if (reg.IsSimpleReg()) POP(reg.GetSimpleReg()); else @@ -787,7 +823,7 @@ void XEmitter::WriteShift(int bits, OpArg dest, OpArg &shift, int ext) } if ((shift.IsSimpleReg() && shift.GetSimpleReg() != ECX) || (shift.IsImm() && shift.GetImmBits() != 8)) { - _assert_msg_(DYNA_REC, 0, "WriteShift - illegal argument"); + _assert_msg_(DYNA_REC, 0, "WriteShift - illegal argument"); } dest.operandReg = ext; if (bits == 16) Write8(0x66); @@ -834,7 +870,7 @@ void XEmitter::WriteBitTest(int bits, OpArg &dest, OpArg &index, int ext) } if ((index.IsImm() && index.GetImmBits() != 8)) { - _assert_msg_(DYNA_REC, 0, "WriteBitTest - illegal argument"); + _assert_msg_(DYNA_REC, 0, "WriteBitTest - illegal argument"); } if (bits == 16) Write8(0x66); if (index.IsImm()) @@ -871,7 +907,7 @@ void XEmitter::SHRD(int bits, OpArg dest, OpArg src, OpArg shift) } if ((shift.IsSimpleReg() && shift.GetSimpleReg() != ECX) || (shift.IsImm() && shift.GetImmBits() != 8)) { - _assert_msg_(DYNA_REC, 0, "SHRD - illegal shift"); + _assert_msg_(DYNA_REC, 0, "SHRD - illegal shift"); } if (bits == 16) Write8(0x66); X64Reg operand = src.GetSimpleReg(); @@ -901,7 +937,7 @@ void XEmitter::SHLD(int bits, OpArg dest, OpArg src, OpArg shift) } if ((shift.IsSimpleReg() && shift.GetSimpleReg() != ECX) || (shift.IsImm() && shift.GetImmBits() != 8)) { - _assert_msg_(DYNA_REC, 0, "SHLD - illegal shift"); + _assert_msg_(DYNA_REC, 0, "SHLD - illegal shift"); } if (bits == 16) Write8(0x66); X64Reg operand = src.GetSimpleReg(); @@ -954,13 +990,13 @@ void OpArg::WriteNormalOp(XEmitter *emit, bool toRM, NormalOp op, const OpArg &o _assert_msg_(DYNA_REC, 0, "WriteNormalOp - Writing to Imm (!toRM)"); } - if (operand.scale == SCALE_IMM8 && bits == 8) + if (operand.scale == SCALE_IMM8 && bits == 8) { emit->Write8(nops[op].imm8); immToWrite = 8; } else if ((operand.scale == SCALE_IMM16 && bits == 16) || - (operand.scale == SCALE_IMM32 && bits == 32) || + (operand.scale == SCALE_IMM32 && bits == 32) || (operand.scale == SCALE_IMM32 && bits == 64)) { emit->Write8(nops[op].imm32); @@ -1056,11 +1092,11 @@ void XEmitter::SBB (int bits, const OpArg &a1, const OpArg &a2) {WriteNormalOp(t void XEmitter::AND (int bits, const OpArg &a1, const OpArg &a2) {WriteNormalOp(this, bits, nrmAND, a1, a2);} void XEmitter::OR (int bits, const OpArg &a1, const OpArg &a2) {WriteNormalOp(this, bits, nrmOR , a1, a2);} void XEmitter::XOR (int bits, const OpArg &a1, const OpArg &a2) {WriteNormalOp(this, bits, nrmXOR, a1, a2);} -void XEmitter::MOV (int bits, const OpArg &a1, const OpArg &a2) +void XEmitter::MOV (int bits, const OpArg &a1, const OpArg &a2) { #ifdef _DEBUG - _assert_msg_(DYNA_REC, !a1.IsSimpleReg() || !a2.IsSimpleReg() || a1.GetSimpleReg() != a2.GetSimpleReg(), "Redundant MOV @ %p - bug in JIT?", - code); + _assert_msg_(DYNA_REC, !a1.IsSimpleReg() || !a2.IsSimpleReg() || a1.GetSimpleReg() != a2.GetSimpleReg(), "Redundant MOV @ %p - bug in JIT?", + code); #endif WriteNormalOp(this, bits, nrmMOV, a1, a2); } @@ -1141,6 +1177,18 @@ void XEmitter::WriteSSEOp(int size, u8 sseOp, bool packed, X64Reg regOp, OpArg a arg.WriteRest(this, extrabytes); } +void XEmitter::WriteAVXOp(int size, u8 sseOp, bool packed, X64Reg regOp, OpArg arg, int extrabytes) +{ + WriteAVXOp(size, sseOp, packed, regOp, X64Reg::INVALID_REG, arg, extrabytes); +} + +void XEmitter::WriteAVXOp(int size, u8 sseOp, bool packed, X64Reg regOp1, X64Reg regOp2, OpArg arg, int extrabytes) +{ + arg.WriteVex(this, size, packed, regOp1, regOp2); + Write8(sseOp); + arg.WriteRest(this, extrabytes, regOp1); +} + void XEmitter::MOVD_xmm(X64Reg dest, const OpArg &arg) {WriteSSEOp(64, 0x6E, true, dest, arg, 0);} void XEmitter::MOVD_xmm(const OpArg &arg, X64Reg src) {WriteSSEOp(64, 0x7E, true, src, arg, 0);} @@ -1188,7 +1236,7 @@ void XEmitter::MOVQ_xmm(OpArg arg, X64Reg src) { void XEmitter::WriteMXCSR(OpArg arg, int ext) { - if (arg.IsImm() || arg.IsSimpleReg()) + if (arg.IsImm() || arg.IsSimpleReg()) _assert_msg_(DYNA_REC, 0, "MXCSR - invalid operand"); arg.operandReg = ext; @@ -1248,8 +1296,8 @@ void XEmitter::MAXPD(X64Reg regOp, OpArg arg) {WriteSSEOp(64, sseMAX, true, re void XEmitter::SQRTPS(X64Reg regOp, OpArg arg) {WriteSSEOp(32, sseSQRT, true, regOp, arg);} void XEmitter::SQRTPD(X64Reg regOp, OpArg arg) {WriteSSEOp(64, sseSQRT, true, regOp, arg);} void XEmitter::RSQRTPS(X64Reg regOp, OpArg arg) {WriteSSEOp(32, sseRSQRT, true, regOp, arg);} -void XEmitter::SHUFPS(X64Reg regOp, OpArg arg, u8 shuffle) {WriteSSEOp(32, sseSHUF, true, regOp, arg,1); Write8(shuffle);} -void XEmitter::SHUFPD(X64Reg regOp, OpArg arg, u8 shuffle) {WriteSSEOp(64, sseSHUF, true, regOp, arg,1); Write8(shuffle);} +void XEmitter::SHUFPS(X64Reg regOp, OpArg arg, u8 shuffle) {WriteSSEOp(32, sseSHUF, true, regOp, arg,1); Write8(shuffle);} +void XEmitter::SHUFPD(X64Reg regOp, OpArg arg, u8 shuffle) {WriteSSEOp(64, sseSHUF, true, regOp, arg,1); Write8(shuffle);} void XEmitter::COMISS(X64Reg regOp, OpArg arg) {WriteSSEOp(32, sseCOMIS, true, regOp, arg);} //weird that these should be packed void XEmitter::COMISD(X64Reg regOp, OpArg arg) {WriteSSEOp(64, sseCOMIS, true, regOp, arg);} //ordered @@ -1300,7 +1348,7 @@ void XEmitter::UNPCKHPS(X64Reg dest, OpArg arg) {WriteSSEOp(32, 0x15, true, dest void XEmitter::UNPCKLPD(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0x14, true, dest, arg);} void XEmitter::UNPCKHPD(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0x15, true, dest, arg);} -void XEmitter::MOVDDUP(X64Reg regOp, OpArg arg) +void XEmitter::MOVDDUP(X64Reg regOp, OpArg arg) { if (cpu_info.bSSE3) { @@ -1444,6 +1492,13 @@ void XEmitter::PMOVMSKB(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0xD7, true, d void XEmitter::PSHUFLW(X64Reg regOp, OpArg arg, u8 shuffle) {WriteSSEOp(64, 0x70, false, regOp, arg, 1); Write8(shuffle);} +// VEX +void XEmitter::VADDSD(X64Reg regOp1, X64Reg regOp2, OpArg arg) {WriteAVXOp(64, sseADD, false, regOp1, regOp2, arg);} +void XEmitter::VSUBSD(X64Reg regOp1, X64Reg regOp2, OpArg arg) {WriteAVXOp(64, sseSUB, false, regOp1, regOp2, arg);} +void XEmitter::VMULSD(X64Reg regOp1, X64Reg regOp2, OpArg arg) {WriteAVXOp(64, sseMUL, false, regOp1, regOp2, arg);} +void XEmitter::VDIVSD(X64Reg regOp1, X64Reg regOp2, OpArg arg) {WriteAVXOp(64, sseDIV, false, regOp1, regOp2, arg);} +void XEmitter::VSQRTSD(X64Reg regOp1, X64Reg regOp2, OpArg arg) {WriteAVXOp(64, sseSQRT, false, regOp1, regOp2, arg);} + // Prefixes void XEmitter::LOCK() { Write8(0xF0); } @@ -1456,7 +1511,7 @@ void XEmitter::FWAIT() } void XEmitter::RTDSC() { Write8(0x0F); Write8(0x31); } - + // helper routines for setting pointers void XEmitter::CallCdeclFunction3(void* fnptr, u32 arg0, u32 arg1, u32 arg2) { diff --git a/Source/Core/Common/Src/x64Emitter.h b/Source/Core/Common/Src/x64Emitter.h index 94938b290a..87e76ef21a 100644 --- a/Source/Core/Common/Src/x64Emitter.h +++ b/Source/Core/Common/Src/x64Emitter.h @@ -17,7 +17,7 @@ enum X64Reg { EAX = 0, EBX = 3, ECX = 1, EDX = 2, ESI = 6, EDI = 7, EBP = 5, ESP = 4, - + RAX = 0, RBX = 3, RCX = 1, RDX = 2, RSI = 6, RDI = 7, RBP = 5, RSP = 4, R8 = 8, R9 = 9, R10 = 10,R11 = 11, @@ -30,9 +30,12 @@ enum X64Reg AX = 0, BX = 3, CX = 1, DX = 2, SI = 6, DI = 7, BP = 5, SP = 4, - XMM0=0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, + XMM0=0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, + YMM0=0, YMM1, YMM2, YMM3, YMM4, YMM5, YMM6, YMM7, + YMM8, YMM9, YMM10, YMM11, YMM12, YMM13, YMM14, YMM15, + INVALID_REG = 0xFFFFFFFF }; @@ -43,7 +46,7 @@ enum CCFlags CC_B = 2, CC_C = 2, CC_NAE = 2, CC_NB = 3, CC_NC = 3, CC_AE = 3, CC_Z = 4, CC_E = 4, - CC_NZ = 5, CC_NE = 5, + CC_NZ = 5, CC_NE = 5, CC_BE = 6, CC_NA = 6, CC_NBE = 7, CC_A = 7, CC_S = 8, @@ -111,6 +114,7 @@ struct OpArg offset = _offset; } void WriteRex(XEmitter *emit, int opBits, int bits, int customOp = -1) const; + void WriteVex(XEmitter* emit, int size, int packed, Gen::X64Reg regOp1, X64Reg regOp2) const; void WriteRest(XEmitter *emit, int extraBytes=0, X64Reg operandReg=(X64Reg)0xFF, bool warn_64bit_offset = true) const; void WriteSingleByteOp(XEmitter *emit, u8 op, X64Reg operandReg, int bits); // This one is public - must be written to @@ -239,6 +243,8 @@ private: void WriteBitTest(int bits, OpArg &dest, OpArg &index, int ext); void WriteMXCSR(OpArg arg, int ext); void WriteSSEOp(int size, u8 sseOp, bool packed, X64Reg regOp, OpArg arg, int extrabytes = 0); + void WriteAVXOp(int size, u8 sseOp, bool packed, X64Reg regOp, OpArg arg, int extrabytes = 0); + void WriteAVXOp(int size, u8 sseOp, bool packed, X64Reg regOp1, X64Reg regOp2, OpArg arg, int extrabytes = 0); void WriteNormalOp(XEmitter *emit, int bits, NormalOp op, const OpArg &a1, const OpArg &a2); protected: @@ -264,7 +270,7 @@ public: u8 *GetWritableCodePtr(); // Looking for one of these? It's BANNED!! Some instructions are slow on modern CPU - // INC, DEC, LOOP, LOOPNE, LOOPE, ENTER, LEAVE, XCHG, XLAT, REP MOVSB/MOVSD, REP SCASD + other string instr., + // INC, DEC, LOOP, LOOPNE, LOOPE, ENTER, LEAVE, XCHG, XLAT, REP MOVSB/MOVSD, REP SCASD + other string instr., // INC and DEC are slow on Intel Core, but not on AMD. They create a // false flag dependency because they only update a subset of the flags. // XCHG is SLOW and should be avoided. @@ -353,7 +359,7 @@ public: void DIV(int bits, OpArg src); void IDIV(int bits, OpArg src); - // Shift + // Shift void ROL(int bits, OpArg dest, OpArg shift); void ROR(int bits, OpArg dest, OpArg shift); void RCL(int bits, OpArg dest, OpArg shift); @@ -408,7 +414,7 @@ public: // Sign/zero extension void MOVSX(int dbits, int sbits, X64Reg dest, OpArg src); //automatically uses MOVSXD if necessary - void MOVZX(int dbits, int sbits, X64Reg dest, OpArg src); + void MOVZX(int dbits, int sbits, X64Reg dest, OpArg src); // WARNING - These two take 11-13 cycles and are VectorPath! (AMD64) void STMXCSR(OpArg memloc); @@ -422,40 +428,40 @@ public: void FWAIT(); // SSE/SSE2: Floating point arithmetic - void ADDSS(X64Reg regOp, OpArg arg); - void ADDSD(X64Reg regOp, OpArg arg); - void SUBSS(X64Reg regOp, OpArg arg); - void SUBSD(X64Reg regOp, OpArg arg); - void MULSS(X64Reg regOp, OpArg arg); - void MULSD(X64Reg regOp, OpArg arg); - void DIVSS(X64Reg regOp, OpArg arg); - void DIVSD(X64Reg regOp, OpArg arg); - void MINSS(X64Reg regOp, OpArg arg); - void MINSD(X64Reg regOp, OpArg arg); - void MAXSS(X64Reg regOp, OpArg arg); - void MAXSD(X64Reg regOp, OpArg arg); - void SQRTSS(X64Reg regOp, OpArg arg); - void SQRTSD(X64Reg regOp, OpArg arg); + void ADDSS(X64Reg regOp, OpArg arg); + void ADDSD(X64Reg regOp, OpArg arg); + void SUBSS(X64Reg regOp, OpArg arg); + void SUBSD(X64Reg regOp, OpArg arg); + void MULSS(X64Reg regOp, OpArg arg); + void MULSD(X64Reg regOp, OpArg arg); + void DIVSS(X64Reg regOp, OpArg arg); + void DIVSD(X64Reg regOp, OpArg arg); + void MINSS(X64Reg regOp, OpArg arg); + void MINSD(X64Reg regOp, OpArg arg); + void MAXSS(X64Reg regOp, OpArg arg); + void MAXSD(X64Reg regOp, OpArg arg); + void SQRTSS(X64Reg regOp, OpArg arg); + void SQRTSD(X64Reg regOp, OpArg arg); void RSQRTSS(X64Reg regOp, OpArg arg); // SSE/SSE2: Floating point bitwise (yes) - void CMPSS(X64Reg regOp, OpArg arg, u8 compare); - void CMPSD(X64Reg regOp, OpArg arg, u8 compare); - void ANDSS(X64Reg regOp, OpArg arg); - void ANDSD(X64Reg regOp, OpArg arg); - void ANDNSS(X64Reg regOp, OpArg arg); - void ANDNSD(X64Reg regOp, OpArg arg); - void ORSS(X64Reg regOp, OpArg arg); - void ORSD(X64Reg regOp, OpArg arg); - void XORSS(X64Reg regOp, OpArg arg); - void XORSD(X64Reg regOp, OpArg arg); + void CMPSS(X64Reg regOp, OpArg arg, u8 compare); + void CMPSD(X64Reg regOp, OpArg arg, u8 compare); + void ANDSS(X64Reg regOp, OpArg arg); + void ANDSD(X64Reg regOp, OpArg arg); + void ANDNSS(X64Reg regOp, OpArg arg); + void ANDNSD(X64Reg regOp, OpArg arg); + void ORSS(X64Reg regOp, OpArg arg); + void ORSD(X64Reg regOp, OpArg arg); + void XORSS(X64Reg regOp, OpArg arg); + void XORSD(X64Reg regOp, OpArg arg); // SSE/SSE2: Floating point packed arithmetic (x4 for float, x2 for double) - void ADDPS(X64Reg regOp, OpArg arg); - void ADDPD(X64Reg regOp, OpArg arg); - void SUBPS(X64Reg regOp, OpArg arg); - void SUBPD(X64Reg regOp, OpArg arg); - void CMPPS(X64Reg regOp, OpArg arg, u8 compare); + void ADDPS(X64Reg regOp, OpArg arg); + void ADDPD(X64Reg regOp, OpArg arg); + void SUBPS(X64Reg regOp, OpArg arg); + void SUBPD(X64Reg regOp, OpArg arg); + void CMPPS(X64Reg regOp, OpArg arg, u8 compare); void CMPPD(X64Reg regOp, OpArg arg, u8 compare); void MULPS(X64Reg regOp, OpArg arg); void MULPD(X64Reg regOp, OpArg arg); @@ -470,8 +476,8 @@ public: void RSQRTPS(X64Reg regOp, OpArg arg); // SSE/SSE2: Floating point packed bitwise (x4 for float, x2 for double) - void ANDPS(X64Reg regOp, OpArg arg); - void ANDPD(X64Reg regOp, OpArg arg); + void ANDPS(X64Reg regOp, OpArg arg); + void ANDPD(X64Reg regOp, OpArg arg); void ANDNPS(X64Reg regOp, OpArg arg); void ANDNPD(X64Reg regOp, OpArg arg); void ORPS(X64Reg regOp, OpArg arg); @@ -480,9 +486,9 @@ public: void XORPD(X64Reg regOp, OpArg arg); // SSE/SSE2: Shuffle components. These are tricky - see Intel documentation. - void SHUFPS(X64Reg regOp, OpArg arg, u8 shuffle); - void SHUFPD(X64Reg regOp, OpArg arg, u8 shuffle); - + void SHUFPS(X64Reg regOp, OpArg arg, u8 shuffle); + void SHUFPD(X64Reg regOp, OpArg arg, u8 shuffle); + // SSE/SSE2: Useful alternative to shuffle in some cases. void MOVDDUP(X64Reg regOp, OpArg arg); @@ -554,51 +560,51 @@ public: void PUNPCKLDQ(X64Reg dest, const OpArg &arg); void PAND(X64Reg dest, OpArg arg); - void PANDN(X64Reg dest, OpArg arg); - void PXOR(X64Reg dest, OpArg arg); - void POR(X64Reg dest, OpArg arg); + void PANDN(X64Reg dest, OpArg arg); + void PXOR(X64Reg dest, OpArg arg); + void POR(X64Reg dest, OpArg arg); void PADDB(X64Reg dest, OpArg arg); - void PADDW(X64Reg dest, OpArg arg); - void PADDD(X64Reg dest, OpArg arg); - void PADDQ(X64Reg dest, OpArg arg); + void PADDW(X64Reg dest, OpArg arg); + void PADDD(X64Reg dest, OpArg arg); + void PADDQ(X64Reg dest, OpArg arg); - void PADDSB(X64Reg dest, OpArg arg); - void PADDSW(X64Reg dest, OpArg arg); - void PADDUSB(X64Reg dest, OpArg arg); - void PADDUSW(X64Reg dest, OpArg arg); + void PADDSB(X64Reg dest, OpArg arg); + void PADDSW(X64Reg dest, OpArg arg); + void PADDUSB(X64Reg dest, OpArg arg); + void PADDUSW(X64Reg dest, OpArg arg); - void PSUBB(X64Reg dest, OpArg arg); - void PSUBW(X64Reg dest, OpArg arg); - void PSUBD(X64Reg dest, OpArg arg); - void PSUBQ(X64Reg dest, OpArg arg); + void PSUBB(X64Reg dest, OpArg arg); + void PSUBW(X64Reg dest, OpArg arg); + void PSUBD(X64Reg dest, OpArg arg); + void PSUBQ(X64Reg dest, OpArg arg); - void PSUBSB(X64Reg dest, OpArg arg); - void PSUBSW(X64Reg dest, OpArg arg); - void PSUBUSB(X64Reg dest, OpArg arg); - void PSUBUSW(X64Reg dest, OpArg arg); + void PSUBSB(X64Reg dest, OpArg arg); + void PSUBSW(X64Reg dest, OpArg arg); + void PSUBUSB(X64Reg dest, OpArg arg); + void PSUBUSW(X64Reg dest, OpArg arg); - void PAVGB(X64Reg dest, OpArg arg); - void PAVGW(X64Reg dest, OpArg arg); + void PAVGB(X64Reg dest, OpArg arg); + void PAVGW(X64Reg dest, OpArg arg); - void PCMPEQB(X64Reg dest, OpArg arg); - void PCMPEQW(X64Reg dest, OpArg arg); - void PCMPEQD(X64Reg dest, OpArg arg); + void PCMPEQB(X64Reg dest, OpArg arg); + void PCMPEQW(X64Reg dest, OpArg arg); + void PCMPEQD(X64Reg dest, OpArg arg); - void PCMPGTB(X64Reg dest, OpArg arg); - void PCMPGTW(X64Reg dest, OpArg arg); - void PCMPGTD(X64Reg dest, OpArg arg); + void PCMPGTB(X64Reg dest, OpArg arg); + void PCMPGTW(X64Reg dest, OpArg arg); + void PCMPGTD(X64Reg dest, OpArg arg); void PEXTRW(X64Reg dest, OpArg arg, u8 subreg); void PINSRW(X64Reg dest, OpArg arg, u8 subreg); - void PMADDWD(X64Reg dest, OpArg arg); - void PSADBW(X64Reg dest, OpArg arg); + void PMADDWD(X64Reg dest, OpArg arg); + void PSADBW(X64Reg dest, OpArg arg); - void PMAXSW(X64Reg dest, OpArg arg); - void PMAXUB(X64Reg dest, OpArg arg); - void PMINSW(X64Reg dest, OpArg arg); - void PMINUB(X64Reg dest, OpArg arg); + void PMAXSW(X64Reg dest, OpArg arg); + void PMAXUB(X64Reg dest, OpArg arg); + void PMINSW(X64Reg dest, OpArg arg); + void PMINUB(X64Reg dest, OpArg arg); void PMOVMSKB(X64Reg dest, OpArg arg); void PSHUFB(X64Reg dest, OpArg arg); @@ -616,6 +622,13 @@ public: void PSRAW(X64Reg reg, int shift); void PSRAD(X64Reg reg, int shift); + // AVX + void VADDSD(X64Reg regOp1, X64Reg regOp2, OpArg arg); + void VSUBSD(X64Reg regOp1, X64Reg regOp2, OpArg arg); + void VMULSD(X64Reg regOp1, X64Reg regOp2, OpArg arg); + void VDIVSD(X64Reg regOp1, X64Reg regOp2, OpArg arg); + void VSQRTSD(X64Reg regOp1, X64Reg regOp2, OpArg arg); + void RTDSC(); // Utility functions @@ -625,7 +638,7 @@ public: void ABI_CallFunctionC16(void *func, u16 param1); void ABI_CallFunctionCC16(void *func, u32 param1, u16 param2); - + // These only support u32 parameters, but that's enough for a lot of uses. // These will destroy the 1 or 2 first "parameter regs". void ABI_CallFunctionC(void *func, u32 param1); @@ -666,12 +679,12 @@ public: void CallCdeclFunction5(void* fnptr, u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4); void CallCdeclFunction6(void* fnptr, u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4, u32 arg5); -#if defined(_M_IX86) +#if defined(_M_IX86) #define CallCdeclFunction3_I(a,b,c,d) CallCdeclFunction3((void *)(a), (b), (c), (d)) - #define CallCdeclFunction4_I(a,b,c,d,e) CallCdeclFunction4((void *)(a), (b), (c), (d), (e)) - #define CallCdeclFunction5_I(a,b,c,d,e,f) CallCdeclFunction5((void *)(a), (b), (c), (d), (e), (f)) - #define CallCdeclFunction6_I(a,b,c,d,e,f,g) CallCdeclFunction6((void *)(a), (b), (c), (d), (e), (f), (g)) + #define CallCdeclFunction4_I(a,b,c,d,e) CallCdeclFunction4((void *)(a), (b), (c), (d), (e)) + #define CallCdeclFunction5_I(a,b,c,d,e,f) CallCdeclFunction5((void *)(a), (b), (c), (d), (e), (f)) + #define CallCdeclFunction6_I(a,b,c,d,e,f,g) CallCdeclFunction6((void *)(a), (b), (c), (d), (e), (f), (g)) #define DECLARE_IMPORT(x) @@ -722,7 +735,7 @@ public: // Always clear code space with breakpoints, so that if someone accidentally executes // uninitialized, it just breaks into the debugger. - void ClearCodeSpace() + void ClearCodeSpace() { // x86/64: 0xCC = breakpoint memset(region, 0xCC, region_size); diff --git a/Source/Core/Common/Src/x64FPURoundMode.cpp b/Source/Core/Common/Src/x64FPURoundMode.cpp index 0a2dc3acb5..2c950ade96 100644 --- a/Source/Core/Common/Src/x64FPURoundMode.cpp +++ b/Source/Core/Common/Src/x64FPURoundMode.cpp @@ -30,7 +30,7 @@ namespace FPURoundMode #ifdef _M_IX86 // This shouldn't really be needed anymore since we use SSE #ifdef _WIN32 - const int table[4] = + const int table[4] = { _RC_NEAR, _RC_CHOP, @@ -39,7 +39,7 @@ namespace FPURoundMode }; _set_controlfp(_MCW_RC, table[mode]); #else - const unsigned short table[4] = + const unsigned short table[4] = { FPU_ROUND_NEAR, FPU_ROUND_CHOP, @@ -81,7 +81,7 @@ namespace FPURoundMode } void SetSIMDMode(u32 mode) { - static const u32 ssetable[4] = + static const u32 ssetable[4] = { (0 << 13) | MASKS, (3 << 13) | MASKS, diff --git a/Source/Core/Common/make_scmrev.h.js b/Source/Core/Common/make_scmrev.h.js index f2978987dc..75a3d8cf08 100644 --- a/Source/Core/Common/make_scmrev.h.js +++ b/Source/Core/Common/make_scmrev.h.js @@ -8,7 +8,7 @@ var cmd_branch = " rev-parse --abbrev-ref HEAD"; function GetGitExe() { - for (var gitexe in {"git.cmd":1, "git":1}) + for (var gitexe in {"git.cmd":1, "git":1, "git.bat":1}) { try { diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj index 134c228ff0..0bc3738219 100644 --- a/Source/Core/Core/Core.vcxproj +++ b/Source/Core/Core/Core.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,172 +19,29 @@ - {8C60E805-0DA5-4E25-8F84-038DB504BB0D} - Core + {E54CF649-140E-4255-81A5-30A673C1FB36} - + + StaticLibrary + v120 + Unicode + + true - StaticLibrary - Unicode - - true - StaticLibrary - Unicode - - + false - StaticLibrary - Unicode - - - StaticLibrary - false - Unicode - - - false - StaticLibrary - Unicode - - - StaticLibrary - false - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .\Src;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\DiscIO\Src;..\InputCommon\Src;..\wiiuse\Src;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\SFML\include;..\..\..\Externals\LZO;..\..\..\Externals\portaudio\include;..\..\..\Externals\zlib;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;..\..\..\Externals\libusbx\libusb;%(AdditionalIncludeDirectories) - - - true - - - - - - - - - .\Src;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\DiscIO\Src;..\InputCommon\Src;..\wiiuse\Src;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\SFML\include;..\..\..\Externals\LZO;..\..\..\Externals\portaudio\include;..\..\..\Externals\zlib;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;..\..\..\Externals\libusbx\libusb;%(AdditionalIncludeDirectories) - - - true - - - - - - - - - .\Src;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\DiscIO\Src;..\InputCommon\Src;..\wiiuse\Src;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\SFML\include;..\..\..\Externals\LZO;..\..\..\Externals\portaudio\include;..\..\..\Externals\zlib;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;..\..\..\Externals\libusbx\libusb;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - - - - .\Src;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\DiscIO\Src;..\InputCommon\Src;..\wiiuse\Src;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\SFML\include;..\..\..\Externals\LZO;..\..\..\Externals\portaudio\include;..\..\..\Externals\zlib;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;..\..\..\Externals\libusbx\libusb;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - - - - .\Src;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\DiscIO\Src;..\InputCommon\Src;..\wiiuse\Src;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\SFML\include;..\..\..\Externals\LZO;..\..\..\Externals\portaudio\include;..\..\..\Externals\zlib;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;..\..\..\Externals\libusbx\libusb;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - - - - .\Src;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\DiscIO\Src;..\InputCommon\Src;..\wiiuse\Src;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\SFML\include;..\..\..\Externals\LZO;..\..\..\Externals\portaudio\include;..\..\..\Externals\zlib;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;..\..\..\Externals\libusbx\libusb;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - @@ -211,6 +60,7 @@ + @@ -240,9 +90,10 @@ + - + @@ -336,13 +187,10 @@ - - - @@ -391,21 +239,13 @@ - - false - false - false - + - Create - Create - Create - Create - Create - Create + Create + @@ -414,6 +254,7 @@ + @@ -425,6 +266,7 @@ + @@ -446,13 +288,14 @@ + - + - + @@ -527,8 +370,8 @@ - + @@ -540,8 +383,8 @@ - + @@ -552,9 +395,7 @@ - - @@ -589,24 +430,44 @@ - - + - {cd3d4c3c-1027-4d33-b047-aec7b56d0bf6} + {8ada04d7-6db1-4da4-ab55-64fb12a0997b} + + + {349ee8f9-7d25-4909-aaf5-ff3fade72187} + + + {ab993f38-c31d-4897-b139-a620c42bc565} + + + {bdb6578b-0691-4e80-a46c-df21639fd3b8} + + + {0a18a071-125e-442f-aff7-a3f68abecf99} + + + {93d73454-2512-424e-9cda-4bb357fe13dd} - {37d007bd-d66c-4eaf-b56c-bd1aac340a05} + {54aa7840-5beb-4a0c-9452-74ba4cc7fd44} - {c87a4178-44f6-49b2-b7aa-c79af1b8c534} + {2e6c348c-c75c-4d94-8d1e-9c1fcbf3efe4} + + + {41279555-f94f-4ebc-99de-af863c10c5c4} - {b6398059-ebb6-4c34-b547-95f365b71ff4} + {160bdc25-5626-4b0d-bdd8-2953d9777fb5} + + + {6bbd47cf-91fd-4077-b676-8b76980178a9} - {3e5c4e02-1ba9-4776-bdbe-e3f91ffa34cf} + {3de9ee35-3e91-4f27-a014-2866ad8c3fe3} diff --git a/Source/Core/Core/Core.vcxproj.filters b/Source/Core/Core/Core.vcxproj.filters index 148b88fa91..97364678a4 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -1,18 +1,158 @@  + + {e0d231ab-7a66-45ce-a8e4-c0225308f763} + + + {2472fb36-5473-4d49-ad2d-3699b78ab6e2} + + + {ed683a12-55f0-49cb-918b-c7edbcf57268} + + + {35594696-15a6-44cb-b811-04e3195eecf5} + + + {659f0a99-77cf-46a0-a7a3-95afdd99be72} + + + {c1c76a12-b4f3-4a46-84e6-e11980b2e997} + + + {256586c3-3a1b-4d7b-9f4a-2f7ffac9d23e} + + + {d060b137-c211-44eb-9cad-fc12dedbea73} + + + {becbad5b-2531-410c-b032-2da2f078b178} + + + {ebd24590-dfdc-433e-a411-21723e4b7cb5} + + + {523f8d77-4aa6-4762-8f27-96f02b5070b4} + + + {c67be826-2935-4d25-a213-e132fa2e63ef} + + + {c88ec388-371f-4401-851c-a32dcdc0b88b} + + + {f26d3866-92d1-4623-9445-caf9a065ed74} + + + {6204f663-bbd0-4eb5-bc15-e3778d8b6091} + + + {7042fb6f-9284-4469-bc7c-9302e0d984aa} + + + {d657188a-426d-46c8-af0a-caa148c6ed1b} + + + {2832269e-5c7d-47f8-b212-afcd9145e427} + + + {9a10faaa-40c3-446c-81b6-5fc7a79d5329} + + + {7a29a81c-1fee-4e5b-bfe1-5f941837bdc9} + + + {0eecffe7-f680-4d21-a05f-2f12c8244833} + + + {9fcd7c03-c4be-477b-9c15-5f096ab9d0f6} + + + {69d8dcb1-f22b-47af-b1e4-f700b1a42e77} + + + {079f3720-45c8-4c54-8589-b7d00a8bc1ac} + + + {bc3e845a-3d01-4713-aa32-f27110838d0c} + + + {cdbd65da-541f-47d2-8fdc-e99e73e98e69} + + + {d19f1218-0e28-4f24-a4b3-33fac750a899} + + + {d7b3050d-3dd9-4284-969c-c5ad3b3662d9} + + + {15452851-6ca5-4520-bbf1-d4b810317be2} + + + {2ef543bc-8125-4b96-9627-6d8c15a5b36a} + + + {dea96a0c-0274-4c9f-915e-97472e7f4578} + + + {9fbdb5b5-9179-4488-b0bf-75c1ccdb3a61} + + + {11385524-b10b-419b-8390-710791c53550} + + + {fa27e799-34c8-440a-9de3-6720df6022e7} + + + {a6444fcf-11b7-42d3-859f-cfe23fe83e9d} + + + {2b41ab45-ba8c-45dc-92cc-9107c1fa3e36} + + + {9370a21f-a7bf-4973-8258-290253617653} + + + {3f85582a-e612-4582-b0fa-ecc27ba3658c} + + + {1f5662c1-885f-4ed4-9f10-cc8e98eaa35d} + + + {1fb00563-01ba-42c4-82de-2c66371e614a} + + + {4620ba8f-5638-4d56-941e-69fc4a4dfc07} + + + {83c278e5-6b06-4cd0-96fb-2e3c88eb32d7} + + + {4a090016-76d5-43dd-95a4-abedfc11ef31} + + + {8352be4d-d37d-4f55-adec-b940a9712802} + + + {827afa93-1a80-4835-93ae-b5516d95867f} + + + + - + + + + - - + ActionReplay @@ -46,71 +186,77 @@ Debugger - - DSPCore\JIT + + DSPCore\Interpreter - - DSPCore\JIT + + DSPCore\Interpreter - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore + + DSPCore\Interpreter - DSPCore + DSPCore\Interpreter - - DSPCore + + DSPCore\Interpreter - - DSPCore + + DSPCore\Interpreter - - DSPCore + + DSPCore\Interpreter - - DSPCore + + DSPCore\Interpreter + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + DSPCore\Jit + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer GeckoCode @@ -127,68 +273,47 @@ HLE - - DSPCore\Interpreter + + PowerPC\Interpreter - - DSPCore\Interpreter + + PowerPC\Interpreter - - DSPCore\Interpreter + + PowerPC\Interpreter - - DSPCore\Interpreter + + PowerPC\Interpreter - - DSPCore\Interpreter + + PowerPC\Interpreter - - DSPCore\Interpreter + + PowerPC\Interpreter - - DSPCore\Interpreter + + PowerPC\Interpreter - - HW %28Flipper/Hollywood%29\GCPad + + PowerPC\Interpreter - - HW %28Flipper/Hollywood%29\GCPad + + PowerPC\Interpreter - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + PowerPC\Jit64 - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + PowerPC\Jit64 - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + HW %28Flipper/Hollywood%29\AI - Audio Interface - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + HW %28Flipper/Hollywood%29\AI - Audio Interface - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + HW %28Flipper/Hollywood%29\DI - Drive Interface HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes @@ -232,9 +357,6 @@ HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE - - HW %28Flipper/Hollywood%29\DSP Interface + HLE - HW %28Flipper/Hollywood%29\DSP Interface + HLE\LLE @@ -253,6 +375,54 @@ HW %28Flipper/Hollywood%29\DSP Interface + HLE\LLE + + HW %28Flipper/Hollywood%29\DSP Interface + HLE + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\GCMemcard + + + HW %28Flipper/Hollywood%29\GCPad + + + HW %28Flipper/Hollywood%29\GCPad + HW %28Flipper/Hollywood%29\GP - Gather Pipe Fifo @@ -262,15 +432,6 @@ HW %28Flipper/Hollywood%29\PI - Processor Interface - - HW %28Flipper/Hollywood%29\AI - Audio Interface - - - HW %28Flipper/Hollywood%29\AI - Audio Interface - - - HW %28Flipper/Hollywood%29\DI - Drive Interface - HW %28Flipper/Hollywood%29\SI - Serial Interface @@ -280,6 +441,9 @@ HW %28Flipper/Hollywood%29\SI - Serial Interface + + HW %28Flipper/Hollywood%29\SI - Serial Interface + HW %28Flipper/Hollywood%29\SI - Serial Interface @@ -289,180 +453,9 @@ HW %28Flipper/Hollywood%29\SI - Serial Interface - - HW %28Flipper/Hollywood%29\SI - Serial Interface - HW %28Flipper/Hollywood%29\VI - Video Interface - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - HW %28Flipper/Hollywood%29 - - - HW %28Flipper/Hollywood%29 - - - HW %28Flipper/Hollywood%29 - - - HW %28Flipper/Hollywood%29 - - - HW %28Flipper/Hollywood%29 - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - IPC HLE %28IOS/Starlet%29 - - - IPC HLE %28IOS/Starlet%29\DI - Drive Interface - - - IPC HLE %28IOS/Starlet%29\ES - - - IPC HLE %28IOS/Starlet%29\FS - - - IPC HLE %28IOS/Starlet%29\FS - - - IPC HLE %28IOS/Starlet%29\Keyboard - - - IPC HLE %28IOS/Starlet%29\Net - - - IPC HLE %28IOS/Starlet%29\SDIO - SD Card - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - HW %28Flipper/Hollywood%29\Wii IPC - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - HW %28Flipper/Hollywood%29\Wii IO Bridge - HW %28Flipper/Hollywood%29\Wiimote\Emu\Attachment @@ -493,78 +486,224 @@ HW %28Flipper/Hollywood%29\Wiimote\Emu - - HW %28Flipper/Hollywood%29\Wiimote\Real - HW %28Flipper/Hollywood%29\Wiimote\Real - - HW %28Flipper/Hollywood%29\Wiimote + + HW %28Flipper/Hollywood%29\Wiimote\Real - - - FifoPlayer + + HW %28Flipper/Hollywood%29\Wii IO Bridge + + + HW %28Flipper/Hollywood%29\Wii IPC + + + HW %28Flipper/Hollywood%29 + + + HW %28Flipper/Hollywood%29 + + + HW %28Flipper/Hollywood%29 + + + HW %28Flipper/Hollywood%29 + + + HW %28Flipper/Hollywood%29 + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + IPC HLE %28IOS/Starlet%29 + + + IPC HLE %28IOS/Starlet%29\DI + + + IPC HLE %28IOS/Starlet%29\ES + + + IPC HLE %28IOS/Starlet%29\FS + + + IPC HLE %28IOS/Starlet%29\FS + + + IPC HLE %28IOS/Starlet%29\Keyboard + + + IPC HLE %28IOS/Starlet%29\Net + + + IPC HLE %28IOS/Starlet%29\Net IPC HLE %28IOS/Starlet%29\Net - - FifoPlayer - - - FifoPlayer - - - FifoPlayer - - - FifoPlayer - - - FifoPlayer - - - - HW %28Flipper/Hollywood%29\GCMemcard - - - PowerPC - - - - + IPC HLE %28IOS/Starlet%29\Net + + IPC HLE %28IOS/Starlet%29\SDIO - SD Card + IPC HLE %28IOS/Starlet%29\USB - - - IPC HLE %28IOS/Starlet%29\Net + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - PowerPC\JitILCommon + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - PowerPC\JitILCommon + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - PowerPC\JitILCommon + + HW %28Flipper/Hollywood%29\Wiimote - - PowerPC\JitILCommon + + PowerPC - + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + + PowerPC\JitILCommon PowerPC\JitILCommon - + PowerPC\JitILCommon - + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + + PowerPC\JitILCommon + + PowerPC\JitILCommon @@ -572,23 +711,27 @@ + + + + + + - - - + ActionReplay - + ActionReplay @@ -600,12 +743,15 @@ Boot - + Boot Boot + + Boot + Debugger @@ -618,65 +764,53 @@ Debugger - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore\JIT - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore - - - DSPCore + + DSPCore\Interpreter - DSPCore + DSPCore\Interpreter - - DSPCore + + DSPCore\Interpreter - - DSPCore + + DSPCore\Interpreter - - DSPCore + + DSPCore\Jit - - DSPCore + + DSPCore\Jit - - GeckoCode + + DSPCore\Jit + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer + + + FifoPlayer GeckoCode - - HLE + + GeckoCode HLE @@ -684,59 +818,32 @@ HLE - - DSPCore\Interpreter + + HLE - - DSPCore\Interpreter + + PowerPC\Interpreter - - DSPCore\Interpreter + + PowerPC\Interpreter - - HW %28Flipper/Hollywood%29\GCPad + + PowerPC\Interpreter - - HW %28Flipper/Hollywood%29\GCPad + + PowerPC\Jit64 - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + PowerPC\Jit64 - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + HW %28Flipper/Hollywood%29\AI - Audio Interface - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + HW %28Flipper/Hollywood%29\AI - Audio Interface - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\EXI - Expansion Interface - - - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes + + HW %28Flipper/Hollywood%29\DI - Drive Interface HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes @@ -765,6 +872,9 @@ HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes + + HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes + HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE @@ -774,13 +884,10 @@ HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE - - HW %28Flipper/Hollywood%29\DSP Interface + HLE - - + HW %28Flipper/Hollywood%29\DSP Interface + HLE\LLE - + HW %28Flipper/Hollywood%29\DSP Interface + HLE\LLE @@ -795,6 +902,54 @@ HW %28Flipper/Hollywood%29\DSP Interface + HLE\LLE + + HW %28Flipper/Hollywood%29\DSP Interface + HLE + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\EXI - Expansion Interface + + + HW %28Flipper/Hollywood%29\GCMemcard + + + HW %28Flipper/Hollywood%29\GCPad + + + HW %28Flipper/Hollywood%29\GCPad + HW %28Flipper/Hollywood%29\GP - Gather Pipe Fifo @@ -804,24 +959,6 @@ HW %28Flipper/Hollywood%29\PI - Processor Interface - - HW %28Flipper/Hollywood%29\AI - Audio Interface - - - HW %28Flipper/Hollywood%29\AI - Audio Interface - - - HW %28Flipper/Hollywood%29\DI - Drive Interface - - - HW %28Flipper/Hollywood%29\SI - Serial Interface - - - HW %28Flipper/Hollywood%29\SI - Serial Interface - - - HW %28Flipper/Hollywood%29\SI - Serial Interface - HW %28Flipper/Hollywood%29\SI - Serial Interface @@ -831,151 +968,25 @@ HW %28Flipper/Hollywood%29\SI - Serial Interface + + HW %28Flipper/Hollywood%29\SI - Serial Interface + HW %28Flipper/Hollywood%29\SI - Serial Interface + + HW %28Flipper/Hollywood%29\SI - Serial Interface + + + HW %28Flipper/Hollywood%29\SI - Serial Interface + HW %28Flipper/Hollywood%29\VI - Video Interface - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\Interpreter - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\JitCommon - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\Jit64 - - - PowerPC\JitIL - - - PowerPC\JitIL - - - PowerPC\JitIL - - - HW %28Flipper/Hollywood%29 - - - HW %28Flipper/Hollywood%29 - - - HW %28Flipper/Hollywood%29 - - - HW %28Flipper/Hollywood%29 - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - PowerPC - - - IPC HLE %28IOS/Starlet%29 - - - IPC HLE %28IOS/Starlet%29 - - - IPC HLE %28IOS/Starlet%29 - - - IPC HLE %28IOS/Starlet%29\DI - Drive Interface - - - IPC HLE %28IOS/Starlet%29\ES - - - IPC HLE %28IOS/Starlet%29\FS - - - IPC HLE %28IOS/Starlet%29\FS - - - IPC HLE %28IOS/Starlet%29\Keyboard - - - IPC HLE %28IOS/Starlet%29\Net - - - IPC HLE %28IOS/Starlet%29\SDIO - SD Card - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - HW %28Flipper/Hollywood%29\Wii IPC - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote - - - HW %28Flipper/Hollywood%29\Wii IO Bridge - - + HW %28Flipper/Hollywood%29\Wiimote\Emu\Attachment - + HW %28Flipper/Hollywood%29\Wiimote\Emu\Attachment @@ -1005,52 +1016,95 @@ HW %28Flipper/Hollywood%29\Wiimote\Emu - - HW %28Flipper/Hollywood%29\Wiimote\Real - HW %28Flipper/Hollywood%29\Wiimote\Real - - HW %28Flipper/Hollywood%29\Wiimote + + HW %28Flipper/Hollywood%29\Wiimote\Real - - PowerPC + + HW %28Flipper/Hollywood%29\Wii IO Bridge - - - FifoPlayer + + HW %28Flipper/Hollywood%29\Wii IPC - - FifoPlayer + + HW %28Flipper/Hollywood%29 - - FifoPlayer + + HW %28Flipper/Hollywood%29 - - FifoPlayer + + HW %28Flipper/Hollywood%29 - - FifoPlayer + + HW %28Flipper/Hollywood%29 - - FifoPlayer + + DSPCore - - FifoPlayer + + DSPCore - - - HW %28Flipper/Hollywood%29\GCMemcard + + DSPCore - - PowerPC + + DSPCore - - - - - IPC HLE %28IOS/Starlet%29\Net + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + DSPCore + + + IPC HLE %28IOS/Starlet%29 + + + IPC HLE %28IOS/Starlet%29 + + + IPC HLE %28IOS/Starlet%29 + + + IPC HLE %28IOS/Starlet%29\DI + + + IPC HLE %28IOS/Starlet%29\ES + + + IPC HLE %28IOS/Starlet%29\FS + + + IPC HLE %28IOS/Starlet%29\FS + + + IPC HLE %28IOS/Starlet%29\Keyboard IPC HLE %28IOS/Starlet%29\Net @@ -1058,13 +1112,103 @@ IPC HLE %28IOS/Starlet%29\Net - - IPC HLE %28IOS/Starlet%29\USB + + IPC HLE %28IOS/Starlet%29\Net + + + IPC HLE %28IOS/Starlet%29\Net - IPC HLE %28IOS/Starlet%29\Net + + IPC HLE %28IOS/Starlet%29\SDIO - SD Card + + + IPC HLE %28IOS/Starlet%29\USB + + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote + + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote + + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote + + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote + + + IPC HLE %28IOS/Starlet%29\USB/BT/Wiimote + + + HW %28Flipper/Hollywood%29\Wiimote + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitCommon + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\JitIL + + + PowerPC\Jit64 + + + PowerPC\Jit64 + + PowerPC\JitILCommon @@ -1073,146 +1217,6 @@ - - - HW %28Flipper/Hollywood%29\DSP Interface + HLE\HLE\uCodes - - - - - {c871a264-a881-44f2-88b1-406b282cd9fe} - - - {0fe14029-e862-44b4-9358-d1cd44e42454} - - - {fba97574-484f-4330-9674-69c0aeffd22f} - - - {684ba5fe-ccca-4d1b-94fa-3a2119353257} - - - {67aea903-7a27-4b1e-a4af-60f58818ba58} - - - {81d2e0cb-4bea-47ed-9bc3-fdc461ea4148} - - - {6aa99e27-bf15-43dc-8f14-c80383037a99} - - - {45a9bf0a-e022-4ace-a99f-df675a0b251d} - - - {1905e5c1-a593-454d-b0a0-68bf6cdbec12} - - - {57e4ab87-a563-40c5-9a3d-6b5443750a96} - - - {1f8821ba-2dde-4b1a-9125-5f74006b1053} - - - {02777c32-ac14-4a06-9006-8ffc370bc231} - - - {0201c158-1162-48d8-b6d4-239d8202d200} - - - {21df1345-8145-4179-8cf5-a26b6887de5d} - - - {b34c5e25-c21d-401b-9b21-990f1a7908e1} - - - {b948ee86-1471-42b2-ab6f-ca0ce1c9e4d6} - - - {a25bdd3e-b989-4c5b-b56c-2f37ab4972c7} - - - {1966cfa5-57f3-4fdb-8d32-d34f033903af} - - - {43f6de5c-946b-426d-9735-b774c3365ae4} - - - {9f00a3b5-c0f3-4a3f-a756-25435ea996e1} - - - {decdd68e-4e41-4589-bc13-5318705e2f94} - - - {e88d682e-a0c2-438d-9283-ab1ec250d3ae} - - - {36465b2e-d5c4-402c-abff-ed04c84a1566} - - - {b7771463-73bf-457b-891f-9dcaa04076ea} - - - {e34c8a58-7799-4afe-b0f9-1c5ff759639b} - - - {2ee04eb4-0d32-4e15-bd0e-811d408de20c} - - - {808c3dc1-5fec-4565-8c2e-fa7e1232a31c} - - - {ef5b78c3-47ec-4bd6-9809-f9e7da6e0861} - - - {49635c9b-0874-4e71-9165-edaae632ab1c} - - - {e2711d6f-b5f5-4c74-97c2-66f9620a2d86} - - - {1be114bb-c572-4cdb-9650-4d24d282d4bb} - - - {ff0e9f64-a636-4998-8cae-fe122c8da934} - - - {30eda257-4d78-4db7-873e-c408db52d772} - - - {ed6f41bf-4f52-402b-ab1d-d5bf9e71c538} - - - {362606ce-fa05-4829-831f-bf9e0acf9909} - - - {ebe09d6a-7cd0-4909-83e9-abafd3e8571f} - - - {e7c723c0-693a-4cf8-973a-b349537adcc7} - - - {0ab9fa49-fd0b-4eba-aa9f-2b774baa8e63} - - - {c53079fe-d19c-4492-b37e-bf8bd4f55fa8} - - - {565ae8e7-ae6e-42f9-ae13-90c1aa017856} - - - {1c21a3e1-b791-4a23-b0d5-ed2b2c34007f} - - - {ca7d56f7-4e84-4d15-9aea-7ae6fa7d6586} - - - {3e9e6e83-c1bf-45f9-aeff-231f98f60d29} - - - {321a9af5-9b3d-4620-888c-fe9d02e9559e} - - - {658f0a72-5b08-4241-9c01-31cdc4ab7057} - + \ No newline at end of file diff --git a/Source/Core/Core/Src/ActionReplay.cpp b/Source/Core/Core/Src/ActionReplay.cpp index 771ef5700b..e07f297e09 100644 --- a/Source/Core/Core/Src/ActionReplay.cpp +++ b/Source/Core/Core/Src/ActionReplay.cpp @@ -38,13 +38,13 @@ enum { // Zero Code Types ZCODE_END = 0x00, - ZCODE_NORM = 0x02, - ZCODE_ROW = 0x03, + ZCODE_NORM = 0x02, + ZCODE_ROW = 0x03, ZCODE_04 = 0x04, // Conditional Codes CONDTIONAL_EQUAL = 0x01, - CONDTIONAL_NOT_EQUAL = 0x02, + CONDTIONAL_NOT_EQUAL = 0x02, CONDTIONAL_LESS_THAN_SIGNED = 0x03, CONDTIONAL_GREATER_THAN_SIGNED = 0x04, CONDTIONAL_LESS_THAN_UNSIGNED = 0x05, @@ -59,14 +59,14 @@ enum // Data Types DATATYPE_8BIT = 0x00, - DATATYPE_16BIT = 0x01, - DATATYPE_32BIT = 0x02, + DATATYPE_16BIT = 0x01, + DATATYPE_32BIT = 0x02, DATATYPE_32BIT_FLOAT = 0x03, // Normal Code 0 Subtypes SUB_RAM_WRITE = 0x00, - SUB_WRITE_POINTER = 0x01, - SUB_ADD_CODE = 0x02, + SUB_WRITE_POINTER = 0x01, + SUB_ADD_CODE = 0x02, SUB_MASTER_CODE = 0x03, }; @@ -114,8 +114,8 @@ bool CompareValues(const u32 val1, const u32 val2, const int type); void LoadCodes(IniFile &globalIni, IniFile &localIni, bool forceLoad) { // Parses the Action Replay section of a game ini file. - if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats - && !forceLoad) + if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats + && !forceLoad) return; arCodes.clear(); @@ -123,9 +123,8 @@ void LoadCodes(IniFile &globalIni, IniFile &localIni, bool forceLoad) std::vector enabledLines; std::set enabledNames; localIni.GetLines("ActionReplay_Enabled", enabledLines); - for (auto iter = enabledLines.begin(); iter != enabledLines.end(); ++iter) + for (auto& line : enabledLines) { - const std::string& line = *iter; if (line.size() != 0 && line[0] == '$') { std::string name = line.substr(1, line.size() - 1); @@ -139,7 +138,7 @@ void LoadCodes(IniFile &globalIni, IniFile &localIni, bool forceLoad) std::vector lines; std::vector encryptedLines; ARCode currentCode; - + inis[i]->GetLines("ActionReplay", lines); std::vector::const_iterator @@ -148,7 +147,7 @@ void LoadCodes(IniFile &globalIni, IniFile &localIni, bool forceLoad) for (; it != lines_end; ++it) { const std::string line = *it; - + if (line.empty()) continue; @@ -197,7 +196,7 @@ void LoadCodes(IniFile &globalIni, IniFile &localIni, bool forceLoad) else { SplitString(line, '-', pieces); - if (pieces.size() == 3 && pieces[0].size() == 4 && pieces[1].size() == 4 && pieces[2].size() == 5) + if (pieces.size() == 3 && pieces[0].size() == 4 && pieces[1].size() == 4 && pieces[2].size() == 5) { // Encrypted AR code // Decryption is done in "blocks", so we must push blocks into a vector, @@ -232,7 +231,7 @@ void LoadCodes(std::vector &_arCodes, IniFile &globalIni, IniFile& local void LogInfo(const char *format, ...) { - if (!b_RanOnce) + if (!b_RanOnce) { if (LogManager::GetMaxLevel() >= LogTypes::LINFO || logSelf) { @@ -258,11 +257,11 @@ void RunAllActive() { if (SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats) { - for (std::vector::iterator i = activeCodes.begin(); i != activeCodes.end(); ++i) + for (auto& activeCode : activeCodes) { - if (i->active) + if (activeCode.active) { - i->active = RunCode(*i); + activeCode.active = RunCode(activeCode); LogInfo("\n"); } } @@ -320,7 +319,7 @@ bool RunCode(const ARCode &arcode) continue; } - + LogInfo("--- Running Code: %08x %08x ---", addr.address, data); //LogInfo("Command: %08x", cmd); @@ -391,7 +390,7 @@ bool RunCode(const ARCode &arcode) doMemoryCopy = true; val_last = data; } - else + else { LogInfo("ZCode: Fill And Slide"); doFillNSlide = true; @@ -399,9 +398,9 @@ bool RunCode(const ARCode &arcode) } break; - default: + default: LogInfo("ZCode: Unknown"); - PanicAlertT("Zero code unknown to dolphin: %08x", zcode); + PanicAlertT("Zero code unknown to dolphin: %08x", zcode); return false; break; } @@ -420,7 +419,7 @@ bool RunCode(const ARCode &arcode) if (false == NormalCode(addr, data)) return false; break; - + default: LogInfo("This Normal Code is a Conditional Code"); if (false == ConditionalCode(addr, data, &skip_count)) @@ -467,10 +466,10 @@ void UpdateActiveList() SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats = false; b_RanOnce = false; activeCodes.clear(); - for (size_t i = 0; i < arCodes.size(); i++) + for (auto& arCode : arCodes) { - if (arCodes[i].active) - activeCodes.push_back(arCodes[i]); + if (arCode.active) + activeCodes.push_back(arCode); } SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats = old_value; } @@ -688,7 +687,7 @@ bool ZeroCode_FillAndSlide(const u32 val_last, const ARAddr addr, const u32 data const s16 addr_incr = (s16)(data & 0xFFFF); const s8 val_incr = (s8)(data >> 24); const u8 write_num = (data & 0xFF0000) >> 16; - + u32 val = addr; u32 curr_addr = new_addr; @@ -703,7 +702,7 @@ bool ZeroCode_FillAndSlide(const u32 val_last, const ARAddr addr, const u32 data case DATATYPE_8BIT: LogInfo("8-bit Write"); LogInfo("--------"); - for (int i = 0; i < write_num; ++i) + for (int i = 0; i < write_num; ++i) { Memory::Write_U8(val & 0xFF, curr_addr); curr_addr += addr_incr; @@ -767,7 +766,7 @@ bool ZeroCode_MemoryCopy(const u32 val_last, const ARAddr addr, const u32 data) LogInfo("Size: %08x", num_bytes); if ((data & ~0x7FFF) == 0x0000) - { + { if ((data >> 24) != 0x0) { // Memory Copy With Pointers Support LogInfo("Memory Copy With Pointers Support"); diff --git a/Source/Core/Core/Src/ArmMemTools.cpp b/Source/Core/Core/Src/ArmMemTools.cpp index d2c003060f..262c59fc53 100644 --- a/Source/Core/Core/Src/ArmMemTools.cpp +++ b/Source/Core/Core/Src/ArmMemTools.cpp @@ -66,7 +66,7 @@ void sigsegv_handler(int signal, siginfo_t *info, void *raw_context) void *fault_memory_ptr = (void*)ctx->arm_r10; u8 *fault_instruction_ptr = (u8 *)ctx->arm_pc; - + if (!JitInterface::IsInCodeSpace(fault_instruction_ptr)) { // Let's not prevent debugging. return; diff --git a/Source/Core/Core/Src/Boot/Boot.cpp b/Source/Core/Core/Src/Boot/Boot.cpp index dc4daec2a9..7691421623 100644 --- a/Source/Core/Core/Src/Boot/Boot.cpp +++ b/Source/Core/Core/Src/Boot/Boot.cpp @@ -41,11 +41,11 @@ void CBoot::Load_FST(bool _bIsWii) return; // copy first 20 bytes of disc to start of Mem 1 - VolumeHandler::ReadToPtr(Memory::GetPointer(0x80000000), 0, 0x20); + VolumeHandler::ReadToPtr(Memory::GetPointer(0x80000000), 0, 0x20); // copy of game id Memory::Write_U32(Memory::Read_U32(0x80000000), 0x80003180); - + u32 shift = 0; if (_bIsWii) shift = 2; @@ -137,7 +137,7 @@ bool CBoot::LoadMapFromFilename() return false; } -// If ipl.bin is not found, this function does *some* of what BS1 does: +// If ipl.bin is not found, this function does *some* of what BS1 does: // loading IPL(BS2) and jumping to it. // It does not initialize the hardware or anything else like BS1 does. bool CBoot::Load_BS2(const std::string& _rBootROMFilename) @@ -151,7 +151,7 @@ bool CBoot::Load_BS2(const std::string& _rBootROMFilename) // Load the whole ROM dump std::string data; - if (!File::ReadFileToString(false, _rBootROMFilename.c_str(), data)) + if (!File::ReadFileToString(_rBootROMFilename.c_str(), data)) return false; u32 ipl_hash = HashAdler32((const u8*)data.data(), data.size()); @@ -190,7 +190,7 @@ bool CBoot::Load_BS2(const std::string& _rBootROMFilename) // Third boot step after BootManager and Core. See Call schedule in BootManager.cpp bool CBoot::BootUp() { - SCoreStartupParameter& _StartupPara = + SCoreStartupParameter& _StartupPara = SConfig::GetInstance().m_LocalCoreStartupParameter; NOTICE_LOG(BOOT, "Booting %s", _StartupPara.m_strFilename.c_str()); @@ -295,7 +295,7 @@ bool CBoot::BootUp() NOTICE_LOG(BOOT, "Setting DVDRoot %s", _StartupPara.m_strDVDRoot.c_str()); VolumeHandler::SetVolumeDirectory(_StartupPara.m_strDVDRoot, dolWii, _StartupPara.m_strApploader, _StartupPara.m_strFilename); BS2Success = EmulatedBS2(dolWii); - } + } DVDInterface::SetDiscInside(VolumeHandler::IsValid()); @@ -326,7 +326,7 @@ bool CBoot::BootUp() if (elfWii != _StartupPara.bWii) { PanicAlertT("Warning - starting ELF in wrong console mode!"); - } + } bool BS2Success = false; @@ -347,7 +347,7 @@ bool CBoot::BootUp() // TODO: auto-convert elf to dol, so we can load them :) VolumeHandler::SetVolumeDirectory(_StartupPara.m_strDVDRoot, elfWii); BS2Success = EmulatedBS2(elfWii); - } + } else if (!_StartupPara.m_strDefaultGCM.empty()) { NOTICE_LOG(BOOT, "Loading default ISO %s", _StartupPara.m_strDefaultGCM.c_str()); @@ -364,7 +364,7 @@ bool CBoot::BootUp() else // Poor man's bootup { Load_FST(elfWii); - Boot_ELF(_StartupPara.m_strFilename.c_str()); + Boot_ELF(_StartupPara.m_strFilename.c_str()); } UpdateDebugger_MapLoaded(); Dolphin_Debugger::AddAutoBreakpoints(); diff --git a/Source/Core/Core/Src/Boot/Boot_DOL.cpp b/Source/Core/Core/Src/Boot/Boot_DOL.cpp index b1476f82d0..58316576a5 100644 --- a/Source/Core/Core/Src/Boot/Boot_DOL.cpp +++ b/Source/Core/Core/Src/Boot/Boot_DOL.cpp @@ -20,7 +20,7 @@ CDolLoader::CDolLoader(const char* _szFilename) u8* const tmpBuffer = new u8[(size_t)size]; { - File::IOFile pStream(_szFilename, "rb"); + File::IOFile pStream(_szFilename, "rb"); pStream.ReadBytes(tmpBuffer, (size_t)size); } @@ -30,33 +30,33 @@ CDolLoader::CDolLoader(const char* _szFilename) CDolLoader::~CDolLoader() { - for (int i = 0; i < DOL_NUM_TEXT; i++) + for (auto& sect : text_section) { - delete [] text_section[i]; - text_section[i] = NULL; + delete [] sect; + sect = NULL; } - for (int i = 0; i < DOL_NUM_DATA; i++) + for (auto& sect : data_section) { - delete [] data_section[i]; - data_section[i] = NULL; + delete [] sect; + sect = NULL; } } void CDolLoader::Initialize(u8* _pBuffer, u32 _Size) -{ +{ memcpy(&m_dolheader, _pBuffer, sizeof(SDolHeader)); // swap memory u32* p = (u32*)&m_dolheader; - for (size_t i = 0; i < (sizeof(SDolHeader)/sizeof(u32)); i++) + for (size_t i = 0; i < (sizeof(SDolHeader)/sizeof(u32)); i++) p[i] = Common::swap32(p[i]); - for (int i = 0; i < DOL_NUM_TEXT; i++) - text_section[i] = NULL; - for (int i = 0; i < DOL_NUM_DATA; i++) - data_section[i] = NULL; - + for (auto& sect : text_section) + sect = NULL; + for (auto& sect : data_section) + sect = NULL; + u32 HID4_pattern = 0x7c13fba6; u32 HID4_mask = 0xfc1fffff; diff --git a/Source/Core/Core/Src/Boot/Boot_ELF.cpp b/Source/Core/Core/Src/Boot/Boot_ELF.cpp index 99b0c3c0a3..725332685b 100644 --- a/Source/Core/Core/Src/Boot/Boot_ELF.cpp +++ b/Source/Core/Core/Src/Boot/Boot_ELF.cpp @@ -21,10 +21,10 @@ bool CBoot::IsElfWii(const char *filename) File::IOFile f(filename, "rb"); f.ReadBytes(mem, (size_t)filesize); } - + // Use the same method as the DOL loader uses: search for mfspr from HID4, // which should only be used in Wii ELFs. - // + // // Likely to have some false positives/negatives, patches implementing a // better heuristic are welcome. @@ -63,7 +63,7 @@ bool CBoot::Boot_ELF(const char *filename) File::IOFile f(filename, "rb"); f.ReadBytes(mem, (size_t)filesize); } - + ElfReader reader(mem); reader.LoadInto(0x80000000); if (!reader.LoadSymbols()) @@ -75,7 +75,7 @@ bool CBoot::Boot_ELF(const char *filename) { HLE::PatchFunctions(); } - + PC = reader.GetEntryPoint(); delete[] mem; diff --git a/Source/Core/Core/Src/Boot/Boot_WiiWAD.cpp b/Source/Core/Core/Src/Boot/Boot_WiiWAD.cpp index 42d1b72708..ac950d5038 100644 --- a/Source/Core/Core/Src/Boot/Boot_WiiWAD.cpp +++ b/Source/Core/Core/Src/Boot/Boot_WiiWAD.cpp @@ -45,7 +45,7 @@ typedef struct { bool CBoot::Boot_WiiWAD(const char* _pFilename) { - + std::string state_filename(Common::GetTitleDataPath(TITLEID_SYSMENU) + WII_STATE); if (File::Exists(state_filename)) @@ -53,7 +53,7 @@ bool CBoot::Boot_WiiWAD(const char* _pFilename) File::IOFile state_file(state_filename, "r+b"); StateFlags state; state_file.ReadBytes(&state, sizeof(StateFlags)); - + state.type = 0x03; // TYPE_RETURN state.checksum = state_checksum((u32*)&state.flags, sizeof(StateFlags)-4); @@ -79,7 +79,7 @@ bool CBoot::Boot_WiiWAD(const char* _pFilename) u64 titleID = ContentLoader.GetTitleID(); // create data directory File::CreateFullPath(Common::GetTitleDataPath(titleID)); - + if (titleID == TITLEID_SYSMENU) HLE_IPC_CreateVirtualFATFilesystem(); // setup wii mem diff --git a/Source/Core/Core/Src/Boot/ElfReader.cpp b/Source/Core/Core/Src/Boot/ElfReader.cpp index 5aa0e2b78d..bfbeb91a3b 100644 --- a/Source/Core/Core/Src/Boot/ElfReader.cpp +++ b/Source/Core/Core/Src/Boot/ElfReader.cpp @@ -64,7 +64,7 @@ ElfReader::ElfReader(void *ptr) byteswapHeader(*header); segments = (Elf32_Phdr *)(base + header->e_phoff); - sections = (Elf32_Shdr *)(base + header->e_shoff); + sections = (Elf32_Shdr *)(base + header->e_shoff); for (int i = 0; i < GetNumSegments(); i++) { @@ -98,7 +98,7 @@ bool ElfReader::LoadInto(u32 vaddr) // sectionOffsets = new u32[GetNumSections()]; // sectionAddrs = new u32[GetNumSections()]; - + // Should we relocate? bRelocate = (header->e_type != ET_EXEC); @@ -123,7 +123,7 @@ bool ElfReader::LoadInto(u32 vaddr) Elf32_Phdr *p = segments + i; INFO_LOG(MASTER_LOG, "Type: %i Vaddr: %08x Filesz: %i Memsz: %i ", p->p_type, p->p_vaddr, p->p_filesz, p->p_memsz); - + if (p->p_type == PT_LOAD) { segmentVAddr[i] = baseAddress + p->p_vaddr; @@ -154,7 +154,7 @@ bool ElfReader::LoadInto(u32 vaddr) { Elf32_Shdr *s = §ions[i]; const char *name = GetSectionName(i); - + u32 writeAddr = s->sh_addr + baseAddress; sectionOffsets[i] = writeAddr - vaddr; sectionAddrs[i] = writeAddr; @@ -162,7 +162,7 @@ bool ElfReader::LoadInto(u32 vaddr) if (s->sh_flags & SHF_ALLOC) { LOG(MASTER_LOG,"Data Section found: %s Sitting at %08x, size %08x", name, writeAddr, s->sh_size); - + } else { diff --git a/Source/Core/Core/Src/Boot/ElfReader.h b/Source/Core/Core/Src/Boot/ElfReader.h index 47a4ef7103..c5befc7226 100644 --- a/Source/Core/Core/Src/Boot/ElfReader.h +++ b/Source/Core/Core/Src/Boot/ElfReader.h @@ -26,15 +26,15 @@ private: Elf32_Ehdr *header; Elf32_Phdr *segments; Elf32_Shdr *sections; - + u32 *sectionAddrs; bool bRelocate; u32 entryPoint; -public: +public: ElfReader(void *ptr); ~ElfReader() { } - + u32 Read32(int off) const { return base32[off>>2]; } // Quick accessors diff --git a/Source/Core/Core/Src/Boot/ElfTypes.h b/Source/Core/Core/Src/Boot/ElfTypes.h index c696b24a07..543c0de10c 100644 --- a/Source/Core/Core/Src/Boot/ElfTypes.h +++ b/Source/Core/Core/Src/Boot/ElfTypes.h @@ -107,12 +107,12 @@ enum ElfSectionFlags SHF_MASKPROC =0xF0000000, }; -// Symbol binding -#define STB_LOCAL 0 -#define STB_GLOBAL 1 -#define STB_WEAK 2 -#define STB_LOPROC 13 -#define STB_HIPROC 15 +// Symbol binding +#define STB_LOCAL 0 +#define STB_GLOBAL 1 +#define STB_WEAK 2 +#define STB_LOPROC 13 +#define STB_HIPROC 15 // Symbol types #define STT_NOTYPE 0 @@ -191,7 +191,7 @@ typedef unsigned int Elf32_Word; // ELF file header -struct Elf32_Ehdr +struct Elf32_Ehdr { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; @@ -210,7 +210,7 @@ struct Elf32_Ehdr }; // Section header -struct Elf32_Shdr +struct Elf32_Shdr { Elf32_Word sh_name; Elf32_Word sh_type; @@ -225,7 +225,7 @@ struct Elf32_Shdr }; // Segment header -struct Elf32_Phdr +struct Elf32_Phdr { Elf32_Word p_type; Elf32_Off p_offset; @@ -238,7 +238,7 @@ struct Elf32_Phdr }; // Symbol table entry -struct Elf32_Sym +struct Elf32_Sym { Elf32_Word st_name; Elf32_Addr st_value; @@ -253,13 +253,13 @@ struct Elf32_Sym #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) // Relocation entries -struct Elf32_Rel +struct Elf32_Rel { Elf32_Addr r_offset; Elf32_Word r_info; }; -struct Elf32_Rela +struct Elf32_Rela { Elf32_Addr r_offset; Elf32_Word r_info; @@ -271,13 +271,13 @@ struct Elf32_Rela #define ELF32_R_INFO(s,t) (((s)<<8 )+(unsigned char)(t)) -struct Elf32_Dyn +struct Elf32_Dyn { Elf32_Sword d_tag; - union + union { Elf32_Word d_val; - Elf32_Addr d_ptr; + Elf32_Addr d_ptr; } d_un; }; diff --git a/Source/Core/Core/Src/BootManager.cpp b/Source/Core/Core/Src/BootManager.cpp index 99491ae2f4..6b9a42fa9c 100644 --- a/Source/Core/Core/Src/BootManager.cpp +++ b/Source/Core/Core/Src/BootManager.cpp @@ -9,7 +9,7 @@ // Call sequence: This file has one of the first function called when a game is booted, // the boot sequence in the code is: - + // DolphinWX: FrameTools.cpp StartGame // Core BootManager.cpp BootCore // Core.cpp Init Thread creation @@ -141,7 +141,7 @@ bool BootCore(const std::string& _rFilename) // Flush possible changes to SYSCONF to file SConfig::GetInstance().m_SYSCONF->Save(); } - } + } // movie settings if (Movie::IsPlayingInput() && Movie::IsConfigSaved()) diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index d87fdcc0b5..f28dfa5d21 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -171,8 +171,8 @@ void SConfig::SaveSettings() #ifdef USE_GDBSTUB ini.Set("General", "GDBPort", m_LocalCoreStartupParameter.iGDBPort); #endif - - // Interface + + // Interface ini.Set("Interface", "ConfirmStop", m_LocalCoreStartupParameter.bConfirmStop); ini.Set("Interface", "UsePanicHandlers", m_LocalCoreStartupParameter.bUsePanicHandlers); ini.Set("Interface", "OnScreenDisplayMessages", m_LocalCoreStartupParameter.bOnScreenDisplayMessages); diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index 09375b9736..ea54163c30 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -389,7 +389,7 @@ void EmuThread() OSD::AddMessage("Dolphin " + g_video_backend->GetName() + " Video Backend.", 5000); if (!DSP::GetDSPEmulator()->Initialize(g_pWindowHandle, - _CoreParameter.bWii, _CoreParameter.bDSPThread)) + _CoreParameter.bWii, _CoreParameter.bDSPThread)) { HW::Shutdown(); g_video_backend->Shutdown(); diff --git a/Source/Core/Core/Src/Core.h b/Source/Core/Core/Src/Core.h index 8de14caa7f..2b966ea1db 100644 --- a/Source/Core/Core/Src/Core.h +++ b/Source/Core/Core/Src/Core.h @@ -66,7 +66,7 @@ inline void DisplayMessage(const std::string &message, int time_in_ms) { DisplayMessage(message.c_str(), time_in_ms); } - + std::string GetStateFileName(); void SetStateFileName(std::string val); diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp index 4cba012ea4..e7843fe997 100644 --- a/Source/Core/Core/Src/CoreParameter.cpp +++ b/Source/Core/Core/Src/CoreParameter.cpp @@ -18,6 +18,8 @@ #include "Core.h" // for bWii #include "FifoPlayer/FifoDataFile.h" +#include + SCoreStartupParameter::SCoreStartupParameter() : hInstance(0), bEnableDebugging(false), bAutomaticStart(false), bBootToPause(false), @@ -278,7 +280,7 @@ bool SCoreStartupParameter::AutoSetup(EBootBS2 _BootBS2) // Use the TitleIDhex for name and/or unique ID if launching from nand folder // or if it is not ascii characters (specifically sysmenu could potentially apply to other things) char titleidstr[17]; - snprintf(titleidstr, 17, "%016llx", ContentLoader.GetTitleID()); + snprintf(titleidstr, 17, "%016" PRIx64, ContentLoader.GetTitleID()); if (!m_strName.length()) { diff --git a/Source/Core/Core/Src/CoreTiming.cpp b/Source/Core/Core/Src/CoreTiming.cpp index 1609043600..6dac07e567 100644 --- a/Source/Core/Core/Src/CoreTiming.cpp +++ b/Source/Core/Core/Src/CoreTiming.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #include "Thread.h" #include "PowerPC/PowerPC.h" @@ -84,15 +85,15 @@ int RegisterEvent(const char *name, TimedCallback callback) // check for existing type with same name. // we want event type names to remain unique so that we can use them for serialization. - for (unsigned int i = 0; i < event_types.size(); ++i) + for (auto& event_type : event_types) { - if (!strcmp(name, event_types[i].name)) + if (!strcmp(name, event_type.name)) { WARN_LOG(POWERPC, "Discarded old event type \"%s\" because a new type with the same name was registered.", name); // we don't know if someone might be holding on to the type index, // so we gut the old event type instead of actually removing it. - event_types[i].name = "_discarded_event"; - event_types[i].callback = &EmptyTimedCallback; + event_type.name = "_discarded_event"; + event_type.callback = &EmptyTimedCallback; } } @@ -113,7 +114,7 @@ void Init() slicelength = maxSliceLength; globalTimer = 0; idledCycles = 0; - + ev_lost = RegisterEvent("_lost_event", &EmptyTimedCallback); } @@ -187,7 +188,7 @@ void DoState(PointerWrap &p) u64 GetTicks() { - return (u64)globalTimer; + return (u64)globalTimer; } u64 GetIdleTicks() @@ -251,7 +252,7 @@ void AddEventToQueue(Event* ne) // This must be run ONLY from within the cpu thread // cyclesIntoFuture may be VERY inaccurate if called from anything else -// than Advance +// than Advance void ScheduleEvent(int cyclesIntoFuture, int event_type, u64 userdata) { Event *ne = GetNewEvent(); @@ -266,7 +267,7 @@ void RegisterAdvanceCallback(void (*callback)(int cyclesExecuted)) advanceCallback = callback; } -bool IsScheduled(int event_type) +bool IsScheduled(int event_type) { if (!first) return false; @@ -297,7 +298,7 @@ void RemoveEvent(int event_type) break; } } - + if (!first) return; @@ -394,7 +395,7 @@ void Advance() { if (first->time <= globalTimer) { -// LOG(POWERPC, "[Scheduler] %s (%lld, %lld) ", +// LOG(POWERPC, "[Scheduler] %s (%lld, %lld) ", // event_types[first->type].name ? event_types[first->type].name : "?", (u64)globalTimer, (u64)first->time); Event* evt = first; first = first->next; @@ -407,7 +408,7 @@ void Advance() } } - if (!first) + if (!first) { WARN_LOG(POWERPC, "WARNING - no events in queue. Setting downcount to 10000"); downcount += 10000; @@ -429,7 +430,7 @@ void LogPendingEvents() Event *ptr = first; while (ptr) { - INFO_LOG(POWERPC, "PENDING: Now: %lld Pending: %lld Type: %d", globalTimer, ptr->time, ptr->type); + INFO_LOG(POWERPC, "PENDING: Now: %" PRId64 " Pending: %" PRId64 " Type: %d", globalTimer, ptr->time, ptr->type); ptr = ptr->next; } } @@ -437,9 +438,9 @@ void LogPendingEvents() void Idle() { //DEBUG_LOG(POWERPC, "Idle"); - + //When the FIFO is processing data we must not advance because in this way - //the VI will be desynchronized. So, We are waiting until the FIFO finish and + //the VI will be desynchronized. So, We are waiting until the FIFO finish and //while we process only the events required by the FIFO. while (g_video_backend->Video_IsPossibleWaitingSetDrawDone()) { @@ -449,7 +450,7 @@ void Idle() idledCycles += downcount; downcount = 0; - + Advance(); } @@ -463,11 +464,11 @@ std::string GetScheduledEventsSummary() unsigned int t = ptr->type; if (t >= event_types.size()) PanicAlertT("Invalid event type %i", t); - + const char *name = event_types[ptr->type].name; if (!name) name = "[unknown]"; - + text += StringFromFormat("%s : %i %08x%08x\n", event_types[ptr->type].name, ptr->time, ptr->userdata >> 32, ptr->userdata); ptr = ptr->next; } diff --git a/Source/Core/Core/Src/DSP/DSPAccelerator.cpp b/Source/Core/Core/Src/DSP/DSPAccelerator.cpp index 71b3f91294..8b493e0599 100644 --- a/Source/Core/Core/Src/DSP/DSPAccelerator.cpp +++ b/Source/Core/Core/Src/DSP/DSPAccelerator.cpp @@ -73,7 +73,7 @@ u16 dsp_read_aram_d3() break; } - if (Address >= EndAddress) + if (Address >= EndAddress) { // Set address back to start address. (never seen this here!) Address = (g_dsp.ifx_regs[DSP_ACSAH] << 16) | g_dsp.ifx_regs[DSP_ACSAL]; @@ -131,7 +131,7 @@ u16 dsp_read_accelerator() Address++; break; case 0x19: // 8-bit PCM audio - val = DSPHost_ReadHostMemory(Address) << 8; + val = DSPHost_ReadHostMemory(Address) << 8; g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1]; g_dsp.ifx_regs[DSP_YN1] = val; Address++; diff --git a/Source/Core/Core/Src/DSP/DSPAnalyzer.cpp b/Source/Core/Core/Src/DSP/DSPAnalyzer.cpp index 1e5f727fa1..c682cdf415 100644 --- a/Source/Core/Core/Src/DSP/DSPAnalyzer.cpp +++ b/Source/Core/Core/Src/DSP/DSPAnalyzer.cpp @@ -43,20 +43,20 @@ const u16 idle_skip_sigs[NUM_IDLE_SIGS][MAX_IDLE_SIG_SIZE + 1] = { 0x26fc, // lrs $AC0.M, @DMBH 0x02a0, 0x8000, // andf $AC0.M, #0x8000 0x029c, 0xFFFF, // jlnz 0x???? - 0, 0 }, + 0, 0 }, { 0x27fc, // lrs $AC1.M, @DMBH 0x03a0, 0x8000, // andf $AC1.M, #0x8000 0x029c, 0xFFFF, // jlnz 0x???? - 0, 0 }, + 0, 0 }, // From Zelda: { 0x00de, 0xFFFE, // LR $AC0.M, @CMBH - 0x02c0, 0x8000, // ANDCF $AC0.M, #0x8000 + 0x02c0, 0x8000, // ANDCF $AC0.M, #0x8000 0x029c, 0xFFFF, // JLNZ 0x05cf 0 }, // From Zelda - experimental { 0x00da, 0x0352, // lr $AX0.H, @0x0352 0x8600, // tstaxh $AX0.H - 0x0295, 0xFFFF, // jz 0x???? + 0x0295, 0xFFFF, // jz 0x???? 0, 0 } }; @@ -112,11 +112,11 @@ void AnalyzeRange(int start_addr, int end_addr) // If an instruction potentially raises exceptions, mark the following // instruction as needing to check for exceptions - if (opcode->opcode == 0x00c0 || - opcode->opcode == 0x1800 || - opcode->opcode == 0x1880 || - opcode->opcode == 0x1900 || - opcode->opcode == 0x1980 || + if (opcode->opcode == 0x00c0 || + opcode->opcode == 0x1800 || + opcode->opcode == 0x1880 || + opcode->opcode == 0x1900 || + opcode->opcode == 0x1980 || opcode->opcode == 0x2000 || opcode->extended ) diff --git a/Source/Core/Core/Src/DSP/DSPBreakpoints.h b/Source/Core/Core/Src/DSP/DSPBreakpoints.h index 96c116f5a1..6c3eb8be45 100644 --- a/Source/Core/Core/Src/DSP/DSPBreakpoints.h +++ b/Source/Core/Core/Src/DSP/DSPBreakpoints.h @@ -16,7 +16,7 @@ public: { Clear(); } - + // is address breakpoint bool IsAddressBreakPoint(u32 addr) { @@ -27,7 +27,7 @@ public: bool Add(u32 addr, bool temp=false) { bool was_one = b[addr] != 0; - + if (!was_one) { b[addr] = temp ? 2 : 1; @@ -49,8 +49,7 @@ public: void Clear() { - for (int i = 0; i < 65536; i++) - b[i] = 0; + memset(b, 0, sizeof(b)); } void DeleteByAddress(u32 addr) diff --git a/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp b/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp index 73e2c1f8b4..afaaa7d22e 100644 --- a/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp +++ b/Source/Core/Core/Src/DSP/DSPCodeUtil.cpp @@ -54,7 +54,7 @@ bool Disassemble(const std::vector &code, bool line_numbers, std::string &t } bool Compare(const std::vector &code1, const std::vector &code2) -{ +{ if (code1.size() != code2.size()) printf("Size difference! 1=%i 2=%i\n", (int)code1.size(), (int)code2.size()); u32 count_equal = 0; @@ -94,7 +94,7 @@ bool Compare(const std::vector &code1, const std::vector &code2) return code1.size() == code2.size() && code1.size() == count_equal; } -void GenRandomCode(u32 size, std::vector &code) +void GenRandomCode(u32 size, std::vector &code) { code.resize(size); for (u32 i = 0; i < size; i++) @@ -149,7 +149,7 @@ void CodesToHeader(const std::vector *codes, const std::vector reserveSize += (u32)codes_padded.at(i).size(); } - + header.clear(); header.reserve(reserveSize * 4); sprintf(buffer, "#define NUM_UCODES %u\n\n", numCodes); @@ -172,7 +172,7 @@ void CodesToHeader(const std::vector *codes, const std::vector continue; header.append("\t{\n\t\t"); - for (u32 j = 0; j < codes_padded.at(i).size(); j++) + for (u32 j = 0; j < codes_padded.at(i).size(); j++) { if (j && ((j & 15) == 0)) header.append("\n\t\t"); @@ -206,7 +206,7 @@ void BinaryStringBEToCode(const std::string &str, std::vector &code) bool LoadBinary(const char *filename, std::vector &code) { std::string buffer; - if (!File::ReadFileToString(false, filename, buffer)) + if (!File::ReadFileToString(filename, buffer)) return false; BinaryStringBEToCode(buffer, code); @@ -217,7 +217,7 @@ bool SaveBinary(const std::vector &code, const char *filename) { std::string buffer; CodeToBinaryStringBE(code, buffer); - if (!File::WriteStringToFile(false, buffer, filename)) + if (!File::WriteStringToFile(buffer, filename)) return false; return true; } diff --git a/Source/Core/Core/Src/DSP/DSPCore.cpp b/Source/Core/Core/Src/DSP/DSPCore.cpp index 64206b3ee0..377e21fba8 100644 --- a/Source/Core/Core/Src/DSP/DSPCore.cpp +++ b/Source/Core/Core/Src/DSP/DSPCore.cpp @@ -52,7 +52,7 @@ static bool LoadRom(const char *fname, int size_in_words, u16 *rom) { pFile.ReadArray(rom, size_in_words); pFile.Close(); - + // Byteswap the rom. for (int i = 0; i < size_in_words; i++) rom[i] = Common::swap16(rom[i]); @@ -139,7 +139,7 @@ bool DSPCore_Init(const char *irom_filename, const char *coef_filename, cyclesLeft = 0; init_hax = false; dspjit = NULL; - + g_dsp.irom = (u16*)AllocateMemoryPages(DSP_IROM_BYTE_SIZE); g_dsp.iram = (u16*)AllocateMemoryPages(DSP_IRAM_BYTE_SIZE); g_dsp.dram = (u16*)AllocateMemoryPages(DSP_DRAM_BYTE_SIZE); @@ -198,7 +198,7 @@ bool DSPCore_Init(const char *irom_filename, const char *coef_filename, WriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false); // Initialize JIT, if necessary - if(bUsingJIT) + if(bUsingJIT) dspjit = new DSPEmitter(); core_state = DSPCORE_RUNNING; @@ -250,7 +250,7 @@ void DSPCore_CheckExternalInterrupt() // Signal the SPU about new mail DSPCore_SetException(EXP_INT); - + g_dsp.cr &= ~CR_EXTERNAL_INT; } diff --git a/Source/Core/Core/Src/DSP/DSPCore.h b/Source/Core/Core/Src/DSP/DSPCore.h index de5b309e13..7b6805bd52 100644 --- a/Source/Core/Core/Src/DSP/DSPCore.h +++ b/Source/Core/Core/Src/DSP/DSPCore.h @@ -222,7 +222,7 @@ struct SDSP #if PROFILE u16 err_pc; #endif - + // This is NOT the same cr as r.cr. // This register is shared with the main emulation, see DSP.cpp // The engine has control over 0x0C07 of this reg. diff --git a/Source/Core/Core/Src/DSP/DSPEmitter.cpp b/Source/Core/Core/Src/DSP/DSPEmitter.cpp index 7113f420af..d0d842b7aa 100644 --- a/Source/Core/Core/Src/DSP/DSPEmitter.cpp +++ b/Source/Core/Core/Src/DSP/DSPEmitter.cpp @@ -25,7 +25,7 @@ DSPEmitter::DSPEmitter() : gpr(*this), storeIndex(-1), storeIndex2(-1) blocks = new DSPCompiledCode[MAX_BLOCKS]; blockLinks = new Block[MAX_BLOCKS]; blockSize = new u16[MAX_BLOCKS]; - + compileSR = 0; compileSR |= SR_INT_ENABLE; compileSR |= SR_EXT_INT_ENABLE; @@ -42,7 +42,7 @@ DSPEmitter::DSPEmitter() : gpr(*this), storeIndex(-1), storeIndex2(-1) } } -DSPEmitter::~DSPEmitter() +DSPEmitter::~DSPEmitter() { delete[] blocks; delete[] blockLinks; @@ -62,7 +62,7 @@ void DSPEmitter::ClearIRAM() g_dsp.reset_dspjit_codespace = true; } -void DSPEmitter::ClearIRAMandDSPJITCodespaceReset() +void DSPEmitter::ClearIRAMandDSPJITCodespaceReset() { ClearCodeSpace(); CompileDispatcher(); @@ -101,9 +101,9 @@ void DSPEmitter::checkExceptions(u32 retval) bool DSPEmitter::FlagsNeeded() { - if (!(DSPAnalyzer::code_flags[compilePC] & DSPAnalyzer::CODE_START_OF_INST) || - (DSPAnalyzer::code_flags[compilePC] & DSPAnalyzer::CODE_UPDATE_SR)) - return true; + if (!(DSPAnalyzer::code_flags[compilePC] & DSPAnalyzer::CODE_START_OF_INST) || + (DSPAnalyzer::code_flags[compilePC] & DSPAnalyzer::CODE_UPDATE_SR)) + return true; else return false; } @@ -168,7 +168,7 @@ void DSPEmitter::EmitInstruction(UDSPInstruction inst) } } } - + // Main instruction if (!opTable[inst]->jitFunc) { @@ -352,7 +352,7 @@ void DSPEmitter::Compile(u16 start_addr) } } - if (blockSize[start_addr] == 0) + if (blockSize[start_addr] == 0) { // just a safeguard, should never happen anymore. // if it does we might get stuck over in RunForCycles. diff --git a/Source/Core/Core/Src/DSP/DSPEmitter.h b/Source/Core/Core/Src/DSP/DSPEmitter.h index cf3331a339..f44dcc6774 100644 --- a/Source/Core/Core/Src/DSP/DSPEmitter.h +++ b/Source/Core/Core/Src/DSP/DSPEmitter.h @@ -264,7 +264,7 @@ private: // The index of the last stored ext value (compile time). int storeIndex; int storeIndex2; - + // Counts down. // int cycles; diff --git a/Source/Core/Core/Src/DSP/DSPHWInterface.cpp b/Source/Core/Core/Src/DSP/DSPHWInterface.cpp index 56e998d3c0..92d9c5d67a 100644 --- a/Source/Core/Core/Src/DSP/DSPHWInterface.cpp +++ b/Source/Core/Core/Src/DSP/DSPHWInterface.cpp @@ -120,7 +120,7 @@ void gdsp_ifx_write(u32 addr, u32 val) case DSP_DIRQ: if (val & 0x1) DSPHost_InterruptRequest(); - else + else INFO_LOG(DSPLLE, "Unknown Interrupt Request pc=%04x (%04x)", g_dsp.pc, val); break; @@ -156,7 +156,7 @@ void gdsp_ifx_write(u32 addr, u32 val) case DSP_GAIN: if (val) { - INFO_LOG(DSPLLE,"Gain Written: 0x%04x", val); + INFO_LOG(DSPLLE,"Gain Written: 0x%04x", val); } case DSP_DSPA: case DSP_DSMAH: @@ -241,7 +241,7 @@ static void gdsp_idma_in(u16 dsp_addr, u32 addr, u32 size) u8* dst = ((u8*)g_dsp.iram); for (u32 i = 0; i < size; i += 2) - { + { *(u16*)&dst[dsp_addr + i] = Common::swap16(*(const u16*)&g_dsp.cpu_ram[(addr + i) & 0x0fffffff]); } WriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false); diff --git a/Source/Core/Core/Src/DSP/DSPIntCCUtil.cpp b/Source/Core/Core/Src/DSP/DSPIntCCUtil.cpp index af75aedcc3..d2631d2685 100644 --- a/Source/Core/Core/Src/DSP/DSPIntCCUtil.cpp +++ b/Source/Core/Core/Src/DSP/DSPIntCCUtil.cpp @@ -27,7 +27,7 @@ void Update_SR_Register64(s64 _Value, bool carry, bool overflow) if (overflow) { g_dsp.r.sr |= SR_OVERFLOW; - g_dsp.r.sr |= SR_OVERFLOW_STICKY; + g_dsp.r.sr |= SR_OVERFLOW_STICKY; } // 0x04 @@ -79,14 +79,14 @@ void Update_SR_Register16(s16 _Value, bool carry, bool overflow, bool overS32) g_dsp.r.sr |= SR_ARITH_ZERO; } - // 0x08 + // 0x08 if (_Value < 0) { g_dsp.r.sr |= SR_SIGN; } // 0x10 - if (overS32) + if (overS32) { g_dsp.r.sr |= SR_OVER_S32; } @@ -100,7 +100,7 @@ void Update_SR_Register16(s16 _Value, bool carry, bool overflow, bool overS32) void Update_SR_LZ(bool value) { - if (value == true) + if (value == true) g_dsp.r.sr |= SR_LOGIC_ZERO; else g_dsp.r.sr &= ~SR_LOGIC_ZERO; @@ -156,11 +156,11 @@ bool CheckCondition(u8 _Condition) return isLess() || isZero(); case 0x4: // NZ - Not Zero return !isZero(); - case 0x5: // Z - Zero + case 0x5: // Z - Zero return isZero(); case 0x6: // NC - Not carry return !isCarry(); - case 0x7: // C - Carry + case 0x7: // C - Carry return isCarry(); case 0x8: // ? - Not over s32 return !isOverS32(); diff --git a/Source/Core/Core/Src/DSP/DSPIntCCUtil.h b/Source/Core/Core/Src/DSP/DSPIntCCUtil.h index e98c0d905d..0f747cf2f0 100644 --- a/Source/Core/Core/Src/DSP/DSPIntCCUtil.h +++ b/Source/Core/Core/Src/DSP/DSPIntCCUtil.h @@ -26,7 +26,7 @@ inline bool isCarry(u64 val, u64 result) { } inline bool isCarry2(u64 val, u64 result) { - return (val>=result); + return (val>=result); } inline bool isOverflow(s64 val1, s64 val2, s64 res) { diff --git a/Source/Core/Core/Src/DSP/DSPIntExtOps.cpp b/Source/Core/Core/Src/DSP/DSPIntExtOps.cpp index bc448233ba..a628b9b4d1 100644 --- a/Source/Core/Core/Src/DSP/DSPIntExtOps.cpp +++ b/Source/Core/Core/Src/DSP/DSPIntExtOps.cpp @@ -7,7 +7,7 @@ #include "DSPIntExtOps.h" //not needed for game ucodes (it slows down interpreter/dspjit32 + easier to compare int VS dspjit64 without it) -//#define PRECISE_BACKLOG +//#define PRECISE_BACKLOG // Extended opcodes do not exist on their own. These opcodes can only be // attached to opcodes that allow extending (8 (or 7) lower bits of opcode not used by @@ -29,7 +29,7 @@ inline static void writeToBackLog(int i, int idx, u16 value) namespace DSPInterpreter { -namespace Ext +namespace Ext { inline bool IsSameMemArea(u16 a, u16 b) @@ -63,7 +63,7 @@ void ir(const UDSPInstruction opc) void nr(const UDSPInstruction opc) { u8 reg = opc & 0x3; - + writeToBackLog(0, reg, dsp_increase_addr_reg(reg, (s16)g_dsp.r.ix[reg])); } @@ -87,7 +87,7 @@ void mv(const UDSPInstruction opc) break; } } - + // S @$arD, $acS.S // xxxx xxxx 001s s0dd // Store value of $acS.S in the memory pointed by register $arD. @@ -136,14 +136,14 @@ void sn(const UDSPInstruction opc) // L $axD.D, @$arS // xxxx xxxx 01dd d0ss -// Load $axD.D/$acD.D with value from memory pointed by register $arS. +// Load $axD.D/$acD.D with value from memory pointed by register $arS. // Post increment register $arS. void l(const UDSPInstruction opc) { u8 sreg = opc & 0x3; u8 dreg = ((opc >> 3) & 0x7) + DSP_REG_AXL0; - - if ((dreg >= DSP_REG_ACM0) && (g_dsp.r.sr & SR_40_MODE_BIT)) + + if ((dreg >= DSP_REG_ACM0) && (g_dsp.r.sr & SR_40_MODE_BIT)) { u16 val = dsp_dmem_read(g_dsp.r.ar[sreg]); writeToBackLog(0, dreg - DSP_REG_ACM0 + DSP_REG_ACH0, (val & 0x8000) ? 0xFFFF : 0x0000); @@ -160,14 +160,14 @@ void l(const UDSPInstruction opc) // LN $axD.D, @$arS // xxxx xxxx 01dd d0ss -// Load $axD.D/$acD.D with value from memory pointed by register $arS. +// Load $axD.D/$acD.D with value from memory pointed by register $arS. // Add indexing register $ixS to register $arS. void ln(const UDSPInstruction opc) { u8 sreg = opc & 0x3; u8 dreg = ((opc >> 3) & 0x7) + DSP_REG_AXL0; - if ((dreg >= DSP_REG_ACM0) && (g_dsp.r.sr & SR_40_MODE_BIT)) + if ((dreg >= DSP_REG_ACM0) && (g_dsp.r.sr & SR_40_MODE_BIT)) { u16 val = dsp_dmem_read(g_dsp.r.ar[sreg]); writeToBackLog(0, dreg - DSP_REG_ACM0 + DSP_REG_ACH0, (val & 0x8000) ? 0xFFFF : 0x0000); @@ -196,7 +196,7 @@ void ls(const UDSPInstruction opc) writeToBackLog(0, dreg, dsp_dmem_read(g_dsp.r.ar[0])); writeToBackLog(1, DSP_REG_AR3, dsp_increment_addr_reg(DSP_REG_AR3)); - writeToBackLog(2, DSP_REG_AR0, dsp_increment_addr_reg(DSP_REG_AR0)); + writeToBackLog(2, DSP_REG_AR0, dsp_increment_addr_reg(DSP_REG_AR0)); } @@ -269,7 +269,7 @@ void sl(const UDSPInstruction opc) writeToBackLog(0, dreg, dsp_dmem_read(g_dsp.r.ar[3])); writeToBackLog(1, DSP_REG_AR3, dsp_increment_addr_reg(DSP_REG_AR3)); - writeToBackLog(2, DSP_REG_AR0, dsp_increment_addr_reg(DSP_REG_AR0)); + writeToBackLog(2, DSP_REG_AR0, dsp_increment_addr_reg(DSP_REG_AR0)); } // SLN $acS.m, $axD.D @@ -329,7 +329,7 @@ void slnm(const UDSPInstruction opc) // LD $ax0.d, $ax1.r, @$arS // xxxx xxxx 11dr 00ss // example for "nx'ld $AX0.L, $AX1.L, @$AR3" -// Loads the word pointed by AR0 to AX0.H, then loads the word pointed by AR3 to AX0.L. +// Loads the word pointed by AR0 to AX0.H, then loads the word pointed by AR3 to AX0.L. // Increments AR0 and AR3. // If AR0 and AR3 point into the same memory page (upper 6 bits of addr are the same -> games are not doing that!) // then the value pointed by AR0 is loaded to BOTH AX0.H and AX0.L. @@ -545,18 +545,18 @@ void zeroWriteBackLog() #endif } -void zeroWriteBackLogPreserveAcc(u8 acc) +void zeroWriteBackLogPreserveAcc(u8 acc) { #ifdef PRECISE_BACKLOG for (int i = 0; writeBackLogIdx[i] != -1; i++) { // acc0 - if ((acc == 0) && + if ((acc == 0) && ((writeBackLogIdx[i] == DSP_REG_ACL0) || (writeBackLogIdx[i] == DSP_REG_ACM0) || (writeBackLogIdx[i] == DSP_REG_ACH0))) continue; - + // acc1 - if ((acc == 1) && + if ((acc == 1) && ((writeBackLogIdx[i] == DSP_REG_ACL1) || (writeBackLogIdx[i] == DSP_REG_ACM1) || (writeBackLogIdx[i] == DSP_REG_ACH1))) continue; diff --git a/Source/Core/Core/Src/DSP/DSPIntExtOps.h b/Source/Core/Core/Src/DSP/DSPIntExtOps.h index fa6d22edba..d4f3a8dd01 100644 --- a/Source/Core/Core/Src/DSP/DSPIntExtOps.h +++ b/Source/Core/Core/Src/DSP/DSPIntExtOps.h @@ -30,12 +30,12 @@ // Extended opcode support. // Many opcode have the lower 0xFF (some only 0x7f) free - there, an opcode extension -// can be stored. +// can be stored. namespace DSPInterpreter { namespace Ext -{ +{ void l(const UDSPInstruction opc); void ln(const UDSPInstruction opc); void ls(const UDSPInstruction opc); @@ -61,7 +61,7 @@ void dr(const UDSPInstruction opc); void ir(const UDSPInstruction opc); void nr(const UDSPInstruction opc); void nop(const UDSPInstruction opc); - + } // end namespace Ext } // end namespace DSPinterpeter diff --git a/Source/Core/Core/Src/DSP/DSPIntUtil.h b/Source/Core/Core/Src/DSP/DSPIntUtil.h index 7299d7e8c9..0e48ee77e4 100644 --- a/Source/Core/Core/Src/DSP/DSPIntUtil.h +++ b/Source/Core/Core/Src/DSP/DSPIntUtil.h @@ -57,7 +57,7 @@ static inline u16 dsp_increase_addr_reg(u16 reg, s16 _ix) u32 ar = g_dsp.r.ar[reg]; u32 wr = g_dsp.r.wr[reg]; s32 ix = _ix; - + u32 mx = (wr | 1) << 1; u32 nar = ar + ix; u32 dar = (nar ^ ar ^ ix) & mx; @@ -75,7 +75,7 @@ static inline u16 dsp_increase_addr_reg(u16 reg, s16 _ix) return nar; } -static inline u16 dsp_decrease_addr_reg(u16 reg, s16 _ix) +static inline u16 dsp_decrease_addr_reg(u16 reg, s16 _ix) { u32 ar = g_dsp.r.ar[reg]; u32 wr = g_dsp.r.wr[reg]; @@ -98,23 +98,23 @@ static inline u16 dsp_decrease_addr_reg(u16 reg, s16 _ix) return nar; } -static inline u16 dsp_increment_addr_reg(u16 reg) +static inline u16 dsp_increment_addr_reg(u16 reg) { u32 ar = g_dsp.r.ar[reg]; u32 wr = g_dsp.r.wr[reg]; u32 nar = ar + 1; - + if ((nar ^ ar) > ((wr | 1) << 1)) nar -= wr + 1; return nar; } -static inline u16 dsp_decrement_addr_reg(u16 reg) +static inline u16 dsp_decrement_addr_reg(u16 reg) { u32 ar = g_dsp.r.ar[reg]; u32 wr = g_dsp.r.wr[reg]; - + u32 nar = ar + wr; if (((nar ^ ar) & ((wr | 1) << 1)) > wr) @@ -244,9 +244,9 @@ static inline void dsp_op_write_reg(int _reg, u16 val) } } -static inline void dsp_conditional_extend_accum(int reg) +static inline void dsp_conditional_extend_accum(int reg) { - switch (reg) + switch (reg) { case DSP_REG_ACM0: case DSP_REG_ACM1: @@ -344,12 +344,12 @@ inline u16 dsp_op_read_reg_and_saturate(u8 _reg) if (g_dsp.r.sr & SR_40_MODE_BIT) { s64 acc = dsp_get_long_acc(_reg); - - if (acc != (s32)acc) + + if (acc != (s32)acc) { if (acc > 0) return 0x7fff; - else + else return 0x8000; } else diff --git a/Source/Core/Core/Src/DSP/DSPInterpreter.cpp b/Source/Core/Core/Src/DSP/DSPInterpreter.cpp index d7a4eb1be4..19edffd785 100644 --- a/Source/Core/Core/Src/DSP/DSPInterpreter.cpp +++ b/Source/Core/Core/Src/DSP/DSPInterpreter.cpp @@ -36,7 +36,7 @@ volatile u32 gdsp_running; // NOTE: These have nothing to do with g_dsp.r.cr ! -void WriteCR(u16 val) +void WriteCR(u16 val) { // reset if (val & 1) @@ -96,7 +96,7 @@ void Step() u16 opc = dsp_fetch_code(); ExecuteInstruction(UDSPInstruction(opc)); - + if (DSPAnalyzer::code_flags[g_dsp.pc - 1] & DSPAnalyzer::CODE_LOOP_END) HandleLoop(); } @@ -107,7 +107,7 @@ int RunCyclesThread(int cycles) while (true) { if (g_dsp.cr & CR_HALT) - return 0; + return 0; if (g_dsp.external_interrupt_waiting) { @@ -129,7 +129,7 @@ int RunCyclesDebug(int cycles) for (int i = 0; i < 8; i++) { if (g_dsp.cr & CR_HALT) - return 0; + return 0; if (dsp_breakpoints.IsAddressBreakPoint(g_dsp.pc)) { DSPCore_SetState(DSPCORE_STEPPING); @@ -163,7 +163,7 @@ int RunCyclesDebug(int cycles) return 0; } - // Now, lets run some more without idle skipping. + // Now, lets run some more without idle skipping. for (int i = 0; i < 200; i++) { if (dsp_breakpoints.IsAddressBreakPoint(g_dsp.pc)) @@ -189,7 +189,7 @@ int RunCycles(int cycles) for (int i = 0; i < 8; i++) { if (g_dsp.cr & CR_HALT) - return 0; + return 0; Step(); cycles--; if (cycles < 0) @@ -213,8 +213,8 @@ int RunCycles(int cycles) return 0; } - // Now, lets run some more without idle skipping. - for (int i = 0; i < 200; i++) + // Now, lets run some more without idle skipping. + for (int i = 0; i < 200; i++) { Step(); cycles--; diff --git a/Source/Core/Core/Src/DSP/DSPInterpreter.h b/Source/Core/Core/Src/DSP/DSPInterpreter.h index c2e144a682..7252cd4760 100644 --- a/Source/Core/Core/Src/DSP/DSPInterpreter.h +++ b/Source/Core/Core/Src/DSP/DSPInterpreter.h @@ -106,7 +106,7 @@ void asr16(const UDSPInstruction opc); void lsl(const UDSPInstruction opc); void lsr(const UDSPInstruction opc); void asl(const UDSPInstruction opc); -void asr(const UDSPInstruction opc); +void asr(const UDSPInstruction opc); void lsrn(const UDSPInstruction opc); void asrn(const UDSPInstruction opc); void dar(const UDSPInstruction opc); diff --git a/Source/Core/Core/Src/DSP/DSPMemoryMap.cpp b/Source/Core/Core/Src/DSP/DSPMemoryMap.cpp index 7a56c2618f..542823257a 100644 --- a/Source/Core/Core/Src/DSP/DSPMemoryMap.cpp +++ b/Source/Core/Core/Src/DSP/DSPMemoryMap.cpp @@ -50,14 +50,14 @@ u16 dsp_dmem_read(u16 addr) { case 0x0: // 0xxx DRAM return g_dsp.dram[addr & DSP_DRAM_MASK]; - + case 0x1: // 1xxx COEF DEBUG_LOG(DSPLLE, "%04x : Coefficient Read @ %04x", g_dsp.pc, addr); return g_dsp.coef[addr & DSP_COEF_MASK]; case 0xf: // Fxxx HW regs return gdsp_ifx_read(addr); - + default: // Unmapped/non-existing memory ERROR_LOG(DSPLLE, "%04x DSP ERROR: Read from UNKNOWN (%04x) memory", g_dsp.pc, addr); return 0; diff --git a/Source/Core/Core/Src/DSP/DSPTables.cpp b/Source/Core/Core/Src/DSP/DSPTables.cpp index bc2cbf1488..20d27d468e 100644 --- a/Source/Core/Core/Src/DSP/DSPTables.cpp +++ b/Source/Core/Core/Src/DSP/DSPTables.cpp @@ -19,7 +19,7 @@ void nop(const UDSPInstruction opc) ERROR_LOG(DSPLLE, "LLE: Unrecognized opcode 0x%04x", opc); } } - + const DSPOPCTemplate opcodes[] = { {"NOP", 0x0000, 0xfffc, nop, &DSPEmitter::nop, 1, 0, {}, false, false, false, false, false}, @@ -47,7 +47,7 @@ const DSPOPCTemplate opcodes[] = {"RETLZ", 0x02dd, 0xffff, DSPInterpreter::ret, &DSPEmitter::ret, 1, 0, {}, false, true, false, true, false}, {"RETO", 0x02de, 0xffff, DSPInterpreter::ret, &DSPEmitter::ret, 1, 0, {}, false, true, false, true, false}, {"RET", 0x02df, 0xffff, DSPInterpreter::ret, &DSPEmitter::ret, 1, 0, {}, false, true, true, false, false}, - + {"RTI", 0x02ff, 0xffff, DSPInterpreter::rti, &DSPEmitter::rti, 1, 0, {}, false, true, true, false, false}, {"CALLGE", 0x02b0, 0xffff, DSPInterpreter::call, &DSPEmitter::call, 2, 1, {{P_ADDR_I, 2, 1, 0, 0xffff}}, false, true, false, true, false}, @@ -142,7 +142,7 @@ const DSPOPCTemplate opcodes[] = {"LSR", 0x1440, 0xfec0, DSPInterpreter::lsr, &DSPEmitter::lsr, 1, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 1, 0, 0, 0x003f}}, false, false, false, false, true}, {"ASL", 0x1480, 0xfec0, DSPInterpreter::asl, &DSPEmitter::asl, 1, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 1, 0, 0, 0x003f}}, false, false, false, false, true}, {"ASR", 0x14c0, 0xfec0, DSPInterpreter::asr, &DSPEmitter::asr, 1, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_IMM, 1, 0, 0, 0x003f}}, false, false, false, false, true}, - + {"LSRN", 0x02ca, 0xffff, DSPInterpreter::lsrn, &DSPEmitter::lsrn, 1, 0, {}, false, false, false, false, true}, // discovered by ector! {"ASRN", 0x02cb, 0xffff, DSPInterpreter::asrn, &DSPEmitter::asrn, 1, 0, {}, false, false, false, false, true}, // discovered by ector! @@ -288,7 +288,7 @@ const DSPOPCTemplate opcodes[] = {"MOVPZ", 0xfe00, 0xfe00, DSPInterpreter::movpz, &DSPEmitter::movpz, 1, 1, {{P_ACC, 1, 0, 8, 0x0100}}, true, false, false, false, true}, }; -const DSPOPCTemplate cw = +const DSPOPCTemplate cw = {"CW", 0x0000, 0x0000, nop, NULL, 1, 1, {{P_VAL, 2, 0, 0, 0xffff}}, false, false, false, false, false}; // extended opcodes @@ -489,10 +489,10 @@ const char* pdname(u16 val) { static char tmpstr[12]; // nasty - for (int i = 0; i < (int)(sizeof(pdlabels) / sizeof(pdlabel_t)); i++) + for (auto& pdlabel : pdlabels) { - if (pdlabels[i].addr == val) - return pdlabels[i].name; + if (pdlabel.addr == val) + return pdlabel.name; } sprintf(tmpstr, "0x%04x", val); @@ -521,23 +521,22 @@ void InitInstructionTable() { // ext op table for (int i = 0; i < EXT_OPTABLE_SIZE; i++) + { extOpTable[i] = &cw; - for (int i = 0; i < EXT_OPTABLE_SIZE; i++) - { - for (int j = 0; j < opcodes_ext_size; j++) + for (auto& ext : opcodes_ext) { - u16 mask = opcodes_ext[j].opcode_mask; - if ((mask & i) == opcodes_ext[j].opcode) + u16 mask = ext.opcode_mask; + if ((mask & i) == ext.opcode) { if (extOpTable[i] == &cw) - extOpTable[i] = &opcodes_ext[j]; + extOpTable[i] = &ext; else { //if the entry already in the table //is a strict subset, allow it - if ((extOpTable[i]->opcode_mask | opcodes_ext[j].opcode_mask) != extOpTable[i]->opcode_mask) - ERROR_LOG(DSPLLE, "opcode ext table place %d already in use by %s when inserting %s", i, extOpTable[i]->name, opcodes_ext[j].name); + if ((extOpTable[i]->opcode_mask | ext.opcode_mask) != extOpTable[i]->opcode_mask) + ERROR_LOG(DSPLLE, "opcode ext table place %d already in use by %s when inserting %s", i, extOpTable[i]->name, ext.name); } } } @@ -546,18 +545,18 @@ void InitInstructionTable() // op table for (int i = 0; i < OPTABLE_SIZE; i++) opTable[i] = &cw; - + for (int i = 0; i < OPTABLE_SIZE; i++) { - for (int j = 0; j < opcodes_size; j++) + for (auto& opcode : opcodes) { - u16 mask = opcodes[j].opcode_mask; - if ((mask & i) == opcodes[j].opcode) + u16 mask = opcode.opcode_mask; + if ((mask & i) == opcode.opcode) { if (opTable[i] == &cw) - opTable[i] = &opcodes[j]; + opTable[i] = &opcode; else - ERROR_LOG(DSPLLE, "opcode table place %d already in use for %s", i, opcodes[j].name); + ERROR_LOG(DSPLLE, "opcode table place %d already in use for %s", i, opcode.name); } } } diff --git a/Source/Core/Core/Src/DSP/DSPTables.h b/Source/Core/Core/Src/DSP/DSPTables.h index fdad92bc2b..140b4b427b 100644 --- a/Source/Core/Core/Src/DSP/DSPTables.h +++ b/Source/Core/Core/Src/DSP/DSPTables.h @@ -29,7 +29,7 @@ enum partype_t P_ADDR_D = 0x0006, P_REG = 0x8000, P_REG04 = P_REG | 0x0400, // IX - P_REG08 = P_REG | 0x0800, + P_REG08 = P_REG | 0x0800, P_REG18 = P_REG | 0x1800, P_REGM18 = P_REG | 0x1810, // used in multiply instructions P_REG19 = P_REG | 0x1900, diff --git a/Source/Core/Core/Src/DSP/DspIntArithmetic.cpp b/Source/Core/Core/Src/DSP/DspIntArithmetic.cpp index 4d2b5be3ac..7de0327491 100644 --- a/Source/Core/Core/Src/DSP/DspIntArithmetic.cpp +++ b/Source/Core/Core/Src/DSP/DspIntArithmetic.cpp @@ -119,7 +119,7 @@ void cmp(const UDSPInstruction opc) s64 acc0 = dsp_get_long_acc(0); s64 acc1 = dsp_get_long_acc(1); s64 res = dsp_convert_long_acc(acc0 - acc1); - + Update_SR_Register64(res, isCarry2(acc0, res), isOverflow(acc0, -acc1, res)); // CF -> influence on ABS/0xa100 zeroWriteBackLog(); } @@ -139,7 +139,7 @@ void cmpar(const UDSPInstruction opc) s64 rr = (s16)g_dsp.r.ax[rreg-DSP_REG_AXH0].h; rr <<= 16; s64 res = dsp_convert_long_acc(sr - rr); - + Update_SR_Register64(res, isCarry2(sr, res), isOverflow(sr, -rr, res)); zeroWriteBackLog(); } @@ -147,7 +147,7 @@ void cmpar(const UDSPInstruction opc) // CMPI $amD, #I // 0000 001r 1000 0000 // iiii iiii iiii iiii -// Compares mid accumulator $acD.hm ($amD) with sign extended immediate value I. +// Compares mid accumulator $acD.hm ($amD) with sign extended immediate value I. // Although flags are being set regarding whole accumulator register. // // flags out: x-xx xxxx @@ -175,7 +175,7 @@ void cmpis(const UDSPInstruction opc) s64 acc = dsp_get_long_acc(areg); s64 val = (s8)opc; - val <<= 16; + val <<= 16; s64 res = dsp_convert_long_acc(acc - val); Update_SR_Register64(res, isCarry2(acc, res), isOverflow(acc, -val, res)); @@ -477,7 +477,7 @@ void addaxl(const UDSPInstruction opc) Update_SR_Register64((s64)res, isCarry(acc, res), isOverflow((s64)acc, (s64)acx, (s64)res)); } -// ADDI $amR, #I +// ADDI $amR, #I // 0000 001r 0000 0000 // iiii iiii iiii iiii // Adds immediate (16-bit sign extended) to mid accumulator $acD.hm. @@ -530,7 +530,7 @@ void incm(const UDSPInstruction opc) s64 res = acc + sub; zeroWriteBackLog(); - + dsp_set_long_acc(dreg, res); res = dsp_get_long_acc(dreg); Update_SR_Register64(res, isCarry(acc, res), isOverflow(acc, sub, res)); @@ -546,7 +546,7 @@ void inc(const UDSPInstruction opc) u8 dreg = (opc >> 8) & 0x1; s64 acc = dsp_get_long_acc(dreg); - s64 res = acc + 1; + s64 res = acc + 1; zeroWriteBackLog(); @@ -615,7 +615,7 @@ void subax(const UDSPInstruction opc) // SUB $acD, $ac(1-D) // 0101 110d xxxx xxxx -// Subtracts accumulator $ac(1-D) from accumulator register $acD. +// Subtracts accumulator $ac(1-D) from accumulator register $acD. // // flags out: x-xx xxxx void sub(const UDSPInstruction opc) @@ -667,9 +667,9 @@ void decm(const UDSPInstruction opc) s64 res = acc - sub; zeroWriteBackLog(); - + dsp_set_long_acc(dreg, res); - res = dsp_get_long_acc(dreg); + res = dsp_get_long_acc(dreg); Update_SR_Register64(res, isCarry2(acc, res), isOverflow(acc, -sub, res)); } @@ -702,7 +702,7 @@ void dec(const UDSPInstruction opc) void neg(const UDSPInstruction opc) { u8 dreg = (opc >> 8) & 0x1; - + s64 acc = dsp_get_long_acc(dreg); acc = 0 - acc; @@ -713,7 +713,7 @@ void neg(const UDSPInstruction opc) } // ABS $acD -// 1010 d001 xxxx xxxx +// 1010 d001 xxxx xxxx // absolute value of $acD // // flags out: --xx xx00 @@ -725,7 +725,7 @@ void abs(const UDSPInstruction opc) if (acc < 0) acc = 0 - acc; - + zeroWriteBackLog(); dsp_set_long_acc(dreg, acc); @@ -770,7 +770,7 @@ void movr(const UDSPInstruction opc) // MOVAX $acD, $axS // 0110 10sd xxxx xxxx -// Moves secondary accumulator $axS to accumulator $axD. +// Moves secondary accumulator $axS to accumulator $axD. // // flags out: --xx xx00 void movax(const UDSPInstruction opc) @@ -833,7 +833,7 @@ void lsr16(const UDSPInstruction opc) u64 acc = dsp_get_long_acc(areg); acc &= 0x000000FFFFFFFFFFULL; // Lop off the extraneous sign extension our 64-bit fake accum causes - acc >>= 16; + acc >>= 16; zeroWriteBackLog(); @@ -864,10 +864,10 @@ void asr16(const UDSPInstruction opc) // Logically shifts left accumulator $acR by number specified by value I. // // flags out: --xx xx00 -void lsl(const UDSPInstruction opc) +void lsl(const UDSPInstruction opc) { u8 rreg = (opc >> 8) & 0x01; - u16 shift = opc & 0x3f; + u16 shift = opc & 0x3f; u64 acc = dsp_get_long_acc(rreg); acc <<= shift; @@ -895,7 +895,7 @@ void lsr(const UDSPInstruction opc) shift = 0x40 - (opc & 0x3f); acc >>= shift; - + dsp_set_long_acc(rreg, (s64)acc); Update_SR_Register64(dsp_get_long_acc(rreg)); } @@ -912,7 +912,7 @@ void asl(const UDSPInstruction opc) u64 acc = dsp_get_long_acc(rreg); acc <<= shift; - + dsp_set_long_acc(rreg, acc); Update_SR_Register64(dsp_get_long_acc(rreg)); } @@ -949,7 +949,7 @@ void asr(const UDSPInstruction opc) // flags out: --xx xx00 void lsrn(const UDSPInstruction opc) { - s16 shift; + s16 shift; u16 accm = (u16)dsp_get_acc_m(1); u64 acc = dsp_get_long_acc(0); acc &= 0x000000FFFFFFFFFFULL; diff --git a/Source/Core/Core/Src/DSP/DspIntBranch.cpp b/Source/Core/Core/Src/DSP/DspIntBranch.cpp index a4c861c814..ecd1314e10 100644 --- a/Source/Core/Core/Src/DSP/DspIntBranch.cpp +++ b/Source/Core/Core/Src/DSP/DspIntBranch.cpp @@ -35,8 +35,8 @@ void call(const UDSPInstruction opc) // Generic callr implementation // CALLRcc $R // 0001 0111 rrr1 cccc -// Call function if condition cc has been met. Push program counter of -// instruction following "call" to call stack $st0. Set program counter to +// Call function if condition cc has been met. Push program counter of +// instruction following "call" to call stack $st0. Set program counter to // register $R. void callr(const UDSPInstruction opc) { @@ -87,7 +87,7 @@ void jmprcc(const UDSPInstruction opc) { u8 reg = (opc >> 5) & 0x7; g_dsp.pc = dsp_op_read_reg(reg); - } + } } // Generic ret implementation @@ -116,7 +116,7 @@ void rti(const UDSPInstruction opc) } // HALT -// 0000 0000 0020 0001 +// 0000 0000 0020 0001 // Stops execution of DSP code. Sets bit DSP_CR_HALT in register DREG_CR. void halt(const UDSPInstruction opc) { @@ -133,7 +133,7 @@ void halt(const UDSPInstruction opc) // continues at next opcode. void HandleLoop() { - // Handle looping hardware. + // Handle looping hardware. const u16 rCallAddress = g_dsp.r.st[0]; const u16 rLoopAddress = g_dsp.r.st[2]; u16& rLoopCounter = g_dsp.r.st[3]; @@ -254,7 +254,7 @@ void bloopi(const UDSPInstruction opc) u16 cnt = opc & 0xff; u16 loop_pc = dsp_fetch_code(); - if (cnt) + if (cnt) { dsp_reg_store_stack(0, g_dsp.pc); dsp_reg_store_stack(2, loop_pc); diff --git a/Source/Core/Core/Src/DSP/DspIntLoadStore.cpp b/Source/Core/Core/Src/DSP/DspIntLoadStore.cpp index b1a8f1b868..0b72b21290 100644 --- a/Source/Core/Core/Src/DSP/DspIntLoadStore.cpp +++ b/Source/Core/Core/Src/DSP/DspIntLoadStore.cpp @@ -13,15 +13,15 @@ namespace DSPInterpreter { // SRS @M, $(0x18+S) // 0010 1sss mmmm mmmm -// Move value from register $(0x18+D) to data memory pointed by address -// CR[0-7] | M. That is, the upper 8 bits of the address are the -// bottom 8 bits from CR, and the lower 8 bits are from the 8-bit immediate. +// Move value from register $(0x18+D) to data memory pointed by address +// CR[0-7] | M. That is, the upper 8 bits of the address are the +// bottom 8 bits from CR, and the lower 8 bits are from the 8-bit immediate. // Note: pc+=2 in duddie's doc seems wrong void srs(const UDSPInstruction opc) { u8 reg = ((opc >> 8) & 0x7) + 0x18; u16 addr = (g_dsp.r.cr << 8) | (opc & 0xFF); - + if (reg >= DSP_REG_ACM0) dsp_dmem_write(addr, dsp_op_read_reg_and_saturate(reg-DSP_REG_ACM0)); else @@ -97,7 +97,7 @@ void lrr(const UDSPInstruction opc) // LRRD $D, @$S // 0001 1000 1ssd dddd // Move value from data memory pointed by addressing register $S toregister $D. -// Decrement register $S. +// Decrement register $S. void lrrd(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; @@ -112,7 +112,7 @@ void lrrd(const UDSPInstruction opc) // LRRI $D, @$S // 0001 1001 0ssd dddd // Move value from data memory pointed by addressing register $S to register $D. -// Increment register $S. +// Increment register $S. void lrri(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; @@ -127,7 +127,7 @@ void lrri(const UDSPInstruction opc) // LRRN $D, @$S // 0001 1001 1ssd dddd // Move value from data memory pointed by addressing register $S to register $D. -// Add indexing register $(0x4+S) to register $S. +// Add indexing register $(0x4+S) to register $S. void lrrn(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; @@ -141,8 +141,8 @@ void lrrn(const UDSPInstruction opc) // SRR @$D, $S // 0001 1010 0dds ssss -// Store value from source register $S to a memory location pointed by -// addressing register $D. +// Store value from source register $S to a memory location pointed by +// addressing register $D. void srr(const UDSPInstruction opc) { u8 dreg = (opc >> 5) & 0x3; @@ -157,7 +157,7 @@ void srr(const UDSPInstruction opc) // SRRD @$D, $S // 0001 1010 1dds ssss // Store value from source register $S to a memory location pointed by -// addressing register $D. Decrement register $D. +// addressing register $D. Decrement register $D. void srrd(const UDSPInstruction opc) { u8 dreg = (opc >> 5) & 0x3; @@ -174,7 +174,7 @@ void srrd(const UDSPInstruction opc) // SRRI @$D, $S // 0001 1011 0dds ssss // Store value from source register $S to a memory location pointed by -// addressing register $D. Increment register $D. +// addressing register $D. Increment register $D. void srri(const UDSPInstruction opc) { u8 dreg = (opc >> 5) & 0x3; diff --git a/Source/Core/Core/Src/DSP/DspIntMisc.cpp b/Source/Core/Core/Src/DSP/DspIntMisc.cpp index 93d04d15b0..aec554d7fb 100644 --- a/Source/Core/Core/Src/DSP/DspIntMisc.cpp +++ b/Source/Core/Core/Src/DSP/DspIntMisc.cpp @@ -24,14 +24,14 @@ void mrr(const UDSPInstruction opc) dsp_op_write_reg(dreg, dsp_op_read_reg_and_saturate(sreg-DSP_REG_ACM0)); else dsp_op_write_reg(dreg, dsp_op_read_reg(sreg)); - + dsp_conditional_extend_accum(dreg); } // LRI $D, #I // 0000 0000 100d dddd // iiii iiii iiii iiii -// Load immediate value I to register $D. +// Load immediate value I to register $D. // // DSPSpy discovery: This, and possibly other instructions that load a // register, has a different behaviour in S40 mode if loaded to AC0.M: The @@ -47,7 +47,7 @@ void lri(const UDSPInstruction opc) // LRIS $(0x18+D), #I // 0000 1ddd iiii iiii -// Load immediate value I (8-bit sign extended) to accumulator register. +// Load immediate value I (8-bit sign extended) to accumulator register. void lris(const UDSPInstruction opc) { u8 reg = ((opc >> 8) & 0x7) + DSP_REG_AXL0; @@ -86,7 +86,7 @@ void iar(const UDSPInstruction opc) g_dsp.r.ar[opc & 0x3] = dsp_increment_addr_reg(opc & 0x3); } -// SUBARN $arD +// SUBARN $arD // 0000 0000 0000 11dd // Subtract indexing register $ixD from an addressing register $arD. // used only in IPL-NTSC ucode @@ -129,7 +129,7 @@ void sbset(const UDSPInstruction opc) g_dsp.r.sr |= (1 << bit); } -// This is a bunch of flag setters, flipping bits in SR. +// This is a bunch of flag setters, flipping bits in SR. void srbith(const UDSPInstruction opc) { zeroWriteBackLog(); diff --git a/Source/Core/Core/Src/DSP/DspIntMultiplier.cpp b/Source/Core/Core/Src/DSP/DspIntMultiplier.cpp index 5a1b98e4b7..a1380879e8 100644 --- a/Source/Core/Core/Src/DSP/DspIntMultiplier.cpp +++ b/Source/Core/Core/Src/DSP/DspIntMultiplier.cpp @@ -32,7 +32,7 @@ inline s64 dsp_get_multiply_prod(u16 a, u16 b, u8 sign) return prod; } - + inline s64 dsp_multiply(u16 a, u16 b, u8 sign = 0) { s64 prod = dsp_get_multiply_prod(a, b, sign); @@ -120,7 +120,7 @@ void movp(const UDSPInstruction opc) } // MOVNP $acD -// 0111 111d xxxx xxxx +// 0111 111d xxxx xxxx // Moves negative of multiply product from $prod register to accumulator // $acD register. // @@ -160,7 +160,7 @@ void movpz(const UDSPInstruction opc) // Adds secondary accumulator $axS to product register and stores result // in accumulator register. Low 16-bits of $acD ($acD.l) are set (round) to 0. // -// TODO: ugly code and still small error here (+/- 1 in .m - randomly) +// TODO: ugly code and still small error here (+/- 1 in .m - randomly) // flags out: --xx xx0x void addpaxz(const UDSPInstruction opc) { @@ -176,20 +176,20 @@ void addpaxz(const UDSPInstruction opc) dsp_set_long_acc(dreg, res); res = dsp_get_long_acc(dreg); - Update_SR_Register64(res, isCarry(oldprod, res), false); + Update_SR_Register64(res, isCarry(oldprod, res), false); } //---- // MULAXH // 1000 0011 xxxx xxxx -// Multiply $ax0.h by $ax0.h +// Multiply $ax0.h by $ax0.h void mulaxh(const UDSPInstruction opc) { s64 prod = dsp_multiply(dsp_get_ax_h(0), dsp_get_ax_h(0)); zeroWriteBackLog(); - + dsp_set_long_prod(prod); } @@ -206,7 +206,7 @@ void mul(const UDSPInstruction opc) u16 axl = dsp_get_ax_l(sreg); u16 axh = dsp_get_ax_h(sreg); s64 prod = dsp_multiply(axh, axl); - + zeroWriteBackLog(); dsp_set_long_prod(prod); @@ -277,7 +277,7 @@ void mulmvz(const UDSPInstruction opc) u16 axl = dsp_get_ax_l(sreg); u16 axh = dsp_get_ax_h(sreg); s64 prod = dsp_multiply(axl, axh); - + zeroWriteBackLog(); dsp_set_long_prod(prod); @@ -418,7 +418,7 @@ void mulcac(const UDSPInstruction opc) u16 accm = dsp_get_acc_m(sreg); u16 axh = dsp_get_ax_h(treg); s64 prod = dsp_multiply(accm, axh); - + zeroWriteBackLog(); dsp_set_long_prod(prod); @@ -444,7 +444,7 @@ void mulcmv(const UDSPInstruction opc) u16 accm = dsp_get_acc_m(sreg); u16 axh = dsp_get_ax_h(treg); s64 prod = dsp_multiply(accm, axh); - + zeroWriteBackLog(); dsp_set_long_prod(prod); @@ -457,7 +457,7 @@ void mulcmv(const UDSPInstruction opc) // (fixed possible bug in duddie's description, s->t) // Multiply mid part of accumulator register $acS.m by high part $axT.h of // secondary accumulator $axT (treat them both as signed). Move product -// register before multiplication to accumulator $acR, set (round) low part of +// register before multiplication to accumulator $acR, set (round) low part of // accumulator $acR.l to zero. // // flags out: --xx xx0x @@ -494,7 +494,7 @@ void maddx(const UDSPInstruction opc) u16 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0); u16 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1); s64 prod = dsp_multiply_add(val1, val2); - + zeroWriteBackLog(); dsp_set_long_prod(prod); @@ -547,7 +547,7 @@ void msubc(const UDSPInstruction opc) { u8 treg = (opc >> 8) & 0x1; u8 sreg = (opc >> 9) & 0x1; - + u16 accm = dsp_get_acc_m(sreg); u16 axh = dsp_get_ax_h(treg); s64 prod = dsp_multiply_sub(accm, axh); @@ -565,7 +565,7 @@ void msubc(const UDSPInstruction opc) void madd(const UDSPInstruction opc) { u8 sreg = (opc >> 8) & 0x1; - + u16 axl = dsp_get_ax_l(sreg); u16 axh = dsp_get_ax_h(sreg); s64 prod = dsp_multiply_add(axl, axh); @@ -583,7 +583,7 @@ void madd(const UDSPInstruction opc) void msub(const UDSPInstruction opc) { u8 sreg = (opc >> 8) & 0x1; - + u16 axl = dsp_get_ax_l(sreg); u16 axh = dsp_get_ax_h(sreg); s64 prod = dsp_multiply_sub(axl, axh); diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitArithmetic.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitArithmetic.cpp index bc8b4bb843..5e2dfe7c14 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitArithmetic.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitArithmetic.cpp @@ -77,7 +77,7 @@ void DSPEmitter::andcf(const UDSPInstruction opc) // u16 val = dsp_get_acc_m(reg); get_acc_m(reg); // Update_SR_LZ(((val & imm) == imm) ? true : false); -// if ((val & imm) == imm) +// if ((val & imm) == imm) // g_dsp.r.sr |= SR_LOGIC_ZERO; // else // g_dsp.r.sr &= ~SR_LOGIC_ZERO; @@ -117,7 +117,7 @@ void DSPEmitter::andf(const UDSPInstruction opc) // u16 val = dsp_get_acc_m(reg); get_acc_m(reg); // Update_SR_LZ(((val & imm) == 0) ? true : false); -// if ((val & imm) == 0) +// if ((val & imm) == 0) // g_dsp.r.sr |= SR_LOGIC_ZERO; // else // g_dsp.r.sr &= ~SR_LOGIC_ZERO; @@ -250,7 +250,7 @@ void DSPEmitter::cmpar(const UDSPInstruction opc) // CMPI $amD, #I // 0000 001r 1000 0000 // iiii iiii iiii iiii -// Compares mid accumulator $acD.hm ($amD) with sign extended immediate value I. +// Compares mid accumulator $acD.hm ($amD) with sign extended immediate value I. // Although flags are being set regarding whole accumulator register. // // flags out: x-xx xxxx @@ -791,7 +791,7 @@ void DSPEmitter::addaxl(const UDSPInstruction opc) #endif } -// ADDI $amR, #I +// ADDI $amR, #I // 0000 001r 0000 0000 // iiii iiii iiii iiii // Adds immediate (16-bit sign extended) to mid accumulator $acD.hm. @@ -1033,7 +1033,7 @@ void DSPEmitter::subax(const UDSPInstruction opc) // SUB $acD, $ac(1-D) // 0101 110d xxxx xxxx -// Subtracts accumulator $ac(1-D) from accumulator register $acD. +// Subtracts accumulator $ac(1-D) from accumulator register $acD. // // flags out: x-xx xxxx void DSPEmitter::sub(const UDSPInstruction opc) @@ -1125,7 +1125,7 @@ void DSPEmitter::decm(const UDSPInstruction opc) // s64 res = acc - sub; SUB(64, R(RAX), Imm32((u32)subtract)); // dsp_set_long_acc(dreg, res); -// res = dsp_get_long_acc(dreg); +// res = dsp_get_long_acc(dreg); // Update_SR_Register64(res, isCarry2(acc, res), isOverflow(acc, -subtract, res)); if (FlagsNeeded()) { @@ -1155,7 +1155,7 @@ void DSPEmitter::dec(const UDSPInstruction opc) u8 dreg = (opc >> 8) & 0x01; X64Reg tmp1; gpr.getFreeXReg(tmp1); -// s64 acc = dsp_get_long_acc(dreg); +// s64 acc = dsp_get_long_acc(dreg); get_long_acc(dreg, tmp1); MOV(64, R(RAX), R(tmp1)); // s64 res = acc - 1; @@ -1208,7 +1208,7 @@ void DSPEmitter::neg(const UDSPInstruction opc) } // ABS $acD -// 1010 d001 xxxx xxxx +// 1010 d001 xxxx xxxx // absolute value of $acD // // flags out: --xx xx00 @@ -1217,7 +1217,7 @@ void DSPEmitter::abs(const UDSPInstruction opc) #ifdef _M_X64 u8 dreg = (opc >> 11) & 0x1; -// s64 acc = dsp_get_long_acc(dreg); +// s64 acc = dsp_get_long_acc(dreg); get_long_acc(dreg); // if (acc < 0) acc = 0 - acc; CMP(64, R(RAX), Imm8(0)); @@ -1267,7 +1267,7 @@ void DSPEmitter::movr(const UDSPInstruction opc) // MOVAX $acD, $axS // 0110 10sd xxxx xxxx -// Moves secondary accumulator $axS to accumulator $axD. +// Moves secondary accumulator $axS to accumulator $axD. // // flags out: --xx xx00 void DSPEmitter::movax(const UDSPInstruction opc) @@ -1353,7 +1353,7 @@ void DSPEmitter::lsr16(const UDSPInstruction opc) // u64 acc = dsp_get_long_acc(areg); get_long_acc(areg); // acc &= 0x000000FFFFFFFFFFULL; // Lop off the extraneous sign extension our 64-bit fake accum causes -// acc >>= 16; +// acc >>= 16; SHR(64, R(RAX), Imm8(16)); AND(64, R(RAX), Imm32(0xffffff)); // dsp_set_long_acc(areg, (s64)acc); @@ -1399,11 +1399,11 @@ void DSPEmitter::asr16(const UDSPInstruction opc) // Logically shifts left accumulator $acR by number specified by value I. // // flags out: --xx xx00 -void DSPEmitter::lsl(const UDSPInstruction opc) +void DSPEmitter::lsl(const UDSPInstruction opc) { #ifdef _M_X64 u8 rreg = (opc >> 8) & 0x01; - u16 shift = opc & 0x3f; + u16 shift = opc & 0x3f; // u64 acc = dsp_get_long_acc(rreg); get_long_acc(rreg); @@ -1448,7 +1448,7 @@ void DSPEmitter::lsr(const UDSPInstruction opc) // acc >>= shift; SHR(64, R(RAX), Imm8(shift + 24)); } - + // dsp_set_long_acc(rreg, (s64)acc); set_long_acc(rreg); // Update_SR_Register64(dsp_get_long_acc(rreg)); @@ -1531,7 +1531,7 @@ void DSPEmitter::asr(const UDSPInstruction opc) void DSPEmitter::lsrn(const UDSPInstruction opc) { #ifdef _M_X64 -// s16 shift; +// s16 shift; // u16 accm = (u16)dsp_get_acc_m(1); get_acc_m(1); // u64 acc = dsp_get_long_acc(0); diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitBranch.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitBranch.cpp index f368560112..49c94114b2 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitBranch.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitBranch.cpp @@ -38,11 +38,11 @@ static void ReJitConditional(const UDSPInstruction opc, DSPEmitter& emitter) emitter.TEST(16, R(EAX), Imm16(0x10)); break; case 0x4: // NZ - Not Zero - case 0x5: // Z - Zero + case 0x5: // Z - Zero emitter.TEST(16, R(EAX), Imm16(SR_ARITH_ZERO)); break; case 0x6: // NC - Not carry - case 0x7: // C - Carry + case 0x7: // C - Carry emitter.TEST(16, R(EAX), Imm16(SR_CARRY)); break; case 0x8: // ? - Not over s32 @@ -200,8 +200,8 @@ void r_callr(const UDSPInstruction opc, DSPEmitter& emitter) // Generic callr implementation // CALLRcc $R // 0001 0111 rrr1 cccc -// Call function if condition cc has been met. Push program counter of -// instruction following "call" to call stack $st0. Set program counter to +// Call function if condition cc has been met. Push program counter of +// instruction following "call" to call stack $st0. Set program counter to // register $R. // NOTE: Cannot use Default(opc) here because of the need to write branch exit void DSPEmitter::callr(const UDSPInstruction opc) @@ -261,7 +261,7 @@ void DSPEmitter::rti(const UDSPInstruction opc) } // HALT -// 0000 0000 0020 0001 +// 0000 0000 0020 0001 // Stops execution of DSP code. Sets bit DSP_CR_HALT in register DREG_CR. void DSPEmitter::halt(const UDSPInstruction opc) { @@ -429,7 +429,7 @@ void DSPEmitter::bloopi(const UDSPInstruction opc) // u16 loop_pc = dsp_fetch_code(); u16 loop_pc = dsp_imem_read(compilePC + 1); - if (cnt) + if (cnt) { MOV(16, R(RDX), Imm16(compilePC + 2)); dsp_reg_store_stack(0); diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitCCUtil.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitCCUtil.cpp index e8cd349d1c..62540ffe4f 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitCCUtil.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitCCUtil.cpp @@ -220,8 +220,8 @@ void DSPEmitter::Update_SR_Register16_OverS32(Gen::X64Reg val) //void DSPEmitter::Update_SR_LZ(bool value) { -// if (value == true) -// g_dsp.r[DSP_REG_SR] |= SR_LOGIC_ZERO; +// if (value == true) +// g_dsp.r[DSP_REG_SR] |= SR_LOGIC_ZERO; // else // g_dsp.r[DSP_REG_SR] &= ~SR_LOGIC_ZERO; //} @@ -276,11 +276,11 @@ void DSPEmitter::Update_SR_Register16_OverS32(Gen::X64Reg val) // return isLess() || isZero(); // case 0x4: // NZ - Not Zero // return !isZero(); -// case 0x5: // Z - Zero +// case 0x5: // Z - Zero // return isZero(); // case 0x6: // NC - Not carry // return !isCarry(); -// case 0x7: // C - Carry +// case 0x7: // C - Carry // return isCarry(); // case 0x8: // ? - Not over s32 // return !isOverS32(); diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitExtOps.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitExtOps.cpp index c76daf250c..f18bc3de84 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitExtOps.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitExtOps.cpp @@ -44,8 +44,8 @@ void DSPEmitter::ir(const UDSPInstruction opc) // Add corresponding indexing register $ixR to addressing register $arR. void DSPEmitter::nr(const UDSPInstruction opc) { - u8 reg = opc & 0x3; - + u8 reg = opc & 0x3; + increase_addr_reg(reg, reg); } @@ -106,7 +106,7 @@ void DSPEmitter::sn(const UDSPInstruction opc) // L $axD.D, @$arS // xxxx xxxx 01dd d0ss -// Load $axD.D/$acD.D with value from memory pointed by register $arS. +// Load $axD.D/$acD.D with value from memory pointed by register $arS. // Post increment register $arS. void DSPEmitter::l(const UDSPInstruction opc) { @@ -130,7 +130,7 @@ void DSPEmitter::l(const UDSPInstruction opc) // LN $axD.D, @$arS // xxxx xxxx 01dd d0ss -// Load $axD.D/$acD.D with value from memory pointed by register $arS. +// Load $axD.D/$acD.D with value from memory pointed by register $arS. // Add indexing register $ixS to register $arS. void DSPEmitter::ln(const UDSPInstruction opc) { @@ -174,7 +174,7 @@ void DSPEmitter::ls(const UDSPInstruction opc) pushExtValueFromMem(dreg, DSP_REG_AR0); increment_addr_reg(DSP_REG_AR3); - increment_addr_reg(DSP_REG_AR0); + increment_addr_reg(DSP_REG_AR0); } @@ -199,7 +199,7 @@ void DSPEmitter::lsn(const UDSPInstruction opc) gpr.putXReg(tmp1); pushExtValueFromMem(dreg, DSP_REG_AR0); - + increment_addr_reg(DSP_REG_AR3); increase_addr_reg(DSP_REG_AR0, DSP_REG_AR0); } diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitLoadStore.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitLoadStore.cpp index 74e04b3e55..765ecb39e4 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitLoadStore.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitLoadStore.cpp @@ -12,9 +12,9 @@ using namespace Gen; // SRS @M, $(0x18+S) // 0010 1sss mmmm mmmm -// Move value from register $(0x18+D) to data memory pointed by address -// CR[0-7] | M. That is, the upper 8 bits of the address are the -// bottom 8 bits from CR, and the lower 8 bits are from the 8-bit immediate. +// Move value from register $(0x18+D) to data memory pointed by address +// CR[0-7] | M. That is, the upper 8 bits of the address are the +// bottom 8 bits from CR, and the lower 8 bits are from the 8-bit immediate. // Note: pc+=2 in duddie's doc seems wrong void DSPEmitter::srs(const UDSPInstruction opc) { @@ -130,7 +130,7 @@ void DSPEmitter::lrr(const UDSPInstruction opc) // LRRD $D, @$S // 0001 1000 1ssd dddd // Move value from data memory pointed by addressing register $S toregister $D. -// Decrement register $S. +// Decrement register $S. void DSPEmitter::lrrd(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; @@ -152,7 +152,7 @@ void DSPEmitter::lrrd(const UDSPInstruction opc) // LRRI $D, @$S // 0001 1001 0ssd dddd // Move value from data memory pointed by addressing register $S to register $D. -// Increment register $S. +// Increment register $S. void DSPEmitter::lrri(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; @@ -174,7 +174,7 @@ void DSPEmitter::lrri(const UDSPInstruction opc) // LRRN $D, @$S // 0001 1001 1ssd dddd // Move value from data memory pointed by addressing register $S to register $D. -// Add indexing register $(0x4+S) to register $S. +// Add indexing register $(0x4+S) to register $S. void DSPEmitter::lrrn(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; @@ -195,8 +195,8 @@ void DSPEmitter::lrrn(const UDSPInstruction opc) // SRR @$D, $S // 0001 1010 0dds ssss -// Store value from source register $S to a memory location pointed by -// addressing register $D. +// Store value from source register $S to a memory location pointed by +// addressing register $D. void DSPEmitter::srr(const UDSPInstruction opc) { u8 dreg = (opc >> 5) & 0x3; @@ -215,7 +215,7 @@ void DSPEmitter::srr(const UDSPInstruction opc) // SRRD @$D, $S // 0001 1010 1dds ssss // Store value from source register $S to a memory location pointed by -// addressing register $D. Decrement register $D. +// addressing register $D. Decrement register $D. void DSPEmitter::srrd(const UDSPInstruction opc) { u8 dreg = (opc >> 5) & 0x3; @@ -236,7 +236,7 @@ void DSPEmitter::srrd(const UDSPInstruction opc) // SRRI @$D, $S // 0001 1011 0dds ssss // Store value from source register $S to a memory location pointed by -// addressing register $D. Increment register $D. +// addressing register $D. Increment register $D. void DSPEmitter::srri(const UDSPInstruction opc) { u8 dreg = (opc >> 5) & 0x3; diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitMisc.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitMisc.cpp index bfcb6a6e44..6da5b646f4 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitMisc.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitMisc.cpp @@ -80,7 +80,7 @@ void DSPEmitter::iar(const UDSPInstruction opc) increment_addr_reg(opc & 0x3); } -// SUBARN $arD +// SUBARN $arD // 0000 0000 0000 11dd // Subtract indexing register $ixD from an addressing register $arD. // used only in IPL-NTSC ucode @@ -110,7 +110,7 @@ void DSPEmitter::addarn(const UDSPInstruction opc) void DSPEmitter::setCompileSR(u16 bit) { - + // g_dsp.r[DSP_REG_SR] |= bit OpArg sr_reg; gpr.getReg(DSP_REG_SR,sr_reg); @@ -122,7 +122,7 @@ void DSPEmitter::setCompileSR(u16 bit) void DSPEmitter::clrCompileSR(u16 bit) { - + // g_dsp.r[DSP_REG_SR] &= bit OpArg sr_reg; gpr.getReg(DSP_REG_SR,sr_reg); diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitMultiplier.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitMultiplier.cpp index 3cb86e38f9..00cec82e76 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitMultiplier.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitMultiplier.cpp @@ -209,7 +209,7 @@ void DSPEmitter::movp(const UDSPInstruction opc) } // MOVNP $acD -// 0111 111d xxxx xxxx +// 0111 111d xxxx xxxx // Moves negative of multiply product from $prod register to accumulator // $acD register. @@ -286,7 +286,7 @@ void DSPEmitter::addpaxz(const UDSPInstruction opc) // s64 oldprod = dsp_get_long_prod(); // dsp_set_long_acc(dreg, res); // res = dsp_get_long_acc(dreg); -// Update_SR_Register64(res, isCarry(oldprod, res), false); +// Update_SR_Register64(res, isCarry(oldprod, res), false); if (FlagsNeeded()) { get_long_prod(RDX); @@ -308,7 +308,7 @@ void DSPEmitter::addpaxz(const UDSPInstruction opc) // MULAXH // 1000 0011 xxxx xxxx -// Multiply $ax0.h by $ax0.h +// Multiply $ax0.h by $ax0.h void DSPEmitter::mulaxh(const UDSPInstruction opc) { #ifdef _M_X64 @@ -702,7 +702,7 @@ void DSPEmitter::mulcmv(const UDSPInstruction opc) // (fixed possible bug in duddie's description, s->t) // Multiply mid part of accumulator register $acS.m by high part $axT.h of // secondary accumulator $axT (treat them both as signed). Move product -// register before multiplication to accumulator $acR, set (round) low part of +// register before multiplication to accumulator $acR, set (round) low part of // accumulator $acR.l to zero. // flags out: --xx xx0x diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp b/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp index 386c32d8bc..6950daa6d1 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.cpp @@ -75,10 +75,10 @@ static void *reg_ptr(int reg) DSPJitRegCache::DSPJitRegCache(DSPEmitter &_emitter) : emitter(_emitter), temporary(false), merged(false) { - for(unsigned int i = 0; i < NUMXREGS; i++) + for(auto& xreg : xregs) { - xregs[i].guest_reg = DSP_REG_STATIC; - xregs[i].pushed = false; + xreg.guest_reg = DSP_REG_STATIC; + xreg.pushed = false; } xregs[RAX].guest_reg = DSP_REG_STATIC;// reserved for MUL/DIV @@ -449,9 +449,9 @@ void DSPJitRegCache::pushRegs() } int push_count = 0; - for(unsigned int i = 0; i < NUMXREGS; i++) + for(auto& xreg : xregs) { - if (xregs[i].guest_reg == DSP_REG_USED) + if (xreg.guest_reg == DSP_REG_USED) push_count++; } @@ -503,9 +503,9 @@ void DSPJitRegCache::popRegs() { emitter.MOV(32, M(&ebp_store), R(EBP)); #endif int push_count = 0; - for(unsigned int i = 0; i < NUMXREGS; i++) + for(auto& xreg : xregs) { - if (xregs[i].pushed) + if (xreg.pushed) push_count++; } @@ -613,7 +613,7 @@ void DSPJitRegCache::movToHostReg(int reg, bool load) tmp = regs[reg].host_reg; else tmp = findSpillFreeXReg(); - + if (tmp == INVALID_REG) return; @@ -1037,11 +1037,11 @@ void DSPJitRegCache::spillXReg(X64Reg reg) X64Reg DSPJitRegCache::findFreeXReg() { - for(unsigned int i = 0; i < sizeof(alloc_order)/sizeof(alloc_order[0]); i++) + for(auto& x : alloc_order) { - if (xregs[alloc_order[i]].guest_reg == DSP_REG_NONE) + if (xregs[x].guest_reg == DSP_REG_NONE) { - return alloc_order[i]; + return x; } } return INVALID_REG; diff --git a/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.h b/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.h index 727361b828..075be9d99d 100644 --- a/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.h +++ b/Source/Core/Core/Src/DSP/Jit/DSPJitRegCache.h @@ -48,7 +48,7 @@ private: int guest_reg; //including DSPJitRegSpecial bool pushed; }; - + struct DynamicReg { Gen::OpArg loc; diff --git a/Source/Core/Core/Src/DSP/LabelMap.cpp b/Source/Core/Core/Src/DSP/LabelMap.cpp index a5e6e1b6dd..1c836e7a69 100644 --- a/Source/Core/Core/Src/DSP/LabelMap.cpp +++ b/Source/Core/Core/Src/DSP/LabelMap.cpp @@ -27,7 +27,7 @@ void LabelMap::RegisterDefaults() void LabelMap::RegisterLabel(const std::string &label, u16 lval, LabelType type) { u16 old_value; - if (GetLabelValue(label, &old_value) && old_value != lval) + if (GetLabelValue(label, &old_value) && old_value != lval) { printf("WARNING: Redefined label %s to %04x - old value %04x\n", label.c_str(), lval, old_value); @@ -49,20 +49,20 @@ void LabelMap::DeleteLabel(const std::string &label) } } -bool LabelMap::GetLabelValue(const std::string &label, u16 *value, LabelType type) const +bool LabelMap::GetLabelValue(const std::string &name, u16 *value, LabelType type) const { - for (u32 i = 0; i < labels.size(); i++) + for (auto& label : labels) { - if (!label.compare(labels[i].name)) + if (!name.compare(label.name)) { - if (type & labels[i].type) + if (type & label.type) { - *value = labels[i].addr; + *value = label.addr; return true; } else { - printf("WARNING: Wrong label type requested. %s\n", label.c_str()); + printf("WARNING: Wrong label type requested. %s\n", name.c_str()); } } } diff --git a/Source/Core/Core/Src/DSP/assemble.cpp b/Source/Core/Core/Src/DSP/assemble.cpp index 8deef98ed9..7ae9346f29 100644 --- a/Source/Core/Core/Src/DSP/assemble.cpp +++ b/Source/Core/Core/Src/DSP/assemble.cpp @@ -78,7 +78,7 @@ static const char *err_string[] = "Number out of range" }; -DSPAssembler::DSPAssembler(const AssemblerSettings &settings) : +DSPAssembler::DSPAssembler(const AssemblerSettings &settings) : gdg_buffer(NULL), m_cur_addr(0), m_cur_pass(0), @@ -99,7 +99,7 @@ bool DSPAssembler::Assemble(const char *text, std::vector &code, std::vecto if (line_numbers) line_numbers->clear(); const char *fname = "tmp.asm"; - if (!File::WriteStringToFile(true, text, fname)) + if (!File::WriteStringToFile(text, fname)) return false; InitPass(1); if (!AssembleFile(fname, 1)) @@ -150,7 +150,7 @@ void DSPAssembler::ShowError(err_t err_code, const char *extra_info) if (m_current_param == 0) buf_ptr += sprintf(buf_ptr, "ERROR: %s Line: %d : %s\n", err_string[err_code], code_line, extra_info); - else + else buf_ptr += sprintf(buf_ptr, "ERROR: %s Line: %d Param: %d : %s\n", err_string[err_code], code_line, m_current_param, extra_info); last_error_str = error_buffer; @@ -525,7 +525,7 @@ bool DSPAssembler::VerifyParams(const opc_t *opc, param_t *par, int count, bool // modified by Hermes: test the register range switch ((unsigned)opc->params[i].type) - { + { case P_REG18: case P_REG19: case P_REG1A: @@ -775,27 +775,27 @@ bool DSPAssembler::AssembleFile(const char *fname, int pass) fsrc.getline(line, LINEBUF_SIZE); if(fsrc.fail()) break; - + cur_line = line; //printf("A: %s\n", line); code_line++; param_t params[10] = {{0, P_NONE, NULL}}; param_t params_ext[10] = {{0, P_NONE, NULL}}; - + bool upper = true; for (int i = 0; i < LINEBUF_SIZE; i++) { char c = line[i]; // This stuff handles /**/ and // comments. - // modified by Hermes : added // and /* */ for long commentaries + // modified by Hermes : added // and /* */ for long commentaries if (c == '/') { if (i < 1023) { if (line[i+1] == '/') c = 0x00; - else if (line[i+1] == '*') + else if (line[i+1] == '*') { // toggle comment mode. disable_text = !disable_text; @@ -916,7 +916,7 @@ bool DSPAssembler::AssembleFile(const char *fname, int pass) { char *tmpstr; u32 thisCodeline = code_line; - + if (include_dir.size()) { tmpstr = (char *)malloc(include_dir.size() + strlen(params[0].str) + 2); @@ -927,7 +927,7 @@ bool DSPAssembler::AssembleFile(const char *fname, int pass) tmpstr = (char *)malloc(strlen(params[0].str) + 1); strcpy(tmpstr, params[0].str); } - + AssembleFile(tmpstr, pass); code_line = thisCodeline; diff --git a/Source/Core/Core/Src/DSP/assemble.h b/Source/Core/Core/Src/DSP/assemble.h index f140d0e69e..5a15ed2ded 100644 --- a/Source/Core/Core/Src/DSP/assemble.h +++ b/Source/Core/Core/Src/DSP/assemble.h @@ -119,7 +119,7 @@ private: u32 m_cur_addr; int m_totalSize; u8 m_cur_pass; - + LabelMap labels; u32 code_line; diff --git a/Source/Core/Core/Src/DSPEmulator.cpp b/Source/Core/Core/Src/DSPEmulator.cpp index 96e1a1107e..52cae0d492 100644 --- a/Source/Core/Core/Src/DSPEmulator.cpp +++ b/Source/Core/Core/Src/DSPEmulator.cpp @@ -7,7 +7,7 @@ #include "HW/DSPLLE/DSPLLE.h" #include "HW/DSPHLE/DSPHLE.h" -DSPEmulator *CreateDSPEmulator(bool HLE) +DSPEmulator *CreateDSPEmulator(bool HLE) { if (HLE) { diff --git a/Source/Core/Core/Src/DSPEmulator.h b/Source/Core/Core/Src/DSPEmulator.h index 6df274d757..45b2b30c8c 100644 --- a/Source/Core/Core/Src/DSPEmulator.h +++ b/Source/Core/Core/Src/DSPEmulator.h @@ -35,6 +35,7 @@ public: protected: SoundStream *soundStream; + void *m_hWnd; }; DSPEmulator *CreateDSPEmulator(bool HLE); diff --git a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp index dc8f0d9adf..d4f1a4044f 100644 --- a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp +++ b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp @@ -35,7 +35,7 @@ void AddAutoBreakpoints() // Returns callstack "formatted for debugging" - meaning that it // includes LR as the last item, and all items are the last step, // instead of "pointing ahead" -bool GetCallstack(std::vector &output) +bool GetCallstack(std::vector &output) { if (Core::GetState() == Core::CORE_UNINITIALIZED) return false; @@ -90,9 +90,9 @@ void PrintCallstack() u32 addr = Memory::ReadUnchecked_U32(PowerPC::ppcState.gpr[1]); // SP printf("== STACK TRACE - SP = %08x ==", PowerPC::ppcState.gpr[1]); - + if (LR == 0) { - printf(" LR = 0 - this is bad"); + printf(" LR = 0 - this is bad"); } int count = 1; if (g_symbolDB.GetDescription(PowerPC::ppcState.pc) != g_symbolDB.GetDescription(LR)) @@ -117,16 +117,16 @@ void PrintCallstack(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level) { u32 addr = Memory::ReadUnchecked_U32(PowerPC::ppcState.gpr[1]); // SP - GENERIC_LOG(type, level, "== STACK TRACE - SP = %08x ==", + GENERIC_LOG(type, level, "== STACK TRACE - SP = %08x ==", PowerPC::ppcState.gpr[1]); if (LR == 0) { - GENERIC_LOG(type, level, " LR = 0 - this is bad"); + GENERIC_LOG(type, level, " LR = 0 - this is bad"); } int count = 1; if (g_symbolDB.GetDescription(PowerPC::ppcState.pc) != g_symbolDB.GetDescription(LR)) { - GENERIC_LOG(type, level, " * %s [ LR = %08x ]", + GENERIC_LOG(type, level, " * %s [ LR = %08x ]", g_symbolDB.GetDescription(LR), LR); count++; } @@ -145,7 +145,7 @@ void PrintCallstack(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level) void PrintDataBuffer(LogTypes::LOG_TYPE type, u8* _pData, size_t _Size, const char* _title) { - GENERIC_LOG(type, LogTypes::LDEBUG, "%s", _title); + GENERIC_LOG(type, LogTypes::LDEBUG, "%s", _title); for (u32 j = 0; j < _Size;) { std::string Temp; diff --git a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h index fac79b2959..2d470e2059 100644 --- a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h +++ b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h @@ -13,7 +13,7 @@ namespace Dolphin_Debugger { -struct CallstackEntry +struct CallstackEntry { std::string Name; u32 vAddress; diff --git a/Source/Core/Core/Src/Debugger/Dump.cpp b/Source/Core/Core/Src/Debugger/Dump.cpp index 8a9a87c2b8..8c4a23ca1a 100644 --- a/Source/Core/Core/Src/Debugger/Dump.cpp +++ b/Source/Core/Core/Src/Debugger/Dump.cpp @@ -37,7 +37,7 @@ CDump::GetNumberOfSteps(void) return (int)(m_size / STRUCTUR_SIZE); } -u32 +u32 CDump::GetGPR(int _step, int _gpr) { u32 offset = _step * STRUCTUR_SIZE; @@ -48,7 +48,7 @@ CDump::GetGPR(int _step, int _gpr) return Read32(offset + OFFSET_GPR + (_gpr * 4)); } -u32 +u32 CDump::GetPC(int _step) { u32 offset = _step * STRUCTUR_SIZE; @@ -59,7 +59,7 @@ CDump::GetPC(int _step) return Read32(offset + OFFSET_PC); } -u32 +u32 CDump::Read32(u32 _pos) { u32 result = (m_pData[_pos+0] << 24) | diff --git a/Source/Core/Core/Src/Debugger/Dump.h b/Source/Core/Core/Src/Debugger/Dump.h index d2764714c0..57244c2572 100644 --- a/Source/Core/Core/Src/Debugger/Dump.h +++ b/Source/Core/Core/Src/Debugger/Dump.h @@ -17,7 +17,7 @@ public: CDump(const char* _szFilename); ~CDump(); - + int GetNumberOfSteps(); u32 GetGPR(int _step, int _gpr); u32 GetPC(int _step); diff --git a/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp b/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp index f2e36ee1ee..4b224d5677 100644 --- a/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp +++ b/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp @@ -15,7 +15,7 @@ #include "../PowerPC/JitCommon/JitBase.h" #include "../PowerPC/PPCSymbolDB.h" -void PPCDebugInterface::disasm(unsigned int address, char *dest, int max_size) +void PPCDebugInterface::disasm(unsigned int address, char *dest, int max_size) { // Memory::ReadUnchecked_U32 seemed to crash on shutdown if (PowerPC::GetState() == PowerPC::CPU_POWERDOWN) return; @@ -93,7 +93,7 @@ bool PPCDebugInterface::isAlive() return Core::GetState() != Core::CORE_UNINITIALIZED; } -bool PPCDebugInterface::isBreakpoint(unsigned int address) +bool PPCDebugInterface::isBreakpoint(unsigned int address) { return PowerPC::breakpoints.IsAddressBreakPoint(address); } @@ -146,7 +146,7 @@ void PPCDebugInterface::toggleMemCheck(unsigned int address) PowerPC::memchecks.Remove(address); } -void PPCDebugInterface::insertBLR(unsigned int address, unsigned int value) +void PPCDebugInterface::insertBLR(unsigned int address, unsigned int value) { Memory::Write_U32(value, address); } @@ -165,7 +165,7 @@ int PPCDebugInterface::getColor(unsigned int address) if (!Memory::IsRAMAddress(address, true, true)) return 0xeeeeee; static const int colors[6] = - { + { 0xd0FFFF, // light cyan 0xFFd0d0, // light red 0xd8d8FF, // light blue @@ -183,22 +183,22 @@ int PPCDebugInterface::getColor(unsigned int address) // ============= -std::string PPCDebugInterface::getDescription(unsigned int address) +std::string PPCDebugInterface::getDescription(unsigned int address) { return g_symbolDB.GetDescription(address); } -unsigned int PPCDebugInterface::getPC() +unsigned int PPCDebugInterface::getPC() { return PowerPC::ppcState.pc; } -void PPCDebugInterface::setPC(unsigned int address) +void PPCDebugInterface::setPC(unsigned int address) { PowerPC::ppcState.pc = address; } -void PPCDebugInterface::showJitResults(unsigned int address) +void PPCDebugInterface::showJitResults(unsigned int address) { Host_ShowJitResults(address); } diff --git a/Source/Core/Core/Src/Debugger/PPCDebugInterface.h b/Source/Core/Core/Src/Debugger/PPCDebugInterface.h index e7d08ddd3a..71ab0d79c6 100644 --- a/Source/Core/Core/Src/Debugger/PPCDebugInterface.h +++ b/Source/Core/Core/Src/Debugger/PPCDebugInterface.h @@ -14,34 +14,34 @@ class PPCDebugInterface : public DebugInterface { public: - PPCDebugInterface(){} - virtual void disasm(unsigned int address, char *dest, int max_size); - virtual void getRawMemoryString(int memory, unsigned int address, char *dest, int max_size); - virtual int getInstructionSize(int /*instruction*/) {return 4;} - virtual bool isAlive(); - virtual bool isBreakpoint(unsigned int address); - virtual void setBreakpoint(unsigned int address); - virtual void clearBreakpoint(unsigned int address); - virtual void clearAllBreakpoints(); - virtual void toggleBreakpoint(unsigned int address); - virtual bool isMemCheck(unsigned int address); - virtual void toggleMemCheck(unsigned int address); - virtual unsigned int readMemory(unsigned int address); + PPCDebugInterface(){} + virtual void disasm(unsigned int address, char *dest, int max_size) override; + virtual void getRawMemoryString(int memory, unsigned int address, char *dest, int max_size) override; + virtual int getInstructionSize(int /*instruction*/) override {return 4;} + virtual bool isAlive() override; + virtual bool isBreakpoint(unsigned int address) override; + virtual void setBreakpoint(unsigned int address) override; + virtual void clearBreakpoint(unsigned int address) override; + virtual void clearAllBreakpoints() override; + virtual void toggleBreakpoint(unsigned int address) override; + virtual bool isMemCheck(unsigned int address) override; + virtual void toggleMemCheck(unsigned int address) override; + virtual unsigned int readMemory(unsigned int address) override; enum { EXTRAMEM_ARAM = 1, }; - virtual unsigned int readExtraMemory(int memory, unsigned int address); - virtual unsigned int readInstruction(unsigned int address); - virtual unsigned int getPC(); - virtual void setPC(unsigned int address); - virtual void step() {} - virtual void breakNow(); - virtual void runToBreakpoint(); - virtual void insertBLR(unsigned int address, unsigned int value); - virtual int getColor(unsigned int address); - virtual std::string getDescription(unsigned int address); - virtual void showJitResults(u32 address); + virtual unsigned int readExtraMemory(int memory, unsigned int address) override; + virtual unsigned int readInstruction(unsigned int address) override; + virtual unsigned int getPC() override; + virtual void setPC(unsigned int address) override; + virtual void step() override {} + virtual void breakNow() override; + virtual void runToBreakpoint() override; + virtual void insertBLR(unsigned int address, unsigned int value) override; + virtual int getColor(unsigned int address) override; + virtual std::string getDescription(unsigned int address) override; + virtual void showJitResults(u32 address) override; }; #endif diff --git a/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp index 233dbbbb4a..2bdbd88074 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoAnalyzer.cpp @@ -124,12 +124,12 @@ void LoadCPReg(u32 subCmd, u32 value, CPMemory &cpMem) u32 CalculateVertexSize(int vatIndex, const CPMemory &cpMem) { u32 vertexSize = 0; - + int sizes[21]; CalculateVertexElementSizes(sizes, vatIndex, cpMem); - for (int i = 0; i < 21; ++i) - vertexSize += sizes[i]; + for (auto& size : sizes) + vertexSize += size; return vertexSize; } @@ -145,14 +145,14 @@ void CalculateVertexElementSizes(int sizes[], int vatIndex, const CPMemory &cpMe const u32 tcElements[8] = { - vtxAttr.g0.Tex0CoordElements, vtxAttr.g1.Tex1CoordElements, vtxAttr.g1.Tex2CoordElements, + vtxAttr.g0.Tex0CoordElements, vtxAttr.g1.Tex1CoordElements, vtxAttr.g1.Tex2CoordElements, vtxAttr.g1.Tex3CoordElements, vtxAttr.g1.Tex4CoordElements, vtxAttr.g2.Tex5CoordElements, vtxAttr.g2.Tex6CoordElements, vtxAttr.g2.Tex7CoordElements }; const u32 tcFormat[8] = { - vtxAttr.g0.Tex0CoordFormat, vtxAttr.g1.Tex1CoordFormat, vtxAttr.g1.Tex2CoordFormat, + vtxAttr.g0.Tex0CoordFormat, vtxAttr.g1.Tex1CoordFormat, vtxAttr.g1.Tex2CoordFormat, vtxAttr.g1.Tex3CoordFormat, vtxAttr.g1.Tex4CoordFormat, vtxAttr.g2.Tex5CoordFormat, vtxAttr.g2.Tex6CoordFormat, vtxAttr.g2.Tex7CoordFormat }; @@ -171,7 +171,7 @@ void CalculateVertexElementSizes(int sizes[], int vatIndex, const CPMemory &cpMe // Normals if (vtxDesc.Normal != NOT_PRESENT) { - sizes[10] = VertexLoader_Normal::GetSize(vtxDesc.Normal, vtxAttr.g0.NormalFormat, vtxAttr.g0.NormalElements, vtxAttr.g0.NormalIndex3); + sizes[10] = VertexLoader_Normal::GetSize(vtxDesc.Normal, vtxAttr.g0.NormalFormat, vtxAttr.g0.NormalElements, vtxAttr.g0.NormalIndex3); } else { diff --git a/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp b/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp index ebf19a07f8..118511af92 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoDataFile.cpp @@ -17,12 +17,10 @@ FifoDataFile::FifoDataFile() : FifoDataFile::~FifoDataFile() { - for (unsigned int frameIdx = 0; frameIdx < m_Frames.size(); ++frameIdx) + for (auto& frame : m_Frames) { - FifoFrameInfo &frame = m_Frames[frameIdx]; - - for (unsigned int i = 0; i < frame.memoryUpdates.size(); ++i) - delete []frame.memoryUpdates[i].data; + for (auto& update : frame.memoryUpdates) + delete []update.data; delete []frame.fifoData; } @@ -54,7 +52,7 @@ bool FifoDataFile::Save(const char *filename) // Add space for frame list u64 frameListOffset = file.Tell(); - for (unsigned int i = 0; i < m_Frames.size(); ++i) + for (size_t i = 0; i < m_Frames.size(); i++) PadFile(sizeof(FileFrameInfo), file); u64 bpMemOffset = file.Tell(); @@ -101,7 +99,7 @@ bool FifoDataFile::Save(const char *filename) const FifoFrameInfo &srcFrame = m_Frames[i]; // Write FIFO data - file.Seek(0, SEEK_END); + file.Seek(0, SEEK_END); u64 dataOffset = file.Tell(); file.WriteBytes(srcFrame.fifoData, srcFrame.fifoDataSize); @@ -118,7 +116,7 @@ bool FifoDataFile::Save(const char *filename) // Write frame info u64 frameOffset = frameListOffset + (i * sizeof(FileFrameInfo)); file.Seek(frameOffset, SEEK_SET); - file.WriteBytes(&dstFrame, sizeof(FileFrameInfo)); + file.WriteBytes(&dstFrame, sizeof(FileFrameInfo)); } if (!file.Close()) @@ -152,7 +150,7 @@ FifoDataFile *FifoDataFile::Load(const std::string &filename, bool flagsOnly) file.Close(); return dataFile; } - + u32 size = std::min((u32)BP_MEM_SIZE, header.bpMemSize); file.Seek(header.bpMemOffset, SEEK_SET); file.ReadArray(dataFile->m_BPMem, size); @@ -221,7 +219,7 @@ u64 FifoDataFile::WriteMemoryUpdates(const std::vector &memUpdates { // Add space for memory update list u64 updateListOffset = file.Tell(); - for (unsigned int i = 0; i < memUpdates.size(); ++i) + for (size_t i = 0; i < memUpdates.size(); i++) PadFile(sizeof(FileMemoryUpdate), file); for (unsigned int i = 0; i < memUpdates.size(); ++i) @@ -232,7 +230,7 @@ u64 FifoDataFile::WriteMemoryUpdates(const std::vector &memUpdates file.Seek(0, SEEK_END); u64 dataOffset = file.Tell(); file.WriteBytes(srcUpdate.data, srcUpdate.size); - + FileMemoryUpdate dstUpdate; dstUpdate.address = srcUpdate.address; dstUpdate.dataOffset = dataOffset; diff --git a/Source/Core/Core/Src/FifoPlayer/FifoDataFile.h b/Source/Core/Core/Src/FifoPlayer/FifoDataFile.h index d13568a21b..c5dc6aee8e 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoDataFile.h +++ b/Source/Core/Core/Src/FifoPlayer/FifoDataFile.h @@ -54,7 +54,7 @@ public: }; FifoDataFile(); - ~FifoDataFile(); + ~FifoDataFile(); void SetIsWii(bool isWii); bool GetIsWii() const; @@ -77,7 +77,7 @@ private: { FLAG_IS_WII = 1 }; - + void PadFile(u32 numBytes, File::IOFile &file); void SetFlag(u32 flag, bool set); diff --git a/Source/Core/Core/Src/FifoPlayer/FifoFileStruct.h b/Source/Core/Core/Src/FifoPlayer/FifoFileStruct.h index 0e606cc465..1eeada1160 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoFileStruct.h +++ b/Source/Core/Core/Src/FifoPlayer/FifoFileStruct.h @@ -21,7 +21,7 @@ enum union FileHeader { - struct + struct { u32 fileId; u32 file_version; diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp index 1ea80c8699..1e606e52e4 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.cpp @@ -45,7 +45,7 @@ void FifoPlaybackAnalyzer::AnalyzeFrames(FifoDataFile *file, std::vectorGetFrameCount()); @@ -115,10 +115,8 @@ void FifoPlaybackAnalyzer::AddMemoryUpdate(MemoryUpdate memUpdate, AnalyzedFrame u32 end = memUpdate.address + memUpdate.size; // Remove portions of memUpdate that overlap with memory ranges that have been written by the GP - for (unsigned int i = 0; i < m_WrittenMemory.size(); ++i) + for (const auto& range : m_WrittenMemory) { - const MemoryRange &range = m_WrittenMemory[i]; - if (range.begin < end && range.end > begin) { @@ -210,7 +208,7 @@ u32 FifoPlaybackAnalyzer::DecodeCommand(u8 *data) BPCmd bp = FifoAnalyzer::DecodeBPCmd(cmd2, m_BpMem); FifoAnalyzer::LoadBPReg(bp, m_BpMem); - + if (bp.address == BPMEM_TRIGGER_EFB_COPY) StoreEfbCopyRegion(); } @@ -286,7 +284,7 @@ void FifoPlaybackAnalyzer::StoreWrittenRegion(u32 address, u32 size) { u32 end = address + size; vector::iterator newRangeIter = m_WrittenMemory.end(); - + // Search for overlapping memory regions and expand them to include the new region for (vector::iterator iter = m_WrittenMemory.begin(); iter != m_WrittenMemory.end();) { @@ -295,7 +293,7 @@ void FifoPlaybackAnalyzer::StoreWrittenRegion(u32 address, u32 size) if (range.begin < end && range.end > address) { // range at iterator and new range overlap - + if (newRangeIter == m_WrittenMemory.end()) { // Expand range to include the written region diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.h b/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.h index f6df506947..e58acbd62a 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.h +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlaybackAnalyzer.h @@ -33,7 +33,7 @@ private: }; void AddMemoryUpdate(MemoryUpdate memUpdate, AnalyzedFrameInfo &frameInfo); - + u32 DecodeCommand(u8 *data); void LoadBP(u32 value0); diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp index f660b41f9e..0f65c6a966 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp @@ -92,7 +92,7 @@ bool FifoPlayer::Play() if (m_EarlyMemoryUpdates && m_CurrentFrame == m_FrameRangeStart) WriteAllMemoryUpdates(); - WriteFrame(m_File->GetFrame(m_CurrentFrame), m_FrameInfo[m_CurrentFrame]); + WriteFrame(m_File->GetFrame(m_CurrentFrame), m_FrameInfo[m_CurrentFrame]); ++m_CurrentFrame; } @@ -259,9 +259,9 @@ void FifoPlayer::WriteAllMemoryUpdates() for (int frameNum = 0; frameNum < m_File->GetFrameCount(); ++frameNum) { const FifoFrameInfo &frame = m_File->GetFrame(frameNum); - for (unsigned int i = 0; i < frame.memoryUpdates.size(); ++i) + for (auto& update : frame.memoryUpdates) { - WriteMemory(frame.memoryUpdates[i]); + WriteMemory(update); } } } @@ -310,7 +310,7 @@ void FifoPlayer::SetupFifo() const FifoFrameInfo& frame = m_File->GetFrame(m_CurrentFrame); - // Set fifo bounds + // Set fifo bounds WriteCP(0x20, frame.fifoStart); WriteCP(0x22, frame.fifoStart >> 16); WriteCP(0x24, frame.fifoEnd); @@ -368,7 +368,7 @@ void FifoPlayer::LoadMemory() LoadCPReg(0x80 + i, regs[0x80 + i]); LoadCPReg(0x90 + i, regs[0x90 + i]); } - + for (int i = 0; i < 16; ++i) { LoadCPReg(0xa0 + i, regs[0xa0 + i]); diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h index bad936cca9..b99093f164 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h @@ -106,7 +106,7 @@ private: FifoDataFile *m_File; - std::vector m_FrameInfo; + std::vector m_FrameInfo; }; #endif diff --git a/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.cpp index 293e062b2c..d628e9bfbf 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.cpp @@ -60,7 +60,7 @@ void FifoRecordAnalyzer::DecodeOpcode(u8 *data) u32 value = ReadFifo32(data); FifoAnalyzer::LoadCPReg(cmd2, value, m_CpMem); } - + break; case GX_LOAD_XF_REG: @@ -98,7 +98,7 @@ void FifoRecordAnalyzer::DecodeOpcode(u8 *data) u32 cmd2 = ReadFifo32(data); BPCmd bp = FifoAnalyzer::DecodeBPCmd(cmd2, *m_BpMem); - + if (bp.address == BPMEM_LOADTLUT1) ProcessLoadTlut1(); if (bp.address == BPMEM_PRELOAD_MODE) diff --git a/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.h b/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.h index 94e53b17ed..af7d1c997d 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.h +++ b/Source/Core/Core/Src/FifoPlayer/FifoRecordAnalyzer.h @@ -38,7 +38,7 @@ private: bool m_DrawingObject; BPMemory *m_BpMem; - FifoAnalyzer::CPMemory m_CpMem; + FifoAnalyzer::CPMemory m_CpMem; }; #endif diff --git a/Source/Core/Core/Src/FifoPlayer/FifoRecorder.cpp b/Source/Core/Core/Src/FifoPlayer/FifoRecorder.cpp index 26fb661162..fb98205d27 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoRecorder.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoRecorder.cpp @@ -22,7 +22,7 @@ FifoRecorder::FifoRecorder() : m_File(NULL), m_SkipNextData(true), m_SkipFutureData(true), - m_FrameEnded(false), + m_FrameEnded(false), m_Ram(NULL), m_ExRam(NULL) { @@ -53,7 +53,7 @@ void FifoRecorder::StartRecording(s32 numFrames, CallbackFunc finishedCb) if (!m_IsRecording) { m_WasRecording = false; - m_IsRecording = true; + m_IsRecording = true; m_RecordFramesRemaining = numFrames; } @@ -88,7 +88,7 @@ void FifoRecorder::WriteGPCommand(u8 *data, u32 size) memcpy(m_CurrentFrame.fifoData, &m_FifoData[0], dataSize); sMutex.lock(); - + // Copy frame to file // The file will be responsible for freeing the memory allocated for each frame's fifoData m_File->AddFrame(m_CurrentFrame); @@ -132,11 +132,11 @@ void FifoRecorder::WriteMemory(u32 address, u32 size, MemoryUpdate::Type type) memUpdate.fifoPosition = m_FifoData.size(); memUpdate.size = size; memUpdate.type = type; - memUpdate.data = new u8[size]; + memUpdate.data = new u8[size]; memcpy(memUpdate.data, newData, size); m_CurrentFrame.memoryUpdates.push_back(memUpdate); - } + } } void FifoRecorder::EndFrame(u32 fifoStart, u32 fifoEnd) @@ -149,7 +149,7 @@ void FifoRecorder::EndFrame(u32 fifoStart, u32 fifoEnd) m_CurrentFrame.fifoStart = fifoStart; m_CurrentFrame.fifoEnd = fifoEnd; - + if (m_WasRecording) { // If recording a fixed number of frames then check if the end of the recording was reached diff --git a/Source/Core/Core/Src/FifoPlayer/FifoRecorder.h b/Source/Core/Core/Src/FifoPlayer/FifoRecorder.h index 7641a9d7f1..25cad32579 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoRecorder.h +++ b/Source/Core/Core/Src/FifoPlayer/FifoRecorder.h @@ -27,7 +27,7 @@ public: void WriteGPCommand(u8 *data, u32 size); void WriteMemory(u32 address, u32 size, MemoryUpdate::Type type); - + void EndFrame(u32 fifoStart, u32 fifoEnd); // This function must be called before writing GP commands diff --git a/Source/Core/Core/Src/GeckoCode.cpp b/Source/Core/Core/Src/GeckoCode.cpp index f8359e1bc5..5e4102474f 100644 --- a/Source/Core/Core/Src/GeckoCode.cpp +++ b/Source/Core/Core/Src/GeckoCode.cpp @@ -145,7 +145,7 @@ bool InstallCodeHandler() u32 codelist_location = 0x800028B8; // Debugger on location (0x800022A8 = Debugger off, using codehandleronly.bin) std::string data; std::string _rCodeHandlerFilename = File::GetSysDirectory() + GECKO_CODE_HANDLER; - if (!File::ReadFileToString(false, _rCodeHandlerFilename.c_str(), data)) + if (!File::ReadFileToString(_rCodeHandlerFilename.c_str(), data)) return false; // Install code handler @@ -764,7 +764,7 @@ bool RegisterOps() dst_addr += new_data; else src_addr += new_data; - + while (count--) Memory::Write_U8(Memory::Read_U8(src_addr++), dst_addr++); } @@ -922,7 +922,7 @@ bool SpecialIf() result = (left_val < right_val); break; } - } + } else if (code.subtype & 0x4) { // counters get reset if code execution is off diff --git a/Source/Core/Core/Src/GeckoCode.h b/Source/Core/Core/Src/GeckoCode.h index 4156be8cbb..c04005494d 100644 --- a/Source/Core/Core/Src/GeckoCode.h +++ b/Source/Core/Core/Src/GeckoCode.h @@ -52,7 +52,7 @@ namespace Gecko u32 data; //struct //{ - // + // //}; }; diff --git a/Source/Core/Core/Src/GeckoCodeConfig.cpp b/Source/Core/Core/Src/GeckoCodeConfig.cpp index 58b5b46968..b6059ef090 100644 --- a/Source/Core/Core/Src/GeckoCodeConfig.cpp +++ b/Source/Core/Core/Src/GeckoCodeConfig.cpp @@ -23,14 +23,14 @@ void LoadCodes(const IniFile& globalIni, const IniFile& localIni, std::vectorempty()) + if (line.empty()) continue; - std::istringstream ss(*lines_iter); + std::istringstream ss(line); - switch ((*lines_iter)[0]) + switch ((line)[0]) { // enabled or disabled code @@ -52,7 +52,7 @@ void LoadCodes(const IniFile& globalIni, const IniFile& localIni, std::vectorbegin(), lines_iter->end())); + gcode.notes.push_back(std::string(++line.begin(), line.end())); break; // either part of the code, or an option choice @@ -60,7 +60,7 @@ void LoadCodes(const IniFile& globalIni, const IniFile& localIni, std::vector> std::hex >> new_code.address >> new_code.data; gcode.codes.push_back(new_code); } @@ -75,16 +75,15 @@ void LoadCodes(const IniFile& globalIni, const IniFile& localIni, std::vectorGetLines("Gecko_Enabled", lines, false); - for (auto lines_iter = lines.begin(); lines_iter!=lines.end(); ++lines_iter) + for (auto line : lines) { - auto line = *lines_iter; if (line.size() == 0 || line[0] != '$') continue; std::string name = line.substr(1); - for (auto gcodes_iter = gcodes.begin(); gcodes_iter != gcodes.end(); ++gcodes_iter) + for (auto& ogcode : gcodes) { - if ((*gcodes_iter).name == name) - (*gcodes_iter).enabled = true; + if (ogcode.name == name) + ogcode.enabled = true; } } } diff --git a/Source/Core/Core/Src/HLE/HLE.cpp b/Source/Core/Core/Src/HLE/HLE.cpp index 3d3d8d6052..24180fc6b5 100644 --- a/Source/Core/Core/Src/HLE/HLE.cpp +++ b/Source/Core/Core/Src/HLE/HLE.cpp @@ -38,8 +38,8 @@ struct SPatch int flags; }; -static const SPatch OSPatches[] = -{ +static const SPatch OSPatches[] = +{ { "FAKE_TO_SKIP_0", HLE_Misc::UnimplementedFunction, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC }, { "PanicAlert", HLE_Misc::HLEPanicAlert, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG }, diff --git a/Source/Core/Core/Src/HW/AudioInterface.cpp b/Source/Core/Core/Src/HW/AudioInterface.cpp index e9ef2eed03..b86482d58f 100644 --- a/Source/Core/Core/Src/HW/AudioInterface.cpp +++ b/Source/Core/Core/Src/HW/AudioInterface.cpp @@ -88,13 +88,13 @@ union AICR { AICR() { hex = 0;} AICR(u32 _hex) { hex = _hex;} - struct + struct { u32 PSTAT : 1; // sample counter/playback enable u32 AISFR : 1; // AIS Frequency (0=32khz 1=48khz) u32 AIINTMSK : 1; // 0=interrupt masked 1=interrupt enabled u32 AIINT : 1; // audio interrupt status - u32 AIINTVLD : 1; // This bit controls whether AIINT is affected by the Interrupt Timing register + u32 AIINTVLD : 1; // This bit controls whether AIINT is affected by the Interrupt Timing register // matching the sample counter. Once set, AIINT will hold its last value u32 SCRESET : 1; // write to reset counter u32 AIDFR : 1; // AID Frequency (0=48khz 1=32khz) @@ -206,7 +206,7 @@ void Write32(const u32 _Value, const u32 _Address) case AI_CONTROL_REGISTER: { AICR tmpAICtrl(_Value); - + m_Control.AIINTMSK = tmpAICtrl.AIINTMSK; m_Control.AIINTVLD = tmpAICtrl.AIINTVLD; @@ -250,7 +250,7 @@ void Write32(const u32 _Value, const u32 _Address) } // Sample Count Reset - if (tmpAICtrl.SCRESET) + if (tmpAICtrl.SCRESET) { DEBUG_LOG(AUDIO_INTERFACE, "Reset AIS sample counter"); m_SampleCounter = 0; @@ -360,7 +360,7 @@ unsigned int Callback_GetStreaming(short* _pDestBuffer, unsigned int _numSamples static s16 l1 = 0; static s16 l2 = 0; - + if ( frac >= 0x10000 || frac == 0) { frac &= 0xffff; @@ -388,7 +388,7 @@ unsigned int Callback_GetStreaming(short* _pDestBuffer, unsigned int _numSamples } else //1:1 no resampling - { + { pcm_l = (((int)pcm[pos*2] * lvolume) >> 8) + (int)(*_pDestBuffer); if (pcm_l > 32767) pcm_l = 32767; else if (pcm_l < -32767) pcm_l = -32767; @@ -398,11 +398,11 @@ unsigned int Callback_GetStreaming(short* _pDestBuffer, unsigned int _numSamples if (pcm_r > 32767) pcm_r = 32767; else if (pcm_r < -32767) pcm_r = -32767; *_pDestBuffer++ = pcm_r; - + pos++; } - if (pos == NGCADPCM::SAMPLES_PER_BLOCK) + if (pos == NGCADPCM::SAMPLES_PER_BLOCK) pos = 0; } } diff --git a/Source/Core/Core/Src/HW/BBA-TAP/TAP_Unix.cpp b/Source/Core/Core/Src/HW/BBA-TAP/TAP_Unix.cpp index 97c73eeb40..1140ef72e0 100644 --- a/Source/Core/Core/Src/HW/BBA-TAP/TAP_Unix.cpp +++ b/Source/Core/Core/Src/HW/BBA-TAP/TAP_Unix.cpp @@ -88,7 +88,7 @@ void CEXIETHERNET::Deactivate() } bool CEXIETHERNET::IsActivated() -{ +{ #ifdef __linux__ return fd != -1 ? true : false; #else @@ -96,7 +96,7 @@ bool CEXIETHERNET::IsActivated() #endif } -bool CEXIETHERNET::SendFrame(u8* frame, u32 size) +bool CEXIETHERNET::SendFrame(u8* frame, u32 size) { #ifdef __linux__ INFO_LOG(SP1, "SendFrame %x\n%s", size, ArrayToString(frame, size, 0x10).c_str()); diff --git a/Source/Core/Core/Src/HW/BBA-TAP/TAP_Win32.cpp b/Source/Core/Core/Src/HW/BBA-TAP/TAP_Win32.cpp index a444ca63cb..dd7ad20d5b 100644 --- a/Source/Core/Core/Src/HW/BBA-TAP/TAP_Win32.cpp +++ b/Source/Core/Core/Src/HW/BBA-TAP/TAP_Win32.cpp @@ -95,7 +95,7 @@ bool GetGUIDs(std::vector>& guids) if (status != ERROR_SUCCESS) return false; - + while (!found_all) { TCHAR enum_name[256]; @@ -240,7 +240,7 @@ void CEXIETHERNET::Deactivate() } bool CEXIETHERNET::IsActivated() -{ +{ return mHAdapter != INVALID_HANDLE_VALUE; } @@ -266,14 +266,14 @@ bool CEXIETHERNET::SendFrame(u8 *frame, u32 size) // Always report the packet as being sent successfully, even though it might be a lie SendComplete(); - + return true; } VOID CALLBACK CEXIETHERNET::ReadWaitCallback(PVOID lpParameter, BOOLEAN TimerFired) { CEXIETHERNET* self = (CEXIETHERNET*)lpParameter; - + GetOverlappedResult(self->mHAdapter, &self->mReadOverlapped, (LPDWORD)&self->mRecvBufferLength, false); @@ -332,7 +332,7 @@ void CEXIETHERNET::RecvStop() return; UnregisterWaitEx(mHReadWait, INVALID_HANDLE_VALUE); - + CloseHandle(mHRecvEvent); mHRecvEvent = INVALID_HANDLE_VALUE; } diff --git a/Source/Core/Core/Src/HW/CPU.cpp b/Source/Core/Core/Src/HW/CPU.cpp index f013c9ee7d..dc81955f13 100644 --- a/Source/Core/Core/Src/HW/CPU.cpp +++ b/Source/Core/Core/Src/HW/CPU.cpp @@ -75,7 +75,7 @@ reswitch: case PowerPC::CPU_POWERDOWN: //1: Exit loop!! - return; + return; } } } @@ -96,7 +96,7 @@ void CCPU::Reset() } -void CCPU::StepOpcode(Common::Event *event) +void CCPU::StepOpcode(Common::Event *event) { m_StepEvent.Set(); if (PowerPC::GetState() == PowerPC::CPU_STEPPING) @@ -106,7 +106,7 @@ void CCPU::StepOpcode(Common::Event *event) } void CCPU::EnableStepping(const bool _bStepping) -{ +{ if (_bStepping) { PowerPC::Pause(); @@ -123,7 +123,7 @@ void CCPU::EnableStepping(const bool _bStepping) } } -void CCPU::Break() +void CCPU::Break() { EnableStepping(true); } diff --git a/Source/Core/Core/Src/HW/CPU.h b/Source/Core/Core/Src/HW/CPU.h index 0b5508a94a..219df48370 100644 --- a/Source/Core/Core/Src/HW/CPU.h +++ b/Source/Core/Core/Src/HW/CPU.h @@ -14,7 +14,7 @@ namespace Common { class CCPU { public: - // init + // init static void Init(int cpu_core); // shutdown @@ -24,7 +24,7 @@ public: static void Run(); // causes shutdown - static void Stop(); + static void Stop(); // Reset static void Reset(); @@ -35,7 +35,7 @@ public: static void SingleStep(); // Enable or Disable Stepping - static void EnableStepping(const bool _bStepping); + static void EnableStepping(const bool _bStepping); // break, same as EnableStepping(true). static void Break(); diff --git a/Source/Core/Core/Src/HW/DSP.cpp b/Source/Core/Core/Src/HW/DSP.cpp index 3ef62e5aaa..51ca22d388 100644 --- a/Source/Core/Core/Src/HW/DSP.cpp +++ b/Source/Core/Core/Src/HW/DSP.cpp @@ -554,7 +554,7 @@ void Read32(u32& _uReturnValue, const u32 _iAddress) case AR_DMA_CNT_H: _uReturnValue = g_arDMA.Cnt.Hex; break; - + case AR_DMA_MMADDR_H: _uReturnValue = g_arDMA.MMAddr; break; @@ -592,7 +592,7 @@ void Write32(const u32 _iValue, const u32 _iAddress) g_arDMA.ARAddr = _iValue & ~31; break; - case AR_DMA_CNT_H: + case AR_DMA_CNT_H: g_arDMA.Cnt.Hex = _iValue & ~31; Do_ARAM_DMA(); break; @@ -665,7 +665,7 @@ void UpdateAudioDMA() // external audio fifo in the emulator, to be mixed with the disc // streaming output. If that audio queue fills up, we delay the // emulator. - + g_audioDMA.BlocksLeft--; g_audioDMA.ReadAddress += 32; @@ -811,10 +811,10 @@ u8 ReadARAM(u32 _iAddress) { //NOTICE_LOG(DSPINTERFACE, "ReadARAM 0x%08x", _iAddress); if (g_ARAM.wii_mode) - { + { if (_iAddress & 0x10000000) return g_ARAM.ptr[_iAddress & g_ARAM.mask]; - else + else return Memory::Read_U8(_iAddress & Memory::RAM_MASK); } else diff --git a/Source/Core/Core/Src/HW/DSP.h b/Source/Core/Core/Src/HW/DSP.h index 68d83edabb..8feabf4876 100644 --- a/Source/Core/Core/Src/HW/DSP.h +++ b/Source/Core/Core/Src/HW/DSP.h @@ -38,7 +38,7 @@ void GenerateDSPInterruptFromDSPEmu(DSPInterruptType _DSPInterruptType, bool _bS // Read32 void Read16(u16& _uReturnValue, const u32 _uAddress); -void Read32(u32& _uReturnValue, const u32 _uAddress); +void Read32(u32& _uReturnValue, const u32 _uAddress); // Write void Write16(const u16 _uValue, const u32 _uAddress); diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp index 71c43a0302..501bc2a0dd 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp @@ -253,7 +253,7 @@ void DSPHLE::DSP_WriteMailBoxLow(bool _CPUMailbox, unsigned short _Value) m_dspState.CPUMailbox = (m_dspState.CPUMailbox & 0xFFFF0000) | _Value; SendMailToDSP(m_dspState.CPUMailbox); // Mail sent so clear MSB to show that it is progressed - m_dspState.CPUMailbox &= 0x7FFFFFFF; + m_dspState.CPUMailbox &= 0x7FFFFFFF; } else { @@ -334,5 +334,5 @@ void DSPHLE::DSP_ClearAudioBuffer(bool mute) void DSPHLE::PauseAndLock(bool doLock, bool unpauseOnUnlock) { if (doLock || unpauseOnUnlock) - DSP_ClearAudioBuffer(doLock); + DSP_ClearAudioBuffer(doLock); } diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h index f53d4f7d1b..6627b9dc2a 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h @@ -16,24 +16,24 @@ class DSPHLE : public DSPEmulator { public: DSPHLE(); - virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread); - virtual void Shutdown(); - virtual bool IsLLE() { return false; } + virtual bool Initialize(void *hWnd, bool bWii, bool bDSPThread) override; + virtual void Shutdown() override; + virtual bool IsLLE() override { return false ; } - virtual void DoState(PointerWrap &p); - virtual void PauseAndLock(bool doLock, bool unpauseOnUnlock=true); + virtual void DoState(PointerWrap &p) override; + virtual void PauseAndLock(bool doLock, bool unpauseOnUnlock=true) override; - virtual void DSP_WriteMailBoxHigh(bool _CPUMailbox, unsigned short); - virtual void DSP_WriteMailBoxLow(bool _CPUMailbox, unsigned short); - virtual unsigned short DSP_ReadMailBoxHigh(bool _CPUMailbox); - virtual unsigned short DSP_ReadMailBoxLow(bool _CPUMailbox); - virtual unsigned short DSP_ReadControlRegister(); - virtual unsigned short DSP_WriteControlRegister(unsigned short); - virtual void DSP_SendAIBuffer(unsigned int address, unsigned int num_samples); - virtual void DSP_Update(int cycles); - virtual void DSP_StopSoundStream(); - virtual void DSP_ClearAudioBuffer(bool mute); - virtual u32 DSP_UpdateRate(); + virtual void DSP_WriteMailBoxHigh(bool _CPUMailbox, unsigned short) override; + virtual void DSP_WriteMailBoxLow(bool _CPUMailbox, unsigned short) override; + virtual unsigned short DSP_ReadMailBoxHigh(bool _CPUMailbox) override; + virtual unsigned short DSP_ReadMailBoxLow(bool _CPUMailbox) override; + virtual unsigned short DSP_ReadControlRegister() override; + virtual unsigned short DSP_WriteControlRegister(unsigned short) override; + virtual void DSP_SendAIBuffer(unsigned int address, unsigned int num_samples) override; + virtual void DSP_Update(int cycles) override; + virtual void DSP_StopSoundStream() override; + virtual void DSP_ClearAudioBuffer(bool mute) override; + virtual u32 DSP_UpdateRate() override; CMailHandler& AccessMailHandler() { return m_MailHandler; } @@ -47,9 +47,8 @@ private: void InitMixer(); // Declarations and definitions - void *m_hWnd; bool m_bWii; - + bool m_InitMixer; // Fake mailbox utility diff --git a/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h b/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h index 3d0369d452..d19291d567 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h +++ b/Source/Core/Core/Src/HW/DSPHLE/HLEMixer.h @@ -9,13 +9,13 @@ class DSPHLE; -class HLEMixer : public CMixer +class HLEMixer : public CMixer { public: HLEMixer(DSPHLE *dsp_hle, unsigned int AISampleRate = 48000, unsigned int DACSampleRate = 48000, unsigned int BackendSampleRate = 32000) : CMixer(AISampleRate, DACSampleRate, BackendSampleRate), m_DSPHLE(dsp_hle) {}; - - virtual void Premix(short *samples, unsigned int numSamples); + + virtual void Premix(short *samples, unsigned int numSamples) override; private: DSPHLE *m_DSPHLE; }; diff --git a/Source/Core/Core/Src/HW/DSPHLE/MailHandler.h b/Source/Core/Core/Src/HW/DSPHLE/MailHandler.h index efc512012f..b203c8c587 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/MailHandler.h +++ b/Source/Core/Core/Src/HW/DSPHLE/MailHandler.h @@ -26,7 +26,7 @@ public: u16 ReadDSPMailboxLow(); u32 GetNextMail() - { + { if (m_Mails.size()) { return m_Mails.front(); diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp index e82ce626c9..2be8ce4b87 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp @@ -72,8 +72,8 @@ void CUCode_AX::LoadResamplingCoefficients() File::IOFile fp(filename, "rb"); fp.ReadBytes(m_coeffs, 0x1000); - for (u32 i = 0; i < 0x800; ++i) - m_coeffs[i] = Common::swap16(m_coeffs[i]); + for (auto& coef : m_coeffs) + coef = Common::swap16(coef); m_coeffs_available = true; } @@ -386,7 +386,7 @@ void CUCode_AX::SetupProcessing(u32 init_addr) }; u32 init_idx = 0; - for (u32 i = 0; i < sizeof (buffers) / sizeof (buffers[0]); ++i) + for (auto& buffer : buffers) { s32 init_val = (s32)((init_data[init_idx] << 16) | init_data[init_idx + 1]); s16 delta = (s16)init_data[init_idx + 2]; @@ -395,13 +395,13 @@ void CUCode_AX::SetupProcessing(u32 init_addr) if (!init_val) { - memset(buffers[i], 0, 5 * 32 * sizeof (int)); + memset(buffer, 0, 5 * 32 * sizeof (int)); } else { for (u32 j = 0; j < 32 * 5; ++j) { - buffers[i][j] = init_val; + buffer[j] = init_val; init_val += delta; } } @@ -501,20 +501,20 @@ void CUCode_AX::MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr) if (write_addr) { int* ptr = (int*)HLEMemory_Get_Pointer(write_addr); - for (u32 i = 0; i < 3; ++i) + for (auto& buffer : buffers) for (u32 j = 0; j < 5 * 32; ++j) - *ptr++ = Common::swap32(buffers[i][j]); + *ptr++ = Common::swap32(buffer[j]); } // Then, we read the new temp from the CPU and add to our current // temp. int* ptr = (int*)HLEMemory_Get_Pointer(read_addr); - for (u32 i = 0; i < 5 * 32; ++i) - m_samples_left[i] += (int)Common::swap32(*ptr++); - for (u32 i = 0; i < 5 * 32; ++i) - m_samples_right[i] += (int)Common::swap32(*ptr++); - for (u32 i = 0; i < 5 * 32; ++i) - m_samples_surround[i] += (int)Common::swap32(*ptr++); + for (auto& sample : m_samples_left) + sample += (int)Common::swap32(*ptr++); + for (auto& sample : m_samples_right) + sample += (int)Common::swap32(*ptr++); + for (auto& sample : m_samples_surround) + sample += (int)Common::swap32(*ptr++); } void CUCode_AX::UploadLRS(u32 dst_addr) @@ -575,10 +575,10 @@ void CUCode_AX::MixAUXBLR(u32 ul_addr, u32 dl_addr) { // Upload AUXB L/R int* ptr = (int*)HLEMemory_Get_Pointer(ul_addr); - for (u32 i = 0; i < 5 * 32; ++i) - *ptr++ = Common::swap32(m_samples_auxB_left[i]); - for (u32 i = 0; i < 5 * 32; ++i) - *ptr++ = Common::swap32(m_samples_auxB_right[i]); + for (auto& sample : m_samples_auxB_left) + *ptr++ = Common::swap32(sample); + for (auto& sample : m_samples_auxB_right) + *ptr++ = Common::swap32(sample); // Mix AUXB L/R to MAIN L/R, and replace AUXB L/R ptr = (int*)HLEMemory_Get_Pointer(dl_addr); @@ -620,14 +620,14 @@ void CUCode_AX::SendAUXAndMix(u32 main_auxa_up, u32 auxb_s_up, u32 main_l_dl, // Upload AUXA LRS int* ptr = (int*)HLEMemory_Get_Pointer(main_auxa_up); - for (u32 i = 0; i < sizeof (up_buffers) / sizeof (up_buffers[0]); ++i) + for (auto& up_buffer : up_buffers) for (u32 j = 0; j < 32 * 5; ++j) - *ptr++ = Common::swap32(up_buffers[i][j]); + *ptr++ = Common::swap32(up_buffer[j]); // Upload AUXB S ptr = (int*)HLEMemory_Get_Pointer(auxb_s_up); - for (u32 i = 0; i < 32 * 5; ++i) - *ptr++ = Common::swap32(m_samples_auxB_surround[i]); + for (auto& sample : m_samples_auxB_surround) + *ptr++ = Common::swap32(sample); // Download buffers and addresses int* dl_buffers[] = { diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h index 5af2daed12..5539a00820 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h @@ -56,11 +56,11 @@ public: CUCode_AX(DSPHLE* dsp_hle, u32 crc); virtual ~CUCode_AX(); - virtual void HandleMail(u32 mail); - virtual void MixAdd(short* out_buffer, int nsamples); - virtual void Update(int cycles); - virtual void DoState(PointerWrap& p); - u32 GetUpdateMs(); + virtual void HandleMail(u32 mail) override; + virtual void MixAdd(short* out_buffer, int nsamples) override; + virtual void Update(int cycles) override; + virtual void DoState(PointerWrap& p) override; + u32 GetUpdateMs() override; // Needed because StdThread.h std::thread implem does not support member // pointers. TODO(delroth): obsolete. diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h index 54a7dce6e9..58039fc2f9 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXStructs.h @@ -237,7 +237,7 @@ struct AXPB u16 is_stream; // 1 = stream, 0 = one shot PBMixer mixer; - PBInitialTimeDelay initial_time_delay; + PBInitialTimeDelay initial_time_delay; PBUpdates updates; PBDpop dpop; PBVolumeEnvelope vol_env; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index a67d5538ee..72e5c4a3fa 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -21,6 +21,7 @@ CUCode_AXWii::CUCode_AXWii(DSPHLE *dsp_hle, u32 l_CRC) { for (int i = 0; i < 3; ++i) m_last_aux_volumes[i] = 0x8000; + WARN_LOG(DSPHLE, "Instantiating CUCode_AXWii"); m_old_axwii = (l_CRC == 0xfa450138); @@ -279,7 +280,7 @@ void CUCode_AXWii::SetupProcessing(u32 init_addr) }; u32 init_idx = 0; - for (u32 i = 0; i < sizeof (buffers) / sizeof (buffers[0]); ++i) + for (auto& buffer : buffers) { s32 init_val = (s32)((init_data[init_idx] << 16) | init_data[init_idx + 1]); s16 delta = (s16)init_data[init_idx + 2]; @@ -288,13 +289,13 @@ void CUCode_AXWii::SetupProcessing(u32 init_addr) if (!init_val) { - memset(buffers[i].ptr, 0, 3 * buffers[i].samples * sizeof (int)); + memset(buffer.ptr, 0, 3 * buffer.samples * sizeof (int)); } else { - for (u32 j = 0; j < 3 * buffers[i].samples; ++j) + for (u32 j = 0; j < 3 * buffer.samples; ++j) { - buffers[i].ptr[j] = init_val; + buffer.ptr[j] = init_val; init_val += delta; } } @@ -523,19 +524,19 @@ void CUCode_AXWii::MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 if (write_addr) { int* ptr = (int*)HLEMemory_Get_Pointer(write_addr); - for (u32 i = 0; i < 3; ++i) + for (auto& buffer : buffers) for (u32 j = 0; j < 3 * 32; ++j) - *ptr++ = Common::swap32(buffers[i][j]); + *ptr++ = Common::swap32(buffer[j]); } // Then read the buffers from the CPU and add to our main buffers. int* ptr = (int*)HLEMemory_Get_Pointer(read_addr); - for (u32 i = 0; i < 3; ++i) + for (auto& main_buffer : main_buffers) for (u32 j = 0; j < 3 * 32; ++j) { s64 sample = (s64)(s32)Common::swap32(*ptr++); sample *= volume_ramp[j]; - main_buffers[i][j] += (s32)(sample >> 15); + main_buffer[j] += (s32)(sample >> 15); } } diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h index 5e8080b97a..a9e6950684 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h @@ -12,9 +12,9 @@ class CUCode_AXWii : public CUCode_AX public: CUCode_AXWii(DSPHLE *dsp_hle, u32 _CRC); virtual ~CUCode_AXWii(); - u32 GetUpdateMs(); + u32 GetUpdateMs() override; - virtual void DoState(PointerWrap &p); + virtual void DoState(PointerWrap &p) override; protected: // Additional AUX buffers @@ -56,7 +56,7 @@ protected: // but this gives better precision and nicer code. void GenerateVolumeRamp(u16* output, u16 vol1, u16 vol2, size_t nvals); - virtual void HandleCommandList(); + virtual void HandleCommandList() override; void SetupProcessing(u32 init_addr); void AddToLR(u32 val_addr, bool neg); diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_CARD.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_CARD.h index 831bf63c8e..a1e1bd901a 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_CARD.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_CARD.h @@ -12,10 +12,10 @@ class CUCode_CARD : public IUCode public: CUCode_CARD(DSPHLE *dsp_hle, u32 crc); virtual ~CUCode_CARD(); - u32 GetUpdateMs(); + u32 GetUpdateMs() override; - void HandleMail(u32 _uMail); - void Update(int cycles); + void HandleMail(u32 _uMail) override; + void Update(int cycles) override; }; #endif diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_GBA.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_GBA.h index e2e5ddd8bb..61e68a916b 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_GBA.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_GBA.h @@ -10,8 +10,8 @@ struct CUCode_GBA : public IUCode { CUCode_GBA(DSPHLE *dsp_hle, u32 crc); virtual ~CUCode_GBA(); - u32 GetUpdateMs(); + u32 GetUpdateMs() override; - void HandleMail(u32 _uMail); - void Update(int cycles); + void HandleMail(u32 _uMail) override; + void Update(int cycles) override; }; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_InitAudioSystem.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_InitAudioSystem.h index 17b74d4b59..79d59ac1bc 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_InitAudioSystem.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_InitAudioSystem.h @@ -12,10 +12,10 @@ class CUCode_InitAudioSystem : public IUCode public: CUCode_InitAudioSystem(DSPHLE *dsp_hle, u32 crc); virtual ~CUCode_InitAudioSystem(); - u32 GetUpdateMs(); + u32 GetUpdateMs() override; - void HandleMail(u32 _uMail); - void Update(int cycles); + void HandleMail(u32 _uMail) override; + void Update(int cycles) override; void Init(); }; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.cpp index 1c89a1f8f7..2b63bcf29c 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.cpp @@ -2,6 +2,10 @@ // Licensed under GPLv2 // Refer to the license.txt file included. +#ifdef _WIN32 +#include +#endif + #include "UCodes.h" #include "UCode_ROM.h" #include "Hash.h" diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.h index e6dbe80f1e..791ba588d5 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_ROM.h @@ -12,12 +12,12 @@ class CUCode_Rom : public IUCode public: CUCode_Rom(DSPHLE *dsp_hle, u32 _crc); virtual ~CUCode_Rom(); - u32 GetUpdateMs(); + u32 GetUpdateMs() override; - void HandleMail(u32 _uMail); - void Update(int cycles); + void HandleMail(u32 _uMail) override; + void Update(int cycles) override; - void DoState(PointerWrap &p); + void DoState(PointerWrap &p) override; private: struct SUCode diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp index b1627a0cd7..899a7d902f 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp @@ -18,7 +18,7 @@ CUCode_Zelda::CUCode_Zelda(DSPHLE *dsp_hle, u32 _CRC) - : + : IUCode(dsp_hle, _CRC), m_bSyncInProgress(false), @@ -60,7 +60,7 @@ CUCode_Zelda::CUCode_Zelda(DSPHLE *dsp_hle, u32 _CRC) if (IsLightVersion()) { NOTICE_LOG(DSPHLE, "Luigi Stylee!"); - m_rMailHandler.PushMail(0x88881111); + m_rMailHandler.PushMail(0x88881111); } else { @@ -125,7 +125,7 @@ void CUCode_Zelda::HandleMail(u32 _uMail) void CUCode_Zelda::HandleMail_LightVersion(u32 _uMail) { - //ERROR_LOG(DSPHLE, "Light version mail %08X, list in progress: %s, step: %i/%i", + //ERROR_LOG(DSPHLE, "Light version mail %08X, list in progress: %s, step: %i/%i", // _uMail, m_bListInProgress ? "yes":"no", m_step, m_numSteps); if (m_bSyncCmdPending) @@ -322,7 +322,7 @@ void CUCode_Zelda::HandleMail_NormalVersion(u32 _uMail) m_rMailHandler.PushMail(DSP_SYNC); DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP); m_rMailHandler.PushMail(0xF355FF00 | m_CurBuffer); - + m_CurVoice = 0; if (m_CurBuffer == m_NumBuffers) @@ -371,10 +371,10 @@ void CUCode_Zelda::HandleMail_NormalVersion(u32 _uMail) // - 00000000, 000X0000 - Sync mails // - CDD1XXXX - comes after DsyncFrame completed, seems to be debugging stuff - if (_uMail == 0) + if (_uMail == 0) { m_bSyncInProgress = true; - } + } else if ((_uMail >> 16) == 0) { m_bListInProgress = true; @@ -542,7 +542,7 @@ void CUCode_Zelda::ExecuteList() { if (m_bSyncCmdPending) m_rMailHandler.PushMail(0x80000000 | m_NumBuffers); // after CMD_2 - else + else m_rMailHandler.PushMail(0x80000000 | Sync); // after CMD_0, CMD_1 } else diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h index 29a9678ed2..76f2663317 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h @@ -15,11 +15,11 @@ union ZeldaVoicePB { - struct + struct { // Read-Write part u16 Status; // 0x00 | 1 = play, 0 = stop - u16 KeyOff; // 0x01 | writing 1 stops voice? + u16 KeyOff; // 0x01 | writing 1 stops voice? u16 RatioInt; // 0x02 | Position delta (playback speed) u16 Unk03; // 0x03 | unknown u16 NeedsReset; // 0x04 | indicates if some values in PB need to be reset @@ -48,10 +48,10 @@ union ZeldaVoicePB u16 Unk17; // 0x17 | unknown u16 Unk18[0x10]; // 0x18 | unknown - u16 Unk28; // 0x28 | unknown + u16 Unk28; // 0x28 | unknown u16 Unk29; // 0x29 | unknown // multiplied by 0x2a @ 0d21/ZWW u16 Unk2a; // 0x2A | unknown // loaded at 0d2e/ZWW - u16 Unk2b; // 0x2B | unknown + u16 Unk2b; // 0x2B | unknown u16 VolumeMode; // 0x2C | unknown // See 0337/ZWW u16 Unk2D; // 0x2D | unknown u16 Unk2E; // 0x2E | unknown @@ -75,7 +75,7 @@ union ZeldaVoicePB u16 FilterState1; // 0x78 | unknown // ZWW: 0c84_FilterBufferInPlace loads and stores. Simply, the filter state. u16 FilterState2; // 0x79 | unknown // ZWW: same as above. these two are active if 0x04a8 != 0. u16 Unk7A; // 0x7A | unknown - u16 Unk7B; // 0x7B | unknown + u16 Unk7B; // 0x7B | unknown u16 Unk7C; // 0x7C | unknown u16 Unk7D; // 0x7D | unknown u16 Unk7E; // 0x7E | unknown @@ -120,20 +120,20 @@ class CUCode_Zelda : public IUCode public: CUCode_Zelda(DSPHLE *dsp_hle, u32 _CRC); virtual ~CUCode_Zelda(); - u32 GetUpdateMs(); + u32 GetUpdateMs() override; - void HandleMail(u32 _uMail); + void HandleMail(u32 _uMail) override; void HandleMail_LightVersion(u32 _uMail); void HandleMail_SMSVersion(u32 _uMail); void HandleMail_NormalVersion(u32 _uMail); - void Update(int cycles); - void MixAdd(short* buffer, int size); + void Update(int cycles) override; + void MixAdd(short* buffer, int size) override; void CopyPBsFromRAM(); void CopyPBsToRAM(); - void DoState(PointerWrap &p); + void DoState(PointerWrap &p) override; int *templbuffer; int *temprbuffer; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_ADPCM.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_ADPCM.cpp index 1fbfaebaba..3ff7a55546 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_ADPCM.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_ADPCM.cpp @@ -21,10 +21,10 @@ void CUCode_Zelda::AFCdecodebuffer(const s16 *coef, const char *src, signed shor nibbles[i + 1] = *src & 15; src++; } - for (int i = 0; i < 16; i++) { - if (nibbles[i] >= 8) - nibbles[i] = nibbles[i] - 16; - nibbles[i] <<= 11; + for (auto& nibble : nibbles) { + if (nibble >= 8) + nibble = nibble - 16; + nibble <<= 11; } } else @@ -41,11 +41,11 @@ void CUCode_Zelda::AFCdecodebuffer(const s16 *coef, const char *src, signed shor src++; } - for (int i = 0; i < 16; i++) + for (auto& nibble : nibbles) { - if (nibbles[i] >= 2) - nibbles[i] = nibbles[i] - 4; - nibbles[i] <<= 13; + if (nibble >= 2) + nibble = nibble - 4; + nibble <<= 13; } } @@ -65,4 +65,4 @@ void CUCode_Zelda::AFCdecodebuffer(const s16 *coef, const char *src, signed shor } *histp = hist; *hist2p = hist2; -} +} diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Synth.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Synth.cpp index cc7fd68ea0..261ff64d8e 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Synth.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Synth.cpp @@ -18,9 +18,9 @@ void CUCode_Zelda::RenderSynth_RectWave(ZeldaVoicePB &PB, s32* _Buffer, int _Siz s64 TrueSamplePosition = PB.CurSampleFrac; // PB.Format == 0x3 -> Rectangular Wave, 0x0 -> Square Wave - unsigned int mask = PB.Format ? 3 : 1; + unsigned int mask = PB.Format ? 3 : 1; // int shift = PB.Format ? 2 : 1; // Unused? - + u32 pos[2] = {0, 0}; int i = 0; @@ -55,7 +55,7 @@ _lRestart: } } - while(i < _Size) + while(i < _Size) { s16 sample = ((pos[1] & mask) == mask) ? 0xc000 : 0x4000; @@ -84,12 +84,12 @@ _lRestart: PB.CurSampleFrac = TrueSamplePosition & 0xFFFF; } -void CUCode_Zelda::RenderSynth_SawWave(ZeldaVoicePB &PB, s32* _Buffer, int _Size) +void CUCode_Zelda::RenderSynth_SawWave(ZeldaVoicePB &PB, s32* _Buffer, int _Size) { s32 ratio = (s32)ceil((float)PB.RatioInt / 3); s64 pos = PB.CurSampleFrac; - for (int i = 0; i < _Size; i++) + for (int i = 0; i < _Size; i++) { pos += ratio; _Buffer[i] = pos & 0xFFFF; @@ -161,10 +161,10 @@ void CUCode_Zelda::RenderSynth_WaveTable(ZeldaVoicePB &PB, s32* _Buffer, int _Si address = AddValueToReg(address, ((ACC0 >> 16) & 0xffff)); ACC0 &= 0xffff0000ffffULL; - for(int i = 0; i < 0x50; i++) + for(int i = 0; i < 0x50; i++) { _Buffer[i] = m_MiscTable[address]; - + ACC0 += PB.RatioInt << 5; address = AddValueToReg(address, ((ACC0 >> 16) & 0xffff)); diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Voice.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Voice.cpp index 9c3fedddb3..ab3a4bef2c 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Voice.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda_Voice.cpp @@ -77,7 +77,7 @@ void CUCode_Zelda::Resample(ZeldaVoicePB &PB, int size, s16 *in, s32 *out, bool int ratio = ConvertRatio(PB.RatioInt); int in_size = SizeForResampling(PB, size, ratio); - + int position = PB.CurSampleFrac; for (int i = 0; i < size; i++) { @@ -110,7 +110,7 @@ void CUCode_Zelda::RenderVoice_PCM16(ZeldaVoicePB &PB, s16 *_Buffer, int _Size) if (PB.NeedsReset) { UpdateSampleCounters10(PB); - for (int i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) PB.ResamplerOldData[i] = 0; // Doesn't belong here, but dunno where to do it. } if (PB.ReachedEnd) @@ -168,7 +168,7 @@ void CUCode_Zelda::RenderVoice_PCM8(ZeldaVoicePB &PB, s16 *_Buffer, int _Size) if (PB.NeedsReset) { UpdateSampleCounters8(PB); - for (int i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) PB.ResamplerOldData[i] = 0; // Doesn't belong here, but dunno where to do it. } if (PB.ReachedEnd) @@ -211,8 +211,8 @@ clear_buffer: PB.CurAddr += rem_samples; } -template -void PrintObject(const T &Obj) +template +void PrintObject(const T &Obj) { std::stringstream ss; u8 *o = (u8 *)&Obj; @@ -248,11 +248,11 @@ void CUCode_Zelda::RenderVoice_AFC(ZeldaVoicePB &PB, s16 *_Buffer, int _Size) { // This is 0717_ReadOutPBStuff // increment 4fb - // zelda: + // zelda: // perhaps init or "has played before" PB.CurBlock = 0x00; - PB.YN2 = 0x00; // history1 - PB.YN1 = 0x00; // history2 + PB.YN2 = 0x00; // history1 + PB.YN1 = 0x00; // history2 // Length in samples. PB.RemLength = PB.Length; @@ -261,7 +261,7 @@ void CUCode_Zelda::RenderVoice_AFC(ZeldaVoicePB &PB, s16 *_Buffer, int _Size) PB.ReachedEnd = 0; PB.CurSampleFrac = 0; - for (int i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) PB.ResamplerOldData[i] = 0; } @@ -300,7 +300,7 @@ restart: PB.KeyOff = 1; PB.RemLength = 0; PB.CurAddr = PB.StartAddr + PB.RestartPos + PB.Length; - + while (sampleCount < _RealSize) _Buffer[sampleCount++] = 0; return; @@ -413,7 +413,7 @@ void CUCode_Zelda::RenderVoice_Raw(ZeldaVoicePB &PB, s16 *_Buffer, int _Size) u64 ACC1 = (u32)(PB.raw[0x34 ^ 1] << 16); // 0x34 // ERROR_LOG(DSPHLE, "%08x %08x", (u32)ACC0, (u32)ACC1); - + ACC0 -= ACC1; PB.Unk36[0] = (u16)(ACC0 >> 16); @@ -461,7 +461,7 @@ void Decoder21_ReadAudio(ZeldaVoicePB &PB, int size, s16 *_Buffer) #endif // ACC0 is the address // ACC1 is the read size - + const u32 ram_mask = 0x1FFFFFF; const u8 *source = Memory::GetPointer(0x80000000); const u16 *src = (u16 *)(source + (ACC0 & ram_mask)); @@ -525,12 +525,12 @@ void CUCode_Zelda::RenderAddVoice(ZeldaVoicePB &PB, s32* _LeftBuffer, s32* _Righ break; case 0x0021: - // Raw sound from RAM. Important for Zelda WW. Cutscenes use the music + // Raw sound from RAM. Important for Zelda WW. Cutscenes use the music // to let the game know they ended RenderVoice_Raw(PB, m_ResampleBuffer + 4, _Size); Resample(PB, _Size, m_ResampleBuffer + 4, m_VoiceBuffer, true); break; - + default: // Second jump table // TODO: Cases to find examples of: @@ -546,7 +546,7 @@ void CUCode_Zelda::RenderAddVoice(ZeldaVoicePB &PB, s32* _LeftBuffer, s32* _Righ RenderSynth_RectWave(PB, m_VoiceBuffer, _Size); break; - case 0x0001: // Example: "Denied" sound when trying to pull out a sword + case 0x0001: // Example: "Denied" sound when trying to pull out a sword // indoors in ZWW RenderSynth_SawWave(PB, m_VoiceBuffer, _Size); break; @@ -577,7 +577,7 @@ void CUCode_Zelda::RenderAddVoice(ZeldaVoicePB &PB, s32* _LeftBuffer, s32* _Righ } ContinueWithBlock: - + if (PB.FilterEnable) { // 0x04a8 for (int i = 0; i < _Size; i++) @@ -590,7 +590,7 @@ ContinueWithBlock: { // TODO? } - + // Apply volume. There are two different modes. if (PB.VolumeMode != 0) { @@ -629,7 +629,7 @@ ContinueWithBlock: } // ZWW 0d34 - + int diff = (s16)PB.raw[0x2b] - (s16)PB.raw[0x2a]; PB.raw[0x2a] = PB.raw[0x2b]; @@ -649,7 +649,7 @@ ContinueWithBlock: // We just mix to the first two and call it stereo :p int value = b00[0x4 + count]; //int delta = b00[0xC + count] << 11; // Unused? - + int ramp = value << 16; for (int i = 0; i < _Size; i++) { @@ -730,7 +730,7 @@ ContinueWithBlock: } // Update the PB with the volume actually reached. PB.raw[addr++] = ramp >> 16; - + addr++; } } diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp index 47981192f3..c8b847c17c 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.cpp @@ -2,6 +2,10 @@ // Licensed under GPLv2 // Refer to the license.txt file included. +#ifdef _WIN32 +#include +#endif + #include "UCodes.h" #include "UCode_AX.h" diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.h index cd8e8f9552..7737a8a59b 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCodes.h @@ -90,7 +90,7 @@ protected: // Some ucodes (notably zelda) require a resume mail to be // sent if they are be started via PrepareBootUCode. - // The HLE can use this to + // The HLE can use this to bool NeedsResumeMail(); void DoStateShared(PointerWrap &p); diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.cpp index 1aa64aa190..9343fa7089 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.cpp @@ -10,7 +10,7 @@ #include "DSPSymbols.h" #include "DSP/DSPMemoryMap.h" -void DSPDebugInterface::disasm(unsigned int address, char *dest, int max_size) +void DSPDebugInterface::disasm(unsigned int address, char *dest, int max_size) { // we'll treat addresses as line numbers. strncpy(dest, DSPSymbols::GetLineText(address), max_size); @@ -72,7 +72,7 @@ bool DSPDebugInterface::isAlive() return true; //Core::GetState() != Core::CORE_UNINITIALIZED; } -bool DSPDebugInterface::isBreakpoint(unsigned int address) +bool DSPDebugInterface::isBreakpoint(unsigned int address) { int real_addr = DSPSymbols::Line2Addr(address); if (real_addr >= 0) @@ -97,7 +97,7 @@ void DSPDebugInterface::setBreakpoint(unsigned int address) void DSPDebugInterface::clearBreakpoint(unsigned int address) { int real_addr = DSPSymbols::Line2Addr(address); - + if (real_addr >= 0) { if (dsp_breakpoints.Remove(real_addr)) @@ -134,7 +134,7 @@ void DSPDebugInterface::toggleMemCheck(unsigned int address) PanicAlert("MemCheck functionality not supported in DSP module."); } -void DSPDebugInterface::insertBLR(unsigned int address, unsigned int value) +void DSPDebugInterface::insertBLR(unsigned int address, unsigned int value) { PanicAlert("insertBLR functionality not supported in DSP module."); } @@ -145,7 +145,7 @@ void DSPDebugInterface::insertBLR(unsigned int address, unsigned int value) int DSPDebugInterface::getColor(unsigned int address) { static const int colors[6] = - { + { 0xd0FFFF, // light cyan 0xFFd0d0, // light red 0xd8d8FF, // light blue @@ -175,24 +175,24 @@ int DSPDebugInterface::getColor(unsigned int address) // ============= -std::string DSPDebugInterface::getDescription(unsigned int address) +std::string DSPDebugInterface::getDescription(unsigned int address) { return ""; // g_symbolDB.GetDescription(address); } -unsigned int DSPDebugInterface::getPC() +unsigned int DSPDebugInterface::getPC() { return DSPSymbols::Addr2Line(g_dsp.pc); } -void DSPDebugInterface::setPC(unsigned int address) +void DSPDebugInterface::setPC(unsigned int address) { int new_pc = DSPSymbols::Line2Addr(address); if (new_pc > 0) g_dsp.pc = new_pc; } -void DSPDebugInterface::runToBreakpoint() +void DSPDebugInterface::runToBreakpoint() { } diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.h b/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.h index 2773b86870..ac34991149 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPDebugInterface.h @@ -14,7 +14,7 @@ class DSPDebugInterface : public DebugInterface { public: - DSPDebugInterface(){} + DSPDebugInterface(){} virtual void disasm(unsigned int address, char *dest, int max_size); virtual void getRawMemoryString(int memory, unsigned int address, char *dest, int max_size); virtual int getInstructionSize(int instruction) {return 1;} diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPHost.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPHost.cpp index 26e7110d6e..4b25f4ba20 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPHost.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPHost.cpp @@ -58,7 +58,7 @@ void DSPHost_CodeLoaded(const u8 *ptr, int size) DSPSymbols::Clear(); // Auto load text file - if none just disassemble. - + NOTICE_LOG(DSPLLE, "g_dsp.iram_crc: %08x", g_dsp.iram_crc); DSPSymbols::Clear(); diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp index d16af5f601..af747815d1 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp @@ -185,7 +185,7 @@ void DSPLLE::InitMixer() unsigned int AISampleRate, DACSampleRate; AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate); delete soundStream; - soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, 48000), m_hWnd); + soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, 48000), m_hWnd); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; @@ -294,7 +294,7 @@ void DSPLLE::DSP_Update(int cycles) cycles_between_ss_update = 121500000 / 200; else cycles_between_ss_update = 81000000 / 200; - + m_cycle_count += cycles; if (m_cycle_count > cycles_between_ss_update) { @@ -350,7 +350,7 @@ void DSPLLE::DSP_ClearAudioBuffer(bool mute) void DSPLLE::PauseAndLock(bool doLock, bool unpauseOnUnlock) { if (doLock || unpauseOnUnlock) - DSP_ClearAudioBuffer(doLock); + DSP_ClearAudioBuffer(doLock); if (doLock) m_csDSPThreadActive.lock(); diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h index 05321aee06..71addf77b0 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h @@ -40,7 +40,6 @@ private: std::thread m_hDSPThread; std::mutex m_csDSPThreadActive; bool m_InitMixer; - void *m_hWnd; bool m_bWii; bool m_bDSPThread; bool m_bIsRunning; diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp index a132d10654..c879f5604b 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.cpp @@ -6,6 +6,7 @@ #include "FileUtil.h" #include "DSP/DSPCore.h" #include "DSPLLEGlobals.h" +#include #if PROFILE @@ -37,15 +38,19 @@ void ProfilerDump(u64 count) File::IOFile pFile("DSP_Prof.txt", "wt"); if (pFile) { - fprintf(pFile.GetHandle(), "Number of DSP steps: %llu\n\n", count); + fprintf(pFile.GetHandle(), "Number of DSP steps: %" PRIu64 "\n\n", count); for (int i=0; i 0) { - fprintf(pFile.GetHandle(), "0x%04X: %llu\n", i, g_profileMap[i]); + fprintf(pFile.GetHandle(), "0x%04X: %" PRIu64 "\n", i, g_profileMap[i]); } } } } +#elif defined(_MSC_VER) + +namespace { char SilenceLNK4221; }; + #endif diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.h b/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.h index 281402297e..4b3902c635 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLEGlobals.h @@ -12,7 +12,7 @@ #define PROFILE 0 -#if PROFILE +#if PROFILE void ProfilerDump(u64 _count); void ProfilerInit(); void ProfilerAddDelta(int _addr, int _delta); diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp index 3bc919a17b..d0f50834a2 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLETools.cpp @@ -2,6 +2,10 @@ // Licensed under GPLv2 // Refer to the license.txt file included. +#ifdef _WIN32 +#include +#endif + #include #include @@ -51,7 +55,7 @@ bool DumpDSPCode(const u8 *code_be, int size_in_bytes, u32 crc) if (!disasm.Disassemble(0, code, 0x0000, text)) return false; - return File::WriteStringToFile(true, text, txtFile); + return File::WriteStringToFile(text, txtFile); } // TODO make this useful :p diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp index a0afc516dd..90beaed796 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.cpp @@ -64,10 +64,10 @@ Symbol *DSPSymbolDB::GetSymbolFromAddr(u32 addr) } else { - for (XFuncMap::iterator iter = functions.begin(); iter != functions.end(); ++iter) + for (auto& func : functions) { - if (addr >= iter->second.address && addr < iter->second.address + iter->second.size) - return &iter->second; + if (addr >= func.second.address && addr < func.second.address + func.second.size) + return &func.second; } } return 0; @@ -108,7 +108,7 @@ bool IsAlpha(char c) void DisasssembleRange(u16 start, u16 end) { - + } bool ReadAnnotatedAssembly(const char *filename) @@ -120,9 +120,9 @@ bool ReadAnnotatedAssembly(const char *filename) return false; } char line[512]; - + int last_addr = 0; - + lines.reserve(3000); // Symbol generation @@ -229,7 +229,7 @@ bool ReadAnnotatedAssembly(const char *filename) return false; } } - else + else { // if (line_counter >= 200 && line_counter <= 220) // NOTICE_LOG(DSPLLE, "Got Hex Digit %04x from %s, line %i", hex, line, line_counter); diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h index d4d8cdd242..c9b8214157 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPSymbols.h @@ -10,13 +10,13 @@ namespace DSPSymbols { -class DSPSymbolDB : public SymbolDB +class DSPSymbolDB : public SymbolDB { public: DSPSymbolDB() {} ~DSPSymbolDB() {} - - Symbol *GetSymbolFromAddr(u32 addr); + + Symbol *GetSymbolFromAddr(u32 addr) override; }; diff --git a/Source/Core/Core/Src/HW/DVDInterface.cpp b/Source/Core/Core/Src/HW/DVDInterface.cpp index bc6c44f7dd..fc326fec90 100644 --- a/Source/Core/Core/Src/HW/DVDInterface.cpp +++ b/Source/Core/Core/Src/HW/DVDInterface.cpp @@ -36,7 +36,7 @@ enum DI_COMMAND_1 = 0x0C, DI_COMMAND_2 = 0x10, DI_DMA_ADDRESS_REGISTER = 0x14, - DI_DMA_LENGTH_REGISTER = 0x18, + DI_DMA_LENGTH_REGISTER = 0x18, DI_DMA_CONTROL_REGISTER = 0x1C, DI_IMMEDIATE_DATA_BUFFER = 0x20, DI_CONFIG_REGISTER = 0x24 @@ -62,7 +62,7 @@ enum }; // DI Status Register -union UDISR +union UDISR { u32 Hex; struct @@ -284,7 +284,7 @@ void SetDiscInside(bool _DiscInside) } bool IsDiscInside() -{ +{ return g_bDiscInside; } @@ -342,7 +342,7 @@ void SetLidOpen(bool _bOpen) } bool IsLidOpen() -{ +{ return (m_DICVR.CVR == 1); } @@ -455,7 +455,7 @@ void Write32(const u32 _iValue, const u32 _iAddress) { _dbg_assert_(DVDINTERFACE, 0); } - + UpdateInterrupts(); } break; @@ -487,14 +487,14 @@ void Write32(const u32 _iValue, const u32 _iAddress) m_DILENGTH.Hex = _iValue & ~0x1f; } break; - case DI_DMA_CONTROL_REGISTER: + case DI_DMA_CONTROL_REGISTER: { m_DICR.Hex = _iValue & 7; if (m_DICR.TSTART) { if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bFastDiscSpeed) { - u64 ticksUntilTC = m_DILENGTH.Length * + u64 ticksUntilTC = m_DILENGTH.Length * (SystemTimers::GetTicksPerSecond() / (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii ? 1 : DISC_TRANSFER_RATE_GC)) + (SystemTimers::GetTicksPerSecond() * DISC_ACCESS_TIME_MS / 1000); CoreTiming::ScheduleEvent((int)ticksUntilTC, tc); @@ -541,7 +541,7 @@ void UpdateInterrupts() void GenerateDIInterrupt(DI_InterruptType _DVDInterrupt) { - switch(_DVDInterrupt) + switch(_DVDInterrupt) { case INT_DEINT: m_DISR.DEINT = 1; break; case INT_TCINT: m_DISR.TCINT = 1; break; @@ -709,7 +709,7 @@ void ExecuteCommand(UDICR& _DICR) { ERROR_LOG(DVDINTERFACE, "GC-AM: 0xAA, DMABuffer=%08x, DMALength=%08x", m_DIMAR.Address, m_DILENGTH.Length); u32 iDVDOffset = m_DICMDBUF[1].Hex << 2; - unsigned int len = m_DILENGTH.Length; + unsigned int len = m_DILENGTH.Length; int offset = iDVDOffset - 0x1F900000; /* if (iDVDOffset == 0x84800000) @@ -794,7 +794,7 @@ void ExecuteCommand(UDICR& _DICR) 3 - "Testing a game program. %d%%" 4 - "Loading a game program. %d%%" 5 - go - 6 - error xx + 6 - error xx */ media_buffer[8] = percentage; media_buffer[4] = 0x05; @@ -803,7 +803,7 @@ void ExecuteCommand(UDICR& _DICR) } case 0x101: media_buffer[4] = 3; // version - media_buffer[5] = 3; + media_buffer[5] = 3; media_buffer[6] = 1; // xxx media_buffer[8] = 1; media_buffer[16] = 0xFF; @@ -846,7 +846,7 @@ void ExecuteCommand(UDICR& _DICR) // Audio Stream (Immediate) // m_DICMDBUF[0].CMDBYTE1 = subcommand - // m_DICMDBUF[1].Hex << 2 = offset on disc + // m_DICMDBUF[1].Hex << 2 = offset on disc // m_DICMDBUF[2].Hex = Length of the stream case 0xE1: { diff --git a/Source/Core/Core/Src/HW/EXI.cpp b/Source/Core/Core/Src/HW/EXI.cpp index aa3e42c160..30b7728fe9 100644 --- a/Source/Core/Core/Src/HW/EXI.cpp +++ b/Source/Core/Core/Src/HW/EXI.cpp @@ -48,23 +48,23 @@ void Init() void Shutdown() { - for (u32 i = 0; i < NUM_CHANNELS; i++) + for (auto& channel : g_Channels) { - delete g_Channels[i]; - g_Channels[i] = NULL; + delete channel; + channel = NULL; } } void DoState(PointerWrap &p) { - for (int c = 0; c < NUM_CHANNELS; ++c) - g_Channels[c]->DoState(p); + for (auto& channel : g_Channels) + channel->DoState(p); } void PauseAndLock(bool doLock, bool unpauseOnUnlock) { - for (int c = 0; c < NUM_CHANNELS; ++c) - g_Channels[c]->PauseAndLock(doLock, unpauseOnUnlock); + for (auto& channel : g_Channels) + channel->PauseAndLock(doLock, unpauseOnUnlock); } @@ -87,9 +87,9 @@ void ChangeDevice(const u8 channel, const TEXIDevices device_type, const u8 devi IEXIDevice* FindDevice(TEXIDevices device_type, int customIndex) { - for (int i = 0; i < NUM_CHANNELS; ++i) + for (auto& channel : g_Channels) { - IEXIDevice* device = g_Channels[i]->FindDevice(device_type, customIndex); + IEXIDevice* device = channel->FindDevice(device_type, customIndex); if (device) return device; } @@ -145,8 +145,8 @@ void UpdateInterrupts() g_Channels[2]->SetEXIINT(g_Channels[0]->GetDevice(4)->IsInterruptSet()); bool causeInt = false; - for (int i = 0; i < NUM_CHANNELS; i++) - causeInt |= g_Channels[i]->IsCausingInterrupt(); + for (auto& channel : g_Channels) + causeInt |= channel->IsCausingInterrupt(); ProcessorInterface::SetInterrupt(ProcessorInterface::INT_CAUSE_EXI, causeInt); } diff --git a/Source/Core/Core/Src/HW/EXI_Channel.cpp b/Source/Core/Core/Src/HW/EXI_Channel.cpp index 13784b4011..a57b06914c 100644 --- a/Source/Core/Core/Src/HW/EXI_Channel.cpp +++ b/Source/Core/Core/Src/HW/EXI_Channel.cpp @@ -30,8 +30,8 @@ CEXIChannel::CEXIChannel(u32 ChannelId) : if (m_ChannelId == 1) m_Status.CHIP_SELECT = 1; - for (int i = 0; i < NUM_DEVICES; i++) - m_pDevices[i] = EXIDevice_Create(EXIDEVICE_NONE, m_ChannelId); + for (auto& device : m_pDevices) + device.reset(EXIDevice_Create(EXIDEVICE_NONE, m_ChannelId)); updateInterrupts = CoreTiming::RegisterEvent("EXIInterrupt", UpdateInterrupts); } @@ -43,11 +43,8 @@ CEXIChannel::~CEXIChannel() void CEXIChannel::RemoveDevices() { - for (int i = 0; i < NUM_DEVICES; i++) - { - delete m_pDevices[i]; - m_pDevices[i] = NULL; - } + for (auto& device : m_pDevices) + device.reset(); } void CEXIChannel::AddDevice(const TEXIDevices device_type, const int device_num) @@ -60,15 +57,8 @@ void CEXIChannel::AddDevice(IEXIDevice* pDevice, const int device_num, bool noti { _dbg_assert_(EXPANSIONINTERFACE, device_num < NUM_DEVICES); - // delete the old device - if (m_pDevices[device_num] != NULL) - { - delete m_pDevices[device_num]; - m_pDevices[device_num] = NULL; - } - // replace it with the new one - m_pDevices[device_num] = pDevice; + m_pDevices[device_num].reset(pDevice); if(notifyPresenceChanged) { @@ -111,9 +101,9 @@ IEXIDevice* CEXIChannel::GetDevice(const u8 chip_select) { switch (chip_select) { - case 1: return m_pDevices[0]; - case 2: return m_pDevices[1]; - case 4: return m_pDevices[2]; + case 1: return m_pDevices[0].get(); + case 2: return m_pDevices[1].get(); + case 4: return m_pDevices[2].get(); } return NULL; } @@ -121,10 +111,8 @@ IEXIDevice* CEXIChannel::GetDevice(const u8 chip_select) void CEXIChannel::Update() { // start the transfer - for (int i = 0; i < NUM_DEVICES; i++) - { - m_pDevices[i]->Update(); - } + for (auto& device : m_pDevices) + device->Update(); } void CEXIChannel::Read32(u32& _uReturnValue, const u32 _iRegister) @@ -283,7 +271,7 @@ void CEXIChannel::DoState(PointerWrap &p) for (int d = 0; d < NUM_DEVICES; ++d) { - IEXIDevice* pDevice = m_pDevices[d]; + IEXIDevice* pDevice = m_pDevices[d].get(); TEXIDevices type = pDevice->m_deviceType; p.Do(type); IEXIDevice* pSaveDevice = (type == pDevice->m_deviceType) ? pDevice : EXIDevice_Create(type, m_ChannelId); @@ -308,15 +296,15 @@ void CEXIChannel::DoState(PointerWrap &p) void CEXIChannel::PauseAndLock(bool doLock, bool unpauseOnUnlock) { - for (int d = 0; d < NUM_DEVICES; ++d) - m_pDevices[d]->PauseAndLock(doLock, unpauseOnUnlock); + for (auto& device : m_pDevices) + device->PauseAndLock(doLock, unpauseOnUnlock); } IEXIDevice* CEXIChannel::FindDevice(TEXIDevices device_type, int customIndex) { - for (int d = 0; d < NUM_DEVICES; ++d) + for (auto& sup : m_pDevices) { - IEXIDevice* device = m_pDevices[d]->FindDevice(device_type, customIndex); + IEXIDevice* device = sup->FindDevice(device_type, customIndex); if (device) return device; } diff --git a/Source/Core/Core/Src/HW/EXI_Channel.h b/Source/Core/Core/Src/HW/EXI_Channel.h index 403dbfe0dc..9ede316f0e 100644 --- a/Source/Core/Core/Src/HW/EXI_Channel.h +++ b/Source/Core/Core/Src/HW/EXI_Channel.h @@ -8,6 +8,7 @@ #include "CommonTypes.h" #include "EXI_Device.h" +#include #ifdef _WIN32 #pragma warning(disable:4201) @@ -92,7 +93,7 @@ private: NUM_DEVICES = 3 }; - IEXIDevice* m_pDevices[NUM_DEVICES]; + std::unique_ptr m_pDevices[NUM_DEVICES]; // Since channels operate a bit differently from each other u32 m_ChannelId; diff --git a/Source/Core/Core/Src/HW/EXI_Device.cpp b/Source/Core/Core/Src/HW/EXI_Device.cpp index b956859c76..a1c6e5ed80 100644 --- a/Source/Core/Core/Src/HW/EXI_Device.cpp +++ b/Source/Core/Core/Src/HW/EXI_Device.cpp @@ -71,7 +71,7 @@ class CEXIDummy : public IEXIDevice { std::string m_strName; - void TransferByte(u8& _byte) {} + void TransferByte(u8& _byte) override {} public: CEXIDummy(const std::string& _strName) : @@ -81,14 +81,14 @@ public: virtual ~CEXIDummy(){} - void ImmWrite(u32 data, u32 size) {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s ImmWrite: %08x", m_strName.c_str(), data);} - u32 ImmRead (u32 size) {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s ImmRead", m_strName.c_str()); return 0;} - void DMAWrite(u32 addr, u32 size) {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s DMAWrite: %08x bytes, from %08x to device", m_strName.c_str(), size, addr);} - void DMARead (u32 addr, u32 size) {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s DMARead: %08x bytes, from device to %08x", m_strName.c_str(), size, addr);} + void ImmWrite(u32 data, u32 size) override {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s ImmWrite: %08x", m_strName.c_str(), data);} + u32 ImmRead (u32 size) override {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s ImmRead", m_strName.c_str()); return 0;} + void DMAWrite(u32 addr, u32 size) override {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s DMAWrite: %08x bytes, from %08x to device", m_strName.c_str(), size, addr);} + void DMARead (u32 addr, u32 size) override {INFO_LOG(EXPANSIONINTERFACE, "EXI DUMMY %s DMARead: %08x bytes, from device to %08x", m_strName.c_str(), size, addr);} }; -// F A C T O R Y +// F A C T O R Y IEXIDevice* EXIDevice_Create(TEXIDevices device_type, const int channel_num) { IEXIDevice* result = NULL; diff --git a/Source/Core/Core/Src/HW/EXI_DeviceAD16.cpp b/Source/Core/Core/Src/HW/EXI_DeviceAD16.cpp index f0e0f96724..e4806b87da 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceAD16.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceAD16.cpp @@ -9,7 +9,7 @@ CEXIAD16::CEXIAD16() : m_uPosition(0), - m_uCommand(0) + m_uCommand(0) { m_uAD16Register.U32 = 0x00; } @@ -40,7 +40,7 @@ void CEXIAD16::TransferByte(u8& _byte) m_uAD16Register.U32 = 0x04120000; switch(m_uPosition) { - case 1: _dbg_assert_(EXPANSIONINTERFACE, (_byte == 0x00)); break; // just skip + case 1: _dbg_assert_(EXPANSIONINTERFACE, (_byte == 0x00)); break; // just skip case 2: _byte = m_uAD16Register.U8[0]; break; case 3: _byte = m_uAD16Register.U8[1]; break; case 4: _byte = m_uAD16Register.U8[2]; break; diff --git a/Source/Core/Core/Src/HW/EXI_DeviceAD16.h b/Source/Core/Core/Src/HW/EXI_DeviceAD16.h index de97d0d590..b80db4882b 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceAD16.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceAD16.h @@ -9,12 +9,12 @@ class CEXIAD16 : public IEXIDevice { public: CEXIAD16(); - virtual void SetCS(int _iCS); - virtual bool IsPresent(); - virtual void DoState(PointerWrap &p); + virtual void SetCS(int _iCS) override; + virtual bool IsPresent() override; + virtual void DoState(PointerWrap &p) override; private: - enum + enum { init = 0x00, write = 0xa0, @@ -32,7 +32,7 @@ private: u32 m_uCommand; UAD16Reg m_uAD16Register; - virtual void TransferByte(u8& _uByte); + virtual void TransferByte(u8& _uByte) override; }; #endif diff --git a/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.cpp b/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.cpp index 756fa85f62..03de8304f2 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.cpp @@ -45,7 +45,7 @@ void CEXIAMBaseboard::TransferByte(u8& _byte) xx xx xx xx 04 exi_isr_read: - 82 .. .. .. xx xx xx + 82 .. .. .. xx xx xx xx xx xx xx 04 rr rr 3 byte command, 1 byte checksum */ diff --git a/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h b/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h index 7a51a81baa..7ac6e9b624 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceAMBaseboard.h @@ -10,13 +10,13 @@ class CEXIAMBaseboard : public IEXIDevice public: CEXIAMBaseboard(); - virtual void SetCS(int _iCS); - virtual bool IsPresent(); - virtual bool IsInterruptSet(); - virtual void DoState(PointerWrap &p); + virtual void SetCS(int _iCS) override; + virtual bool IsPresent() override; + virtual bool IsInterruptSet() override; + virtual void DoState(PointerWrap &p) override; private: - virtual void TransferByte(u8& _uByte); + virtual void TransferByte(u8& _uByte) override; int m_position; bool m_have_irq; unsigned char m_command[4]; diff --git a/Source/Core/Core/Src/HW/EXI_DeviceEthernet.cpp b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.cpp index cfb8f37188..5e4b7be015 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceEthernet.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.cpp @@ -63,7 +63,7 @@ CEXIETHERNET::CEXIETHERNET() // Parse MAC address from config, and generate a new one if it doesn't // exist or can't be parsed. - auto &mac_addr_setting = SConfig::GetInstance().m_bba_mac; + auto &mac_addr_setting = SConfig::GetInstance().m_bba_mac; bool mac_addr_valid = false; u8 mac_addr[6] = { 0 }; @@ -87,7 +87,7 @@ CEXIETHERNET::CEXIETHERNET() mac_addr[x / 2] |= (c - 'a' + 10) << ((x & 1) ? 0 : 4); x++; } } - + if (x / 2 == 6) { memcpy(&mBbaMem[BBA_NAFR_PAR0], mac_addr, 6); @@ -259,7 +259,7 @@ void CEXIETHERNET::DMAWrite(u32 addr, u32 size) void CEXIETHERNET::DMARead(u32 addr, u32 size) { DEBUG_LOG(SP1, "DMA read: %08x %x", addr, size); - + memcpy(Memory::GetPointer(addr), &mBbaMem[transfer.address], size); transfer.address += size; @@ -550,7 +550,7 @@ bool CEXIETHERNET::RecvHandlePacket() if (!RecvMACFilter()) goto wait_for_next; - + #ifdef BBA_TRACK_PAGE_PTRS WARN_LOG(SP1, "RecvHandlePacket %x\n%s", mRecvBufferLength, ArrayToString(mRecvBuffer, mRecvBufferLength, 0x100).c_str()); diff --git a/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h index 7fb9a5775e..ba66e816f8 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceEthernet.h @@ -5,6 +5,10 @@ #ifndef _EXIDEVICE_ETHERNET_H #define _EXIDEVICE_ETHERNET_H +#ifdef _WIN32 +#include +#endif + #include "Thread.h" // Network Control Register A @@ -48,7 +52,7 @@ enum NWAYC NWAYC_FD = 0x01, // Full Duplex Mode NWAYC_PS100_10 = 0x02, // Port Select 100/10 NWAYC_ANE = 0x04, // Autonegotiate enable - + // Autonegotiation status bits... NWAYC_NTTEST = 0x40, // Reserved @@ -95,13 +99,13 @@ enum { BBA_NCRA = 0x00, BBA_NCRB = 0x01, - + BBA_LTPS = 0x04, BBA_LRPS = 0x05, - + BBA_IMR = 0x08, BBA_IR = 0x09, - + BBA_BP = 0x0a, BBA_TLBP = 0x0c, BBA_TWP = 0x0e, @@ -185,14 +189,14 @@ class CEXIETHERNET : public IEXIDevice public: CEXIETHERNET(); virtual ~CEXIETHERNET(); - void SetCS(int cs); - bool IsPresent(); - bool IsInterruptSet(); - void ImmWrite(u32 data, u32 size); - u32 ImmRead(u32 size); - void DMAWrite(u32 addr, u32 size); - void DMARead(u32 addr, u32 size); - void DoState(PointerWrap &p); + void SetCS(int cs) override; + bool IsPresent() override; + bool IsInterruptSet() override; + void ImmWrite(u32 data, u32 size) override; + u32 ImmRead(u32 size) override; + void DMAWrite(u32 addr, u32 size) override; + void DMARead(u32 addr, u32 size) override; + void DoState(PointerWrap &p) override; //private: struct diff --git a/Source/Core/Core/Src/HW/EXI_DeviceGecko.cpp b/Source/Core/Core/Src/HW/EXI_DeviceGecko.cpp index 792b045fd4..0bb84c4fdb 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceGecko.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceGecko.cpp @@ -108,31 +108,31 @@ void GeckoSockServer::ClientThread() while (client_running) { bool did_nothing = true; - + { std::lock_guard lk(transfer_lock); // what's an ideal buffer size? char data[128]; std::size_t got = 0; - + if (client.Receive(&data[0], ArraySize(data), got) == sf::Socket::Disconnected) client_running = false; - + if (got != 0) { did_nothing = false; - + recv_fifo.insert(recv_fifo.end(), &data[0], &data[got]); } if (!send_fifo.empty()) { did_nothing = false; - + std::vector packet(send_fifo.begin(), send_fifo.end()); send_fifo.clear(); - + if (client.Send(&packet[0], packet.size()) == sf::Socket::Disconnected) client_running = false; } @@ -165,7 +165,7 @@ void CEXIGecko::ImmReadWrite(u32 &_uData, u32 _uSize) "USBGecko: A piercing blue light is now shining in your general direction"), 3000); break; - + case CMD_INIT: _uData = ident; break; diff --git a/Source/Core/Core/Src/HW/EXI_DeviceGecko.h b/Source/Core/Core/Src/HW/EXI_DeviceGecko.h index f720a83a5d..97bb1b6829 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceGecko.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceGecko.h @@ -48,8 +48,8 @@ class CEXIGecko { public: CEXIGecko() {} - bool IsPresent() { return true; } - void ImmReadWrite(u32 &_uData, u32 _uSize); + bool IsPresent() override { return true; } + void ImmReadWrite(u32 &_uData, u32 _uSize) override; private: enum diff --git a/Source/Core/Core/Src/HW/EXI_DeviceIPL.cpp b/Source/Core/Core/Src/HW/EXI_DeviceIPL.cpp index 9402b7bbab..716b04969b 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceIPL.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceIPL.cpp @@ -92,7 +92,7 @@ CEXIIPL::CEXIIPL() : // Create the IPL m_pIPL = (u8*)AllocateMemoryPages(ROM_SIZE); - + if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHLE_BS2) { // Copy header @@ -119,7 +119,7 @@ CEXIIPL::CEXIIPL() : g_SRAM.lang = SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage; WriteProtectMemory(m_pIPL, ROM_SIZE); - m_uAddress = 0; + m_uAddress = 0; } CEXIIPL::~CEXIIPL() @@ -252,7 +252,7 @@ void CEXIIPL::TransferByte(u8& _uByte) DEBUG_LOG(EXPANSIONINTERFACE, "%s %s %08x", device_name.c_str(), IsWriteCommand() ? "write" : "read", m_uAddress); } - } + } else { // Actually read or write a byte @@ -279,7 +279,7 @@ void CEXIIPL::TransferByte(u8& _uByte) if (_uByte != '\0') m_szBuffer[m_count++] = _uByte; if ((m_count >= 256) || (_uByte == 0xD)) - { + { m_szBuffer[m_count] = 0x00; NOTICE_LOG(OSREPORT, "%s", m_szBuffer); memset(m_szBuffer, 0, sizeof(m_szBuffer)); diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp index 692db55ecc..1cdeb1fbcf 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.cpp @@ -16,7 +16,7 @@ #include "Sram.h" #include "GCMemcard.h" -#define MC_STATUS_BUSY 0x80 +#define MC_STATUS_BUSY 0x80 #define MC_STATUS_UNLOCKED 0x40 #define MC_STATUS_SLEEP 0x20 #define MC_STATUS_ERASEERROR 0x10 @@ -53,7 +53,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index) // we're potentially leaking events here, since there's no UnregisterEvent until emu shutdown, but I guess it's inconsequential et_this_card = CoreTiming::RegisterEvent((card_index == 0) ? "memcardFlushA" : "memcardFlushB", FlushCallback); et_cmd_done = CoreTiming::RegisterEvent((card_index == 0) ? "memcardDoneA" : "memcardDoneB", CmdDoneCallback); - + interruptSwitch = 0; m_bInterruptSet = 0; command = 0; @@ -61,7 +61,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index) m_uPosition = 0; memset(programming_buffer, 0, sizeof(programming_buffer)); formatDelay = 0; - + //Nintendo Memory Card EXI IDs //0x00000004 Memory Card 59 4Mbit //0x00000008 Memory Card 123 8Mb @@ -69,12 +69,12 @@ CEXIMemoryCard::CEXIMemoryCard(const int index) //0x00000020 Memory Card 507 32Mb //0x00000040 Memory Card 1019 64Mb //0x00000080 Memory Card 2043 128Mb - + //0x00000510 16Mb "bigben" card //card_id = 0xc243; - + card_id = 0xc221; // It's a Nintendo brand memcard - + File::IOFile pFile(m_strFilename, "rb"); if (pFile) { @@ -83,7 +83,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index) nintendo_card_id = memory_card_size / SIZE_TO_Mb; memory_card_content = new u8[memory_card_size]; memset(memory_card_content, 0xFF, memory_card_size); - + INFO_LOG(EXPANSIONINTERFACE, "Reading memory card %s", m_strFilename.c_str()); pFile.ReadBytes(memory_card_content, memory_card_size); @@ -96,7 +96,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index) memory_card_content = new u8[memory_card_size]; GCMemcard::Format(memory_card_content, m_strFilename.find(".JAP.raw") != std::string::npos, nintendo_card_id); - memset(memory_card_content+MC_HDR_SIZE, 0xFF, memory_card_size-MC_HDR_SIZE); + memset(memory_card_content+MC_HDR_SIZE, 0xFF, memory_card_size-MC_HDR_SIZE); WARN_LOG(EXPANSIONINTERFACE, "No memory card found. Will create a new one."); } SetCardFlashID(memory_card_content, card_index); @@ -167,14 +167,14 @@ CEXIMemoryCard::~CEXIMemoryCard() Flush(true); delete[] memory_card_content; memory_card_content = NULL; - + if (flushThread.joinable()) { flushThread.join(); } } -bool CEXIMemoryCard::IsPresent() +bool CEXIMemoryCard::IsPresent() { return true; } @@ -207,7 +207,7 @@ void CEXIMemoryCard::SetCS(int cs) m_uPosition = 0; } else - { + { switch (command) { case cmdSectorErase: @@ -248,7 +248,7 @@ void CEXIMemoryCard::SetCS(int cs) CmdDoneLater(5000); } - + // Page written to memory card, not just to buffer - let's schedule a flush 0.5b cycles into the future (1 sec) // But first we unschedule already scheduled flushes - no point in flushing once per page for a large write. CoreTiming::RemoveEvent(et_this_card); @@ -324,7 +324,7 @@ void CEXIMemoryCard::TransferByte(u8 &byte) byte = 0xFF; m_uPosition = 0; } - } + } else { switch (command) @@ -332,7 +332,7 @@ void CEXIMemoryCard::TransferByte(u8 &byte) case cmdNintendoID: // // Nintendo card: - // 00 | 80 00 00 00 10 00 00 00 + // 00 | 80 00 00 00 10 00 00 00 // "bigben" card: // 00 | ff 00 00 05 10 00 00 00 00 00 00 00 00 00 00 // we do it the Nintendo way. @@ -431,7 +431,7 @@ void CEXIMemoryCard::TransferByte(u8 &byte) default: WARN_LOG(EXPANSIONINTERFACE, "EXI MEMCARD: unknown command byte %02x\n", byte); - byte = 0xFF; + byte = 0xFF; } } m_uPosition++; @@ -474,7 +474,7 @@ void CEXIMemoryCard::DoState(PointerWrap &p) p.Do(nintendo_card_id); p.Do(card_id); p.Do(memory_card_size); - p.DoArray(memory_card_content, memory_card_size); + p.DoArray(memory_card_content, memory_card_size); p.Do(card_index); } } diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h index 2ccef0aeab..2651ca08f0 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h @@ -21,13 +21,13 @@ class CEXIMemoryCard : public IEXIDevice public: CEXIMemoryCard(const int index); virtual ~CEXIMemoryCard(); - void SetCS(int cs); - void Update(); - bool IsInterruptSet(); - bool IsPresent(); - void DoState(PointerWrap &p); - void PauseAndLock(bool doLock, bool unpauseOnUnlock=true); - IEXIDevice* FindDevice(TEXIDevices device_type, int customIndex=-1); + void SetCS(int cs) override; + void Update() override; + bool IsInterruptSet() override; + bool IsPresent() override; + void DoState(PointerWrap &p) override; + void PauseAndLock(bool doLock, bool unpauseOnUnlock=true) override; + IEXIDevice* FindDevice(TEXIDevices device_type, int customIndex=-1) override; private: // This is scheduled whenever a page write is issued. The this pointer is passed @@ -46,7 +46,7 @@ private: // Variant of CmdDone which schedules an event later in the future to complete the command. void CmdDoneLater(u64 cycles); - enum + enum { cmdNintendoID = 0x00, cmdReadArray = 0x52, @@ -79,17 +79,17 @@ private: u8 programming_buffer[128]; u32 formatDelay; bool m_bDirty; - //! memory card parameters + //! memory card parameters unsigned int nintendo_card_id, card_id; - unsigned int address; + unsigned int address; int memory_card_size; //! in bytes, must be power of 2. - u8 *memory_card_content; + u8 *memory_card_content; FlushData flushData; std::thread flushThread; - + protected: - virtual void TransferByte(u8 &byte); + virtual void TransferByte(u8 &byte) override; }; #endif diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMic.cpp b/Source/Core/Core/Src/HW/EXI_DeviceMic.cpp index 4a5b3cc0ae..6ad84cc860 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMic.cpp +++ b/Source/Core/Core/Src/HW/EXI_DeviceMic.cpp @@ -117,7 +117,7 @@ void CEXIMic::StreamStop() void CEXIMic::StreamReadOne() { std::lock_guard lk(ring_lock); - + if (samples_avail >= buff_size_samples) { s16 *last_buffer = &stream_buffer[stream_rpos]; @@ -149,10 +149,10 @@ CEXIMic::CEXIMic(int index) sample_rate = rate_base; buff_size = ring_base; buff_size_samples = buff_size / sample_size; - + ring_pos = 0; memset(ring_buffer, 0, sizeof(ring_buffer)); - + next_int_ticks = 0; StreamInit(); @@ -222,7 +222,7 @@ void CEXIMic::TransferByte(u8 &byte) status.button = Pad::GetMicButton(slot); byte = status.U8[pos ^ 1]; - + if (pos == 1) status.buff_ovrflw = 0; break; @@ -240,7 +240,7 @@ void CEXIMic::TransferByte(u8 &byte) buff_size_samples = buff_size / sample_size; UpdateNextInterruptTicks(); - + StreamStart(); } else if (wasactive && !status.is_active) @@ -254,7 +254,7 @@ void CEXIMic::TransferByte(u8 &byte) { if (ring_pos == 0) StreamReadOne(); - + byte = ring_buffer[ring_pos ^ 1]; ring_pos = (ring_pos + 1) % buff_size; } diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMic.h b/Source/Core/Core/Src/HW/EXI_DeviceMic.h index 093424df25..ff4fe522e6 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMic.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceMic.h @@ -92,7 +92,7 @@ public: int stream_wpos; int stream_rpos; int samples_avail; - + protected: virtual void TransferByte(u8 &byte); }; diff --git a/Source/Core/Core/Src/HW/GCMemcard.cpp b/Source/Core/Core/Src/HW/GCMemcard.cpp index 67102bbc8c..adaa7a1858 100644 --- a/Source/Core/Core/Src/HW/GCMemcard.cpp +++ b/Source/Core/Core/Src/HW/GCMemcard.cpp @@ -4,6 +4,9 @@ #include "GCMemcard.h" #include "ColorUtil.h" + +#include + static void ByteSwap(u8 *valueA, u8 *valueB) { u8 tmp = *valueA; @@ -64,8 +67,8 @@ GCMemcard::GCMemcard(const char *filename, bool forceCreation, bool sjis) return; } } - - + + mcdFile.Seek(0, SEEK_SET); if (!mcdFile.ReadBytes(&hdr, BLOCK_SIZE)) { @@ -103,7 +106,7 @@ GCMemcard::GCMemcard(const char *filename, bool forceCreation, bool sjis) } u32 csums = TestChecksums(); - + if (csums & 0x1) { // header checksum error! @@ -159,7 +162,7 @@ GCMemcard::GCMemcard(const char *filename, bool forceCreation, bool sjis) } mcdFile.Seek(0xa000, SEEK_SET); - + maxBlock = (u32)m_sizeMb * MBIT_TO_BLOCKS; mc_data_blocks.reserve(maxBlock - MC_FST_BLOCKS); @@ -173,18 +176,18 @@ GCMemcard::GCMemcard(const char *filename, bool forceCreation, bool sjis) } else { - PanicAlertT("Failed to read block %d of the save data\nMemcard may be truncated\nFilePosition:%llx", i, mcdFile.Tell()); + PanicAlertT("Failed to read block %d of the save data\nMemcard may be truncated\nFilePosition:%" PRIx64, i, mcdFile.Tell()); m_valid = false; break; } } mcdFile.Close(); - + initDirBatPointers(); } -void GCMemcard::initDirBatPointers() +void GCMemcard::initDirBatPointers() { if (BE16(dir.UpdateCounter) > (BE16(dir_backup.UpdateCounter))) { @@ -287,7 +290,7 @@ bool GCMemcard::FixChecksums() { if (!m_valid) return false; - + calc_checksumsBE((u16*)&hdr, 0xFE, &hdr.Checksum, &hdr.Checksum_Inv); calc_checksumsBE((u16*)&dir, 0xFFE, &dir.Checksum, &dir.Checksum_Inv); calc_checksumsBE((u16*)&dir_backup, 0xFFE, &dir_backup.Checksum, &dir_backup.Checksum_Inv); @@ -638,7 +641,7 @@ u32 GCMemcard::ImportFile(DEntry& direntry, std::vector &saveBlocks) if (firstBlock == 0xFFFF) return OUTOFBLOCKS; Directory UpdatedDir = *CurrentDir; - + // find first free dir entry for (int i=0; i < DIRLEN; i++) { @@ -672,19 +675,19 @@ u32 GCMemcard::ImportFile(DEntry& direntry, std::vector &saveBlocks) u16 nextBlock; // keep assuming no freespace fragmentation, and copy over all the data for (int i = 0; i < fileBlocks; ++i) - { + { if (firstBlock == 0xFFFF) PanicAlert("Fatal Error"); mc_data_blocks[firstBlock - MC_FST_BLOCKS] = saveBlocks[i]; if (i == fileBlocks-1) nextBlock = 0xFFFF; else - nextBlock = UpdatedBat.NextFreeBlock(firstBlock+1); + nextBlock = UpdatedBat.NextFreeBlock(firstBlock+1); UpdatedBat.Map[firstBlock - MC_FST_BLOCKS] = BE16(nextBlock); UpdatedBat.LastAllocated = BE16(firstBlock); firstBlock = nextBlock; } - + UpdatedBat.FreeBlocks = BE16(BE16(UpdatedBat.FreeBlocks) - fileBlocks); UpdatedBat.UpdateCounter = BE16(BE16(UpdatedBat.UpdateCounter) + 1); *PreviousBat = UpdatedBat; @@ -775,7 +778,7 @@ u32 GCMemcard::CopyFrom(const GCMemcard& source, u8 index) DEntry tempDEntry; if (!source.GetDEntry(index, tempDEntry)) return NOMEMCARD; - + u32 size = source.DEntry_BlockCount(index); if (size == 0xFFFF) return INVALIDFILESIZE; @@ -851,7 +854,7 @@ u32 GCMemcard::ImportGciInternal(FILE* gcih, const char *inputFile, const std::s return LENGTHFAIL; if (gci.Tell() != offset + DENTRY_SIZE) // Verify correct file position return OPENFAIL; - + u32 size = BE16((tempDEntry.BlockCount)); std::vector saveData; saveData.reserve(size); @@ -873,7 +876,7 @@ u32 GCMemcard::ImportGciInternal(FILE* gcih, const char *inputFile, const std::s } gci2.Seek(0, SEEK_SET); - if (!gci2.WriteBytes(&tempDEntry, DENTRY_SIZE)) + if (!gci2.WriteBytes(&tempDEntry, DENTRY_SIZE)) completeWrite = false; int fileBlocks = BE16(tempDEntry.BlockCount); gci2.Seek(DENTRY_SIZE, SEEK_SET); @@ -889,7 +892,7 @@ u32 GCMemcard::ImportGciInternal(FILE* gcih, const char *inputFile, const std::s else ret = WRITEFAIL; } - else + else ret = ImportFile(tempDEntry, saveData); return ret; @@ -925,7 +928,7 @@ u32 GCMemcard::ExportGci(u8 index, const char *fileName, const std::string &dire return OPENFAIL; gci.Seek(0, SEEK_SET); - + switch(offset) { case GCS: @@ -1064,7 +1067,7 @@ u32 GCMemcard::ReadAnimRGBA8(u8 index, u32* buffer, u8 *delays) const // To ensure only one type of icon is used // Sonic Heroes it the only game I have seen that tries to use a CI8 and RGB5A3 icon - //int fmtCheck = 0; + //int fmtCheck = 0; int formats = BE16(CurrentDir->Dir[index].IconFmt); int fdelays = BE16(CurrentDir->Dir[index].AnimSpeed); @@ -1230,7 +1233,7 @@ bool GCMemcard::Format(bool sjis, u16 SizeMb) gcp.dir_backup = &dir_backup; gcp.bat = &bat; gcp.bat_backup = &bat_backup; - + *(u16*)hdr.SizeMb = BE16(SizeMb); hdr.Encoding = BE16(sjis ? 1 : 0); FormatInternal(gcp); @@ -1243,7 +1246,7 @@ bool GCMemcard::Format(bool sjis, u16 SizeMb) GCMBlock b; mc_data_blocks.push_back(b); } - + initDirBatPointers(); m_valid = true; @@ -1260,7 +1263,7 @@ void GCMemcard::FormatInternal(GCMC_Header &GCP) { rand = (((rand * (u64)0x0000000041c64e6dULL) + (u64)0x0000000000003039ULL) >> 16); p_hdr->serial[i] = (u8)(g_SRAM.flash_id[0][i] + (u32)rand); - rand = (((rand * (u64)0x0000000041c64e6dULL) + (u64)0x0000000000003039ULL) >> 16); + rand = (((rand * (u64)0x0000000041c64e6dULL) + (u64)0x0000000000003039ULL) >> 16); rand &= (u64)0x0000000000007fffULL; } p_hdr->SramBias = g_SRAM.counter_bias; @@ -1276,7 +1279,7 @@ void GCMemcard::FormatInternal(GCMC_Header &GCP) p_dir_backup->UpdateCounter = BE16(1); calc_checksumsBE((u16*)p_dir, 0xFFE, &p_dir->Checksum, &p_dir->Checksum_Inv); calc_checksumsBE((u16*)p_dir_backup, 0xFFE, &p_dir_backup->Checksum, &p_dir_backup->Checksum_Inv); - + BlockAlloc *p_bat = GCP.bat, *p_bat_backup = GCP.bat_backup; p_bat_backup->UpdateCounter = BE16(1); @@ -1332,7 +1335,7 @@ s32 GCMemcard::FZEROGX_MakeSaveGameValid(DEntry& direntry, std::vector // calc 16-bit checksum for (i=0x02;i<0x8000;i++) - { + { chksum ^= (FileBuffer[block].block[i-(block*0x2000)]&0xFF); for (j=8; j > 0; j--) { diff --git a/Source/Core/Core/Src/HW/GCMemcard.h b/Source/Core/Core/Src/HW/GCMemcard.h index 215402dd10..fdd553194a 100644 --- a/Source/Core/Core/Src/HW/GCMemcard.h +++ b/Source/Core/Core/Src/HW/GCMemcard.h @@ -32,7 +32,7 @@ enum SAV = 0x80, SAVFAIL, GCS = 0x110, - GCSFAIL, + GCSFAIL, FAIL, WRITEFAIL, DELETE_FAIL, @@ -180,11 +180,11 @@ public: bool Save(); bool Format(bool sjis = false, u16 SizeMb = MemCard2043Mb); static bool Format(u8 * card_data, bool sjis = false, u16 SizeMb = MemCard2043Mb); - + static void calc_checksumsBE(u16 *buf, u32 length, u16 *csum, u16 *inv_csum); u32 TestChecksums() const; bool FixChecksums(); - + // get number of file entries in the directory u8 GetNumFiles() const; u8 GetFileIndex(u8 fileNumber) const; diff --git a/Source/Core/Core/Src/HW/GCPad.cpp b/Source/Core/Core/Src/HW/GCPad.cpp index 1a8ec37ea4..7c20c6df7c 100644 --- a/Source/Core/Core/Src/HW/GCPad.cpp +++ b/Source/Core/Core/Src/HW/GCPad.cpp @@ -70,7 +70,7 @@ void GetStatus(u8 _numPAD, SPADStatus* _pPADStatus) g_controller_interface.UpdateInput(); } _last_numPAD = _numPAD; - + // get input ((GCPad*)g_plugin.controllers[_numPAD])->GetInput(_pPADStatus); } @@ -105,7 +105,7 @@ void Rumble(u8 _numPAD, unsigned int _uType, unsigned int _uStrength) // __________________________________________________________________________________________________ // Function: Motor // Purpose: For devices with constant Force feedback -// input: _numPAD - The pad to operate on +// input: _numPAD - The pad to operate on // _uType - 06 = Motor On, 04 = Motor Off // _uStrength - 00 = Left Strong, 127 = Left Weak, 128 = Right Weak, 255 = Right Strong // output: none @@ -127,7 +127,7 @@ void Motor(u8 _numPAD, unsigned int _uType, unsigned int _uStrength) bool GetMicButton(u8 pad) { - + std::unique_lock lk(g_plugin.controls_lock, std::try_to_lock); if (!lk.owns_lock()) diff --git a/Source/Core/Core/Src/HW/GCPadEmu.cpp b/Source/Core/Core/Src/HW/GCPadEmu.cpp index a1e07794c7..28c33ae926 100644 --- a/Source/Core/Core/Src/HW/GCPadEmu.cpp +++ b/Source/Core/Core/Src/HW/GCPadEmu.cpp @@ -24,7 +24,7 @@ const u16 trigger_bitmasks[] = const u16 dpad_bitmasks[] = { - PAD_BUTTON_UP, PAD_BUTTON_DOWN, PAD_BUTTON_LEFT, PAD_BUTTON_RIGHT + PAD_BUTTON_UP, PAD_BUTTON_DOWN, PAD_BUTTON_LEFT, PAD_BUTTON_RIGHT }; const char* const named_buttons[] = @@ -65,8 +65,8 @@ GCPad::GCPad(const unsigned int index) : m_index(index) // triggers groups.push_back(m_triggers = new MixedTriggers(_trans("Triggers"))); - for (unsigned int i=0; i < sizeof(named_triggers)/sizeof(*named_triggers); ++i) - m_triggers->controls.push_back(new ControlGroup::Input(named_triggers[i])); + for (auto& named_trigger : named_triggers) + m_triggers->controls.push_back(new ControlGroup::Input(named_trigger)); // rumble groups.push_back(m_rumble = new ControlGroup(_trans("Rumble"))); @@ -74,8 +74,8 @@ GCPad::GCPad(const unsigned int index) : m_index(index) // dpad groups.push_back(m_dpad = new Buttons(_trans("D-Pad"))); - for (unsigned int i=0; i < 4; ++i) - m_dpad->controls.push_back(new ControlGroup::Input(named_directions[i])); + for (auto& named_direction : named_directions) + m_dpad->controls.push_back(new ControlGroup::Input(named_direction)); // options groups.push_back(m_options = new ControlGroup(_trans("Options"))); diff --git a/Source/Core/Core/Src/HW/GCPadEmu.h b/Source/Core/Core/Src/HW/GCPadEmu.h index aa5b33d252..94d07b539f 100644 --- a/Source/Core/Core/Src/HW/GCPadEmu.h +++ b/Source/Core/Core/Src/HW/GCPadEmu.h @@ -19,10 +19,10 @@ public: void SetMotor(const u8 on); bool GetMicButton() const; - - std::string GetName() const; - void LoadDefaults(const ControllerInterface& ciface); + std::string GetName() const override; + + void LoadDefaults(const ControllerInterface& ciface) override; private: diff --git a/Source/Core/Core/Src/HW/GPFifo.cpp b/Source/Core/Core/Src/HW/GPFifo.cpp index c889466938..88371a68d9 100644 --- a/Source/Core/Core/Src/HW/GPFifo.cpp +++ b/Source/Core/Core/Src/HW/GPFifo.cpp @@ -16,7 +16,7 @@ namespace GPFifo { // 32 Byte gather pipe with extra space -// Overfilling is no problem (up to the real limit), CheckGatherPipe will blast the +// Overfilling is no problem (up to the real limit), CheckGatherPipe will blast the // contents in nicely sized chunks // Other optimizations to think about: @@ -24,7 +24,7 @@ namespace GPFifo // If the gp is NOT linked to the fifo, just blast to memory byte by word // If the gp IS linked to the fifo, use a fast wrapping buffer and skip writing to memory -// Both of these should actually work! Only problem is that we have to decide at run time, +// Both of these should actually work! Only problem is that we have to decide at run time, // the same function could use both methods. Compile 2 different versions of each such block? u8 GC_ALIGNED32(m_gatherPipe[GATHER_PIPE_SIZE*16]); //more room, for the fastmodes @@ -80,10 +80,10 @@ void STACKALIGN CheckGatherPipe() g_video_backend->Video_GatherPipeBursted(); } - + // move back the spill bytes memmove(m_gatherPipe, m_gatherPipe + cnt, m_gatherPipeCount); - + // Profile where the FIFO writes are occurring. if (jit && PC != 0 && (jit->js.fifoWriteAddresses.find(PC)) == (jit->js.fifoWriteAddresses.end())) { diff --git a/Source/Core/Core/Src/HW/Memmap.cpp b/Source/Core/Core/Src/HW/Memmap.cpp index 3e236eaaf7..82f3141040 100644 --- a/Source/Core/Core/Src/HW/Memmap.cpp +++ b/Source/Core/Core/Src/HW/Memmap.cpp @@ -128,7 +128,7 @@ template void HW_Write_Memory(T _Data, const u32 _Address) } // Create shortcuts to the hardware devices' read and write functions. -// This can be seen as an alternative to a switch() or if() table. +// This can be seen as an alternative to a switch() or if() table. #define BLOCKSIZE 4 #define CP_START 0x00 //0x0000 >> 10 #define WII_IPC_START 0x00 //0x0000 >> 10 @@ -406,7 +406,7 @@ bool AreMemoryBreakpointsActivated() u32 Read_Instruction(const u32 em_address) { - UGeckoInstruction inst = ReadUnchecked_U32(em_address); + UGeckoInstruction inst = ReadUnchecked_U32(em_address); return inst.hex; } diff --git a/Source/Core/Core/Src/HW/Memmap.h b/Source/Core/Core/Src/HW/Memmap.h index 8a3516e8b1..819829c354 100644 --- a/Source/Core/Core/Src/HW/Memmap.h +++ b/Source/Core/Core/Src/HW/Memmap.h @@ -49,7 +49,7 @@ namespace Memory // In 64-bit, this might point to "high memory" (above the 32-bit limit), // so be sure to load it into a 64-bit register. -extern u8 *base; +extern u8 *base; // These are guaranteed to point to "low memory" addresses (sub-32-bit). extern u8 *m_pRAM; @@ -119,7 +119,7 @@ inline u32 ReadFast32(const u32 _Address) // used by interpreter to read instructions, uses iCache u32 Read_Opcode(const u32 _Address); -// this is used by Debugger a lot. +// this is used by Debugger a lot. // For now, just reads from memory! u32 Read_Instruction(const u32 _Address); diff --git a/Source/Core/Core/Src/HW/MemmapFunctions.cpp b/Source/Core/Core/Src/HW/MemmapFunctions.cpp index 3a6604a385..40bc5f4a3a 100644 --- a/Source/Core/Core/Src/HW/MemmapFunctions.cpp +++ b/Source/Core/Core/Src/HW/MemmapFunctions.cpp @@ -35,16 +35,16 @@ namespace Memory // EFB RE /* GXPeekZ -80322de8: rlwinm r0, r3, 2, 14, 29 (0003fffc) a = x << 2 & 0x3fffc +80322de8: rlwinm r0, r3, 2, 14, 29 (0003fffc) a = x << 2 & 0x3fffc 80322dec: oris r0, r0, 0xC800 a |= 0xc8000000 80322df0: rlwinm r3, r0, 0, 20, 9 (ffc00fff) x = a & 0xffc00fff -80322df4: rlwinm r0, r4, 12, 4, 19 (0ffff000) a = (y << 12) & 0x0ffff000; +80322df4: rlwinm r0, r4, 12, 4, 19 (0ffff000) a = (y << 12) & 0x0ffff000; 80322df8: or r0, r3, r0 a |= x; 80322dfc: rlwinm r0, r0, 0, 10, 7 (ff3fffff) a &= 0xff3fffff 80322e00: oris r3, r0, 0x0040 x = a | 0x00400000 80322e04: lwz r0, 0 (r3) r0 = *r3 -80322e08: stw r0, 0 (r5) z = -80322e0c: blr +80322e08: stw r0, 0 (r5) z = +80322e0c: blr */ @@ -128,7 +128,7 @@ inline void hwWriteIOBridge(u32 var, u32 addr) {WII_IOBridge::Write32(var, addr) inline void hwWriteIOBridge(u64 var, u32 addr) {PanicAlert("hwWriteIOBridge: There's no 64-bit HW write. %08x", addr);} // Nasty but necessary. Super Mario Galaxy pointer relies on this stuff. -u32 EFB_Read(const u32 addr) +u32 EFB_Read(const u32 addr) { u32 var = 0; // Convert address to coordinates. It's possible that this should be done @@ -327,7 +327,7 @@ u32 Read_Opcode(u32 _Address) return 0x00000000; } - if (Core::g_CoreStartupParameter.bMMU && + if (Core::g_CoreStartupParameter.bMMU && !Core::g_CoreStartupParameter.bTLBHack && (_Address & ADDR_MASK_MEM1)) { @@ -414,7 +414,7 @@ double Read_F64(const u32 _Address) u64 i; double d; } cvt; - + cvt.i = Read_U64(_Address); return cvt.d; } @@ -441,7 +441,7 @@ u32 Read_U16_ZX(const u32 _Address) return (u32)Read_U16(_Address); } -void Write_U8(const u8 _Data, const u32 _Address) +void Write_U8(const u8 _Data, const u32 _Address) { #ifdef ENABLE_MEM_CHECK TMemCheck *mc = PowerPC::memchecks.GetMemCheck(_Address); @@ -474,7 +474,7 @@ void Write_U16_Swap(const u16 _Data, const u32 _Address) { void Write_U32(const u32 _Data, const u32 _Address) -{ +{ #ifdef ENABLE_MEM_CHECK TMemCheck *mc = PowerPC::memchecks.GetMemCheck(_Address); if (mc) @@ -518,7 +518,7 @@ void Write_F64(const double _Data, const u32 _Address) Write_U64(cvt.i, _Address); } u8 ReadUnchecked_U8(const u32 _Address) -{ +{ u8 _var = 0; ReadFromHardware(_var, _Address, _Address, FLAG_NO_EXCEPTION); return _var; @@ -546,7 +546,7 @@ void WriteUnchecked_U32(const u32 _iValue, const u32 _Address) // ********************************************************************************* // Warning: Test Area // -// This code is for TESTING and it works in interpreter mode ONLY. Some games (like +// This code is for TESTING and it works in interpreter mode ONLY. Some games (like // COD iirc) work thanks to this basic TLB emulation. // It is just a small hack and we have never spend enough time to finalize it. // Cheers PearPC! @@ -576,26 +576,26 @@ void WriteUnchecked_U32(const u32 _iValue, const u32 _Address) #define PPC_EXC_DSISR_PAGE (1<<30) #define PPC_EXC_DSISR_PROT (1<<27) -#define PPC_EXC_DSISR_STORE (1<<25) +#define PPC_EXC_DSISR_STORE (1<<25) #define SDR1_HTABORG(v) (((v)>>16)&0xffff) #define SDR1_HTABMASK(v) ((v)&0x1ff) -#define SDR1_PAGETABLE_BASE(v) ((v)&0xffff) +#define SDR1_PAGETABLE_BASE(v) ((v)&0xffff) #define SR_T (1<<31) #define SR_Ks (1<<30) #define SR_Kp (1<<29) #define SR_N (1<<28) #define SR_VSID(v) ((v)&0xffffff) #define SR_BUID(v) (((v)>>20)&0x1ff) -#define SR_CNTRL_SPEC(v) ((v)&0xfffff) +#define SR_CNTRL_SPEC(v) ((v)&0xfffff) -#define EA_SR(v) (((v)>>28)&0xf) -#define EA_PageIndex(v) (((v)>>12)&0xffff) +#define EA_SR(v) (((v)>>28)&0xf) +#define EA_PageIndex(v) (((v)>>12)&0xffff) #define EA_Offset(v) ((v)&0xfff) -#define EA_API(v) (((v)>>22)&0x3f) +#define EA_API(v) (((v)>>22)&0x3f) #define PA_RPN(v) (((v)>>12)&0xfffff) -#define PA_Offset(v) ((v)&0xfff) +#define PA_Offset(v) ((v)&0xfff) #define PTE1_V (1<<31) #define PTE1_VSID(v) (((v)>>7)&0xffffff) @@ -611,7 +611,7 @@ void WriteUnchecked_U32(const u32 _iValue, const u32 _Address) // Hey! these duplicate a structure in Gekko.h union UPTE1 { - struct + struct { u32 API : 6; u32 H : 1; @@ -623,7 +623,7 @@ union UPTE1 union UPTE2 { - struct + struct { u32 PP : 2; u32 : 1; @@ -664,24 +664,24 @@ void SDRUpdated() u32 x = 1; u32 xx = 0; int n = 0; - while ((htabmask & x) && (n < 9)) + while ((htabmask & x) && (n < 9)) { n++; xx|=x; x<<=1; } - if (htabmask & ~xx) + if (htabmask & ~xx) { return; } u32 htaborg = SDR1_HTABORG(PowerPC::ppcState.spr[SPR_SDR]); - if (htaborg & xx) + if (htaborg & xx) { return; } PowerPC::ppcState.pagetable_base = htaborg<<16; PowerPC::ppcState.pagetable_hashmask = ((xx<<10)|0x3ff); -} +} // TLB cache @@ -785,7 +785,7 @@ void UpdateTLBEntry(const XCheckTLBFlag _Flag, UPTE2 PTE2, const u32 vpa) PowerPC::ppcState.itlb_last++; PowerPC::ppcState.itlb_last &= 127; PowerPC::ppcState.itlb_pa[PowerPC::ppcState.itlb_last] = PTE2.RPN << HW_PAGE_INDEX_SHIFT; - PowerPC::ppcState.itlb_va[PowerPC::ppcState.itlb_last] = vpa & ~0xfff; + PowerPC::ppcState.itlb_va[PowerPC::ppcState.itlb_last] = vpa & ~0xfff; } else { @@ -793,7 +793,7 @@ void UpdateTLBEntry(const XCheckTLBFlag _Flag, UPTE2 PTE2, const u32 vpa) PowerPC::ppcState.dtlb_last++; PowerPC::ppcState.dtlb_last &= 127; PowerPC::ppcState.dtlb_pa[PowerPC::ppcState.dtlb_last] = PTE2.RPN << HW_PAGE_INDEX_SHIFT; - PowerPC::ppcState.dtlb_va[PowerPC::ppcState.dtlb_last] = vpa & ~0xfff; + PowerPC::ppcState.dtlb_va[PowerPC::ppcState.dtlb_last] = vpa & ~0xfff; } #endif } @@ -845,12 +845,12 @@ u32 TranslatePageAddress(const u32 _Address, const XCheckTLBFlag _Flag) if (LookupTLBPageAddress(_Flag, _Address, &translatedAddress)) return translatedAddress; - u32 sr = PowerPC::ppcState.sr[EA_SR(_Address)]; + u32 sr = PowerPC::ppcState.sr[EA_SR(_Address)]; - u32 offset = EA_Offset(_Address); // 12 bit + u32 offset = EA_Offset(_Address); // 12 bit u32 page_index = EA_PageIndex(_Address); // 16 bit - u32 VSID = SR_VSID(sr); // 24 bit - u32 api = EA_API(_Address); // 6 bit (part of page_index) + u32 VSID = SR_VSID(sr); // 24 bit + u32 api = EA_API(_Address); // 6 bit (part of page_index) u8* pRAM = GetPointer(0); @@ -864,9 +864,9 @@ u32 TranslatePageAddress(const u32 _Address, const XCheckTLBFlag _Flag) UPTE1 PTE1; PTE1.Hex = bswap(*(u32*)&pRAM[pteg_addr]); - if (PTE1.V && !PTE1.H) + if (PTE1.V && !PTE1.H) { - if (VSID == PTE1.VSID && (api == PTE1.API)) + if (VSID == PTE1.VSID && (api == PTE1.API)) { UPTE2 PTE2; PTE2.Hex = bswap((*(u32*)&pRAM[(pteg_addr + 4)])); @@ -886,13 +886,13 @@ u32 TranslatePageAddress(const u32 _Address, const XCheckTLBFlag _Flag) return ((PTE2.RPN << 12) | offset); } } - pteg_addr+=8; + pteg_addr+=8; } // hash function no 2 "not" .360 hash1 = ~hash1; pteg_addr = ((hash1 & PowerPC::ppcState.pagetable_hashmask) << 6) | PowerPC::ppcState.pagetable_base; - for (int i = 0; i < 8; i++) + for (int i = 0; i < 8; i++) { u32 pte = bswap(*(u32*)&pRAM[pteg_addr]); if ((pte & PTE1_V) && (pte & PTE1_H)) @@ -910,13 +910,13 @@ u32 TranslatePageAddress(const u32 _Address, const XCheckTLBFlag _Flag) case FLAG_WRITE: PTE2.C = 1; break; case FLAG_NO_EXCEPTION: break; case FLAG_OPCODE: break; - } + } *(u32*)&pRAM[(pteg_addr + 4)] = bswap(PTE2.Hex); return ((PTE2.RPN << 12) | offset); } } - pteg_addr+=8; + pteg_addr+=8; } return 0; } diff --git a/Source/Core/Core/Src/HW/MemoryInterface.cpp b/Source/Core/Core/Src/HW/MemoryInterface.cpp index 9eb833cbc0..80f451687b 100644 --- a/Source/Core/Core/Src/HW/MemoryInterface.cpp +++ b/Source/Core/Core/Src/HW/MemoryInterface.cpp @@ -61,7 +61,7 @@ void Write32(const u32 _iValue, const u32 _iAddress) } //TODO : check -void Write16(const u16 _iValue, const u32 _iAddress) +void Write16(const u16 _iValue, const u32 _iAddress) { INFO_LOG(MEMMAP, "(w16) 0x%04x @ 0x%08x", _iValue, _iAddress); switch(_iAddress & 0xFFF) diff --git a/Source/Core/Core/Src/HW/MemoryInterface.h b/Source/Core/Core/Src/HW/MemoryInterface.h index ffa255b4b2..2a4fa2a8e1 100644 --- a/Source/Core/Core/Src/HW/MemoryInterface.h +++ b/Source/Core/Core/Src/HW/MemoryInterface.h @@ -13,7 +13,7 @@ namespace MemoryInterface void DoState(PointerWrap &p); void Read16(u16& _uReturnValue, const u32 _iAddress); -void Read32(u32& _uReturnValue, const u32 _iAddress); +void Read32(u32& _uReturnValue, const u32 _iAddress); void Write32(const u32 _iValue, const u32 _iAddress); void Write16(const u16 _iValue, const u32 _iAddress); } // end of namespace MemoryInterface diff --git a/Source/Core/Core/Src/HW/ProcessorInterface.cpp b/Source/Core/Core/Src/HW/ProcessorInterface.cpp index 273ee32231..68b0ce960b 100644 --- a/Source/Core/Core/Src/HW/ProcessorInterface.cpp +++ b/Source/Core/Core/Src/HW/ProcessorInterface.cpp @@ -101,12 +101,12 @@ void Read32(u32& _uReturnValue, const u32 _iAddress) { //INFO_LOG(PROCESSORINTERFACE, "(r32) 0x%08x", _iAddress); - switch(_iAddress & 0xFFF) + switch(_iAddress & 0xFFF) { case PI_INTERRUPT_CAUSE: _uReturnValue = m_InterruptCause; return; - + case PI_INTERRUPT_MASK: _uReturnValue = m_InterruptMask; return; @@ -136,31 +136,31 @@ void Read32(u32& _uReturnValue, const u32 _iAddress) INFO_LOG(PROCESSORINTERFACE, "Read flipper rev, 0x%08x", m_FlipperRev); _uReturnValue = m_FlipperRev; return; - + default: ERROR_LOG(PROCESSORINTERFACE, "!!!!Unknown write!!!! 0x%08x", _iAddress); break; } - + _uReturnValue = 0xAFFE0000; } void Write32(const u32 _uValue, const u32 _iAddress) { //INFO_LOG(PROCESSORINTERFACE, "(w32) 0x%08x @ 0x%08x", _uValue, _iAddress); - switch(_iAddress & 0xFFF) + switch(_iAddress & 0xFFF) { case PI_INTERRUPT_CAUSE: Common::AtomicAnd(m_InterruptCause, ~_uValue); // writes turn them off UpdateException(); return; - case PI_INTERRUPT_MASK: + case PI_INTERRUPT_MASK: m_InterruptMask = _uValue; DEBUG_LOG(PROCESSORINTERFACE,"New Interrupt mask: %08x", m_InterruptMask); UpdateException(); return; - + case PI_FIFO_BASE: Fifo_CPUBase = _uValue & 0xFFFFFFE0; DEBUG_LOG(PROCESSORINTERFACE,"Fifo base = %08x", _uValue); @@ -172,7 +172,7 @@ void Write32(const u32 _uValue, const u32 _iAddress) break; case PI_FIFO_WPTR: - Fifo_CPUWritePointer = _uValue & 0xFFFFFFE0; + Fifo_CPUWritePointer = _uValue & 0xFFFFFFE0; DEBUG_LOG(PROCESSORINTERFACE,"Fifo writeptr = %08x", _uValue); break; @@ -245,12 +245,12 @@ void SetInterrupt(u32 _causemask, bool _bSet) { DEBUG_LOG(PROCESSORINTERFACE, "Setting Interrupt %s (clear)", Debug_GetInterruptName(_causemask)); } - + if (_bSet) Common::AtomicOr(m_InterruptCause, _causemask); else Common::AtomicAnd(m_InterruptCause, ~_causemask);// is there any reason to have this possibility? - // F|RES: i think the hw devices reset the interrupt in the PI to 0 + // F|RES: i think the hw devices reset the interrupt in the PI to 0 // if the interrupt cause is eliminated. that isnt done by software (afaik) UpdateException(); } diff --git a/Source/Core/Core/Src/HW/ProcessorInterface.h b/Source/Core/Core/Src/HW/ProcessorInterface.h index ce81cb35ef..7feefa2e14 100644 --- a/Source/Core/Core/Src/HW/ProcessorInterface.h +++ b/Source/Core/Core/Src/HW/ProcessorInterface.h @@ -16,9 +16,9 @@ namespace ProcessorInterface enum InterruptCause { INT_CAUSE_PI = 0x1, // YAGCD says: GP runtime error - INT_CAUSE_RSW = 0x2, // Reset Switch - INT_CAUSE_DI = 0x4, // DVD interrupt - INT_CAUSE_SI = 0x8, // Serial interface + INT_CAUSE_RSW = 0x2, // Reset Switch + INT_CAUSE_DI = 0x4, // DVD interrupt + INT_CAUSE_SI = 0x8, // Serial interface INT_CAUSE_EXI = 0x10, // Expansion interface INT_CAUSE_AI = 0x20, // Audio Interface Streaming INT_CAUSE_DSP = 0x40, // DSP interface diff --git a/Source/Core/Core/Src/HW/SI.cpp b/Source/Core/Core/Src/HW/SI.cpp index 76810b7f6d..7f46b9a101 100644 --- a/Source/Core/Core/Src/HW/SI.cpp +++ b/Source/Core/Core/Src/HW/SI.cpp @@ -222,7 +222,7 @@ void DoState(PointerWrap &p) p.Do(g_Channel[i].m_InHi.Hex); p.Do(g_Channel[i].m_InLo.Hex); p.Do(g_Channel[i].m_Out.Hex); - + ISIDevice* pDevice = g_Channel[i].m_pDevice; SIDevices type = pDevice->GetDeviceType(); p.Do(type); @@ -249,13 +249,13 @@ void DoState(PointerWrap &p) p.DoPOD(g_StatusReg); p.Do(g_EXIClockCount); p.Do(g_SIBuffer); -} +} void Init() { for (int i = 0; i < NUMBER_OF_CHANNELS; i++) - { + { g_Channel[i].m_Out.Hex = 0; g_Channel[i].m_InHi.Hex = 0; g_Channel[i].m_InLo.Hex = 0; diff --git a/Source/Core/Core/Src/HW/SI_Device.cpp b/Source/Core/Core/Src/HW/SI_Device.cpp index e9674bcab6..ee0e649b5e 100644 --- a/Source/Core/Core/Src/HW/SI_Device.cpp +++ b/Source/Core/Core/Src/HW/SI_Device.cpp @@ -44,19 +44,19 @@ public: CSIDevice_Null(SIDevices device, int _iDeviceNumber) : ISIDevice(device, _iDeviceNumber) {} virtual ~CSIDevice_Null() {} - int RunBuffer(u8* _pBuffer, int _iLength) { + int RunBuffer(u8* _pBuffer, int _iLength) override { reinterpret_cast(_pBuffer)[0] = SI_ERROR_NO_RESPONSE; return 4; } - bool GetData(u32& _Hi, u32& _Low) { + bool GetData(u32& _Hi, u32& _Low) override { _Hi = 0x80000000; return true; } - void SendCommand(u32 _Cmd, u8 _Poll) {} + void SendCommand(u32 _Cmd, u8 _Poll) override {} }; -// F A C T O R Y +// F A C T O R Y ISIDevice* SIDevice_Create(const SIDevices device, const int port_number) { switch (device) diff --git a/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp b/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp index 83af23b7a7..96d3fba56c 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp +++ b/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.cpp @@ -92,7 +92,7 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength) int iPosition = 0; while(iPosition < _iLength) - { + { // read the command EBufferCommands command = static_cast(_pBuffer[iPosition ^ 3]); iPosition++; @@ -106,7 +106,7 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength) iPosition = _iLength; // break the while loop } break; - case CMD_GCAM: + case CMD_GCAM: { int i; @@ -188,7 +188,7 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength) case 0x1f: { ERROR_LOG(AMBASEBOARDDEBUG, "GC-AM: Command 1f, %02x %02x %02x %02x %02x (REGION)", ptr(1), ptr(2), ptr(3), ptr(4), ptr(5)); - unsigned char string[] = + unsigned char string[] = "\x00\x00\x30\x00" //"\x01\xfe\x00\x00" // JAPAN "\x02\xfd\x00\x00" // USA @@ -232,7 +232,7 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength) case 0x4e: case 0x4f: { - DEBUG_LOG(AMBASEBOARDDEBUG, "GC-AM: Command %02x, %02x %02x %02x %02x %02x %02x %02x (JVS IO)", + DEBUG_LOG(AMBASEBOARDDEBUG, "GC-AM: Command %02x, %02x %02x %02x %02x %02x %02x %02x (JVS IO)", ptr(0), ptr(1), ptr(2), ptr(3), ptr(4), ptr(5), ptr(6), ptr(7)); int pptr = 2; JVSIOMessage msg; @@ -283,8 +283,8 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength) msg.addData(1); msg.addData((void *)"\x01\x02\x0a\x00", 4); // 2 player, 10 bit msg.addData((void *)"\x02\x02\x00\x00", 4); // 2 coin slots - //msg.addData((void *)"\x03\x02\x08\x00", 4); - msg.addData((void *)"\x00\x00\x00\x00", 4); + //msg.addData((void *)"\x03\x02\x08\x00", 4); + msg.addData((void *)"\x00\x00\x00\x00", 4); break; case 0x15: while (*jvs_io++) {}; diff --git a/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.h b/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.h index 8c135ca980..d7b31a5ede 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.h +++ b/Source/Core/Core/Src/HW/SI_DeviceAMBaseboard.h @@ -20,13 +20,13 @@ public: CSIDevice_AMBaseboard(SIDevices device, int _iDeviceNumber); // run the SI Buffer - virtual int RunBuffer(u8* _pBuffer, int _iLength); + virtual int RunBuffer(u8* _pBuffer, int _iLength) override; // return true on new data - virtual bool GetData(u32& _Hi, u32& _Low); + virtual bool GetData(u32& _Hi, u32& _Low) override; // send a command directly - virtual void SendCommand(u32 _Cmd, u8 _Poll); + virtual void SendCommand(u32 _Cmd, u8 _Poll) override; }; #endif // _SIDEVICE_AMBASEBOARD_H diff --git a/Source/Core/Core/Src/HW/SI_DeviceDanceMat.cpp b/Source/Core/Core/Src/HW/SI_DeviceDanceMat.cpp index 8a21591b94..72420abf9b 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceDanceMat.cpp +++ b/Source/Core/Core/Src/HW/SI_DeviceDanceMat.cpp @@ -85,7 +85,7 @@ int CSIDevice_DanceMat::RunBuffer(u8* _pBuffer, int _iLength) for (int i = 0; i < (int)sizeof(SOrigin); i++) { _pBuffer[i ^ 3] = *pCalibration++; - } + } } break; @@ -94,7 +94,7 @@ int CSIDevice_DanceMat::RunBuffer(u8* _pBuffer, int _iLength) { ERROR_LOG(SERIALINTERFACE, "Unknown SI command (0x%x)", command); PanicAlert("SI: Unknown command (0x%x)", command); - } + } break; } @@ -112,7 +112,7 @@ bool CSIDevice_DanceMat::GetData(u32& _Hi, u32& _Low) { SPADStatus PadStatus; memset(&PadStatus, 0, sizeof(PadStatus)); - + Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); Movie::CallInputManip(&PadStatus, ISIDevice::m_iDeviceNumber); diff --git a/Source/Core/Core/Src/HW/SI_DeviceDanceMat.h b/Source/Core/Core/Src/HW/SI_DeviceDanceMat.h index 7c413026ec..f2dbb2f311 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceDanceMat.h +++ b/Source/Core/Core/Src/HW/SI_DeviceDanceMat.h @@ -13,7 +13,7 @@ class CSIDevice_DanceMat : public ISIDevice { private: - + // Commands enum EBufferCommands { @@ -47,7 +47,7 @@ private: union UCommand { u32 Hex; - struct + struct { u32 Parameter1 : 8; u32 Parameter2 : 8; @@ -86,20 +86,20 @@ public: CSIDevice_DanceMat(SIDevices device, int _iDeviceNumber); // Run the SI Buffer - virtual int RunBuffer(u8* _pBuffer, int _iLength); + virtual int RunBuffer(u8* _pBuffer, int _iLength) override; // Send and Receive pad input from network static bool NetPlay_GetInput(u8 numPAD, SPADStatus status, u32 *PADStatus); static u8 NetPlay_InGamePadToLocalPad(u8 numPAD); // Return true on new data - virtual bool GetData(u32& _Hi, u32& _Low); + virtual bool GetData(u32& _Hi, u32& _Low) override; // Send a command directly - virtual void SendCommand(u32 _Cmd, u8 _Poll); + virtual void SendCommand(u32 _Cmd, u8 _Poll) override; // Savestate support - virtual void DoState(PointerWrap& p); + virtual void DoState(PointerWrap& p) override; }; #endif diff --git a/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp b/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp index 937bf45036..6a59ecd3af 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp +++ b/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp @@ -26,9 +26,9 @@ void GBAConnectionWaiter() // "dolphin gba" if (!server.Listen(0xd6ba)) return; - + server.SetBlocking(false); - + sf::SocketTCP new_client; while (server_running) { diff --git a/Source/Core/Core/Src/HW/SI_DeviceGBA.h b/Source/Core/Core/Src/HW/SI_DeviceGBA.h index 7783d06285..d2fa333096 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGBA.h +++ b/Source/Core/Core/Src/HW/SI_DeviceGBA.h @@ -39,10 +39,10 @@ public: ~CSIDevice_GBA() {} // Run the SI Buffer - virtual int RunBuffer(u8* _pBuffer, int _iLength); + virtual int RunBuffer(u8* _pBuffer, int _iLength) override; - virtual bool GetData(u32& _Hi, u32& _Low) { return true; } - virtual void SendCommand(u32 _Cmd, u8 _Poll) {} + virtual bool GetData(u32& _Hi, u32& _Low) override { return true; } + virtual void SendCommand(u32 _Cmd, u8 _Poll) override {} }; #endif diff --git a/Source/Core/Core/Src/HW/SI_DeviceGCController.cpp b/Source/Core/Core/Src/HW/SI_DeviceGCController.cpp index b1a1bbeafa..2db017d5c6 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGCController.cpp +++ b/Source/Core/Core/Src/HW/SI_DeviceGCController.cpp @@ -85,7 +85,7 @@ int CSIDevice_GCController::RunBuffer(u8* _pBuffer, int _iLength) for (int i = 0; i < (int)sizeof(SOrigin); i++) { _pBuffer[i ^ 3] = *pCalibration++; - } + } } break; @@ -94,7 +94,7 @@ int CSIDevice_GCController::RunBuffer(u8* _pBuffer, int _iLength) { ERROR_LOG(SERIALINTERFACE, "Unknown SI command (0x%x)", command); PanicAlert("SI: Unknown command (0x%x)", command); - } + } break; } @@ -112,7 +112,7 @@ bool CSIDevice_GCController::GetData(u32& _Hi, u32& _Low) { SPADStatus PadStatus; memset(&PadStatus, 0, sizeof(PadStatus)); - + Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); Movie::CallInputManip(&PadStatus, ISIDevice::m_iDeviceNumber); diff --git a/Source/Core/Core/Src/HW/SI_DeviceGCController.h b/Source/Core/Core/Src/HW/SI_DeviceGCController.h index 9673041c6f..c0278eebfd 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGCController.h +++ b/Source/Core/Core/Src/HW/SI_DeviceGCController.h @@ -13,7 +13,7 @@ class CSIDevice_GCController : public ISIDevice { private: - + // Commands enum EBufferCommands { @@ -47,7 +47,7 @@ private: union UCommand { u32 Hex; - struct + struct { u32 Parameter1 : 8; u32 Parameter2 : 8; diff --git a/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.cpp b/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.cpp index 3540db325f..322b0bcfc2 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.cpp +++ b/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.cpp @@ -102,7 +102,7 @@ bool CSIDevice_GCSteeringWheel::GetData(u32& _Hi, u32& _Low) { SPADStatus PadStatus; memset(&PadStatus, 0, sizeof(PadStatus)); - + Pad::GetStatus(ISIDevice::m_iDeviceNumber, &PadStatus); Movie::CallInputManip(&PadStatus, ISIDevice::m_iDeviceNumber); diff --git a/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.h b/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.h index 2398b8f321..050a1220ce 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.h +++ b/Source/Core/Core/Src/HW/SI_DeviceGCSteeringWheel.h @@ -13,7 +13,7 @@ class CSIDevice_GCSteeringWheel : public ISIDevice { private: - + // Commands enum EBufferCommands { @@ -48,7 +48,7 @@ private: union UCommand { u32 Hex; - struct + struct { u32 Parameter1 : 8; u32 Parameter2 : 8; diff --git a/Source/Core/Core/Src/HW/Sram.cpp b/Source/Core/Core/Src/HW/Sram.cpp index ba2fa12957..8c135798b3 100644 --- a/Source/Core/Core/Src/HW/Sram.cpp +++ b/Source/Core/Core/Src/HW/Sram.cpp @@ -31,7 +31,7 @@ SRAM sram_dump = {{ #if 0 // german -SRAM sram_dump_german = {{ +SRAM sram_dump_german = {{ 0x1F, 0x66, 0xE0, 0x96, 0x00, 0x00, 0x00, 0x00, @@ -81,7 +81,7 @@ void SetCardFlashID(u8* buffer, u8 card_index) { rand = (((rand * (u64)0x0000000041c64e6dULL) + (u64)0x0000000000003039ULL) >> 16); csum += g_SRAM.flash_id[card_index][i] = buffer[i] - ((u8)rand&0xff); - rand = (((rand * (u64)0x0000000041c64e6dULL) + (u64)0x0000000000003039ULL) >> 16); + rand = (((rand * (u64)0x0000000041c64e6dULL) + (u64)0x0000000000003039ULL) >> 16); rand &= (u64)0x0000000000007fffULL; } g_SRAM.flashID_chksum[card_index] = csum^0xFF; diff --git a/Source/Core/Core/Src/HW/StreamADPCM.cpp b/Source/Core/Core/Src/HW/StreamADPCM.cpp index 91e4763ed2..4534f468a9 100644 --- a/Source/Core/Core/Src/HW/StreamADPCM.cpp +++ b/Source/Core/Core/Src/HW/StreamADPCM.cpp @@ -35,7 +35,7 @@ s16 ADPDecodeSample(s32 bits, s32 q, s32& hist1, s32& hist2) if (hist < -0x200000) hist = -0x200000; s32 cur = (((s16)(bits << 12) >> (q & 0xf)) << 6) + hist; - + hist2 = hist1; hist1 = cur; diff --git a/Source/Core/Core/Src/HW/SystemTimers.cpp b/Source/Core/Core/Src/HW/SystemTimers.cpp index bf77060c83..140ef652bf 100644 --- a/Source/Core/Core/Src/HW/SystemTimers.cpp +++ b/Source/Core/Core/Src/HW/SystemTimers.cpp @@ -119,7 +119,7 @@ int et_PatchEngine; // PatchEngine updates every 1/60th of a second by default // These are badly educated guesses // Feel free to experiment. Set these in Init below. int - // This is a fixed value, don't change it + // This is a fixed value, don't change it AUDIO_DMA_PERIOD, // Regulates the speed of the Command Processor @@ -200,7 +200,7 @@ void DecrementerSet() { CoreTiming::SetFakeDecStartTicks(CoreTiming::GetTicks()); CoreTiming::SetFakeDecStartValue(decValue); - + CoreTiming::ScheduleEvent(decValue * TIMER_RATIO, et_Dec); } } diff --git a/Source/Core/Core/Src/HW/VideoInterface.cpp b/Source/Core/Core/Src/HW/VideoInterface.cpp index a3d5f41d35..3c68493eed 100644 --- a/Source/Core/Core/Src/HW/VideoInterface.cpp +++ b/Source/Core/Core/Src/HW/VideoInterface.cpp @@ -461,7 +461,7 @@ void Write16(const u16 _iValue, const u32 _iAddress) } UpdateParameters(); - } + } break; case VI_HORIZONTAL_TIMING_0_HI: diff --git a/Source/Core/Core/Src/HW/VideoInterface.h b/Source/Core/Core/Src/HW/VideoInterface.h index 9004360b18..aaaedf5209 100644 --- a/Source/Core/Core/Src/HW/VideoInterface.h +++ b/Source/Core/Core/Src/HW/VideoInterface.h @@ -132,8 +132,8 @@ union UVIHorizontalTiming0 { u32 Hex; struct { u16 Lo, Hi; }; - struct - { + struct + { u32 HLW : 9; // Halfline Width (W*16 = Width (720)) u32 : 7; u32 HCE : 7; // Horizontal Sync Start to Color Burst End @@ -147,8 +147,8 @@ union UVIHorizontalTiming1 { u32 Hex; struct { u16 Lo, Hi; }; - struct - { + struct + { u32 HSY : 7; // Horizontal Sync Width u32 HBE640 : 9; // Horizontal Sync Start to horizontal blank end u32 : 1; @@ -162,8 +162,8 @@ union UVIVBlankTimingRegister { u32 Hex; struct { u16 Lo, Hi; }; - struct - { + struct + { u32 PRB : 10; // Pre-blanking in half lines u32 : 6; u32 PSB : 10; // Post blanking in half lines @@ -176,8 +176,8 @@ union UVIBurstBlankingRegister { u32 Hex; struct { u16 Lo, Hi; }; - struct - { + struct + { u32 BS0 : 5; // Field x start to burst blanking start in halflines u32 BE0 : 11; // Field x start to burst blanking end in halflines u32 BS2 : 5; // Field x+2 start to burst blanking start in halflines @@ -189,7 +189,7 @@ union UVIFBInfoRegister { u32 Hex; struct { u16 Lo, Hi; }; - struct + struct { // TODO: mask out lower 9bits/align to 9bits??? u32 FBB : 24; // Base address of the framebuffer in external mem @@ -205,8 +205,8 @@ union UVIInterruptRegister { u32 Hex; struct { u16 Lo, Hi; }; - struct - { + struct + { u32 HCT : 11; // Horizontal Position u32 : 5; u32 VCT : 11; // Vertical Position @@ -221,8 +221,8 @@ union UVILatchRegister { u32 Hex; struct { u16 Lo, Hi; }; - struct - { + struct + { u32 HCT : 11; // Horizontal Count u32 : 5; u32 VCT : 11; // Vertical Count @@ -307,7 +307,7 @@ union UVIBorderBlankRegister union UVIDTVStatus { u16 Hex; - struct + struct { u16 component_plugged : 1; u16 ntsc_j : 1; diff --git a/Source/Core/Core/Src/HW/WII_IPC.cpp b/Source/Core/Core/Src/HW/WII_IPC.cpp index b09d83f44b..d4535d1578 100644 --- a/Source/Core/Core/Src/HW/WII_IPC.cpp +++ b/Source/Core/Core/Src/HW/WII_IPC.cpp @@ -212,7 +212,7 @@ void Write32(const u32 _Value, const u32 _Address) _dbg_assert_msg_(WII_IPC, 0, "w32 %08x @ %08x", _Value, _Address); break; } - + WII_IPC_HLE_Interface::Update(); CoreTiming::ScheduleEvent_Threadsafe(0, updateInterrupts, 0); } diff --git a/Source/Core/Core/Src/HW/Wiimote.cpp b/Source/Core/Core/Src/HW/Wiimote.cpp index 2061e80f2e..da807735bc 100644 --- a/Source/Core/Core/Src/HW/Wiimote.cpp +++ b/Source/Core/Core/Src/HW/Wiimote.cpp @@ -43,15 +43,15 @@ void Initialize(void* const hwnd, bool wait) // add 4 wiimotes for (unsigned int i = WIIMOTE_CHAN_0; icontrols.push_back(new ControlGroup::Input(classic_button_names[i])); + for (auto& classic_button_name : classic_button_names) + m_buttons->controls.push_back(new ControlGroup::Input(classic_button_name)); // sticks groups.push_back(m_left_stick = new AnalogStick(_trans("Left Stick"))); @@ -66,13 +66,13 @@ Classic::Classic(WiimoteEmu::ExtensionReg& _reg) : Attachment(_trans("Classic"), // triggers groups.push_back(m_triggers = new MixedTriggers("Triggers")); - for (unsigned int i=0; i < sizeof(classic_trigger_names)/sizeof(*classic_trigger_names); ++i) - m_triggers->controls.push_back(new ControlGroup::Input(classic_trigger_names[i])); + for (auto& classic_trigger_name : classic_trigger_names) + m_triggers->controls.push_back(new ControlGroup::Input(classic_trigger_name)); // dpad groups.push_back(m_dpad = new Buttons("D-Pad")); - for (unsigned int i=0; i < 4; ++i) - m_dpad->controls.push_back(new ControlGroup::Input(named_directions[i])); + for (auto& named_direction : named_directions) + m_dpad->controls.push_back(new ControlGroup::Input(named_direction)); // set up register // calibration diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Drums.cpp index 1ae774ba7d..1d79de87bf 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Drums.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Drums.cpp @@ -36,8 +36,8 @@ Drums::Drums(WiimoteEmu::ExtensionReg& _reg) : Attachment(_trans("Drums"), _reg) { // pads groups.push_back(m_pads = new Buttons(_trans("Pads"))); - for (unsigned int i = 0; i < sizeof(drum_pad_names)/sizeof(*drum_pad_names); ++i) - m_pads->controls.push_back(new ControlGroup::Input(drum_pad_names[i])); + for (auto& drum_pad_name : drum_pad_names) + m_pads->controls.push_back(new ControlGroup::Input(drum_pad_name)); // stick groups.push_back(m_stick = new AnalogStick("Stick")); diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.cpp index 23a2f93054..92b09b1e1a 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.cpp @@ -40,8 +40,8 @@ Guitar::Guitar(WiimoteEmu::ExtensionReg& _reg) : Attachment(_trans("Guitar"), _r { // frets groups.push_back(m_frets = new Buttons(_trans("Frets"))); - for (unsigned int i = 0; i < sizeof(guitar_fret_names)/sizeof(*guitar_fret_names); ++i) - m_frets->controls.push_back(new ControlGroup::Input(guitar_fret_names[i])); + for (auto& guitar_fret_name : guitar_fret_names) + m_frets->controls.push_back(new ControlGroup::Input(guitar_fret_name)); // strum groups.push_back(m_strum = new Buttons(_trans("Strum"))); diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.h b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.h index 245ebabb90..1e33830a14 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.h +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Guitar.h @@ -11,7 +11,7 @@ class Guitar : public Attachment { public: Guitar(WiimoteEmu::ExtensionReg& _reg); - void GetState( u8* const data, const bool focus ); + void GetState( u8* const data, const bool focus ) override; enum { diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.cpp index 63dd485ed7..7f330ecc78 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.cpp @@ -17,7 +17,7 @@ static const u8 nunchuck_id[] = { 0x00, 0x00, 0xa4, 0x20, 0x00, 0x00 }; static const u8 nunchuck_calibration[] = { 0x80, 0x80, 0x80, 0x00, // accelerometer x, y, z neutral - 0xb3, 0xb3, 0xb3, 0x00, // x, y, z g-force values + 0xb3, 0xb3, 0xb3, 0x00, // x, y, z g-force values // 0x80 = analog stick x and y axis center 0xff, 0x00, 0x80, @@ -121,10 +121,10 @@ void Nunchuk::GetState(u8* const data, const bool focus) // buttons m_buttons->GetState(&ncdata->bt, nunchuk_button_bitmasks); } - + // flip the button bits :/ ncdata->bt ^= 0x03; - + if (m_udpWrap->inst) { if (m_udpWrap->updNun) @@ -151,7 +151,7 @@ void Nunchuk::GetState(u8* const data, const bool focus) accel.x = x; accel.y = y; accel.z = z; - } + } } wm_accel* dt = (wm_accel*)&ncdata->ax; diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.h b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.h index 3b720f73a7..975e1fbfee 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.h +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Nunchuk.h @@ -17,7 +17,7 @@ class Nunchuk : public Attachment public: Nunchuk(UDPWrapper * wrp, WiimoteEmu::ExtensionReg& _reg); - virtual void GetState( u8* const data, const bool focus ); + virtual void GetState( u8* const data, const bool focus ) override; enum { @@ -25,7 +25,7 @@ public: BUTTON_Z = 0x01, }; - void LoadDefaults(const ControllerInterface& ciface); + void LoadDefaults(const ControllerInterface& ciface) override; private: Tilt* m_tilt; @@ -37,7 +37,7 @@ private: AnalogStick* m_stick; u8 m_shake_step[3]; - + UDPWrapper* const m_udpWrap; }; diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.cpp index 901ad27c9f..83047114bc 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.cpp @@ -34,8 +34,8 @@ Turntable::Turntable(WiimoteEmu::ExtensionReg& _reg) : Attachment(_trans("Turnta { // buttons groups.push_back(m_buttons = new Buttons("Buttons")); - for (unsigned int i = 0; i < sizeof(turntable_button_names)/sizeof(*turntable_button_names); ++i) - m_buttons->controls.push_back(new ControlGroup::Input(turntable_button_names[i])); + for (auto& turntable_button_name : turntable_button_names) + m_buttons->controls.push_back(new ControlGroup::Input(turntable_button_name)); // turntables groups.push_back(m_left_table = new Slider(_trans("Table Left"))); diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.h b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.h index b2c73e1920..c416d69cfc 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.h +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Attachment/Turntable.h @@ -11,7 +11,7 @@ class Turntable : public Attachment { public: Turntable(WiimoteEmu::ExtensionReg& _reg); - void GetState(u8* const data, const bool focus); + void GetState(u8* const data, const bool focus) override; enum { diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/Encryption.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/Encryption.cpp index 70efdf2803..3c0c111a90 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/Encryption.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/Encryption.cpp @@ -196,10 +196,10 @@ void genkey(const u8* const rand, const u8 idx, u8* const key) { const u8* const ans = ans_tbl[idx]; u8 t0[10]; - + for(int i=0; i<10; ++i) t0[i] = tsbox[rand[i]]; - + key[0] = ((ror8((ans[0]^t0[5]),(t0[2]%8)) - t0[9]) ^ t0[4]); key[1] = ((ror8((ans[1]^t0[1]),(t0[0]%8)) - t0[5]) ^ t0[7]); key[2] = ((ror8((ans[2]^t0[6]),(t0[8]%8)) - t0[2]) ^ t0[0]); @@ -219,7 +219,7 @@ void gentabs(const u8* const rand, const u8* const key, const u8 idx, u8* const ft[5] = sboxes[idx][key[3]] ^ sboxes[(idx+1)%8][rand[9]]; ft[6] = sboxes[idx][rand[0]] ^ sboxes[(idx+1)%8][rand[6]]; ft[7] = sboxes[idx][rand[1]] ^ sboxes[(idx+1)%8][rand[8]]; - + sb[0] = sboxes[idx][key[0]] ^ sboxes[(idx+1)%8][rand[1]]; sb[1] = sboxes[idx][key[5]] ^ sboxes[(idx+1)%8][rand[4]]; sb[2] = sboxes[idx][key[3]] ^ sboxes[(idx+1)%8][rand[0]]; @@ -245,10 +245,10 @@ void wiimote_gen_key(wiimote_key* const key, const u8* const keydata) rand[9-i] = keydata[i]; for (int i=0; i<6; ++i) skey[5-i] = keydata[i+10]; - + //DEBUG_LOG(WIIMOTE, "rand: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", rand[0], rand[1], rand[2], rand[3], rand[4], rand[5], rand[6], rand[7], rand[8], rand[9]); //DEBUG_LOG(WIIMOTE, "key: %02x %02x %02x %02x %02x %02x", skey[0], skey[1], skey[2], skey[3], skey[4], skey[5]); - + for(idx = 0; idx < 7; ++idx) { genkey(rand, idx, testkey); @@ -257,12 +257,12 @@ void wiimote_gen_key(wiimote_key* const key, const u8* const keydata) } // default case is idx = 7 which is valid (homebrew uses it for the 0x17 case) //DEBUG_LOG(WIIMOTE, "idx: %d", idx); - + gentabs(rand, skey, idx, key->ft, key->sb); - + //DEBUG_LOG(WIIMOTE, "ft: %02x %02x %02x %02x %02x %02x %02x %02x", key->ft[0], key->ft[1], key->ft[2], key->ft[3], key->ft[4], key->ft[5], key->ft[6], key->ft[7]); //DEBUG_LOG(WIIMOTE, "sb: %02x %02x %02x %02x %02x %02x %02x %02x", key->sb[0], key->sb[1], key->sb[2], key->sb[3], key->sb[4], key->sb[5], key->sb[6], key->sb[7]); - + // for homebrew, ft and sb are all 0x97 which is equivalent to 0x17 } @@ -270,7 +270,7 @@ void wiimote_gen_key(wiimote_key* const key, const u8* const keydata) /* Encrypt data */ void wiimote_encrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len) { - for (int i = 0; i < len; ++i, ++addr) + for (int i = 0; i < len; ++i, ++addr) data[i] = (data[i] - key->ft[addr % 8]) ^ key->sb[addr % 8]; } diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/MatrixMath.h b/Source/Core/Core/Src/HW/WiimoteEmu/MatrixMath.h index b8abafbb3a..867b944b48 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/MatrixMath.h +++ b/Source/Core/Core/Src/HW/WiimoteEmu/MatrixMath.h @@ -27,9 +27,9 @@ inline void MatrixIdentity(Matrix & m) inline void MatrixFrustum(Matrix &m, double l, double r, double b, double t, double n, double f) { - m[0][0]=2*n/(r-l); m[0][1]=0; m[0][2]=0; m[0][3]=0; - m[1][0]=0; m[1][1]=2*n/(t-b); m[1][2]=0; m[1][3]=0; - m[2][0]=(r+l)/(r-l); m[2][1]=(t+b)/(t-b); m[2][2]=(f+n)/(f-n); m[2][3]=-1; + m[0][0]=2*n/(r-l); m[0][1]=0; m[0][2]=0; m[0][3]=0; + m[1][0]=0; m[1][1]=2*n/(t-b); m[1][2]=0; m[1][3]=0; + m[2][0]=(r+l)/(r-l); m[2][1]=(t+b)/(t-b); m[2][2]=(f+n)/(f-n); m[2][3]=-1; m[3][0]=0; m[3][1]=0; m[3][2]=2*f*n/(f-n); m[3][3]=0; } diff --git a/Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp index 94e7d88cd6..28f60940c4 100644 --- a/Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp +++ b/Source/Core/Core/Src/HW/WiimoteEmu/WiimoteEmu.cpp @@ -60,7 +60,7 @@ static const u8 eeprom_data_16D0[] = { 0x77, 0x88, 0x00, 0x00, 0x2B, 0x01, 0xE8, 0x13 }; -const ReportFeatures reporting_mode_features[] = +const ReportFeatures reporting_mode_features[] = { //0x30: Core Buttons { 2, 0, 0, 0, 4 }, @@ -97,7 +97,7 @@ void EmulateShake(AccelData* const accel // peak G-force double shake_intensity; - + // shake is a bitfield of X,Y,Z shake button states static const unsigned int btns[] = { 0x01, 0x02, 0x04 }; unsigned int shake = 0; @@ -264,8 +264,8 @@ Wiimote::Wiimote( const unsigned int index ) // buttons groups.push_back(m_buttons = new Buttons("Buttons")); - for (unsigned int i=0; i < sizeof(named_buttons)/sizeof(*named_buttons); ++i) - m_buttons->controls.push_back(new ControlGroup::Input( named_buttons[i])); + for (auto& named_button : named_buttons) + m_buttons->controls.push_back(new ControlGroup::Input( named_button)); // udp groups.push_back(m_udp = new UDPWrapper(m_index, _trans("UDP Wiimote"))); @@ -302,8 +302,8 @@ Wiimote::Wiimote( const unsigned int index ) // dpad groups.push_back(m_dpad = new Buttons("D-Pad")); - for (unsigned int i=0; i < 4; ++i) - m_dpad->controls.push_back(new ControlGroup::Input(named_directions[i])); + for (auto& named_direction : named_directions) + m_dpad->controls.push_back(new ControlGroup::Input(named_direction)); // options groups.push_back( m_options = new ControlGroup(_trans("Options"))); @@ -457,7 +457,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel) { float xx = 10000, yy = 0, zz = 0; double nsin,ncos; - + if (use_accel) { double ax,az,len; @@ -466,7 +466,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel) len=sqrt(ax*ax+az*az); if (len) { - ax/=len; + ax/=len; az/=len; //normalizing the vector nsin=ax; ncos=az; @@ -493,22 +493,22 @@ void Wiimote::GetIRData(u8* const data, bool use_accel) UDPTLayer::GetIR(m_udp, &xx, &yy, &zz); Vertex v[4]; - + static const int camWidth=1024; static const int camHeight=768; - static const double bndup=-0.315447; - static const double bnddown=0.85; - static const double bndleft=0.443364; - static const double bndright=-0.443364; + static const double bndup=-0.315447; + static const double bnddown=0.85; + static const double bndleft=0.443364; + static const double bndright=-0.443364; static const double dist1=100.f/camWidth; //this seems the optimal distance for zelda static const double dist2=1.2f*dist1; - for (int i=0; i<4; i++) + for (auto& vtx : v) { - v[i].x=xx*(bndright-bndleft)/2+(bndleft+bndright)/2; - if (m_sensor_bar_on_top) v[i].y=yy*(bndup-bnddown)/2+(bndup+bnddown)/2; - else v[i].y=yy*(bndup-bnddown)/2-(bndup+bnddown)/2; - v[i].z=0; + vtx.x=xx*(bndright-bndleft)/2+(bndleft+bndright)/2; + if (m_sensor_bar_on_top) vtx.y=yy*(bndup-bnddown)/2+(bndup+bnddown)/2; + else vtx.y=yy*(bndup-bnddown)/2-(bndup+bnddown)/2; + vtx.z=0; } v[0].x-=(zz*0.5+1)*dist1; @@ -553,7 +553,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel) wm_ir_basic* const irdata = (wm_ir_basic*)data; for (unsigned int i=0; i<2; ++i) { - if (x[i*2] < 1024 && y[i*2] < 768) + if (x[i*2] < 1024 && y[i*2] < 768) { irdata[i].x1 = u8(x[i*2]); irdata[i].x1hi = x[i*2] >> 8; @@ -616,7 +616,7 @@ void Wiimote::GetExtData(u8* const data) // Bit 0 of byte 4 is moved to bit 7 of byte 5 // Bit 3 of byte 5 is moved to bit 4 of byte 5, overwriting it // Bit 1 of byte 5 is moved to bit 3 of byte 5 - // Bit 0 of byte 5 is moved to bit 2 of byte 5, overwriting it + // Bit 0 of byte 5 is moved to bit 2 of byte 5, overwriting it case 0x5: //data[5] & (1 << 7) //data[4] & (1 << 0) @@ -659,7 +659,7 @@ void Wiimote::Update() u8 data[MAX_PAYLOAD]; memset(data, 0, sizeof(data)); - + // figure out what data we need s8 rptf_size = MAX_PAYLOAD; @@ -676,28 +676,28 @@ void Wiimote::Update() { data[0] = 0xA1; data[1] = m_reporting_mode; - + // core buttons if (rptf.core) GetCoreData(data + rptf.core); - + // acceleration if (rptf.accel) GetAccelData(data + rptf.accel, rptf.core?(data+rptf.core):NULL); - + // IR if (rptf.ir) - GetIRData(data + rptf.ir, (rptf.accel != 0)); - + GetIRData(data + rptf.ir, (rptf.accel != 0)); + // extension if (rptf.ext) GetExtData(data + rptf.ext); - + // hybrid wiimote stuff (for now, it's not supported while recording) if (WIIMOTE_SRC_HYBRID == g_wiimote_sources[m_index] && !Movie::IsRecordingInput()) { using namespace WiimoteReal; - + std::lock_guard lk(g_refresh_lock); if (g_wiimotes[m_index]) { @@ -712,11 +712,11 @@ void Wiimote::Update() if (real_data[1] >= WM_REPORT_CORE) { const ReportFeatures& real_rptf = reporting_mode_features[real_data[1] - WM_REPORT_CORE]; - + // force same report type from real-wiimote if (&real_rptf != &rptf) rptf_size = 0; - + // core // mix real-buttons with emu-buttons in the status struct, and in the report if (real_rptf.core && rptf.core) @@ -724,15 +724,15 @@ void Wiimote::Update() m_status.buttons |= *(wm_core*)(real_data + real_rptf.core); *(wm_core*)(data + rptf.core) = m_status.buttons; } - + // accel // use real-accel data always i guess if (real_rptf.accel && rptf.accel) memcpy(data + rptf.accel, real_data + real_rptf.accel, sizeof(wm_accel)); - + // ir // TODO - + // ext // use real-ext data if an emu-extention isn't chosen if (real_rptf.ext && rptf.ext && (0 == m_extension->switch_extension)) @@ -744,7 +744,7 @@ void Wiimote::Update() // use real-acks if an emu-extension isn't chosen rptf_size = -1; break; - + // use all status reports, after modification of the extension bit case WM_STATUS_REPORT : //if (m_extension->switch_extension) @@ -753,14 +753,14 @@ void Wiimote::Update() ((wm_status_report*)(real_data + 2))->extension = 1; rptf_size = -1; break; - + // use all read-data replies case WM_READ_DATA_REPLY: rptf_size = -1; break; - + } - + // copy over report from real-wiimote if (-1 == rptf_size) { @@ -794,7 +794,7 @@ void Wiimote::Update() } } -void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size) +void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size) { // Check for custom communication if (99 == _channelID) @@ -823,7 +823,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size case HID_TYPE_SET_REPORT : if (HID_PARAM_INPUT == hidp->param) { - PanicAlert("HID_TYPE_SET_REPORT - INPUT"); + PanicAlert("HID_TYPE_SET_REPORT - INPUT"); } else { diff --git a/Source/Core/Core/Src/HW/WiimoteReal/IONix.cpp b/Source/Core/Core/Src/HW/WiimoteReal/IONix.cpp index f06bec2dde..860a9a3d57 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/IONix.cpp +++ b/Source/Core/Core/Src/HW/WiimoteReal/IONix.cpp @@ -71,7 +71,7 @@ void WiimoteScanner::FindWiimotes(std::vector & found_wiimotes, Wiimot inquiry_info scan_infos[max_infos] = {}; auto* scan_infos_ptr = scan_infos; found_board = NULL; - + // Scan for bluetooth devices int const found_devices = hci_inquiry(device_id, wait_len, max_infos, NULL, &scan_infos_ptr, IREQ_CACHE_FLUSH); if (found_devices < 0) @@ -86,7 +86,7 @@ void WiimoteScanner::FindWiimotes(std::vector & found_wiimotes, Wiimot for (int i = 0; i < found_devices; ++i) { ERROR_LOG(WIIMOTE, "found a device..."); - + // BT names are a maximum of 248 bytes apparently char name[255] = {}; if (hci_read_remote_name(device_sock, &scan_infos[i].bdaddr, sizeof(name), name, 1000) < 0) diff --git a/Source/Core/Core/Src/HW/WiimoteReal/IOWin.cpp b/Source/Core/Core/Src/HW/WiimoteReal/IOWin.cpp index 58ebfbfa64..2f1efd0228 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/IOWin.cpp +++ b/Source/Core/Core/Src/HW/WiimoteReal/IOWin.cpp @@ -138,8 +138,8 @@ inline void init_lib() namespace WiimoteReal { - - + + int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stack_t &stack, const u8* buf, int len); int _IORead(HANDLE &dev_handle, OVERLAPPED &hid_overlap_read, u8* buf, int index); void _IOWakeup(HANDLE &dev_handle, OVERLAPPED &hid_overlap_read); @@ -217,7 +217,7 @@ void WiimoteScanner::FindWiimotes(std::vector & found_wiimotes, Wiimot // Query the data for this device if (SetupDiGetDeviceInterfaceDetail(device_info, &device_data, detail_data, len, NULL, NULL)) - { + { auto const wm = new Wiimote; wm->devicepath = detail_data->DevicePath; bool real_wiimote = false, is_bb = false; @@ -254,7 +254,7 @@ int CheckDeviceType_Write(HANDLE &dev_handle, const u8* buf, int size, int attem enum win_bt_stack_t stack = MSBT_STACK_UNKNOWN; DWORD written = 0; - + for (; attempts>0; --attempts) { if (_IOWrite(dev_handle, hid_overlap_write, stack, buf, size)) @@ -278,7 +278,7 @@ int CheckDeviceType_Write(HANDLE &dev_handle, const u8* buf, int size, int attem } } } - + CloseHandle(hid_overlap_write.hEvent); return written; @@ -295,7 +295,7 @@ int CheckDeviceType_Read(HANDLE &dev_handle, u8* buf, int attempts) if (read > 0) break; } - + CloseHandle(hid_overlap_read.hEvent); return read; @@ -308,17 +308,17 @@ void WiimoteScanner::CheckDeviceType(std::basic_string &devicepath, bool { real_wiimote = false; is_bb = false; - + #ifdef SHARE_WRITE_WIIMOTES std::lock_guard lk(g_connected_wiimotes_lock); if (g_connected_wiimotes.count(devicepath) != 0) return; #endif - + HANDLE dev_handle = CreateFile(devicepath.c_str(), - GENERIC_READ | GENERIC_WRITE, + GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, + NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if (dev_handle == INVALID_HANDLE_VALUE) return; @@ -326,7 +326,7 @@ void WiimoteScanner::CheckDeviceType(std::basic_string &devicepath, bool bool check_vidpid = false; HIDD_ATTRIBUTES attrib; attrib.Size = sizeof(attrib); - if (!check_vidpid || + if (!check_vidpid || (HidD_GetAttributes(dev_handle, &attrib) && (attrib.VendorID == 0x057e) && (attrib.ProductID == 0x0306))) @@ -343,18 +343,18 @@ void WiimoteScanner::CheckDeviceType(std::basic_string &devicepath, bool u8 const disable_enc_pt1_report[MAX_PAYLOAD] = {WM_SET_REPORT | WM_BT_OUTPUT, WM_WRITE_DATA, 0x04, 0xa4, 0x00, 0xf0, 0x01, 0x55}; u8 const disable_enc_pt2_report[MAX_PAYLOAD] = {WM_SET_REPORT | WM_BT_OUTPUT, WM_WRITE_DATA, 0x04, 0xa4, 0x00, 0xfb, 0x01, 0x00}; - rc = CheckDeviceType_Write(dev_handle, - disable_enc_pt1_report, - sizeof(disable_enc_pt1_report), + rc = CheckDeviceType_Write(dev_handle, + disable_enc_pt1_report, + sizeof(disable_enc_pt1_report), 1); - rc = CheckDeviceType_Write(dev_handle, - disable_enc_pt2_report, - sizeof(disable_enc_pt2_report), + rc = CheckDeviceType_Write(dev_handle, + disable_enc_pt2_report, + sizeof(disable_enc_pt2_report), 1); - - rc = CheckDeviceType_Write(dev_handle, - req_status_report, - sizeof(req_status_report), + + rc = CheckDeviceType_Write(dev_handle, + req_status_report, + sizeof(req_status_report), 1); while (rc > 0 && --max_cycles > 0) @@ -364,13 +364,13 @@ void WiimoteScanner::CheckDeviceType(std::basic_string &devicepath, bool // DEBUG_LOG(WIIMOTE, "CheckDeviceType: Read failed..."); break; } - + switch (buf[1]) { case WM_STATUS_REPORT: { real_wiimote = true; - + // DEBUG_LOG(WIIMOTE, "CheckDeviceType: Got Status Report"); wm_status_report * wsr = (wm_status_report*)&buf[2]; if (wsr->extension) @@ -402,7 +402,7 @@ void WiimoteScanner::CheckDeviceType(std::basic_string &devicepath, bool case WM_READ_DATA_REPLY: { // DEBUG_LOG(WIIMOTE, "CheckDeviceType: Got Data Reply"); - wm_read_data_reply * wrdr + wm_read_data_reply * wrdr = (wm_read_data_reply*)&buf[2]; // Check if it has returned what we asked. if (Common::swap16(wrdr->address) == 0x00fa) @@ -410,15 +410,15 @@ void WiimoteScanner::CheckDeviceType(std::basic_string &devicepath, bool real_wiimote = true; // 0x020420A40000ULL means balance board. u64 ext_type = (*(u64*)&wrdr->data[0]); - // DEBUG_LOG(WIIMOTE, - // "CheckDeviceType: GOT EXT TYPE %llX", + // DEBUG_LOG(WIIMOTE, + // "CheckDeviceType: GOT EXT TYPE %llX", // ext_type); is_bb = (ext_type == 0x020420A40000ULL); } else { - ERROR_LOG(WIIMOTE, - "CheckDeviceType: GOT UNREQUESTED ADDRESS %X", + ERROR_LOG(WIIMOTE, + "CheckDeviceType: GOT UNREQUESTED ADDRESS %X", Common::swap16(wrdr->address)); } // force end @@ -441,7 +441,7 @@ void WiimoteScanner::CheckDeviceType(std::basic_string &devicepath, bool bool WiimoteScanner::IsReady() const { // TODO: don't search for a radio each time - + BLUETOOTH_FIND_RADIO_PARAMS radioParam; radioParam.dwSize = sizeof(radioParam); @@ -581,7 +581,7 @@ int _IORead(HANDLE &dev_handle, OVERLAPPED &hid_overlap_read, u8* buf, int index buf[0] = 0xa1; // Used below for a warning buf[1] = 0; - + DWORD bytes = 0; ResetEvent(hid_overlap_read.hEvent); if (!ReadFile(dev_handle, buf + 1, MAX_PAYLOAD - 1, &bytes, &hid_overlap_read)) @@ -653,11 +653,11 @@ int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stac stack = MSBT_STACK_BLUESOLEIL; if (_IOWrite(dev_handle, hid_overlap_write, stack, buf, len)) return 1; - + stack = MSBT_STACK_MS; if (_IOWrite(dev_handle, hid_overlap_write, stack, buf, len)) return 1; - + stack = MSBT_STACK_UNKNOWN; break; } @@ -665,7 +665,7 @@ int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stac { auto result = HidD_SetOutputReport(dev_handle, const_cast(buf) + 1, len - 1); //FlushFileBuffers(dev_handle); - + if (!result) { auto err = GetLastError(); @@ -679,7 +679,7 @@ int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stac WARN_LOG(WIIMOTE, "IOWrite[MSBT_STACK_MS]: ERROR: %08x", err); } } - + return result; break; } @@ -692,7 +692,7 @@ int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stac std::fill(big_buf + len, big_buf + MAX_PAYLOAD, 0); buf = big_buf; } - + ResetEvent(hid_overlap_write.hEvent); DWORD bytes = 0; if (WriteFile(dev_handle, buf + 1, MAX_PAYLOAD - 1, &bytes, &hid_overlap_write)) @@ -711,7 +711,7 @@ int _IOWrite(HANDLE &dev_handle, OVERLAPPED &hid_overlap_write, enum win_bt_stac break; } } - + return 0; } @@ -738,9 +738,9 @@ void ProcessWiimotes(bool new_scan, T& callback) BLUETOOTH_FIND_RADIO_PARAMS radioParam; radioParam.dwSize = sizeof(radioParam); - + HANDLE hRadio; - + // TODO: save radio(s) in the WiimoteScanner constructor? // Enumerate BT radios diff --git a/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm b/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm index 4f015866bc..f59cffee2c 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm +++ b/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm @@ -1,5 +1,4 @@ #define BLUETOOTH_VERSION_USE_CURRENT -#import #include "Common.h" #include "WiimoteReal.h" diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp index ee6de5f19d..e5fff5b3f1 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp +++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp @@ -13,7 +13,7 @@ #include "Host.h" #include "ConfigManager.h" #include "SFML/Network.hpp" - + #include "WiimoteReal.h" @@ -61,14 +61,14 @@ void Wiimote::WriteReport(Report rpt) if (rpt.size() >= 3) { bool const new_rumble_state = (rpt[2] & 0x1) != 0; - + if (WM_RUMBLE == rpt[1] && new_rumble_state == m_rumble_state) { // If this is a rumble report and the rumble state didn't change, ignore //ERROR_LOG(WIIMOTE, "Ignoring rumble report."); return; } - + m_rumble_state = new_rumble_state; } @@ -80,7 +80,7 @@ void Wiimote::WriteReport(Report rpt) void Wiimote::QueueReport(u8 rpt_id, const void* _data, unsigned int size) { auto const data = static_cast(_data); - + Report rpt(size + 2); rpt[0] = WM_SET_REPORT | WM_BT_OUTPUT; rpt[1] = rpt_id; @@ -91,7 +91,7 @@ void Wiimote::QueueReport(u8 rpt_id, const void* _data, unsigned int size) void Wiimote::DisableDataReporting() { m_last_input_report.clear(); - + // This probably accomplishes nothing. wm_report_mode rpt = {}; rpt.mode = WM_REPORT_CORE; @@ -120,7 +120,7 @@ void Wiimote::SetChannel(u16 channel) void Wiimote::ClearReadQueue() { Report rpt; - + // The "Clear" function isn't thread-safe :/ while (m_read_reports.Pop(rpt)) {} @@ -151,12 +151,12 @@ void Wiimote::InterruptChannel(const u16 channel, const void* const _data, const if (channel != m_channel) { m_channel = channel; - + ClearReadQueue(); EmuStart(); } - + auto const data = static_cast(_data); Report rpt(data, data + size); WiimoteEmu::Wiimote *const wm = (WiimoteEmu::Wiimote*)::Wiimote::GetPlugin()->controllers[index]; @@ -168,7 +168,7 @@ void Wiimote::InterruptChannel(const u16 channel, const void* const _data, const { rpt[0] = WM_SET_REPORT | WM_BT_OUTPUT; } - + // Disallow games from turning off all of the LEDs. // It makes Wiimote connection status confusing. if (rpt[1] == WM_LEDS) @@ -226,9 +226,9 @@ bool Wiimote::Write() if (!m_write_reports.Empty()) { Report const& rpt = m_write_reports.Front(); - + bool const is_speaker_data = rpt[1] == WM_WRITE_SPEAKER_DATA; - + if (!is_speaker_data || m_last_audio_report.GetTimeDifference() > 5) { if (Core::g_CoreStartupParameter.iBBDumpPort > 0 && index == WIIMOTE_BALANCE_BOARD) @@ -237,15 +237,15 @@ bool Wiimote::Write() Socket.Send((char*)rpt.data(), rpt.size(), sf::IPAddress::LocalHost, Core::g_CoreStartupParameter.iBBDumpPort); } IOWrite(rpt.data(), rpt.size()); - + if (is_speaker_data) m_last_audio_report.Update(); - + m_write_reports.Pop(); return true; } } - + return false; } @@ -264,7 +264,7 @@ const Report& Wiimote::ProcessReadQueue() { // A non-data report, use it. return m_last_input_report; - + // Forget the last data report as it may be of the wrong type // or contain outdated button data // or it's not supposed to be sent at this time @@ -275,7 +275,7 @@ const Report& Wiimote::ProcessReadQueue() // If the last report wasn't a data report it's irrelevant. if (!IsDataReport(m_last_input_report)) m_last_input_report.clear(); - + // If it was a data report, we repeat that until something else comes in. return m_last_input_report; } @@ -307,13 +307,13 @@ bool Wiimote::PrepareOnThread() { // core buttons, no continuous reporting u8 static const mode_report[] = {WM_SET_REPORT | WM_BT_OUTPUT, WM_REPORT_MODE, 0, WM_REPORT_CORE}; - + // Set the active LEDs and turn on rumble. u8 static const led_report[] = {WM_SET_REPORT | WM_BT_OUTPUT, WM_LEDS, u8(WIIMOTE_LED_1 << (index%WIIMOTE_BALANCE_BOARD) | 0x1)}; // Turn off rumble u8 static const rumble_report[] = {WM_SET_REPORT | WM_BT_OUTPUT, WM_RUMBLE, 0}; - + // Request status report u8 static const req_status_report[] = {WM_SET_REPORT | WM_BT_OUTPUT, WM_REQUEST_STATUS, 0}; // TODO: check for sane response? @@ -469,7 +469,7 @@ void WiimoteScanner::ThreadFunc() //std::this_thread::yield(); Common::SleepCurrentThread(500); } - + NOTICE_LOG(WIIMOTE, "Wiimote scanning has stopped."); } @@ -565,7 +565,7 @@ void LoadSettings() sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU); } - + std::string secname("BalanceBoard"); IniFile::Section& sec = *inifile.GetOrCreateSection(secname.c_str()); sec.Get("Source", &g_wiimote_sources[WIIMOTE_BALANCE_BOARD], WIIMOTE_SRC_NONE); @@ -612,9 +612,9 @@ void Initialize(bool wait) // called on emulation shutdown void Stop(void) { - for (unsigned int i = 0; i < MAX_BBMOTES; ++i) - if (g_wiimotes[i] && g_wiimotes[i]->IsConnected()) - g_wiimotes[i]->EmuStop(); + for (auto& wiimote : g_wiimotes) + if (wiimote && wiimote->IsConnected()) + wiimote->EmuStop(); } // called when the dolphin app exits @@ -637,16 +637,16 @@ void Shutdown(void) void Resume() { - for (unsigned int i = 0; i < MAX_BBMOTES; ++i) - if (g_wiimotes[i] && g_wiimotes[i]->IsConnected()) - g_wiimotes[i]->EmuResume(); + for (auto& wiimote : g_wiimotes) + if (wiimote && wiimote->IsConnected()) + wiimote->EmuResume(); } void Pause() { - for (unsigned int i = 0; i < MAX_BBMOTES; ++i) - if (g_wiimotes[i] && g_wiimotes[i]->IsConnected()) - g_wiimotes[i]->EmuPause(); + for (auto& wiimote : g_wiimotes) + if (wiimote && wiimote->IsConnected()) + wiimote->EmuPause(); } void ChangeWiimoteSource(unsigned int index, int source) @@ -656,8 +656,6 @@ void ChangeWiimoteSource(unsigned int index, int source) g_wiimote_sources[index] = source; g_wiimote_scanner.WantWiimotes(0 != CalculateWantedWiimotes()); g_wiimote_scanner.WantBB(0 != CalculateWantedBB()); - - // kill real connection (or swap to different slot) DoneWithWiimote(index); } @@ -699,9 +697,9 @@ void TryToConnectWiimote(Wiimote* wm) } g_wiimote_scanner.WantWiimotes(0 != CalculateWantedWiimotes()); - + lk.unlock(); - + delete wm; } @@ -713,11 +711,11 @@ void TryToConnectBalanceBoard(Wiimote* wm) { wm = NULL; } - + g_wiimote_scanner.WantBB(0 != CalculateWantedBB()); - + lk.unlock(); - + delete wm; } @@ -733,7 +731,7 @@ void DoneWithWiimote(int index) // First see if we can use this real Wiimote in another slot. TryToConnectWiimote(wm); } - + // else, just disconnect the Wiimote HandleWiimoteDisconnect(index); } @@ -741,7 +739,7 @@ void DoneWithWiimote(int index) void HandleWiimoteDisconnect(int index) { Wiimote* wm = NULL; - + { std::lock_guard lk(g_refresh_lock); @@ -766,12 +764,12 @@ void HandleFoundWiimotes(const std::vector& wiimotes) void Refresh() { g_wiimote_scanner.StopScanning(); - + { std::unique_lock lk(g_refresh_lock); std::vector found_wiimotes; Wiimote* found_board = NULL; - + if (0 != CalculateWantedWiimotes() || 0 != CalculateWantedBB()) { // Don't hang Dolphin when searching @@ -796,7 +794,7 @@ void Refresh() if(found_board) TryToConnectBalanceBoard(found_board); } - + Initialize(); } diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h index e4e965400c..c4807ed95f 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h +++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h @@ -70,7 +70,7 @@ public: void DisableDataReporting(); void EnableDataReporting(u8 mode); void SetChannel(u16 channel); - + void QueueReport(u8 rpt_id, const void* data, unsigned int size); int index; @@ -104,7 +104,7 @@ protected: private: void ClearReadQueue(); void WriteReport(Report rpt); - + int IORead(u8* buf); int IOWrite(u8 const* buf, int len); void IOWakeup(); @@ -114,7 +114,7 @@ private: void WaitReady(); bool m_rumble_state; - + std::thread m_wiimote_thread; // Whether to keep running the thread. volatile bool m_run_thread; @@ -127,7 +127,7 @@ private: Common::FifoQueue m_read_reports; Common::FifoQueue m_write_reports; - + Common::Timer m_last_audio_report; }; @@ -138,7 +138,7 @@ public: ~WiimoteScanner(); bool IsReady() const; - + void WantWiimotes(bool do_want); void WantBB(bool do_want); diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteRealBase.h b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteRealBase.h index 0ad78610fe..82c18f6ec2 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteRealBase.h +++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteRealBase.h @@ -8,6 +8,13 @@ #ifdef _WIN32 #include #elif defined(__APPLE__) + // Work around an Apple bug: for some reason, IOBluetooth.h errors on + // inclusion in Mavericks, but only in Objective-C++ C++11 mode. I filed + // this as ; in the meantime... + #import + #undef NS_ENUM_AVAILABLE + #define NS_ENUM_AVAILABLE(...) + // end hack #import #elif defined(__linux__) && HAVE_BLUEZ #include diff --git a/Source/Core/Core/Src/Host.h b/Source/Core/Core/Src/Host.h index bb2c9af8aa..67c74faba8 100644 --- a/Source/Core/Core/Src/Host.h +++ b/Source/Core/Core/Src/Host.h @@ -13,7 +13,7 @@ // Common and Host. // Common simply provides OS-neutral implementations of things like threads, mutexes, -// INI file manipulation, memory mapping, etc. +// INI file manipulation, memory mapping, etc. // Host is an abstract interface for communicating things back to the host. The emulator // core is treated as a library, not as a main program, because it is far easier to diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.h index 0db0ff3853..5f492015f5 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.h @@ -13,7 +13,7 @@ namespace WII_IPC_HLE_Interface { #define IPC_FIRST_ID 0x00 // first IPC device ID -#define IPC_MAX_FILES 0x10 // first IPC file ID +#define IPC_MAX_FILES 0x10 // first IPC file ID void EnqueReplyCallback(u64 userdata, int =0); @@ -21,7 +21,7 @@ void EnqueReplyCallback(u64 userdata, int =0); void Init(); // Shutdown -void Shutdown(); +void Shutdown(); // Reset void Reset(bool _bHard = false); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device.h index 2cd2aa1ff4..49249a2053 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device.h @@ -12,27 +12,27 @@ #include "ChunkFile.h" #define FS_SUCCESS (u32)0 // Success -#define FS_EACCES (u32)-1 // Permission denied -#define FS_EEXIST (u32)-2 // File exists +#define FS_EACCES (u32)-1 // Permission denied +#define FS_EEXIST (u32)-2 // File exists #define FS_EINVAL (u32)-4 // Invalid argument Invalid FD -#define FS_ENOENT (u32)-6 // File not found -#define FS_EBUSY (u32)-8 // Resource busy -#define FS_EIO (u32)-12 // Returned on ECC error -#define FS_ENOMEM (u32)-22 // Alloc failed during request -#define FS_EFATAL (u32)-101 // Fatal error -#define FS_EACCESS (u32)-102 // Permission denied -#define FS_ECORRUPT (u32)-103 // returned for "corrupted" NAND -#define FS_EEXIST2 (u32)-105 // File exists -#define FS_ENOENT2 (u32)-106 // File not found -#define FS_ENFILE (u32)-107 // Too many fds open -#define FS_EFBIG (u32)-108 // Max block count reached? -#define FS_EFDEXHAUSTED (u32)-109 // Too many fds open -#define FS_ENAMELEN (u32)-110 // Pathname is too long -#define FS_EFDOPEN (u32)-111 // FD is already open -#define FS_EIO2 (u32)-114 // Returned on ECC error -#define FS_ENOTEMPTY (u32)-115 // Directory not empty -#define FS_EDIRDEPTH (u32)-116 // Max directory depth exceeded -#define FS_EBUSY2 (u32)-118 // Resource busy +#define FS_ENOENT (u32)-6 // File not found +#define FS_EBUSY (u32)-8 // Resource busy +#define FS_EIO (u32)-12 // Returned on ECC error +#define FS_ENOMEM (u32)-22 // Alloc failed during request +#define FS_EFATAL (u32)-101 // Fatal error +#define FS_EACCESS (u32)-102 // Permission denied +#define FS_ECORRUPT (u32)-103 // returned for "corrupted" NAND +#define FS_EEXIST2 (u32)-105 // File exists +#define FS_ENOENT2 (u32)-106 // File not found +#define FS_ENFILE (u32)-107 // Too many fds open +#define FS_EFBIG (u32)-108 // Max block count reached? +#define FS_EFDEXHAUSTED (u32)-109 // Too many fds open +#define FS_ENAMELEN (u32)-110 // Pathname is too long +#define FS_EFDOPEN (u32)-111 // FD is already open +#define FS_EIO2 (u32)-114 // Returned on ECC error +#define FS_ENOTEMPTY (u32)-115 // Directory not empty +#define FS_EDIRDEPTH (u32)-116 // Max directory depth exceeded +#define FS_EBUSY2 (u32)-118 // Resource busy //#define FS_EFATAL (u32)-119 // Fatal error not used by IOS as fatal ERROR #define FS_EESEXHAUSTED (u32)-1016 // Max of 2 ES handles at a time @@ -107,12 +107,12 @@ public: { } - virtual void DoState(PointerWrap& p) + virtual void DoState(PointerWrap& p) { DoStateShared(p); p.Do(m_Active); } - + void DoStateShared(PointerWrap& p); const std::string& GetDeviceName() const { return m_Name; } @@ -165,15 +165,15 @@ protected: LogTypes::LOG_TYPE LogType = LogTypes::WII_IPC_HLE, LogTypes::LOG_LEVELS Verbosity = LogTypes::LDEBUG) { - GENERIC_LOG(LogType, Verbosity, "CommandDump of %s", + GENERIC_LOG(LogType, Verbosity, "CommandDump of %s", GetDeviceName().c_str()); for (u32 i = 0; i < _NumberOfCommands; i++) { GENERIC_LOG(LogType, Verbosity, " Command%02i: 0x%08x", i, - Memory::Read_U32(_CommandAddress + i*4)); + Memory::Read_U32(_CommandAddress + i*4)); } } - + void DumpAsync(u32 BufferVector, u32 NumberInBuffer, u32 NumberOutBuffer, LogTypes::LOG_TYPE LogType = LogTypes::WII_IPC_HLE, LogTypes::LOG_LEVELS Verbosity = LogTypes::LDEBUG) diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp index 659807dcc4..e0106bf273 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp @@ -19,6 +19,8 @@ #include "../../DiscIO/Src/FileMonitor.h" +#include + using namespace DVDInterface; @@ -68,7 +70,7 @@ bool CWII_IPC_HLE_Device_di::Close(u32 _CommandAddress, bool _bForce) return true; } -bool CWII_IPC_HLE_Device_di::IOCtl(u32 _CommandAddress) +bool CWII_IPC_HLE_Device_di::IOCtl(u32 _CommandAddress) { u32 BufferIn = Memory::Read_U32(_CommandAddress + 0x10); u32 BufferInSize = Memory::Read_U32(_CommandAddress + 0x14); @@ -85,7 +87,7 @@ bool CWII_IPC_HLE_Device_di::IOCtl(u32 _CommandAddress) return true; } -bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress) +bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress) { SIOCtlVBuffer CommandBuffer(_CommandAddress); @@ -108,7 +110,7 @@ bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress) // Get TMD offset for requested partition... u64 const TMDOffset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2 ) + 0x2c0; - INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: TMDOffset 0x%016llx", TMDOffset); + INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: TMDOffset 0x%016" PRIx64, TMDOffset); static u32 const TMDsz = 0x208; //CommandBuffer.PayloadBuffer[0].m_Size; u8 pTMD[TMDsz]; @@ -204,13 +206,13 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32 pFilename = m_pFileSystem->GetFileName(DVDAddress); if (pFilename != NULL) { - INFO_LOG(WII_IPC_DVD, "DVDLowRead: %s (0x%llx) - (DVDAddr: 0x%llx, Size: 0x%x)", + INFO_LOG(WII_IPC_DVD, "DVDLowRead: %s (0x%" PRIx64 ") - (DVDAddr: 0x%" PRIx64 ", Size: 0x%x)", pFilename, m_pFileSystem->GetFileSize(pFilename), DVDAddress, Size); FileMon::CheckFile(std::string(pFilename), (int)m_pFileSystem->GetFileSize(pFilename)); } else { - INFO_LOG(WII_IPC_DVD, "DVDLowRead: file unknown - (DVDAddr: 0x%llx, Size: 0x%x)", + INFO_LOG(WII_IPC_DVD, "DVDLowRead: file unknown - (DVDAddr: 0x%" PRIx64 ", Size: 0x%x)", DVDAddress, Size); } } @@ -308,7 +310,7 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32 u64 DVDAddress = (u64)DVDAddress32 << 2; - INFO_LOG(WII_IPC_DVD, "DVDLowUnencryptedRead: DVDAddr: 0x%08llx, Size: 0x%x", DVDAddress, Size); + INFO_LOG(WII_IPC_DVD, "DVDLowUnencryptedRead: DVDAddr: 0x%08" PRIx64 ", Size: 0x%x", DVDAddress, Size); if (Size > _BufferOutSize) { @@ -342,12 +344,12 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32 pFilename = m_pFileSystem->GetFileName(DVDAddress); if (pFilename != NULL) { - INFO_LOG(WII_IPC_DVD, "DVDLowSeek: %s (0x%llx) - (DVDAddr: 0x%llx)", + INFO_LOG(WII_IPC_DVD, "DVDLowSeek: %s (0x%" PRIx64 ") - (DVDAddr: 0x%" PRIx64 ")", pFilename, m_pFileSystem->GetFileSize(pFilename), DVDAddress); } else { - INFO_LOG(WII_IPC_DVD, "DVDLowSeek: file unknown - (DVDAddr: 0x%llx)", + INFO_LOG(WII_IPC_DVD, "DVDLowSeek: file unknown - (DVDAddr: 0x%" PRIx64 ")", DVDAddress); } } @@ -418,7 +420,7 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32 case DVDLowAudioBufferConfig: /* For more information: http://www.crazynation.org/GC/GC_DD_TECH/GCTech.htm - + Upon Power up or reset , 2 commands must be issued for proper use of audio streaming: DVDReadDiskID A8000040,00000000,00000020 DVDLowAudioBufferConfig E4xx00yy,00000000,00000020 @@ -453,9 +455,9 @@ int CWII_IPC_HLE_Device_di::GetCmdDelay(u32 _CommandAddress) { u32 BufferIn = Memory::Read_U32(_CommandAddress + 0x10); u32 Command = Memory::Read_U32(BufferIn) >> 24; - + // Hacks below - + switch (Command) { case DVDLowRead: @@ -468,13 +470,13 @@ int CWII_IPC_HLE_Device_di::GetCmdDelay(u32 _CommandAddress) return SystemTimers::GetTicksPerSecond() / 975000 * Size; break; } - + case DVDLowClearCoverInterrupt: // Less than ~1/155th of a second hangs Oregon Trail at "loading wheel". // More than ~1/140th of a second hangs Resident Evil Archives: Resident Evil Zero. return SystemTimers::GetTicksPerSecond() / 146; break; - + // case DVDLowAudioBufferConfig: // case DVDLowInquiry: // case DVDLowReadDiskID: diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.h index 64be42f978..e5b19e4ab7 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.h @@ -24,9 +24,9 @@ public: bool Open(u32 _CommandAddress, u32 _Mode); bool Close(u32 _CommandAddress, bool _bForce); - bool IOCtl(u32 _CommandAddress); + bool IOCtl(u32 _CommandAddress); bool IOCtlV(u32 _CommandAddress); - + int GetCmdDelay(u32); private: diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp index 6e2f02e2be..1a8febe6fd 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.cpp @@ -21,10 +21,10 @@ std::string HLE_IPC_BuildFilename(std::string path_wii, int _size) std::string path_full = File::GetUserPath(D_WIIROOT_IDX); // Replaces chars that FAT32 can't support with strings defined in /sys/replace - for (auto i = replacements.begin(); i != replacements.end(); ++i) + for (auto& replacement : replacements) { - for (size_t j = 0; (j = path_wii.find(i->first, j)) != path_wii.npos; ++j) - path_wii.replace(j, 1, i->second); + for (size_t j = 0; (j = path_wii.find(replacement.first, j)) != path_wii.npos; ++j) + path_wii.replace(j, 1, replacement.second); } path_full += path_wii; @@ -79,7 +79,7 @@ CWII_IPC_HLE_Device_FileIO::~CWII_IPC_HLE_Device_FileIO() bool CWII_IPC_HLE_Device_FileIO::Close(u32 _CommandAddress, bool _bForce) { - INFO_LOG(WII_IPC_FILEIO, "FileIO: Close %s (DeviceID=%08x)", m_Name.c_str(), m_DeviceID); + INFO_LOG(WII_IPC_FILEIO, "FileIO: Close %s (DeviceID=%08x)", m_Name.c_str(), m_DeviceID); m_Mode = 0; // Close always return 0 for success @@ -89,11 +89,11 @@ bool CWII_IPC_HLE_Device_FileIO::Close(u32 _CommandAddress, bool _bForce) return true; } -bool CWII_IPC_HLE_Device_FileIO::Open(u32 _CommandAddress, u32 _Mode) +bool CWII_IPC_HLE_Device_FileIO::Open(u32 _CommandAddress, u32 _Mode) { m_Mode = _Mode; u32 ReturnValue = 0; - + static const char* const Modes[] = { "Unk Mode", @@ -101,9 +101,9 @@ bool CWII_IPC_HLE_Device_FileIO::Open(u32 _CommandAddress, u32 _Mode) "Write only", "Read and Write" }; - + m_filepath = HLE_IPC_BuildFilename(m_Name, 64); - + // The file must exist before we can open it // It should be created by ISFS_CreateFile, not here if (File::Exists(m_filepath)) @@ -126,23 +126,23 @@ bool CWII_IPC_HLE_Device_FileIO::Open(u32 _CommandAddress, u32 _Mode) File::IOFile CWII_IPC_HLE_Device_FileIO::OpenFile() { const char* open_mode = ""; - + switch (m_Mode) { case ISFS_OPEN_READ: open_mode = "rb"; break; - + case ISFS_OPEN_WRITE: case ISFS_OPEN_RW: open_mode = "r+b"; break; - + default: PanicAlertT("FileIO: Unknown open mode : 0x%02x", m_Mode); break; } - + return File::IOFile(m_filepath, open_mode); } @@ -207,8 +207,8 @@ bool CWII_IPC_HLE_Device_FileIO::Seek(u32 _CommandAddress) return true; } -bool CWII_IPC_HLE_Device_FileIO::Read(u32 _CommandAddress) -{ +bool CWII_IPC_HLE_Device_FileIO::Read(u32 _CommandAddress) +{ u32 ReturnValue = FS_EACCESS; const u32 Address = Memory::Read_U32(_CommandAddress + 0xC); // Read to this memory address const u32 Size = Memory::Read_U32(_CommandAddress + 0x10); @@ -233,12 +233,12 @@ bool CWII_IPC_HLE_Device_FileIO::Read(u32 _CommandAddress) { m_SeekPos += Size; } - + } } else { - ERROR_LOG(WII_IPC_FILEIO, "FileIO: Failed to read from %s (Addr=0x%08x Size=0x%x) - file could not be opened or does not exist", m_Name.c_str(), Address, Size); + ERROR_LOG(WII_IPC_FILEIO, "FileIO: Failed to read from %s (Addr=0x%08x Size=0x%x) - file could not be opened or does not exist", m_Name.c_str(), Address, Size); ReturnValue = FS_FILE_NOT_EXIST; } @@ -246,8 +246,8 @@ bool CWII_IPC_HLE_Device_FileIO::Read(u32 _CommandAddress) return true; } -bool CWII_IPC_HLE_Device_FileIO::Write(u32 _CommandAddress) -{ +bool CWII_IPC_HLE_Device_FileIO::Write(u32 _CommandAddress) +{ u32 ReturnValue = FS_EACCESS; const u32 Address = Memory::Read_U32(_CommandAddress + 0xC); // Write data from this memory address const u32 Size = Memory::Read_U32(_CommandAddress + 0x10); @@ -272,7 +272,7 @@ bool CWII_IPC_HLE_Device_FileIO::Write(u32 _CommandAddress) } else { - ERROR_LOG(WII_IPC_FILEIO, "FileIO: Failed to read from %s (Addr=0x%08x Size=0x%x) - file could not be opened or does not exist", m_Name.c_str(), Address, Size); + ERROR_LOG(WII_IPC_FILEIO, "FileIO: Failed to read from %s (Addr=0x%08x Size=0x%x) - file could not be opened or does not exist", m_Name.c_str(), Address, Size); ReturnValue = FS_FILE_NOT_EXIST; } @@ -280,13 +280,13 @@ bool CWII_IPC_HLE_Device_FileIO::Write(u32 _CommandAddress) return true; } -bool CWII_IPC_HLE_Device_FileIO::IOCtl(u32 _CommandAddress) +bool CWII_IPC_HLE_Device_FileIO::IOCtl(u32 _CommandAddress) { INFO_LOG(WII_IPC_FILEIO, "FileIO: IOCtl (Device=%s)", m_Name.c_str()); #if defined(_DEBUG) || defined(DEBUGFAST) DumpCommands(_CommandAddress); #endif - const u32 Parameter = Memory::Read_U32(_CommandAddress + 0xC); + const u32 Parameter = Memory::Read_U32(_CommandAddress + 0xC); u32 ReturnValue = 0; switch (Parameter) @@ -329,6 +329,6 @@ void CWII_IPC_HLE_Device_FileIO::DoState(PointerWrap &p) p.Do(m_Mode); p.Do(m_SeekPos); - + m_filepath = HLE_IPC_BuildFilename(m_Name, 64); } diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.h index 17dab453db..65dd0ce50c 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_FileIO.h @@ -64,7 +64,7 @@ private: u32 m_Mode; u32 m_SeekPos; - + std::string m_filepath; }; diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp index f0ea0d545f..58ff0917ed 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp @@ -13,7 +13,7 @@ 0x20 GetTitleID (ES_GetTitleID) (Input: none, Output: 8 bytes) 0x1d GetDataDir (ES_GetDataDir) (Input: 8 bytes, Output: 30 bytes) - 0x1b DiGetTicketView (Input: none, Output: 216 bytes) + 0x1b DiGetTicketView (Input: none, Output: 216 bytes) 0x16 GetConsumption (Input: 8 bytes, Output: 0 bytes, 4 bytes) // there are two output buffers 0x12 GetNumTicketViews (ES_GetNumTicketViews) (Input: 8 bytes, Output: 4 bytes) @@ -23,7 +23,7 @@ but only the first two are correctly supported. For the other four we ignore any potential input and only write zero to the out buffer. However, most games only use first two, but some Nintendo developed games use the other ones to: - + 0x1b: Mario Galaxy, Mario Kart, SSBB 0x16: Mario Galaxy, Mario Kart, SSBB 0x12: Mario Kart @@ -35,10 +35,14 @@ #include "WII_IPC_HLE_Device_es.h" +// need to include this before polarssl/aes.h, +// otherwise we may not get __STDC_FORMAT_MACROS +#include + #include "../PowerPC/PowerPC.h" #include "../VolumeHandler.h" #include "FileUtil.h" -#include "Crypto/aes.h" +#include #include "ConfigManager.h" #include "../Boot/Boot_DOL.h" @@ -56,7 +60,7 @@ std::string CWII_IPC_HLE_Device_es::m_ContentFile; -CWII_IPC_HLE_Device_es::CWII_IPC_HLE_Device_es(u32 _DeviceID, const std::string& _rDeviceName) +CWII_IPC_HLE_Device_es::CWII_IPC_HLE_Device_es(u32 _DeviceID, const std::string& _rDeviceName) : IWII_IPC_HLE_Device(_DeviceID, _rDeviceName) , m_pContentLoader(NULL) , m_TitleID(-1) @@ -86,7 +90,7 @@ u8* CWII_IPC_HLE_Device_es::keyTable[11] = { CWII_IPC_HLE_Device_es::~CWII_IPC_HLE_Device_es() {} -void CWII_IPC_HLE_Device_es::LoadWAD(const std::string& _rContentFile) +void CWII_IPC_HLE_Device_es::LoadWAD(const std::string& _rContentFile) { m_ContentFile = _rContentFile; } @@ -152,10 +156,10 @@ void CWII_IPC_HLE_Device_es::DoState(PointerWrap& p) } else { - for (auto itr = m_ContentAccessMap.begin(); itr != m_ContentAccessMap.end(); ++itr) + for (auto& pair : m_ContentAccessMap) { - CFD = itr->first; - SContentAccess& Access = itr->second; + CFD = pair.first; + SContentAccess& Access = pair.second; Position = Access.m_Position; TitleID = Access.m_TitleID; Index = Access.m_pContent->m_Index; @@ -182,9 +186,9 @@ bool CWII_IPC_HLE_Device_es::Close(u32 _CommandAddress, bool _bForce) { // Leave deletion of the INANDContentLoader objects to CNANDContentManager, don't do it here! m_NANDContent.clear(); - for (auto itr = m_ContentAccessMap.begin(); itr != m_ContentAccessMap.end(); ++itr) + for (auto& pair : m_ContentAccessMap) { - delete itr->second.m_pFile; + delete pair.second.m_pFile; } m_ContentAccessMap.clear(); m_pContentLoader = NULL; @@ -205,7 +209,7 @@ u32 CWII_IPC_HLE_Device_es::OpenTitleContent(u32 CFD, u64 TitleID, u16 Index) if (!Loader.IsValid()) { - WARN_LOG(WII_IPC_ES, "ES: loader not valid for %llx", TitleID); + WARN_LOG(WII_IPC_ES, "ES: loader not valid for %" PRIx64, TitleID); return 0xffffffff; } @@ -239,7 +243,7 @@ u32 CWII_IPC_HLE_Device_es::OpenTitleContent(u32 CFD, u64 TitleID, u16 Index) return CFD; } -bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) +bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) { SIOCtlVBuffer Buffer(_CommandAddress); @@ -271,7 +275,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) case IOCTL_ES_GETDEVICEID: { _dbg_assert_msg_(WII_IPC_ES, Buffer.NumberPayloadBuffer == 1, "IOCTL_ES_GETDEVICEID no out buffer"); - + EcWii &ec = EcWii::GetInstance(); INFO_LOG(WII_IPC_ES, "IOCTL_ES_GETDEVICEID %08X", ec.getNgId()); Memory::Write_U32(ec.getNgId(), Buffer.PayloadBuffer[0].m_Address); @@ -303,7 +307,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) else Memory::Write_U32((u32)rNANDContent.GetContentSize(), _CommandAddress + 0x4); - INFO_LOG(WII_IPC_ES, "IOCTL_ES_GETTITLECONTENTSCNT: TitleID: %08x/%08x content count %i", + INFO_LOG(WII_IPC_ES, "IOCTL_ES_GETTITLECONTENTSCNT: TitleID: %08x/%08x content count %i", (u32)(TitleID>>32), (u32)TitleID, rNANDContent.IsValid() ? NumberOfPrivateContent : (u32)rNANDContent.GetContentSize()); return true; @@ -394,7 +398,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) u8* pDest = Memory::GetPointer(Addr); - if (rContent.m_Position + Size > rContent.m_pContent->m_Size) + if (rContent.m_Position + Size > rContent.m_pContent->m_Size) { Size = rContent.m_pContent->m_Size-rContent.m_Position; } @@ -590,7 +594,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) { u32 FileSize = (u32)File::GetSize(TicketFilename); _dbg_assert_msg_(WII_IPC_ES, (FileSize % DiscIO::INANDContentLoader::TICKET_SIZE) == 0, "IOCTL_ES_GETVIEWCNT ticket file size seems to be wrong"); - + ViewCount = FileSize / DiscIO::INANDContentLoader::TICKET_SIZE; _dbg_assert_msg_(WII_IPC_ES, (ViewCount>0) && (ViewCount<=4), "IOCTL_ES_GETVIEWCNT ticket count seems to be wrong"); } @@ -628,7 +632,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) u32 retVal = 0; const DiscIO::INANDContentLoader& Loader = AccessContentDevice(TitleID); - + const u8 *Ticket = Loader.GetTIK(); if (Ticket) { @@ -694,7 +698,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) u32 TMDViewCnt = 0; if (Loader.IsValid()) { - TMDViewCnt += DiscIO::INANDContentLoader::TMD_VIEW_SIZE; + TMDViewCnt += DiscIO::INANDContentLoader::TMD_VIEW_SIZE; TMDViewCnt += 2; // title version TMDViewCnt += 2; // num entries TMDViewCnt += (u32)Loader.GetContentSize() * (4+2+2+8); // content id, index, type, size @@ -782,7 +786,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) // Presumably return -1017 when title not installed TODO verify Memory::Write_U32(ES_PARAMTER_SIZE_OR_ALIGNMENT, _CommandAddress + 0x4); } - + } break; case IOCTL_ES_GETSTOREDTMDSIZE: @@ -798,7 +802,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) if (Loader.IsValid()) { TMDCnt += DiscIO::INANDContentLoader::TMD_HEADER_SIZE; - TMDCnt += (u32)Loader.GetContentSize() * DiscIO::INANDContentLoader::CONTENT_HEADER_SIZE; + TMDCnt += (u32)Loader.GetContentSize() * DiscIO::INANDContentLoader::CONTENT_HEADER_SIZE; } if(Buffer.NumberPayloadBuffer) Memory::Write_U32(TMDCnt, Buffer.PayloadBuffer[0].m_Address); @@ -820,7 +824,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) u32 MaxCount = 0; if (Buffer.NumberInBuffer > 1) { - // TODO: actually use this param in when writing to the outbuffer :/ + // TODO: actually use this param in when writing to the outbuffer :/ MaxCount = Memory::Read_U32(Buffer.InBuffer[1].m_Address); } const DiscIO::INANDContentLoader& Loader = AccessContentDevice(TitleID); @@ -838,7 +842,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) const std::vector& rContent = Loader.GetContent(); for (size_t i=0; im_WiiMotes[i].IsConnected(); - + std::string tContentFile(m_ContentFile.c_str()); - + WII_IPC_HLE_Interface::Reset(true); WII_IPC_HLE_Interface::Init(); s_Usb = GetUsbPointer(); @@ -967,7 +971,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) s_Usb->m_WiiMotes[i].Activate(false); } } - + delete[] wiiMoteConnected; WII_IPC_HLE_Interface::SetDefaultContentFile(tContentFile); } @@ -979,24 +983,24 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) Memory::Write_U16(IOSv, 0x00003140); Memory::Write_U16(0xFFFF, 0x00003142); Memory::Write_U32(Memory::Read_U32(0x00003140), 0x00003188); - + //TODO: provide correct return code when bSuccess= false Memory::Write_U32(0, _CommandAddress + 0x4); - ERROR_LOG(WII_IPC_ES, "IOCTL_ES_LAUNCH %016llx %08x %016llx %08x %016llx %04x", TitleID,view,ticketid,devicetype,titleid,access); + ERROR_LOG(WII_IPC_ES, "IOCTL_ES_LAUNCH %016" PRIx64 " %08x %016" PRIx64 " %08x %016" PRIx64 " %04x", TitleID,view,ticketid,devicetype,titleid,access); // IOCTL_ES_LAUNCH 0001000248414341 00000001 0001c0fef3df2cfa 00000000 0001000248414341 ffff // This is necessary because Reset(true) above deleted this object. Ew. - + // It seems that the original hardware overwrites the command after it has been - // executed. We write 8 which is not any valid command, and what IOS does + // executed. We write 8 which is not any valid command, and what IOS does Memory::Write_U32(8, _CommandAddress); // IOS seems to write back the command that was responded to Memory::Write_U32(7, _CommandAddress + 8); - + // Generate a reply to the IPC command WII_IPC_HLE_Interface::EnqReply(_CommandAddress, 0); - + return false; } break; @@ -1116,12 +1120,12 @@ u32 CWII_IPC_HLE_Device_es::ES_DIVerify(u8* _pTMD, u32 _sz) // TODO: Force the game to save to another location, instead of moving the user's save. if (Movie::IsPlayingInput() && Movie::IsConfigSaved() && Movie::IsStartingFromClearSave()) - { + { if (File::Exists((savePath + "banner.bin").c_str())) { if (File::Exists((savePath + "../backup/").c_str())) { - // The last run of this game must have been to play back a movie, so their save is already backed up. + // The last run of this game must have been to play back a movie, so their save is already backed up. File::DeleteDirRecursively(savePath.c_str()); } else diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.h index ddc1f3613f..5dd4bd1ceb 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.h @@ -100,7 +100,7 @@ private: enum EErrorCodes { ES_INVALID_TMD = -106, // or access denied - ES_READ_LESS_DATA_THAN_EXPECTED = -1009, + ES_READ_LESS_DATA_THAN_EXPECTED = -1009, ES_WRITE_FAILURE = -1010, ES_PARAMTER_SIZE_OR_ALIGNMENT = -1017, ES_HASH_DOESNT_MATCH = -1022, diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp index 3db9f70c48..edbcc0967a 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp @@ -22,7 +22,7 @@ static Common::replace_v replacements; -CWII_IPC_HLE_Device_fs::CWII_IPC_HLE_Device_fs(u32 _DeviceID, const std::string& _rDeviceName) +CWII_IPC_HLE_Device_fs::CWII_IPC_HLE_Device_fs(u32 _DeviceID, const std::string& _rDeviceName) : IWII_IPC_HLE_Device(_DeviceID, _rDeviceName) { Common::ReadReplacements(replacements); @@ -60,9 +60,8 @@ static u64 ComputeTotalFileSize(const File::FSTEntry& parentEntry) { u64 sizeOfFiles = 0; const std::vector& children = parentEntry.children; - for (std::vector::const_iterator it = children.begin(); it != children.end(); ++it) + for (const auto& entry : children) { - const File::FSTEntry& entry = *it; if (entry.isDirectory) sizeOfFiles += ComputeTotalFileSize(entry); else @@ -71,11 +70,11 @@ static u64 ComputeTotalFileSize(const File::FSTEntry& parentEntry) return sizeOfFiles; } -bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress) +bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress) { u32 ReturnValue = FS_RESULT_OK; SIOCtlVBuffer CommandBuffer(_CommandAddress); - + // Prepare the out buffer(s) with zeros as a safety precaution // to avoid returning bad values for(u32 i = 0; i < CommandBuffer.NumberPayloadBuffer; i++) @@ -174,7 +173,7 @@ bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress) _dbg_assert_(WII_IPC_FILEIO, CommandBuffer.PayloadBuffer[0].m_Size == 4); _dbg_assert_(WII_IPC_FILEIO, CommandBuffer.PayloadBuffer[1].m_Size == 4); - // this command sucks because it asks of the number of used + // this command sucks because it asks of the number of used // fsBlocks and inodes // It should be correct, but don't count on it... const char *relativepath = (const char*)Memory::GetPointer(CommandBuffer.InBuffer[0].m_Address); @@ -230,11 +229,11 @@ bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress) Memory::Write_U32(ReturnValue, _CommandAddress+4); - return true; + return true; } -bool CWII_IPC_HLE_Device_fs::IOCtl(u32 _CommandAddress) -{ +bool CWII_IPC_HLE_Device_fs::IOCtl(u32 _CommandAddress) +{ //u32 DeviceID = Memory::Read_U32(_CommandAddress + 8); //LOG(WII_IPC_FILEIO, "FS: IOCtl (Device=%s, DeviceID=%08x)", GetDeviceName().c_str(), DeviceID); @@ -249,10 +248,10 @@ bool CWII_IPC_HLE_Device_fs::IOCtl(u32 _CommandAddress) //LOG(WII_IPC_FILEIO, "Cleared %u bytes of the out buffer", _BufferOutSize); Memory::Memset(BufferOut, 0, BufferOutSize); - u32 ReturnValue = ExecuteCommand(Parameter, BufferIn, BufferInSize, BufferOut, BufferOutSize); + u32 ReturnValue = ExecuteCommand(Parameter, BufferIn, BufferInSize, BufferOut, BufferOutSize); Memory::Write_U32(ReturnValue, _CommandAddress + 4); - return true; + return true; } s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _BufferInSize, u32 _BufferOut, u32 _BufferOutSize) @@ -307,7 +306,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B case IOCTL_SET_ATTR: { u32 Addr = _BufferIn; - + u32 OwnerID = Memory::Read_U32(Addr); Addr += 4; u16 GroupID = Memory::Read_U16(Addr); Addr += 2; std::string Filename = HLE_IPC_BuildFilename((const char*)Memory::GetPointer(_BufferIn), 64); Addr += 64; @@ -329,7 +328,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B break; case IOCTL_GET_ATTR: - { + { _dbg_assert_msg_(WII_IPC_FILEIO, _BufferOutSize == 76, " GET_ATTR needs an 76 bytes large output buffer but it is %i bytes large", _BufferOutSize); @@ -339,7 +338,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B std::string Filename = HLE_IPC_BuildFilename((const char*)Memory::GetPointer(_BufferIn), 64); u8 OwnerPerm = 0x3; // read/write u8 GroupPerm = 0x3; // read/write - u8 OtherPerm = 0x3; // read/write + u8 OtherPerm = 0x3; // read/write u8 Attributes = 0x00; // no attributes if (File::IsDirectory(Filename)) { diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h index 6e896b4e48..e02b187fee 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.h @@ -43,7 +43,7 @@ public: virtual bool IOCtl(u32 _CommandAddress); virtual bool IOCtlV(u32 _CommandAddress); - + virtual int GetCmdDelay(u32); private: diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.cpp index f2699b989f..00415a526f 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.cpp @@ -521,7 +521,7 @@ libusb_device_handle * CWII_IPC_HLE_Device_hid::GetDeviceByDevNum(u32 devNum) if (cnt < 0) return NULL; - + #ifdef _WIN32 static bool has_warned_about_drivers = false; #endif diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.h index 74169a50b3..c57e4ee84d 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_hid.h @@ -7,7 +7,7 @@ #include "WII_IPC_HLE.h" #include "WII_IPC_HLE_Device.h" -#include "libusb.h" +#include #include "Thread.h" #include diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp index cf5ede4c35..1cfcf26343 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp @@ -677,8 +677,8 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) u32 fd = Memory::Read_U32(BufferIn); WiiSockMan &sm = WiiSockMan::getInstance(); ReturnValue = sm.delSocket(fd); - DEBUG_LOG(WII_IPC_NET, "%s(%x) %x", - Command == IOCTL_SO_ICMPCLOSE ? "IOCTL_SO_ICMPCLOSE" : "IOCTL_SO_CLOSE", + DEBUG_LOG(WII_IPC_NET, "%s(%x) %x", + Command == IOCTL_SO_ICMPCLOSE ? "IOCTL_SO_ICMPCLOSE" : "IOCTL_SO_CLOSE", fd, ReturnValue); break; } @@ -734,13 +734,13 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) // Do the level/optname translation int nat_level = -1, nat_optname = -1; - for (unsigned int i = 0; i < sizeof (opt_level_mapping) / sizeof (opt_level_mapping[0]); ++i) - if (level == opt_level_mapping[i][1]) - nat_level = opt_level_mapping[i][0]; + for (auto& map : opt_level_mapping) + if (level == map[1]) + nat_level = map[0]; - for (unsigned int i = 0; i < sizeof (opt_name_mapping) / sizeof (opt_name_mapping[0]); ++i) - if (optname == opt_name_mapping[i][1]) - nat_optname = opt_name_mapping[i][0]; + for (auto& map : opt_name_mapping) + if (optname == map[1]) + nat_optname = map[0]; u8 optval[20]; u32 optlen = 4; @@ -755,7 +755,7 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) if (optname == SO_ERROR) { s32 last_error = WiiSockMan::getInstance().getLastNetError(); - + Memory::Write_U32(sizeof(s32), BufferOut + 0xC); Memory::Write_U32(last_error, BufferOut + 0x10); } @@ -775,7 +775,7 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) "BufferIn: (%08x, %i), BufferOut: (%08x, %i)" "%02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx", fd, level, optname, optlen, BufferIn, BufferInSize, BufferOut, BufferOutSize, optval[0], optval[1], optval[2], optval[3], optval[4], optval[5], optval[6], optval[7], optval[8], optval[9], optval[10], optval[11], optval[12], optval[13], optval[14], optval[15], optval[16], optval[17], optval[18], optval[19]); - + //TODO: bug booto about this, 0x2005 most likely timeout related, default value on wii is , 0x2001 is most likely tcpnodelay if (level == 6 && (optname == 0x2005 || optname == 0x2001)){ ReturnValue = 0; @@ -785,13 +785,13 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) // Do the level/optname translation int nat_level = -1, nat_optname = -1; - for (unsigned int i = 0; i < sizeof (opt_level_mapping) / sizeof (opt_level_mapping[0]); ++i) - if (level == opt_level_mapping[i][1]) - nat_level = opt_level_mapping[i][0]; + for (auto& map : opt_level_mapping) + if (level == map[1]) + nat_level = map[0]; - for (unsigned int i = 0; i < sizeof (opt_name_mapping) / sizeof (opt_name_mapping[0]); ++i) - if (optname == opt_name_mapping[i][1]) - nat_optname = opt_name_mapping[i][0]; + for (auto& map : opt_name_mapping) + if (optname == map[1]) + nat_optname = map[0]; if (nat_level == -1 || nat_optname == -1) { @@ -924,11 +924,11 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) // Translate Wii to native events int unhandled_events = events; ufds[i].events = 0; - for (unsigned int j = 0; j < sizeof (mapping) / sizeof (mapping[0]); ++j) + for (auto& map : mapping) { - if (events & mapping[j][1]) - ufds[i].events |= mapping[j][0]; - unhandled_events &= ~mapping[j][1]; + if (events & map[1]) + ufds[i].events |= map[0]; + unhandled_events &= ~map[1]; } DEBUG_LOG(WII_IPC_NET, "IOCTL_SO_POLL(%d) " @@ -949,10 +949,10 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtl(u32 _CommandAddress) // Translate native to Wii events int revents = 0; - for (unsigned int j = 0; j < sizeof (mapping) / sizeof (mapping[0]); ++j) + for (auto& map : mapping) { - if (ufds[i].revents & mapping[j][0]) - revents |= mapping[j][1]; + if (ufds[i].revents & map[0]) + revents |= map[1]; } // No need to change fd or events as they are input only. diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp index 669d531dcf..36d4b2de19 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net_ssl.cpp @@ -77,7 +77,7 @@ bool CWII_IPC_HLE_Device_net_ssl::IOCtl(u32 _CommandAddress) u32 BufferOut = Memory::Read_U32(_CommandAddress + 0x18); u32 BufferOutSize = Memory::Read_U32(_CommandAddress + 0x1C); u32 Command = Memory::Read_U32(_CommandAddress + 0x0C); - + INFO_LOG(WII_IPC_SSL, "%s unknown %i " "(BufferIn: (%08x, %i), BufferOut: (%08x, %i)", GetDeviceName().c_str(), Command, @@ -493,10 +493,10 @@ _SSL_NEW_ERROR: BufferOut2, BufferOutSize2, BufferOut3, BufferOutSize3); break; } - + // SSL return codes are written to BufferIn Memory::Write_U32(0, _CommandAddress+4); - + return true; } diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.cpp index c422bd7960..0b8e8bb53e 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.cpp @@ -93,7 +93,7 @@ bool CWII_IPC_HLE_Device_sdio_slot0::Close(u32 _CommandAddress, bool _bForce) } // The front SD slot -bool CWII_IPC_HLE_Device_sdio_slot0::IOCtl(u32 _CommandAddress) +bool CWII_IPC_HLE_Device_sdio_slot0::IOCtl(u32 _CommandAddress) { u32 Cmd = Memory::Read_U32(_CommandAddress + 0xC); @@ -101,11 +101,11 @@ bool CWII_IPC_HLE_Device_sdio_slot0::IOCtl(u32 _CommandAddress) u32 BufferInSize = Memory::Read_U32(_CommandAddress + 0x14); u32 BufferOut = Memory::Read_U32(_CommandAddress + 0x18); u32 BufferOutSize = Memory::Read_U32(_CommandAddress + 0x1C); - + // As a safety precaution we fill the out buffer with zeros to avoid // returning nonsense values Memory::Memset(BufferOut, 0, BufferOutSize); - + u32 ReturnValue = 0; switch (Cmd) { case IOCTL_WRITEHCR: diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.h index e7a323228d..d59f7e0a0a 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_sdio_slot0.h @@ -19,7 +19,7 @@ public: bool Open(u32 _CommandAddress, u32 _Mode); bool Close(u32 _CommandAddress, bool _bForce); - bool IOCtl(u32 _CommandAddress); + bool IOCtl(u32 _CommandAddress); bool IOCtlV(u32 _CommandAddress); void EventNotify(); @@ -34,7 +34,7 @@ private: }; // IOCtl - enum + enum { IOCTL_WRITEHCR = 0x01, IOCTL_READHCR = 0x02, diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_stm.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_stm.h index d4b26bcac2..8c796a458c 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_stm.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_stm.h @@ -54,7 +54,7 @@ public: return true; } - virtual bool IOCtl(u32 _CommandAddress) + virtual bool IOCtl(u32 _CommandAddress) { u32 Parameter = Memory::Read_U32(_CommandAddress + 0x0C); u32 BufferIn = Memory::Read_U32(_CommandAddress + 0x10); @@ -117,7 +117,7 @@ class CWII_IPC_HLE_Device_stm_eventhook : public IWII_IPC_HLE_Device { public: - CWII_IPC_HLE_Device_stm_eventhook(u32 _DeviceID, const std::string& _rDeviceName) + CWII_IPC_HLE_Device_stm_eventhook(u32 _DeviceID, const std::string& _rDeviceName) : IWII_IPC_HLE_Device(_DeviceID, _rDeviceName) , m_EventHookAddress(0) {} @@ -144,7 +144,7 @@ public: return true; } - virtual bool IOCtl(u32 _CommandAddress) + virtual bool IOCtl(u32 _CommandAddress) { u32 Parameter = Memory::Read_U32(_CommandAddress + 0x0C); u32 BufferIn = Memory::Read_U32(_CommandAddress + 0x10); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp index ecf84cf31e..990a9e6a7d 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp @@ -436,12 +436,12 @@ u32 CWII_IPC_HLE_Device_usb_oh1_57e_305::Update() // Create ACL connection if (m_HCIEndpoint.IsValid() && (m_ScanEnable & HCI_PAGE_SCAN_ENABLE)) { - for (unsigned int i = 0; i < m_WiiMotes.size(); i++) + for (auto& wiimote : m_WiiMotes) { - if (m_WiiMotes[i].EventPagingChanged(m_ScanEnable)) + if (wiimote.EventPagingChanged(m_ScanEnable)) { Host_SetWiiMoteConnectionState(1); - SendEventRequestConnection(m_WiiMotes[i]); + SendEventRequestConnection(wiimote); } } } @@ -449,9 +449,9 @@ u32 CWII_IPC_HLE_Device_usb_oh1_57e_305::Update() // Link channels when connected if (m_ACLEndpoint.IsValid()) { - for (unsigned int i = 0; i < m_WiiMotes.size(); i++) + for (auto& wiimote : m_WiiMotes) { - if (m_WiiMotes[i].LinkChannel()) + if (wiimote.LinkChannel()) break; } } @@ -483,13 +483,13 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::ACLPool::Store(const u8* data, const u ERROR_LOG(WII_IPC_WIIMOTE, "ACL queue size reached 100 - current packet will be dropped!"); return; } - + _dbg_assert_msg_(WII_IPC_WIIMOTE, size < m_acl_pkt_size, "ACL packet too large for pool"); - + m_queue.push_back(Packet()); auto& packet = m_queue.back(); - + std::copy(data, data + size, packet.data); packet.size = size; packet.conn_handle = conn_handle; @@ -498,7 +498,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::ACLPool::Store(const u8* data, const u void CWII_IPC_HLE_Device_usb_oh1_57e_305::ACLPool::WriteToEndpoint(CtrlBuffer& endpoint) { auto& packet = m_queue.front(); - + const u8* const data = packet.data; const u16 size = packet.size; const u16 conn_handle = packet.conn_handle; @@ -546,7 +546,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventInquiryResponse() SQueuedEvent Event(static_cast(sizeof(SHCIEventInquiryResult) + m_WiiMotes.size()*sizeof(hci_inquiry_response)), 0); - SHCIEventInquiryResult* pInquiryResult = (SHCIEventInquiryResult*)Event.m_buffer; + SHCIEventInquiryResult* pInquiryResult = (SHCIEventInquiryResult*)Event.m_buffer; pInquiryResult->EventType = HCI_EVENT_INQUIRY_RESULT; pInquiryResult->PayloadLength = (u8)(sizeof(SHCIEventInquiryResult) - 2 + (m_WiiMotes.size() * sizeof(hci_inquiry_response))); @@ -558,7 +558,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventInquiryResponse() continue; u8* pBuffer = Event.m_buffer + sizeof(SHCIEventInquiryResult) + i*sizeof(hci_inquiry_response); - hci_inquiry_response* pResponse = (hci_inquiry_response*)pBuffer; + hci_inquiry_response* pResponse = (hci_inquiry_response*)pBuffer; pResponse->bdaddr = m_WiiMotes[i].GetBD(); pResponse->uclass[0]= m_WiiMotes[i].GetClass()[0]; @@ -757,7 +757,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventReadRemoteFeatures(u16 _conne INFO_LOG(WII_IPC_WIIMOTE, "Event: SendEventReadRemoteFeatures"); DEBUG_LOG(WII_IPC_WIIMOTE, " Connection_Handle: 0x%04x", pReadRemoteFeatures->ConnectionHandle); - DEBUG_LOG(WII_IPC_WIIMOTE, " features: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", + DEBUG_LOG(WII_IPC_WIIMOTE, " features: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", pReadRemoteFeatures->features[0], pReadRemoteFeatures->features[1], pReadRemoteFeatures->features[2], pReadRemoteFeatures->features[3], pReadRemoteFeatures->features[4], pReadRemoteFeatures->features[5], pReadRemoteFeatures->features[6], pReadRemoteFeatures->features[7]); @@ -830,7 +830,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventCommandStatus(u16 _Opcode) pHCIEvent->PacketIndicator = 0x01; pHCIEvent->Opcode = _Opcode; - INFO_LOG(WII_IPC_WIIMOTE, "Event: Command Status (Opcode: 0x%04x)", pHCIEvent->Opcode); + INFO_LOG(WII_IPC_WIIMOTE, "Event: Command Status (Opcode: 0x%04x)", pHCIEvent->Opcode); AddEventToQueue(Event); @@ -886,7 +886,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventNumberOfCompletedPackets() event->num_con_handles++; info->compl_pkts = m_PacketCount[i]; info->con_handle = m_WiiMotes[i].GetConnectionHandle(); - + DEBUG_LOG(WII_IPC_WIIMOTE, " Connection_Handle: 0x%04x", info->con_handle); DEBUG_LOG(WII_IPC_WIIMOTE, " Number_Of_Completed_Packets: %i", info->compl_pkts); @@ -1733,7 +1733,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandReadLocalFeatures(u8* _Input) INFO_LOG(WII_IPC_WIIMOTE, "Command: HCI_CMD_READ_LOCAL_FEATURES:"); DEBUG_LOG(WII_IPC_WIIMOTE, "return:"); - DEBUG_LOG(WII_IPC_WIIMOTE, " features: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", + DEBUG_LOG(WII_IPC_WIIMOTE, " features: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", Reply.features[0], Reply.features[1], Reply.features[2], Reply.features[3], Reply.features[4], Reply.features[5], Reply.features[6], Reply.features[7]); @@ -1818,16 +1818,16 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandVendorSpecific_FC4C(u8* _Input, // CWII_IPC_HLE_WiiMote* CWII_IPC_HLE_Device_usb_oh1_57e_305::AccessWiiMote(const bdaddr_t& _rAddr) { - for (size_t i=0; i -struct is_pod : std::true_type {}; -} - // Important to remember that this class is for /dev/usb/oh1/57e/305 ONLY // /dev/usb/oh1 -> internal usb bus // 57e/305 -> VendorID/ProductID of device on usb bus @@ -155,7 +148,7 @@ private: SHCICommandMessage m_CtrlSetup; CtrlBuffer m_HCIEndpoint; std::deque m_EventQueue; - + u32 m_ACLSetup; CtrlBuffer m_ACLEndpoint; @@ -170,7 +163,7 @@ private: u16 size; u16 conn_handle; }; - + std::deque m_queue; public: @@ -216,7 +209,7 @@ private: bool SendEventReadRemoteFeatures(u16 _connectionHandle); bool SendEventRoleChange(bdaddr_t _bd, bool _master); bool SendEventNumberOfCompletedPackets(); - bool SendEventAuthenticationCompleted(u16 _connectionHandle); + bool SendEventAuthenticationCompleted(u16 _connectionHandle); bool SendEventModeChange(u16 _connectionHandle, u8 _mode, u16 _value); bool SendEventDisconnect(u16 _connectionHandle, u8 _Reason); bool SendEventRequestLinkKey(const bdaddr_t& _bd); @@ -260,7 +253,7 @@ private: void CommandWriteInquiryScanType(u8* _Input); void CommandWriteLinkSupervisionTimeout(u8* _Input); - // OGF 0x04 Informational commands and return parameters + // OGF 0x04 Informational commands and return parameters void CommandReadBufferSize(u8* _Input); void CommandReadLocalVer(u8* _Input); void CommandReadLocalFeatures(u8* _Input); @@ -268,14 +261,14 @@ private: // OGF 0x3F Vendor specific void CommandVendorSpecific_FC4C(u8* _Input, u32 _Size); - void CommandVendorSpecific_FC4F(u8* _Input, u32 _Size); + void CommandVendorSpecific_FC4F(u8* _Input, u32 _Size); // Debugging void LOG_LinkKey(const u8* _pLinkKey); #pragma pack(push,1) #define CONF_PAD_MAX_REGISTERED 10 - + struct _conf_pad_device { u8 bdaddr[6]; diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp index bfe0df8743..4300ecc4da 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb_kbd.cpp @@ -28,6 +28,7 @@ bool CWII_IPC_HLE_Device_usb_kbd::Open(u32 _CommandAddress, u32 _Mode) for(int i = 0; i < 256; i++) m_OldKeyBuffer[i] = false; + m_OldModifiers = 0x00; //m_MessageQueue.push(SMessageData(MSG_KBD_CONNECT, 0, NULL)); @@ -170,7 +171,7 @@ u8 CWII_IPC_HLE_Device_usb_kbd::m_KeyCodesQWERTY[256] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, // Backspace 0x2B, // Tab - 0x00, 0x00, + 0x00, 0x00, 0x00, // Clear 0x28, // Return 0x00, 0x00, @@ -191,18 +192,18 @@ u8 CWII_IPC_HLE_Device_usb_kbd::m_KeyCodesQWERTY[256] = { 0x52, // Up 0x4F, // Right 0x51, // Down - 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x46, // Print screen 0x49, // Insert 0x4C, // Delete 0x00, // 0 -> 9 - 0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // A -> Z - 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, @@ -219,7 +220,7 @@ u8 CWII_IPC_HLE_Device_usb_kbd::m_KeyCodesQWERTY[256] = { 0x54, // Divide // F1 -> F12 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, - 0x42, 0x43, 0x44, 0x45, + 0x42, 0x43, 0x44, 0x45, // F13 -> F24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -258,7 +259,7 @@ u8 CWII_IPC_HLE_Device_usb_kbd::m_KeyCodesAZERTY[256] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, // Backspace 0x2B, // Tab - 0x00, 0x00, + 0x00, 0x00, 0x00, // Clear 0x28, // Return 0x00, 0x00, @@ -279,18 +280,18 @@ u8 CWII_IPC_HLE_Device_usb_kbd::m_KeyCodesAZERTY[256] = { 0x52, // Up 0x4F, // Right 0x51, // Down - 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x46, // Print screen 0x49, // Insert 0x4C, // Delete 0x00, // 0 -> 9 - 0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // A -> Z - 0x14, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, + 0x14, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x33, 0x11, 0x12, 0x13, 0x04, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1D, 0x1B, 0x1C, 0x1A, @@ -307,7 +308,7 @@ u8 CWII_IPC_HLE_Device_usb_kbd::m_KeyCodesAZERTY[256] = { 0x54, // Divide // F1 -> F12 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, - 0x42, 0x43, 0x44, 0x45, + 0x42, 0x43, 0x44, 0x45, // F13 -> F24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.cpp index 9b57f96a2c..d873914b2b 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.cpp @@ -385,7 +385,7 @@ void CWII_IPC_HLE_WiiMote::ReceiveConnectionReq(u8 _Ident, u8* _pData, u32 _Size INFO_LOG(WII_IPC_WIIMOTE, "[L2CAP] SendConnectionResponse"); SendCommandToACL(_Ident, L2CAP_CONNECT_RSP, sizeof(l2cap_con_rsp_cp), (u8*)&Rsp); - + // update state machine /* if (rChannel.PSM == L2CAP_PSM_HID_CNTL) @@ -613,7 +613,7 @@ void CWII_IPC_HLE_WiiMote::SendConfigurationRequest(u16 scid, u16 MTU, u16 Flush *(u16*)&Buffer[Offset] = MTU; Offset += L2CAP_OPT_MTU_SIZE; DEBUG_LOG(WII_IPC_WIIMOTE, " MTU: 0x%04x", MTU); } - + if (FlushTimeOut || rChannel.FlushTimeOut) { if (FlushTimeOut == 0) @@ -650,7 +650,7 @@ void CWII_IPC_HLE_WiiMote::SDPSendServiceSearchResponse(u16 cid, u16 Transaction { // verify block... we handle search pattern for HID service only { - CBigEndianBuffer buffer(pServiceSearchPattern); + CBigEndianBuffer buffer(pServiceSearchPattern); _dbg_assert_(WII_IPC_WIIMOTE, buffer.Read8(0) == SDP_SEQ8); // data sequence _dbg_assert_(WII_IPC_WIIMOTE, buffer.Read8(1) == 0x03); // sequence size @@ -757,7 +757,7 @@ void CWII_IPC_HLE_WiiMote::SDPSendServiceAttributeResponse(u16 cid, u16 Transact int Offset = 0; l2cap_hdr_t* pHeader = (l2cap_hdr_t*)&DataFrame[Offset]; Offset += sizeof(l2cap_hdr_t); pHeader->dcid = cid; - + buffer.Write8 (Offset, 0x05); Offset++; buffer.Write16(Offset, TransactionID); Offset += 2; // transaction ID diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h index 397841a2f0..7c9444f1f0 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_WiiMote.h @@ -101,7 +101,7 @@ private: std::string m_Name; CWII_IPC_HLE_Device_usb_oh1_57e_305* m_pHost; - struct SChannel + struct SChannel { u16 SCID; u16 DCID; @@ -132,14 +132,14 @@ private: void ReceiveDisconnectionReq(u8 _Ident, u8* _pData, u32 _Size); void ReceiveConfigurationReq(u8 _Ident, u8* _pData, u32 _Size); void ReceiveConfigurationResponse(u8 _Ident, u8* _pData, u32 _Size); - + // some new ugly stuff - // should be inside the plugin + // should be inside the plugin void HandleSDP(u16 _SCID, u8* _pData, u32 _Size); void SDPSendServiceSearchResponse(u16 _SCID, u16 _TransactionID, u8* _pServiceSearchPattern, u16 _MaximumServiceRecordCount); - void SDPSendServiceAttributeResponse(u16 _SCID, u16 TransactionID, u32 _ServiceHandle, - u16 _StartAttrID, u16 _EndAttrID, + void SDPSendServiceAttributeResponse(u16 _SCID, u16 TransactionID, u32 _ServiceHandle, + u16 _StartAttrID, u16 _EndAttrID, u16 _MaximumAttributeByteCount, u8* _pContinuationState); u16 AddAttribToList(int _AttribID, u8* _pBuffer); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp b/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp index 8db1580ef7..32e6cbe81c 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_Socket.cpp @@ -207,7 +207,7 @@ void WiiSocket::update(bool read, bool write, bool except) int ret = bind(fd, (sockaddr*)&local_name, sizeof(local_name)); ReturnValue = WiiSockMan::getNetErrorCode(ret, "SO_BIND", false); - INFO_LOG(WII_IPC_NET, "IOCTL_SO_BIND (%08X %s:%d) = %d ", fd, + INFO_LOG(WII_IPC_NET, "IOCTL_SO_BIND (%08X %s:%d) = %d ", fd, inet_ntoa(local_name.sin_addr), Common::swap16(local_name.sin_port), ret); break; } @@ -217,7 +217,7 @@ void WiiSocket::update(bool read, bool write, bool except) sockaddr_in local_name; WiiSockAddrIn* wii_name = (WiiSockAddrIn*)Memory::GetPointer(BufferIn + 0x08); WiiSockMan::Convert(*wii_name, local_name); - + int ret = connect(fd, (sockaddr*)&local_name, sizeof(local_name)); ReturnValue = WiiSockMan::getNetErrorCode(ret, "SO_CONNECT", false); @@ -227,13 +227,13 @@ void WiiSocket::update(bool read, bool write, bool except) } case IOCTL_SO_ACCEPT: { - + if (BufferOutSize > 0) { sockaddr_in local_name; WiiSockAddrIn* wii_name = (WiiSockAddrIn*)Memory::GetPointer(BufferOut); WiiSockMan::Convert(*wii_name, local_name); - + socklen_t addrlen = sizeof(sockaddr_in); int ret = (s32)accept(fd, (sockaddr*)&local_name, &addrlen); ReturnValue = WiiSockMan::getNetErrorCode(ret, "SO_ACCEPT", true); @@ -261,7 +261,7 @@ void WiiSocket::update(bool read, bool write, bool except) // Fix blocking error codes if (!nonBlock) { - if (it->net_type == IOCTL_SO_CONNECT + if (it->net_type == IOCTL_SO_CONNECT && ReturnValue == -SO_EISCONN) { ReturnValue = SO_SUCCESS; @@ -275,25 +275,25 @@ void WiiSocket::update(bool read, bool write, bool except) u32 BufferInSize = 0, BufferInSize2 = 0; u32 BufferOut = 0, BufferOut2 = 0; u32 BufferOutSize = 0, BufferOutSize2 = 0; - + if (CommandBuffer.InBuffer.size() > 0) { BufferIn = CommandBuffer.InBuffer.at(0).m_Address; BufferInSize = CommandBuffer.InBuffer.at(0).m_Size; } - + if (CommandBuffer.PayloadBuffer.size() > 0) { BufferOut = CommandBuffer.PayloadBuffer.at(0).m_Address; BufferOutSize = CommandBuffer.PayloadBuffer.at(0).m_Size; } - + if (CommandBuffer.PayloadBuffer.size() > 1) { BufferOut2 = CommandBuffer.PayloadBuffer.at(1).m_Address; BufferOutSize2 = CommandBuffer.PayloadBuffer.at(1).m_Size; } - + if (CommandBuffer.InBuffer.size() > 1) { BufferIn2 = CommandBuffer.InBuffer.at(1).m_Address; @@ -309,7 +309,7 @@ void WiiSocket::update(bool read, bool write, bool except) { case IOCTLV_NET_SSL_DOHANDSHAKE: { - + int ret = ssl_handshake(&CWII_IPC_HLE_Device_net_ssl::_SSL[sslID].ctx); switch (ret) { @@ -330,7 +330,7 @@ void WiiSocket::update(bool read, bool write, bool except) Memory::Write_U32(SSL_ERR_FAILED, BufferIn); break; } - + INFO_LOG(WII_IPC_SSL, "IOCTLV_NET_SSL_DOHANDSHAKE = (%d) " "BufferIn: (%08x, %i), BufferIn2: (%08x, %i), " "BufferOut: (%08x, %i), BufferOut2: (%08x, %i)", @@ -342,7 +342,7 @@ void WiiSocket::update(bool read, bool write, bool except) case IOCTLV_NET_SSL_WRITE: { int ret = ssl_write(&CWII_IPC_HLE_Device_net_ssl::_SSL[sslID].ctx, Memory::GetPointer(BufferOut2), BufferOutSize2); - + #ifdef DEBUG_SSL File::IOFile("ssl_write.bin", "ab").WriteBytes(Memory::GetPointer(BufferOut2), BufferOutSize2); #endif @@ -351,7 +351,7 @@ void WiiSocket::update(bool read, bool write, bool except) // Return bytes written or SSL_ERR_ZERO if none Memory::Write_U32((ret == 0) ? SSL_ERR_ZERO : ret, BufferIn); } - else + else { switch (ret) { @@ -386,7 +386,7 @@ void WiiSocket::update(bool read, bool write, bool except) // Return bytes read or SSL_ERR_ZERO if none Memory::Write_U32((ret == 0) ? SSL_ERR_ZERO : ret, BufferIn); } - else + else { switch (ret) { @@ -415,32 +415,32 @@ void WiiSocket::update(bool read, bool write, bool except) { Memory::Write_U32(SSL_ERR_ID, BufferIn); } - } + } else { switch (it->net_type) { case IOCTLV_SO_SENDTO: { - + u32 flags = Memory::Read_U32(BufferIn2 + 0x04); u32 has_destaddr = Memory::Read_U32(BufferIn2 + 0x08); char * data = (char*)Memory::GetPointer(BufferIn); - + // Act as non blocking when SO_MSG_NONBLOCK is specified forceNonBlock = ((flags & SO_MSG_NONBLOCK) == SO_MSG_NONBLOCK); // send/sendto only handles MSG_OOB flags &= SO_MSG_OOB; - + sockaddr_in local_name = {0}; if (has_destaddr) - { + { WiiSockAddrIn* wii_name = (WiiSockAddrIn*)Memory::GetPointer(BufferIn2 + 0x0C); WiiSockMan::Convert(*wii_name, local_name); } - int ret = sendto(fd, data, BufferInSize, flags, - has_destaddr ? (struct sockaddr*)&local_name : NULL, + int ret = sendto(fd, data, BufferInSize, flags, + has_destaddr ? (struct sockaddr*)&local_name : NULL, has_destaddr ? sizeof(sockaddr) : 0); ReturnValue = WiiSockMan::getNetErrorCode(ret, "SO_SENDTO", true); @@ -464,7 +464,7 @@ void WiiSocket::update(bool read, bool write, bool except) sockaddr_in local_name; memset(&local_name, 0, sizeof(sockaddr_in)); - + if (BufferOutSize2 != 0) { WiiSockAddrIn* wii_name = (WiiSockAddrIn*)Memory::GetPointer(BufferOut2); @@ -473,7 +473,7 @@ void WiiSocket::update(bool read, bool write, bool except) // Act as non blocking when SO_MSG_NONBLOCK is specified forceNonBlock = ((flags & SO_MSG_NONBLOCK) == SO_MSG_NONBLOCK); - + // recv/recvfrom only handles PEEK/OOB flags &= SO_MSG_PEEK | SO_MSG_OOB; #ifdef _WIN32 @@ -490,10 +490,10 @@ void WiiSocket::update(bool read, bool write, bool except) BufferOutSize2 ? &addrlen : 0); ReturnValue = WiiSockMan::getNetErrorCode(ret, BufferOutSize2 ? "SO_RECVFROM" : "SO_RECV", true); - + INFO_LOG(WII_IPC_NET, "%s(%d, %p) Socket: %08X, Flags: %08X, " "BufferIn: (%08x, %i), BufferIn2: (%08x, %i), " - "BufferOut: (%08x, %i), BufferOut2: (%08x, %i)", + "BufferOut: (%08x, %i), BufferOut2: (%08x, %i)", BufferOutSize2 ? "IOCTLV_SO_RECVFROM " : "IOCTLV_SO_RECV ", ReturnValue, data, fd, flags, BufferIn, BufferInSize, BufferIn2, BufferInSize2, @@ -510,14 +510,14 @@ void WiiSocket::update(bool read, bool write, bool except) break; } } - + } if ( nonBlock || forceNonBlock || (!it->is_ssl && ReturnValue != -SO_EAGAIN && ReturnValue != -SO_EINPROGRESS && ReturnValue != -SO_EALREADY) || (it->is_ssl && ReturnValue != SSL_ERR_WAGAIN && ReturnValue != SSL_ERR_RAGAIN)) { - DEBUG_LOG(WII_IPC_NET, "IOCTL(V) Sock: %08x ioctl/v: %d returned: %d nonBlock: %d forceNonBlock: %d", + DEBUG_LOG(WII_IPC_NET, "IOCTL(V) Sock: %08x ioctl/v: %d returned: %d nonBlock: %d forceNonBlock: %d", fd, it->is_ssl ? (int) it->ssl_type : (int) it->net_type, ReturnValue, nonBlock, forceNonBlock); WiiSockMan::EnqueueReply(it->_CommandAddress, ReturnValue); it = pending_sockops.erase(it); @@ -602,21 +602,21 @@ void WiiSockMan::Update() if (ret >= 0) { - for (auto it = WiiSockets.begin(); it != WiiSockets.end(); ++it) + for (auto& pair : WiiSockets) { - WiiSocket& sock = it->second; + WiiSocket& sock = pair.second; sock.update( - FD_ISSET(sock.fd, &read_fds) != 0, - FD_ISSET(sock.fd, &write_fds) != 0, + FD_ISSET(sock.fd, &read_fds) != 0, + FD_ISSET(sock.fd, &write_fds) != 0, FD_ISSET(sock.fd, &except_fds) != 0 ); } } else { - for (auto it = WiiSockets.begin(); it != WiiSockets.end(); ++it) + for (auto& elem : WiiSockets) { - it->second.update(false, false, false); + elem.second.update(false, false, false); } } } @@ -626,10 +626,10 @@ void WiiSockMan::EnqueueReply(u32 CommandAddress, s32 ReturnValue) Memory::Write_U32(8, CommandAddress); // IOS seems to write back the command that was responded to Memory::Write_U32(Memory::Read_U32(CommandAddress), CommandAddress + 8); - + // Return value Memory::Write_U32(ReturnValue, CommandAddress + 4); - + WII_IPC_HLE_Interface::EnqReply(CommandAddress); } diff --git a/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.cpp b/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.cpp index e96bb5d7da..f919b4dec4 100644 --- a/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.cpp @@ -10,17 +10,17 @@ // 0x00 (checked) u8 ServiceRecordHandle[] = { 0x0a, 0x00, 0x01, 0x00, 0x00 }; // 0x01 (checked) -u8 SrvClassIDList[] = { 0x35, 0x03, +u8 SrvClassIDList[] = { 0x35, 0x03, 0x19, 0x11, 0x24 }; // 0x04 (checked) -u8 ProtocolDescriptorList[] = { 0x35, 0x0D, - 0x35, 0x06, - 0x19, 0x01, 0x00, // Element 0 - 0x09, 0x00, 0x11, // Element 1 +u8 ProtocolDescriptorList[] = { 0x35, 0x0D, + 0x35, 0x06, + 0x19, 0x01, 0x00, // Element 0 + 0x09, 0x00, 0x11, // Element 1 0x35, 0x03, - 0x19, 0x00, 0x11}; // Element 0 + 0x19, 0x00, 0x11}; // Element 0 // 0x5 (checked) -u8 BrowseGroupList[] = { 0x35, 0x03, +u8 BrowseGroupList[] = { 0x35, 0x03, 0x19, 0x10, 0x02 }; // 0x6 (checked) u8 LanguageBaseAttributeIDList[] = { 0x35, 0x09, @@ -34,11 +34,11 @@ u8 BluetoothProfileDescriptorList[] = { 0x35, 0x08, 0x09, 0x01, 0x00 }; // 0x0D (checked) u8 AdditionalProtocolDescriptorLists[] = { 0x35, 0x0F, - 0x35, 0x0D, + 0x35, 0x0D, 0x35, 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x13, - 0x35, 0x03, + 0x35, 0x03, 0x19, 0x00, 0x11 }; // 0x100 u8 ServiceName[] = { 0x25, 0x13, 'N','i','n','t','e','n','d','o',' ','R','V','L','-','C','N','T','-','0','1' }; @@ -62,39 +62,39 @@ u8 HIDReconnectInitiate[] = { 0x09, 0x00, 0x01 }; // 0x206 u8 HIDDescriptorList[] = { 0x35, 0xDF, - 0x35, 0xDD, - 0x08, 0x22, // Element 0 + 0x35, 0xDD, + 0x08, 0x22, // Element 0 0x25, 0xD9, // hmm... <- 0x25 is a string but there is Data // 0xD9 Bytes - Element 1 - 0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x10, - 0x15, 0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95, - 0x01, 0x06, 0x00, 0xff, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x11, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x12, 0x95, 0x02, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x13, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x14, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x15, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x16, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x17, 0x95, 0x06, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x18, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x19, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x1a, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, - 0x85, 0x20, 0x95, 0x06, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x21, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x22, 0x95, 0x04, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x30, 0x95, 0x02, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x31, 0x95, 0x05, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x32, 0x95, 0x0a, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x33, 0x95, 0x11, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x34, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x35, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x36, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x37, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x3d, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x3e, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0x85, 0x3f, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, - 0xc0 }; // end tag + 0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x10, + 0x15, 0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95, + 0x01, 0x06, 0x00, 0xff, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x11, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x12, 0x95, 0x02, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x13, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x14, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x15, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x16, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x17, 0x95, 0x06, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x18, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x19, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x1a, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, + 0x85, 0x20, 0x95, 0x06, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x21, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x22, 0x95, 0x04, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x30, 0x95, 0x02, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x31, 0x95, 0x05, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x32, 0x95, 0x0a, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x33, 0x95, 0x11, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x34, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x35, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x36, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x37, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x3d, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x3e, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0x85, 0x3f, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, + 0xc0 }; // end tag // 0x207 @@ -121,60 +121,60 @@ u8 HIDBootDevice[] = { 0x28, 0x00 }; static u8 packet1[] = { - 0x00, 0x7b, 0x00, 0x76, 0x36, 0x01, 0xcc, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x01, - 0x00, 0x00, 0x09, 0x00, 0x01, 0x35, 0x03, 0x19, 0x11, 0x24, 0x09, 0x00, 0x04, 0x35, 0x0d, 0x35, - 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x11, 0x35, 0x03, 0x19, 0x00, 0x11, 0x09, 0x00, 0x05, 0x35, - 0x03, 0x19, 0x10, 0x02, 0x09, 0x00, 0x06, 0x35, 0x09, 0x09, 0x65, 0x6e, 0x09, 0x00, 0x6a, 0x09, - 0x01, 0x00, 0x09, 0x00, 0x09, 0x35, 0x08, 0x35, 0x06, 0x19, 0x11, 0x24, 0x09, 0x01, 0x00, 0x09, - 0x00, 0x0d, 0x35, 0x0f, 0x35, 0x0d, 0x35, 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x13, 0x35, 0x03, - 0x19, 0x00, 0x11, 0x09, 0x01, 0x00, 0x25, 0x13, 0x4e, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x6f, - 0x20, 0x52, 0x56, 0x4c, 0x2d, 0x43, 0x4e, 0x54, 0x2d, 0x30, 0x31, 0x09, 0x01, 0x02, 0x00, 0x76, + 0x00, 0x7b, 0x00, 0x76, 0x36, 0x01, 0xcc, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x01, + 0x00, 0x00, 0x09, 0x00, 0x01, 0x35, 0x03, 0x19, 0x11, 0x24, 0x09, 0x00, 0x04, 0x35, 0x0d, 0x35, + 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x11, 0x35, 0x03, 0x19, 0x00, 0x11, 0x09, 0x00, 0x05, 0x35, + 0x03, 0x19, 0x10, 0x02, 0x09, 0x00, 0x06, 0x35, 0x09, 0x09, 0x65, 0x6e, 0x09, 0x00, 0x6a, 0x09, + 0x01, 0x00, 0x09, 0x00, 0x09, 0x35, 0x08, 0x35, 0x06, 0x19, 0x11, 0x24, 0x09, 0x01, 0x00, 0x09, + 0x00, 0x0d, 0x35, 0x0f, 0x35, 0x0d, 0x35, 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x13, 0x35, 0x03, + 0x19, 0x00, 0x11, 0x09, 0x01, 0x00, 0x25, 0x13, 0x4e, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x6f, + 0x20, 0x52, 0x56, 0x4c, 0x2d, 0x43, 0x4e, 0x54, 0x2d, 0x30, 0x31, 0x09, 0x01, 0x02, 0x00, 0x76, }; static u8 packet2[] = { - 0x00, 0x7b, 0x00, 0x76, 0x01, 0x25, 0x13, 0x4e, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x64, 0x6f, 0x20, 0x52, 0x56, 0x4c, 0x2d, 0x43, 0x4e, 0x54, 0x2d, 0x30, 0x31, 0x09, 0x01, 0x02, - 0x25, 0x08, 0x4e, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x6f, 0x09, 0x02, 0x00, 0x09, 0x01, 0x00, - 0x09, 0x02, 0x01, 0x09, 0x01, 0x11, 0x09, 0x02, 0x02, 0x08, 0x04, 0x09, 0x02, 0x03, 0x08, 0x33, - 0x09, 0x02, 0x04, 0x28, 0x00, 0x09, 0x02, 0x05, 0x28, 0x01, 0x09, 0x02, 0x06, 0x35, 0xdf, 0x35, - 0xdd, 0x08, 0x22, 0x25, 0xd9, 0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x10, 0x15, 0x00, 0x26, - 0xff, 0x00, 0x75, 0x08, 0x95, 0x01, 0x06, 0x00, 0xff, 0x09, 0x01, 0x91, 0x00, 0x85, 0x11, 0x95, - 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, 0x12, 0x95, 0x02, 0x09, 0x01, 0x91, 0x00, 0x02, 0x00, 0xec, + 0x00, 0x7b, 0x00, 0x76, 0x01, 0x25, 0x13, 0x4e, 0x69, 0x6e, 0x74, 0x65, 0x6e, + 0x64, 0x6f, 0x20, 0x52, 0x56, 0x4c, 0x2d, 0x43, 0x4e, 0x54, 0x2d, 0x30, 0x31, 0x09, 0x01, 0x02, + 0x25, 0x08, 0x4e, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x6f, 0x09, 0x02, 0x00, 0x09, 0x01, 0x00, + 0x09, 0x02, 0x01, 0x09, 0x01, 0x11, 0x09, 0x02, 0x02, 0x08, 0x04, 0x09, 0x02, 0x03, 0x08, 0x33, + 0x09, 0x02, 0x04, 0x28, 0x00, 0x09, 0x02, 0x05, 0x28, 0x01, 0x09, 0x02, 0x06, 0x35, 0xdf, 0x35, + 0xdd, 0x08, 0x22, 0x25, 0xd9, 0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x10, 0x15, 0x00, 0x26, + 0xff, 0x00, 0x75, 0x08, 0x95, 0x01, 0x06, 0x00, 0xff, 0x09, 0x01, 0x91, 0x00, 0x85, 0x11, 0x95, + 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, 0x12, 0x95, 0x02, 0x09, 0x01, 0x91, 0x00, 0x02, 0x00, 0xec, }; static u8 packet3[] = { - 0x00, 0x7b, 0x00, 0x76, 0x85, 0x13, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, - 0x14, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, 0x15, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, - 0x16, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, 0x85, 0x17, 0x95, 0x06, 0x09, 0x01, 0x91, 0x00, 0x85, - 0x18, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, 0x85, 0x19, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, - 0x1a, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, 0x20, 0x95, 0x06, 0x09, 0x01, 0x81, 0x00, 0x85, - 0x21, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x22, 0x95, 0x04, 0x09, 0x01, 0x81, 0x00, 0x85, - 0x30, 0x95, 0x02, 0x09, 0x01, 0x81, 0x00, 0x85, 0x31, 0x95, 0x05, 0x09, 0x01, 0x81, 0x00, 0x85, - 0x32, 0x95, 0x0a, 0x09, 0x01, 0x81, 0x00, 0x85, 0x33, 0x95, 0x11, 0x09, 0x01, 0x02, 0x01, 0x62, + 0x00, 0x7b, 0x00, 0x76, 0x85, 0x13, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, + 0x14, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, 0x15, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, + 0x16, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, 0x85, 0x17, 0x95, 0x06, 0x09, 0x01, 0x91, 0x00, 0x85, + 0x18, 0x95, 0x15, 0x09, 0x01, 0x91, 0x00, 0x85, 0x19, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, + 0x1a, 0x95, 0x01, 0x09, 0x01, 0x91, 0x00, 0x85, 0x20, 0x95, 0x06, 0x09, 0x01, 0x81, 0x00, 0x85, + 0x21, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x22, 0x95, 0x04, 0x09, 0x01, 0x81, 0x00, 0x85, + 0x30, 0x95, 0x02, 0x09, 0x01, 0x81, 0x00, 0x85, 0x31, 0x95, 0x05, 0x09, 0x01, 0x81, 0x00, 0x85, + 0x32, 0x95, 0x0a, 0x09, 0x01, 0x81, 0x00, 0x85, 0x33, 0x95, 0x11, 0x09, 0x01, 0x02, 0x01, 0x62, }; static u8 packet4[] = { - 0x00, 0x70, 0x00, 0x6d, 0x81, 0x00, 0x85, 0x34, 0x95, 0x15, 0x09, 0x01, 0x81, - 0x00, 0x85, 0x35, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x36, 0x95, 0x15, 0x09, 0x01, 0x81, - 0x00, 0x85, 0x37, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x3d, 0x95, 0x15, 0x09, 0x01, 0x81, - 0x00, 0x85, 0x3e, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x3f, 0x95, 0x15, 0x09, 0x01, 0x81, - 0x00, 0xc0, 0x09, 0x02, 0x07, 0x35, 0x08, 0x35, 0x06, 0x09, 0x04, 0x09, 0x09, 0x01, 0x00, 0x09, - 0x02, 0x08, 0x28, 0x00, 0x09, 0x02, 0x09, 0x28, 0x01, 0x09, 0x02, 0x0a, 0x28, 0x01, 0x09, 0x02, - 0x0b, 0x09, 0x01, 0x00, 0x09, 0x02, 0x0c, 0x09, 0x0c, 0x80, 0x09, 0x02, 0x0d, 0x28, 0x00, 0x09, - 0x02, 0x0e, 0x28, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x6d, 0x81, 0x00, 0x85, 0x34, 0x95, 0x15, 0x09, 0x01, 0x81, + 0x00, 0x85, 0x35, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x36, 0x95, 0x15, 0x09, 0x01, 0x81, + 0x00, 0x85, 0x37, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x3d, 0x95, 0x15, 0x09, 0x01, 0x81, + 0x00, 0x85, 0x3e, 0x95, 0x15, 0x09, 0x01, 0x81, 0x00, 0x85, 0x3f, 0x95, 0x15, 0x09, 0x01, 0x81, + 0x00, 0xc0, 0x09, 0x02, 0x07, 0x35, 0x08, 0x35, 0x06, 0x09, 0x04, 0x09, 0x09, 0x01, 0x00, 0x09, + 0x02, 0x08, 0x28, 0x00, 0x09, 0x02, 0x09, 0x28, 0x01, 0x09, 0x02, 0x0a, 0x28, 0x01, 0x09, 0x02, + 0x0b, 0x09, 0x01, 0x00, 0x09, 0x02, 0x0c, 0x09, 0x0c, 0x80, 0x09, 0x02, 0x0d, 0x28, 0x00, 0x09, + 0x02, 0x0e, 0x28, 0x00, 0x00, }; static u8 packet4_0x10001[] = { - 0x00, 0x60, 0x00, 0x5d, 0x36, 0x00, 0x5a, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x01, - 0x00, 0x01, 0x09, 0x00, 0x01, 0x35, 0x03, 0x19, 0x12, 0x00, 0x09, 0x00, 0x04, 0x35, 0x0d, 0x35, - 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x01, 0x35, 0x03, 0x19, 0x00, 0x01, 0x09, 0x00, 0x05, 0x35, - 0x03, 0x19, 0x10, 0x02, 0x09, 0x00, 0x09, 0x35, 0x08, 0x35, 0x06, 0x19, 0x12, 0x00, 0x09, 0x01, - 0x00, 0x09, 0x02, 0x00, 0x09, 0x01, 0x00, 0x09, 0x02, 0x01, 0x09, 0x05, 0x7e, 0x09, 0x02, 0x02, - 0x09, 0x03, 0x06, 0x09, 0x02, 0x03, 0x09, 0x06, 0x00, 0x09, 0x02, 0x04, 0x28, 0x01, 0x09, 0x02, - 0x05, 0x09, 0x00, 0x02, 0x00, + 0x00, 0x60, 0x00, 0x5d, 0x36, 0x00, 0x5a, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x01, + 0x00, 0x01, 0x09, 0x00, 0x01, 0x35, 0x03, 0x19, 0x12, 0x00, 0x09, 0x00, 0x04, 0x35, 0x0d, 0x35, + 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x01, 0x35, 0x03, 0x19, 0x00, 0x01, 0x09, 0x00, 0x05, 0x35, + 0x03, 0x19, 0x10, 0x02, 0x09, 0x00, 0x09, 0x35, 0x08, 0x35, 0x06, 0x19, 0x12, 0x00, 0x09, 0x01, + 0x00, 0x09, 0x02, 0x00, 0x09, 0x01, 0x00, 0x09, 0x02, 0x01, 0x09, 0x05, 0x7e, 0x09, 0x02, 0x02, + 0x09, 0x03, 0x06, 0x09, 0x02, 0x03, 0x09, 0x06, 0x00, 0x09, 0x02, 0x04, 0x28, 0x01, 0x09, 0x02, + 0x05, 0x09, 0x00, 0x02, 0x00, }; diff --git a/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.h b/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.h index a9350ec532..ac21d4cd48 100644 --- a/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.h +++ b/Source/Core/Core/Src/IPC_HLE/WiiMote_HID_Attr.h @@ -12,7 +12,7 @@ struct SAttrib u8* pData; u16 size; - SAttrib(u16 _ID, u8* _Data, u16 _size) + SAttrib(u16 _ID, u8* _Data, u16 _size) : ID(_ID) , pData(_Data) , size(_size) diff --git a/Source/Core/Core/Src/IPC_HLE/hci.h b/Source/Core/Core/Src/IPC_HLE/hci.h index b87e20fd84..41f145a8ed 100644 --- a/Source/Core/Core/Src/IPC_HLE/hci.h +++ b/Source/Core/Core/Src/IPC_HLE/hci.h @@ -84,14 +84,6 @@ // All structs in this file are packed #pragma pack(push, 1) -/* - * Bluetooth Address Family Protocol Numbers - */ -#define BTPROTO_HCI 1 -#define BTPROTO_L2CAP 2 -#define BTPROTO_RFCOMM 3 -#define BTPROTO_SCO 4 - /* All sizes are in bytes */ #define BLUETOOTH_BDADDR_SIZE 6 @@ -102,9 +94,8 @@ typedef struct { uint8_t b[BLUETOOTH_BDADDR_SIZE]; } bdaddr_t; -#endif - #define BDADDR_ANY { { 0, 0, 0, 0, 0, 0 } } +#endif /************************************************************************** ************************************************************************** @@ -2416,7 +2407,7 @@ struct SHCIEventStatus u8 EventType; u8 PayloadLength; u8 EventStatus; - u8 PacketIndicator; + u8 PacketIndicator; u16 Opcode; }; diff --git a/Source/Core/Core/Src/Movie.cpp b/Source/Core/Core/Src/Movie.cpp index c613d18fd5..cc5b099ee0 100644 --- a/Source/Core/Core/Src/Movie.cpp +++ b/Source/Core/Core/Src/Movie.cpp @@ -66,7 +66,7 @@ bool g_bRecordingFromSaveState = false; bool g_bPolled = false; int g_currentSaveVersion = 0; -std::string tmpStateFilename = "dtm.sav"; +std::string tmpStateFilename = File::GetUserPath(D_STATESAVES_IDX) + "dtm.sav"; std::string g_InputDisplay[8]; @@ -81,7 +81,7 @@ void EnsureTmpInputSize(size_t bound) size_t newAlloc = DTM_BASE_LENGTH; while (newAlloc < bound) newAlloc *= 2; - + u8* newTmpInput = new u8[newAlloc]; tmpInputAllocated = newAlloc; if (tmpInput != NULL) @@ -111,14 +111,14 @@ std::string GetInputDisplay() for (int i = 0; i < 8; ++i) if ((g_numPads & (1 << i)) != 0) inputDisplay.append(g_InputDisplay[i]); - - return inputDisplay; + + return inputDisplay; } void FrameUpdate() { g_currentFrame++; - if(!g_bPolled) + if(!g_bPolled) g_currentLagCount++; if (IsRecordingInput()) @@ -131,7 +131,7 @@ void FrameUpdate() Core::SetState(Core::CORE_PAUSE); g_bFrameStep = false; } - + // ("framestop") the only purpose of this is to cause interpreter/jit Run() to return temporarily. // after that we set it back to CPU_RUNNING and continue as normal. if (g_bFrameStop) @@ -139,7 +139,7 @@ void FrameUpdate() if(g_framesToSkip) FrameSkipping(); - + g_bPolled = false; } @@ -176,8 +176,8 @@ void Init() if (!tmpHeader.bFromSaveState || !IsPlayingInput()) Core::SetStateFileName(""); - for (int i = 0; i < 8; ++i) - g_InputDisplay[i].clear(); + for (auto& disp : g_InputDisplay) + disp.clear(); if (!IsPlayingInput() && !IsRecordingInput()) { @@ -203,10 +203,10 @@ void InputUpdate() void SetFrameSkipping(unsigned int framesToSkip) { std::lock_guard lk(cs_frameSkip); - + g_framesToSkip = framesToSkip; g_frameSkipCounter = 0; - + // Don't forget to re-enable rendering in case it wasn't... // as this won't be changed anymore when frameskip is turned off if (framesToSkip == 0) @@ -723,7 +723,7 @@ bool PlayInput(const char *filename) return false; g_recordfd.ReadArray(&tmpHeader, 1); - + if(tmpHeader.filetype[0] != 'D' || tmpHeader.filetype[1] != 'T' || tmpHeader.filetype[2] != 'M' || tmpHeader.filetype[3] != 0x1A) { PanicAlertT("Invalid recording file"); goto cleanup; @@ -738,7 +738,7 @@ bool PlayInput(const char *filename) g_currentInputCount = 0; g_playMode = MODE_PLAYING; - + g_totalBytes = g_recordfd.GetSize() - 256; EnsureTmpInputSize((size_t)g_totalBytes); g_recordfd.ReadArray(tmpInput, (size_t)g_totalBytes); @@ -849,7 +849,7 @@ void LoadInput(const char *filename) // this is a "you did something wrong" alert for the user's benefit. // we'll try to say what's going on in excruciating detail, otherwise the user might not believe us. if(IsUsingWiimote(0)) - { + { // TODO: more detail PanicAlertT("Warning: You loaded a save whose movie mismatches on byte %d (0x%X). You should load another save before continuing, or load this state with read-only mode off. Otherwise you'll probably get a desync.", i+256, i+256); memcpy(tmpInput, movInput, g_currentByte); @@ -942,7 +942,7 @@ void PlayController(SPADStatus *PadStatus, int controllerID) memcpy(&g_padState, &(tmpInput[g_currentByte]), 8); g_currentByte += 8; - + PadStatus->triggerLeft = g_padState.TriggerL; PadStatus->triggerRight = g_padState.TriggerR; @@ -953,7 +953,7 @@ void PlayController(SPADStatus *PadStatus, int controllerID) PadStatus->substickY = g_padState.CStickY; PadStatus->button |= PAD_USE_ORIGIN; - + if(g_padState.A) { PadStatus->button |= PAD_BUTTON_A; @@ -972,7 +972,7 @@ void PlayController(SPADStatus *PadStatus, int controllerID) PadStatus->button |= PAD_TRIGGER_Z; if(g_padState.Start) PadStatus->button |= PAD_BUTTON_START; - + if(g_padState.DPadUp) PadStatus->button |= PAD_BUTTON_UP; if(g_padState.DPadDown) @@ -981,7 +981,7 @@ void PlayController(SPADStatus *PadStatus, int controllerID) PadStatus->button |= PAD_BUTTON_LEFT; if(g_padState.DPadRight) PadStatus->button |= PAD_BUTTON_RIGHT; - + if(g_padState.L) PadStatus->button |= PAD_TRIGGER_L; if(g_padState.R) @@ -1053,19 +1053,19 @@ bool PlayWiimote(int wiimote, u8 *data, const WiimoteEmu::ReportFeatures& rptf, EndPlayInput(!g_bReadOnly); return false; } - + memcpy(data, &(tmpInput[g_currentByte]), size); g_currentByte += size; - + SetWiiInputDisplayString(wiimote, coreData, accelData, irData); g_currentInputCount++; - + CheckInputEnd(); return true; } -void EndPlayInput(bool cont) +void EndPlayInput(bool cont) { if (cont) { @@ -1092,12 +1092,12 @@ void SaveRecording(const char *filename) // Create the real header now and write it DTMHeader header; memset(&header, 0, sizeof(DTMHeader)); - + header.filetype[0] = 'D'; header.filetype[1] = 'T'; header.filetype[2] = 'M'; header.filetype[3] = 0x1A; strncpy((char *)header.gameID, Core::g_CoreStartupParameter.GetUniqueID().c_str(), 6); header.bWii = Core::g_CoreStartupParameter.bWii; header.numControllers = g_numPads & (Core::g_CoreStartupParameter.bWii ? 0xFF : 0x0F); - + header.bFromSaveState = g_bRecordingFromSaveState; header.frameCount = g_totalFrames; header.lagCount = g_totalLagCount; @@ -1131,7 +1131,7 @@ void SaveRecording(const char *filename) memcpy(header.revision, revision, ArraySize(header.revision)); // TODO - header.uniqueID = 0; + header.uniqueID = 0; // header.audioEmulator; save_record.WriteArray(&header, 1); @@ -1144,7 +1144,7 @@ void SaveRecording(const char *filename) stateFilename.append(".sav"); success = File::Copy(tmpStateFilename, stateFilename); } - + if (success) Core::DisplayMessage(StringFromFormat("DTM %s saved", filename).c_str(), 2000); else diff --git a/Source/Core/Core/Src/Movie.h b/Source/Core/Core/Src/Movie.h index 423393c7a4..fcfa935cf4 100644 --- a/Source/Core/Core/Src/Movie.h +++ b/Source/Core/Core/Src/Movie.h @@ -41,7 +41,7 @@ struct ControllerState { u8 TriggerL, TriggerR; // Triggers, 16 bits u8 AnalogStickX, AnalogStickY; // Main Stick, 16 bits u8 CStickX, CStickY; // Sub-Stick, 16 bits - + }; // Total: 60 + 4 = 64 bits per frame static_assert(sizeof(ControllerState) == 8, "ControllerState should be 8 bytes"); #pragma pack(pop) diff --git a/Source/Core/Core/Src/NetPlayServer.cpp b/Source/Core/Core/Src/NetPlayServer.cpp index 8cd6f08a9a..0049719a05 100644 --- a/Source/Core/Core/Src/NetPlayServer.cpp +++ b/Source/Core/Core/Src/NetPlayServer.cpp @@ -51,7 +51,7 @@ void NetPlayServer::ThreadFunc() sf::Packet spac; spac << (MessageId)NP_MSG_PING; spac << m_ping_key; - + std::lock_guard lks(m_crit.send); m_ping_timer.Start(); SendToClients(spac); @@ -217,7 +217,7 @@ unsigned int NetPlayServer::OnConnect(sf::SocketTCP& socket) UpdatePadMapping(); // sync pad mappings with everyone UpdateWiimoteMapping(); } - + // add client to selector/ used for receiving m_selector.Add(socket); @@ -255,7 +255,7 @@ unsigned int NetPlayServer::OnDisconnect(sf::SocketTCP& socket) spac << pid; m_selector.Remove(socket); - + std::lock_guard lkp(m_crit.players); m_players.erase(m_players.find(socket)); @@ -386,7 +386,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, sf::SocketTCP& socket) // then disconnect them. if (m_pad_map[map] != player.pid) return 1; - + // Relay to clients sf::Packet spac; spac << (MessageId)NP_MSG_PAD_DATA; diff --git a/Source/Core/Core/Src/PatchEngine.cpp b/Source/Core/Core/Src/PatchEngine.cpp index e266e0d098..f4386ade6d 100644 --- a/Source/Core/Core/Src/PatchEngine.cpp +++ b/Source/Core/Core/Src/PatchEngine.cpp @@ -35,7 +35,7 @@ using namespace Common; namespace PatchEngine { -const char *PatchTypeStrings[] = +const char *PatchTypeStrings[] = { "byte", "word", @@ -54,9 +54,8 @@ void LoadPatchSection(const char *section, std::vector &patches, std::vector enabledLines; std::set enabledNames; localIni.GetLines(enabledSectionName.c_str(), enabledLines); - for (auto iter = enabledLines.begin(); iter != enabledLines.end(); ++iter) + for (auto& line : enabledLines) { - const std::string& line = *iter; if (line.size() != 0 && line[0] == '$') { std::string name = line.substr(1, line.size() - 1); @@ -72,10 +71,8 @@ void LoadPatchSection(const char *section, std::vector &patches, Patch currentPatch; inis[i]->GetLines(section, lines); - for (auto iter = lines.begin(); iter != lines.end(); ++iter) + for (auto line : lines) { - std::string line = *iter; - if (line.size() == 0) continue; @@ -187,11 +184,11 @@ void LoadPatches() void ApplyPatches(const std::vector &patches) { - for (std::vector::const_iterator iter = patches.begin(); iter != patches.end(); ++iter) + for (const auto& patch : patches) { - if (iter->active) + if (patch.active) { - for (std::vector::const_iterator iter2 = iter->entries.begin(); iter2 != iter->entries.end(); ++iter2) + for (std::vector::const_iterator iter2 = patch.entries.begin(); iter2 != patch.entries.end(); ++iter2) { u32 addr = iter2->address; u32 value = iter2->value; @@ -215,7 +212,7 @@ void ApplyPatches(const std::vector &patches) } } -void ApplyFramePatches() +void ApplyFramePatches() { ApplyPatches(onFrame); diff --git a/Source/Core/Core/Src/PowerPC/Gekko.h b/Source/Core/Core/Src/PowerPC/Gekko.h index f4da1f800d..d4e6f8e4cb 100644 --- a/Source/Core/Core/Src/PowerPC/Gekko.h +++ b/Source/Core/Core/Src/PowerPC/Gekko.h @@ -76,7 +76,7 @@ union UGeckoInstruction u32 OPCD_5 : 6; }; struct - { + { u32 LK_2 : 1; u32 AA_2 : 1; // Branch displacement, signed 14-bit (right-extended by 0b00) @@ -118,7 +118,7 @@ union UGeckoInstruction u32 OPCD_9 : 6; }; struct - { + { u32 UIMM_2 : 16; u32 RA_4 : 5; u32 L_3 : 1; @@ -193,7 +193,7 @@ union UGeckoInstruction }; // crxor - struct + struct { u32 : 11; // Source bit in the CR @@ -206,7 +206,7 @@ union UGeckoInstruction }; // mftb - struct + struct { u32 : 11; // Time base register @@ -214,7 +214,7 @@ union UGeckoInstruction u32 : 11; }; - struct + struct { u32 : 11; // Upper time base register @@ -224,7 +224,7 @@ union UGeckoInstruction u32 : 11; }; - struct + struct { u32 : 18; // Source field in the CR or FPSCR @@ -234,7 +234,7 @@ union UGeckoInstruction u32 : 6; }; - struct + struct { u32 : 12; // Field mask, identifies the CR fields to be updated by mtcrf @@ -244,7 +244,7 @@ union UGeckoInstruction u32 FD : 5; u32 : 6; }; - struct + struct { u32 : 6; // Source FPR @@ -266,7 +266,7 @@ union UGeckoInstruction }; // paired single quantized load/store - struct + struct { u32 : 7; // Graphics quantization register to use @@ -281,13 +281,13 @@ union UGeckoInstruction u32 : 16; }; - struct + struct { signed SIMM_12 : 12; u32 : 20; }; - struct + struct { u32 : 11; // Number of bytes to use in lswi/stswi (0 means 32 bytes) @@ -305,7 +305,7 @@ union UGeckoInstruction union UGQR { u32 Hex; - struct + struct { u32 ST_TYPE : 3; u32 : 5; @@ -338,7 +338,7 @@ union UFPR // XER union UReg_XER { - struct + struct { u32 BYTE_COUNT : 7; u32 : 22; @@ -542,7 +542,7 @@ union UReg_HID4 union UReg_SPR1 { u32 Hex; - struct + struct { u32 htaborg : 16; u32 : 7; @@ -634,7 +634,7 @@ union UReg_DMAL union UReg_BAT_Up { - struct + struct { u32 VP : 1; u32 VS : 1; @@ -650,7 +650,7 @@ union UReg_BAT_Up union UReg_BAT_Lo { - struct + struct { u32 PP : 2; u32 : 1; @@ -666,7 +666,7 @@ union UReg_BAT_Lo union UReg_PTE { - struct + struct { u64 API : 6; u64 H : 1; @@ -703,7 +703,7 @@ enum EQuantizeType }; // branches -enum +enum { BO_BRANCH_IF_CTR_0 = 2, // 3 BO_DONT_DECREMENT_FLAG = 4, // 2 diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp index 0082d9946b..dd71abcaeb 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp @@ -10,11 +10,11 @@ #include "../../Host.h" #include "../../IPC_HLE/WII_IPC_HLE.h" - #ifdef USE_GDBSTUB #include "../GDBStub.h" #endif +#include namespace { u32 last_pc; @@ -79,7 +79,7 @@ void Trace( UGeckoInstruction &instCode ) std::string fregs = ""; for (int i=0; i<32; i++) { - sprintf(freg, "f%02d: %08llx %08llx ", i, PowerPC::ppcState.ps[i][0], PowerPC::ppcState.ps[i][1]); + sprintf(freg, "f%02d: %08" PRIx64 " %08" PRIx64 " ", i, PowerPC::ppcState.ps[i][0], PowerPC::ppcState.ps[i][1]); fregs.append(freg); } diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h index cd46e7846b..dfbe4eb003 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.h @@ -19,15 +19,15 @@ class Interpreter : public CPUCoreBase { public: - void Init(); - void Shutdown(); + void Init() override; + void Shutdown() override; void Reset(); - void SingleStep(); + void SingleStep() override; int SingleStepInner(); - void Run(); - void ClearCache(); - const char *GetName(); + void Run() override; + void ClearCache() override; + const char *GetName() override; typedef void (*_interpreterInstruction)(UGeckoInstruction instCode); @@ -281,7 +281,7 @@ public: static void crxor(UGeckoInstruction _inst); static void mcrf(UGeckoInstruction _inst); static void rfi(UGeckoInstruction _inst); - static void rfid(UGeckoInstruction _inst); + static void rfid(UGeckoInstruction _inst); // static void sync(UGeckoInstruction _inst); static void isync(UGeckoInstruction _inst); diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Branch.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Branch.cpp index 123c870edf..5a3dc9e467 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Branch.cpp @@ -109,7 +109,7 @@ void Interpreter::rfi(UGeckoInstruction _inst) m_EndBlock = true; } -void Interpreter::rfid(UGeckoInstruction _inst) +void Interpreter::rfid(UGeckoInstruction _inst) { _dbg_assert_msg_(POWERPC, 0, "rfid instruction unimplemented (does this instruction even exist?)"); m_EndBlock = true; diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h index 5509679ebc..d379bf7049 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FPUtils.h @@ -115,7 +115,7 @@ inline double NI_mul(const double a, const double b) } inline double NI_add(const double a, const double b) -{ +{ #ifdef VERY_ACCURATE_FP if (a != a) return a; if (b != b) return b; @@ -132,7 +132,7 @@ inline double NI_add(const double a, const double b) } inline double NI_sub(const double a, const double b) -{ +{ #ifdef VERY_ACCURATE_FP if (a != a) return a; if (b != b) return b; @@ -224,7 +224,7 @@ inline u32 ConvertToSingle(u64 x) } } -// used by psq_stXX operations. +// used by psq_stXX operations. inline u32 ConvertToSingleFTZ(u64 x) { u32 exp = (x >> 52) & 0x7ff; diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp index e1511c7997..daa02c20a1 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp @@ -40,8 +40,8 @@ void Interpreter::fcmpo(UGeckoInstruction _inst) int compareResult; - if (fa < fb) compareResult = 8; - else if (fa > fb) compareResult = 4; + if (fa < fb) compareResult = 8; + else if (fa > fb) compareResult = 4; else if (fa == fb) compareResult = 2; else { @@ -71,12 +71,12 @@ void Interpreter::fcmpu(UGeckoInstruction _inst) int compareResult; - if (fa < fb) compareResult = 8; - else if (fa > fb) compareResult = 4; + if (fa < fb) compareResult = 8; + else if (fa > fb) compareResult = 4; else if (fa == fb) compareResult = 2; else - { - compareResult = 1; + { + compareResult = 1; if (IsSNAN(fa) || IsSNAN(fb)) { SetFPException(FPSCR_VXSNAN); @@ -98,7 +98,7 @@ void Interpreter::fctiwx(UGeckoInstruction _inst) FPSCR.FI = 0; FPSCR.FR = 0; } - else if (b < -(double)0x80000000) + else if (b < -(double)0x80000000) { value = 0x80000000; SetFPException(FPSCR_VXCVI); @@ -141,7 +141,7 @@ void Interpreter::fctiwx(UGeckoInstruction _inst) SetFI(1); FPSCR.FR = fabs(di) > fabs(b); } - } + } // based on HW tests // FPRF is not affected riPS0(_inst.FD) = 0xfff8000000000000ull | value; @@ -190,7 +190,7 @@ void Interpreter::fctiwzx(UGeckoInstruction _inst) // FPRF is not affected riPS0(_inst.FD) = 0xfff8000000000000ull | value; if (value == 0 && ( (*(u64*)&b) & DOUBLE_SIGN )) - riPS0(_inst.FD) |= 0x100000000ull; + riPS0(_inst.FD) |= 0x100000000ull; if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } @@ -199,7 +199,7 @@ void Interpreter::fmrx(UGeckoInstruction _inst) { riPS0(_inst.FD) = riPS0(_inst.FB); // This is a binary instruction. Does not alter FPSCR - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fabsx(UGeckoInstruction _inst) @@ -213,7 +213,7 @@ void Interpreter::fnabsx(UGeckoInstruction _inst) { riPS0(_inst.FD) = riPS0(_inst.FB) | (1ULL << 63); // This is a binary instruction. Does not alter FPSCR - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fnegx(UGeckoInstruction _inst) @@ -251,7 +251,7 @@ void Interpreter::fmulx(UGeckoInstruction _inst) FPSCR.FI = 0; // are these flags important? FPSCR.FR = 0; UpdateFPRF(rPS0(_inst.FD)); - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fmulsx(UGeckoInstruction _inst) { @@ -293,7 +293,7 @@ void Interpreter::faddsx(UGeckoInstruction _inst) { rPS0(_inst.FD) = rPS1(_inst.FD) = ForceSingle(NI_add(rPS0(_inst.FA), rPS0(_inst.FB))); UpdateFPRF(rPS0(_inst.FD)); - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fdivx(UGeckoInstruction _inst) @@ -305,7 +305,7 @@ void Interpreter::fdivx(UGeckoInstruction _inst) else { rPS0(_inst.FD) = ForceDouble(a / b); - if (b == 0.0) + if (b == 0.0) { if (a == 0.0) { @@ -366,7 +366,7 @@ void Interpreter::fresx(UGeckoInstruction _inst) double b = rPS0(_inst.FB); double one_over = ForceSingle(1.0 / b); // this is based on the real hardware tests - if (b != 0.0 && IsINF(one_over)) + if (b != 0.0 && IsINF(one_over)) { if (one_over > 0) riPS0(_inst.FD) = riPS1(_inst.FD) = MAX_SINGLE; @@ -388,7 +388,7 @@ void Interpreter::fresx(UGeckoInstruction _inst) void Interpreter::frsqrtex(UGeckoInstruction _inst) { double b = rPS0(_inst.FB); - if (b < 0.0) + if (b < 0.0) { SetFPException(FPSCR_VXSQRT); rPS0(_inst.FD) = PPC_NAN; @@ -432,7 +432,7 @@ void Interpreter::fmsubx(UGeckoInstruction _inst) { rPS0(_inst.FD) = ForceDouble(NI_msub( rPS0(_inst.FA), rPS0(_inst.FC), rPS0(_inst.FB) )); UpdateFPRF(rPS0(_inst.FD)); - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fmsubsx(UGeckoInstruction _inst) @@ -440,7 +440,7 @@ void Interpreter::fmsubsx(UGeckoInstruction _inst) rPS0(_inst.FD) = rPS1(_inst.FD) = ForceSingle( NI_msub(rPS0(_inst.FA), rPS0(_inst.FC), rPS0(_inst.FB) )); UpdateFPRF(rPS0(_inst.FD)); - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fnmaddx(UGeckoInstruction _inst) @@ -451,10 +451,10 @@ void Interpreter::fnmaddx(UGeckoInstruction _inst) } void Interpreter::fnmaddsx(UGeckoInstruction _inst) { - rPS0(_inst.FD) = rPS1(_inst.FD) = + rPS0(_inst.FD) = rPS1(_inst.FD) = ForceSingle(-NI_madd(rPS0(_inst.FA), rPS0(_inst.FC), rPS0(_inst.FB))); UpdateFPRF(rPS0(_inst.FD)); - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fnmsubx(UGeckoInstruction _inst) @@ -470,7 +470,7 @@ void Interpreter::fnmsubsx(UGeckoInstruction _inst) rPS0(_inst.FD) = rPS1(_inst.FD) = ForceSingle(-NI_msub(rPS0(_inst.FA), rPS0(_inst.FC), rPS0(_inst.FB))); UpdateFPRF(rPS0(_inst.FD)); - if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); + if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::fsubx(UGeckoInstruction _inst) diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp index f25d3431ca..d09d9bf724 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp @@ -46,7 +46,7 @@ u32 Interpreter::Helper_Mask(int mb, int me) //do the bitflip u32 mask = begin ^ end; //and invert if backwards - if (me < mb) + if (me < mb) return ~mask; else return mask; @@ -64,7 +64,7 @@ void Interpreter::addic(UGeckoInstruction _inst) { u32 a = m_GPR[_inst.RA]; u32 imm = (u32)(s32)_inst.SIMM_16; - // TODO(ector): verify this thing + // TODO(ector): verify this thing m_GPR[_inst.RD] = a + imm; SetCarry(Helper_Carry(a, imm)); } @@ -135,7 +135,7 @@ void Interpreter::subfic(UGeckoInstruction _inst) // #define CALC_XER_CA(X,Y) (((X) + (Y) < X) ? SET_XER_CA : CLEAR_XER_CA) if ((rra + immediate) < rra) SetCarry(1); - else + else SetCarry(0); m_GPR[_inst.RD] = rra - immediate; @@ -146,7 +146,7 @@ void Interpreter::subfic(UGeckoInstruction _inst) SetCarry((m_GPR[_inst.RA] == 0) || (Helper_Carry(0-m_GPR[_inst.RA], immediate))); } -void Interpreter::twi(UGeckoInstruction _inst) +void Interpreter::twi(UGeckoInstruction _inst) { s32 a = m_GPR[_inst.RA]; s32 b = _inst.SIMM_16; @@ -216,8 +216,8 @@ void Interpreter::cmp(UGeckoInstruction _inst) { s32 a = (s32)m_GPR[_inst.RA]; s32 b = (s32)m_GPR[_inst.RB]; - int fTemp = 0x8; // a < b - // if (a < b) fTemp = 0x8; else + int fTemp = 0x8; // a < b + // if (a < b) fTemp = 0x8; else if (a > b) fTemp = 0x4; else if (a == b) fTemp = 0x2; if (GetXER_SO()) PanicAlert("cmp getting overflow flag"); // fTemp |= 0x1 @@ -230,7 +230,7 @@ void Interpreter::cmpl(UGeckoInstruction _inst) u32 b = m_GPR[_inst.RB]; u32 fTemp = 0x8; // a < b - // if (a < b) fTemp = 0x8;else + // if (a < b) fTemp = 0x8;else if (a > b) fTemp = 0x4; else if (a == b) fTemp = 0x2; if (GetXER_SO()) PanicAlert("cmpl getting overflow flag"); // fTemp |= 0x1; @@ -243,7 +243,7 @@ void Interpreter::cntlzwx(UGeckoInstruction _inst) u32 mask = 0x80000000; int i = 0; for (; i < 32; i++, mask >>= 1) - if (val & mask) + if (val & mask) break; m_GPR[_inst.RA] = i; if (_inst.Rc) Helper_UpdateCR0(m_GPR[_inst.RA]); @@ -374,7 +374,7 @@ void Interpreter::srwx(UGeckoInstruction _inst) if (_inst.Rc) Helper_UpdateCR0(m_GPR[_inst.RA]); } -void Interpreter::tw(UGeckoInstruction _inst) +void Interpreter::tw(UGeckoInstruction _inst) { s32 a = m_GPR[_inst.RA]; s32 b = m_GPR[_inst.RB]; diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStore.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStore.cpp index d6adca6f38..3fb441f5b9 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStore.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStore.cpp @@ -214,7 +214,7 @@ void Interpreter::stmw(UGeckoInstruction _inst) } void Interpreter::lwz(UGeckoInstruction _inst) -{ +{ u32 uAddress = Helper_Get_EA(_inst); u32 temp = Memory::Read_U32(uAddress); if (!(PowerPC::ppcState.Exceptions & EXCEPTION_DSI)) @@ -289,8 +289,8 @@ void Interpreter::stfs(UGeckoInstruction _inst) } void Interpreter::stfsu(UGeckoInstruction _inst) -{ - u32 uAddress = Helper_Get_EA_U(_inst); +{ + u32 uAddress = Helper_Get_EA_U(_inst); Memory::Write_U32(ConvertToSingle(riPS0(_inst.FS)), uAddress); if (!(PowerPC::ppcState.Exceptions & EXCEPTION_DSI)) { @@ -340,7 +340,7 @@ void Interpreter::dcbf(UGeckoInstruction _inst) /* u32 tmp1 = Memory::Read_U32(PC+4); u32 tmp2 = Memory::Read_U32(PC+8); - if ((tmp1 == 0x38630020) && + if ((tmp1 == 0x38630020) && (tmp2 == 0x4200fff8)) { NPC = PC + 12; @@ -424,7 +424,7 @@ void Interpreter::ecowx(UGeckoInstruction _inst) } if (EA & 3) Common::AtomicOr(PowerPC::ppcState.Exceptions, EXCEPTION_ALIGNMENT); - + // _assert_msg_(POWERPC,0,"ecowx - send stw request (%08x@%08x) to device %02x", // m_GPR[_inst.RS], EA, PowerPC::ppcState.spr[SPR_EAR] & 0x1f); @@ -441,7 +441,7 @@ void Interpreter::eieio(UGeckoInstruction _inst) void Interpreter::icbi(UGeckoInstruction _inst) { - u32 address = Helper_Get_EA_X(_inst); + u32 address = Helper_Get_EA_X(_inst); PowerPC::ppcState.iCache.Invalidate(address); } @@ -491,7 +491,7 @@ void Interpreter::lhbrx(UGeckoInstruction _inst) if (!(PowerPC::ppcState.Exceptions & EXCEPTION_DSI)) { m_GPR[_inst.RD] = temp; - } + } } void Interpreter::lhzux(UGeckoInstruction _inst) @@ -623,8 +623,8 @@ void Interpreter::stfiwx(UGeckoInstruction _inst) void Interpreter::stfsux(UGeckoInstruction _inst) -{ - u32 uAddress = Helper_Get_EA_UX(_inst); +{ + u32 uAddress = Helper_Get_EA_UX(_inst); Memory::Write_U32(ConvertToSingle(riPS0(_inst.FS)), uAddress); if (!(PowerPC::ppcState.Exceptions & EXCEPTION_DSI)) { @@ -633,7 +633,7 @@ void Interpreter::stfsux(UGeckoInstruction _inst) } void Interpreter::stfsx(UGeckoInstruction _inst) -{ +{ Memory::Write_U32(ConvertToSingle(riPS0(_inst.FS)), Helper_Get_EA_X(_inst)); } @@ -833,7 +833,7 @@ void Interpreter::tlbia(UGeckoInstruction _inst) { // Gekko does not support this instructions. PanicAlert("The GC CPU does not support tlbia"); - // invalid the whole TLB + // invalid the whole TLB //MessageBox(0,"TLBIA","TLBIA",0); } diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp index e3364cc1b6..c90598772c 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp @@ -24,7 +24,7 @@ const float m_dequantizeTable[] = (1 << 12), (1 << 11), (1 << 10), (1 << 9), (1 << 8), (1 << 7), (1 << 6), (1 << 5), (1 << 4), (1 << 3), (1 << 2), (1 << 1), -}; +}; // quantize table const float m_quantizeTable[] = @@ -45,7 +45,7 @@ const float m_quantizeTable[] = 1.0 / (1 << 12), 1.0 / (1 << 11), 1.0 / (1 << 10), 1.0 / (1 << 9), 1.0 / (1 << 8), 1.0 / (1 << 7), 1.0 / (1 << 6), 1.0 / (1 << 5), 1.0 / (1 << 4), 1.0 / (1 << 3), 1.0 / (1 << 2), 1.0 / (1 << 1), -}; +}; template inline T CLAMP(T a, T bottom, T top) { @@ -54,12 +54,12 @@ inline T CLAMP(T a, T bottom, T top) { return a; } -void Interpreter::Helper_Quantize(const u32 _Addr, const double _fValue, +void Interpreter::Helper_Quantize(const u32 _Addr, const double _fValue, const EQuantizeType _quantizeType, const unsigned int _uScale) { - switch (_quantizeType) + switch (_quantizeType) { - case QUANTIZE_FLOAT: + case QUANTIZE_FLOAT: Memory::Write_U32( ConvertToSingleFTZ( *(u64*)&_fValue ), _Addr ); break; @@ -67,28 +67,28 @@ void Interpreter::Helper_Quantize(const u32 _Addr, const double _fValue, case QUANTIZE_U8: { float fResult = CLAMP((float)_fValue * m_quantizeTable[_uScale], 0.0f, 255.0f); - Memory::Write_U8((u8)fResult, _Addr); + Memory::Write_U8((u8)fResult, _Addr); } break; case QUANTIZE_U16: { float fResult = CLAMP((float)_fValue * m_quantizeTable[_uScale], 0.0f, 65535.0f); - Memory::Write_U16((u16)fResult, _Addr); + Memory::Write_U16((u16)fResult, _Addr); } break; case QUANTIZE_S8: { float fResult = CLAMP((float)_fValue * m_quantizeTable[_uScale], -128.0f, 127.0f); - Memory::Write_U8((u8)(s8)fResult, _Addr); + Memory::Write_U8((u8)(s8)fResult, _Addr); } break; case QUANTIZE_S16: { float fResult = CLAMP((float)_fValue * m_quantizeTable[_uScale], -32768.0f, 32767.0f); - Memory::Write_U16((u16)(s16)fResult, _Addr); + Memory::Write_U16((u16)(s16)fResult, _Addr); } break; @@ -98,7 +98,7 @@ void Interpreter::Helper_Quantize(const u32 _Addr, const double _fValue, } } -float Interpreter::Helper_Dequantize(const u32 _Addr, const EQuantizeType _quantizeType, +float Interpreter::Helper_Dequantize(const u32 _Addr, const EQuantizeType _quantizeType, const unsigned int _uScale) { // dequantize the value @@ -113,15 +113,15 @@ float Interpreter::Helper_Dequantize(const u32 _Addr, const EQuantizeType _quant break; case QUANTIZE_U8: - fResult = static_cast(Memory::Read_U8(_Addr)) * m_dequantizeTable[_uScale]; + fResult = static_cast(Memory::Read_U8(_Addr)) * m_dequantizeTable[_uScale]; break; case QUANTIZE_U16: - fResult = static_cast(Memory::Read_U16(_Addr)) * m_dequantizeTable[_uScale]; + fResult = static_cast(Memory::Read_U16(_Addr)) * m_dequantizeTable[_uScale]; break; case QUANTIZE_S8: - fResult = static_cast((s8)Memory::Read_U8(_Addr)) * m_dequantizeTable[_uScale]; + fResult = static_cast((s8)Memory::Read_U8(_Addr)) * m_dequantizeTable[_uScale]; break; // used for THP player @@ -137,7 +137,7 @@ float Interpreter::Helper_Dequantize(const u32 _Addr, const EQuantizeType _quant return fResult; } -void Interpreter::psq_l(UGeckoInstruction _inst) +void Interpreter::psq_l(UGeckoInstruction _inst) { const UGQR gqr(rSPR(SPR_GQR0 + _inst.I)); const EQuantizeType ldType = static_cast(gqr.LD_TYPE); diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp index ebf19c8cd4..991ae89b6e 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp @@ -34,15 +34,15 @@ void Interpreter::ps_mr(UGeckoInstruction _inst) void Interpreter::ps_nabs(UGeckoInstruction _inst) { - riPS0(_inst.FD) = riPS0(_inst.FB) | (1ULL << 63); - riPS1(_inst.FD) = riPS1(_inst.FB) | (1ULL << 63); + riPS0(_inst.FD) = riPS0(_inst.FB) | (1ULL << 63); + riPS1(_inst.FD) = riPS1(_inst.FB) | (1ULL << 63); if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } void Interpreter::ps_abs(UGeckoInstruction _inst) { - riPS0(_inst.FD) = riPS0(_inst.FB) &~ (1ULL << 63); - riPS1(_inst.FD) = riPS1(_inst.FB) &~ (1ULL << 63); + riPS0(_inst.FD) = riPS0(_inst.FB) &~ (1ULL << 63); + riPS1(_inst.FD) = riPS1(_inst.FB) &~ (1ULL << 63); if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } @@ -85,7 +85,7 @@ void Interpreter::ps_merge11(UGeckoInstruction _inst) // From here on, the real deal. void Interpreter::ps_div(UGeckoInstruction _inst) -{ +{ u32 ex_mask = 0; // PS0 @@ -164,7 +164,7 @@ void Interpreter::ps_div(UGeckoInstruction _inst) } } - SetFPException(ex_mask); + SetFPException(ex_mask); UpdateFPRF(rPS0(_inst.FD)); if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD)); } @@ -358,29 +358,8 @@ void Interpreter::ps_cmpu0(UGeckoInstruction _inst) double fb = rPS0(_inst.FB); int compareResult; - if (fa < fb) compareResult = 8; - else if (fa > fb) compareResult = 4; - else if (fa == fb) compareResult = 2; - else - { - compareResult = 1; - if (IsSNAN(fa) || IsSNAN(fb)) - { - SetFPException(FPSCR_VXSNAN); - } - } - FPSCR.FPRF = compareResult; - SetCRField(_inst.CRFD, compareResult); -} - -void Interpreter::ps_cmpo0(UGeckoInstruction _inst) -{ - double fa = rPS0(_inst.FA); - double fb = rPS0(_inst.FB); - int compareResult; - - if (fa < fb) compareResult = 8; - else if (fa > fb) compareResult = 4; + if (fa < fb) compareResult = 8; + else if (fa > fb) compareResult = 4; else if (fa == fb) compareResult = 2; else { @@ -388,17 +367,38 @@ void Interpreter::ps_cmpo0(UGeckoInstruction _inst) if (IsSNAN(fa) || IsSNAN(fb)) { SetFPException(FPSCR_VXSNAN); - if (!FPSCR.VE) + } + } + FPSCR.FPRF = compareResult; + SetCRField(_inst.CRFD, compareResult); +} + +void Interpreter::ps_cmpo0(UGeckoInstruction _inst) +{ + double fa = rPS0(_inst.FA); + double fb = rPS0(_inst.FB); + int compareResult; + + if (fa < fb) compareResult = 8; + else if (fa > fb) compareResult = 4; + else if (fa == fb) compareResult = 2; + else + { + compareResult = 1; + if (IsSNAN(fa) || IsSNAN(fb)) + { + SetFPException(FPSCR_VXSNAN); + if (!FPSCR.VE) SetFPException(FPSCR_VXVC); } - else + else { //if (IsQNAN(fa) || IsQNAN(fb)) // this is always true SetFPException(FPSCR_VXVC); } } FPSCR.FPRF = compareResult; - SetCRField(_inst.CRFD, compareResult); + SetCRField(_inst.CRFD, compareResult); } void Interpreter::ps_cmpu1(UGeckoInstruction _inst) @@ -407,29 +407,8 @@ void Interpreter::ps_cmpu1(UGeckoInstruction _inst) double fb = rPS1(_inst.FB); int compareResult; - if (fa < fb) compareResult = 8; - else if (fa > fb) compareResult = 4; - else if (fa == fb) compareResult = 2; - else - { - compareResult = 1; - if (IsSNAN(fa) || IsSNAN(fb)) - { - SetFPException(FPSCR_VXSNAN); - } - } - FPSCR.FPRF = compareResult; - SetCRField(_inst.CRFD, compareResult); -} - -void Interpreter::ps_cmpo1(UGeckoInstruction _inst) -{ - double fa = rPS1(_inst.FA); - double fb = rPS1(_inst.FB); - int compareResult; - - if (fa < fb) compareResult = 8; - else if (fa > fb) compareResult = 4; + if (fa < fb) compareResult = 8; + else if (fa > fb) compareResult = 4; else if (fa == fb) compareResult = 2; else { @@ -437,17 +416,38 @@ void Interpreter::ps_cmpo1(UGeckoInstruction _inst) if (IsSNAN(fa) || IsSNAN(fb)) { SetFPException(FPSCR_VXSNAN); - if (!FPSCR.VE) + } + } + FPSCR.FPRF = compareResult; + SetCRField(_inst.CRFD, compareResult); +} + +void Interpreter::ps_cmpo1(UGeckoInstruction _inst) +{ + double fa = rPS1(_inst.FA); + double fb = rPS1(_inst.FB); + int compareResult; + + if (fa < fb) compareResult = 8; + else if (fa > fb) compareResult = 4; + else if (fa == fb) compareResult = 2; + else + { + compareResult = 1; + if (IsSNAN(fa) || IsSNAN(fb)) + { + SetFPException(FPSCR_VXSNAN); + if (!FPSCR.VE) SetFPException(FPSCR_VXVC); } - else + else { //if (IsQNAN(fa) || IsQNAN(fb)) // this is always true SetFPException(FPSCR_VXVC); } } FPSCR.FPRF = compareResult; - SetCRField(_inst.CRFD, compareResult); + SetCRField(_inst.CRFD, compareResult); } // __________________________________________________________________________________________________ diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp index 5f05d9b3b3..688d166608 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp @@ -40,7 +40,7 @@ static void FPSCRtoFPUSettings(UReg_FPSCR fp) { FPURoundMode::SetRoundMode(fp.RN); - + if (fp.VE || fp.OE || fp.UE || fp.ZE || fp.XE) { //PanicAlert("FPSCR - exceptions enabled. Please report. VE=%i OE=%i UE=%i ZE=%i XE=%i", @@ -80,7 +80,7 @@ void Interpreter::mtfsb1x(UGeckoInstruction _inst) SetFPException(b); else FPSCR.Hex |= b; - FPSCRtoFPUSettings(FPSCR); + FPSCRtoFPUSettings(FPSCR); if (_inst.Rc) PanicAlert("mtfsb1x: inst_.Rc"); } @@ -124,7 +124,7 @@ void Interpreter::mtfsfx(UGeckoInstruction _inst) void Interpreter::mcrxr(UGeckoInstruction _inst) { // USES_XER - SetCRField(_inst.CRFD, PowerPC::ppcState.spr[SPR_XER] >> 28); + SetCRField(_inst.CRFD, PowerPC::ppcState.spr[SPR_XER] >> 28); PowerPC::ppcState.spr[SPR_XER] &= ~0xF0000000; // clear 0-3 } @@ -218,7 +218,7 @@ void Interpreter::mfspr(UGeckoInstruction _inst) //XER LR CTR are the only ones available in user mode, time base can be read too. //Gamecube games always run in superuser mode, but hey.... - switch (iIndex) + switch (iIndex) { case SPR_DEC: if ((rSPR(iIndex) & 0x80000000) == 0) // We are still decrementing @@ -241,7 +241,7 @@ void Interpreter::mfspr(UGeckoInstruction _inst) rSPR(iIndex) |= 1; // BNE = buffer not empty else rSPR(iIndex) &= ~1; - } + } break; } m_GPR[_inst.RD] = rSPR(iIndex); @@ -343,13 +343,13 @@ void Interpreter::mtspr(UGeckoInstruction _inst) case SPR_DMAL: // Locked cache<->Memory DMA // Total fake, we ignore that DMAs take time. - if (DMAL.DMA_T) + if (DMAL.DMA_T) { u32 dwMemAddress = DMAU.MEM_ADDR << 5; u32 dwCacheAddress = DMAL.LC_ADDR << 5; u32 iLength = ((DMAU.DMA_LEN_U << 2) | DMAL.DMA_LEN_L); // INFO_LOG(POWERPC, "DMA: mem = %x, cache = %x, len = %u, LD = %d, PC=%x", dwMemAddress, dwCacheAddress, iLength, (int)DMAL.DMA_LD, PC); - if (iLength == 0) + if (iLength == 0) iLength = 128; if (DMAL.DMA_LD) Memory::DMA_MemoryToLC(dwCacheAddress, dwMemAddress, iLength); @@ -465,7 +465,7 @@ void Interpreter::mcrfs(UGeckoInstruction _inst) FPSCR.VXCVI = 0; break; } - SetCRField(_inst.CRFD, fpflags); + SetCRField(_inst.CRFD, fpflags); } void Interpreter::mffsx(UGeckoInstruction _inst) diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp index f1403bed87..882b9d01da 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Tables.cpp @@ -13,7 +13,7 @@ struct GekkoOPTemplate GekkoOPInfo opinfo; }; -static GekkoOPTemplate primarytable[] = +static GekkoOPTemplate primarytable[] = { {4, Interpreter::RunTable4, {"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0, 0, 0, 0, 0}}, {19, Interpreter::RunTable19, {"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0, 0, 0, 0, 0}}, @@ -95,7 +95,7 @@ static GekkoOPTemplate primarytable[] = {58, Interpreter::unknown_instruction, {"unknown_instruction", OPTYPE_UNKNOWN, 0, 0, 0, 0, 0}}, }; -static GekkoOPTemplate table4[] = +static GekkoOPTemplate table4[] = { //SUBOP10 {0, Interpreter::ps_cmpu0, {"ps_cmpu0", OPTYPE_PS, FL_SET_CRn | FL_USE_FPU, 0, 0, 0, 0}}, {32, Interpreter::ps_cmpo0, {"ps_cmpo0", OPTYPE_PS, FL_SET_CRn | FL_USE_FPU, 0, 0, 0, 0}}, @@ -111,9 +111,9 @@ static GekkoOPTemplate table4[] = {624, Interpreter::ps_merge11, {"ps_merge11", OPTYPE_PS, FL_RC_BIT | FL_USE_FPU, 0, 0, 0, 0}}, {1014, Interpreter::dcbz_l, {"dcbz_l", OPTYPE_SYSTEM, 0, 0, 0, 0, 0}}, -}; +}; -static GekkoOPTemplate table4_2[] = +static GekkoOPTemplate table4_2[] = { {10, Interpreter::ps_sum0, {"ps_sum0", OPTYPE_PS, FL_USE_FPU, 0, 0, 0, 0}}, {11, Interpreter::ps_sum1, {"ps_sum1", OPTYPE_PS, FL_USE_FPU, 0, 0, 0, 0}}, @@ -135,15 +135,15 @@ static GekkoOPTemplate table4_2[] = }; -static GekkoOPTemplate table4_3[] = +static GekkoOPTemplate table4_3[] = { {6, Interpreter::psq_lx, {"psq_lx", OPTYPE_PS, FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, {7, Interpreter::psq_stx, {"psq_stx", OPTYPE_PS, FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, {38, Interpreter::psq_lux, {"psq_lux", OPTYPE_PS, FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, - {39, Interpreter::psq_stux, {"psq_stux", OPTYPE_PS, FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, + {39, Interpreter::psq_stux, {"psq_stux", OPTYPE_PS, FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, }; -static GekkoOPTemplate table19[] = +static GekkoOPTemplate table19[] = { {528, Interpreter::bcctrx, {"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK, 0, 0, 0, 0}}, {16, Interpreter::bclrx, {"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK, 0, 0, 0, 0}}, @@ -155,16 +155,16 @@ static GekkoOPTemplate table19[] = {449, Interpreter::cror, {"cror", OPTYPE_CR, FL_EVIL, 0, 0, 0, 0}}, {417, Interpreter::crorc, {"crorc", OPTYPE_CR, FL_EVIL, 0, 0, 0, 0}}, {193, Interpreter::crxor, {"crxor", OPTYPE_CR, FL_EVIL, 0, 0, 0, 0}}, - + {150, Interpreter::isync, {"isync", OPTYPE_ICACHE, FL_EVIL, 0, 0, 0, 0}}, {0, Interpreter::mcrf, {"mcrf", OPTYPE_SYSTEM, FL_EVIL, 0, 0, 0, 0}}, - + {50, Interpreter::rfi, {"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1, 0, 0, 0}}, {18, Interpreter::rfid, {"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 0, 0, 0, 0}} }; -static GekkoOPTemplate table31[] = +static GekkoOPTemplate table31[] = { {28, Interpreter::andx, {"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT, 0, 0, 0, 0}}, {60, Interpreter::andcx, {"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT, 0, 0, 0, 0}}, @@ -191,7 +191,7 @@ static GekkoOPTemplate table31[] = {470, Interpreter::dcbi, {"dcbi", OPTYPE_DCACHE, 0, 4, 0, 0, 0}}, {758, Interpreter::dcba, {"dcba", OPTYPE_DCACHE, 0, 4, 0, 0, 0}}, {1014, Interpreter::dcbz, {"dcbz", OPTYPE_DCACHE, FL_LOADSTORE, 4, 0, 0, 0}}, - + //load word {23, Interpreter::lwzx, {"lwzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B | FL_LOADSTORE, 0, 0, 0, 0}}, {55, Interpreter::lwzux, {"lwzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B | FL_LOADSTORE, 0, 0, 0, 0}}, @@ -207,7 +207,7 @@ static GekkoOPTemplate table31[] = //load byte {87, Interpreter::lbzx, {"lbzx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B | FL_LOADSTORE, 0, 0, 0, 0}}, {119, Interpreter::lbzux, {"lbzux", OPTYPE_LOAD, FL_OUT_D | FL_OUT_A | FL_IN_A | FL_IN_B | FL_LOADSTORE, 0, 0, 0, 0}}, - + //load byte reverse {534, Interpreter::lwbrx, {"lwbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B | FL_LOADSTORE, 0, 0, 0, 0}}, {790, Interpreter::lhbrx, {"lhbrx", OPTYPE_LOAD, FL_OUT_D | FL_IN_A0 | FL_IN_B | FL_LOADSTORE, 0, 0, 0, 0}}, @@ -239,7 +239,7 @@ static GekkoOPTemplate table31[] = {661, Interpreter::stswx, {"stswx", OPTYPE_STORE, FL_EVIL | FL_LOADSTORE, 0, 0, 0, 0}}, {725, Interpreter::stswi, {"stswi", OPTYPE_STORE, FL_EVIL | FL_LOADSTORE, 0, 0, 0, 0}}, - // fp load/store + // fp load/store {535, Interpreter::lfsx, {"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B | FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, {567, Interpreter::lfsux, {"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B | FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, {599, Interpreter::lfdx, {"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B | FL_USE_FPU | FL_LOADSTORE, 0, 0, 0, 0}}, @@ -277,8 +277,8 @@ static GekkoOPTemplate table31[] = {566, Interpreter::tlbsync, {"tlbsync", OPTYPE_SYSTEM, 0, 0, 0, 0, 0}}, }; -static GekkoOPTemplate table31_2[] = -{ +static GekkoOPTemplate table31_2[] = +{ {266, Interpreter::addx, {"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 0, 0, 0, 0}}, {778, Interpreter::addx, {"addox", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT, 0, 0, 0, 0}}, {10, Interpreter::addcx, {"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT, 0, 0, 0, 0}}, @@ -305,19 +305,19 @@ static GekkoOPTemplate table31_2[] = {200, Interpreter::subfzex, {"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT, 0, 0, 0, 0}}, }; -static GekkoOPTemplate table59[] = +static GekkoOPTemplate table59[] = { {18, Interpreter::fdivsx, {"fdivsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 16, 0, 0, 0}}, // TODO - {20, Interpreter::fsubsx, {"fsubsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, - {21, Interpreter::faddsx, {"faddsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, + {20, Interpreter::fsubsx, {"fsubsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, + {21, Interpreter::faddsx, {"faddsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, // {22, Interpreter::fsqrtsx, {"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, // Not implemented on gekko - {24, Interpreter::fresx, {"fresx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, - {25, Interpreter::fmulsx, {"fmulsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, - {28, Interpreter::fmsubsx, {"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, - {29, Interpreter::fmaddsx, {"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, - {30, Interpreter::fnmsubsx, {"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, - {31, Interpreter::fnmaddsx, {"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, -}; + {24, Interpreter::fresx, {"fresx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, + {25, Interpreter::fmulsx, {"fmulsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, + {28, Interpreter::fmsubsx, {"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, + {29, Interpreter::fmaddsx, {"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, + {30, Interpreter::fnmsubsx, {"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, + {31, Interpreter::fnmaddsx, {"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, +}; static GekkoOPTemplate table63[] = { @@ -339,7 +339,7 @@ static GekkoOPTemplate table63[] = {711, Interpreter::mtfsfx, {"mtfsfx", OPTYPE_SYSTEMFP, FL_USE_FPU, 2, 0, 0, 0}}, }; -static GekkoOPTemplate table63_2[] = +static GekkoOPTemplate table63_2[] = { {18, Interpreter::fdivx, {"fdivx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 30, 0, 0, 0}}, {20, Interpreter::fsubx, {"fsubx", OPTYPE_FPU, FL_RC_BIT_F | FL_USE_FPU, 0, 0, 0, 0}}, @@ -364,7 +364,7 @@ void InitTables() return; //clear - for (int i = 0; i < 32; i++) + for (int i = 0; i < 32; i++) { Interpreter::m_opTable59[i] = Interpreter::unknown_instruction; m_infoTable59[i] = 0; @@ -376,118 +376,118 @@ void InitTables() Interpreter::m_opTable19[i] = Interpreter::unknown_instruction; Interpreter::m_opTable31[i] = Interpreter::unknown_instruction; Interpreter::m_opTable63[i] = Interpreter::unknown_instruction; - m_infoTable4[i] = 0; - m_infoTable19[i] = 0; - m_infoTable31[i] = 0; - m_infoTable63[i] = 0; + m_infoTable4[i] = 0; + m_infoTable19[i] = 0; + m_infoTable31[i] = 0; + m_infoTable63[i] = 0; } - for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : primarytable) { - Interpreter::m_opTable[primarytable[i].opcode] = primarytable[i].Inst; - m_infoTable[primarytable[i].opcode] = &primarytable[i].opinfo; + Interpreter::m_opTable[tpl.opcode] = tpl.Inst; + m_infoTable[tpl.opcode] = &tpl.opinfo; } for (int i = 0; i < 32; i++) { int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table4_2) { - int op = fill+table4_2[j].opcode; - Interpreter::m_opTable4[op] = table4_2[j].Inst; - m_infoTable4[op] = &table4_2[j].opinfo; + int op = fill+tpl.opcode; + Interpreter::m_opTable4[op] = tpl.Inst; + m_infoTable4[op] = &tpl.opinfo; } } for (int i = 0; i < 16; i++) { int fill = i << 6; - for (int j = 0; j < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table4_3) { - int op = fill+table4_3[j].opcode; - Interpreter::m_opTable4[op] = table4_3[j].Inst; - m_infoTable4[op] = &table4_3[j].opinfo; + int op = fill+tpl.opcode; + Interpreter::m_opTable4[op] = tpl.Inst; + m_infoTable4[op] = &tpl.opinfo; } } - for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table4) { - int op = table4[i].opcode; - Interpreter::m_opTable4[op] = table4[i].Inst; - m_infoTable4[op] = &table4[i].opinfo; + int op = tpl.opcode; + Interpreter::m_opTable4[op] = tpl.Inst; + m_infoTable4[op] = &tpl.opinfo; } - for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table31) { - int op = table31[i].opcode; - Interpreter::m_opTable31[op] = table31[i].Inst; - m_infoTable31[op] = &table31[i].opinfo; + int op = tpl.opcode; + Interpreter::m_opTable31[op] = tpl.Inst; + m_infoTable31[op] = &tpl.opinfo; } for (int i = 0; i < 1; i++) { int fill = i << 9; - for (int j = 0; j < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table31_2) { - int op = fill + table31_2[j].opcode; - Interpreter::m_opTable31[op] = table31_2[j].Inst; - m_infoTable31[op] = &table31_2[j].opinfo; + int op = fill + tpl.opcode; + Interpreter::m_opTable31[op] = tpl.Inst; + m_infoTable31[op] = &tpl.opinfo; } } - for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table19) { - int op = table19[i].opcode; - Interpreter::m_opTable19[op] = table19[i].Inst; - m_infoTable19[op] = &table19[i].opinfo; + int op = tpl.opcode; + Interpreter::m_opTable19[op] = tpl.Inst; + m_infoTable19[op] = &tpl.opinfo; } - for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table59) { - int op = table59[i].opcode; - Interpreter::m_opTable59[op] = table59[i].Inst; - m_infoTable59[op] = &table59[i].opinfo; + int op = tpl.opcode; + Interpreter::m_opTable59[op] = tpl.Inst; + m_infoTable59[op] = &tpl.opinfo; } - for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table63) { - int op = table63[i].opcode; - Interpreter::m_opTable63[op] = table63[i].Inst; - m_infoTable63[op] = &table63[i].opinfo; + int op = tpl.opcode; + Interpreter::m_opTable63[op] = tpl.Inst; + m_infoTable63[op] = &tpl.opinfo; } for (int i = 0; i < 32; i++) { int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table63_2) { - int op = fill + table63_2[j].opcode; - Interpreter::m_opTable63[op] = table63_2[j].Inst; - m_infoTable63[op] = &table63_2[j].opinfo; + int op = fill + tpl.opcode; + Interpreter::m_opTable63[op] = tpl.Inst; + m_infoTable63[op] = &tpl.opinfo; } } m_numInstructions = 0; - for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &primarytable[i].opinfo; - for (int i = 0; i < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table4_2[i].opinfo; - for (int i = 0; i < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table4_3[i].opinfo; - for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table4[i].opinfo; - for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table31[i].opinfo; - for (int i = 0; i < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table31_2[i].opinfo; - for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table19[i].opinfo; - for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table59[i].opinfo; - for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table63[i].opinfo; - for (int i = 0; i < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); i++) - m_allInstructions[m_numInstructions++] = &table63_2[i].opinfo; + for (auto& tpl : primarytable) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table4_2) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table4_3) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table4) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table31) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table31_2) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table19) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table59) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table63) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; + for (auto& tpl : table63_2) + m_allInstructions[m_numInstructions++] = &tpl.opinfo; if (m_numInstructions >= 512) { PanicAlert("m_allInstructions underdimensioned"); } diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp index d7f4125046..394c7bc86a 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit.cpp @@ -60,7 +60,7 @@ using namespace PowerPC; // will be as small to be negligible, so I haven't dirtied up the code with that. AMD recommends it in their // optimization manuals, though. // -// We support block linking. Reserve space at the exits of every block for a full 5-byte jmp. Save 16-bit offsets +// We support block linking. Reserve space at the exits of every block for a full 5-byte jmp. Save 16-bit offsets // from the starts of each block, marking the exits so that they can be nicely patched at any time. // // Blocks do NOT use call/ret, they only jmp to each other and to the dispatcher when necessary. @@ -94,7 +94,7 @@ using namespace PowerPC; CR2-CR4 are non-volatile, rest of CR is volatile -> dropped on blr. R5-R12 are volatile -> dropped on blr. * classic inlining across calls. - + Low hanging fruit: stfd -- guaranteed in memory cmpl @@ -183,7 +183,7 @@ void Jit64::Init() asm_routines.Init(); } -void Jit64::ClearCache() +void Jit64::ClearCache() { blocks.Clear(); trampolines.ClearCodeSpace(); @@ -286,7 +286,7 @@ void Jit64::WriteExit(u32 destination, int exit_num) JitBlock *b = js.curBlock; b->exitAddress[exit_num] = destination; b->exitPtrs[exit_num] = GetWritableCodePtr(); - + // Link opportunity! if (jo.enableBlocklink) { @@ -303,21 +303,21 @@ void Jit64::WriteExit(u32 destination, int exit_num) JMP(asm_routines.dispatcher, true); } -void Jit64::WriteExitDestInEAX() +void Jit64::WriteExitDestInEAX() { MOV(32, M(&PC), R(EAX)); Cleanup(); - SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); + SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.dispatcher, true); } -void Jit64::WriteRfiExitDestInEAX() +void Jit64::WriteRfiExitDestInEAX() { MOV(32, M(&PC), R(EAX)); MOV(32, M(&NPC), R(EAX)); Cleanup(); ABI_CallFunction(reinterpret_cast(&PowerPC::CheckExceptions)); - SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); + SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.dispatcher, true); } @@ -337,7 +337,7 @@ void Jit64::WriteExternalExceptionExit() MOV(32, R(EAX), M(&PC)); MOV(32, M(&NPC), R(EAX)); ABI_CallFunction(reinterpret_cast(&PowerPC::CheckExternalExceptions)); - SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); + SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.dispatcher, true); } @@ -374,11 +374,11 @@ void Jit64::Trace() sprintf(reg, "f%02d: %016x ", i, riPS0(i)); strncat(fregs, reg, 750); } -#endif +#endif - DEBUG_LOG(DYNA_REC, "JIT64 PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s", - PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], - PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, + DEBUG_LOG(DYNA_REC, "JIT64 PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s", + PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], + PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, PowerPC::ppcState.msr, PowerPC::ppcState.spr[8], regs, fregs); } @@ -666,7 +666,7 @@ const u8* Jit64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc js.skipnext = false; i++; // Skip next instruction } - + if (js.cancel) break; } diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h index a18f3692b8..71a556cb5f 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit.h @@ -47,16 +47,6 @@ Core::g_CoreStartupParameter.setting) \ {Default(inst); return;} -#define MEMCHECK_START \ - FixupBranch memException; \ - if (js.memcheck) \ - { TEST(32, M((void *)&PowerPC::ppcState.Exceptions), Imm32(EXCEPTION_DSI)); \ - memException = J_CC(CC_NZ); } - -#define MEMCHECK_END \ - if (js.memcheck) \ - SetJumpTarget(memException); - class Jit64 : public Jitx86Base { private: @@ -72,30 +62,30 @@ public: Jit64() : code_buffer(32000) {} ~Jit64() {} - void Init(); - void Shutdown(); + void Init() override; + void Shutdown() override; // Jit! - void Jit(u32 em_address); + void Jit(u32 em_address) override; const u8* DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buffer, JitBlock *b); u32 RegistersInUse(); - JitBlockCache *GetBlockCache() { return &blocks; } + JitBlockCache *GetBlockCache() override { return &blocks; } void Trace(); - void ClearCache(); + void ClearCache() override; const u8 *GetDispatcher() { return asm_routines.dispatcher; } - const CommonAsmRoutines *GetAsmRoutines() { + const CommonAsmRoutines *GetAsmRoutines() override { return &asm_routines; } - const char *GetName() { + const char *GetName() override { #ifdef _M_X64 return "JIT64"; #else @@ -104,8 +94,8 @@ public: } // Run! - void Run(); - void SingleStep(); + void Run() override; + void SingleStep() override; // Utilities for use by opcodes @@ -129,7 +119,7 @@ public: void tri_op(int d, int a, int b, bool reversible, void (XEmitter::*op)(Gen::X64Reg, Gen::OpArg)); typedef u32 (*Operation)(u32 a, u32 b); void regimmop(int d, int a, bool binary, u32 value, Operation doop, void (XEmitter::*op)(int, const Gen::OpArg&, const Gen::OpArg&), bool Rc = false, bool carry = false); - void fp_tri_op(int d, int a, int b, bool reversible, bool dupe, void (XEmitter::*op)(Gen::X64Reg, Gen::OpArg)); + void fp_tri_op(int d, int a, int b, bool reversible, bool dupe, void (XEmitter::*op_2)(Gen::X64Reg, Gen::OpArg), void (XEmitter::*op_3)(Gen::X64Reg, Gen::X64Reg, Gen::OpArg)); // OPCODES void unknown_instruction(UGeckoInstruction _inst); @@ -188,7 +178,7 @@ public: void ps_arith(UGeckoInstruction inst); //aggregate void ps_mergeXX(UGeckoInstruction inst); void ps_maddXX(UGeckoInstruction inst); - void ps_rsqrte(UGeckoInstruction inst); + void ps_recip(UGeckoInstruction inst); void ps_sum(UGeckoInstruction inst); void ps_muls(UGeckoInstruction inst); @@ -233,7 +223,7 @@ public: void twx(UGeckoInstruction inst); void lXXx(UGeckoInstruction inst); - + void stXx(UGeckoInstruction inst); void lmw(UGeckoInstruction inst); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp index 268e2562d6..0ff2bf5d7f 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit64_Tables.cpp @@ -27,7 +27,7 @@ struct GekkoOPTemplate //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out }; -static GekkoOPTemplate primarytable[] = +static GekkoOPTemplate primarytable[] = { {4, &Jit64::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, {19, &Jit64::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, @@ -108,7 +108,7 @@ static GekkoOPTemplate primarytable[] = {58, &Jit64::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, }; -static GekkoOPTemplate table4[] = +static GekkoOPTemplate table4[] = { //SUBOP10 {0, &Jit64::Default}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, {32, &Jit64::Default}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, @@ -124,9 +124,9 @@ static GekkoOPTemplate table4[] = {624, &Jit64::ps_mergeXX}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, {1014, &Jit64::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, -}; +}; -static GekkoOPTemplate table4_2[] = +static GekkoOPTemplate table4_2[] = { {10, &Jit64::ps_sum}, //"ps_sum0", OPTYPE_PS, 0}}, {11, &Jit64::ps_sum}, //"ps_sum1", OPTYPE_PS, 0}}, @@ -138,9 +138,9 @@ static GekkoOPTemplate table4_2[] = {20, &Jit64::ps_arith}, //"ps_sub", OPTYPE_PS, 0}}, {21, &Jit64::ps_arith}, //"ps_add", OPTYPE_PS, 0}}, {23, &Jit64::ps_sel}, //"ps_sel", OPTYPE_PS, 0}}, - {24, &Jit64::Default}, //"ps_res", OPTYPE_PS, 0}}, + {24, &Jit64::ps_recip}, //"ps_res", OPTYPE_PS, 0}}, {25, &Jit64::ps_arith}, //"ps_mul", OPTYPE_PS, 0}}, - {26, &Jit64::ps_rsqrte}, //"ps_rsqrte", OPTYPE_PS, 0, 1}}, + {26, &Jit64::ps_recip}, //"ps_rsqrte", OPTYPE_PS, 0, 1}}, {28, &Jit64::ps_maddXX}, //"ps_msub", OPTYPE_PS, 0}}, {29, &Jit64::ps_maddXX}, //"ps_madd", OPTYPE_PS, 0}}, {30, &Jit64::ps_maddXX}, //"ps_nmsub", OPTYPE_PS, 0}}, @@ -148,15 +148,15 @@ static GekkoOPTemplate table4_2[] = }; -static GekkoOPTemplate table4_3[] = +static GekkoOPTemplate table4_3[] = { {6, &Jit64::Default}, //"psq_lx", OPTYPE_PS, 0}}, {7, &Jit64::Default}, //"psq_stx", OPTYPE_PS, 0}}, {38, &Jit64::Default}, //"psq_lux", OPTYPE_PS, 0}}, - {39, &Jit64::Default}, //"psq_stux", OPTYPE_PS, 0}}, + {39, &Jit64::Default}, //"psq_stux", OPTYPE_PS, 0}}, }; -static GekkoOPTemplate table19[] = +static GekkoOPTemplate table19[] = { {528, &Jit64::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, {16, &Jit64::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, @@ -168,16 +168,16 @@ static GekkoOPTemplate table19[] = {449, &Jit64::crXXX}, //"cror", OPTYPE_CR, FL_EVIL}}, {417, &Jit64::crXXX}, //"crorc", OPTYPE_CR, FL_EVIL}}, {193, &Jit64::crXXX}, //"crxor", OPTYPE_CR, FL_EVIL}}, - + {150, &Jit64::DoNothing}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, {0, &Jit64::mcrf}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, - + {50, &Jit64::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, {18, &Jit64::Default}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} }; -static GekkoOPTemplate table31[] = +static GekkoOPTemplate table31[] = { {28, &Jit64::boolX}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, {60, &Jit64::boolX}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, @@ -252,7 +252,7 @@ static GekkoOPTemplate table31[] = {661, &Jit64::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, {725, &Jit64::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, - // fp load/store + // fp load/store {535, &Jit64::lfsx}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, {567, &Jit64::Default}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, {599, &Jit64::Default}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, @@ -290,8 +290,8 @@ static GekkoOPTemplate table31[] = {566, &Jit64::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, }; -static GekkoOPTemplate table31_2[] = -{ +static GekkoOPTemplate table31_2[] = +{ {266, &Jit64::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {778, &Jit64::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {10, &Jit64::addcx}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, @@ -318,21 +318,21 @@ static GekkoOPTemplate table31_2[] = {200, &Jit64::subfzex}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, }; -static GekkoOPTemplate table59[] = +static GekkoOPTemplate table59[] = { - {18, &Jit64::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, - {20, &Jit64::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &Jit64::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {18, &Jit64::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, + {20, &Jit64::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &Jit64::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, // {22, &Jit64::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, // Not implemented on gekko - {24, &Jit64::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &Jit64::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &Jit64::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &Jit64::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &Jit64::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &Jit64::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; + {24, &Jit64::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &Jit64::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &Jit64::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &Jit64::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &Jit64::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &Jit64::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; -static GekkoOPTemplate table63[] = +static GekkoOPTemplate table63[] = { {264, &Jit64::fsign}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, {32, &Jit64::fcmpx}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -352,7 +352,7 @@ static GekkoOPTemplate table63[] = {711, &Jit64::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, }; -static GekkoOPTemplate table63_2[] = +static GekkoOPTemplate table63_2[] = { {18, &Jit64::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, {20, &Jit64::Default}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -360,7 +360,7 @@ static GekkoOPTemplate table63_2[] = {22, &Jit64::Default}, //"fsqrtx", OPTYPE_FPU, FL_RC_BIT_F}}, {23, &Jit64::Default}, //"fselx", OPTYPE_FPU, FL_RC_BIT_F}}, {25, &Jit64::fp_arith_s}, //"fmulx", OPTYPE_FPU, FL_RC_BIT_F}}, - {26, &Jit64::fp_arith_s}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}}, + {26, &Jit64::frsqrtex}, //"frsqrtex", OPTYPE_FPU, FL_RC_BIT_F}}, {28, &Jit64::fmaddXX}, //"fmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, {29, &Jit64::fmaddXX}, //"fmaddx", OPTYPE_FPU, FL_RC_BIT_F}}, {30, &Jit64::fmaddXX}, //"fnmsubx", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -394,9 +394,9 @@ void InitTables() return; //clear - for (int i = 0; i < 32; i++) + for (auto& tpl : dynaOpTable59) { - dynaOpTable59[i] = &Jit64::unknown_instruction; + tpl = &Jit64::unknown_instruction; } for (int i = 0; i < 1024; i++) @@ -404,81 +404,81 @@ void InitTables() dynaOpTable4 [i] = &Jit64::unknown_instruction; dynaOpTable19[i] = &Jit64::unknown_instruction; dynaOpTable31[i] = &Jit64::unknown_instruction; - dynaOpTable63[i] = &Jit64::unknown_instruction; + dynaOpTable63[i] = &Jit64::unknown_instruction; } - for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : primarytable) { - dynaOpTable[primarytable[i].opcode] = primarytable[i].Inst; + dynaOpTable[tpl.opcode] = tpl.Inst; } for (int i = 0; i < 32; i++) { int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table4_2) { - int op = fill+table4_2[j].opcode; - dynaOpTable4[op] = table4_2[j].Inst; + int op = fill+tpl.opcode; + dynaOpTable4[op] = tpl.Inst; } } for (int i = 0; i < 16; i++) { int fill = i << 6; - for (int j = 0; j < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table4_3) { - int op = fill+table4_3[j].opcode; - dynaOpTable4[op] = table4_3[j].Inst; + int op = fill+tpl.opcode; + dynaOpTable4[op] = tpl.Inst; } } - for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table4) { - int op = table4[i].opcode; - dynaOpTable4[op] = table4[i].Inst; + int op = tpl.opcode; + dynaOpTable4[op] = tpl.Inst; } - for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table31) { - int op = table31[i].opcode; - dynaOpTable31[op] = table31[i].Inst; + int op = tpl.opcode; + dynaOpTable31[op] = tpl.Inst; } for (int i = 0; i < 1; i++) { int fill = i << 9; - for (int j = 0; j < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table31_2) { - int op = fill + table31_2[j].opcode; - dynaOpTable31[op] = table31_2[j].Inst; + int op = fill + tpl.opcode; + dynaOpTable31[op] = tpl.Inst; } } - for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table19) { - int op = table19[i].opcode; - dynaOpTable19[op] = table19[i].Inst; + int op = tpl.opcode; + dynaOpTable19[op] = tpl.Inst; } - for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table59) { - int op = table59[i].opcode; - dynaOpTable59[op] = table59[i].Inst; + int op = tpl.opcode; + dynaOpTable59[op] = tpl.Inst; } - for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table63) { - int op = table63[i].opcode; - dynaOpTable63[op] = table63[i].Inst; + int op = tpl.opcode; + dynaOpTable63[op] = tpl.Inst; } for (int i = 0; i < 32; i++) { int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table63_2) { - int op = fill + table63_2[j].opcode; - dynaOpTable63[op] = table63_2[j].Inst; + int op = fill + tpl.opcode; + dynaOpTable63[op] = tpl.Inst; } } diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp b/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp index 607b1b5730..56975ef6ea 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp @@ -13,9 +13,9 @@ using namespace Gen; //TODO - make an option //#if _DEBUG -static bool enableDebug = false; +static bool enableDebug = false; //#else -// bool enableDebug = false; +// bool enableDebug = false; //#endif //static bool enableStatistics = false; //unused? @@ -26,7 +26,7 @@ static bool enableDebug = false; //GLOBAL STATIC ALLOCATIONS x64 //EAX - ubiquitous scratch register - EVERYBODY scratches this //RBX - Base pointer of memory -//R15 - Pointer to array of block pointers +//R15 - Pointer to array of block pointers Jit64AsmRoutineManager asm_routines; @@ -48,7 +48,7 @@ void Jit64AsmRoutineManager::Generate() outerLoop = GetCodePtr(); ABI_CallFunction(reinterpret_cast(&CoreTiming::Advance)); FixupBranch skipToRealDispatch = J(); //skip the sync and compare first time - + dispatcher = GetCodePtr(); // The result of slice decrementation should be in flags if somebody jumped here // IMPORTANT - We jump on negative, not carry!!! @@ -168,7 +168,7 @@ void Jit64AsmRoutineManager::Generate() MOV(32, M(&NPC), R(EAX)); ABI_CallFunction(reinterpret_cast(&PowerPC::CheckExternalExceptions)); SetJumpTarget(noExtException); - + TEST(32, M((void*)PowerPC::GetStatePtr()), Imm32(0xFFFFFFFF)); J_CC(CC_Z, outerLoop, true); @@ -194,14 +194,14 @@ void Jit64AsmRoutineManager::GenerateCommon() GenFifoWrite(32); fifoDirectWriteFloat = AlignCode4(); GenFifoFloatWrite(); - fifoDirectWriteXmm64 = AlignCode4(); + fifoDirectWriteXmm64 = AlignCode4(); GenFifoXmm64Write(); GenQuantizedLoads(); GenQuantizedStores(); GenQuantizedSingleStores(); - //CMPSD(R(XMM0), M(&zero), + //CMPSD(R(XMM0), M(&zero), // TODO // Fast write routines - special case the most common hardware write diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.h b/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.h index 8835a07bcc..7dc55b475d 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.h @@ -17,7 +17,7 @@ // 3) Can optimize code at runtime for the specific CPU model. // There aren't really any disadvantages other than having to maintain a x86 emitter, // which we have to do anyway :) -// +// // To add a new asm routine, just add another const here, and add the code to Generate. // Also, possibly increase the size of the code buffer. diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp index 083066c6f1..b2317c9394 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.cpp @@ -34,7 +34,7 @@ void RegCache::Start(PPCAnalyst::BlockRegStats &stats) regs[i].location = GetDefaultLocation(i); regs[i].away = false; } - + // todo: sort to find the most popular regs /* int maxPreload = 2; @@ -75,14 +75,14 @@ void RegCache::LockX(int x1, int x2, int x3, int x4) void RegCache::UnlockAll() { - for (int i = 0; i < 32; i++) - locks[i] = false; + for (auto& lock : locks) + lock = false; } void RegCache::UnlockAllX() { - for (int i = 0; i < NUMXREGS; i++) - xlocks[i] = false; + for (auto& xlock : xlocks) + xlock = false; } X64Reg RegCache::GetFreeXReg() @@ -103,7 +103,7 @@ X64Reg RegCache::GetFreeXReg() for (int i = 0; i < aCount; i++) { X64Reg xr = (X64Reg)aOrder[i]; - if (xlocks[xr]) + if (xlocks[xr]) continue; int preg = xregs[xr].ppcReg; if (!locks[preg]) @@ -197,7 +197,7 @@ void FPURegCache::Start(PPCAnalyst::BlockRegStats &stats) const int *GPRRegCache::GetAllocationOrder(int &count) { - static const int allocationOrder[] = + static const int allocationOrder[] = { // R12, when used as base register, for example in a LEA, can generate bad code! Need to look into this. #ifdef _M_X64 @@ -216,7 +216,7 @@ const int *GPRRegCache::GetAllocationOrder(int &count) const int *FPURegCache::GetAllocationOrder(int &count) { - static const int allocationOrder[] = + static const int allocationOrder[] = { #ifdef _M_X64 XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, XMM2, XMM3, XMM4, XMM5 @@ -351,11 +351,12 @@ void FPURegCache::StoreFromRegister(int i) { X64Reg xr = regs[i].location.GetSimpleReg(); _assert_msg_(DYNA_REC, xr < NUMXREGS, "WTF - store - invalid reg"); + OpArg newLoc = GetDefaultLocation(i); + if (xregs[xr].dirty) + emit->MOVAPD(newLoc, xr); xregs[xr].free = true; xregs[xr].dirty = false; xregs[xr].ppcReg = -1; - OpArg newLoc = GetDefaultLocation(i); - emit->MOVAPD(newLoc, xr); regs[i].location = newLoc; regs[i].away = false; } diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h index 550036dba7..cacd1e0e4e 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitRegCache.h @@ -16,7 +16,7 @@ enum FlushMode enum GrabMode { M_READ = 1, - M_WRITE = 2, + M_WRITE = 2, M_READWRITE = 3, }; @@ -58,7 +58,7 @@ protected: X64CachedReg saved_xregs[NUMXREGS]; virtual const int *GetAllocationOrder(int &count) = 0; - + XEmitter *emit; public: @@ -70,7 +70,7 @@ public: void DiscardRegContentsIfCached(int preg); void SetEmitter(XEmitter *emitter) {emit = emitter;} - void FlushR(X64Reg reg); + void FlushR(X64Reg reg); void FlushR(X64Reg reg, X64Reg reg2) {FlushR(reg); FlushR(reg2);} void FlushLockX(X64Reg reg) { FlushR(reg); @@ -93,9 +93,9 @@ public: const OpArg &R(int preg) const {return regs[preg].location;} X64Reg RX(int preg) const { - if (regs[preg].away && regs[preg].location.IsSimpleReg()) - return regs[preg].location.GetSimpleReg(); - PanicAlert("Not so simple - %i", preg); + if (regs[preg].away && regs[preg].location.IsSimpleReg()) + return regs[preg].location.GetSimpleReg(); + PanicAlert("Not so simple - %i", preg); return (X64Reg)-1; } virtual OpArg GetDefaultLocation(int reg) const = 0; @@ -121,11 +121,11 @@ public: class GPRRegCache : public RegCache { public: - void Start(PPCAnalyst::BlockRegStats &stats); - void BindToRegister(int preg, bool doLoad = true, bool makeDirty = true); - void StoreFromRegister(int preg); - OpArg GetDefaultLocation(int reg) const; - const int *GetAllocationOrder(int &count); + void Start(PPCAnalyst::BlockRegStats &stats) override; + void BindToRegister(int preg, bool doLoad = true, bool makeDirty = true) override; + void StoreFromRegister(int preg) override; + OpArg GetDefaultLocation(int reg) const override; + const int *GetAllocationOrder(int &count) override; void SetImmediate32(int preg, u32 immValue); }; @@ -133,11 +133,11 @@ public: class FPURegCache : public RegCache { public: - void Start(PPCAnalyst::BlockRegStats &stats); - void BindToRegister(int preg, bool doLoad = true, bool makeDirty = true); - void StoreFromRegister(int preg); - const int *GetAllocationOrder(int &count); - OpArg GetDefaultLocation(int reg) const; + void Start(PPCAnalyst::BlockRegStats &stats) override; + void BindToRegister(int preg, bool doLoad = true, bool makeDirty = true) override; + void StoreFromRegister(int preg) override; + const int *GetAllocationOrder(int &count) override; + OpArg GetDefaultLocation(int reg) const override; }; #endif // _JIT64REGCACHE_H diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp index fdf60906d6..b0f3f1cd18 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp @@ -12,12 +12,12 @@ // No need for a disable-mechanism. // If defined, clears CR0 at blr and bl-s. If the assumption that -// flags never carry over between functions holds, then the task for +// flags never carry over between functions holds, then the task for // an optimizer becomes much easier. // #define ACID_TEST -// Zelda and many more games seem to pass the Acid Test. +// Zelda and many more games seem to pass the Acid Test. using namespace Gen; @@ -122,12 +122,12 @@ void Jit64::bcx(UGeckoInstruction inst) if ((inst.BO & BO_DONT_CHECK_CONDITION) == 0) // Test a CR bit { TEST(8, M(&PowerPC::ppcState.cr_fast[inst.BI >> 2]), Imm8(8 >> (inst.BI & 3))); - if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch + if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch pConditionDontBranch = J_CC(CC_Z); else pConditionDontBranch = J_CC(CC_NZ); } - + if (inst.LK) MOV(32, M(&LR), Imm32(js.compilerPC + 4)); @@ -180,7 +180,7 @@ void Jit64::bcctrx(UGeckoInstruction inst) if (inst.BO_2 & BO_BRANCH_IF_TRUE) branch = CC_Z; else - branch = CC_NZ; + branch = CC_NZ; FixupBranch b = J_CC(branch, false); MOV(32, R(EAX), M(&CTR)); AND(32, R(EAX), Imm32(0xFFFFFFFC)); @@ -223,7 +223,7 @@ void Jit64::bclrx(UGeckoInstruction inst) if ((inst.BO & BO_DONT_CHECK_CONDITION) == 0) // Test a CR bit { TEST(8, M(&PowerPC::ppcState.cr_fast[inst.BI >> 2]), Imm8(8 >> (inst.BI & 3))); - if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch + if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch pConditionDontBranch = J_CC(CC_Z); else pConditionDontBranch = J_CC(CC_NZ); @@ -235,7 +235,7 @@ void Jit64::bclrx(UGeckoInstruction inst) AND(32, M(&PowerPC::ppcState.cr), Imm32(~(0xFF000000))); #endif - MOV(32, R(EAX), M(&LR)); + MOV(32, R(EAX), M(&LR)); AND(32, R(EAX), Imm32(0xFFFFFFFC)); if (inst.LK) MOV(32, M(&LR), Imm32(js.compilerPC + 4)); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp index 707b24f7f1..c4699ecc62 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_FloatingPoint.cpp @@ -8,41 +8,67 @@ #include "JitRegCache.h" #include "CPUDetect.h" -const u64 GC_ALIGNED16(psSignBits2[2]) = {0x8000000000000000ULL, 0x8000000000000000ULL}; -const u64 GC_ALIGNED16(psAbsMask2[2]) = {0x7FFFFFFFFFFFFFFFULL, 0x7FFFFFFFFFFFFFFFULL}; -const double GC_ALIGNED16(psOneOne2[2]) = {1.0, 1.0}; +static const u64 GC_ALIGNED16(psSignBits2[2]) = {0x8000000000000000ULL, 0x8000000000000000ULL}; +static const u64 GC_ALIGNED16(psAbsMask2[2]) = {0x7FFFFFFFFFFFFFFFULL, 0x7FFFFFFFFFFFFFFFULL}; +static const double GC_ALIGNED16(psOneOne2[2]) = {1.0, 1.0}; +static const double one_const = 1.0f; -void Jit64::fp_tri_op(int d, int a, int b, bool reversible, bool dupe, void (XEmitter::*op)(Gen::X64Reg, Gen::OpArg)) +void Jit64::fp_tri_op(int d, int a, int b, bool reversible, bool single, + void (XEmitter::*op_2)(Gen::X64Reg, Gen::OpArg), + void (XEmitter::*op_3)(Gen::X64Reg, Gen::X64Reg, Gen::OpArg)) { + if (!cpu_info.bAVX) + { + op_3 = nullptr; + } + fpr.Lock(d, a, b); if (d == a) { - fpr.BindToRegister(d, true); - (this->*op)(fpr.RX(d), fpr.R(b)); + fpr.BindToRegister(d); + (this->*op_2)(fpr.RX(d), fpr.R(b)); } else if (d == b) { if (reversible) { - fpr.BindToRegister(d, true); - (this->*op)(fpr.RX(d), fpr.R(a)); + fpr.BindToRegister(d); + (this->*op_2)(fpr.RX(d), fpr.R(a)); } else { - MOVSD(XMM0, fpr.R(b)); - fpr.BindToRegister(d, !dupe); - MOVSD(fpr.RX(d), fpr.R(a)); - (this->*op)(fpr.RX(d), Gen::R(XMM0)); + if (op_3) + { + fpr.BindToRegister(d); + fpr.BindToRegister(a, true, false); + (this->*op_3)(fpr.RX(d), fpr.RX(a), fpr.R(b)); + } + else + { + MOVSD(XMM0, fpr.R(b)); + fpr.BindToRegister(d, false); + MOVSD(fpr.RX(d), fpr.R(a)); + (this->*op_2)(fpr.RX(d), Gen::R(XMM0)); + } } } else { - // Sources different from d, can use rather quick solution - fpr.BindToRegister(d, !dupe); - MOVSD(fpr.RX(d), fpr.R(a)); - (this->*op)(fpr.RX(d), fpr.R(b)); + if (op_3) + { + fpr.BindToRegister(d, false); + fpr.BindToRegister(a); + (this->*op_3)(fpr.RX(d), fpr.RX(a), fpr.R(b)); + } + else + { + fpr.BindToRegister(d, false); + MOVSD(fpr.RX(d), fpr.R(a)); + (this->*op_2)(fpr.RX(d), fpr.R(b)); + } } - if (dupe) + + if (single) { ForceSinglePrecisionS(fpr.RX(d)); if (cpu_info.bSSE3) @@ -59,9 +85,6 @@ void Jit64::fp_tri_op(int d, int a, int b, bool reversible, bool dupe, void (XEm fpr.UnlockAll(); } - -static const double one_const = 1.0f; - void Jit64::fp_arith_s(UGeckoInstruction inst) { INSTRUCTION_START @@ -70,42 +93,45 @@ void Jit64::fp_arith_s(UGeckoInstruction inst) Default(inst); return; } - if (inst.SUBOP5 == 26) { - // frsqrtex - int d = inst.FD; - int b = inst.FB; - fpr.Lock(b, d); - fpr.BindToRegister(d, true, true); - MOVSD(XMM0, M((void *)&one_const)); - SQRTSD(XMM1, fpr.R(b)); - DIVSD(XMM0, R(XMM1)); - MOVSD(fpr.R(d), XMM0); - fpr.UnlockAll(); - return; - } - - if (inst.SUBOP5 != 18 && inst.SUBOP5 != 20 && inst.SUBOP5 != 21 && - inst.SUBOP5 != 25) { - Default(inst); return; - } - // Only the interpreter has "proper" support for (some) FP flags if (inst.SUBOP5 == 25 && Core::g_CoreStartupParameter.bEnableFPRF) { Default(inst); return; } - bool dupe = inst.OPCD == 59; + bool single = inst.OPCD == 59; switch (inst.SUBOP5) { - case 18: fp_tri_op(inst.FD, inst.FA, inst.FB, false, dupe, &XEmitter::DIVSD); break; //div - case 20: fp_tri_op(inst.FD, inst.FA, inst.FB, false, dupe, &XEmitter::SUBSD); break; //sub - case 21: fp_tri_op(inst.FD, inst.FA, inst.FB, true, dupe, &XEmitter::ADDSD); break; //add - case 25: fp_tri_op(inst.FD, inst.FA, inst.FC, true, dupe, &XEmitter::MULSD); break; //mul + case 18: fp_tri_op(inst.FD, inst.FA, inst.FB, false, single, &XEmitter::DIVSD, &XEmitter::VDIVSD); break; //div + case 20: fp_tri_op(inst.FD, inst.FA, inst.FB, false, single, &XEmitter::SUBSD, &XEmitter::VSUBSD); break; //sub + case 21: fp_tri_op(inst.FD, inst.FA, inst.FB, true, single, &XEmitter::ADDSD, &XEmitter::VADDSD); break; //add + case 25: fp_tri_op(inst.FD, inst.FA, inst.FC, true, single, &XEmitter::MULSD, &XEmitter::VMULSD); break; //mul default: _assert_msg_(DYNA_REC, 0, "fp_arith_s WTF!!!"); } } +void Jit64::frsqrtex(UGeckoInstruction inst) +{ + INSTRUCTION_START + JITDISABLE(bJITFloatingPointOff) + int d = inst.FD; + int b = inst.FB; + fpr.Lock(b, d); + fpr.BindToRegister(d, d == b, true); + MOVSD(XMM0, M((void *)&one_const)); + SQRTSD(XMM1, fpr.R(b)); + if (cpu_info.bAVX) + { + VDIVSD(fpr.RX(d), XMM0, R(XMM1)); + } + else + { + DIVSD(XMM0, R(XMM1)); + MOVSD(fpr.R(d), XMM0); + } + fpr.UnlockAll(); +} + void Jit64::fmaddXX(UGeckoInstruction inst) { INSTRUCTION_START @@ -204,12 +230,12 @@ void Jit64::fmrx(UGeckoInstruction inst) int d = inst.FD; int b = inst.FB; fpr.Lock(b, d); - fpr.BindToRegister(d, true, true); + fpr.BindToRegister(d, d == b, true); MOVSD(XMM0, fpr.R(b)); MOVSD(fpr.R(d), XMM0); fpr.UnlockAll(); } - + void Jit64::fcmpx(UGeckoInstruction inst) { INSTRUCTION_START @@ -264,12 +290,12 @@ void Jit64::fcmpx(UGeckoInstruction inst) SetJumpTarget(pGreater); MOV(8, M(&PowerPC::ppcState.cr_fast[crf]), Imm8(0x4)); continue3 = J(); - + // Less Than SetJumpTarget(pLesser); MOV(8, M(&PowerPC::ppcState.cr_fast[crf]), Imm8(0x8)); } - + SetJumpTarget(continue1); if (a != b) { diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp index b506ec41cd..244a051aaa 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp @@ -282,10 +282,10 @@ void Jit64::reg_imm(UGeckoInstruction inst) regimmop(d, a, false, (u32)inst.SIMM_16 << 16, Add, &XEmitter::ADD); } break; - case 24: + case 24: if (a == 0 && s == 0 && inst.UIMM == 0 && !inst.Rc) //check for nop {NOP(); return;} //make the nop visible in the generated code. not much use but interesting if we see one. - regimmop(a, s, true, inst.UIMM, Or, &XEmitter::OR); + regimmop(a, s, true, inst.UIMM, Or, &XEmitter::OR); break; //ori case 25: regimmop(a, s, true, inst.UIMM << 16, Or, &XEmitter::OR, false); break;//oris case 28: regimmop(a, s, true, inst.UIMM, And, &XEmitter::AND, true); break; @@ -301,7 +301,7 @@ void Jit64::reg_imm(UGeckoInstruction inst) } void Jit64::cmpXX(UGeckoInstruction inst) -{ +{ // USES_CR INSTRUCTION_START JITDISABLE(bJITIntegerOff) @@ -408,14 +408,14 @@ void Jit64::cmpXX(UGeckoInstruction inst) MOV(32, M(&LR), Imm32(js.compilerPC + 4)); MOV(32, R(EAX), M(&CTR)); AND(32, R(EAX), Imm32(0xFFFFFFFC)); - WriteExitDestInEAX(); + WriteExitDestInEAX(); } else if ((js.next_inst.OPCD == 19) && (js.next_inst.SUBOP10 == 16)) // bclrx { MOV(32, R(EAX), M(&LR)); if (js.next_inst.LK) MOV(32, M(&LR), Imm32(js.compilerPC + 4)); - WriteExitDestInEAX(); + WriteExitDestInEAX(); } else { @@ -455,7 +455,7 @@ void Jit64::cmpXX(UGeckoInstruction inst) if (!merge_branch) { // Keep the normal code separate for clarity. - + FixupBranch pLesser = J_CC(less_than); FixupBranch pGreater = J_CC(greater_than); MOV(8, M(&PowerPC::ppcState.cr_fast[crf]), Imm8(0x2)); // _x86Reg == 0 @@ -467,7 +467,7 @@ void Jit64::cmpXX(UGeckoInstruction inst) MOV(8, M(&PowerPC::ppcState.cr_fast[crf]), Imm8(0x8)); // _x86Reg < 0 SetJumpTarget(continue1); SetJumpTarget(continue2); - // TODO: If we ever care about SO, borrow a trick from + // TODO: If we ever care about SO, borrow a trick from // http://maws.mameworld.info/maws/mamesrc/src/emu/cpu/powerpc/drc_ops.c : bt, adc } else @@ -475,7 +475,7 @@ void Jit64::cmpXX(UGeckoInstruction inst) js.downcountAmount++; int test_bit = 8 >> (js.next_inst.BI & 3); bool condition = (js.next_inst.BO & BO_BRANCH_IF_TRUE) ? false : true; - + // Test swapping (in the future, will be used to inline across branches the right way) // if (rand() & 1) // std::swap(destination1, destination2), condition = !condition; @@ -515,7 +515,7 @@ void Jit64::cmpXX(UGeckoInstruction inst) MOV(32, M(&LR), Imm32(js.compilerPC + 4)); MOV(32, R(EAX), M(&CTR)); AND(32, R(EAX), Imm32(0xFFFFFFFC)); - WriteExitDestInEAX(); + WriteExitDestInEAX(); } else if ((js.next_inst.OPCD == 19) && (js.next_inst.SUBOP10 == 16)) // bclrx { @@ -523,7 +523,7 @@ void Jit64::cmpXX(UGeckoInstruction inst) AND(32, R(EAX), Imm32(0xFFFFFFFC)); if (js.next_inst.LK) MOV(32, M(&LR), Imm32(js.compilerPC + 4)); - WriteExitDestInEAX(); + WriteExitDestInEAX(); } else { @@ -549,7 +549,7 @@ void Jit64::boolX(UGeckoInstruction inst) JITDISABLE(bJITIntegerOff) int a = inst.RA, s = inst.RS, b = inst.RB; _dbg_assert_msg_(DYNA_REC, inst.OPCD == 31, "Invalid boolX"); - + if (gpr.R(s).IsImm() && gpr.R(b).IsImm()) { if (inst.SUBOP10 == 28) /* andx */ @@ -622,7 +622,7 @@ void Jit64::boolX(UGeckoInstruction inst) gpr.Lock(a,((a == s) ? b : s)); OpArg operand = ((a == s) ? gpr.R(b) : gpr.R(s)); gpr.BindToRegister(a, true, true); - + if (inst.SUBOP10 == 28) /* andx */ { AND(32, gpr.R(a), operand); @@ -720,7 +720,7 @@ void Jit64::boolX(UGeckoInstruction inst) { gpr.Lock(a,s,b); gpr.BindToRegister(a, false, true); - + if (inst.SUBOP10 == 28) /* andx */ { MOV(32, gpr.R(a), gpr.R(s)); @@ -913,7 +913,7 @@ void Jit64::subfic(UGeckoInstruction inst) // This instruction has no RC flag } -void Jit64::subfcx(UGeckoInstruction inst) +void Jit64::subfcx(UGeckoInstruction inst) { INSTRUCTION_START; JITDISABLE(bJITIntegerOff) @@ -945,7 +945,7 @@ void Jit64::subfcx(UGeckoInstruction inst) gpr.UnlockAll(); } -void Jit64::subfex(UGeckoInstruction inst) +void Jit64::subfex(UGeckoInstruction inst) { INSTRUCTION_START; JITDISABLE(bJITIntegerOff) @@ -954,7 +954,7 @@ void Jit64::subfex(UGeckoInstruction inst) gpr.BindToRegister(d, (d == a || d == b), true); GetCarryEAXAndClear(); - + bool invertedCarry = false; if (d == b) { @@ -1012,10 +1012,10 @@ void Jit64::subfzex(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITIntegerOff) int a = inst.RA, d = inst.RD; - + gpr.Lock(a, d); gpr.BindToRegister(d, d == a); - + GetCarryEAXAndClear(); if (d != a) { @@ -1292,7 +1292,7 @@ void Jit64::divwux(UGeckoInstruction inst) u64 magic_dividend = 0x100000000ULL << shift; u32 magic = (u32)(magic_dividend / divisor); u32 max_quotient = magic >> shift; - + // Test for failure in round-up method if (((u64)(magic+1) * (max_quotient*divisor-1)) >> (shift + 32) != max_quotient-1) { @@ -1472,7 +1472,7 @@ void Jit64::addx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITIntegerOff) int a = inst.RA, b = inst.RB, d = inst.RD; - + if (gpr.R(a).IsImm() && gpr.R(b).IsImm()) { s32 i = (s32)gpr.R(a).offset, j = (s32)gpr.R(b).offset; @@ -1513,7 +1513,7 @@ void Jit64::addx(UGeckoInstruction inst) { gpr.Lock(a, b, d); gpr.BindToRegister(d, false); - MOV(32, gpr.R(d), gpr.R(a)); + MOV(32, gpr.R(d), gpr.R(a)); ADD(32, gpr.R(d), gpr.R(b)); if (inst.Rc) { @@ -1533,12 +1533,12 @@ void Jit64::addex(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITIntegerOff) int a = inst.RA, b = inst.RB, d = inst.RD; - + if ((d == a) || (d == b)) { gpr.Lock(a, b, d); gpr.BindToRegister(d, true); - + GetCarryEAXAndClear(); ADC(32, gpr.R(d), gpr.R((d == a) ? b : a)); if (inst.Rc) @@ -1552,7 +1552,7 @@ void Jit64::addex(UGeckoInstruction inst) { gpr.Lock(a, b, d); gpr.BindToRegister(d, false); - + GetCarryEAXAndClear(); MOV(32, gpr.R(d), gpr.R(a)); ADC(32, gpr.R(d), gpr.R(b)); @@ -1570,7 +1570,7 @@ void Jit64::addcx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITIntegerOff) int a = inst.RA, b = inst.RB, d = inst.RD; - + if ((d == a) || (d == b)) { int operand = ((d == a) ? b : a); @@ -1590,7 +1590,7 @@ void Jit64::addcx(UGeckoInstruction inst) gpr.Lock(a, b, d); gpr.BindToRegister(d, false); JitClearCAOV(inst.OE); - MOV(32, gpr.R(d), gpr.R(a)); + MOV(32, gpr.R(d), gpr.R(a)); ADD(32, gpr.R(d), gpr.R(b)); if (inst.Rc) { @@ -1607,12 +1607,12 @@ void Jit64::addmex(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITIntegerOff) int a = inst.RA, d = inst.RD; - + if (d == a) { gpr.Lock(d); gpr.BindToRegister(d, true); - + GetCarryEAXAndClear(); ADC(32, gpr.R(d), Imm32(0xFFFFFFFF)); if (inst.Rc) @@ -1626,7 +1626,7 @@ void Jit64::addmex(UGeckoInstruction inst) { gpr.Lock(a, d); gpr.BindToRegister(d, false); - + GetCarryEAXAndClear(); MOV(32, gpr.R(d), gpr.R(a)); ADC(32, gpr.R(d), Imm32(0xFFFFFFFF)); @@ -1645,12 +1645,12 @@ void Jit64::addzex(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITIntegerOff) int a = inst.RA, d = inst.RD; - + if (d == a) { gpr.Lock(d); gpr.BindToRegister(d, true); - + GetCarryEAXAndClear(); ADC(32, gpr.R(d), Imm8(0)); if (inst.Rc) @@ -1664,7 +1664,7 @@ void Jit64::addzex(UGeckoInstruction inst) { gpr.Lock(a, d); gpr.BindToRegister(d, false); - + GetCarryEAXAndClear(); MOV(32, gpr.R(d), gpr.R(a)); ADC(32, gpr.R(d), Imm8(0)); @@ -1726,7 +1726,7 @@ void Jit64::rlwinmx(UGeckoInstruction inst) { ROL(32, gpr.R(a), Imm8(inst.SH)); } - if (!(inst.MB==0 && inst.ME==31)) + if (!(inst.MB==0 && inst.ME==31)) { AND(32, gpr.R(a), Imm32(Helper_Mask(inst.MB, inst.ME))); if (inst.Rc) @@ -1968,7 +1968,7 @@ void Jit64::slwx(UGeckoInstruction inst) { u32 amount = (u32)gpr.R(b).offset; gpr.SetImmediate32(a, (amount & 0x20) ? 0 : (u32)gpr.R(s).offset << amount); - if (inst.Rc) + if (inst.Rc) { ComputeRC(gpr.R(a)); } @@ -1985,7 +1985,7 @@ void Jit64::slwx(UGeckoInstruction inst) MOV(32, gpr.R(a), gpr.R(s)); } SHL(64, gpr.R(a), R(ECX)); - if (inst.Rc) + if (inst.Rc) { AND(32, gpr.R(a), gpr.R(a)); GenerateRC(); @@ -2013,7 +2013,7 @@ void Jit64::slwx(UGeckoInstruction inst) gpr.UnlockAll(); gpr.UnlockAllX(); // Shift of 0 doesn't update flags, so compare manually just in case - if (inst.Rc) + if (inst.Rc) { ComputeRC(gpr.R(a)); } @@ -2132,13 +2132,13 @@ void Jit64::cntlzwx(UGeckoInstruction inst) JITDISABLE(bJITIntegerOff) int a = inst.RA; int s = inst.RS; - + if (gpr.R(s).IsImm()) { u32 mask = 0x80000000; u32 i = 0; for (; i < 32; i++, mask >>= 1) - if ((u32)gpr.R(s).offset & mask) + if ((u32)gpr.R(s).offset & mask) break; gpr.SetImmediate32(a, i); } @@ -2215,7 +2215,7 @@ void Jit64::twx(UGeckoInstruction inst) LOCK(); OR(32, M((void *)&PowerPC::ppcState.Exceptions), Imm32(EXCEPTION_PROGRAM)); WriteExceptionExit(); - + SetJumpTarget(exit1); SetJumpTarget(exit2); SetJumpTarget(exit3); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp index e558526f4e..a1c3bd971c 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp @@ -36,25 +36,25 @@ void Jit64::lXXx(UGeckoInstruction inst) accessSize = 32; signExtend = false; break; - + case 34: /* lbz */ case 35: /* lbzu */ accessSize = 8; signExtend = false; break; - + case 40: /* lhz */ case 41: /* lhzu */ accessSize = 16; signExtend = false; break; - + case 42: /* lha */ case 43: /* lhau */ accessSize = 16; signExtend = true; break; - + case 31: switch (inst.SUBOP10) { @@ -63,7 +63,7 @@ void Jit64::lXXx(UGeckoInstruction inst) accessSize = 32; signExtend = false; break; - + case 87: /* lbzx */ case 119: /* lbzux */ accessSize = 8; @@ -74,36 +74,36 @@ void Jit64::lXXx(UGeckoInstruction inst) accessSize = 16; signExtend = false; break; - + case 343: /* lhax */ case 375: /* lhaux */ accessSize = 16; signExtend = true; break; - + default: PanicAlert("Invalid instruction"); } break; - + default: PanicAlert("Invalid instruction"); } // TODO(ector): Make it dynamically enable/disable idle skipping where appropriate // Will give nice boost to dual core mode - // (mb2): I agree, + // (mb2): I agree, // IMHO those Idles should always be skipped and replaced by a more controllable "native" Idle methode // ... maybe the throttle one already do that :p // if (CommandProcessor::AllowIdleSkipping() && PixelEngine::AllowIdleSkipping()) if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle && - inst.OPCD == 32 && + inst.OPCD == 32 && (inst.hex & 0xFFFF0000) == 0x800D0000 && (Memory::ReadUnchecked_U32(js.compilerPC + 4) == 0x28000000 || (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii && Memory::ReadUnchecked_U32(js.compilerPC + 4) == 0x2C000000)) && Memory::ReadUnchecked_U32(js.compilerPC + 8) == 0x4182fff8) { - // TODO(LinesPrower): + // TODO(LinesPrower): // - Rewrite this! // It seems to be ugly and inefficient, but I don't know JIT stuff enough to make it right // It only demonstrates the idea @@ -112,11 +112,11 @@ void Jit64::lXXx(UGeckoInstruction inst) s32 offset = (s32)(s16)inst.SIMM_16; gpr.BindToRegister(d, false, true); SafeLoadToReg(gpr.RX(d), gpr.R(a), accessSize, offset, RegistersInUse(), signExtend); - + // if it's still 0, we can wait until the next event TEST(32, gpr.R(d), gpr.R(d)); FixupBranch noIdle = J_CC(CC_NZ); - + u32 registersInUse = RegistersInUse(); ABI_PushRegistersAndAdjustStack(registersInUse, false); @@ -133,7 +133,7 @@ void Jit64::lXXx(UGeckoInstruction inst) //js.compilerPC += 8; return; } - + // Determine whether this instruction updates inst.RA bool update; if (inst.OPCD == 31) @@ -199,12 +199,12 @@ void Jit64::lXXx(UGeckoInstruction inst) } gpr.Lock(a, b, d); - gpr.BindToRegister(d, false, true); + gpr.BindToRegister(d, js.memcheck, true); SafeLoadToReg(gpr.RX(d), opAddress, accessSize, 0, RegistersInUse(), signExtend); if (update && js.memcheck && !zeroOffset) { - gpr.BindToRegister(a, false, true); + gpr.BindToRegister(a, true, true); MEMCHECK_START MOV(32, gpr.R(a), opAddress); MEMCHECK_END @@ -263,7 +263,7 @@ void Jit64::stX(UGeckoInstruction inst) bool update = inst.OPCD & 1; s32 offset = (s32)(s16)inst.SIMM_16; - if (a || !update) + if (a || !update) { int accessSize; switch (inst.OPCD & ~1) @@ -288,7 +288,7 @@ void Jit64::stX(UGeckoInstruction inst) if (update) gpr.SetImmediate32(a, addr); switch (accessSize) - { + { // No need to protect these, they don't touch any state // question - should we inline them instead? Pro: Lose a CALL Con: Code bloat case 8: CALL((void *)asm_routines.fifoDirectWrite8); break; @@ -325,7 +325,7 @@ void Jit64::stX(UGeckoInstruction inst) return; } } - + // Optimized stack access? if (accessSize == 32 && !gpr.R(a).IsImm() && a == 1 && js.st.isFirstBlockOfFunction && jo.optimizeStack) { @@ -333,7 +333,7 @@ void Jit64::stX(UGeckoInstruction inst) MOV(32, R(ABI_PARAM1), gpr.R(a)); MOV(32, R(EAX), gpr.R(s)); BSWAP(32, EAX); -#ifdef _M_X64 +#ifdef _M_X64 MOV(accessSize, MComplex(RBX, ABI_PARAM1, SCALE_1, (u32)offset), R(EAX)); #else AND(32, R(ABI_PARAM1), Imm32(Memory::MEMVIEW32_MASK)); @@ -375,7 +375,7 @@ void Jit64::stX(UGeckoInstruction inst) { gpr.KillImmediate(a, true, true); MEMCHECK_START - + ADD(32, gpr.R(a), Imm32((u32)offset)); MEMCHECK_END @@ -420,7 +420,7 @@ void Jit64::stXx(UGeckoInstruction inst) case 151: accessSize = 32; break; case 407: accessSize = 16; break; case 215: accessSize = 8; break; - default: PanicAlert("stXx: invalid access size"); + default: PanicAlert("stXx: invalid access size"); accessSize = 0; break; } diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp index 8fbabdd60a..bc056e6bd1 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStoreFloating.cpp @@ -35,7 +35,7 @@ void Jit64::lfs(UGeckoInstruction inst) int d = inst.RD; int a = inst.RA; - if (!a) + if (!a) { Default(inst); return; @@ -45,7 +45,7 @@ void Jit64::lfs(UGeckoInstruction inst) SafeLoadToReg(EAX, gpr.R(a), 32, offset, RegistersInUse(), false); MEMCHECK_START - + MOV(32, M(&temp32), R(EAX)); fpr.Lock(d); fpr.BindToRegister(d, false); @@ -67,7 +67,7 @@ void Jit64::lfd(UGeckoInstruction inst) int d = inst.RD; int a = inst.RA; - if (!a) + if (!a) { Default(inst); return; @@ -108,7 +108,7 @@ void Jit64::lfd(UGeckoInstruction inst) MOV(32, M((void*)((u8 *)&temp64+4)), R(EAX)); MEMCHECK_START - + MOV(32, R(EAX), MDisp(ABI_PARAM1, (u32)Memory::base + offset + 4)); BSWAP(32, EAX); MOV(32, M(&temp64), R(EAX)); @@ -213,7 +213,7 @@ void Jit64::stfd(UGeckoInstruction inst) fpr.UnlockAll(); } -// In Release on 32bit build, +// In Release on 32bit build, // this seemed to cause a problem with PokePark2 // at start after talking to first pokemon, // you run and smash a box, then he goes on about @@ -324,7 +324,7 @@ void Jit64::lfsx(UGeckoInstruction inst) MOVD_xmm(r, MComplex(RBX, EAX, SCALE_1, 0)); #endif MEMCHECK_START - + PSHUFB(r, M((void *)bswapShuffle1x4)); CVTSS2SD(r, R(r)); MOVDDUP(r, R(r)); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp index 38113596ae..a2cb0784d1 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStorePaired.cpp @@ -15,7 +15,7 @@ const u8 GC_ALIGNED16(pbswapShuffle2x4[16]) = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11, 12, 13, 14, 15}; //static u64 GC_ALIGNED16(temp64); // unused? - + // TODO(ector): Improve 64-bit version #if 0 static void WriteDual32(u64 value, u32 address) @@ -122,12 +122,6 @@ void Jit64::psq_l(UGeckoInstruction inst) const UGQR gqr(rSPR(SPR_GQR0 + inst.I)); - if (inst.W) { - // PanicAlert("Single ps load: %i %i", gqr.ST_TYPE, gqr.ST_SCALE); - Default(inst); - return; - } - bool update = inst.OPCD == 57; int offset = inst.SIMM_12; @@ -143,6 +137,8 @@ void Jit64::psq_l(UGeckoInstruction inst) MOV(32, gpr.R(inst.RA), R(ECX)); MOVZX(32, 16, EAX, M(((char *)&GQR(inst.I)) + 2)); MOVZX(32, 8, EDX, R(AL)); + if (inst.W) + OR(32, R(EDX), Imm8(8)); #ifdef _M_IX86 int addr_scale = SCALE_4; #else diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp index 7d7480b311..781b75a538 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Paired.cpp @@ -11,14 +11,12 @@ // ps_madds0 // ps_muls0 // ps_madds1 -// ps_sel // cmppd, andpd, andnpd, or // lfsx, ps_merge01 etc -const u64 GC_ALIGNED16(psSignBits[2]) = {0x8000000000000000ULL, 0x8000000000000000ULL}; -const u64 GC_ALIGNED16(psAbsMask[2]) = {0x7FFFFFFFFFFFFFFFULL, 0x7FFFFFFFFFFFFFFFULL}; -const double GC_ALIGNED16(psOneOne[2]) = {1.0, 1.0}; -const double GC_ALIGNED16(psZeroZero[2]) = {0.0, 0.0}; +static const u64 GC_ALIGNED16(psSignBits[2]) = {0x8000000000000000ULL, 0x8000000000000000ULL}; +static const u64 GC_ALIGNED16(psAbsMask[2]) = {0x7FFFFFFFFFFFFFFFULL, 0x7FFFFFFFFFFFFFFFULL}; +static const double GC_ALIGNED16(psOneOne[2]) = {1.0, 1.0}; void Jit64::ps_mr(UGeckoInstruction inst) { @@ -37,34 +35,32 @@ void Jit64::ps_mr(UGeckoInstruction inst) void Jit64::ps_sel(UGeckoInstruction inst) { + // we can't use (V)BLENDVPD here because it just looks at the sign bit + // but we need -0 = +0 + INSTRUCTION_START JITDISABLE(bJITPairedOff) - Default(inst); return; - if (inst.Rc) { Default(inst); return; } - // GRR can't get this to work 100%. Getting artifacts in D.O.N. intro. int d = inst.FD; int a = inst.FA; int b = inst.FB; int c = inst.FC; - fpr.FlushLockX(XMM7); - fpr.FlushLockX(XMM6); + fpr.Lock(a, b, c, d); - fpr.BindToRegister(a, true, false); - fpr.BindToRegister(d, false, true); - // BLENDPD would have been nice... - MOVAPD(XMM7, fpr.R(a)); - CMPPD(XMM7, M((void*)psZeroZero), 1); //less-than = 111111 - MOVAPD(XMM6, R(XMM7)); - ANDPD(XMM7, fpr.R(d)); - ANDNPD(XMM6, fpr.R(c)); - MOVAPD(fpr.RX(d), R(XMM7)); - ORPD(fpr.RX(d), R(XMM6)); + MOVAPD(XMM0, fpr.R(a)); + XORPD(XMM1, R(XMM1)); + // XMM0 = XMM0 < 0 ? all 1s : all 0s + CMPPD(XMM0, R(XMM1), LT); + MOVAPD(XMM1, R(XMM0)); + ANDPD(XMM0, fpr.R(b)); + ANDNPD(XMM1, fpr.R(c)); + ORPD(XMM0, R(XMM1)); + fpr.BindToRegister(d, false); + MOVAPD(fpr.RX(d), R(XMM0)); fpr.UnlockAll(); - fpr.UnlockAllX(); } void Jit64::ps_sign(UGeckoInstruction inst) @@ -90,7 +86,7 @@ void Jit64::ps_sign(UGeckoInstruction inst) switch (inst.SUBOP10) { - case 40: //neg + case 40: //neg XORPD(fpr.RX(d), M((void*)&psSignBits)); break; case 136: //nabs @@ -104,20 +100,33 @@ void Jit64::ps_sign(UGeckoInstruction inst) fpr.UnlockAll(); } -void Jit64::ps_rsqrte(UGeckoInstruction inst) +// ps_res and ps_rsqrte +void Jit64::ps_recip(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) if (inst.Rc) { Default(inst); return; } + OpArg divisor; int d = inst.FD; int b = inst.FB; fpr.Lock(d, b); - fpr.BindToRegister(d, (d == b), true); - SQRTPD(XMM0, fpr.R(b)); + fpr.BindToRegister(d, (d == b)); + switch (inst.SUBOP5) + { + case 24: + // ps_res + divisor = fpr.R(b); + break; + case 26: + // ps_rsqrte + SQRTPD(XMM0, fpr.R(b)); + divisor = R(XMM0); + break; + } MOVAPD(XMM1, M((void*)&psOneOne)); - DIVPD(XMM1, R(XMM0)); + DIVPD(XMM1, divisor); MOVAPD(fpr.R(d), XMM1); fpr.UnlockAll(); } @@ -173,7 +182,7 @@ void Jit64::tri_op(int d, int a, int b, bool reversible, void (XEmitter::*op)(X6 } void Jit64::ps_arith(UGeckoInstruction inst) -{ +{ INSTRUCTION_START JITDISABLE(bJITPairedOff) if (inst.Rc) { @@ -182,10 +191,8 @@ void Jit64::ps_arith(UGeckoInstruction inst) switch (inst.SUBOP5) { case 18: tri_op(inst.FD, inst.FA, inst.FB, false, &XEmitter::DIVPD); break; //div - case 20: tri_op(inst.FD, inst.FA, inst.FB, false, &XEmitter::SUBPD); break; //sub + case 20: tri_op(inst.FD, inst.FA, inst.FB, false, &XEmitter::SUBPD); break; //sub case 21: tri_op(inst.FD, inst.FA, inst.FB, true, &XEmitter::ADDPD); break; //add - case 23: Default(inst); break; //sel - case 24: Default(inst); break; //res case 25: tri_op(inst.FD, inst.FA, inst.FC, true, &XEmitter::MULPD); break; //mul default: _assert_msg_(DYNA_REC, 0, "ps_arith WTF!!!"); @@ -193,10 +200,10 @@ void Jit64::ps_arith(UGeckoInstruction inst) } void Jit64::ps_sum(UGeckoInstruction inst) -{ +{ INSTRUCTION_START JITDISABLE(bJITPairedOff) - // TODO: (inst.SUBOP5 == 10) breaks Sonic Colours (black screen) + // TODO: (inst.SUBOP5 == 10) breaks Sonic Colours (black screen) if (inst.Rc || (inst.SUBOP5 == 10)) { Default(inst); return; } @@ -222,7 +229,7 @@ void Jit64::ps_sum(UGeckoInstruction inst) MOVAPD(XMM1, fpr.R(b)); SHUFPD(XMM1, R(XMM1), 5); // copy higher to lower ADDPD(XMM0, R(XMM1)); // sum lowers - MOVAPD(XMM1, fpr.R(c)); + MOVAPD(XMM1, fpr.R(c)); UNPCKLPD(XMM1, R(XMM0)); // merge MOVAPD(fpr.R(d), XMM1); break; @@ -288,7 +295,7 @@ void Jit64::ps_mergeXX(UGeckoInstruction inst) MOVAPD(XMM0, fpr.R(a)); switch (inst.SUBOP10) { - case 528: + case 528: UNPCKLPD(XMM0, fpr.R(b)); //unpck is faster than shuf break; //00 case 560: diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp index 91a3a160c9..573feb3756 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp @@ -254,7 +254,7 @@ void Jit64::crXXX(UGeckoInstruction inst) JITDISABLE(bJITSystemRegistersOff) _dbg_assert_msg_(DYNA_REC, inst.OPCD == 19, "Invalid crXXX"); - // USES_CR + // USES_CR // Get bit CRBA in EAX aligned with bit CRBD int shiftA = (inst.CRBD & 3) - (inst.CRBA & 3); diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp index 0b874d8b36..7a37a1cb43 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp @@ -163,9 +163,9 @@ static const int FRegAllocSize = sizeof(FRegAllocOrder) / sizeof(X64Reg); #endif static X64Reg regFindFreeReg(RegInfo& RI) { - for (int i = 0; i < RegAllocSize; i++) - if (RI.regs[RegAllocOrder[i]] == 0) - return RegAllocOrder[i]; + for (auto& reg : RegAllocOrder) + if (RI.regs[reg] == 0) + return reg; int bestIndex = -1; InstLoc bestEnd = 0; @@ -184,9 +184,9 @@ static X64Reg regFindFreeReg(RegInfo& RI) { } static X64Reg fregFindFreeReg(RegInfo& RI) { - for (int i = 0; i < FRegAllocSize; i++) - if (RI.fregs[FRegAllocOrder[i]] == 0) - return FRegAllocOrder[i]; + for (auto& reg : FRegAllocOrder) + if (RI.fregs[reg] == 0) + return reg; int bestIndex = -1; InstLoc bestEnd = 0; @@ -205,9 +205,9 @@ static X64Reg fregFindFreeReg(RegInfo& RI) { } static OpArg regLocForInst(RegInfo& RI, InstLoc I) { - for (int i = 0; i < RegAllocSize; i++) - if (RI.regs[RegAllocOrder[i]] == I) - return R(RegAllocOrder[i]); + for (auto& reg : RegAllocOrder) + if (RI.regs[reg] == I) + return R(reg); if (regGetSpill(RI, I) == 0) PanicAlert("Retrieving unknown spill slot?!"); @@ -215,9 +215,9 @@ static OpArg regLocForInst(RegInfo& RI, InstLoc I) { } static OpArg fregLocForInst(RegInfo& RI, InstLoc I) { - for (int i = 0; i < FRegAllocSize; i++) - if (RI.fregs[FRegAllocOrder[i]] == I) - return R(FRegAllocOrder[i]); + for (auto& reg : FRegAllocOrder) + if (RI.fregs[reg] == I) + return R(reg); if (fregGetSpill(RI, I) == 0) PanicAlert("Retrieving unknown spill slot?!"); @@ -225,15 +225,15 @@ static OpArg fregLocForInst(RegInfo& RI, InstLoc I) { } static void regClearInst(RegInfo& RI, InstLoc I) { - for (int i = 0; i < RegAllocSize; i++) - if (RI.regs[RegAllocOrder[i]] == I) - RI.regs[RegAllocOrder[i]] = 0; + for (auto& reg : RegAllocOrder) + if (RI.regs[reg] == I) + RI.regs[reg] = 0; } static void fregClearInst(RegInfo& RI, InstLoc I) { - for (int i = 0; i < FRegAllocSize; i++) - if (RI.fregs[FRegAllocOrder[i]] == I) - RI.fregs[FRegAllocOrder[i]] = 0; + for (auto& reg : FRegAllocOrder) + if (RI.fregs[reg] == I) + RI.fregs[reg] = 0; } static X64Reg regEnsureInReg(RegInfo& RI, InstLoc I) { @@ -266,7 +266,7 @@ static void regSpillCallerSaved(RegInfo& RI) { // 64-bit regSpill(RI, RCX); regSpill(RI, RDX); - regSpill(RI, RSI); + regSpill(RI, RSI); regSpill(RI, RDI); regSpill(RI, R8); regSpill(RI, R9); @@ -411,7 +411,7 @@ static void fregEmitBinInst(RegInfo& RI, InstLoc I, // Could be extended to unprofiled addresses. static void regMarkMemAddress(RegInfo& RI, InstLoc I, InstLoc AI, unsigned OpNum) { if (isImm(*AI)) { - unsigned addr = RI.Build->GetImmValue(AI); + unsigned addr = RI.Build->GetImmValue(AI); if (Memory::IsRAMAddress(addr)) return; } @@ -470,7 +470,7 @@ static void regEmitMemLoad(RegInfo& RI, InstLoc I, unsigned Size) { X64Reg reg; auto info = regBuildMemAddress(RI, I, getOp1(I), 1, Size, ®); - RI.Jit->SafeLoadToReg(reg, info.first, Size, info.second, regsInUse(RI), false); + RI.Jit->SafeLoadToReg(reg, info.first, Size, info.second, regsInUse(RI), false, EmuCodeBlock::SAFE_LOADSTORE_NO_FASTMEM); if (regReadUse(RI, I)) RI.regs[reg] = I; } @@ -498,7 +498,7 @@ static void regEmitMemStore(RegInfo& RI, InstLoc I, unsigned Size) { } else { RI.Jit->MOV(32, R(EAX), regLocForInst(RI, getOp1(I))); } - RI.Jit->SafeWriteRegToReg(EAX, ECX, Size, 0, regsInUse(RI)); + RI.Jit->SafeWriteRegToReg(EAX, ECX, Size, 0, regsInUse(RI), EmuCodeBlock::SAFE_LOADSTORE_NO_FASTMEM); if (RI.IInfo[I - RI.FirstI] & 4) regClearInst(RI, getOp1(I)); } @@ -594,7 +594,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { case InterpreterFallback: case SystemCall: case RFIExit: - case InterpreterBranch: + case InterpreterBranch: case ShortIdleLoop: case FPExceptionCheck: case DSIExceptionCheck: @@ -713,7 +713,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { break; case IdleBranch: regMarkUse(RI, I, getOp1(getOp1(I)), 1); - break; + break; case BranchCond: { if (isICmp(*getOp1(I)) && isImm(*getOp2(getOp1(I)))) { @@ -1128,7 +1128,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { if (!thisUsed) break; X64Reg reg = fregFindFreeReg(RI); if (cpu_info.bSSSE3) { - static const u32 GC_ALIGNED16(maskSwapa64_1[4]) = + static const u32 GC_ALIGNED16(maskSwapa64_1[4]) = {0x04050607L, 0x00010203L, 0xFFFFFFFFL, 0xFFFFFFFFL}; #ifdef _M_X64 // TODO: Remove regEnsureInReg() and use ECX @@ -1187,7 +1187,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { Jit->MOV(32, R(EAX), loc1); } Jit->MOV(32, R(ECX), regLocForInst(RI, getOp2(I))); - RI.Jit->SafeWriteRegToReg(EAX, ECX, 32, 0, regsInUse(RI)); + RI.Jit->SafeWriteRegToReg(EAX, ECX, 32, 0, regsInUse(RI), EmuCodeBlock::SAFE_LOADSTORE_NO_FASTMEM); if (RI.IInfo[I - RI.FirstI] & 4) fregClearInst(RI, getOp1(I)); if (RI.IInfo[I - RI.FirstI] & 8) @@ -1213,7 +1213,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { FixupBranch safe = Jit->J_CC(CC_NZ); // Fast routine if (cpu_info.bSSSE3) { - static const u32 GC_ALIGNED16(maskSwapa64_1[4]) = + static const u32 GC_ALIGNED16(maskSwapa64_1[4]) = {0x04050607L, 0x00010203L, 0xFFFFFFFFL, 0xFFFFFFFFL}; X64Reg value = fregBinLHSRegWithMov(RI, I); @@ -1250,12 +1250,12 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { Jit->PSRLQ(XMM0, 32); Jit->MOVD_xmm(R(EAX), XMM0); Jit->MOV(32, R(ECX), address); - RI.Jit->SafeWriteRegToReg(EAX, ECX, 32, 0, regsInUse(RI)); + RI.Jit->SafeWriteRegToReg(EAX, ECX, 32, 0, regsInUse(RI), EmuCodeBlock::SAFE_LOADSTORE_NO_FASTMEM); Jit->MOVAPD(XMM0, value); Jit->MOVD_xmm(R(EAX), XMM0); Jit->MOV(32, R(ECX), address); - RI.Jit->SafeWriteRegToReg(EAX, ECX, 32, 4, regsInUse(RI)); + RI.Jit->SafeWriteRegToReg(EAX, ECX, 32, 4, regsInUse(RI), EmuCodeBlock::SAFE_LOADSTORE_NO_FASTMEM); Jit->SetJumpTarget(exit); if (RI.IInfo[I - RI.FirstI] & 4) @@ -1334,7 +1334,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { case FSNeg: { if (!thisUsed) break; X64Reg reg = fregURegWithMov(RI, I); - static const u32 GC_ALIGNED16(ssSignBits[4]) = + static const u32 GC_ALIGNED16(ssSignBits[4]) = {0x80000000}; Jit->PXOR(reg, M((void*)&ssSignBits)); RI.fregs[reg] = I; @@ -1344,7 +1344,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { case FDNeg: { if (!thisUsed) break; X64Reg reg = fregURegWithMov(RI, I); - static const u64 GC_ALIGNED16(ssSignBits[2]) = + static const u64 GC_ALIGNED16(ssSignBits[2]) = {0x8000000000000000ULL}; Jit->PXOR(reg, M((void*)&ssSignBits)); RI.fregs[reg] = I; @@ -1354,7 +1354,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { case FPNeg: { if (!thisUsed) break; X64Reg reg = fregURegWithMov(RI, I); - static const u32 GC_ALIGNED16(psSignBits[4]) = + static const u32 GC_ALIGNED16(psSignBits[4]) = {0x80000000, 0x80000000}; Jit->PXOR(reg, M((void*)&psSignBits)); RI.fregs[reg] = I; @@ -1384,7 +1384,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { Jit->MOVAPD(reg, M(&PowerPC::ppcState.ps[ppcreg])); RI.fregs[reg] = I; break; - } + } case LoadFRegDENToZero: { if (!thisUsed) break; X64Reg reg = fregFindFreeReg(RI); @@ -1623,14 +1623,14 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { case BlockEnd: break; - case IdleBranch: { + case IdleBranch: { Jit->CMP(32, regLocForInst(RI, getOp1(getOp1(I))), - Imm32(RI.Build->GetImmValue(getOp2(getOp1(I))))); + Imm32(RI.Build->GetImmValue(getOp2(getOp1(I))))); FixupBranch cont = Jit->J_CC(CC_NE); - RI.Jit->Cleanup(); // is it needed? + RI.Jit->Cleanup(); // is it needed? Jit->ABI_CallFunction((void *)&PowerPC::OnIdleIL); - + Jit->MOV(32, M(&PC), Imm32(ibuild->GetImmValue( getOp2(I) ))); Jit->JMP(((JitIL *)jit)->asm_routines.testExceptions, true); @@ -1682,7 +1682,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { regWriteExit(RI, getOp1(I)); regNormalRegClear(RI, I); break; - } + } case ShortIdleLoop: { unsigned InstLoc = ibuild->GetImmValue(getOp1(I)); Jit->ABI_CallFunction((void *)&CoreTiming::Idle); @@ -1711,11 +1711,11 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { Jit->MOV(32, R(ECX), M(&SRR1)); Jit->AND(32, R(EAX), Imm32(~mask)); Jit->AND(32, R(ECX), Imm32(mask)); - Jit->OR(32, R(EAX), R(ECX)); + Jit->OR(32, R(EAX), R(ECX)); // MSR &= 0xFFFBFFFF; // Mask used to clear the bit MSR[13] Jit->AND(32, R(EAX), Imm32(0xFFFBFFFF)); Jit->MOV(32, M(&MSR), R(EAX)); - // NPC = SRR0; + // NPC = SRR0; Jit->MOV(32, R(EAX), M(&SRR0)); Jit->WriteRfiExitDestInOpArg(R(EAX)); break; @@ -1729,7 +1729,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit) { // If a FPU exception occurs, the exception handler will read // from PC. Update PC with the latest value in case that happens. Jit->MOV(32, M(&PC), Imm32(InstLoc)); - Jit->SUB(32, M(&CoreTiming::downcount), Jit->js.downcountAmount > 127 ? Imm32(Jit->js.downcountAmount) : Imm8(Jit->js.downcountAmount)); + Jit->SUB(32, M(&CoreTiming::downcount), Jit->js.downcountAmount > 127 ? Imm32(Jit->js.downcountAmount) : Imm8(Jit->js.downcountAmount)); Jit->JMP(Jit->asm_routines.fpException, true); Jit->SetJumpTarget(b1); break; diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp index f056c9f8b3..b15ffbacca 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.cpp @@ -3,6 +3,8 @@ // Refer to the license.txt file included. #include +#include +#include #include "Common.h" #include "../../HLE/HLE.h" @@ -50,7 +52,7 @@ using namespace PowerPC; // will be as small to be negligible, so I haven't dirtied up the code with that. AMD recommends it in their // optimization manuals, though. // -// We support block linking. Reserve space at the exits of every block for a full 5-byte jmp. Save 16-bit offsets +// We support block linking. Reserve space at the exits of every block for a full 5-byte jmp. Save 16-bit offsets // from the starts of each block, marking the exits so that they can be nicely patched at any time. // // Blocks do NOT use call/ret, they only jmp to each other and to the dispatcher when necessary. @@ -84,7 +86,7 @@ using namespace PowerPC; CR2-CR4 are non-volatile, rest of CR is volatile -> dropped on blr. R5-R12 are volatile -> dropped on blr. * classic inlining across calls. - + Low hanging fruit: stfd -- guaranteed in memory cmpl @@ -211,20 +213,20 @@ namespace JitILProfiler File::IOFile file(buffer, "w"); setvbuf(file.GetHandle(), NULL, _IOFBF, 1024 * 1024); fprintf(file.GetHandle(), "code hash,total elapsed,number of calls,elapsed per call\n"); - for (std::vector::iterator it = blocks.begin(), itEnd = blocks.end(); it != itEnd; ++it) + for (auto& block : blocks) { - const u64 codeHash = it->codeHash; - const u64 totalElapsed = it->totalElapsed; - const u64 numberOfCalls = it->numberOfCalls; + const u64 codeHash = block.codeHash; + const u64 totalElapsed = block.totalElapsed; + const u64 numberOfCalls = block.numberOfCalls; const double elapsedPerCall = totalElapsed / (double)numberOfCalls; - fprintf(file.GetHandle(), "%016llx,%lld,%lld,%f\n", codeHash, totalElapsed, numberOfCalls, elapsedPerCall); + fprintf(file.GetHandle(), "%016" PRIx64 ",%" PRId64 ",%" PRId64 ",%f\n", codeHash, totalElapsed, numberOfCalls, elapsedPerCall); } } }; - std::auto_ptr finalizer; + std::unique_ptr finalizer; static void Init() { - finalizer = std::auto_ptr(new JitILProfilerFinalizer); + finalizer = std::unique_ptr(new JitILProfilerFinalizer); } static void Shutdown() { @@ -385,22 +387,22 @@ void JitIL::WriteExit(u32 destination, int exit_num) if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITILTimeProfiling) { ABI_CallFunction((void *)JitILProfiler::End); } - SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); + SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); //If nobody has taken care of this yet (this can be removed when all branches are done) JitBlock *b = js.curBlock; b->exitAddress[exit_num] = destination; b->exitPtrs[exit_num] = GetWritableCodePtr(); - + // Link opportunity! int block = blocks.GetBlockNumberFromStartAddress(destination); - if (block >= 0 && jo.enableBlocklink) + if (block >= 0 && jo.enableBlocklink) { // It exists! Joy of joy! JMP(blocks.GetBlock(block)->checkedEntry, true); b->linkStatus[exit_num] = true; } - else + else { MOV(32, M(&PC), Imm32(destination)); JMP(asm_routines.dispatcher, true); @@ -414,7 +416,7 @@ void JitIL::WriteExitDestInOpArg(const Gen::OpArg& arg) if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITILTimeProfiling) { ABI_CallFunction((void *)JitILProfiler::End); } - SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); + SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.dispatcher, true); } @@ -425,7 +427,7 @@ void JitIL::WriteRfiExitDestInOpArg(const Gen::OpArg& arg) if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITILTimeProfiling) { ABI_CallFunction((void *)JitILProfiler::End); } - SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); + SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.testExceptions, true); } @@ -435,7 +437,7 @@ void JitIL::WriteExceptionExit() if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITILTimeProfiling) { ABI_CallFunction((void *)JitILProfiler::End); } - SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); + SUB(32, M(&CoreTiming::downcount), js.downcountAmount > 127 ? Imm32(js.downcountAmount) : Imm8(js.downcountAmount)); JMP(asm_routines.testExceptions, true); } @@ -473,11 +475,11 @@ void JitIL::Trace() sprintf(reg, "f%02d: %016x ", i, riPS0(i)); strncat(fregs, reg, 750); } -#endif +#endif - DEBUG_LOG(DYNA_REC, "JITIL PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s", - PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], - PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, + DEBUG_LOG(DYNA_REC, "JITIL PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s", + PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], + PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, PowerPC::ppcState.msr, PowerPC::ppcState.spr[8], regs, fregs); } @@ -562,7 +564,7 @@ const u8* JitIL::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc const u8 *normalEntry = GetCodePtr(); b->normalEntry = normalEntry; - + if (ImHereDebug) ABI_CallFunction((void *)&ImHere); // Used to get a trace of the last few blocks before a crash, sometimes VERY useful diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h index b7ee6f4651..e56a56c815 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL.h @@ -56,47 +56,41 @@ class JitIL : public JitILBase, public EmuCodeBlock { private: JitBlockCache blocks; - TrampolineCache trampolines; - - // The default code buffer. We keep it around to not have to alloc/dealloc a - // large chunk of memory for each recompiled block. - PPCAnalyst::CodeBuffer code_buffer; + TrampolineCache trampolines; public: JitILAsmRoutineManager asm_routines; - JitIL() : code_buffer(32000) {} + JitIL() {} ~JitIL() {} - IREmitter::IRBuilder ibuild; - // Initialization, etc - void Init(); - void Shutdown(); + void Init() override; + void Shutdown() override; // Jit! - void Jit(u32 em_address); + void Jit(u32 em_address) override; const u8* DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buffer, JitBlock *b); void Trace(); - JitBlockCache *GetBlockCache() { return &blocks; } - - const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx) { return NULL; }; + JitBlockCache *GetBlockCache() override { return &blocks; } - bool IsInCodeSpace(u8 *ptr) { return IsInSpace(ptr); } + const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx) override { return NULL; }; - void ClearCache(); + bool IsInCodeSpace(u8 *ptr) override { return IsInSpace(ptr); } + + void ClearCache() override; const u8 *GetDispatcher() { return asm_routines.dispatcher; // asm_routines.dispatcher } - const CommonAsmRoutines *GetAsmRoutines() { + const CommonAsmRoutines *GetAsmRoutines() override { return &asm_routines; } - const char *GetName() { + const char *GetName() override { #ifdef _M_X64 return "JIT64IL"; #else @@ -106,8 +100,8 @@ public: // Run! - void Run(); - void SingleStep(); + void Run() override; + void SingleStep() override; // Utilities for use by opcodes @@ -117,7 +111,7 @@ public: void WriteRfiExitDestInOpArg(const Gen::OpArg& arg); void WriteCallInterpreter(UGeckoInstruction _inst); void Cleanup(); - + void WriteToConstRamAddress(int accessSize, const Gen::OpArg& arg, u32 address); void WriteFloatToConstRamAddress(const Gen::X64Reg& xmm_reg, u32 address); void GenerateCarry(Gen::X64Reg temp_reg); @@ -130,18 +124,16 @@ public: void WriteCode(); // OPCODES - void unknown_instruction(UGeckoInstruction _inst); - void Default(UGeckoInstruction _inst); - void DoNothing(UGeckoInstruction _inst); - void HLEFunction(UGeckoInstruction _inst); + void unknown_instruction(UGeckoInstruction _inst) override; + void Default(UGeckoInstruction _inst) override; + void DoNothing(UGeckoInstruction _inst) override; + void HLEFunction(UGeckoInstruction _inst) override; - void DynaRunTable4(UGeckoInstruction _inst); - void DynaRunTable19(UGeckoInstruction _inst); - void DynaRunTable31(UGeckoInstruction _inst); - void DynaRunTable59(UGeckoInstruction _inst); - void DynaRunTable63(UGeckoInstruction _inst); + void DynaRunTable4(UGeckoInstruction _inst) override; + void DynaRunTable19(UGeckoInstruction _inst) override; + void DynaRunTable31(UGeckoInstruction _inst) override; + void DynaRunTable59(UGeckoInstruction _inst) override; + void DynaRunTable63(UGeckoInstruction _inst) override; }; -void Jit(u32 em_address); - #endif // _JITIL_H diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.cpp index 6587af6782..a909d32725 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.cpp @@ -14,9 +14,9 @@ using namespace Gen; //TODO - make an option //#if _DEBUG -static bool enableDebug = false; +static bool enableDebug = false; //#else -// bool enableDebug = false; +// bool enableDebug = false; //#endif //static bool enableStatistics = false; // unused? @@ -27,7 +27,7 @@ static bool enableDebug = false; //GLOBAL STATIC ALLOCATIONS x64 //EAX - ubiquitous scratch register - EVERYBODY scratches this //RBX - Base pointer of memory -//R15 - Pointer to array of block pointers +//R15 - Pointer to array of block pointers JitILAsmRoutineManager jitil_asm_routines; @@ -49,7 +49,7 @@ void JitILAsmRoutineManager::Generate() const u8 *outer_loop = GetCodePtr(); ABI_CallFunction(reinterpret_cast(&CoreTiming::Advance)); FixupBranch skipToRealDispatch = J(); //skip the sync and compare first time - + dispatcher = GetCodePtr(); //This is the place for CPUCompare! @@ -161,7 +161,7 @@ void JitILAsmRoutineManager::Generate() JMP(dispatcherNoCheck); // no point in special casing this //FP blocks test for FPU available, jump here if false - fpException = AlignCode4(); + fpException = AlignCode4(); MOV(32, R(EAX), M(&PC)); MOV(32, M(&NPC), R(EAX)); LOCK(); @@ -175,14 +175,14 @@ void JitILAsmRoutineManager::Generate() doTiming = GetCodePtr(); ABI_CallFunction(reinterpret_cast(&CoreTiming::Advance)); - + testExceptions = GetCodePtr(); MOV(32, R(EAX), M(&PC)); MOV(32, M(&NPC), R(EAX)); ABI_CallFunction(reinterpret_cast(&PowerPC::CheckExceptions)); MOV(32, R(EAX), M(&NPC)); MOV(32, M(&PC), R(EAX)); - + TEST(32, M((void*)PowerPC::GetStatePtr()), Imm32(0xFFFFFFFF)); J_CC(CC_Z, outer_loop, true); //Landing pad for drec space @@ -214,7 +214,7 @@ void JitILAsmRoutineManager::GenerateCommon() GenQuantizedStores(); GenQuantizedSingleStores(); - //CMPSD(R(XMM0), M(&zero), + //CMPSD(R(XMM0), M(&zero), // TODO // Fast write routines - special case the most common hardware write diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.h b/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.h index cf4dd6e155..f2c30a78e8 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.h +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitILAsm.h @@ -18,7 +18,7 @@ // 3) Can optimize code at runtime for the specific CPU model. // There aren't really any disadvantages other than having to maintain a x86 emitter, // which we have to do anyway :) -// +// // To add a new asm routine, just add another const here, and add the code to Generate. // Also, possibly increase the size of the code buffer. diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp index 7ca1ad5a53..a9ed852452 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/JitIL_Tables.cpp @@ -29,7 +29,7 @@ struct GekkoOPTemplate //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out }; -static GekkoOPTemplate primarytable[] = +static GekkoOPTemplate primarytable[] = { {4, &JitIL::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, {19, &JitIL::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, @@ -110,7 +110,7 @@ static GekkoOPTemplate primarytable[] = {58, &JitIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, }; -static GekkoOPTemplate table4[] = +static GekkoOPTemplate table4[] = { //SUBOP10 {0, &JitIL::Default}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, {32, &JitIL::Default}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, @@ -126,9 +126,9 @@ static GekkoOPTemplate table4[] = {624, &JitIL::ps_mergeXX}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, {1014, &JitIL::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, -}; +}; -static GekkoOPTemplate table4_2[] = +static GekkoOPTemplate table4_2[] = { {10, &JitIL::ps_sum}, //"ps_sum0", OPTYPE_PS, 0}}, {11, &JitIL::ps_sum}, //"ps_sum1", OPTYPE_PS, 0}}, @@ -150,15 +150,15 @@ static GekkoOPTemplate table4_2[] = }; -static GekkoOPTemplate table4_3[] = +static GekkoOPTemplate table4_3[] = { {6, &JitIL::Default}, //"psq_lx", OPTYPE_PS, 0}}, {7, &JitIL::Default}, //"psq_stx", OPTYPE_PS, 0}}, {38, &JitIL::Default}, //"psq_lux", OPTYPE_PS, 0}}, - {39, &JitIL::Default}, //"psq_stux", OPTYPE_PS, 0}}, + {39, &JitIL::Default}, //"psq_stux", OPTYPE_PS, 0}}, }; -static GekkoOPTemplate table19[] = +static GekkoOPTemplate table19[] = { {528, &JitIL::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, {16, &JitIL::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, @@ -170,16 +170,16 @@ static GekkoOPTemplate table19[] = {449, &JitIL::crXX}, //"cror", OPTYPE_CR, FL_EVIL}}, {417, &JitIL::crXX}, //"crorc", OPTYPE_CR, FL_EVIL}}, {193, &JitIL::crXX}, //"crxor", OPTYPE_CR, FL_EVIL}}, - + {150, &JitIL::DoNothing}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, {0, &JitIL::mcrf}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, - + {50, &JitIL::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, {18, &JitIL::Default}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} }; -static GekkoOPTemplate table31[] = +static GekkoOPTemplate table31[] = { {28, &JitIL::boolX}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, {60, &JitIL::boolX}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, @@ -253,7 +253,7 @@ static GekkoOPTemplate table31[] = {661, &JitIL::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, {725, &JitIL::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, - // fp load/store + // fp load/store {535, &JitIL::lfsx}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, {567, &JitIL::Default}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, {599, &JitIL::Default}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, @@ -291,8 +291,8 @@ static GekkoOPTemplate table31[] = {566, &JitIL::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, }; -static GekkoOPTemplate table31_2[] = -{ +static GekkoOPTemplate table31_2[] = +{ {266, &JitIL::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {778, &JitIL::addx}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {10, &JitIL::Default}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, @@ -319,21 +319,21 @@ static GekkoOPTemplate table31_2[] = {200, &JitIL::Default}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, }; -static GekkoOPTemplate table59[] = +static GekkoOPTemplate table59[] = { - {18, &JitIL::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, - {20, &JitIL::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &JitIL::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {18, &JitIL::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, + {20, &JitIL::fp_arith_s}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &JitIL::fp_arith_s}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, // {22, &JitIL::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, // Not implemented on gekko - {24, &JitIL::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &JitIL::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &JitIL::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &JitIL::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &JitIL::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &JitIL::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; + {24, &JitIL::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &JitIL::fp_arith_s}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &JitIL::fmaddXX}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &JitIL::fmaddXX}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &JitIL::fmaddXX}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &JitIL::fmaddXX}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; -static GekkoOPTemplate table63[] = +static GekkoOPTemplate table63[] = { {264, &JitIL::fsign}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, {32, &JitIL::fcmpx}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -353,7 +353,7 @@ static GekkoOPTemplate table63[] = {711, &JitIL::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, }; -static GekkoOPTemplate table63_2[] = +static GekkoOPTemplate table63_2[] = { {18, &JitIL::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, {20, &JitIL::Default}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -397,9 +397,9 @@ void InitTables() return; //clear - for (int i = 0; i < 32; i++) + for (auto& tpl : dynaOpTable59) { - dynaOpTable59[i] = &JitIL::unknown_instruction; + tpl = &JitIL::unknown_instruction; } for (int i = 0; i < 1024; i++) @@ -407,81 +407,81 @@ void InitTables() dynaOpTable4 [i] = &JitIL::unknown_instruction; dynaOpTable19[i] = &JitIL::unknown_instruction; dynaOpTable31[i] = &JitIL::unknown_instruction; - dynaOpTable63[i] = &JitIL::unknown_instruction; + dynaOpTable63[i] = &JitIL::unknown_instruction; } - for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : primarytable) { - dynaOpTable[primarytable[i].opcode] = primarytable[i].Inst; + dynaOpTable[tpl.opcode] = tpl.Inst; } for (int i = 0; i < 32; i++) { int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table4_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table4_2) { - int op = fill+table4_2[j].opcode; - dynaOpTable4[op] = table4_2[j].Inst; + int op = fill+tpl.opcode; + dynaOpTable4[op] = tpl.Inst; } } for (int i = 0; i < 16; i++) { int fill = i << 6; - for (int j = 0; j < (int)(sizeof(table4_3) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table4_3) { - int op = fill+table4_3[j].opcode; - dynaOpTable4[op] = table4_3[j].Inst; + int op = fill+tpl.opcode; + dynaOpTable4[op] = tpl.Inst; } } - for (int i = 0; i < (int)(sizeof(table4) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table4) { - int op = table4[i].opcode; - dynaOpTable4[op] = table4[i].Inst; + int op = tpl.opcode; + dynaOpTable4[op] = tpl.Inst; } - for (int i = 0; i < (int)(sizeof(table31) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table31) { - int op = table31[i].opcode; - dynaOpTable31[op] = table31[i].Inst; + int op = tpl.opcode; + dynaOpTable31[op] = tpl.Inst; } for (int i = 0; i < 1; i++) { int fill = i << 9; - for (int j = 0; j < (int)(sizeof(table31_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table31_2) { - int op = fill + table31_2[j].opcode; - dynaOpTable31[op] = table31_2[j].Inst; + int op = fill + tpl.opcode; + dynaOpTable31[op] = tpl.Inst; } } - for (int i = 0; i < (int)(sizeof(table19) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table19) { - int op = table19[i].opcode; - dynaOpTable19[op] = table19[i].Inst; + int op = tpl.opcode; + dynaOpTable19[op] = tpl.Inst; } - for (int i = 0; i < (int)(sizeof(table59) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table59) { - int op = table59[i].opcode; - dynaOpTable59[op] = table59[i].Inst; + int op = tpl.opcode; + dynaOpTable59[op] = tpl.Inst; } - for (int i = 0; i < (int)(sizeof(table63) / sizeof(GekkoOPTemplate)); i++) + for (auto& tpl : table63) { - int op = table63[i].opcode; - dynaOpTable63[op] = table63[i].Inst; + int op = tpl.opcode; + dynaOpTable63[op] = tpl.Inst; } for (int i = 0; i < 32; i++) { int fill = i << 5; - for (int j = 0; j < (int)(sizeof(table63_2) / sizeof(GekkoOPTemplate)); j++) + for (auto& tpl : table63_2) { - int op = fill + table63_2[j].opcode; - dynaOpTable63[op] = table63_2[j].Inst; + int op = fill + tpl.opcode; + dynaOpTable63[op] = tpl.Inst; } } diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp index c7cdb81d21..4083a383e9 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.cpp @@ -54,7 +54,7 @@ void JitArm::Init() jo.optimizeGatherPipe = true; } -void JitArm::ClearCache() +void JitArm::ClearCache() { ClearCodeSpace(); blocks.Clear(); @@ -93,7 +93,7 @@ void JitArm::HLEFunction(UGeckoInstruction _inst) fpr.Flush(); MOVI2R(R0, js.compilerPC); MOVI2R(R1, _inst.hex); - QuickCallFunction(R14, (void*)&HLE::Execute); + QuickCallFunction(R14, (void*)&HLE::Execute); ARMReg rA = gpr.GetReg(); LDR(rA, R9, PPCSTATE_OFF(npc)); WriteExitDestInR(rA); @@ -158,7 +158,7 @@ void JitArm::DoDownCount() } gpr.Unlock(rA, rB); } -void JitArm::WriteExitDestInR(ARMReg Reg) +void JitArm::WriteExitDestInR(ARMReg Reg) { STR(Reg, R9, PPCSTATE_OFF(pc)); Cleanup(); @@ -167,7 +167,7 @@ void JitArm::WriteExitDestInR(ARMReg Reg) B(Reg); gpr.Unlock(Reg); } -void JitArm::WriteRfiExitDestInR(ARMReg Reg) +void JitArm::WriteRfiExitDestInR(ARMReg Reg) { STR(Reg, R9, PPCSTATE_OFF(pc)); Cleanup(); @@ -190,27 +190,27 @@ void JitArm::WriteExit(u32 destination, int exit_num) { Cleanup(); - DoDownCount(); + DoDownCount(); //If nobody has taken care of this yet (this can be removed when all branches are done) JitBlock *b = js.curBlock; b->exitAddress[exit_num] = destination; b->exitPtrs[exit_num] = GetWritableCodePtr(); - + // Link opportunity! int block = blocks.GetBlockNumberFromStartAddress(destination); - if (block >= 0 && jo.enableBlocklink) + if (block >= 0 && jo.enableBlocklink) { // It exists! Joy of joy! B(blocks.GetBlock(block)->checkedEntry); b->linkStatus[exit_num] = true; } - else + else { ARMReg A = gpr.GetReg(false); MOVI2R(A, destination); STR(A, R9, PPCSTATE_OFF(pc)); MOVI2R(A, (u32)asm_routines.dispatcher); - B(A); + B(A); } } @@ -247,11 +247,11 @@ void JitArm::Trace() sprintf(reg, "f%02d: %016x ", i, riPS0(i)); strncat(fregs, reg, 750); } -#endif +#endif - DEBUG_LOG(DYNA_REC, "JITARM PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s", - PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], - PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, + DEBUG_LOG(DYNA_REC, "JITARM PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s", + PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], + PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, PowerPC::ppcState.msr, PowerPC::ppcState.spr[8], regs, fregs); } @@ -354,7 +354,7 @@ const u8* JitArm::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBlo } PPCAnalyst::CodeOp *ops = code_buf->codebuffer; - const u8 *start = GetCodePtr(); + const u8 *start = GetCodePtr(); b->checkedEntry = start; b->runCount = 0; @@ -389,7 +389,7 @@ const u8* JitArm::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBlo MOVI2R(A, (u32)asm_routines.fpException); B(A); SetCC(); - gpr.Unlock(A, C); + gpr.Unlock(A, C); } // Conditionally add profiling code. if (Profiler::g_ProfileBlocks) { @@ -398,7 +398,7 @@ const u8* JitArm::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBlo MOVI2R(rA, (u32)&b->runCount); // Load in to register LDR(rB, rA); // Load the actual value in to R11. ADD(rB, rB, 1); // Add one to the value - STR(rB, rA); // Now store it back in the memory location + STR(rB, rA); // Now store it back in the memory location // get start tic PROFILER_QUERY_PERFORMANCE_COUNTER(&b->ticStart); gpr.Unlock(rA, rB); @@ -498,7 +498,7 @@ const u8* JitArm::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBlo printf("Broken Block going to 0x%08x\n", nextPC); WriteExit(nextPC, 0); } - + b->flags = js.block_flags; b->codeSize = (u32)(GetCodePtr() - normalEntry); b->originalSize = size; diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h index 06ebccd85c..fc1911c5bf 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h +++ b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h @@ -47,8 +47,8 @@ if (Core::g_CoreStartupParameter.bJITOff || \ Core::g_CoreStartupParameter.setting) \ {Default(inst); return;} -#define PPCSTATE_OFF(elem) ((s32)STRUCT_OFF(PowerPC::ppcState, elem) - (s32)STRUCT_OFF(PowerPC::ppcState, spr[0])) -class JitArm : public JitBase, public ArmGen::ARMXCodeBlock +#define PPCSTATE_OFF(elem) ((s32)STRUCT_OFF(PowerPC::ppcState, elem) - (s32)STRUCT_OFF(PowerPC::ppcState, spr[0])) +class JitArm : public JitBase, public ArmGen::ARMXCodeBlock { private: JitArmBlockCache blocks; @@ -67,7 +67,7 @@ private: void PrintDebug(UGeckoInstruction inst, u32 level); - void Helper_UpdateCR1(ARMReg fpscr, ARMReg temp); + void Helper_UpdateCR1(ARMReg fpscr, ARMReg temp); void SetFPException(ARMReg Reg, u32 Exception); public: @@ -81,7 +81,7 @@ public: void Jit(u32 em_address); const u8* DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBlock *b); - + JitBaseBlockCache *GetBlockCache() { return &blocks; } const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx); @@ -93,10 +93,10 @@ public: void ClearCache(); const u8 *GetDispatcher() { - return asm_routines.dispatcher; + return asm_routines.dispatcher; } CommonAsmRoutinesBase *GetAsmRoutines() { - return &asm_routines; + return &asm_routines; } const char *GetName() { @@ -154,7 +154,7 @@ public: void sc(UGeckoInstruction _inst); void rfi(UGeckoInstruction _inst); void bcctrx(UGeckoInstruction _inst); - + // Integer void arith(UGeckoInstruction _inst); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_BackPatch.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_BackPatch.cpp index 34eb69a540..bb085e96a8 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_BackPatch.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_BackPatch.cpp @@ -26,7 +26,7 @@ // This generates some fairly heavy trampolines, but: // 1) It's really necessary. We don't know anything about the context. -// 2) It doesn't really hurt. Only instructions that access I/O will get these, and there won't be +// 2) It doesn't really hurt. Only instructions that access I/O will get these, and there won't be // that many of them in a typical program/game. bool DisamLoadStore(const u32 inst, ARMReg &rD, u8 &accessSize, bool &Store) { @@ -81,7 +81,7 @@ const u8 *JitArm::BackPatch(u8 *codePtr, u32, void *ctx_void) { // TODO: This ctx needs to be filled with our information SContext *ctx = (SContext *)ctx_void; - + // We need to get the destination register before we start u32 Value = *(u32*)codePtr; ARMReg rD; @@ -114,7 +114,7 @@ const u8 *JitArm::BackPatch(u8 *codePtr, u32, void *ctx_void) } emitter.PUSH(4, R0, R1, R2, R3); // 3 emitter.MOV(R0, rD); // Value - 4 - emitter.MOV(R1, R10); // Addr- 5 + emitter.MOV(R1, R10); // Addr- 5 emitter.BL(R14); // 6 emitter.POP(4, R0, R1, R2, R3); // 7 u32 newPC = ctx->CTX_PC - (ARMREGOFFSET + 4 * 4); @@ -129,13 +129,13 @@ const u8 *JitArm::BackPatch(u8 *codePtr, u32, void *ctx_void) switch (accessSize) { case 8: // 8bit - emitter.MOVI2R(R14, (u32)&Memory::Read_U8, false); // 2 + emitter.MOVI2R(R14, (u32)&Memory::Read_U8, false); // 2 break; case 16: // 16bit - emitter.MOVI2R(R14, (u32)&Memory::Read_U16, false); // 2 + emitter.MOVI2R(R14, (u32)&Memory::Read_U16, false); // 2 break; case 32: // 32bit - emitter.MOVI2R(R14, (u32)&Memory::Read_U32, false); // 2 + emitter.MOVI2R(R14, (u32)&Memory::Read_U32, false); // 2 break; } emitter.PUSH(4, R0, R1, R2, R3); // 3 diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp index dc24366df7..1879e4af85 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Branch.cpp @@ -30,12 +30,12 @@ // No need for a disable-mechanism. // If defined, clears CR0 at blr and bl-s. If the assumption that -// flags never carry over between functions holds, then the task for +// flags never carry over between functions holds, then the task for // an optimizer becomes much easier. // #define ACID_TEST -// Zelda and many more games seem to pass the Acid Test. +// Zelda and many more games seem to pass the Acid Test. using namespace ArmGen; @@ -65,7 +65,7 @@ void JitArm::rfi(UGeckoInstruction inst) gpr.Flush(); fpr.Flush(); - + // See Interpreter rfi for details const u32 mask = 0x87C0FFFF; const u32 clearMSR13 = 0xFFFBFFFF; // Mask used to clear the bit MSR[13] @@ -93,7 +93,7 @@ void JitArm::rfi(UGeckoInstruction inst) STR(rB, R9, PPCSTATE_OFF(msr)); // STR rB in to rA LDR(rA, R9, PPCSTATE_OFF(spr[SPR_SRR0])); - + gpr.Unlock(rB, rC, rD); WriteRfiExitDestInR(rA); // rA gets unlocked here //AND(32, M(&MSR), Imm32((~mask) & clearMSR13)); @@ -145,7 +145,12 @@ void JitArm::bx(UGeckoInstruction inst) // CALL(ProtectFunction(&CoreTiming::Idle, 0)); // JMP(Asm::testExceptions, true); // make idle loops go faster - js.downcountAmount += 8; + MOVI2R(R14, (u32)&CoreTiming::Idle); + BL(R14); + MOVI2R(R14, js.compilerPC); + STR(R14, R9, PPCSTATE_OFF(pc)); + MOVI2R(R14, (u32)asm_routines.testExceptions); + B(R14); } WriteExit(destination, 0); } @@ -168,7 +173,7 @@ void JitArm::bcx(UGeckoInstruction inst) LDR(rB, R9, PPCSTATE_OFF(spr[SPR_CTR])); SUBS(rB, rB, 1); STR(rB, R9, PPCSTATE_OFF(spr[SPR_CTR])); - + //SUB(32, M(&CTR), Imm8(1)); if (inst.BO & BO_BRANCH_IF_CTR_0) pCTRDontBranch = B_CC(CC_NEQ); @@ -183,7 +188,7 @@ void JitArm::bcx(UGeckoInstruction inst) TST(rA, 8 >> (inst.BI & 3)); //TEST(8, M(&PowerPC::ppcState.cr_fast[inst.BI >> 2]), Imm8(8 >> (inst.BI & 3))); - if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch + if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch pConditionDontBranch = B_CC(CC_EQ); // Zero else pConditionDontBranch = B_CC(CC_NEQ); // Not Zero @@ -248,7 +253,7 @@ void JitArm::bcctrx(UGeckoInstruction inst) // BO_2 == 011zy -> b if true ARMReg rA = gpr.GetReg(); ARMReg rB = gpr.GetReg(); - + LDRB(rA, R9, PPCSTATE_OFF(cr_fast) + (inst.BI >> 2)); TST(rA, 8 >> (inst.BI & 3)); CCFlags branch; @@ -301,7 +306,7 @@ void JitArm::bclrx(UGeckoInstruction inst) LDR(rB, R9, PPCSTATE_OFF(spr[SPR_CTR])); SUBS(rB, rB, 1); STR(rB, R9, PPCSTATE_OFF(spr[SPR_CTR])); - + //SUB(32, M(&CTR), Imm8(1)); if (inst.BO & BO_BRANCH_IF_CTR_0) pCTRDontBranch = B_CC(CC_NEQ); @@ -315,7 +320,7 @@ void JitArm::bclrx(UGeckoInstruction inst) LDRB(rA, R9, PPCSTATE_OFF(cr_fast) + (inst.BI >> 2)); TST(rA, 8 >> (inst.BI & 3)); //TEST(8, M(&PowerPC::ppcState.cr_fast[inst.BI >> 2]), Imm8(8 >> (inst.BI & 3))); - if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch + if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch pConditionDontBranch = B_CC(CC_EQ); // Zero else pConditionDontBranch = B_CC(CC_NEQ); // Not Zero @@ -328,7 +333,7 @@ void JitArm::bclrx(UGeckoInstruction inst) // AND(32, M(&PowerPC::ppcState.cr), Imm32(~(0xFF000000))); #endif - //MOV(32, R(EAX), M(&LR)); + //MOV(32, R(EAX), M(&LR)); //AND(32, R(EAX), Imm32(0xFFFFFFFC)); LDR(rA, R9, PPCSTATE_OFF(spr[SPR_LR])); BIC(rA, rA, 0x3); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FPUtils.h b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FPUtils.h index c186ae9696..52815f571b 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FPUtils.h +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FPUtils.h @@ -19,7 +19,7 @@ static Operand2 FXMask(2, 1); // 0x80000000 static Operand2 VEMask(0x40, 0); // 0x40 static Operand2 XXException(2, 4); // 0x2000000 -static Operand2 CVIException(1, 0xC); // 0x100 +static Operand2 CVIException(1, 0xC); // 0x100 static Operand2 NANException(1, 4); // 0x1000000 static Operand2 VXVCException(8, 8); // 0x80000 static Operand2 ZXException(1, 3); // 0x4000000 @@ -58,7 +58,7 @@ inline void JitArm::SetFPException(ARMReg Reg, u32 Exception) ORR(Reg, Reg, *ExceptionMask); CMP(rB, Reg); SetCC(CC_NEQ); - ORR(Reg, Reg, FXMask); // If exception is set, set exception bit + ORR(Reg, Reg, FXMask); // If exception is set, set exception bit SetCC(); BIC(Reg, Reg, FRFIMask); gpr.Unlock(rB); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FloatingPoint.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FloatingPoint.cpp index e27bb90e69..28e9723333 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FloatingPoint.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_FloatingPoint.cpp @@ -49,7 +49,7 @@ void JitArm::fctiwx(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); ARMReg V1 = fpr.GetReg(); ARMReg V2 = fpr.GetReg(); - + ARMReg rA = gpr.GetReg(); ARMReg fpscrReg = gpr.GetReg(); @@ -82,7 +82,7 @@ void JitArm::fctiwx(UGeckoInstruction inst) // Within ranges, convert to integer // Set rounding mode first // PPC <-> ARM rounding modes - // 0, 1, 2, 3 <-> 0, 3, 1, 2 + // 0, 1, 2, 3 <-> 0, 3, 1, 2 ARMReg rB = gpr.GetReg(); VMRS(rA); // Bits 22-23 @@ -91,7 +91,7 @@ void JitArm::fctiwx(UGeckoInstruction inst) LDR(rB, R9, PPCSTATE_OFF(fpscr)); AND(rB, rB, 0x3); // Get the FPSCR rounding bits CMP(rB, 1); - SetCC(CC_EQ); // zero + SetCC(CC_EQ); // zero ORR(rA, rA, Operand2(3, 5)); SetCC(CC_NEQ); CMP(rB, 2); // +inf @@ -101,10 +101,10 @@ void JitArm::fctiwx(UGeckoInstruction inst) CMP(rB, 3); // -inf SetCC(CC_EQ); ORR(rA, rA, Operand2(2, 5)); - SetCC(); + SetCC(); VMSR(rA); ORR(rA, rA, Operand2(3, 5)); - VCVT(vD, vB, TO_INT | IS_SIGNED); + VCVT(vD, vB, TO_INT | IS_SIGNED); VMSR(rA); gpr.Unlock(rB); VCMPE(vD, vB); @@ -114,7 +114,7 @@ void JitArm::fctiwx(UGeckoInstruction inst) BIC(fpscrReg, fpscrReg, FRFIMask); FixupBranch DoneEqual = B(); SetCC(); - SetFPException(fpscrReg, FPSCR_XX); + SetFPException(fpscrReg, FPSCR_XX); ORR(fpscrReg, fpscrReg, FIMask); VABS(V1, vB); VABS(V2, vD); @@ -156,7 +156,7 @@ void JitArm::fctiwzx(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); ARMReg V1 = fpr.GetReg(); ARMReg V2 = fpr.GetReg(); - + ARMReg rA = gpr.GetReg(); ARMReg fpscrReg = gpr.GetReg(); @@ -187,7 +187,7 @@ void JitArm::fctiwzx(UGeckoInstruction inst) SetJumpTarget(noException); } // Within ranges, convert to integer - VCVT(vD, vB, TO_INT | IS_SIGNED | ROUND_TO_ZERO); + VCVT(vD, vB, TO_INT | IS_SIGNED | ROUND_TO_ZERO); VCMPE(vD, vB); VMRS(_PC); @@ -195,7 +195,7 @@ void JitArm::fctiwzx(UGeckoInstruction inst) BIC(fpscrReg, fpscrReg, FRFIMask); FixupBranch DoneEqual = B(); SetCC(); - SetFPException(fpscrReg, FPSCR_XX); + SetFPException(fpscrReg, FPSCR_XX); ORR(fpscrReg, fpscrReg, FIMask); VABS(V1, vB); VABS(V2, vD); @@ -247,29 +247,29 @@ void JitArm::fcmpo(UGeckoInstruction inst) VCMPE(vA, vB); VMRS(_PC); SetCC(CC_LT); - ORR(fpscrReg, fpscrReg, LessThan); + ORR(fpscrReg, fpscrReg, LessThan); MOV(crReg, 8); Done1 = B(); SetCC(CC_GT); - ORR(fpscrReg, fpscrReg, GreaterThan); + ORR(fpscrReg, fpscrReg, GreaterThan); MOV(crReg, 4); Done2 = B(); SetCC(CC_EQ); - ORR(fpscrReg, fpscrReg, EqualTo); + ORR(fpscrReg, fpscrReg, EqualTo); MOV(crReg, 2); Done3 = B(); SetCC(); - - ORR(fpscrReg, fpscrReg, NANRes); + + ORR(fpscrReg, fpscrReg, NANRes); MOV(crReg, 1); - + VCMPE(vA, vA); VMRS(_PC); - FixupBranch NanA = B_CC(CC_NEQ); + FixupBranch NanA = B_CC(CC_NEQ); VCMPE(vB, vB); VMRS(_PC); FixupBranch NanB = B_CC(CC_NEQ); - + SetFPException(fpscrReg, FPSCR_VXVC); FixupBranch Done4 = B(); @@ -277,9 +277,9 @@ void JitArm::fcmpo(UGeckoInstruction inst) SetJumpTarget(NanB); SetFPException(fpscrReg, FPSCR_VXSNAN); - + TST(fpscrReg, VEMask); - + FixupBranch noVXVC = B_CC(CC_NEQ); SetFPException(fpscrReg, FPSCR_VXVC); @@ -316,25 +316,25 @@ void JitArm::fcmpu(UGeckoInstruction inst) VCMPE(vA, vB); VMRS(_PC); SetCC(CC_LT); - ORR(fpscrReg, fpscrReg, LessThan); + ORR(fpscrReg, fpscrReg, LessThan); MOV(crReg, 8); Done1 = B(); SetCC(CC_GT); - ORR(fpscrReg, fpscrReg, GreaterThan); + ORR(fpscrReg, fpscrReg, GreaterThan); MOV(crReg, 4); Done2 = B(); SetCC(CC_EQ); - ORR(fpscrReg, fpscrReg, EqualTo); + ORR(fpscrReg, fpscrReg, EqualTo); MOV(crReg, 2); Done3 = B(); SetCC(); - - ORR(fpscrReg, fpscrReg, NANRes); + + ORR(fpscrReg, fpscrReg, NANRes); MOV(crReg, 1); - + VCMPE(vA, vA); VMRS(_PC); - FixupBranch NanA = B_CC(CC_NEQ); + FixupBranch NanA = B_CC(CC_NEQ); VCMPE(vB, vB); VMRS(_PC); FixupBranch NanB = B_CC(CC_NEQ); @@ -344,7 +344,7 @@ void JitArm::fcmpu(UGeckoInstruction inst) SetJumpTarget(NanB); SetFPException(fpscrReg, FPSCR_VXSNAN); - + SetJumpTarget(Done1); SetJumpTarget(Done2); SetJumpTarget(Done3); @@ -546,7 +546,7 @@ void JitArm::fmaddsx(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); VMOV(V0, vB0); - + VMLA(V0, vA0, vC0); VMOV(vD0, V0); @@ -575,7 +575,7 @@ void JitArm::fmaddx(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); VMOV(V0, vB0); - + VMLA(V0, vA0, vC0); VMOV(vD0, V0); @@ -603,7 +603,7 @@ void JitArm::fnmaddx(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); VMOV(V0, vB0); - + VMLA(V0, vA0, vC0); VNEG(vD0, V0); @@ -631,7 +631,7 @@ void JitArm::fnmaddsx(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); VMOV(V0, vB0); - + VMLA(V0, vA0, vC0); VNEG(vD0, V0); @@ -661,7 +661,7 @@ void JitArm::fresx(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); MOVI2R(V0, 1.0, INVALID_REG); // temp reg isn't needed for 1.0 - + VDIV(vD1, V0, vB0); VDIV(vD0, V0, vB0); fpr.Unlock(V0); @@ -671,7 +671,7 @@ void JitArm::fselx(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -681,7 +681,7 @@ void JitArm::fselx(UGeckoInstruction inst) ARMReg vB0 = fpr.R0(b); ARMReg vC0 = fpr.R0(c); ARMReg vD0 = fpr.R0(d, false); - + VCMP(vA0); VMRS(_PC); @@ -715,7 +715,7 @@ void JitArm::frsqrtex(UGeckoInstruction inst) VCMP(vB0); VMRS(_PC); FixupBranch Less0 = B_CC(CC_LT); - VMOV(vD0, V0); + VMOV(vD0, V0); SetFPException(fpscrReg, FPSCR_VXSQRT); FixupBranch SkipOrr0 = B(); SetJumpTarget(Less0); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp index 0df1cd965e..4d79dc037e 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp @@ -212,7 +212,7 @@ void JitArm::arith(UGeckoInstruction inst) bool carry = false; bool isUnsigned = false; bool shiftedImm = false; - + switch (inst.OPCD) { case 7: // mulli @@ -237,7 +237,7 @@ void JitArm::arith(UGeckoInstruction inst) carry = true; break; case 15: // addis - shiftedImm = true; + shiftedImm = true; case 14: // addi if (a) { @@ -253,7 +253,7 @@ void JitArm::arith(UGeckoInstruction inst) Imm[0] = 0; } isImm[1] = true; - Imm[1] = inst.SIMM_16 << (shiftedImm ? 16 : 0); + Imm[1] = inst.SIMM_16 << (shiftedImm ? 16 : 0); break; case 25: // oris shiftedImm = true; @@ -264,7 +264,7 @@ void JitArm::arith(UGeckoInstruction inst) Imm[0] = gpr.GetImm(s); } isImm[1] = true; - Imm[1] = inst.UIMM << (shiftedImm ? 16 : 0); + Imm[1] = inst.UIMM << (shiftedImm ? 16 : 0); break; case 27: // xoris shiftedImm = true; @@ -275,7 +275,7 @@ void JitArm::arith(UGeckoInstruction inst) Imm[0] = gpr.GetImm(s); } isImm[1] = true; - Imm[1] = inst.UIMM << (shiftedImm ? 16 : 0); + Imm[1] = inst.UIMM << (shiftedImm ? 16 : 0); break; case 29: // andis_rc shiftedImm = true; @@ -286,7 +286,7 @@ void JitArm::arith(UGeckoInstruction inst) Imm[0] = gpr.GetImm(s); } isImm[1] = true; - Imm[1] = inst.UIMM << (shiftedImm ? 16 : 0); + Imm[1] = inst.UIMM << (shiftedImm ? 16 : 0); Rc = true; break; @@ -296,13 +296,13 @@ void JitArm::arith(UGeckoInstruction inst) case 24: // slwx case 28: // andx case 60: // andcx - case 124: // norx + case 124: // norx case 284: // eqvx case 316: // xorx - case 412: // orcx + case 412: // orcx case 444: // orx case 476: // nandx - case 536: // srwx + case 536: // srwx case 792: // srawx if (gpr.IsImm(s)) { @@ -441,7 +441,7 @@ void JitArm::arith(UGeckoInstruction inst) } break; } - if (carry) ComputeCarry(hasCarry); + if (carry) ComputeCarry(hasCarry); if (Rc) ComputeRC(gpr.GetImm(dest), 0); return; } @@ -517,7 +517,7 @@ void JitArm::arith(UGeckoInstruction inst) gpr.Unlock(rA); } break; - case 31: + case 31: switch(inst.SUBOP10) { case 24: @@ -599,13 +599,13 @@ void JitArm::arith(UGeckoInstruction inst) RA = gpr.R(a); RS = gpr.R(s); RB = gpr.R(b); - LSRS(RA, RS, RB); + LSRS(RA, RS, RB); break; case 792: RA = gpr.R(a); RS = gpr.R(s); RB = gpr.R(b); - ASRS(RA, RS, RB); + ASRS(RA, RS, RB); break; case 10: // addcx case 266: @@ -644,7 +644,7 @@ void JitArm::cntlzwx(UGeckoInstruction inst) INSTRUCTION_START JITDISABLE(bJITIntegerOff) u32 a = inst.RA, s = inst.RS; - + ARMReg RA = gpr.R(a); ARMReg RS = gpr.R(s); CLZ(RA, RS); @@ -679,7 +679,7 @@ void JitArm::extshx(UGeckoInstruction inst) if (gpr.IsImm(s)) { gpr.SetImmediate(a, (u32)(s32)(s16)gpr.GetImm(s)); - if (inst.Rc) ComputeRC(gpr.GetImm(a), 0); + if (inst.Rc) ComputeRC(gpr.GetImm(a), 0); return; } ARMReg rA = gpr.R(a); @@ -699,7 +699,7 @@ void JitArm::extsbx(UGeckoInstruction inst) if (gpr.IsImm(s)) { gpr.SetImmediate(a, (u32)(s32)(s8)gpr.GetImm(s)); - if (inst.Rc) ComputeRC(gpr.GetImm(a), 0); + if (inst.Rc) ComputeRC(gpr.GetImm(a), 0); return; } ARMReg rA = gpr.R(a); @@ -720,7 +720,7 @@ void JitArm::cmp (UGeckoInstruction inst) if (gpr.IsImm(a) && gpr.IsImm(b)) { - ComputeRC((s32)gpr.GetImm(a) - (s32)gpr.GetImm(b), crf); + ComputeRC((s32)gpr.GetImm(a) - (s32)gpr.GetImm(b), crf); return; } @@ -765,7 +765,7 @@ void JitArm::cmpl(UGeckoInstruction inst) CMP(RA, RB); // Unsigned GenerateRC() - + MOV(rA, 0x2); // Result == 0 SetCC(CC_LO); MOV(rA, 0x8); // Result < 0 SetCC(CC_HI); MOV(rA, 0x4); // Result > 0 @@ -794,7 +794,7 @@ void JitArm::cmpli(UGeckoInstruction inst) CMP(RA, rA); } // Unsigned GenerateRC() - + MOV(rA, 0x2); // Result == 0 SetCC(CC_LO); MOV(rA, 0x8); // Result < 0 SetCC(CC_HI); MOV(rA, 0x4); // Result > 0 @@ -842,7 +842,7 @@ void JitArm::rlwimix(UGeckoInstruction inst) BIC (rB, RA, rA); // RA & ~mask AND (rA, rA, Shift); ORRS(RA, rB, rA); - GenerateRC(); + GenerateRC(); } else { @@ -868,7 +868,7 @@ void JitArm::rlwinmx(UGeckoInstruction inst) if (inst.Rc) { ANDS(RA, rA, Shift); - GenerateRC(); + GenerateRC(); } else AND (RA, rA, Shift); @@ -893,11 +893,11 @@ void JitArm::rlwnmx(UGeckoInstruction inst) MOV(rB, 32); SUB(rB, rB, RB); - Operand2 Shift(RS, ST_ROR, rB); // Register shifted register + Operand2 Shift(RS, ST_ROR, rB); // Register shifted register if (inst.Rc) { ANDS(RA, rA, Shift); - GenerateRC(); + GenerateRC(); } else AND (RA, rA, Shift); @@ -918,7 +918,7 @@ void JitArm::srawix(UGeckoInstruction inst) ARMReg RS = gpr.R(s); ARMReg tmp = gpr.GetReg(); Operand2 mask = Operand2(2, 2); // XER_CA_MASK - + MOV(tmp, RS); ASRS(RA, RS, amount); if (inst.Rc) diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStore.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStore.cpp index 1c5c55a369..f04c88d6c3 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStore.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStore.cpp @@ -106,13 +106,13 @@ void JitArm::SafeStoreFromReg(bool fastmem, s32 dest, u32 value, s32 regOffset, switch(accessSize) { case 32: - MOVI2R(rA, (u32)&Memory::Write_U32); + MOVI2R(rA, (u32)&Memory::Write_U32); break; case 16: - MOVI2R(rA, (u32)&Memory::Write_U16); + MOVI2R(rA, (u32)&Memory::Write_U16); break; case 8: - MOVI2R(rA, (u32)&Memory::Write_U8); + MOVI2R(rA, (u32)&Memory::Write_U8); break; } MOV(rB, RS); @@ -189,7 +189,7 @@ void JitArm::stX(UGeckoInstruction inst) accessSize = 8; break; } - SafeStoreFromReg(fastmem, zeroA ? a ? a : -1 : a, s, regOffset, accessSize, offset); + SafeStoreFromReg(fastmem, zeroA ? a ? a : -1 : a, s, regOffset, accessSize, offset); if (update) { ARMReg rA = gpr.GetReg(); @@ -268,8 +268,8 @@ void JitArm::SafeLoadToReg(bool fastmem, u32 dest, s32 addr, s32 offsetReg, int MOV(R10, gpr.R(addr)); else MOV(R10, 0); - - UnsafeLoadToReg(RD, R10, accessSize, offset); + + UnsafeLoadToReg(RD, R10, accessSize, offset); return; } ARMReg rA = gpr.GetReg(); @@ -282,17 +282,17 @@ void JitArm::SafeLoadToReg(bool fastmem, u32 dest, s32 addr, s32 offsetReg, int if (addr != -1) ADD(rA, rA, gpr.R(addr)); - + switch (accessSize) { case 8: - MOVI2R(rB, (u32)&Memory::Read_U8); + MOVI2R(rB, (u32)&Memory::Read_U8); break; case 16: - MOVI2R(rB, (u32)&Memory::Read_U16); + MOVI2R(rB, (u32)&Memory::Read_U16); break; case 32: - MOVI2R(rB, (u32)&Memory::Read_U32); + MOVI2R(rB, (u32)&Memory::Read_U32); break; } PUSH(4, R0, R1, R2, R3); @@ -323,7 +323,7 @@ void JitArm::lXX(UGeckoInstruction inst) u32 accessSize = 0; s32 offsetReg = -1; bool zeroA = true; - bool update = false; + bool update = false; bool signExtend = false; bool reverse = false; bool fastmem = false; @@ -338,7 +338,7 @@ void JitArm::lXX(UGeckoInstruction inst) update = true; case 23: // lwzx accessSize = 32; - offsetReg = b; + offsetReg = b; break; case 119: //lbzux zeroA = false; @@ -401,7 +401,7 @@ void JitArm::lXX(UGeckoInstruction inst) accessSize = 16; break; } - + // Check for exception before loading ARMReg rA = gpr.GetReg(false); @@ -410,20 +410,20 @@ void JitArm::lXX(UGeckoInstruction inst) FixupBranch DoNotLoad = B_CC(CC_EQ); SafeLoadToReg(fastmem, d, zeroA ? a ? a : -1 : a, offsetReg, accessSize, offset, signExtend, reverse); - + if (update) { rA = gpr.GetReg(false); ARMReg RA = gpr.R(a); if (offsetReg == -1) - MOVI2R(rA, offset); + MOVI2R(rA, offset); else MOV(RA, gpr.R(offsetReg)); ADD(RA, RA, rA); } SetJumpTarget(DoNotLoad); - + // LWZ idle skipping if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle && inst.OPCD == 32 && @@ -435,14 +435,14 @@ void JitArm::lXX(UGeckoInstruction inst) ARMReg RD = gpr.R(d); gpr.Flush(); fpr.Flush(); - + // if it's still 0, we can wait until the next event TST(RD, RD); FixupBranch noIdle = B_CC(CC_NEQ); - rA = gpr.GetReg(); - + rA = gpr.GetReg(); + MOVI2R(rA, (u32)&PowerPC::OnIdle); - MOVI2R(R0, PowerPC::ppcState.gpr[a] + (s32)(s16)inst.SIMM_16); + MOVI2R(R0, PowerPC::ppcState.gpr[a] + (s32)(s16)inst.SIMM_16); BL(rA); gpr.Unlock(rA); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStoreFloating.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStoreFloating.cpp index c2f2f626ac..70998ced47 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStoreFloating.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStoreFloating.cpp @@ -100,7 +100,7 @@ void JitArm::lfXX(UGeckoInstruction inst) if (offsetReg == -1) // uses SIMM_16 { MOVI2R(rB, offset); - ADD(rB, rB, RA); + ADD(rB, rB, RA); } else ADD(rB, gpr.R(offsetReg), RA); @@ -137,7 +137,7 @@ void JitArm::lfXX(UGeckoInstruction inst) LDR(rA, R9, PPCSTATE_OFF(Exceptions)); CMP(rA, EXCEPTION_DSI); FixupBranch DoNotLoad = B_CC(CC_EQ); - + if (update) MOV(RA, rB); @@ -161,24 +161,24 @@ void JitArm::lfXX(UGeckoInstruction inst) VLDR(v0, rB, 0); nemit.VREV64(I_8, v0, v0); // Byte swap to result } - } + } else { PUSH(4, R0, R1, R2, R3); MOV(R0, rB); if (single) { - MOVI2R(rA, (u32)&Memory::Read_U32); + MOVI2R(rA, (u32)&Memory::Read_U32); BL(rA); - VMOV(S0, R0); + VMOV(S0, R0); VCVT(v0, S0, 0); VCVT(v1, S0, 0); } else { - MOVI2R(rA, (u32)&Memory::Read_F64); + MOVI2R(rA, (u32)&Memory::Read_F64); BL(rA); #if !defined(__ARM_PCS_VFP) // SoftFP returns in R0 and R1 @@ -251,7 +251,7 @@ void JitArm::stfXX(UGeckoInstruction inst) } ARMReg v0 = fpr.R0(inst.FS); - + if (update) { RA = gpr.R(a); @@ -259,7 +259,7 @@ void JitArm::stfXX(UGeckoInstruction inst) if (offsetReg == -1) // uses SIMM_16 { MOVI2R(rB, offset); - ADD(rB, rB, RA); + ADD(rB, rB, RA); } else ADD(rB, gpr.R(offsetReg), RA); @@ -298,7 +298,7 @@ void JitArm::stfXX(UGeckoInstruction inst) { LDR(rA, R9, PPCSTATE_OFF(Exceptions)); CMP(rA, EXCEPTION_DSI); - + SetCC(CC_NEQ); MOV(RA, rB); SetCC(); @@ -328,7 +328,7 @@ void JitArm::stfXX(UGeckoInstruction inst) PUSH(4, R0, R1, R2, R3); if (single) { - MOVI2R(rA, (u32)&Memory::Write_U32); + MOVI2R(rA, (u32)&Memory::Write_U32); VMOV(R0, S0); MOV(R1, rB); @@ -337,7 +337,7 @@ void JitArm::stfXX(UGeckoInstruction inst) } else { - MOVI2R(rA, (u32)&Memory::Write_F64); + MOVI2R(rA, (u32)&Memory::Write_F64); #if !defined(__ARM_PCS_VFP) // SoftFP returns in R0 and R1 VMOV(R0, v0); MOV(R2, rB); @@ -366,7 +366,7 @@ void JitArm::stfs(UGeckoInstruction inst) ARMReg rB = gpr.GetReg(); ARMReg v0 = fpr.R0(inst.FS); VCVT(S0, v0, 0); - + if (inst.RA) { MOVI2R(rB, inst.SIMM_16); @@ -376,8 +376,8 @@ void JitArm::stfs(UGeckoInstruction inst) else MOVI2R(rB, (u32)inst.SIMM_16); - - MOVI2R(rA, (u32)&Memory::Write_U32); + + MOVI2R(rA, (u32)&Memory::Write_U32); PUSH(4, R0, R1, R2, R3); VMOV(R0, S0); MOV(R1, rB); @@ -385,7 +385,7 @@ void JitArm::stfs(UGeckoInstruction inst) BL(rA); POP(4, R0, R1, R2, R3); - + gpr.Unlock(rA, rB); } diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStorePaired.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStorePaired.cpp index d694fbd79b..244ae1db22 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStorePaired.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStorePaired.cpp @@ -25,7 +25,7 @@ void JitArm::psq_l(UGeckoInstruction inst) // R11 contains type // R10 is the ADDR if (js.memcheck || !Core::g_CoreStartupParameter.bFastmem) { Default(inst); return; } - + LDR(R11, R9, PPCSTATE_OFF(spr[SPR_GQR0 + inst.I])); UBFX(R12, R11, 16, 3); // Type LSL(R12, R12, 2); @@ -63,7 +63,7 @@ void JitArm::psq_lx(UGeckoInstruction inst) // R11 contains type // R10 is the ADDR if (js.memcheck || !Core::g_CoreStartupParameter.bFastmem) { Default(inst); return; } - + LDR(R11, R9, PPCSTATE_OFF(spr[SPR_GQR0 + inst.Ix])); UBFX(R12, R11, 16, 3); // Type LSL(R12, R12, 2); @@ -91,7 +91,7 @@ void JitArm::psq_lx(UGeckoInstruction inst) ARMReg vD1 = fpr.R1(inst.RS, false); LDR(R14, R9, PPCSTATE_OFF(Exceptions)); CMP(R14, EXCEPTION_DSI); - SetCC(CC_NEQ); + SetCC(CC_NEQ); VCVT(vD0, S0, 0); if (!inst.Wx) @@ -108,7 +108,7 @@ void JitArm::psq_st(UGeckoInstruction inst) bool update = inst.OPCD == 61; s32 offset = inst.SIMM_12; - + // R12 contains scale // R11 contains type // R10 is the ADDR @@ -152,7 +152,7 @@ void JitArm::psq_stx(UGeckoInstruction inst) JITDISABLE(bJITLoadStorePairedOff) bool update = inst.SUBOP10 == 39; - + // R12 contains scale // R11 contains type // R10 is the ADDR diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp index 744fbc1940..53d5e7bd8d 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp @@ -51,7 +51,7 @@ void JitArm::ps_rsqrte(UGeckoInstruction inst) VCMP(vB0); VMRS(_PC); FixupBranch Less0 = B_CC(CC_LT); - VMOV(vD0, V0); + VMOV(vD0, V0); SetFPException(fpscrReg, FPSCR_VXSQRT); FixupBranch SkipOrr0 = B(); SetJumpTarget(Less0); @@ -76,7 +76,7 @@ void JitArm::ps_rsqrte(UGeckoInstruction inst) FixupBranch noException = B_CC(CC_EQ); SetFPException(fpscrReg, FPSCR_ZX); SetJumpTarget(noException); - + VCVT(S0, vB0, 0); VCVT(S1, vB1, 0); @@ -93,7 +93,7 @@ void JitArm::ps_sel(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -107,7 +107,7 @@ void JitArm::ps_sel(UGeckoInstruction inst) ARMReg vC1 = fpr.R1(c); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); - + VCMP(vA0); VMRS(_PC); @@ -143,7 +143,7 @@ void JitArm::ps_add(UGeckoInstruction inst) ARMReg vB1 = fpr.R1(b); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); - + VADD(vD0, vA0, vB0); VADD(vD1, vA1, vB1); } @@ -163,7 +163,7 @@ void JitArm::ps_div(UGeckoInstruction inst) ARMReg vB1 = fpr.R1(b); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); - + VDIV(vD0, vA0, vB0); VDIV(vD1, vA1, vB1); } @@ -183,7 +183,7 @@ void JitArm::ps_res(UGeckoInstruction inst) ARMReg vD1 = fpr.R1(d, false); ARMReg V0 = fpr.GetReg(); MOVI2R(V0, 1.0, INVALID_REG); // temp reg not needed for 1.0 - + VDIV(vD0, V0, vB0); VDIV(vD1, V0, vB1); fpr.Unlock(V0); @@ -193,7 +193,7 @@ void JitArm::ps_nmadd(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -226,7 +226,7 @@ void JitArm::ps_madd(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -257,7 +257,7 @@ void JitArm::ps_nmsub(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -290,7 +290,7 @@ void JitArm::ps_msub(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -312,7 +312,7 @@ void JitArm::ps_msub(UGeckoInstruction inst) VMUL(V1, vA1, vC1); VSUB(vD0, V0, vB0); VSUB(vD1, V1, vB1); - + fpr.Unlock(V0); fpr.Unlock(V1); } @@ -321,7 +321,7 @@ void JitArm::ps_madds0(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -337,7 +337,7 @@ void JitArm::ps_madds0(UGeckoInstruction inst) ARMReg V0 = fpr.GetReg(); ARMReg V1 = fpr.GetReg(); - + VMUL(V0, vA0, vC0); VMUL(V1, vA1, vC0); @@ -352,7 +352,7 @@ void JitArm::ps_madds1(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITPairedOff) - + u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD; if (inst.Rc) { @@ -392,10 +392,10 @@ void JitArm::ps_sum0(UGeckoInstruction inst) ARMReg vC1 = fpr.R1(c); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); - + VADD(vD0, vA0, vB1); VMOV(vD1, vC1); - + } void JitArm::ps_sum1(UGeckoInstruction inst) @@ -413,7 +413,7 @@ void JitArm::ps_sum1(UGeckoInstruction inst) ARMReg vC0 = fpr.R0(c); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); - + VMOV(vD0, vC0); VADD(vD1, vA0, vB1); } @@ -562,7 +562,7 @@ void JitArm::ps_merge10(UGeckoInstruction inst) ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); ARMReg V0 = fpr.GetReg(); - + VMOV(V0, vB0); VMOV(vD0, vA1); VMOV(vD1, V0); @@ -651,7 +651,7 @@ void JitArm::ps_nabs(UGeckoInstruction inst) ARMReg vB1 = fpr.R1(b); ARMReg vD0 = fpr.R0(d, false); ARMReg vD1 = fpr.R1(d, false); - + VABS(vD0, vB0); VNEG(vD0, vD0); VABS(vD1, vB1); @@ -680,25 +680,25 @@ void JitArm::ps_cmpu0(UGeckoInstruction inst) VCMPE(vA, vB); VMRS(_PC); SetCC(CC_LT); - ORR(fpscrReg, fpscrReg, LessThan); + ORR(fpscrReg, fpscrReg, LessThan); MOV(crReg, 8); Done1 = B(); SetCC(CC_GT); - ORR(fpscrReg, fpscrReg, GreaterThan); + ORR(fpscrReg, fpscrReg, GreaterThan); MOV(crReg, 4); Done2 = B(); SetCC(CC_EQ); - ORR(fpscrReg, fpscrReg, EqualTo); + ORR(fpscrReg, fpscrReg, EqualTo); MOV(crReg, 2); Done3 = B(); SetCC(); - - ORR(fpscrReg, fpscrReg, NANRes); + + ORR(fpscrReg, fpscrReg, NANRes); MOV(crReg, 1); - + VCMPE(vA, vA); VMRS(_PC); - FixupBranch NanA = B_CC(CC_NEQ); + FixupBranch NanA = B_CC(CC_NEQ); VCMPE(vB, vB); VMRS(_PC); FixupBranch NanB = B_CC(CC_NEQ); @@ -708,7 +708,7 @@ void JitArm::ps_cmpu0(UGeckoInstruction inst) SetJumpTarget(NanB); SetFPException(fpscrReg, FPSCR_VXSNAN); - + SetJumpTarget(Done1); SetJumpTarget(Done2); SetJumpTarget(Done3); @@ -741,25 +741,25 @@ void JitArm::ps_cmpu1(UGeckoInstruction inst) VCMPE(vA, vB); VMRS(_PC); SetCC(CC_LT); - ORR(fpscrReg, fpscrReg, LessThan); + ORR(fpscrReg, fpscrReg, LessThan); MOV(crReg, 8); Done1 = B(); SetCC(CC_GT); - ORR(fpscrReg, fpscrReg, GreaterThan); + ORR(fpscrReg, fpscrReg, GreaterThan); MOV(crReg, 4); Done2 = B(); SetCC(CC_EQ); - ORR(fpscrReg, fpscrReg, EqualTo); + ORR(fpscrReg, fpscrReg, EqualTo); MOV(crReg, 2); Done3 = B(); SetCC(); - - ORR(fpscrReg, fpscrReg, NANRes); + + ORR(fpscrReg, fpscrReg, NANRes); MOV(crReg, 1); - + VCMPE(vA, vA); VMRS(_PC); - FixupBranch NanA = B_CC(CC_NEQ); + FixupBranch NanA = B_CC(CC_NEQ); VCMPE(vB, vB); VMRS(_PC); FixupBranch NanB = B_CC(CC_NEQ); @@ -769,7 +769,7 @@ void JitArm::ps_cmpu1(UGeckoInstruction inst) SetJumpTarget(NanB); SetFPException(fpscrReg, FPSCR_VXSNAN); - + SetJumpTarget(Done1); SetJumpTarget(Done2); SetJumpTarget(Done3); @@ -802,29 +802,29 @@ void JitArm::ps_cmpo0(UGeckoInstruction inst) VCMPE(vA, vB); VMRS(_PC); SetCC(CC_LT); - ORR(fpscrReg, fpscrReg, LessThan); + ORR(fpscrReg, fpscrReg, LessThan); MOV(crReg, 8); Done1 = B(); SetCC(CC_GT); - ORR(fpscrReg, fpscrReg, GreaterThan); + ORR(fpscrReg, fpscrReg, GreaterThan); MOV(crReg, 4); Done2 = B(); SetCC(CC_EQ); - ORR(fpscrReg, fpscrReg, EqualTo); + ORR(fpscrReg, fpscrReg, EqualTo); MOV(crReg, 2); Done3 = B(); SetCC(); - - ORR(fpscrReg, fpscrReg, NANRes); + + ORR(fpscrReg, fpscrReg, NANRes); MOV(crReg, 1); - + VCMPE(vA, vA); VMRS(_PC); - FixupBranch NanA = B_CC(CC_NEQ); + FixupBranch NanA = B_CC(CC_NEQ); VCMPE(vB, vB); VMRS(_PC); FixupBranch NanB = B_CC(CC_NEQ); - + SetFPException(fpscrReg, FPSCR_VXVC); FixupBranch Done4 = B(); @@ -832,9 +832,9 @@ void JitArm::ps_cmpo0(UGeckoInstruction inst) SetJumpTarget(NanB); SetFPException(fpscrReg, FPSCR_VXSNAN); - + TST(fpscrReg, VEMask); - + FixupBranch noVXVC = B_CC(CC_NEQ); SetFPException(fpscrReg, FPSCR_VXVC); @@ -871,29 +871,29 @@ void JitArm::ps_cmpo1(UGeckoInstruction inst) VCMPE(vA, vB); VMRS(_PC); SetCC(CC_LT); - ORR(fpscrReg, fpscrReg, LessThan); + ORR(fpscrReg, fpscrReg, LessThan); MOV(crReg, 8); Done1 = B(); SetCC(CC_GT); - ORR(fpscrReg, fpscrReg, GreaterThan); + ORR(fpscrReg, fpscrReg, GreaterThan); MOV(crReg, 4); Done2 = B(); SetCC(CC_EQ); - ORR(fpscrReg, fpscrReg, EqualTo); + ORR(fpscrReg, fpscrReg, EqualTo); MOV(crReg, 2); Done3 = B(); SetCC(); - - ORR(fpscrReg, fpscrReg, NANRes); + + ORR(fpscrReg, fpscrReg, NANRes); MOV(crReg, 1); - + VCMPE(vA, vA); VMRS(_PC); - FixupBranch NanA = B_CC(CC_NEQ); + FixupBranch NanA = B_CC(CC_NEQ); VCMPE(vB, vB); VMRS(_PC); FixupBranch NanB = B_CC(CC_NEQ); - + SetFPException(fpscrReg, FPSCR_VXVC); FixupBranch Done4 = B(); @@ -901,9 +901,9 @@ void JitArm::ps_cmpo1(UGeckoInstruction inst) SetJumpTarget(NanB); SetFPException(fpscrReg, FPSCR_VXSNAN); - + TST(fpscrReg, VEMask); - + FixupBranch noVXVC = B_CC(CC_NEQ); SetFPException(fpscrReg, FPSCR_VXVC); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp index 13f90fb684..e4ab630fce 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp @@ -149,7 +149,7 @@ void JitArm::mtcrf(UGeckoInstruction inst) { if ((crm & (0x80 >> i)) != 0) { - UBFX(rB, rA, 28 - (i * 4), 4); + UBFX(rB, rA, 28 - (i * 4), 4); STRB(rB, R9, PPCSTATE_OFF(cr_fast[i])); } } @@ -178,7 +178,7 @@ void JitArm::mcrxr(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITSystemRegistersOff) - + ARMReg rA = gpr.GetReg(); ARMReg rB = gpr.GetReg(); // Copy XER[0-3] into CR[inst.CRFD] @@ -199,9 +199,9 @@ void JitArm::mtmsr(UGeckoInstruction inst) INSTRUCTION_START // Don't interpret this, if we do we get thrown out //JITDISABLE(bJITSystemRegistersOff) - + STR(gpr.R(inst.RS), R9, PPCSTATE_OFF(msr)); - + gpr.Flush(); fpr.Flush(); @@ -212,7 +212,7 @@ void JitArm::mfmsr(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITSystemRegistersOff) - + LDR(gpr.R(inst.RD), R9, PPCSTATE_OFF(msr)); } @@ -234,7 +234,7 @@ void JitArm::crXXX(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITSystemRegistersOff) - + ARMReg rA = gpr.GetReg(); ARMReg rB = gpr.GetReg(); // Get bit CRBA aligned with bit CRBD @@ -244,7 +244,7 @@ void JitArm::crXXX(UGeckoInstruction inst) LSL(rA, rA, -shiftA); else if (shiftA > 0) LSR(rA, rA, shiftA); - + // Get bit CRBB aligned with bit CRBD int shiftB = (inst.CRBD & 3) - (inst.CRBB & 3); LDRB(rB, R9, PPCSTATE_OFF(cr_fast[inst.CRBB >> 2])); @@ -252,7 +252,7 @@ void JitArm::crXXX(UGeckoInstruction inst) LSL(rB, rB, -shiftB); else if (shiftB > 0) LSR(rB, rB, shiftB); - + // Compute combined bit switch(inst.SUBOP10) { @@ -296,7 +296,7 @@ void JitArm::crXXX(UGeckoInstruction inst) // Store result bit in CRBD AND(rA, rA, 0x8 >> (inst.CRBD & 3)); LDRB(rB, R9, PPCSTATE_OFF(cr_fast[inst.CRBD >> 2])); - BIC(rB, rB, 0x8 >> (inst.CRBD & 3)); + BIC(rB, rB, 0x8 >> (inst.CRBD & 3)); ORR(rB, rB, rA); STRB(rB, R9, PPCSTATE_OFF(cr_fast[inst.CRBD >> 2])); gpr.Unlock(rA, rB); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp index 9eea997317..20c2dffc9c 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp @@ -42,7 +42,7 @@ struct GekkoOPTemplate //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out }; -static GekkoOPTemplate primarytable[] = +static GekkoOPTemplate primarytable[] = { {4, &JitArm::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, {19, &JitArm::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, @@ -123,7 +123,7 @@ static GekkoOPTemplate primarytable[] = {58, &JitArm::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, }; -static GekkoOPTemplate table4[] = +static GekkoOPTemplate table4[] = { //SUBOP10 {0, &JitArm::ps_cmpu0}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, {32, &JitArm::ps_cmpo0}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, @@ -139,9 +139,9 @@ static GekkoOPTemplate table4[] = {624, &JitArm::ps_merge11}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, {1014, &JitArm::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, -}; +}; -static GekkoOPTemplate table4_2[] = +static GekkoOPTemplate table4_2[] = { {10, &JitArm::ps_sum0}, //"ps_sum0", OPTYPE_PS, 0}}, {11, &JitArm::ps_sum1}, //"ps_sum1", OPTYPE_PS, 0}}, @@ -163,15 +163,15 @@ static GekkoOPTemplate table4_2[] = }; -static GekkoOPTemplate table4_3[] = +static GekkoOPTemplate table4_3[] = { {6, &JitArm::psq_lx}, //"psq_lx", OPTYPE_PS, 0}}, {7, &JitArm::psq_stx}, //"psq_stx", OPTYPE_PS, 0}}, {38, &JitArm::psq_lx}, //"psq_lux", OPTYPE_PS, 0}}, - {39, &JitArm::psq_stx}, //"psq_stux", OPTYPE_PS, 0}}, + {39, &JitArm::psq_stx}, //"psq_stux", OPTYPE_PS, 0}}, }; -static GekkoOPTemplate table19[] = +static GekkoOPTemplate table19[] = { {528, &JitArm::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, {16, &JitArm::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, @@ -183,16 +183,16 @@ static GekkoOPTemplate table19[] = {449, &JitArm::crXXX}, //"cror", OPTYPE_CR, FL_EVIL}}, {417, &JitArm::crXXX}, //"crorc", OPTYPE_CR, FL_EVIL}}, {193, &JitArm::crXXX}, //"crxor", OPTYPE_CR, FL_EVIL}}, - + {150, &JitArm::DoNothing}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, {0, &JitArm::mcrf}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, - + {50, &JitArm::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, {18, &JitArm::Break}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} }; -static GekkoOPTemplate table31[] = +static GekkoOPTemplate table31[] = { {28, &JitArm::arith}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, {60, &JitArm::arith}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, @@ -267,7 +267,7 @@ static GekkoOPTemplate table31[] = {661, &JitArm::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, {725, &JitArm::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, - // fp load/store + // fp load/store {535, &JitArm::lfXX}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, {567, &JitArm::lfXX}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, {599, &JitArm::lfXX}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, @@ -305,8 +305,8 @@ static GekkoOPTemplate table31[] = {566, &JitArm::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, }; -static GekkoOPTemplate table31_2[] = -{ +static GekkoOPTemplate table31_2[] = +{ {266, &JitArm::arith}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {778, &JitArm::arith}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {10, &JitArm::arith}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, @@ -330,21 +330,21 @@ static GekkoOPTemplate table31_2[] = {200, &JitArm::Default}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, }; -static GekkoOPTemplate table59[] = +static GekkoOPTemplate table59[] = { - {18, &JitArm::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, - {20, &JitArm::fsubsx}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &JitArm::faddsx}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {18, &JitArm::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, + {20, &JitArm::fsubsx}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &JitArm::faddsx}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, // {22, &JitArm::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, // Not implemented on gekko - {24, &JitArm::fresx}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &JitArm::fmulsx}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &JitArm::Default}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &JitArm::fmaddsx}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &JitArm::Default}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &JitArm::fnmaddsx}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; + {24, &JitArm::fresx}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &JitArm::fmulsx}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &JitArm::Default}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &JitArm::fmaddsx}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &JitArm::Default}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &JitArm::fnmaddsx}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; -static GekkoOPTemplate table63[] = +static GekkoOPTemplate table63[] = { {264, &JitArm::fabsx}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, {32, &JitArm::fcmpo}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -364,7 +364,7 @@ static GekkoOPTemplate table63[] = {711, &JitArm::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, }; -static GekkoOPTemplate table63_2[] = +static GekkoOPTemplate table63_2[] = { {18, &JitArm::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, {20, &JitArm::fsubx}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -407,7 +407,7 @@ void InitTables() return; //clear - for (int i = 0; i < 32; i++) + for (int i = 0; i < 32; i++) { dynaOpTable59[i] = &JitArm::unknown_instruction; } @@ -417,7 +417,7 @@ void InitTables() dynaOpTable4 [i] = &JitArm::unknown_instruction; dynaOpTable19[i] = &JitArm::unknown_instruction; dynaOpTable31[i] = &JitArm::unknown_instruction; - dynaOpTable63[i] = &JitArm::unknown_instruction; + dynaOpTable63[i] = &JitArm::unknown_instruction; } for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.cpp index e065342c9f..2d619ceea3 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.cpp @@ -34,9 +34,9 @@ using namespace ArmGen; //TODO - make an option //#if _DEBUG -// bool enableDebug = false; +// bool enableDebug = false; //#else -// bool enableDebug = false; +// bool enableDebug = false; //#endif JitArmAsmRoutineManager asm_routines; @@ -59,7 +59,7 @@ static const float GC_ALIGNED16(m_quantizeTableS[]) = 1.0 / (1 << 12), 1.0 / (1 << 11), 1.0 / (1 << 10), 1.0 / (1 << 9), 1.0 / (1 << 8), 1.0 / (1 << 7), 1.0 / (1 << 6), 1.0 / (1 << 5), 1.0 / (1 << 4), 1.0 / (1 << 3), 1.0 / (1 << 2), 1.0 / (1 << 1), -}; +}; static const float GC_ALIGNED16(m_dequantizeTableS[]) = { @@ -79,7 +79,7 @@ static const float GC_ALIGNED16(m_dequantizeTableS[]) = (1 << 12), (1 << 11), (1 << 10), (1 << 9), (1 << 8), (1 << 7), (1 << 6), (1 << 5), (1 << 4), (1 << 3), (1 << 2), (1 << 1), -}; +}; static void WriteDual32(u32 value1, u32 value2, u32 address) { @@ -113,15 +113,15 @@ void JitArmAsmRoutineManager::Generate() MOVI2R(R9, (u32)&PowerPC::ppcState.spr[0]); FixupBranch skipToRealDispatcher = B(); - dispatcher = GetCodePtr(); + dispatcher = GetCodePtr(); printf("Dispatcher is %p\n", dispatcher); - // Downcount Check + // Downcount Check // The result of slice decrementation should be in flags if somebody jumped here // IMPORTANT - We jump on negative, not carry!!! FixupBranch bail = B_CC(CC_MI); - SetJumpTarget(skipToRealDispatcher); + SetJumpTarget(skipToRealDispatcher); dispatcherNoCheck = GetCodePtr(); // This block of code gets the address of the compiled block of code @@ -141,8 +141,8 @@ void JitArmAsmRoutineManager::Generate() // Success, it is our Jitblock. MOVI2R(R14, (u32)jit->GetBlockCache()->GetCodePointers()); // LDR R14 right here to get CodePointers()[0] pointer. - LSL(R12, R12, 2); // Multiply by four because address locations are u32 in size - LDR(R14, R14, R12); // Load the block address in to R14 + LSL(R12, R12, 2); // Multiply by four because address locations are u32 in size + LDR(R14, R14, R12); // Load the block address in to R14 B(R14); // No need to jump anywhere after here, the block will go back to dispatcher start @@ -150,9 +150,9 @@ void JitArmAsmRoutineManager::Generate() // If we get to this point, that means that we don't have the block cached to execute // So call ArmJit to compile the block and then execute it. - MOVI2R(R14, (u32)&Jit); + MOVI2R(R14, (u32)&Jit); BL(R14); - + B(dispatcherNoCheck); // fpException() @@ -167,12 +167,12 @@ void JitArmAsmRoutineManager::Generate() B(dispatcher); SetJumpTarget(bail); - doTiming = GetCodePtr(); + doTiming = GetCodePtr(); // XXX: In JIT64, Advance() gets called /after/ the exception checking - // once it jumps back to the start of outerLoop + // once it jumps back to the start of outerLoop QuickCallFunction(R14, (void*)&CoreTiming::Advance); - // Does exception checking + // Does exception checking testExceptions = GetCodePtr(); LDR(R0, R9, PPCSTATE_OFF(pc)); STR(R0, R9, PPCSTATE_OFF(npc)); @@ -188,13 +188,13 @@ void JitArmAsmRoutineManager::Generate() FixupBranch Exit = B_CC(CC_NEQ); B(dispatcher); - + SetJumpTarget(Exit); ADD(_SP, _SP, 4); POP(9, R4, R5, R6, R7, R8, R9, R10, R11, _PC); // Returns - + GenerateCommon(); FlushIcache(); @@ -207,7 +207,7 @@ void JitArmAsmRoutineManager::GenerateCommon() // R11 is scale // R10 is the address Operand2 mask(3, 1); // ~(Memory::MEMVIEW32_MASK) - Operand2 arghmask(3, 3); // 0x0C000000 + Operand2 arghmask(3, 3); // 0x0C000000 NEONXEmitter nemit(this); const u8* loadPairedIllegal = GetCodePtr(); @@ -221,7 +221,7 @@ void JitArmAsmRoutineManager::GenerateCommon() nemit.VLD1(I_32, D0, R10); nemit.VREV32(I_8, D0, D0); - + MOV(_PC, _LR); } const u8* loadPairedFloatOne = GetCodePtr(); @@ -232,7 +232,7 @@ void JitArmAsmRoutineManager::GenerateCommon() nemit.VLD1(I_32, D0, R10); nemit.VREV32(I_8, D0, D0); - + MOV(_PC, _LR); } const u8* loadPairedU8Two = GetCodePtr(); @@ -248,17 +248,17 @@ void JitArmAsmRoutineManager::GenerateCommon() LDRH(R12, R10, 2); SXTB(R12, R12); VMOV(S1, R12); - + MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + VCVT(S0, S0, TO_FLOAT); VCVT(S1, S1, TO_FLOAT); VMUL(S0, S0, S2); VMUL(S1, S1, S2); - + MOV(_PC, _LR); } const u8* loadPairedU8One = GetCodePtr(); @@ -266,7 +266,7 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + LDRB(R12, R10); SXTB(R12, R12); VMOV(S0, R12); @@ -274,7 +274,7 @@ void JitArmAsmRoutineManager::GenerateCommon() MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + VCVT(S0, S0, TO_FLOAT); VMUL(S0, S0, S2); @@ -286,7 +286,7 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + LDRH(R12, R10); SXTB(R12, R12); VMOV(S0, R12); @@ -298,13 +298,13 @@ void JitArmAsmRoutineManager::GenerateCommon() MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + VCVT(S0, S0, TO_FLOAT | IS_SIGNED); VCVT(S1, S1, TO_FLOAT | IS_SIGNED); VMUL(S0, S0, S2); VMUL(S1, S1, S2); - + MOV(_PC, _LR); } const u8* loadPairedS8One = GetCodePtr(); @@ -312,7 +312,7 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + LDRB(R12, R10); SXTB(R12, R12); VMOV(S0, R12); @@ -320,7 +320,7 @@ void JitArmAsmRoutineManager::GenerateCommon() MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + VCVT(S0, S0, TO_FLOAT | IS_SIGNED); VMUL(S0, S0, S2); @@ -332,7 +332,7 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + LDRH(R12, R10); REV16(R12, R12); SXTH(R12, R12); @@ -346,7 +346,7 @@ void JitArmAsmRoutineManager::GenerateCommon() MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + VCVT(S0, S0, TO_FLOAT); VCVT(S1, S1, TO_FLOAT); @@ -360,7 +360,7 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + LDRH(R12, R10); REV16(R12, R12); VMOV(S0, R12); @@ -368,7 +368,7 @@ void JitArmAsmRoutineManager::GenerateCommon() MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + VCVT(S0, S0, TO_FLOAT); VMUL(S0, S0, S2); @@ -379,7 +379,7 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + LDRH(R12, R10); REV16(R12, R12); SXTH(R12, R12); @@ -393,7 +393,7 @@ void JitArmAsmRoutineManager::GenerateCommon() MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + VCVT(S0, S0, TO_FLOAT | IS_SIGNED); VCVT(S1, S1, TO_FLOAT | IS_SIGNED); @@ -409,11 +409,11 @@ void JitArmAsmRoutineManager::GenerateCommon() ADD(R10, R10, R12); LDRH(R12, R10); - + MOVI2R(R10, (u32)&m_dequantizeTableS); ADD(R10, R10, R11); VLDR(S2, R10, 0); - + REV16(R12, R12); SXTH(R12, R12); VMOV(S0, R12); @@ -477,22 +477,22 @@ void JitArmAsmRoutineManager::GenerateCommon() // R12 is scratch // S0, S1 is the values PUSH(5, R0, R1, R2, R3, _LR); - + MOVI2R(R12, (u32)&m_quantizeTableS); - ADD(R12, R12, R11); + ADD(R12, R12, R11); VLDR(S2, R12, 0); VMUL(S0, S0, S2); VMUL(S1, S1, S2); - VCVT(S0, S0, TO_INT | ROUND_TO_ZERO); - VCVT(S1, S1, TO_INT | ROUND_TO_ZERO); - + VCVT(S0, S0, TO_INT | ROUND_TO_ZERO); + VCVT(S1, S1, TO_INT | ROUND_TO_ZERO); + VMOV(R0, S0); VMOV(R1, S1); MOV(R2, R10); MOVI2R(R12, (u32)&WriteDual8); BL(R12); - + POP(5, R0, R1, R2, R3, _PC); } const u8* storePairedU16 = GetCodePtr(); @@ -501,20 +501,20 @@ void JitArmAsmRoutineManager::GenerateCommon() PUSH(5, R0, R1, R2, R3, _LR); MOVI2R(R12, (u32)&m_quantizeTableS); - ADD(R12, R12, R11); + ADD(R12, R12, R11); VLDR(S2, R12, 0); VMUL(S0, S0, S2); VMUL(S1, S1, S2); - VCVT(S0, S0, TO_INT | ROUND_TO_ZERO); - VCVT(S1, S1, TO_INT | ROUND_TO_ZERO); - + VCVT(S0, S0, TO_INT | ROUND_TO_ZERO); + VCVT(S1, S1, TO_INT | ROUND_TO_ZERO); + VMOV(R0, S0); VMOV(R1, S1); MOV(R2, R10); MOVI2R(R12, (u32)&WriteDual16); BL(R12); - + POP(5, R0, R1, R2, R3, _PC); } const u8* storeSingleIllegal = GetCodePtr(); @@ -526,10 +526,10 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + VMOV(R12, S0); REV(R12, R12); - STR(R12, R10); + STR(R12, R10); MOV(_PC, _LR); SetJumpTarget(argh); @@ -546,7 +546,7 @@ void JitArmAsmRoutineManager::GenerateCommon() const u8* storeSingleS8 = GetCodePtr(); { MOVI2R(R12, (u32)&m_quantizeTableS); - ADD(R12, R12, R11); + ADD(R12, R12, R11); VLDR(S2, R12, 0); VMUL(S0, S0, S2); @@ -555,10 +555,10 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + VCVT(S0, S0, TO_INT | ROUND_TO_ZERO); VMOV(R12, S0); - STRB(R12, R10); + STRB(R12, R10); MOV(_PC, _LR); SetJumpTarget(argh); @@ -574,7 +574,7 @@ void JitArmAsmRoutineManager::GenerateCommon() const u8* storeSingleS16 = GetCodePtr(); { MOVI2R(R12, (u32)&m_quantizeTableS); - ADD(R12, R12, R11); + ADD(R12, R12, R11); VLDR(S2, R12, 0); VMUL(S0, S0, S2); @@ -583,11 +583,11 @@ void JitArmAsmRoutineManager::GenerateCommon() BIC(R10, R10, mask); MOVI2R(R12, (u32)Memory::base); ADD(R10, R10, R12); - + VCVT(S0, S0, TO_INT | ROUND_TO_ZERO); VMOV(R12, S0); REV16(R12, R12); - STRH(R12, R10); + STRH(R12, R10); MOV(_PC, _LR); SetJumpTarget(argh); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.h b/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.h index 9a61e9e653..9fcf49d4ec 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.h +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitAsm.h @@ -20,7 +20,7 @@ #include "ArmEmitter.h" #include "../JitCommon/JitAsmCommon.h" using namespace ArmGen; -class JitArmAsmRoutineManager : public CommonAsmRoutinesBase, public ARMXCodeBlock +class JitArmAsmRoutineManager : public CommonAsmRoutinesBase, public ARMXCodeBlock { private: void Generate(); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.cpp index 27363112fc..7247ddbd1e 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.cpp @@ -51,7 +51,7 @@ ARMReg *ArmFPRCache::GetPPCAllocationOrder(int &count) { // This will return us the allocation order of the registers we can use on // the ppc side. - static ARMReg allocationOrder[] = + static ARMReg allocationOrder[] = { D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, @@ -64,7 +64,7 @@ ARMReg *ArmFPRCache::GetAllocationOrder(int &count) { // This will return us the allocation order of the registers we can use on // the host side. - static ARMReg allocationOrder[] = + static ARMReg allocationOrder[] = { D0, D1, D2, D3 }; @@ -126,7 +126,7 @@ bool ArmFPRCache::FindFreeRegister(u32 ®index) ARMReg ArmFPRCache::GetPPCReg(u32 preg, bool PS1, bool preLoad) { u32 lastRegIndex = GetLeastUsedRegister(true); - + if (_regs[preg][PS1].GetType() != REG_NOTLOADED) { u8 a = _regs[preg][PS1].GetRegIndex(); @@ -147,7 +147,7 @@ ARMReg ArmFPRCache::GetPPCReg(u32 preg, bool PS1, bool preLoad) emit->VLDR(ArmCRegs[regindex].Reg, R9, offset); return ArmCRegs[regindex].Reg; } - + // Alright, we couldn't get a free space, dump that least used register s16 offsetOld = PPCSTATE_OFF(ps) + (ArmCRegs[lastRegIndex].PPCReg * 16) + (ArmCRegs[lastRegIndex].PS1 ? 8 : 0); s16 offsetNew = PPCSTATE_OFF(ps) + (preg * 16) + (PS1 ? 8 : 0); @@ -155,14 +155,14 @@ ARMReg ArmFPRCache::GetPPCReg(u32 preg, bool PS1, bool preLoad) emit->VSTR(ArmCRegs[lastRegIndex].Reg, R9, offsetOld); _regs[ArmCRegs[lastRegIndex].PPCReg][ArmCRegs[lastRegIndex].PS1].Flush(); - + ArmCRegs[lastRegIndex].PPCReg = preg; ArmCRegs[lastRegIndex].LastLoad = 0; ArmCRegs[lastRegIndex].PS1 = PS1; _regs[preg][PS1].LoadToReg(lastRegIndex); emit->VLDR(ArmCRegs[lastRegIndex].Reg, R9, offsetNew); - return ArmCRegs[lastRegIndex].Reg; + return ArmCRegs[lastRegIndex].Reg; } ARMReg ArmFPRCache::R0(u32 preg, bool preLoad) diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.h b/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.h index 10a3520d56..233b201b7c 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.h +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitFPRCache.h @@ -31,8 +31,8 @@ class ArmFPRCache private: OpArg _regs[32][2]; // One for each FPR reg JRCPPC ArmCRegs[ARMFPUREGS]; - JRCReg ArmRegs[ARMFPUREGS]; - + JRCReg ArmRegs[ARMFPUREGS]; + int NUMPPCREG; int NUMARMREG; @@ -41,11 +41,11 @@ private: ARMReg GetPPCReg(u32 preg, bool PS1, bool preLoad); - u32 GetLeastUsedRegister(bool increment); - bool FindFreeRegister(u32 ®index); + u32 GetLeastUsedRegister(bool increment); + bool FindFreeRegister(u32 ®index); protected: ARMXEmitter *emit; - + public: ArmFPRCache(); ~ArmFPRCache() {} @@ -54,7 +54,7 @@ public: void Start(PPCAnalyst::BlockRegStats &stats); void SetEmitter(ARMXEmitter *emitter) {emit = emitter;} - + ARMReg GetReg(bool AutoLock = true); // Return a ARM register we can use. void Unlock(ARMReg V0); void Flush(); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.cpp index 562770e367..f1e678e971 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.cpp @@ -49,7 +49,7 @@ ARMReg *ArmRegCache::GetPPCAllocationOrder(int &count) { // This will return us the allocation order of the registers we can use on // the ppc side. - static ARMReg allocationOrder[] = + static ARMReg allocationOrder[] = { R0, R1, R2, R3, R4, R5, R6, R7, R8 }; @@ -60,7 +60,7 @@ ARMReg *ArmRegCache::GetAllocationOrder(int &count) { // This will return us the allocation order of the registers we can use on // the host side. - static ARMReg allocationOrder[] = + static ARMReg allocationOrder[] = { R14, R12, R11, R10 }; @@ -124,7 +124,7 @@ bool ArmRegCache::FindFreeRegister(u32 ®index) } ARMReg ArmRegCache::R(u32 preg) -{ +{ if (regs[preg].GetType() == REG_IMM) return BindToRegister(preg); @@ -137,7 +137,7 @@ ARMReg ArmRegCache::R(u32 preg) ArmCRegs[a].LastLoad = 0; return ArmCRegs[a].Reg; } - + // Check if we have a free register u32 regindex; if (FindFreeRegister(regindex)) @@ -158,10 +158,10 @@ ARMReg ArmRegCache::R(u32 preg) ArmCRegs[lastRegIndex].PPCReg = preg; ArmCRegs[lastRegIndex].LastLoad = 0; - + regs[preg].LoadToReg(lastRegIndex); - return ArmCRegs[lastRegIndex].Reg; + return ArmCRegs[lastRegIndex].Reg; } ARMReg ArmRegCache::BindToRegister(u32 preg) @@ -209,7 +209,7 @@ void ArmRegCache::Flush() for (u8 a = 0; a < 32; ++a) { if (regs[a].GetType() == REG_IMM) - BindToRegister(a); + BindToRegister(a); if (regs[a].GetType() == REG_REG) { u32 regindex = regs[a].GetRegIndex(); @@ -217,7 +217,7 @@ void ArmRegCache::Flush() ArmCRegs[regindex].PPCReg = 33; ArmCRegs[regindex].LastLoad = 0; } - + regs[a].Flush(); } } diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.h b/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.h index d41af42d6e..e1ac5fe0b7 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.h +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitRegCache.h @@ -43,7 +43,7 @@ enum RegType REG_AWAY, // Bound to a register, but not preloaded }; -class OpArg +class OpArg { private: RegType m_type; // store type @@ -57,7 +57,7 @@ class OpArg m_reg = 33; m_value = 0; } - + RegType GetType() { return m_type; @@ -116,19 +116,19 @@ private: ARMReg *GetAllocationOrder(int &count); ARMReg *GetPPCAllocationOrder(int &count); - + u32 GetLeastUsedRegister(bool increment); bool FindFreeRegister(u32 ®index); protected: ARMXEmitter *emit; - + public: ArmRegCache(); ~ArmRegCache() {} void Init(ARMXEmitter *emitter); void Start(PPCAnalyst::BlockRegStats &stats); - + ARMReg GetReg(bool AutoLock = true); // Return a ARM register we can use. void Unlock(ARMReg R0, ARMReg R1 = INVALID_REG, ARMReg R2 = INVALID_REG, ARMReg R3 = INVALID_REG); @@ -136,7 +136,7 @@ public: ARMReg R(u32 preg); // Returns a cached register bool IsImm(u32 preg) { return regs[preg].GetType() == REG_IMM; } u32 GetImm(u32 preg) { return regs[preg].GetImm(); } - void SetImmediate(u32 preg, u32 imm); + void SetImmediate(u32 preg, u32 imm); ARMReg BindToRegister(u32 preg); }; diff --git a/Source/Core/Core/Src/PowerPC/JitArmIL/IR_Arm.cpp b/Source/Core/Core/Src/PowerPC/JitArmIL/IR_Arm.cpp index 5215f00fb3..10620d9183 100644 --- a/Source/Core/Core/Src/PowerPC/JitArmIL/IR_Arm.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArmIL/IR_Arm.cpp @@ -135,11 +135,11 @@ static ARMReg regBinLHSReg(RegInfo& RI, InstLoc I) { static ARMReg regBinReg(RegInfo& RI, InstLoc I) { // FIXME: When regLocForInst() is extracted as a local variable, // "Retrieving unknown spill slot?!" is shown. - if (RI.IInfo[I - RI.FirstI] & 4) + if (RI.IInfo[I - RI.FirstI] & 4) return regLocForInst(RI, getOp1(I)); else if (RI.IInfo[I - RI.FirstI] & 8) return regLocForInst(RI, getOp2(I)); - + return regFindFreeReg(RI); } @@ -191,7 +191,7 @@ static void regStoreInstToPPCState(RegInfo& RI, unsigned width, InstLoc I, s32 o // Could be extended to unprofiled addresses. static void regMarkMemAddress(RegInfo& RI, InstLoc I, InstLoc AI, unsigned OpNum) { if (isImm(*AI)) { - unsigned addr = RI.Build->GetImmValue(AI); + unsigned addr = RI.Build->GetImmValue(AI); if (Memory::IsRAMAddress(addr)) return; } @@ -311,7 +311,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitArmIL* Jit) { case InterpreterFallback: case SystemCall: case RFIExit: - case InterpreterBranch: + case InterpreterBranch: case ShortIdleLoop: case FPExceptionCheck: case DSIExceptionCheck: @@ -430,7 +430,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitArmIL* Jit) { break; case IdleBranch: regMarkUse(RI, I, getOp1(getOp1(I)), 1); - break; + break; case BranchCond: { if (isICmp(*getOp1(I)) && isImm(*getOp2(getOp1(I)))) { @@ -638,7 +638,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitArmIL* Jit) { Jit->STR(rB, R9, PPCSTATE_OFF(msr)); // STR rB in to rA Jit->LDR(rA, R9, PPCSTATE_OFF(spr[SPR_SRR0])); - + Jit->WriteRfiExitDestInR(rA); // rA gets unlocked here break; } diff --git a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.cpp b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.cpp index 788aad3f3a..0aac4d6722 100644 --- a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.cpp @@ -36,7 +36,7 @@ void JitArmIL::Init() asm_routines.Init(); } -void JitArmIL::ClearCache() +void JitArmIL::ClearCache() { ClearCodeSpace(); blocks.Clear(); @@ -95,7 +95,7 @@ void JitArmIL::DoDownCount() } } -void JitArmIL::WriteExitDestInReg(ARMReg Reg) +void JitArmIL::WriteExitDestInReg(ARMReg Reg) { STR(Reg, R9, PPCSTATE_OFF(pc)); DoDownCount(); @@ -103,7 +103,7 @@ void JitArmIL::WriteExitDestInReg(ARMReg Reg) B(Reg); } -void JitArmIL::WriteRfiExitDestInR(ARMReg Reg) +void JitArmIL::WriteRfiExitDestInR(ARMReg Reg) { STR(Reg, R9, PPCSTATE_OFF(pc)); DoDownCount(); @@ -124,21 +124,21 @@ void JitArmIL::WriteExit(u32 destination, int exit_num) JitBlock *b = js.curBlock; b->exitAddress[exit_num] = destination; b->exitPtrs[exit_num] = GetWritableCodePtr(); - + // Link opportunity! int block = blocks.GetBlockNumberFromStartAddress(destination); - if (block >= 0 && jo.enableBlocklink) + if (block >= 0 && jo.enableBlocklink) { // It exists! Joy of joy! B(blocks.GetBlock(block)->checkedEntry); b->linkStatus[exit_num] = true; } - else + else { MOVI2R(R14, destination); STR(R14, R9, PPCSTATE_OFF(pc)); MOVI2R(R14, (u32)asm_routines.dispatcher); - B(R14); + B(R14); } } void JitArmIL::PrintDebug(UGeckoInstruction inst, u32 level) @@ -245,7 +245,7 @@ const u8* JitArmIL::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitB } PPCAnalyst::CodeOp *ops = code_buf->codebuffer; - const u8 *start = GetCodePtr(); + const u8 *start = GetCodePtr(); b->checkedEntry = start; b->runCount = 0; @@ -349,7 +349,7 @@ const u8* JitArmIL::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitB printf("Broken Block going to 0x%08x\n", nextPC); WriteExit(nextPC, 0); } - + // Perform actual code generation WriteCode(); diff --git a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.h b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.h index e0462cf852..4dec87ddeb 100644 --- a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.h +++ b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL.h @@ -18,8 +18,8 @@ Core::g_CoreStartupParameter.setting) \ {Default(inst); return;} -#define PPCSTATE_OFF(elem) ((s32)STRUCT_OFF(PowerPC::ppcState, elem) - (s32)STRUCT_OFF(PowerPC::ppcState, spr[0])) -class JitArmIL : public JitILBase, public ArmGen::ARMXCodeBlock +#define PPCSTATE_OFF(elem) ((s32)STRUCT_OFF(PowerPC::ppcState, elem) - (s32)STRUCT_OFF(PowerPC::ppcState, spr[0])) +class JitArmIL : public JitILBase, public ArmGen::ARMXCodeBlock { private: JitArmBlockCache blocks; @@ -63,7 +63,7 @@ public: void Run(); void SingleStep(); - // + // void WriteCode(); void WriteExit(u32 destination, int exit_num); void WriteExitDestInReg(ARMReg Reg); @@ -82,7 +82,7 @@ public: void DynaRunTable31(UGeckoInstruction inst); void DynaRunTable59(UGeckoInstruction inst); void DynaRunTable63(UGeckoInstruction inst); - + // Binary ops void BIN_AND(ARMReg reg, Operand2 op2); void BIN_XOR(ARMReg reg, Operand2 op2); diff --git a/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.cpp b/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.cpp index f01c94a8f2..2cb9e298f2 100644 --- a/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.cpp @@ -31,15 +31,15 @@ void JitArmILAsmRoutineManager::Generate() MOVI2R(R9, (u32)&PowerPC::ppcState.spr[0]); FixupBranch skipToRealDispatcher = B(); - dispatcher = GetCodePtr(); + dispatcher = GetCodePtr(); printf("ILDispatcher is %p\n", dispatcher); - // Downcount Check + // Downcount Check // The result of slice decrementation should be in flags if somebody jumped here // IMPORTANT - We jump on negative, not carry!!! FixupBranch bail = B_CC(CC_MI); - SetJumpTarget(skipToRealDispatcher); + SetJumpTarget(skipToRealDispatcher); dispatcherNoCheck = GetCodePtr(); // This block of code gets the address of the compiled block of code @@ -59,8 +59,8 @@ void JitArmILAsmRoutineManager::Generate() // Success, it is our Jitblock. MOVI2R(R14, (u32)jit->GetBlockCache()->GetCodePointers()); // LDR R14 right here to get CodePointers()[0] pointer. - LSL(R12, R12, 2); // Multiply by four because address locations are u32 in size - LDR(R14, R14, R12); // Load the block address in to R14 + LSL(R12, R12, 2); // Multiply by four because address locations are u32 in size + LDR(R14, R14, R12); // Load the block address in to R14 B(R14); // No need to jump anywhere after here, the block will go back to dispatcher start @@ -68,9 +68,9 @@ void JitArmILAsmRoutineManager::Generate() // If we get to this point, that means that we don't have the block cached to execute // So call ArmJit to compile the block and then execute it. - MOVI2R(R14, (u32)&Jit); + MOVI2R(R14, (u32)&Jit); BL(R14); - + B(dispatcherNoCheck); // fpException() @@ -85,12 +85,12 @@ void JitArmILAsmRoutineManager::Generate() B(dispatcher); SetJumpTarget(bail); - doTiming = GetCodePtr(); + doTiming = GetCodePtr(); // XXX: In JIT64, Advance() gets called /after/ the exception checking - // once it jumps back to the start of outerLoop + // once it jumps back to the start of outerLoop QuickCallFunction(R14, (void*)&CoreTiming::Advance); - // Does exception checking + // Does exception checking testExceptions = GetCodePtr(); LDR(R0, R9, PPCSTATE_OFF(pc)); STR(R0, R9, PPCSTATE_OFF(npc)); @@ -106,13 +106,13 @@ void JitArmILAsmRoutineManager::Generate() FixupBranch Exit = B_CC(CC_NEQ); B(dispatcher); - + SetJumpTarget(Exit); ADD(_SP, _SP, 4); POP(9, R4, R5, R6, R7, R8, R9, R10, R11, _PC); // Returns - + GenerateCommon(); FlushIcache(); diff --git a/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.h b/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.h index bd252f59f9..e8e401445a 100644 --- a/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.h +++ b/Source/Core/Core/Src/PowerPC/JitArmIL/JitILAsm.h @@ -7,10 +7,10 @@ #include "ArmEmitter.h" #include "../JitCommon/JitAsmCommon.h" using namespace ArmGen; -class JitArmILAsmRoutineManager : public CommonAsmRoutinesBase, public ARMXCodeBlock +class JitArmILAsmRoutineManager : public CommonAsmRoutinesBase, public ARMXCodeBlock { private: - void Generate(); + void Generate(); void GenerateCommon() {} public: @@ -27,6 +27,6 @@ public: extern JitArmILAsmRoutineManager armil_asm_routines; -#endif +#endif diff --git a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Branch.cpp b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Branch.cpp index 6c4a6d2dcc..bad63dd5c6 100644 --- a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Branch.cpp @@ -123,12 +123,12 @@ void JitArmIL::bcx(UGeckoInstruction inst) destination = js.compilerPC + SignExt16(inst.BD << 2); if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle && - inst.hex == 0x4182fff8 && + inst.hex == 0x4182fff8 && (Memory::ReadUnchecked_U32(js.compilerPC - 8) & 0xFFFF0000) == 0x800D0000 && (Memory::ReadUnchecked_U32(js.compilerPC - 4) == 0x28000000 || - (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii && Memory::ReadUnchecked_U32(js.compilerPC - 4) == 0x2C000000)) + (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii && Memory::ReadUnchecked_U32(js.compilerPC - 4) == 0x2C000000)) ) - { + { ibuild.EmitIdleBranch(Test, ibuild.EmitIntConst(destination)); } else diff --git a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Tables.cpp b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Tables.cpp index 2f6677c952..eaa5951684 100644 --- a/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArmIL/JitIL_Tables.cpp @@ -29,7 +29,7 @@ struct GekkoOPTemplate //GekkoOPInfo opinfo; // Doesn't need opinfo, Interpreter fills it out }; -static GekkoOPTemplate primarytable[] = +static GekkoOPTemplate primarytable[] = { {4, &JitArmIL::DynaRunTable4}, //"RunTable4", OPTYPE_SUBTABLE | (4<<24), 0}}, {19, &JitArmIL::DynaRunTable19}, //"RunTable19", OPTYPE_SUBTABLE | (19<<24), 0}}, @@ -110,7 +110,7 @@ static GekkoOPTemplate primarytable[] = {58, &JitArmIL::Default}, //"unknown_instruction", OPTYPE_UNKNOWN, 0}}, }; -static GekkoOPTemplate table4[] = +static GekkoOPTemplate table4[] = { //SUBOP10 {0, &JitArmIL::Default}, //"ps_cmpu0", OPTYPE_PS, FL_SET_CRn}}, {32, &JitArmIL::Default}, //"ps_cmpo0", OPTYPE_PS, FL_SET_CRn}}, @@ -126,9 +126,9 @@ static GekkoOPTemplate table4[] = {624, &JitArmIL::Default}, //"ps_merge11", OPTYPE_PS, FL_RC_BIT}}, {1014, &JitArmIL::Default}, //"dcbz_l", OPTYPE_SYSTEM, 0}}, -}; +}; -static GekkoOPTemplate table4_2[] = +static GekkoOPTemplate table4_2[] = { {10, &JitArmIL::Default}, //"ps_sum0", OPTYPE_PS, 0}}, {11, &JitArmIL::Default}, //"ps_sum1", OPTYPE_PS, 0}}, @@ -150,15 +150,15 @@ static GekkoOPTemplate table4_2[] = }; -static GekkoOPTemplate table4_3[] = +static GekkoOPTemplate table4_3[] = { {6, &JitArmIL::Default}, //"psq_lx", OPTYPE_PS, 0}}, {7, &JitArmIL::Default}, //"psq_stx", OPTYPE_PS, 0}}, {38, &JitArmIL::Default}, //"psq_lux", OPTYPE_PS, 0}}, - {39, &JitArmIL::Default}, //"psq_stux", OPTYPE_PS, 0}}, + {39, &JitArmIL::Default}, //"psq_stux", OPTYPE_PS, 0}}, }; -static GekkoOPTemplate table19[] = +static GekkoOPTemplate table19[] = { {528, &JitArmIL::bcctrx}, //"bcctrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, {16, &JitArmIL::bclrx}, //"bclrx", OPTYPE_BRANCH, FL_ENDBLOCK}}, @@ -170,16 +170,16 @@ static GekkoOPTemplate table19[] = {449, &JitArmIL::crXX}, //"cror", OPTYPE_CR, FL_EVIL}}, {417, &JitArmIL::crXX}, //"crorc", OPTYPE_CR, FL_EVIL}}, {193, &JitArmIL::crXX}, //"crxor", OPTYPE_CR, FL_EVIL}}, - + {150, &JitArmIL::Default}, //"isync", OPTYPE_ICACHE, FL_EVIL}}, {0, &JitArmIL::Default}, //"mcrf", OPTYPE_SYSTEM, FL_EVIL}}, - + {50, &JitArmIL::rfi}, //"rfi", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS, 1}}, {18, &JitArmIL::Break}, //"rfid", OPTYPE_SYSTEM, FL_ENDBLOCK | FL_CHECKEXCEPTIONS}} }; -static GekkoOPTemplate table31[] = +static GekkoOPTemplate table31[] = { {28, &JitArmIL::boolX}, //"andx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, {60, &JitArmIL::boolX}, //"andcx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, @@ -254,7 +254,7 @@ static GekkoOPTemplate table31[] = {661, &JitArmIL::Default}, //"stswx", OPTYPE_STORE, FL_EVIL}}, {725, &JitArmIL::Default}, //"stswi", OPTYPE_STORE, FL_EVIL}}, - // fp load/store + // fp load/store {535, &JitArmIL::Default}, //"lfsx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, {567, &JitArmIL::Default}, //"lfsux", OPTYPE_LOADFP, FL_IN_A | FL_IN_B}}, {599, &JitArmIL::Default}, //"lfdx", OPTYPE_LOADFP, FL_IN_A0 | FL_IN_B}}, @@ -292,8 +292,8 @@ static GekkoOPTemplate table31[] = {566, &JitArmIL::Default}, //"tlbsync", OPTYPE_SYSTEM, 0}}, }; -static GekkoOPTemplate table31_2[] = -{ +static GekkoOPTemplate table31_2[] = +{ {266, &JitArmIL::Default}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {778, &JitArmIL::Default}, //"addx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_RC_BIT}}, {10, &JitArmIL::Default}, //"addcx", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_SET_CA | FL_RC_BIT}}, @@ -317,21 +317,21 @@ static GekkoOPTemplate table31_2[] = {200, &JitArmIL::Default}, //"subfzex", OPTYPE_INTEGER, FL_OUT_D | FL_IN_AB | FL_READ_CA | FL_SET_CA | FL_RC_BIT}}, }; -static GekkoOPTemplate table59[] = +static GekkoOPTemplate table59[] = { - {18, &JitArmIL::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, - {20, &JitArmIL::Default}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {21, &JitArmIL::Default}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {18, &JitArmIL::Default}, //{"fdivsx", OPTYPE_FPU, FL_RC_BIT_F, 16}}, + {20, &JitArmIL::Default}, //"fsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {21, &JitArmIL::Default}, //"faddsx", OPTYPE_FPU, FL_RC_BIT_F}}, // {22, &JitArmIL::Default}, //"fsqrtsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {24, &JitArmIL::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, - {25, &JitArmIL::Default}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {28, &JitArmIL::Default}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {29, &JitArmIL::Default}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {30, &JitArmIL::Default}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, - {31, &JitArmIL::Default}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, -}; + {24, &JitArmIL::Default}, //"fresx", OPTYPE_FPU, FL_RC_BIT_F}}, + {25, &JitArmIL::Default}, //"fmulsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {28, &JitArmIL::Default}, //"fmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {29, &JitArmIL::Default}, //"fmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {30, &JitArmIL::Default}, //"fnmsubsx", OPTYPE_FPU, FL_RC_BIT_F}}, + {31, &JitArmIL::Default}, //"fnmaddsx", OPTYPE_FPU, FL_RC_BIT_F}}, +}; -static GekkoOPTemplate table63[] = +static GekkoOPTemplate table63[] = { {264, &JitArmIL::Default}, //"fabsx", OPTYPE_FPU, FL_RC_BIT_F}}, {32, &JitArmIL::Default}, //"fcmpo", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -351,7 +351,7 @@ static GekkoOPTemplate table63[] = {711, &JitArmIL::Default}, //"mtfsfx", OPTYPE_SYSTEMFP, 0, 2}}, }; -static GekkoOPTemplate table63_2[] = +static GekkoOPTemplate table63_2[] = { {18, &JitArmIL::Default}, //"fdivx", OPTYPE_FPU, FL_RC_BIT_F, 30}}, {20, &JitArmIL::Default}, //"fsubx", OPTYPE_FPU, FL_RC_BIT_F}}, @@ -394,7 +394,7 @@ void InitTables() return; //clear - for (int i = 0; i < 32; i++) + for (int i = 0; i < 32; i++) { dynaOpTable59[i] = &JitArmIL::unknown_instruction; } @@ -404,7 +404,7 @@ void InitTables() dynaOpTable4 [i] = &JitArmIL::unknown_instruction; dynaOpTable19[i] = &JitArmIL::unknown_instruction; dynaOpTable31[i] = &JitArmIL::unknown_instruction; - dynaOpTable63[i] = &JitArmIL::unknown_instruction; + dynaOpTable63[i] = &JitArmIL::unknown_instruction; } for (int i = 0; i < (int)(sizeof(primarytable) / sizeof(GekkoOPTemplate)); i++) diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp index 269828f03d..bc8272f48c 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitAsmCommon.cpp @@ -16,7 +16,7 @@ using namespace Gen; static int temp32; -void CommonAsmRoutines::GenFifoWrite(int size) +void CommonAsmRoutines::GenFifoWrite(int size) { // Assume value in ABI_PARAM1 PUSH(ESI); @@ -39,7 +39,7 @@ void CommonAsmRoutines::GenFifoWrite(int size) RET(); } -void CommonAsmRoutines::GenFifoFloatWrite() +void CommonAsmRoutines::GenFifoFloatWrite() { // Assume value in XMM0 PUSH(ESI); @@ -57,7 +57,7 @@ void CommonAsmRoutines::GenFifoFloatWrite() RET(); } -void CommonAsmRoutines::GenFifoXmm64Write() +void CommonAsmRoutines::GenFifoXmm64Write() { // Assume value in XMM0. Assume pre-byteswapped (unlike the others here!) PUSH(ESI); @@ -93,7 +93,7 @@ static const float GC_ALIGNED16(m_quantizeTableS[]) = 1.0 / (1 << 12), 1.0 / (1 << 11), 1.0 / (1 << 10), 1.0 / (1 << 9), 1.0 / (1 << 8), 1.0 / (1 << 7), 1.0 / (1 << 6), 1.0 / (1 << 5), 1.0 / (1 << 4), 1.0 / (1 << 3), 1.0 / (1 << 2), 1.0 / (1 << 1), -}; +}; static const float GC_ALIGNED16(m_dequantizeTableS[]) = { @@ -113,7 +113,7 @@ static const float GC_ALIGNED16(m_dequantizeTableS[]) = (1 << 12), (1 << 11), (1 << 10), (1 << 9), (1 << 8), (1 << 7), (1 << 6), (1 << 5), (1 << 4), (1 << 3), (1 << 2), (1 << 1), -}; +}; static float GC_ALIGNED16(psTemp[4]); @@ -196,7 +196,7 @@ void CommonAsmRoutines::GenQuantizedStores() PACKSSDW(XMM0, R(XMM0)); PACKUSWB(XMM0, R(XMM0)); MOVD_xmm(R(EAX), XMM0); - SafeWriteRegToReg(AX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_SWAP | SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(AX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_SWAP | SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); @@ -205,7 +205,7 @@ void CommonAsmRoutines::GenQuantizedStores() MOVSS(XMM1, MDisp(EAX, (u32)(u64)m_quantizeTableS)); PUNPCKLDQ(XMM1, R(XMM1)); MULPS(XMM0, R(XMM1)); -#ifdef QUANTIZE_OVERFLOW_SAFE +#ifdef QUANTIZE_OVERFLOW_SAFE MOVSS(XMM1, M((void *)&m_65535)); PUNPCKLDQ(XMM1, R(XMM1)); MINPS(XMM0, R(XMM1)); @@ -215,7 +215,7 @@ void CommonAsmRoutines::GenQuantizedStores() PACKSSWB(XMM0, R(XMM0)); MOVD_xmm(R(EAX), XMM0); - SafeWriteRegToReg(AX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_SWAP | SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(AX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_SWAP | SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); @@ -225,7 +225,7 @@ void CommonAsmRoutines::GenQuantizedStores() PUNPCKLDQ(XMM1, R(XMM1)); MULPS(XMM0, R(XMM1)); - // PACKUSDW is available only in SSE4 + // PACKUSDW is available only in SSE4 PXOR(XMM1, R(XMM1)); MAXPS(XMM0, R(XMM1)); MOVSS(XMM1, M((void *)&m_65535)); @@ -241,7 +241,7 @@ void CommonAsmRoutines::GenQuantizedStores() MOV(16, R(AX), M((char*)psTemp + 4)); BSWAP(32, EAX); - SafeWriteRegToReg(EAX, ECX, 32, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_SWAP | SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(EAX, ECX, 32, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_SWAP | SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); @@ -251,7 +251,7 @@ void CommonAsmRoutines::GenQuantizedStores() // SHUFPS or UNPCKLPS might be a better choice here. The last one might just be an alias though. PUNPCKLDQ(XMM1, R(XMM1)); MULPS(XMM0, R(XMM1)); -#ifdef QUANTIZE_OVERFLOW_SAFE +#ifdef QUANTIZE_OVERFLOW_SAFE MOVSS(XMM1, M((void *)&m_65535)); PUNPCKLDQ(XMM1, R(XMM1)); MINPS(XMM0, R(XMM1)); @@ -261,7 +261,7 @@ void CommonAsmRoutines::GenQuantizedStores() MOVD_xmm(R(EAX), XMM0); BSWAP(32, EAX); ROL(32, R(EAX), Imm8(16)); - SafeWriteRegToReg(EAX, ECX, 32, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_SWAP | SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(EAX, ECX, 32, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_SWAP | SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); @@ -286,7 +286,7 @@ void CommonAsmRoutines::GenQuantizedSingleStores() // Easy! const u8* storeSingleFloat = AlignCode4(); - SafeWriteFloatToReg(XMM0, ECX, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteFloatToReg(XMM0, ECX, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); /* if (cpu_info.bSSSE3) { @@ -294,11 +294,11 @@ void CommonAsmRoutines::GenQuantizedSingleStores() // TODO: SafeWriteFloat MOVSS(M(&psTemp[0]), XMM0); MOV(32, R(EAX), M(&psTemp[0])); - SafeWriteRegToReg(EAX, ECX, 32, 0, SAFE_WRITE_NO_SWAP | SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(EAX, ECX, 32, 0, SAFE_LOADSTORE_NO_SWAP | SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); } else { MOVSS(M(&psTemp[0]), XMM0); MOV(32, R(EAX), M(&psTemp[0])); - SafeWriteRegToReg(EAX, ECX, 32, 0, SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(EAX, ECX, 32, 0, SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); }*/ const u8* storeSingleU8 = AlignCode4(); // Used by MKWii @@ -309,7 +309,7 @@ void CommonAsmRoutines::GenQuantizedSingleStores() MAXSS(XMM0, R(XMM1)); MINSS(XMM0, M((void *)&m_255)); CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(AL, ECX, 8, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(AL, ECX, 8, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); const u8* storeSingleS8 = AlignCode4(); @@ -319,7 +319,7 @@ void CommonAsmRoutines::GenQuantizedSingleStores() MAXSS(XMM0, M((void *)&m_m128)); MINSS(XMM0, M((void *)&m_127)); CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(AL, ECX, 8, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(AL, ECX, 8, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); const u8* storeSingleU16 = AlignCode4(); // Used by MKWii @@ -330,7 +330,7 @@ void CommonAsmRoutines::GenQuantizedSingleStores() MAXSS(XMM0, R(XMM1)); MINSS(XMM0, M((void *)&m_65535)); CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(EAX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(EAX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); const u8* storeSingleS16 = AlignCode4(); @@ -340,7 +340,7 @@ void CommonAsmRoutines::GenQuantizedSingleStores() MAXSS(XMM0, M((void *)&m_m32768)); MINSS(XMM0, M((void *)&m_32767)); CVTTSS2SI(EAX, R(XMM0)); - SafeWriteRegToReg(EAX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_WRITE_NO_PROLOG | SAFE_WRITE_NO_FASTMEM); + SafeWriteRegToReg(EAX, ECX, 16, 0, QUANTIZED_REGS_TO_SAVE, SAFE_LOADSTORE_NO_PROLOG | SAFE_LOADSTORE_NO_FASTMEM); RET(); singleStoreQuantized = reinterpret_cast(const_cast(AlignCode16())); diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp index 696ca457ee..dd481da9bc 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBackpatch.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #include "Common.h" #include "disasm.h" @@ -32,7 +33,7 @@ static void BackPatchError(const std::string &text, u8 *codePtr, u32 emAddress) #endif PanicAlert("%s\n\n" "Error encountered accessing emulated address %08x.\n" - "Culprit instruction: \n%s\nat %#llx", + "Culprit instruction: \n%s\nat %#" PRIx64, text.c_str(), emAddress, disbuf, code_addr); return; } @@ -107,7 +108,7 @@ const u8 *TrampolineCache::GetWriteTrampoline(const InstructionInfo &info, u32 r X64Reg dataReg = (X64Reg)info.regOperandReg; X64Reg addrReg = (X64Reg)info.scaledReg; - // It's a write. Yay. Remember that we don't have to be super efficient since it's "just" a + // It's a write. Yay. Remember that we don't have to be super efficient since it's "just" a // hardware access - we can take shortcuts. // Don't treat FIFO writes specially for now because they require a burst // check anyway. @@ -157,7 +158,7 @@ const u8 *TrampolineCache::GetWriteTrampoline(const InstructionInfo &info, u32 r // This generates some fairly heavy trampolines, but: // 1) It's really necessary. We don't know anything about the context. -// 2) It doesn't really hurt. Only instructions that access I/O will get these, and there won't be +// 2) It doesn't really hurt. Only instructions that access I/O will get these, and there won't be // that many of them in a typical program/game. const u8 *Jitx86Base::BackPatch(u8 *codePtr, u32 emAddress, void *ctx_void) { @@ -166,7 +167,7 @@ const u8 *Jitx86Base::BackPatch(u8 *codePtr, u32 emAddress, void *ctx_void) if (!jit->IsInCodeSpace(codePtr)) return 0; // this will become a regular crash real soon after this - + InstructionInfo info; if (!DisassembleMov(codePtr, &info)) { BackPatchError("BackPatch - failed to disassemble MOV instruction", codePtr, emAddress); diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp index 46644f2fc9..d135e9864c 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.cpp @@ -35,7 +35,7 @@ void LogGeneratedX86(int size, PPCAnalyst::CodeBuffer *code_buffer, const u8 *no DisassembleGekko(op.inst.hex, op.address, temp, 256); sprintf(pDis, "%08x %s", op.address, temp); DEBUG_LOG(DYNA_REC,"IR_X86 PPC: %s\n", pDis); - } + } disassembler x64disasm; x64disasm.set_syntax_intel(); diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h index 5ca630621f..b133da0fdd 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitBase.h @@ -25,7 +25,7 @@ #include "../../HW/GPFifo.h" #include "../../HW/Memmap.h" -#include +#include class JitBase : public CPUCoreBase { @@ -70,14 +70,14 @@ protected: JitBlock *curBlock; - std::set fifoWriteAddresses; + std::unordered_set fifoWriteAddresses; }; public: // This should probably be removed from public: JitOptions jo; JitState js; - + virtual JitBaseBlockCache *GetBlockCache() = 0; virtual void Jit(u32 em_address) = 0; @@ -93,13 +93,13 @@ class Jitx86Base : public JitBase, public EmuCodeBlock { protected: JitBlockCache blocks; - TrampolineCache trampolines; + TrampolineCache trampolines; public: - JitBlockCache *GetBlockCache() { return &blocks; } - - const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx); + JitBlockCache *GetBlockCache() override { return &blocks; } - bool IsInCodeSpace(u8 *ptr) { return IsInSpace(ptr); } + const u8 *BackPatch(u8 *codePtr, u32 em_address, void *ctx) override; + + bool IsInCodeSpace(u8 *ptr) override { return IsInSpace(ptr); } }; extern JitBase *jit; diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.cpp index 793702bed9..d7c78d9d17 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.cpp @@ -37,7 +37,7 @@ using namespace Gen; #define INVALID_EXIT 0xFFFFFFFF - bool JitBaseBlockCache::IsFull() const + bool JitBaseBlockCache::IsFull() const { return GetNumBlocks() >= MAX_NUM_BLOCKS - 1; } @@ -93,7 +93,7 @@ using namespace Gen; iJIT_NotifyEvent(iJVM_EVENT_TYPE_SHUTDOWN, NULL); #endif } - + // This clears the JIT cache. It's called from JitCache.cpp when the JIT cache // is full and when saving and loading states. void JitBaseBlockCache::Clear() @@ -156,7 +156,7 @@ using namespace Gen; if ((s1 >= s2 && s1 <= e2) || (e1 >= s2 && e1 <= e2) || (s2 >= s1 && s2 <= e1) || - (e2 >= s1 && e2 <= e1)) + (e2 >= s1 && e2 <= e1)) return true; else return false; @@ -195,10 +195,10 @@ using namespace Gen; { for (int i = 0; i < 2; i++) { - if (b.exitAddress[i] != INVALID_EXIT) + if (b.exitAddress[i] != INVALID_EXIT) links_to.insert(std::pair(b.exitAddress[i], block_num)); } - + LinkBlock(block_num); LinkBlockExits(block_num); } @@ -244,7 +244,7 @@ using namespace Gen; int JitBaseBlockCache::GetBlockNumberFromStartAddress(u32 addr) { if (!blocks) - return -1; + return -1; u32 inst; inst = *GetICachePtr(addr); if (inst & 0xfc000000) // definitely not a JIT block @@ -252,12 +252,12 @@ using namespace Gen; if ((int)inst >= num_blocks) return -1; if (blocks[inst].originalAddress != addr) - return -1; + return -1; return inst; } CompiledCode JitBaseBlockCache::GetCompiledCodeFromBlock(int block_num) - { + { return (CompiledCode)blockCodePointers[block_num]; } diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h b/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h index 7b84ce0fc5..b81c5d837a 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/JitCache.h @@ -39,7 +39,7 @@ struct JitBlock u32 exitAddress[2]; // 0xFFFFFFFF == unknown u32 originalAddress; - u32 codeSize; + u32 codeSize; u32 originalSize; int runCount; // for profiling. int flags; @@ -80,7 +80,7 @@ class JitBaseBlockCache void LinkBlockExits(int i); void LinkBlock(int i); void UnlinkBlock(int i); - + // Virtual for overloaded virtual void WriteLinkBlock(u8* location, const u8* address) = 0; virtual void WriteDestroyBlock(const u8* location, u32 address) = 0; @@ -128,7 +128,7 @@ public: class JitBlockCache : public JitBaseBlockCache { private: - void WriteLinkBlock(u8* location, const u8* address); - void WriteDestroyBlock(const u8* location, u32 address); + void WriteLinkBlock(u8* location, const u8* address) override; + void WriteDestroyBlock(const u8* location, u32 address) override; }; #endif diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp index 8205c2fea7..00e24e7a20 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp +++ b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.cpp @@ -117,15 +117,20 @@ u8 *EmuCodeBlock::UnsafeLoadToReg(X64Reg reg_value, Gen::OpArg opAddress, int ac return result; } -void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, int accessSize, s32 offset, u32 registersInUse, bool signExtend) +void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, int accessSize, s32 offset, u32 registersInUse, bool signExtend, int flags) { - registersInUse &= ~(1 << RAX | 1 << reg_value); + if (!jit->js.memcheck) + { + registersInUse &= ~(1 << RAX | 1 << reg_value); + } #if defined(_M_X64) + if (!Core::g_CoreStartupParameter.bMMU && + Core::g_CoreStartupParameter.bFastmem && + !(flags & (SAFE_LOADSTORE_NO_SWAP | SAFE_LOADSTORE_NO_FASTMEM)) #ifdef ENABLE_MEM_CHECK - if (!Core::g_CoreStartupParameter.bMMU && !Core::g_CoreStartupParameter.bEnableDebugging && Core::g_CoreStartupParameter.bFastmem) -#else - if (!Core::g_CoreStartupParameter.bMMU && Core::g_CoreStartupParameter.bFastmem) + && !Core::g_CoreStartupParameter.bEnableDebugging #endif + ) { u8 *mov = UnsafeLoadToReg(reg_value, opAddress, accessSize, offset, signExtend); @@ -164,6 +169,9 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, case 8: ABI_CallFunctionC((void *)&Memory::Read_U8_ZX, address); break; } ABI_PopRegistersAndAdjustStack(registersInUse, false); + + MEMCHECK_START + if (signExtend && accessSize < 32) { // Need to sign extend values coming from the Read_U* functions. @@ -173,6 +181,8 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, { MOVZX(32, accessSize, reg_value, R(EAX)); } + + MEMCHECK_END } } else @@ -192,6 +202,9 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, case 8: ABI_CallFunctionR((void *)&Memory::Read_U8_ZX, EAX); break; } ABI_PopRegistersAndAdjustStack(registersInUse, false); + + MEMCHECK_START + if (signExtend && accessSize < 32) { // Need to sign extend values coming from the Read_U* functions. @@ -202,6 +215,8 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, MOVZX(32, accessSize, reg_value, R(EAX)); } + MEMCHECK_END + FixupBranch exit = J(); SetJumpTarget(fast); UnsafeLoadToReg(reg_value, R(EAX), accessSize, 0, signExtend); @@ -220,6 +235,9 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, case 8: ABI_CallFunctionA((void *)&Memory::Read_U8_ZX, opAddress); break; } ABI_PopRegistersAndAdjustStack(registersInUse, false); + + MEMCHECK_START + if (signExtend && accessSize < 32) { // Need to sign extend values coming from the Read_U* functions. @@ -230,6 +248,8 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg & opAddress, MOVZX(32, accessSize, reg_value, R(EAX)); } + MEMCHECK_END + FixupBranch exit = J(); SetJumpTarget(fast); UnsafeLoadToReg(reg_value, opAddress, accessSize, offset, signExtend); @@ -264,14 +284,14 @@ void EmuCodeBlock::SafeWriteRegToReg(X64Reg reg_value, X64Reg reg_addr, int acce #if defined(_M_X64) if (!Core::g_CoreStartupParameter.bMMU && Core::g_CoreStartupParameter.bFastmem && - !(flags & (SAFE_WRITE_NO_SWAP | SAFE_WRITE_NO_FASTMEM)) + !(flags & (SAFE_LOADSTORE_NO_SWAP | SAFE_LOADSTORE_NO_FASTMEM)) #ifdef ENABLE_MEM_CHECK && !Core::g_CoreStartupParameter.bEnableDebugging #endif ) { MOV(32, M(&PC), Imm32(jit->js.compilerPC)); // Helps external systems know which instruction triggered the write - u8 *mov = UnsafeWriteRegToReg(reg_value, reg_addr, accessSize, offset, !(flags & SAFE_WRITE_NO_SWAP)); + u8 *mov = UnsafeWriteRegToReg(reg_value, reg_addr, accessSize, offset, !(flags & SAFE_LOADSTORE_NO_SWAP)); if (accessSize == 8) { NOP(1); @@ -303,8 +323,8 @@ void EmuCodeBlock::SafeWriteRegToReg(X64Reg reg_value, X64Reg reg_addr, int acce MOV(32, M(&PC), Imm32(jit->js.compilerPC)); // Helps external systems know which instruction triggered the write TEST(32, R(reg_addr), Imm32(mem_mask)); FixupBranch fast = J_CC(CC_Z, true); - bool noProlog = flags & SAFE_WRITE_NO_PROLOG; - bool swap = !(flags & SAFE_WRITE_NO_SWAP); + bool noProlog = flags & SAFE_LOADSTORE_NO_PROLOG; + bool swap = !(flags & SAFE_LOADSTORE_NO_SWAP); ABI_PushRegistersAndAdjustStack(registersInUse, noProlog); switch (accessSize) { diff --git a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h index 4a51073d5a..a321ddd117 100644 --- a/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h +++ b/Source/Core/Core/Src/PowerPC/JitCommon/Jit_Util.h @@ -8,6 +8,17 @@ #include "x64Emitter.h" #include +#define MEMCHECK_START \ + FixupBranch memException; \ + if (jit->js.memcheck) \ + { TEST(32, M((void *)&PowerPC::ppcState.Exceptions), Imm32(EXCEPTION_DSI)); \ + memException = J_CC(CC_NZ, true); } + +#define MEMCHECK_END \ + if (jit->js.memcheck) \ + SetJumpTarget(memException); + + // Like XCodeBlock but has some utilities for memory access. class EmuCodeBlock : public Gen::XCodeBlock { @@ -17,13 +28,13 @@ public: // these return the address of the MOV, for backpatching u8 *UnsafeWriteRegToReg(Gen::X64Reg reg_value, Gen::X64Reg reg_addr, int accessSize, s32 offset = 0, bool swap = true); u8 *UnsafeLoadToReg(Gen::X64Reg reg_value, Gen::OpArg opAddress, int accessSize, s32 offset, bool signExtend); - void SafeLoadToReg(Gen::X64Reg reg_value, const Gen::OpArg & opAddress, int accessSize, s32 offset, u32 registersInUse, bool signExtend); - enum SafeWriteFlags + enum SafeLoadStoreFlags { - SAFE_WRITE_NO_SWAP = 1, - SAFE_WRITE_NO_PROLOG = 2, - SAFE_WRITE_NO_FASTMEM = 4 + SAFE_LOADSTORE_NO_SWAP = 1, + SAFE_LOADSTORE_NO_PROLOG = 2, + SAFE_LOADSTORE_NO_FASTMEM = 4 }; + void SafeLoadToReg(Gen::X64Reg reg_value, const Gen::OpArg & opAddress, int accessSize, s32 offset, u32 registersInUse, bool signExtend, int flags = 0); void SafeWriteRegToReg(Gen::X64Reg reg_value, Gen::X64Reg reg_addr, int accessSize, s32 offset, u32 registersInUse, int flags = 0); // Trashes both inputs and EAX. diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp index 50cba22a89..3a4866f2f8 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.cpp @@ -49,7 +49,7 @@ I've implemented one additional trick: fast memory for 32-bit machines. This works off of the observation that loads and stores can be classified at runtime: any particular load instruction will always load similar addresses, and any store will store to similar addresses. Using this observation, every -block is JIT-ed twice: the first time, the block includes extra code to +block is JIT-ed twice: the first time, the block includes extra code to instrument the loads. Then, at the end of the block, it jumps back into the JIT to recompile itself. The second recompilation looks at the address of each load and store, and bakes the information into the generated code. This allows removing @@ -66,7 +66,7 @@ use any floating-point), it's roughly 25% faster than the current JIT, with the edge over the current JIT mostly due to the fast memory optimization. Update on perf: -I've been doing a bit more tweaking for a small perf improvement (in the +I've been doing a bit more tweaking for a small perf improvement (in the range of 5-10%). That said, it's getting to the point where I'm simply not seeing potential for improvements to codegen, at least for long, straightforward blocks. For one long block that's at the top of my samples, @@ -118,6 +118,7 @@ Fix profiled loads/stores to work safely. On 32-bit, one solution is to #include #include +#include #include #include #include "IR.h" @@ -131,14 +132,14 @@ using namespace Gen; namespace IREmitter { InstLoc IRBuilder::EmitZeroOp(unsigned Opcode, unsigned extra = 0) { - InstLoc curIndex = &InstList[InstList.size()]; + InstLoc curIndex = InstList.data() + InstList.size(); InstList.push_back(Opcode | (extra << 8)); MarkUsed.push_back(false); return curIndex; } InstLoc IRBuilder::EmitUOp(unsigned Opcode, InstLoc Op1, unsigned extra) { - InstLoc curIndex = &InstList[InstList.size()]; + InstLoc curIndex = InstList.data() + InstList.size(); unsigned backOp1 = (s32)(curIndex - 1 - Op1); if (backOp1 >= 256) { InstList.push_back(Tramp | backOp1 << 8); @@ -152,7 +153,7 @@ InstLoc IRBuilder::EmitUOp(unsigned Opcode, InstLoc Op1, unsigned extra) { } InstLoc IRBuilder::EmitBiOp(unsigned Opcode, InstLoc Op1, InstLoc Op2, unsigned extra) { - InstLoc curIndex = &InstList[InstList.size()]; + InstLoc curIndex = InstList.data() + InstList.size(); unsigned backOp1 = (s32)(curIndex - 1 - Op1); if (backOp1 >= 255) { InstList.push_back(Tramp | backOp1 << 8); @@ -175,7 +176,7 @@ InstLoc IRBuilder::EmitBiOp(unsigned Opcode, InstLoc Op1, InstLoc Op2, unsigned #if 0 InstLoc IRBuilder::EmitTriOp(unsigned Opcode, InstLoc Op1, InstLoc Op2, InstLoc Op3) { - InstLoc curIndex = &InstList[InstList.size()]; + InstLoc curIndex = InstList.data() + InstList.size(); unsigned backOp1 = curIndex - 1 - Op1; if (backOp1 >= 254) { InstList.push_back(Tramp | backOp1 << 8); @@ -570,7 +571,7 @@ InstLoc IRBuilder::FoldMul(InstLoc Op1, InstLoc Op2) { if (imm == -1U) { return FoldSub(EmitIntConst(0), Op1); } - + for (unsigned i0 = 0; i0 < 30; ++i0) { // x * (1 << i0) => x << i0 // One "shl" is faster than one "imul". @@ -862,7 +863,7 @@ InstLoc IRBuilder::FoldBranchCond(InstLoc Op1, InstLoc Op2) { if (getOpcode(*XOp1) == And && isImm(*getOp2(XOp1)) && getOpcode(*getOp1(XOp1)) == ICmpCRSigned) { - unsigned innerBranchValue = + unsigned innerBranchValue = GetImmValue(getOp2(XOp1)); if (branchValue == innerBranchValue) { if (branchValue == 2) @@ -1006,7 +1007,7 @@ InstLoc IRBuilder::FoldInterpreterFallback(InstLoc Op1, InstLoc Op2) { CRCacheStore[i] = 0; } CTRCache = 0; - CTRCacheStore = 0; + CTRCacheStore = 0; return EmitBiOp(InterpreterFallback, Op1, Op2); } @@ -1049,7 +1050,7 @@ InstLoc IRBuilder::FoldBiOp(unsigned Opcode, InstLoc Op1, InstLoc Op2, unsigned } InstLoc IRBuilder::EmitIntConst(unsigned value) { - InstLoc curIndex = &InstList[InstList.size()]; + InstLoc curIndex = InstList.data() + InstList.size(); InstList.push_back(CInt32 | ((unsigned int)ConstList.size() << 8)); MarkUsed.push_back(false); ConstList.push_back(value); @@ -1061,12 +1062,12 @@ unsigned IRBuilder::GetImmValue(InstLoc I) const { } void IRBuilder::SetMarkUsed(InstLoc I) { - const unsigned i = (unsigned)(I - &InstList[0]); + const unsigned i = (unsigned)(I - InstList.data()); MarkUsed[i] = true; } bool IRBuilder::IsMarkUsed(InstLoc I) const { - const unsigned i = (unsigned)(I - &InstList[0]); + const unsigned i = (unsigned)(I - InstList.data()); return MarkUsed[i]; } @@ -1124,14 +1125,14 @@ unsigned IRBuilder::getNumberOfOperands(InstLoc I) const { static unsigned ZeroOp[] = {LoadCR, LoadLink, LoadMSR, LoadGReg, LoadCTR, InterpreterBranch, LoadCarry, RFIExit, LoadFReg, LoadFRegDENToZero, LoadGQR, Int3, }; static unsigned UOp[] = {StoreLink, BranchUncond, StoreCR, StoreMSR, StoreFPRF, StoreGReg, StoreCTR, Load8, Load16, Load32, SExt16, SExt8, Cntlzw, Not, StoreCarry, SystemCall, ShortIdleLoop, LoadSingle, LoadDouble, LoadPaired, StoreFReg, DupSingleToMReg, DupSingleToPacked, ExpandPackedToMReg, CompactMRegToPacked, FSNeg, FSRSqrt, FDNeg, FPDup0, FPDup1, FPNeg, DoubleToSingle, StoreGQR, StoreSRR, }; static unsigned BiOp[] = {BranchCond, IdleBranch, And, Xor, Sub, Or, Add, Mul, Rol, Shl, Shrl, Sarl, ICmpEq, ICmpNe, ICmpUgt, ICmpUlt, ICmpSgt, ICmpSlt, ICmpSge, ICmpSle, Store8, Store16, Store32, ICmpCRSigned, ICmpCRUnsigned, InterpreterFallback, StoreSingle, StoreDouble, StorePaired, InsertDoubleInMReg, FSMul, FSAdd, FSSub, FDMul, FDAdd, FDSub, FPAdd, FPMul, FPSub, FPMerge00, FPMerge01, FPMerge10, FPMerge11, FDCmpCR, }; - for (size_t i = 0; i < sizeof(ZeroOp) / sizeof(ZeroOp[0]); ++i) { - numberOfOperands[ZeroOp[i]] = 0; + for (auto& op : ZeroOp) { + numberOfOperands[op] = 0; } - for (size_t i = 0; i < sizeof(UOp) / sizeof(UOp[0]); ++i) { - numberOfOperands[UOp[i]] = 1; + for (auto& op : UOp) { + numberOfOperands[op] = 1; } - for (size_t i = 0; i < sizeof(BiOp) / sizeof(BiOp[0]); ++i) { - numberOfOperands[BiOp[i]] = 2; + for (auto& op : BiOp) { + numberOfOperands[op] = 2; } } @@ -1223,27 +1224,27 @@ struct Writer virtual ~Writer() {} }; -static std::auto_ptr writer; +static std::unique_ptr writer; static const std::string opcodeNames[] = { - "Nop", "LoadGReg", "LoadLink", "LoadCR", "LoadCarry", "LoadCTR", - "LoadMSR", "LoadGQR", "SExt8", "SExt16", "BSwap32", "BSwap16", "Cntlzw", - "Not", "Load8", "Load16", "Load32", "BranchUncond", "StoreGReg", - "StoreCR", "StoreLink", "StoreCarry", "StoreCTR", "StoreMSR", "StoreFPRF", - "StoreGQR", "StoreSRR", "InterpreterFallback", "Add", "Mul", "And", "Or", - "Xor", "MulHighUnsigned", "Sub", "Shl", "Shrl", "Sarl", "Rol", - "ICmpCRSigned", "ICmpCRUnsigned", "ICmpEq", "ICmpNe", "ICmpUgt", - "ICmpUlt", "ICmpUge", "ICmpUle", "ICmpSgt", "ICmpSlt", "ICmpSge", - "ICmpSle", "Store8", "Store16", "Store32", "BranchCond", "FResult_Start", - "LoadSingle", "LoadDouble", "LoadPaired", "DoubleToSingle", - "DupSingleToMReg", "DupSingleToPacked", "InsertDoubleInMReg", - "ExpandPackedToMReg", "CompactMRegToPacked", "LoadFReg", - "LoadFRegDENToZero", "FSMul", "FSAdd", "FSSub", "FSNeg", "FSRSqrt", - "FPAdd", "FPMul", "FPSub", "FPNeg", "FDMul", "FDAdd", "FDSub", "FDNeg", - "FPMerge00", "FPMerge01", "FPMerge10", "FPMerge11", "FPDup0", "FPDup1", - "FResult_End", "StorePaired", "StoreSingle", "StoreDouble", "StoreFReg", - "FDCmpCR", "CInt16", "CInt32", "SystemCall", "RFIExit", - "InterpreterBranch", "IdleBranch", "ShortIdleLoop", + "Nop", "LoadGReg", "LoadLink", "LoadCR", "LoadCarry", "LoadCTR", + "LoadMSR", "LoadGQR", "SExt8", "SExt16", "BSwap32", "BSwap16", "Cntlzw", + "Not", "Load8", "Load16", "Load32", "BranchUncond", "StoreGReg", + "StoreCR", "StoreLink", "StoreCarry", "StoreCTR", "StoreMSR", "StoreFPRF", + "StoreGQR", "StoreSRR", "InterpreterFallback", "Add", "Mul", "And", "Or", + "Xor", "MulHighUnsigned", "Sub", "Shl", "Shrl", "Sarl", "Rol", + "ICmpCRSigned", "ICmpCRUnsigned", "ICmpEq", "ICmpNe", "ICmpUgt", + "ICmpUlt", "ICmpUge", "ICmpUle", "ICmpSgt", "ICmpSlt", "ICmpSge", + "ICmpSle", "Store8", "Store16", "Store32", "BranchCond", "FResult_Start", + "LoadSingle", "LoadDouble", "LoadPaired", "DoubleToSingle", + "DupSingleToMReg", "DupSingleToPacked", "InsertDoubleInMReg", + "ExpandPackedToMReg", "CompactMRegToPacked", "LoadFReg", + "LoadFRegDENToZero", "FSMul", "FSAdd", "FSSub", "FSNeg", "FSRSqrt", + "FPAdd", "FPMul", "FPSub", "FPNeg", "FDMul", "FDAdd", "FDSub", "FDNeg", + "FPMerge00", "FPMerge01", "FPMerge10", "FPMerge11", "FPDup0", "FPDup1", + "FResult_End", "StorePaired", "StoreSingle", "StoreDouble", "StoreFReg", + "FDCmpCR", "CInt16", "CInt32", "SystemCall", "RFIExit", + "InterpreterBranch", "IdleBranch", "ShortIdleLoop", "FPExceptionCheckStart", "FPExceptionCheckEnd", "ISIException", "ExtExceptionCheck", "Tramp", "BlockStart", "BlockEnd", "Int3", }; @@ -1275,11 +1276,11 @@ void IRBuilder::WriteToFile(u64 codeHash) { _assert_(sizeof(opcodeNames) / sizeof(opcodeNames[0]) == Int3 + 1); if (!writer.get()) { - writer = std::auto_ptr(new Writer); + writer = std::unique_ptr(new Writer); } FILE* const file = writer->file.GetHandle(); - fprintf(file, "\ncode hash:%016llx\n", codeHash); + fprintf(file, "\ncode hash:%016" PRIx64 "\n", codeHash); const InstLoc lastCurReadPtr = curReadPtr; StartForwardPass(); diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h index cce9c3ae3c..f3246e77b0 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/IR.h @@ -182,7 +182,7 @@ unsigned inline isICmp(Inst i) { } unsigned inline isFResult(Inst i) { - return getOpcode(i) > FResult_Start && + return getOpcode(i) > FResult_Start && getOpcode(i) < FResult_End; } @@ -406,7 +406,7 @@ public: } InstLoc EmitRFIExit() { return FoldZeroOp(RFIExit, 0); - } + } InstLoc EmitShortIdleLoop(InstLoc pc) { return FoldUOp(ShortIdleLoop, pc); } @@ -529,11 +529,11 @@ public: return FoldZeroOp(Int3, 0); } - void StartBackPass() { curReadPtr = &InstList[InstList.size()]; } - void StartForwardPass() { curReadPtr = &InstList[0]; } + void StartBackPass() { curReadPtr = InstList.data() + InstList.size(); } + void StartForwardPass() { curReadPtr = InstList.data(); } InstLoc ReadForward() { return curReadPtr++; } InstLoc ReadBackward() { return --curReadPtr; } - InstLoc getFirstInst() { return &InstList[0]; } + InstLoc getFirstInst() { return InstList.data(); } unsigned int getNumInsts() { return (unsigned int)InstList.size(); } unsigned int ReadInst(InstLoc I) { return *I; } unsigned int GetImmValue(InstLoc I) const; diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase.h b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase.h index bce0c69eea..ee5d08a4fd 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase.h +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase.h @@ -44,7 +44,7 @@ public: virtual const CommonAsmRoutinesBase *GetAsmRoutines() = 0; virtual bool IsInCodeSpace(u8 *ptr) = 0; - + // OPCODES virtual void unknown_instruction(UGeckoInstruction inst) = 0; virtual void Default(UGeckoInstruction inst) = 0; @@ -104,7 +104,7 @@ public: void extsbx(UGeckoInstruction inst); void extshx(UGeckoInstruction inst); - + void reg_imm(UGeckoInstruction inst); void ps_sel(UGeckoInstruction inst); @@ -147,7 +147,7 @@ public: void subfic(UGeckoInstruction inst); void subfcx(UGeckoInstruction inst); void subfx(UGeckoInstruction inst); - void subfex(UGeckoInstruction inst); + void subfex(UGeckoInstruction inst); }; #endif diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Branch.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Branch.cpp index a806c3a82d..6d6c594126 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Branch.cpp @@ -10,12 +10,12 @@ // No need for a disable-mechanism. // If defined, clears CR0 at blr and bl-s. If the assumption that -// flags never carry over between functions holds, then the task for +// flags never carry over between functions holds, then the task for // an optimizer becomes much easier. // #define ACID_TEST -// Zelda and many more games seem to pass the Acid Test. +// Zelda and many more games seem to pass the Acid Test. //#define NORMALBRANCH_START Default(inst); ibuild.EmitInterpreterBranch(); return; #define NORMALBRANCH_START @@ -114,12 +114,12 @@ void JitILBase::bcx(UGeckoInstruction inst) destination = js.compilerPC + SignExt16(inst.BD << 2); if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle && - inst.hex == 0x4182fff8 && + inst.hex == 0x4182fff8 && (Memory::ReadUnchecked_U32(js.compilerPC - 8) & 0xFFFF0000) == 0x800D0000 && (Memory::ReadUnchecked_U32(js.compilerPC - 4) == 0x28000000 || - (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii && Memory::ReadUnchecked_U32(js.compilerPC - 4) == 0x2C000000)) + (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii && Memory::ReadUnchecked_U32(js.compilerPC - 4) == 0x2C000000)) ) - { + { ibuild.EmitIdleBranch(Test, ibuild.EmitIntConst(destination)); } else diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Integer.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Integer.cpp index f3a3da818e..836cc9d45e 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Integer.cpp @@ -114,7 +114,7 @@ void JitILBase::cmpXX(UGeckoInstruction inst) } js.downcountAmount++; //TODO: should this be somewhere else? - + ibuild.EmitStoreCR(res, inst.CRFD); } @@ -217,7 +217,7 @@ void JitILBase::subfic(UGeckoInstruction inst) ibuild.EmitStoreCarry(test); } -void JitILBase::subfcx(UGeckoInstruction inst) +void JitILBase::subfcx(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITIntegerOff) @@ -234,7 +234,7 @@ void JitILBase::subfcx(UGeckoInstruction inst) ComputeRC(ibuild, val); } -void JitILBase::subfex(UGeckoInstruction inst) +void JitILBase::subfex(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITIntegerOff) @@ -492,7 +492,7 @@ void JitILBase::srawx(UGeckoInstruction inst) test = ibuild.EmitOr(val, mask2); test = ibuild.EmitICmpUgt(test, mask); ibuild.EmitStoreCarry(test); - + if (inst.Rc) ComputeRC(ibuild, val); } @@ -507,7 +507,7 @@ void JitILBase::srawix(UGeckoInstruction inst) unsigned int mask = -1u << inst.SH; test = ibuild.EmitOr(val, ibuild.EmitIntConst(mask & 0x7FFFFFFF)); test = ibuild.EmitICmpUgt(test, ibuild.EmitIntConst(mask)); - + ibuild.EmitStoreCarry(test); if (inst.Rc) ComputeRC(ibuild, val); diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_LoadStore.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_LoadStore.cpp index 495a6bb4e6..adbf31439a 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_LoadStore.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_LoadStore.cpp @@ -31,7 +31,7 @@ void JitILBase::lXz(UGeckoInstruction inst) IREmitter::InstLoc val; switch (inst.OPCD & ~0x1) { - case 32: val = ibuild.EmitLoad32(addr); break; //lwz + case 32: val = ibuild.EmitLoad32(addr); break; //lwz case 40: val = ibuild.EmitLoad16(addr); break; //lhz case 34: val = ibuild.EmitLoad8(addr); break; //lbz default: PanicAlert("lXz: invalid access size"); val = 0; break; @@ -111,7 +111,7 @@ void JitILBase::dcbz(UGeckoInstruction inst) // TODO! #if 0 if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff) - {Default(inst); return;} // turn off from debugger + {Default(inst); return;} // turn off from debugger INSTRUCTION_START; MOV(32, R(EAX), gpr.R(inst.RB)); if (inst.RA) diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Paired.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Paired.cpp index 74f070809f..7ed65497c7 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Paired.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_Paired.cpp @@ -38,7 +38,7 @@ void JitILBase::ps_arith(UGeckoInstruction inst) else rhs = ibuild.EmitCompactMRegToPacked(ibuild.EmitLoadFReg(inst.FB)); val = ibuild.EmitCompactMRegToPacked(val); - + switch (inst.SUBOP5) { case 20: @@ -58,7 +58,7 @@ void JitILBase::ps_sum(UGeckoInstruction inst) { // TODO: This operation strikes me as a bit strange... // perhaps we can optimize it depending on the users? - // TODO: ps_sum breaks Sonic Colours (black screen) + // TODO: ps_sum breaks Sonic Colours (black screen) Default(inst); return; INSTRUCTION_START JITDISABLE(bJITPairedOff) @@ -115,7 +115,7 @@ void JitILBase::ps_mergeXX(UGeckoInstruction inst) switch (inst.SUBOP10) { - case 528: + case 528: val = ibuild.EmitFPMerge00(val, rhs); break; //00 case 560: @@ -142,7 +142,7 @@ void JitILBase::ps_maddXX(UGeckoInstruction inst) if (inst.Rc) { Default(inst); return; } - + IREmitter::InstLoc val = ibuild.EmitLoadFReg(inst.FA), op2, op3; val = ibuild.EmitCompactMRegToPacked(val); switch (inst.SUBOP5) diff --git a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_SystemRegisters.cpp b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_SystemRegisters.cpp index 3d567d85a8..93c635839c 100644 --- a/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_SystemRegisters.cpp +++ b/Source/Core/Core/Src/PowerPC/JitILCommon/JitILBase_SystemRegisters.cpp @@ -171,12 +171,12 @@ void JitILBase::crXX(UGeckoInstruction inst) switch (subop) { case 257: // crand - eax = ibuild.EmitAnd(eax, ecx); + eax = ibuild.EmitAnd(eax, ecx); break; case 129: // crandc ecx = ibuild.EmitNot(ecx); - eax = ibuild.EmitAnd(eax, ecx); + eax = ibuild.EmitAnd(eax, ecx); break; case 289: // creqv diff --git a/Source/Core/Core/Src/PowerPC/JitInterface.cpp b/Source/Core/Core/Src/PowerPC/JitInterface.cpp index 568de59a6f..91d43a7792 100644 --- a/Source/Core/Core/Src/PowerPC/JitInterface.cpp +++ b/Source/Core/Core/Src/PowerPC/JitInterface.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #ifdef _WIN32 #include @@ -44,7 +45,7 @@ namespace JitInterface { bFakeVMEM = SConfig::GetInstance().m_LocalCoreStartupParameter.bTLBHack == true; bMMU = SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU; - + CPUCoreBase *ptr = NULL; switch(core) { @@ -128,7 +129,7 @@ namespace JitInterface { // Can't really do this with no jit core available #ifndef _M_GENERIC - + std::vector stats; stats.reserve(jit->GetBlockCache()->GetNumBlocks()); u64 cost_sum = 0; @@ -162,22 +163,22 @@ namespace JitInterface return; } fprintf(f.GetHandle(), "origAddr\tblkName\tcost\ttimeCost\tpercent\ttimePercent\tOvAllinBlkTime(ms)\tblkCodeSize\n"); - for (unsigned int i = 0; i < stats.size(); i++) + for (auto& stat : stats) { - const JitBlock *block = jit->GetBlockCache()->GetBlock(stats[i].blockNum); + const JitBlock *block = jit->GetBlockCache()->GetBlock(stat.blockNum); if (block) { std::string name = g_symbolDB.GetDescription(block->originalAddress); - double percent = 100.0 * (double)stats[i].cost / (double)cost_sum; - #ifdef _WIN32 + double percent = 100.0 * (double)stat.cost / (double)cost_sum; + #ifdef _WIN32 double timePercent = 100.0 * (double)block->ticCounter / (double)timecost_sum; - fprintf(f.GetHandle(), "%08x\t%s\t%llu\t%llu\t%.2lf\t%llf\t%lf\t%i\n", - block->originalAddress, name.c_str(), stats[i].cost, + fprintf(f.GetHandle(), "%08x\t%s\t%" PRIu64 "\t%" PRIu64 "\t%.2lf\t%llf\t%lf\t%i\n", + block->originalAddress, name.c_str(), stat.cost, block->ticCounter, percent, timePercent, (double)block->ticCounter*1000.0/(double)countsPerSec, block->codeSize); #else - fprintf(f.GetHandle(), "%08x\t%s\t%llu\t???\t%.2lf\t???\t???\t%i\n", - block->originalAddress, name.c_str(), stats[i].cost, percent, block->codeSize); + fprintf(f.GetHandle(), "%08x\t%s\t%" PRIu64 "\t???\t%.2lf\t???\t???\t%i\n", + block->originalAddress, name.c_str(), stat.cost, percent, block->codeSize); #endif } } @@ -211,7 +212,7 @@ namespace JitInterface u32 Read_Opcode_JIT(u32 _Address) { - #ifdef FAST_ICACHE + #ifdef FAST_ICACHE if (bMMU && !bFakeVMEM && (_Address & Memory::ADDR_MASK_MEM1)) { _Address = Memory::TranslateAddress(_Address, Memory::FLAG_OPCODE); @@ -233,7 +234,7 @@ namespace JitInterface #endif return inst; } - + void Shutdown() { if (jit) diff --git a/Source/Core/Core/Src/PowerPC/JitInterface.h b/Source/Core/Core/Src/PowerPC/JitInterface.h index 81764b3182..288330c707 100644 --- a/Source/Core/Core/Src/PowerPC/JitInterface.h +++ b/Source/Core/Core/Src/PowerPC/JitInterface.h @@ -8,7 +8,7 @@ namespace JitInterface { void DoState(PointerWrap &p); - + CPUCoreBase *InitJitCore(int core); void InitTables(int core); CPUCoreBase *GetCore(); @@ -25,11 +25,11 @@ namespace JitInterface // Clearing CodeCache void ClearCache(); - + void ClearSafe(); void InvalidateICache(u32 address, u32 size); - + void Shutdown(); } extern bool bFakeVMEM; diff --git a/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp b/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp index 8299bc0b82..eb398539d9 100644 --- a/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCAnalyst.cpp @@ -86,8 +86,8 @@ bool AnalyzeFunction(u32 startAddr, Symbol &func, int max_size) func.callers.clear(); func.size = 0; func.flags = FFLAG_LEAF; - u32 addr = startAddr; - + u32 addr = startAddr; + u32 farthestInternalBranchTarget = startAddr; int numInternalBranches = 0; while (true) @@ -95,7 +95,7 @@ bool AnalyzeFunction(u32 startAddr, Symbol &func, int max_size) func.size += 4; if (func.size >= CODEBUFFER_SIZE * 4) //weird return false; - + UGeckoInstruction instr = (UGeckoInstruction)Memory::ReadUnchecked_U32(addr); if (max_size && func.size > max_size) { @@ -153,12 +153,12 @@ bool AnalyzeFunction(u32 startAddr, Symbol &func, int max_size) func.flags &= ~FFLAG_LEAF; func.flags |= FFLAG_RFI; } - else + else { if (instr.OPCD == 16) { u32 target = SignExt16(instr.BD << 2); - + if (!instr.AA) target += addr; @@ -196,9 +196,8 @@ void AnalyzeFunction2(Symbol *func) u32 flags = func->flags; bool nonleafcall = false; - for (size_t i = 0; i < func->calls.size(); i++) + for (auto c : func->calls) { - SCall c = func->calls[i]; Symbol *called_func = g_symbolDB.GetSymbolFromAddr(c.function); if (called_func && (called_func->flags & FFLAG_LEAF) == 0) { @@ -250,7 +249,7 @@ bool CanSwapAdjacentOps(const CodeOp &a, const CodeOp &b) { int regInA = a.regsIn[j]; int regInB = b.regsIn[j]; - if (regInA >= 0 && + if (regInA >= 0 && (b.regsOut[0] == regInA || b.regsOut[1] == regInA)) { @@ -284,7 +283,7 @@ u32 Flatten(u32 address, int *realsize, BlockStats *st, BlockRegStats *gpa, size_of_merged_addresses = 1; memset(st, 0, sizeof(*st)); - + // Disabled the following optimization in preference of FAST_ICACHE //UGeckoInstruction previnst = Memory::Read_Opcode_JIT_LC(address - 4); //if (previnst.hex == 0x4e800020) @@ -292,7 +291,7 @@ u32 Flatten(u32 address, int *realsize, BlockStats *st, BlockRegStats *gpa, gpa->any = true; fpa->any = false; - + for (int i = 0; i < 32; i++) { gpa->firstRead[i] = -1; @@ -345,10 +344,9 @@ u32 Flatten(u32 address, int *realsize, BlockStats *st, BlockRegStats *gpa, if (it != inserted_asm_codes.end()) { const std::vector& codes = it->second; - for (std::vector::const_iterator itCur = codes.begin(), - itEnd = codes.end(); itCur != itEnd; ++itCur) + for (u32 c : codes) { - cst1_instructions.push(*itCur); + cst1_instructions.push(c); } inst = UGeckoInstruction(cst1_instructions.front()); cst1_instructions.pop(); @@ -359,7 +357,7 @@ u32 Flatten(u32 address, int *realsize, BlockStats *st, BlockRegStats *gpa, inst = JitInterface::Read_Opcode_JIT(address); } } - + if (inst.hex != 0) { num_inst++; @@ -449,7 +447,7 @@ u32 Flatten(u32 address, int *realsize, BlockStats *st, BlockRegStats *gpa, code[i].fregsIn[j] = -1; code[i].fregOut = -1; - switch (opinfo->type) + switch (opinfo->type) { case OPTYPE_INTEGER: case OPTYPE_LOAD: @@ -578,7 +576,7 @@ u32 Flatten(u32 address, int *realsize, BlockStats *st, BlockRegStats *gpa, // A broken block is a block that does not end in a branch broken_block = true; } - + // Scan for CR0 dependency // assume next block wants CR0 to be safe bool wantsCR0 = true; @@ -607,9 +605,9 @@ u32 Flatten(u32 address, int *realsize, BlockStats *st, BlockRegStats *gpa, // Most functions that are relevant to analyze should be -// called by another function. Therefore, let's scan the +// called by another function. Therefore, let's scan the // entire space for bl operations and find what functions -// get called. +// get called. void FindFunctionsFromBranches(u32 startAddr, u32 endAddr, SymbolDB *func_db) { for (u32 addr = startAddr; addr < endAddr; addr+=4) @@ -648,14 +646,13 @@ void FindFunctionsAfterBLR(PPCSymbolDB *func_db) for (PPCSymbolDB::XFuncMap::iterator iter = func_db->GetIterator(); iter != func_db->End(); ++iter) funcAddrs.push_back(iter->second.address + iter->second.size); - for (vector::iterator iter = funcAddrs.begin(); iter != funcAddrs.end(); ++iter) + for (auto location : funcAddrs) { - u32 location = *iter; while (true) { if (PPCTables::IsValidInstruction(Memory::Read_Instruction(location))) { - //check if this function is already mapped + //check if this function is already mapped Symbol *f = func_db->AddFunction(location); if (!f) break; @@ -674,7 +671,7 @@ void FindFunctions(u32 startAddr, u32 endAddr, PPCSymbolDB *func_db) FindFunctionsFromBranches(startAddr, endAddr, func_db); FindFunctionsAfterBLR(func_db); - //Step 2: + //Step 2: func_db->FillInCallers(); int numLeafs = 0, numNice = 0, numUnNice = 0; @@ -719,7 +716,7 @@ void FindFunctions(u32 startAddr, u32 endAddr, PPCSymbolDB *func_db) if ((f.flags & FFLAG_STRAIGHT) && (f.flags & FFLAG_LEAF)) numStraightLeaf++; } - if (numLeafs == 0) + if (numLeafs == 0) leafSize = 0; else leafSize /= numLeafs; diff --git a/Source/Core/Core/Src/PowerPC/PPCAnalyst.h b/Source/Core/Core/Src/PowerPC/PPCAnalyst.h index 2497e00494..db7a52c812 100644 --- a/Source/Core/Core/Src/PowerPC/PPCAnalyst.h +++ b/Source/Core/Core/Src/PowerPC/PPCAnalyst.h @@ -5,6 +5,7 @@ #ifndef _PPCANALYST_H #define _PPCANALYST_H +#include #include #include @@ -62,7 +63,7 @@ struct BlockRegStats int GetTotalNumAccesses(int reg) {return numReads[reg] + numWrites[reg];} int GetUseRange(int reg) { - return std::max(lastRead[reg], lastWrite[reg]) - + return std::max(lastRead[reg], lastWrite[reg]) - std::min(firstRead[reg], firstWrite[reg]);} inline void SetInputRegister(int reg, short opindex) { diff --git a/Source/Core/Core/Src/PowerPC/PPCCache.cpp b/Source/Core/Core/Src/PowerPC/PPCCache.cpp index 4ead232b18..0785e37943 100644 --- a/Source/Core/Core/Src/PowerPC/PPCCache.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCCache.cpp @@ -73,7 +73,7 @@ namespace PowerPC memset(tags, 0, sizeof(tags)); memset(way_from_valid, 0, sizeof(way_from_valid)); memset(way_from_plru, 0, sizeof(way_from_plru)); - + Reset(); } @@ -100,7 +100,7 @@ namespace PowerPC } u32 InstructionCache::ReadInstruction(u32 addr) - { + { if (!HID0.ICE) // instruction cache is disabled return Memory::ReadUnchecked_U32(addr); u32 set = (addr >> 5) & 0x7f; diff --git a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp index e9f821eeed..37621388fe 100644 --- a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.cpp @@ -94,10 +94,10 @@ Symbol *PPCSymbolDB::GetSymbolFromAddr(u32 addr) } else { - for (XFuncMap::iterator iter = functions.begin(); iter != functions.end(); ++iter) + for (auto& p : functions) { - if (addr >= iter->second.address && addr < iter->second.address + iter->second.size) - return &iter->second; + if (addr >= p.second.address && addr < p.second.address + p.second.size) + return &p.second; } } return 0; @@ -114,18 +114,18 @@ const char *PPCSymbolDB::GetDescription(u32 addr) void PPCSymbolDB::FillInCallers() { - for (XFuncMap::iterator iter = functions.begin(); iter != functions.end(); ++iter) + for (auto& p : functions) { - iter->second.callers.clear(); + p.second.callers.clear(); } for (XFuncMap::iterator iter = functions.begin(); iter != functions.end(); ++iter) { Symbol &f = iter->second; - for (size_t i = 0; i < f.calls.size(); i++) + for (auto& call : f.calls) { - SCall NewCall(iter->first, f.calls[i].callAddress); - u32 FunctionAddress = f.calls[i].function; + SCall NewCall(iter->first, call.callAddress); + u32 FunctionAddress = call.function; XFuncMap::iterator FuncIterator = functions.find(FunctionAddress); if (FuncIterator != functions.end()) @@ -306,7 +306,7 @@ bool PPCSymbolDB::SaveMap(const char *filename, bool WithCodes) const { // Get the current and next address LastAddress = rSymbol.address; - LastSymbolName = rSymbol.name; + LastSymbolName = rSymbol.name; ++itr; /* To make nice straight lines we fill out the name with spaces, we also cut off @@ -326,7 +326,7 @@ bool PPCSymbolDB::SaveMap(const char *filename, bool WithCodes) const space = itr->second.address - LastAddress; else space = 0; - + for (int i = 0; i < space; i += 4) { int Address = LastAddress + i; diff --git a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h index d77dac9a1e..27b80eb683 100644 --- a/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h +++ b/Source/Core/Core/Src/PowerPC/PPCSymbolDB.h @@ -19,14 +19,14 @@ private: public: typedef void (*functionGetterCallback)(Symbol *f); - + PPCSymbolDB(); ~PPCSymbolDB(); - Symbol *AddFunction(u32 startAddr); + Symbol *AddFunction(u32 startAddr) override; void AddKnownSymbol(u32 startAddr, u32 size, const char *name, int type = Symbol::SYMBOL_FUNCTION); - Symbol *GetSymbolFromAddr(u32 addr); + Symbol *GetSymbolFromAddr(u32 addr) override; const char *GetDescription(u32 addr); diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.cpp b/Source/Core/Core/Src/PowerPC/PPCTables.cpp index 6599a58d4f..d901f639e5 100644 --- a/Source/Core/Core/Src/PowerPC/PPCTables.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCTables.cpp @@ -4,6 +4,7 @@ #include #include +#include #include "Common.h" #include "PPCTables.h" @@ -38,7 +39,7 @@ GekkoOPInfo *GetOpInfo(UGeckoInstruction _inst) if ((info->type & 0xFFFFFF) == OPTYPE_SUBTABLE) { int table = info->type>>24; - switch(table) + switch(table) { case 4: return m_infoTable4[_inst.SUBOP10]; case 19: return m_infoTable19[_inst.SUBOP10]; @@ -67,7 +68,7 @@ Interpreter::_interpreterInstruction GetInterpreterOp(UGeckoInstruction _inst) if ((info->type & 0xFFFFFF) == OPTYPE_SUBTABLE) { int table = info->type>>24; - switch(table) + switch(table) { case 4: return Interpreter::m_opTable4[_inst.SUBOP10]; case 19: return Interpreter::m_opTable19[_inst.SUBOP10]; @@ -197,7 +198,7 @@ void PrintInstructionRunCounts() std::sort(temp.begin(), temp.end()); for (int i = 0; i < m_numInstructions; i++) { - if (temp[i].count == 0) + if (temp[i].count == 0) break; DEBUG_LOG(POWERPC, "%s : %i", temp[i].name,temp[i].count); //PanicAlert("%s : %i", temp[i].name,temp[i].count); @@ -213,7 +214,7 @@ void LogCompiledInstructions() { if (m_allInstructions[i]->compileCount > 0) { - fprintf(f.GetHandle(), "%s\t%i\t%lld\t%08x\n", m_allInstructions[i]->opname, + fprintf(f.GetHandle(), "%s\t%i\t%" PRId64 "\t%08x\n", m_allInstructions[i]->opname, m_allInstructions[i]->compileCount, m_allInstructions[i]->runCount, m_allInstructions[i]->lastUse); } } @@ -223,16 +224,16 @@ void LogCompiledInstructions() { if (m_allInstructions[i]->compileCount == 0) { - fprintf(f.GetHandle(), "%s\t%i\t%lld\n", m_allInstructions[i]->opname, + fprintf(f.GetHandle(), "%s\t%i\t%" PRId64 "\n", m_allInstructions[i]->opname, m_allInstructions[i]->compileCount, m_allInstructions[i]->runCount); } } #ifdef OPLOG f.Open(StringFromFormat("%s" OP_TO_LOG "_at.txt", File::GetUserPath(D_LOGS_IDX).c_str(), time), "w"); - for (size_t i = 0; i < rsplocations.size(); i++) + for (auto& rsplocation : rsplocations) { - fprintf(f.GetHandle(), OP_TO_LOG ": %08x\n", rsplocations[i]); + fprintf(f.GetHandle(), OP_TO_LOG ": %08x\n", rsplocation); } #endif diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.h b/Source/Core/Core/Src/PowerPC/PPCTables.h index 4a32f5515c..6da82a953e 100644 --- a/Source/Core/Core/Src/PowerPC/PPCTables.h +++ b/Source/Core/Core/Src/PowerPC/PPCTables.h @@ -10,7 +10,7 @@ enum { - FL_SET_CR0 = (1<<0), // + FL_SET_CR0 = (1<<0), // FL_SET_CR1 = (1<<1), // FL_SET_CRn = (1<<2), // FL_SET_CRx = FL_SET_CR0 | FL_SET_CR1 | FL_SET_CRn, // diff --git a/Source/Core/Core/Src/PowerPC/PowerPC.cpp b/Source/Core/Core/Src/PowerPC/PowerPC.cpp index 39bbf37d90..2401f0bb65 100644 --- a/Source/Core/Core/Src/PowerPC/PowerPC.cpp +++ b/Source/Core/Core/Src/PowerPC/PowerPC.cpp @@ -199,7 +199,7 @@ void SetMode(CoreMode new_mode) } } -void SingleStep() +void SingleStep() { cpu_core_base->SingleStep(); } @@ -342,7 +342,7 @@ void CheckExceptions() INFO_LOG(POWERPC, "EXCEPTION_PROGRAM"); Common::AtomicAnd(ppcState.Exceptions, ~EXCEPTION_PROGRAM); - } + } else if (exceptions & EXCEPTION_SYSCALL) { SRR0 = NPC; @@ -355,7 +355,7 @@ void CheckExceptions() Common::AtomicAnd(ppcState.Exceptions, ~EXCEPTION_SYSCALL); } else if (exceptions & EXCEPTION_FPU_UNAVAILABLE) - { + { //This happens a lot - Gamecube OS uses deferred FPU context switching SRR0 = PC; // re-execute the instruction SRR1 = MSR & 0x87C0FFFF; @@ -377,7 +377,7 @@ void CheckExceptions() INFO_LOG(POWERPC, "EXCEPTION_DSI"); Common::AtomicAnd(ppcState.Exceptions, ~EXCEPTION_DSI); - } + } else if (exceptions & EXCEPTION_ALIGNMENT) { //This never happens ATM diff --git a/Source/Core/Core/Src/PowerPC/PowerPC.h b/Source/Core/Core/Src/PowerPC/PowerPC.h index 82c912d213..a5c2bac0d5 100644 --- a/Source/Core/Core/Src/PowerPC/PowerPC.h +++ b/Source/Core/Core/Src/PowerPC/PowerPC.h @@ -51,7 +51,7 @@ struct GC_ALIGNED64(PowerPCState) u32 sr[16]; // Segment registers. u32 DebugCount; - + // special purpose registers - controls quantizers, DMA, and lots of other misc extensions. // also for power management, but we don't care about that. u32 spr[1024]; @@ -90,7 +90,7 @@ void DoState(PointerWrap &p); CoreMode GetMode(); void SetMode(CoreMode _coreType); -void SingleStep(); +void SingleStep(); void CheckExceptions(); void CheckExternalExceptions(); void CheckBreakPoints(); @@ -130,7 +130,7 @@ void UpdatePerformanceMonitor(u32 cycles, u32 num_load_stores, u32 num_fp_inst); #define rDEC PowerPC::ppcState.spr[SPR_DEC] #define SRR0 PowerPC::ppcState.spr[SPR_SRR0] #define SRR1 PowerPC::ppcState.spr[SPR_SRR1] -#define SPRG0 PowerPC::ppcState.spr[SPR_SPRG0] +#define SPRG0 PowerPC::ppcState.spr[SPR_SPRG0] #define SPRG1 PowerPC::ppcState.spr[SPR_SPRG1] #define SPRG2 PowerPC::ppcState.spr[SPR_SPRG2] #define SPRG3 PowerPC::ppcState.spr[SPR_SPRG3] diff --git a/Source/Core/Core/Src/PowerPC/Profiler.h b/Source/Core/Core/Src/PowerPC/Profiler.h index b15d911a97..d70483b2de 100644 --- a/Source/Core/Core/Src/PowerPC/Profiler.h +++ b/Source/Core/Core/Src/PowerPC/Profiler.h @@ -13,7 +13,7 @@ LEA(32, EAX, M(pt)); PUSH(EAX); \ CALL(QueryPerformanceCounter) // TODO: r64 way -// asm write : (u64) dt += t1-t0 +// asm write : (u64) dt += t1-t0 #define PROFILER_ADD_DIFF_LARGE_INTEGER(pdt, pt1, pt0) \ MOV(32, R(EAX), M(pt1)); \ SUB(32, R(EAX), M(pt0)); \ @@ -30,16 +30,16 @@ #else -#define PROFILER_QUERY_PERFORMANCE_COUNTER(pt) -#define PROFILER_ADD_DIFF_LARGE_INTEGER(pdt, pt1, pt0) +#define PROFILER_QUERY_PERFORMANCE_COUNTER(pt) +#define PROFILER_ADD_DIFF_LARGE_INTEGER(pdt, pt1, pt0) #define PROFILER_VPUSH #define PROFILER_VPOP #endif #else // TODO -#define PROFILER_QUERY_PERFORMANCE_COUNTER(pt) -#define PROFILER_ADD_DIFF_LARGE_INTEGER(pdt, pt1, pt0) +#define PROFILER_QUERY_PERFORMANCE_COUNTER(pt) +#define PROFILER_ADD_DIFF_LARGE_INTEGER(pdt, pt1, pt0) #define PROFILER_VPUSH #define PROFILER_VPOP #endif diff --git a/Source/Core/Core/Src/PowerPC/SignatureDB.cpp b/Source/Core/Core/Src/PowerPC/SignatureDB.cpp index 1292f1e6c3..4e91499306 100644 --- a/Source/Core/Core/Src/PowerPC/SignatureDB.cpp +++ b/Source/Core/Core/Src/PowerPC/SignatureDB.cpp @@ -114,7 +114,7 @@ void SignatureDB::Apply(PPCSymbolDB *symbol_db) function->name = iter->second.name; INFO_LOG(OSHLE, "Found %s at %08x (size: %08x)!", iter->second.name.c_str(), function->address, function->size); } - else + else { function->name = iter->second.name; ERROR_LOG(OSHLE, "Wrong size! Found %s at %08x (size: %08x instead of %08x)!", iter->second.name.c_str(), function->address, function->size, iter->second.size); @@ -142,18 +142,18 @@ void SignatureDB::Initialize(PPCSymbolDB *symbol_db, const char *prefix) /*static*/ u32 SignatureDB::ComputeCodeChecksum(u32 offsetStart, u32 offsetEnd) { u32 sum = 0; - for (u32 offset = offsetStart; offset <= offsetEnd; offset += 4) + for (u32 offset = offsetStart; offset <= offsetEnd; offset += 4) { u32 opcode = Memory::Read_Instruction(offset); - u32 op = opcode & 0xFC000000; + u32 op = opcode & 0xFC000000; u32 op2 = 0; u32 op3 = 0; u32 auxop = op >> 26; - switch (auxop) + switch (auxop) { case 4: //PS instructions op2 = opcode & 0x0000003F; - switch ( op2 ) + switch ( op2 ) { case 0: case 8: @@ -174,7 +174,7 @@ void SignatureDB::Initialize(PPCSymbolDB *symbol_db, const char *prefix) case 15: op2 = opcode & 0x03FF0000; break; - + case 19: // MCRF?? case 31: //integer case 63: //fpu @@ -190,7 +190,7 @@ void SignatureDB::Initialize(PPCSymbolDB *symbol_db, const char *prefix) op2 = opcode & 0x03FF0000; break; } - // Checksum only uses opcode, not opcode data, because opcode data changes + // Checksum only uses opcode, not opcode data, because opcode data changes // in all compilations, but opcodes don't! sum = ( ( (sum << 17 ) & 0xFFFE0000 ) | ( (sum >> 15) & 0x0001FFFF ) ); sum = sum ^ (op | op2 | op3); diff --git a/Source/Core/Core/Src/PowerPC/SignatureDB.h b/Source/Core/Core/Src/PowerPC/SignatureDB.h index 937dc3d540..c2e83dca83 100644 --- a/Source/Core/Core/Src/PowerPC/SignatureDB.h +++ b/Source/Core/Core/Src/PowerPC/SignatureDB.h @@ -36,7 +36,7 @@ public: void Clean(const char *prefix); void Clear(); void List(); - + void Initialize(PPCSymbolDB *func_db, const char *prefix = ""); void Apply(PPCSymbolDB *func_db); diff --git a/Source/Core/Core/Src/State.cpp b/Source/Core/Core/Src/State.cpp index 24647c143a..99a1236123 100644 --- a/Source/Core/Core/Src/State.cpp +++ b/Source/Core/Core/Src/State.cpp @@ -135,7 +135,7 @@ void SaveToBuffer(std::vector& buffer) DoState(p); const size_t buffer_size = reinterpret_cast(ptr); buffer.resize(buffer_size); - + ptr = &buffer[0]; p.SetMode(PointerWrap::MODE_WRITE); DoState(p); @@ -160,9 +160,9 @@ int GetEmptySlot(std::map m) for (int i = 1; i <= (int)NUM_STATES; i++) { bool found = false; - for (std::map::iterator it = m.begin(); it != m.end(); it++) + for (auto& p : m) { - if (it->second == i) + if (p.second == i) { found = true; break; @@ -227,7 +227,7 @@ void CompressAndDumpState(CompressAndDumpState_args save_args) if (!File::Rename(filename, File::GetUserPath(D_STATESAVES_IDX) + "lastState.sav")) Core::DisplayMessage("Failed to move previous state to state undo backup", 1000); - else + else File::Rename(filename + ".dtm", File::GetUserPath(D_STATESAVES_IDX) + "lastState.sav.dtm"); } @@ -360,8 +360,8 @@ void LoadFileStateData(const std::string& filename, std::vector& ret_data) StateHeader header; f.ReadArray(&header, 1); - - if (memcmp(SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID().c_str(), header.gameID, 6)) + + if (memcmp(SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID().c_str(), header.gameID, 6)) { Core::DisplayMessage(StringFromFormat("State belongs to a different game (ID %.*s)", 6, header.gameID), 2000); @@ -394,7 +394,7 @@ void LoadFileStateData(const std::string& filename, std::vector& ret_data) "Try loading the state again", res, i, new_len); return; } - + i += new_len; } } @@ -437,9 +437,9 @@ void LoadAs(const std::string& filename) std::lock_guard lk(g_cs_undo_load_buffer); SaveToBuffer(g_undo_load_buffer); if (Movie::IsRecordingInput() || Movie::IsPlayingInput()) - Movie::SaveRecording("undo.dtm"); - else if (File::Exists("undo.dtm")) - File::Delete("undo.dtm"); + Movie::SaveRecording((File::GetUserPath(D_STATESAVES_IDX) + "undo.dtm").c_str()); + else if (File::Exists(File::GetUserPath(D_STATESAVES_IDX) +"undo.dtm")) + File::Delete(File::GetUserPath(D_STATESAVES_IDX) + "undo.dtm"); } bool loaded = false; @@ -612,11 +612,11 @@ void UndoLoadState() std::lock_guard lk(g_cs_undo_load_buffer); if (!g_undo_load_buffer.empty()) { - if (File::Exists("undo.dtm") || (!Movie::IsRecordingInput() && !Movie::IsPlayingInput())) + if (File::Exists(File::GetUserPath(D_STATESAVES_IDX) + "undo.dtm") || (!Movie::IsRecordingInput() && !Movie::IsPlayingInput())) { LoadFromBuffer(g_undo_load_buffer); if (Movie::IsRecordingInput() || Movie::IsPlayingInput()) - Movie::LoadInput("undo.dtm"); + Movie::LoadInput((File::GetUserPath(D_STATESAVES_IDX) + "undo.dtm").c_str()); } else { diff --git a/Source/Core/Core/Src/VolumeHandler.cpp b/Source/Core/Core/Src/VolumeHandler.cpp index 19058cd354..5ceba836e5 100644 --- a/Source/Core/Core/Src/VolumeHandler.cpp +++ b/Source/Core/Core/Src/VolumeHandler.cpp @@ -15,7 +15,7 @@ DiscIO::IVolume *GetVolume() return g_pVolume; } -void EjectVolume() +void EjectVolume() { if (g_pVolume) { diff --git a/Source/Core/Core/Src/stdafx.h b/Source/Core/Core/Src/stdafx.h index ef9e560412..bc5046304d 100644 --- a/Source/Core/Core/Src/stdafx.h +++ b/Source/Core/Core/Src/stdafx.h @@ -10,3 +10,5 @@ #endif #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +#include diff --git a/Source/Core/DiscIO/DiscIO.vcxproj b/Source/Core/DiscIO/DiscIO.vcxproj index 4830666296..44d3cdf4e6 100644 --- a/Source/Core/DiscIO/DiscIO.vcxproj +++ b/Source/Core/DiscIO/DiscIO.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,155 +19,62 @@ - {B6398059-EBB6-4C34-B547-95F365B71FF4} - DiscIO + {160BDC25-5626-4B0D-BDD8-2953D9777FB5} - - true - StaticLibrary - MultiByte - - - true - StaticLibrary - MultiByte - - - false + StaticLibrary + v120 Unicode - - StaticLibrary - false - MultiByte + + true - + false - StaticLibrary - Unicode - - - StaticLibrary - false - MultiByte - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\Common\Src;..\..\..\Externals\zlib;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + + Create - - true - - - - - ..\Common\Src;..\..\..\Externals\zlib;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - true - - - - - ..\Common\Src;..\..\..\Externals\zlib;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\Common\Src;..\..\..\Externals\zlib;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\Common\Src;..\..\..\Externals\zlib;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - ..\Common\Src;..\..\..\Externals\zlib;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - true - true - true - - + + + + + + + + + - @@ -192,42 +91,22 @@ + - - - - - - - - - - - - - - - - - Create - Create - Create - Create - Create - Create - - - - - - - - + - + + {bdb6578b-0691-4e80-a46c-df21639fd3b8} + + + {ff213b23-2c26-4214-9f88-85271e557e87} + + + {2e6c348c-c75c-4d94-8d1e-9c1fcbf3efe4} + diff --git a/Source/Core/DiscIO/DiscIO.vcxproj.filters b/Source/Core/DiscIO/DiscIO.vcxproj.filters index 105d3ffc47..de47864e76 100644 --- a/Source/Core/DiscIO/DiscIO.vcxproj.filters +++ b/Source/Core/DiscIO/DiscIO.vcxproj.filters @@ -1,16 +1,59 @@  - + + {3873659a-9a30-4a58-af9e-8dad7d7eb627} + + + {324d4b72-d25b-4c83-bd61-6c9e85e59895} + + + {bd7dbc22-b233-4f82-a369-034f04133b73} + + + {0a2c0bb1-2948-4dfb-9216-77410c39a42c} + + + {cbce645c-943c-4a94-8be0-8ad529b5c825} + + + {3d2fc224-a486-4975-a617-d19f4439702b} + + + + + DiscScrubber + + + FileHandler + + + FileHandler + + + FileHandler + + + FileHandler + + + FileSystem + + + FileSystem + + + NAND + + + NAND + Volume\Blob Volume\Blob - - Volume\Blob - Volume\Blob @@ -20,6 +63,9 @@ Volume\Blob + + Volume\Blob + Volume @@ -41,45 +87,42 @@ Volume - - NAND - - - NAND - - - FileSystem - - - FileSystem - - - FileHandler - - - FileHandler - - - FileHandler - - - FileHandler - - - DiscScrubber - + - - - Volume\Blob + + DiscScrubber - - Volume\Blob + + FileHandler + + + FileHandler + + + FileHandler + + + FileHandler + + + FileSystem + + + FileSystem + + + NAND + + + NAND Volume\Blob + + Volume\Blob + Volume\Blob @@ -89,15 +132,15 @@ Volume\Blob + + Volume\Blob + Volume Volume - - Volume - Volume @@ -110,55 +153,12 @@ Volume - - NAND - - - NAND - - - FileSystem - - - FileSystem - - - FileHandler - - - FileHandler - - - FileHandler - - - FileHandler - - - DiscScrubber + + Volume + - - - - - {46b8b594-1da4-4941-9d3e-3057ac8c251f} - - - {96aa6fd2-a1d1-40c4-9235-50f342f32bf1} - - - {62cd3276-4116-4e3c-93ea-a170676fd84f} - - - {60157ced-f762-4521-be00-79a26744a11a} - - - {45ea663e-bcf3-4ff8-9c97-0f7cfc6ab60e} - - - {7bbe1cf7-ab2c-4f01-9e60-a9c8767b4dce} - + \ No newline at end of file diff --git a/Source/Core/DiscIO/Src/BannerLoaderGC.cpp b/Source/Core/DiscIO/Src/BannerLoaderGC.cpp index e253de488e..ce35258148 100644 --- a/Source/Core/DiscIO/Src/BannerLoaderGC.cpp +++ b/Source/Core/DiscIO/Src/BannerLoaderGC.cpp @@ -103,7 +103,7 @@ std::vector CBannerLoaderGC::GetNames() names.push_back(GetDecodedString(data)); } } - + return names; } diff --git a/Source/Core/DiscIO/Src/BannerLoaderGC.h b/Source/Core/DiscIO/Src/BannerLoaderGC.h index 133ee91978..7ad6d2122c 100644 --- a/Source/Core/DiscIO/Src/BannerLoaderGC.h +++ b/Source/Core/DiscIO/Src/BannerLoaderGC.h @@ -66,7 +66,7 @@ class CBannerLoaderGC std::string GetDecodedString(const char (&data)[N]) { auto const string_decoder = CVolumeGC::GetStringDecoder(m_country); - + // strnlen to trim NULLs return string_decoder(std::string(data, strnlen(data, sizeof(data)))); } diff --git a/Source/Core/DiscIO/Src/BannerLoaderWii.cpp b/Source/Core/DiscIO/Src/BannerLoaderWii.cpp index 2d63184023..15c4325748 100644 --- a/Source/Core/DiscIO/Src/BannerLoaderWii.cpp +++ b/Source/Core/DiscIO/Src/BannerLoaderWii.cpp @@ -15,7 +15,7 @@ namespace DiscIO { -CBannerLoaderWii::CBannerLoaderWii(DiscIO::IVolume *pVolume) +CBannerLoaderWii::CBannerLoaderWii(DiscIO::IVolume *pVolume) : m_pBannerFile(NULL) , m_IsValid(false) { @@ -42,7 +42,7 @@ CBannerLoaderWii::CBannerLoaderWii(DiscIO::IVolume *pVolume) File::GetUserPath(D_WIIUSER_IDX).c_str(), (u32)(TitleID>>32), (u32)TitleID); if(!File::Exists(titleFolder)) File::CreateFullPath(titleFolder); - + // Extracting banner.bin from opening.bnr sprintf(bnrFilename, "%stitle/%08x/%08x/data/opening.bnr", File::GetUserPath(D_WIIUSER_IDX).c_str(), (u32)(TitleID>>32), (u32)TitleID); @@ -61,7 +61,7 @@ CBannerLoaderWii::CBannerLoaderWii(DiscIO::IVolume *pVolume) // Now we have an LZ77-compressed file with a short IMD5 header // TODO: Finish the job - + File::Delete(bnrFilename); #else m_IsValid = false; @@ -115,15 +115,15 @@ bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::stri { auto const banner = reinterpret_cast(m_pBannerFile); auto const src_ptr = banner->m_Comment[index]; - + // Trim at first NULL auto const length = std::find(src_ptr, src_ptr + COMMENT_SIZE, 0x0) - src_ptr; - + std::wstring src; src.resize(length); std::transform(src_ptr, src_ptr + src.size(), src.begin(), (u16(&)(u16))Common::swap16); result = UTF16ToUTF8(src); - + return true; } @@ -133,7 +133,7 @@ bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::stri std::vector CBannerLoaderWii::GetNames() { std::vector ret(1); - + if (!GetStringFromComments(NAME_IDX, ret[0])) ret.clear(); diff --git a/Source/Core/DiscIO/Src/BannerLoaderWii.h b/Source/Core/DiscIO/Src/BannerLoaderWii.h index 84e106d1ba..2d7d0e6e90 100644 --- a/Source/Core/DiscIO/Src/BannerLoaderWii.h +++ b/Source/Core/DiscIO/Src/BannerLoaderWii.h @@ -27,7 +27,7 @@ class CBannerLoaderWii virtual std::vector GetDescriptions(); private: - + enum { TEXTURE_SIZE = 192 * 64 * 2, diff --git a/Source/Core/DiscIO/Src/Blob.cpp b/Source/Core/DiscIO/Src/Blob.cpp index 82a3c027fb..600b9e0a4b 100644 --- a/Source/Core/DiscIO/Src/Blob.cpp +++ b/Source/Core/DiscIO/Src/Blob.cpp @@ -39,7 +39,7 @@ const u8 *SectorReader::GetBlockData(u64 block_num) { return cache[0]; } - else + else { GetBlock(block_num, cache[0]); cache_tags[0] = block_num; diff --git a/Source/Core/DiscIO/Src/CISOBlob.cpp b/Source/Core/DiscIO/Src/CISOBlob.cpp index c4b3c60143..9f01e40c48 100644 --- a/Source/Core/DiscIO/Src/CISOBlob.cpp +++ b/Source/Core/DiscIO/Src/CISOBlob.cpp @@ -17,10 +17,10 @@ CISOFileReader::CISOFileReader(std::FILE* file) : m_file(file) { m_size = m_file.GetSize(); - + CISOHeader header; m_file.ReadArray(&header, 1); - + m_block_size = header.block_size; MapType count = 0; @@ -55,7 +55,7 @@ bool CISOFileReader::Read(u64 offset, u64 nbytes, u8* out_ptr) { auto const block = offset / m_block_size; auto const data_offset = offset % m_block_size; - + auto const bytes_to_read = std::min(m_block_size - data_offset, nbytes); if (block < CISO_MAP_SIZE && UNUSED_BLOCK_ID != m_ciso_map[block]) { @@ -77,7 +77,7 @@ bool CISOFileReader::Read(u64 offset, u64 nbytes, u8* out_ptr) nbytes -= bytes_to_read; } } - + return true; } diff --git a/Source/Core/DiscIO/Src/CISOBlob.h b/Source/Core/DiscIO/Src/CISOBlob.h index 8c580b0ce1..0039fe4f43 100644 --- a/Source/Core/DiscIO/Src/CISOBlob.h +++ b/Source/Core/DiscIO/Src/CISOBlob.h @@ -20,10 +20,10 @@ struct CISOHeader { // "CISO" char magic[4]; - + // little endian u32 block_size; - + // 0=unused, 1=used, others=invalid u8 map[CISO_MAP_SIZE]; }; @@ -39,10 +39,10 @@ public: private: CISOFileReader(std::FILE* file); - + typedef u16 MapType; static const MapType UNUSED_BLOCK_ID = -1; - + File::IOFile m_file; u64 m_size; u32 m_block_size; diff --git a/Source/Core/DiscIO/Src/CompressedBlob.cpp b/Source/Core/DiscIO/Src/CompressedBlob.cpp index 9ee59fa28e..c801ea3698 100644 --- a/Source/Core/DiscIO/Src/CompressedBlob.cpp +++ b/Source/Core/DiscIO/Src/CompressedBlob.cpp @@ -9,6 +9,8 @@ #include #endif +#include + #include "CompressedBlob.h" #include "DiscScrubber.h" #include "FileUtil.h" @@ -89,7 +91,7 @@ void CompressedBlobReader::GetBlock(u64 block_num, u8 *out_ptr) // clear unused part of zlib buffer. maybe this can be deleted when it works fully. memset(zlib_buffer + comp_block_size, 0, zlib_buffer_size - comp_block_size); - + m_file.Seek(offset, SEEK_SET); m_file.ReadBytes(zlib_buffer, comp_block_size); @@ -99,7 +101,7 @@ void CompressedBlobReader::GetBlock(u64 block_num, u8 *out_ptr) // First, check hash. u32 block_hash = HashAdler32(source, comp_block_size); if (block_hash != hashes[block_num]) - PanicAlert("Hash of block %lli is %08x instead of %08x.\n" + PanicAlert("Hash of block %" PRIu64 " is %08x instead of %08x.\n" "Your ISO, %s, is corrupt.", block_num, block_hash, hashes[block_num], file_name.c_str()); @@ -127,7 +129,7 @@ void CompressedBlobReader::GetBlock(u64 block_num, u8 *out_ptr) { // this seem to fire wrongly from time to time // to be sure, don't use compressed isos :P - PanicAlert("Failure reading block %lli - out of data and not at end.", block_num); + PanicAlert("Failure reading block %" PRIu64 " - out of data and not at end.", block_num); } inflateEnd(&z); if (uncomp_size != header.block_size) diff --git a/Source/Core/DiscIO/Src/DiscScrubber.cpp b/Source/Core/DiscIO/Src/DiscScrubber.cpp index 3724ad2e9f..928383579e 100644 --- a/Source/Core/DiscIO/Src/DiscScrubber.cpp +++ b/Source/Core/DiscIO/Src/DiscScrubber.cpp @@ -7,6 +7,8 @@ #include "FileUtil.h" #include "DiscScrubber.h" +#include + namespace DiscIO { @@ -32,7 +34,7 @@ struct SPartitionHeader u64 TMDOffset; u32 CertChainSize; u64 CertChainOffset; - // H3Size is always 0x18000 + // H3Size is always 0x18000 u64 H3Offset; u64 DataOffset; u64 DataSize; @@ -121,13 +123,13 @@ void GetNextBlock(File::IOFile& in, u8* buffer) if (m_isScrubbing && m_FreeTable[i]) { - DEBUG_LOG(DISCIO, "Freeing 0x%016llx", CurrentOffset); + DEBUG_LOG(DISCIO, "Freeing 0x%016" PRIx64, CurrentOffset); std::fill(buffer, buffer + m_BlockSize, 0xFF); in.Seek(m_BlockSize, SEEK_CUR); } else { - DEBUG_LOG(DISCIO, "Used 0x%016llx", CurrentOffset); + DEBUG_LOG(DISCIO, "Used 0x%016" PRIx64, CurrentOffset); in.ReadBytes(buffer, m_BlockSize); } @@ -150,7 +152,7 @@ void MarkAsUsed(u64 _Offset, u64 _Size) u64 CurrentOffset = _Offset; u64 EndOffset = CurrentOffset + _Size; - DEBUG_LOG(DISCIO, "Marking 0x%016llx - 0x%016llx as used", _Offset, EndOffset); + DEBUG_LOG(DISCIO, "Marking 0x%016" PRIx64 " - 0x%016" PRIx64 " as used", _Offset, EndOffset); while ((CurrentOffset < EndOffset) && (CurrentOffset < m_FileSize)) { @@ -234,10 +236,9 @@ bool ParseDisc() PartitionGroup[x].PartitionsVec.push_back(Partition); } - for (size_t i = 0; i < PartitionGroup[x].PartitionsVec.size(); i++) + for (auto& rPartition : PartitionGroup[x].PartitionsVec) { - SPartition& rPartition = PartitionGroup[x].PartitionsVec.at(i); - const SPartitionHeader& rHeader = PartitionGroup[x].PartitionsVec.at(i).Header; + const SPartitionHeader& rHeader = rPartition.Header; MarkAsUsed(rPartition.Offset, 0x2c0); diff --git a/Source/Core/DiscIO/Src/DriveBlob.cpp b/Source/Core/DiscIO/Src/DriveBlob.cpp index e7b0c70bfd..017cd702bc 100644 --- a/Source/Core/DiscIO/Src/DriveBlob.cpp +++ b/Source/Core/DiscIO/Src/DriveBlob.cpp @@ -30,7 +30,7 @@ DriveReader::DriveReader(const char *drive) return; } delete [] buffer; - + #ifdef _LOCKDRIVE // Do we want to lock the drive? // Lock the compact disc in the CD-ROM drive to prevent accidental // removal while reading from it. diff --git a/Source/Core/DiscIO/Src/FileHandlerARC.cpp b/Source/Core/DiscIO/Src/FileHandlerARC.cpp index 06e6767638..26ec6ec9ec 100644 --- a/Source/Core/DiscIO/Src/FileHandlerARC.cpp +++ b/Source/Core/DiscIO/Src/FileHandlerARC.cpp @@ -232,11 +232,11 @@ CARCFile::BuildFilenames(const size_t _FirstIndex, const size_t _LastIndex, cons const SFileInfo* CARCFile::FindFileInfo(std::string _rFullPath) const { - for (size_t i = 0; i < m_FileInfoVector.size(); i++) + for (auto& fileInfo : m_FileInfoVector) { - if (!strcasecmp(m_FileInfoVector[i].m_FullPath, _rFullPath.c_str())) + if (!strcasecmp(fileInfo.m_FullPath, _rFullPath.c_str())) { - return(&m_FileInfoVector[i]); + return(&fileInfo); } } diff --git a/Source/Core/DiscIO/Src/FileMonitor.cpp b/Source/Core/DiscIO/Src/FileMonitor.cpp index 26a24046b5..4b64f61914 100644 --- a/Source/Core/DiscIO/Src/FileMonitor.cpp +++ b/Source/Core/DiscIO/Src/FileMonitor.cpp @@ -134,7 +134,7 @@ void FindFilename(u64 offset) // There's something wrong with the paths if (!fname || (strlen(fname) == 512)) return; - + CheckFile(fname, pFileSystem->GetFileSize(fname)); } diff --git a/Source/Core/DiscIO/Src/FileSystemGCWii.cpp b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp index 69d250e523..cc09138f3e 100644 --- a/Source/Core/DiscIO/Src/FileSystemGCWii.cpp +++ b/Source/Core/DiscIO/Src/FileSystemGCWii.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "FileSystemGCWii.h" #include "StringUtil.h" @@ -46,12 +47,12 @@ const char* CFileSystemGCWii::GetFileName(u64 _Address) if (!m_Initialized) InitFileSystem(); - for (size_t i = 0; i < m_FileInfoVector.size(); i++) + for (auto& fileInfo : m_FileInfoVector) { - if ((m_FileInfoVector[i].m_Offset <= _Address) && - ((m_FileInfoVector[i].m_Offset + m_FileInfoVector[i].m_FileSize) > _Address)) + if ((fileInfo.m_Offset <= _Address) && + ((fileInfo.m_Offset + fileInfo.m_FileSize) > _Address)) { - return m_FileInfoVector[i].m_FullPath; + return fileInfo.m_FullPath; } } @@ -70,7 +71,7 @@ u64 CFileSystemGCWii::ReadFile(const char* _rFullPath, u8* _pBuffer, size_t _Max if (pFileInfo->m_FileSize > _MaxBufferSize) return 0; - DEBUG_LOG(DISCIO, "Filename: %s. Offset: %llx. Size: %llx",_rFullPath, + DEBUG_LOG(DISCIO, "Filename: %s. Offset: %" PRIx64 ". Size: %" PRIx64, _rFullPath, pFileInfo->m_Offset, pFileInfo->m_FileSize); m_rVolume->Read(pFileInfo->m_Offset, pFileInfo->m_FileSize, _pBuffer); @@ -190,7 +191,7 @@ bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const return true; } } - + return false; } @@ -207,14 +208,14 @@ std::string CFileSystemGCWii::GetStringFromOffset(u64 _Offset) const data.resize(255); m_rVolume->Read(_Offset, data.size(), (u8*)&data[0]); data.erase(std::find(data.begin(), data.end(), 0x00), data.end()); - + // TODO: Should we really always use SHIFT-JIS? // It makes some filenames in Pikmin (NTSC-U) sane, but is it correct? return SHIFTJISToUTF8(data); } size_t CFileSystemGCWii::GetFileList(std::vector &_rFilenames) -{ +{ if (!m_Initialized) InitFileSystem(); @@ -222,8 +223,8 @@ size_t CFileSystemGCWii::GetFileList(std::vector &_rFilenames PanicAlert("GetFileList : input list has contents?"); _rFilenames.clear(); _rFilenames.reserve(m_FileInfoVector.size()); - for (size_t i = 0; i < m_FileInfoVector.size(); i++) - _rFilenames.push_back(&m_FileInfoVector[i]); + for (auto& fileInfo : m_FileInfoVector) + _rFilenames.push_back(&fileInfo); return m_FileInfoVector.size(); } @@ -232,10 +233,10 @@ const SFileInfo* CFileSystemGCWii::FindFileInfo(const char* _rFullPath) if (!m_Initialized) InitFileSystem(); - for (size_t i = 0; i < m_FileInfoVector.size(); i++) + for (auto& fileInfo : m_FileInfoVector) { - if (!strcasecmp(m_FileInfoVector[i].m_FullPath, _rFullPath)) - return &m_FileInfoVector[i]; + if (!strcasecmp(fileInfo.m_FullPath, _rFullPath)) + return &fileInfo; } return NULL; diff --git a/Source/Core/DiscIO/Src/FileSystemGCWii.h b/Source/Core/DiscIO/Src/FileSystemGCWii.h index 8817e44153..5240c2d3fb 100644 --- a/Source/Core/DiscIO/Src/FileSystemGCWii.h +++ b/Source/Core/DiscIO/Src/FileSystemGCWii.h @@ -32,7 +32,7 @@ private: bool m_Initialized; bool m_Valid; u32 m_OffsetShift; // WII offsets are all shifted - + std::vector m_FileInfoVector; u32 Read32(u64 _Offset) const; std::string GetStringFromOffset(u64 _Offset) const; diff --git a/Source/Core/DiscIO/Src/Filesystem.h b/Source/Core/DiscIO/Src/Filesystem.h index 6995eec5fa..0fcaa88453 100644 --- a/Source/Core/DiscIO/Src/Filesystem.h +++ b/Source/Core/DiscIO/Src/Filesystem.h @@ -24,7 +24,7 @@ struct SFileInfo memset(m_FullPath, 0, sizeof(m_FullPath)); } - SFileInfo(const SFileInfo &rhs) : m_NameOffset(rhs.m_NameOffset), + SFileInfo(const SFileInfo &rhs) : m_NameOffset(rhs.m_NameOffset), m_Offset(rhs.m_Offset), m_FileSize(rhs.m_FileSize) { memcpy(m_FullPath, rhs.m_FullPath, strlen(rhs.m_FullPath) + 1); } diff --git a/Source/Core/DiscIO/Src/NANDContentLoader.cpp b/Source/Core/DiscIO/Src/NANDContentLoader.cpp index 974f8a9945..e5b36c54d5 100644 --- a/Source/Core/DiscIO/Src/NANDContentLoader.cpp +++ b/Source/Core/DiscIO/Src/NANDContentLoader.cpp @@ -6,7 +6,7 @@ #include #include -#include "Crypto/aes.h" +#include #include "MathUtil.h" #include "FileUtil.h" #include "Log.h" @@ -44,14 +44,14 @@ CSharedContent::~CSharedContent() std::string CSharedContent::GetFilenameFromSHA1(const u8* _pHash) { - for (size_t i=0; i& GetContent() const { return m_Content; } + const std::vector& GetContent() const override { return m_Content; } - u16 GetTitleVersion() const {return m_TitleVersion;} - u16 GetNumEntries() const {return m_numEntries;} - DiscIO::IVolume::ECountry GetCountry() const; - u8 GetCountryChar() const {return m_Country; } + u16 GetTitleVersion() const override {return m_TitleVersion;} + u16 GetNumEntries() const override {return m_numEntries;} + DiscIO::IVolume::ECountry GetCountry() const override; + u8 GetCountryChar() const override {return m_Country; } private: @@ -154,9 +154,9 @@ CNANDContentLoader::CNANDContentLoader(const std::string& _rName) CNANDContentLoader::~CNANDContentLoader() { - for (size_t i=0; im_Index == _Index) + if (Content.m_Index == _Index) { - return pContent; + return &Content; } } return NULL; @@ -239,10 +238,10 @@ bool CNANDContentLoader::Initialize(const std::string& _rName) m_Content.resize(m_numEntries); - for (u32 i=0; i& _TitleIDs, bool _owned) { - for (size_t i = 0; i < m_Elements.size(); i++) + for (auto& Element : m_Elements) { - if ((_owned && Common::CheckTitleTIK(Common::swap64(m_Elements[i].titleID))) || - (!_owned && Common::CheckTitleTMD(Common::swap64(m_Elements[i].titleID)))) - _TitleIDs.push_back(Common::swap64(m_Elements[i].titleID)); + if ((_owned && Common::CheckTitleTIK(Common::swap64(Element.titleID))) || + (!_owned && Common::CheckTitleTMD(Common::swap64(Element.titleID)))) + _TitleIDs.push_back(Common::swap64(Element.titleID)); } } @@ -477,7 +476,7 @@ u64 CNANDContentManager::Install_WiiWAD(std::string &fileName) } pTMDFile.WriteBytes(ContentLoader.GetTMDHeader(), INANDContentLoader::TMD_HEADER_SIZE); - + for (u32 i = 0; i < ContentLoader.GetContentSize(); i++) { const SNANDContent& Content = ContentLoader.GetContent()[i]; @@ -487,7 +486,7 @@ u64 CNANDContentManager::Install_WiiWAD(std::string &fileName) char APPFileName[1024]; if (Content.m_Type & 0x8000) //shared { - sprintf(APPFileName, "%s", + sprintf(APPFileName, "%s", CSharedContent::AccessInstance().AddSharedContent(Content.m_SHA1Hash).c_str()); } else @@ -504,7 +503,7 @@ u64 CNANDContentManager::Install_WiiWAD(std::string &fileName) PanicAlertT("WAD installation failed: error creating %s", APPFileName); return 0; } - + pAPPFile.WriteBytes(Content.m_pData, Content.m_Size); } else @@ -514,7 +513,7 @@ u64 CNANDContentManager::Install_WiiWAD(std::string &fileName) } pTMDFile.Close(); - + diff --git a/Source/Core/DiscIO/Src/Volume.h b/Source/Core/DiscIO/Src/Volume.h index a39816f8c1..65a9167654 100644 --- a/Source/Core/DiscIO/Src/Volume.h +++ b/Source/Core/DiscIO/Src/Volume.h @@ -55,7 +55,7 @@ public: virtual ECountry GetCountry() const = 0; virtual u64 GetSize() const = 0; - + // Size on disc (compressed size) virtual u64 GetRawSize() const = 0; }; diff --git a/Source/Core/DiscIO/Src/VolumeCommon.cpp b/Source/Core/DiscIO/Src/VolumeCommon.cpp index 07a514a2ea..53eb9948dd 100644 --- a/Source/Core/DiscIO/Src/VolumeCommon.cpp +++ b/Source/Core/DiscIO/Src/VolumeCommon.cpp @@ -8,12 +8,12 @@ namespace DiscIO { IVolume::ECountry CountrySwitch(u8 CountryCode) { - switch (CountryCode) + switch (CountryCode) { // Region free - fall through to European defaults for now case 'A': - + // PAL case 'D': // German return IVolume::COUNTRY_GERMANY; @@ -26,18 +26,18 @@ IVolume::ECountry CountrySwitch(u8 CountryCode) case 'M': // Japanese import to PAL regions case 'S': // Spanish-speaking regions case 'P': - case 'U': // Australia + case 'U': // Australia return IVolume::COUNTRY_EUROPE; break; - + case 'F': return IVolume::COUNTRY_FRANCE; break; - + case 'I': return IVolume::COUNTRY_ITALY; break; - + case 'R': return IVolume::COUNTRY_RUSSIA; break; diff --git a/Source/Core/DiscIO/Src/VolumeCreator.cpp b/Source/Core/DiscIO/Src/VolumeCreator.cpp index 6cf5ea836e..4dd24f9b4b 100644 --- a/Source/Core/DiscIO/Src/VolumeCreator.cpp +++ b/Source/Core/DiscIO/Src/VolumeCreator.cpp @@ -4,7 +4,7 @@ #include -#include "Crypto/aes.h" +#include #include "VolumeCreator.h" @@ -108,7 +108,7 @@ IVolume* CreateVolumeFromDirectory(const std::string& _rDirectory, bool _bIsWii, { if (CVolumeDirectory::IsValidDirectory(_rDirectory)) return new CVolumeDirectory(_rDirectory, _bIsWii, _rApploader, _rDOL); - + return NULL; } @@ -154,7 +154,7 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part std::vector PartitionsVec; }; SPartitionGroup PartitionGroup[4]; - + // read all partitions for (u32 x = 0; x < 4; x++) { @@ -183,11 +183,21 @@ static IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _Part memset(IV, 0, 16); _rReader.Read(rPartition.Offset + 0x44c, 8, IV); - AES_KEY AES_KEY; - AES_set_decrypt_key((Korean ? g_MasterKeyK : g_MasterKey), 128, &AES_KEY); + bool usingKoreanKey = false; + // Issue: 6813 + // Magic value is at 0x501f1 (1byte) + // If encrypted with the Korean key, the magic value would be 1 + // Otherwise it is zero + if (Korean && Reader.Read32(0x501ee) != 0) + { + usingKoreanKey = true; + } + + aes_context AES_ctx; + aes_setkey_dec(&AES_ctx, (usingKoreanKey ? g_MasterKeyK : g_MasterKey), 128); u8 VolumeKey[16]; - AES_cbc_encrypt(SubKey, VolumeKey, 16, &AES_KEY, IV, AES_DECRYPT); + aes_crypt_cbc(&AES_ctx, AES_DECRYPT, 16, IV, SubKey, VolumeKey); // -1 means the caller just wanted the partition with matching type if ((int)_VolumeNum == -1 || i == _VolumeNum) diff --git a/Source/Core/DiscIO/Src/VolumeDirectory.cpp b/Source/Core/DiscIO/Src/VolumeDirectory.cpp index 120e8c8018..f9f8f00ea8 100644 --- a/Source/Core/DiscIO/Src/VolumeDirectory.cpp +++ b/Source/Core/DiscIO/Src/VolumeDirectory.cpp @@ -23,12 +23,12 @@ CVolumeDirectory::CVolumeDirectory(const std::string& _rDirectory, bool _bIsWii, , FST_ADDRESS(0) , DOL_ADDRESS(0) { - m_rootDirectory = ExtractDirectoryName(_rDirectory); + m_rootDirectory = ExtractDirectoryName(_rDirectory); // create the default disk header m_diskHeader = new u8[DISKHEADERINFO_ADDRESS]; memset(m_diskHeader, 0, (size_t)DISKHEADERINFO_ADDRESS); - SetUniqueID("AGBJ01"); + SetUniqueID("AGBJ01"); SetName("Default name"); if(_bIsWii) @@ -105,7 +105,7 @@ bool CVolumeDirectory::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const { WriteToBuffer(FST_ADDRESS, m_fstSize, m_FSTData, _Offset, _Length, _pBuffer); } - + if(m_virtualDisk.size() == 0) return true; @@ -118,16 +118,16 @@ bool CVolumeDirectory::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const PadToAddress(fileIter->first, _Offset, _Length, _pBuffer); while(fileIter != m_virtualDisk.end() && _Length > 0) - { + { _dbg_assert_(DVDINTERFACE, fileIter->first <= _Offset); u64 fileOffset = _Offset - fileIter->first; - PlainFileReader* reader = PlainFileReader::Create(fileIter->second.c_str()); + PlainFileReader* reader = PlainFileReader::Create(fileIter->second.c_str()); if(reader == NULL) return false; u64 fileSize = reader->GetDataSize(); - + if(fileOffset < fileSize) { u64 fileBytes = fileSize - fileOffset; @@ -152,14 +152,14 @@ bool CVolumeDirectory::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const delete reader; } - + return true; } std::string CVolumeDirectory::GetUniqueID() const { _dbg_assert_(DVDINTERFACE, m_diskHeader); - + char buffer[7]; memcpy(buffer, m_diskHeader, 6); buffer[6] = 0; @@ -182,7 +182,7 @@ void CVolumeDirectory::SetUniqueID(std::string _ID) IVolume::ECountry CVolumeDirectory::GetCountry() const { _dbg_assert_(DVDINTERFACE, m_diskHeader); - + u8 CountryCode = m_diskHeader[3]; return CountrySwitch(CountryCode); @@ -263,7 +263,7 @@ void CVolumeDirectory::SetDiskTypeWii() m_diskHeader[0x18] = 0x5d; m_diskHeader[0x19] = 0x1c; m_diskHeader[0x1a] = 0x9e; - m_diskHeader[0x1b] = 0xa3; + m_diskHeader[0x1b] = 0xa3; memset(m_diskHeader + 0x1c, 0, 4); m_addressShift = 2; @@ -287,7 +287,7 @@ bool CVolumeDirectory::SetApploader(const std::string& _rApploader) if (!_rApploader.empty()) { std::string data; - if (!File::ReadFileToString(false, _rApploader.c_str(), data)) + if (!File::ReadFileToString(_rApploader.c_str(), data)) { PanicAlertT("Apploader unable to load from file"); return false; @@ -320,7 +320,7 @@ void CVolumeDirectory::SetDOL(const std::string& _rDOL) if (!_rDOL.empty()) { std::string data; - File::ReadFileToString(false, _rDOL.c_str(), data); + File::ReadFileToString(_rDOL.c_str(), data); m_DOLSize = data.size(); m_DOL = new u8[m_DOLSize]; copy(data.begin(), data.end(), m_DOL); @@ -363,9 +363,9 @@ void CVolumeDirectory::BuildFST() // write root entry WriteEntryData(fstOffset, DIRECTORY_ENTRY, 0, 0, totalEntries); - for(std::vector::iterator iter = rootEntry.children.begin(); iter != rootEntry.children.end(); ++iter) + for(auto& entry : rootEntry.children) { - WriteEntry(*iter, fstOffset, nameOffset, curDataAddress, rootOffset); + WriteEntry(entry, fstOffset, nameOffset, curDataAddress, rootOffset); } // overflow check @@ -399,7 +399,7 @@ void CVolumeDirectory::WriteToBuffer(u64 _SrcStartAddress, u64 _SrcLength, u8* _ _Length -= srcBytes; _pBuffer += srcBytes; _Address += srcBytes; - } + } } void CVolumeDirectory::PadToAddress(u64 _StartAddress, u64& _Address, u64& _Length, u8*& _pBuffer) const @@ -446,12 +446,12 @@ void CVolumeDirectory::WriteEntryData(u32& entryOffset, u8 type, u32 nameOffset, void CVolumeDirectory::WriteEntryName(u32& nameOffset, const std::string& name) { strncpy((char*)(m_FSTData + nameOffset + m_fstNameOffset), name.c_str(), name.length() + 1); - + nameOffset += (u32)(name.length() + 1); } void CVolumeDirectory::WriteEntry(const File::FSTEntry& entry, u32& fstOffset, u32& nameOffset, u64& dataOffset, u32 parentEntryNum) -{ +{ if(entry.isDirectory) { u32 myOffset = fstOffset; @@ -459,9 +459,9 @@ void CVolumeDirectory::WriteEntry(const File::FSTEntry& entry, u32& fstOffset, u WriteEntryData(fstOffset, DIRECTORY_ENTRY, nameOffset, parentEntryNum, (u32)(myEntryNum + entry.size + 1)); WriteEntryName(nameOffset, entry.virtualName); - for(std::vector::const_iterator iter = entry.children.begin(); iter != entry.children.end(); ++iter) + for(const auto& child : entry.children) { - WriteEntry(*iter, fstOffset, nameOffset, dataOffset, myEntryNum); + WriteEntry(child, fstOffset, nameOffset, dataOffset, myEntryNum); } } else diff --git a/Source/Core/DiscIO/Src/VolumeDirectory.h b/Source/Core/DiscIO/Src/VolumeDirectory.h index 31f7d9b255..fbab0f18b3 100644 --- a/Source/Core/DiscIO/Src/VolumeDirectory.h +++ b/Source/Core/DiscIO/Src/VolumeDirectory.h @@ -96,7 +96,7 @@ private: u8* m_diskHeader; #pragma pack(push, 1) - struct SDiskHeaderInfo + struct SDiskHeaderInfo { u32 debug_mntr_size; u32 simulated_mem_size; diff --git a/Source/Core/DiscIO/Src/VolumeGC.cpp b/Source/Core/DiscIO/Src/VolumeGC.cpp index a172229684..325e200a34 100644 --- a/Source/Core/DiscIO/Src/VolumeGC.cpp +++ b/Source/Core/DiscIO/Src/VolumeGC.cpp @@ -98,7 +98,7 @@ int CVolumeGC::GetRevision() const std::vector CVolumeGC::GetNames() const { std::vector names; - + auto const string_decoder = GetStringDecoder(GetCountry()); char name[0x60 + 1] = {}; diff --git a/Source/Core/DiscIO/Src/VolumeGC.h b/Source/Core/DiscIO/Src/VolumeGC.h index 55f84c1c0c..5fc7cf892d 100644 --- a/Source/Core/DiscIO/Src/VolumeGC.h +++ b/Source/Core/DiscIO/Src/VolumeGC.h @@ -30,9 +30,9 @@ public: u64 GetSize() const; u64 GetRawSize() const; bool IsDiscTwo() const; - + typedef std::string(*StringDecoder)(const std::string&); - + static StringDecoder GetStringDecoder(ECountry country); private: diff --git a/Source/Core/DiscIO/Src/VolumeWad.cpp b/Source/Core/DiscIO/Src/VolumeWad.cpp index e3356ad5b4..cc50ec8c66 100644 --- a/Source/Core/DiscIO/Src/VolumeWad.cpp +++ b/Source/Core/DiscIO/Src/VolumeWad.cpp @@ -104,15 +104,15 @@ std::vector CVolumeWAD::GetNames() const { return names; } - + footer_size = Common::swap32(footer_size); - + //Japanese, English, German, French, Spanish, Italian, Dutch, unknown, unknown, Korean for (int i = 0; i != 10; ++i) { static const u32 string_length = 42; static const u32 bytes_length = string_length * sizeof(u16); - + u16 temp[string_length]; if (footer_size < 0xF1 || !Read(0x9C + (i * bytes_length) + OpeningBnrOffset, bytes_length, (u8*)&temp)) @@ -125,7 +125,7 @@ std::vector CVolumeWAD::GetNames() const out_temp.resize(string_length); std::transform(temp, temp + out_temp.size(), out_temp.begin(), (u16(&)(u16))Common::swap16); out_temp.erase(std::find(out_temp.begin(), out_temp.end(), 0x00), out_temp.end()); - + names.push_back(UTF16ToUTF8(out_temp)); } } diff --git a/Source/Core/DiscIO/Src/VolumeWad.h b/Source/Core/DiscIO/Src/VolumeWad.h index 59edf79cd4..62c4d23762 100644 --- a/Source/Core/DiscIO/Src/VolumeWad.h +++ b/Source/Core/DiscIO/Src/VolumeWad.h @@ -11,7 +11,7 @@ // --- this volume type is used for Wad files --- // Some of this code might look redundant with the CNANDContentLoader class, however, -// We do not do any decryption here, we do raw read, so things are -Faster- +// We do not do any decryption here, we do raw read, so things are -Faster- namespace DiscIO { @@ -27,7 +27,7 @@ public: std::string GetMakerID() const; std::vector GetNames() const; u32 GetFSTSize() const { return 0; } - std::string GetApploaderDate() const { return "0"; } + std::string GetApploaderDate() const { return "0"; } ECountry GetCountry() const; u64 GetSize() const; u64 GetRawSize() const; diff --git a/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp index 51ee3d575a..8d2e46a0f6 100644 --- a/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp +++ b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp @@ -18,7 +18,8 @@ CVolumeWiiCrypted::CVolumeWiiCrypted(IBlobReader* _pReader, u64 _VolumeOffset, dataOffset(0x20000), m_LastDecryptedBlockOffset(-1) { - AES_set_decrypt_key(_pVolumeKey, 128, &m_AES_KEY); + m_AES_ctx = new aes_context; + aes_setkey_dec(m_AES_ctx, _pVolumeKey, 128); m_pBuffer = new u8[0x8000]; } @@ -29,6 +30,8 @@ CVolumeWiiCrypted::~CVolumeWiiCrypted() m_pReader = NULL; delete[] m_pBuffer; m_pBuffer = NULL; + delete m_AES_ctx; + m_AES_ctx = NULL; } bool CVolumeWiiCrypted::RAWRead( u64 _Offset, u64 _Length, u8* _pBuffer ) const @@ -67,7 +70,7 @@ bool CVolumeWiiCrypted::Read(u64 _ReadOffset, u64 _Length, u8* _pBuffer) const if (m_LastDecryptedBlockOffset != Block) { memcpy(IV, m_pBuffer + 0x3d0, 16); - AES_cbc_encrypt(m_pBuffer + 0x400, m_LastDecryptedBlock, 0x7C00, &m_AES_KEY, IV, AES_DECRYPT); + aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x7C00, IV, m_pBuffer + 0x400, m_LastDecryptedBlock); m_LastDecryptedBlockOffset = Block; } @@ -105,7 +108,7 @@ void CVolumeWiiCrypted::GetTMD(u8* _pBuffer, u32 * _sz) const RAWRead(m_VolumeOffset + tmdAddr, tmdSz, _pBuffer); *_sz = tmdSz; } - + std::string CVolumeWiiCrypted::GetUniqueID() const { if (m_pReader == NULL) @@ -150,7 +153,7 @@ std::string CVolumeWiiCrypted::GetMakerID() const { return std::string(); } - + makerID[2] = '\0'; return makerID; @@ -159,7 +162,7 @@ std::string CVolumeWiiCrypted::GetMakerID() const std::vector CVolumeWiiCrypted::GetNames() const { std::vector names; - + auto const string_decoder = CVolumeGC::GetStringDecoder(GetCountry()); char name[0xFF] = {}; @@ -199,7 +202,7 @@ std::string CVolumeWiiCrypted::GetApploaderDate() const { return std::string(); } - + date[10] = '\0'; return date; @@ -250,7 +253,8 @@ bool CVolumeWiiCrypted::CheckIntegrity() const NOTICE_LOG(DISCIO, "Integrity Check: fail at cluster %d: could not read metadata", clusterID); return false; } - AES_cbc_encrypt(clusterMDCrypted, clusterMD, 0x400, &m_AES_KEY, IV, AES_DECRYPT); + aes_crypt_cbc(m_AES_ctx, AES_DECRYPT, 0x400, IV, clusterMDCrypted, clusterMD); + // Some clusters have invalid data and metadata because they aren't // meant to be read by the game (for example, holes between files). To diff --git a/Source/Core/DiscIO/Src/VolumeWiiCrypted.h b/Source/Core/DiscIO/Src/VolumeWiiCrypted.h index 457774628e..4756a8842a 100644 --- a/Source/Core/DiscIO/Src/VolumeWiiCrypted.h +++ b/Source/Core/DiscIO/Src/VolumeWiiCrypted.h @@ -7,7 +7,7 @@ #include "Volume.h" #include "Blob.h" -#include "Crypto/aes.h" +#include // --- this volume type is used for encrypted Wii images --- @@ -38,7 +38,7 @@ private: IBlobReader* m_pReader; u8* m_pBuffer; - AES_KEY m_AES_KEY; + aes_context* m_AES_ctx; u64 m_VolumeOffset; u64 dataOffset; diff --git a/Source/Core/DiscIO/Src/WbfsBlob.cpp b/Source/Core/DiscIO/Src/WbfsBlob.cpp index f1d5a2b76a..7a4d8d99d6 100644 --- a/Source/Core/DiscIO/Src/WbfsBlob.cpp +++ b/Source/Core/DiscIO/Src/WbfsBlob.cpp @@ -138,13 +138,13 @@ File::IOFile& WbfsFileReader::SeekToCluster(u64 offset, u64* available) { u64 base_cluster = offset >> wbfs_sector_shift; if(base_cluster < m_blocks_per_disc) - { + { u64 cluster_address = wbfs_sector_size * Common::swap16(m_wlba_table[base_cluster]); u64 cluster_offset = offset & (wbfs_sector_size - 1); u64 final_address = cluster_address + cluster_offset; for(u32 i = 0; i != m_total_files; i ++) - { + { if(final_address < (m_files[i]->base_address + m_files[i]->size)) { m_files[i]->file.Seek(final_address - m_files[i]->base_address, SEEK_SET); @@ -187,7 +187,7 @@ bool IsWbfsBlob(const char* filename) u8 magic[4] = {0, 0, 0, 0}; f.ReadBytes(&magic, 4); - return (magic[0] == 'W') && + return (magic[0] == 'W') && (magic[1] == 'B') && (magic[2] == 'F') && (magic[3] == 'S'); diff --git a/Source/Core/DiscIO/Src/WbfsBlob.h b/Source/Core/DiscIO/Src/WbfsBlob.h index c59eb84173..b703d59931 100644 --- a/Source/Core/DiscIO/Src/WbfsBlob.h +++ b/Source/Core/DiscIO/Src/WbfsBlob.h @@ -18,7 +18,7 @@ class WbfsFileReader : public IBlobReader WbfsFileReader(const char* filename); ~WbfsFileReader(); - bool OpenFiles(const char* filename); + bool OpenFiles(const char* filename); bool ReadHeader(); File::IOFile& SeekToCluster(u64 offset, u64* available); diff --git a/Source/Core/DiscIO/Src/WiiWad.cpp b/Source/Core/DiscIO/Src/WiiWad.cpp index ed58977670..783ede511d 100644 --- a/Source/Core/DiscIO/Src/WiiWad.cpp +++ b/Source/Core/DiscIO/Src/WiiWad.cpp @@ -5,7 +5,7 @@ #include "NANDContentLoader.h" #include -#include +#include #include "MathUtil.h" #include "FileUtil.h" #include "Log.h" @@ -78,15 +78,15 @@ bool WiiWAD::ParseWAD(DiscIO::IBlobReader& _rReader) { CBlobBigEndianReader ReaderBig(_rReader); - // get header size + // get header size u32 HeaderSize = ReaderBig.Read32(0); - if (HeaderSize != 0x20) + if (HeaderSize != 0x20) { _dbg_assert_msg_(BOOT, (HeaderSize==0x20), "WiiWAD: Header size != 0x20"); return false; } - // get header + // get header u8 Header[0x20]; _rReader.Read(0, HeaderSize, Header); u32 HeaderType = ReaderBig.Read32(0x4); diff --git a/Source/Core/DiscIO/Src/WiiWad.h b/Source/Core/DiscIO/Src/WiiWad.h index 6483c10f52..0711c82cb0 100644 --- a/Source/Core/DiscIO/Src/WiiWad.h +++ b/Source/Core/DiscIO/Src/WiiWad.h @@ -30,13 +30,13 @@ public: u32 GetTMDSize() const { return m_TMDSize; } u32 GetDataAppSize() const { return m_DataAppSize; } u32 GetFooterSize() const { return m_FooterSize; } - + u8* GetCertificateChain() const { return m_pCertificateChain; } u8* GetTicket() const { return m_pTicket; } u8* GetTMD() const { return m_pTMD; } u8* GetDataApp() const { return m_pDataApp; } u8* GetFooter() const { return m_pFooter; } - + static bool IsWiiWAD(const std::string& _rName); private: diff --git a/Source/Core/DiscIO/Src/stdafx.h b/Source/Core/DiscIO/Src/stdafx.h index 5d6c2c1c42..03a92c3b49 100644 --- a/Source/Core/DiscIO/Src/stdafx.h +++ b/Source/Core/DiscIO/Src/stdafx.h @@ -15,3 +15,5 @@ #endif // TODO: reference additional headers your program requires here + +#include diff --git a/Source/Core/DolphinWX/CMakeLists.txt b/Source/Core/DolphinWX/CMakeLists.txt index ce68934486..23fb8d64f7 100644 --- a/Source/Core/DolphinWX/CMakeLists.txt +++ b/Source/Core/DolphinWX/CMakeLists.txt @@ -191,23 +191,11 @@ if(ANDROID) ${LIBS} "-Wl,--no-whole-archive" ) - if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "mips") - set (SO_TARGET "mips") - endif() - if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7-a") - set (SO_TARGET "armeabi-v7a") - endif() - if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv5te") - set (SO_TARGET "armeabi") - endif() - if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "i686") - set (SO_TARGET "x86") - endif() add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD - COMMAND mkdir ARGS -p ${CMAKE_SOURCE_DIR}/Source/Android/libs/${SO_TARGET} + COMMAND mkdir ARGS -p ${CMAKE_SOURCE_DIR}/Source/Android/libs/${ANDROID_NDK_ABI_NAME} ) add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD - COMMAND cp ARGS ${CMAKE_SOURCE_DIR}/libs/${SO_TARGET}/lib${DOLPHIN_EXE}.so ${CMAKE_SOURCE_DIR}/Source/Android/libs/${SO_TARGET}/ + COMMAND cp ARGS ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}/lib${DOLPHIN_EXE}.so ${CMAKE_SOURCE_DIR}/Source/Android/libs/${ANDROID_NDK_ABI_NAME}/ ) add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD COMMAND cp ARGS ${CMAKE_SOURCE_DIR}/Data/Sys/GC/* ${CMAKE_SOURCE_DIR}/Source/Android/assets/ diff --git a/Source/Core/DolphinWX/Dolphin.vcxproj b/Source/Core/DolphinWX/Dolphin.vcxproj deleted file mode 100644 index e81455e9a1..0000000000 --- a/Source/Core/DolphinWX/Dolphin.vcxproj +++ /dev/null @@ -1,408 +0,0 @@ - - - - - DebugFast - Win32 - - - DebugFast - x64 - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {1B099EF8-6F87-47A2-A3E7-898A24584F49} - Dolphin - - - - Application - true - Unicode - - - Application - true - Unicode - - - Application - false - Unicode - false - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(ProjectName)D - - - $(ProjectName)D - - - - - - - - $(ProjectName)DF - - - - $(ProjectName)DF - - - - ..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - - xcopy "$(SolutionDir)..\Data" "$(TargetDir)" /e /s /y /d -echo Copying External .dlls -xcopy "$(SolutionDir)..\Externals\OpenAL\Win32\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\msvcrt\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d - - Copying Data\* to $(TargetDir) - - - - - ..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - - xcopy "$(SolutionDir)..\Data" "$(TargetDir)" /e /s /y /d -echo Copying External .dlls -xcopy "$(SolutionDir)..\Externals\OpenAL\Win64\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\msvcrt\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d - - Copying Data\* to $(TargetDir) - - - - - ..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - - - - xcopy "$(SolutionDir)..\Data" "$(TargetDir)" /e /s /y /d -echo Copying External .dlls -xcopy "$(SolutionDir)..\Externals\OpenAL\Win32\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\msvcrt\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d - - Copying Data\* to $(TargetDir) - - - - - ..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - - xcopy "$(SolutionDir)..\Data" "$(TargetDir)" /e /s /y /d -echo Copying External .dlls -xcopy "$(SolutionDir)..\Externals\OpenAL\Win32\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\msvcrt\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d - - Copying Data\* to $(TargetDir) - - - - - ..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - - - - xcopy "$(SolutionDir)..\Data" "$(TargetDir)" /e /s /y /d -echo Copying External .dlls -xcopy "$(SolutionDir)..\Externals\OpenAL\Win64\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\msvcrt\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d - - Copying Data\* to $(TargetDir) - - - - - - - ..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories) - - - - xcopy "$(SolutionDir)..\Data" "$(TargetDir)" /e /s /y /d -echo Copying External .dlls -xcopy "$(SolutionDir)..\Externals\OpenAL\Win64\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d -xcopy "$(SolutionDir)..\Externals\msvcrt\$(PlatformName)\*.dll" "$(TargetDir)" /e /s /y /q /d - - Copying Data\* to $(TargetDir) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - - Create - Create - Create - Create - Create - Create - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {cd3d4c3c-1027-4d33-b047-aec7b56d0bf6} - - - {01573c36-ac6e-49f6-94ba-572517eb9740} - - - {349ee8f9-7d25-4909-aaf5-ff3fade72187} - - - {d8890b98-26f7-4cff-bbfb-b95f371b5f20} - - - {a680190d-0764-485b-9cf3-a82c5edd5715} - - - {93d73454-2512-424e-9cda-4bb357fe13dd} - true - true - false - true - false - - - {1c8436c9-dbaf-42be-83bc-cf3ec9175abe} - - - {3e1339f5-9311-4122-9442-369702e8fcad} - - - {37d007bd-d66c-4eaf-b56c-bd1aac340a05} - - - {c87a4178-44f6-49b2-b7aa-c79af1b8c534} - - - {8c60e805-0da5-4e25-8f84-038db504bb0d} - - - {b6398059-ebb6-4c34-b547-95f365b71ff4} - - - {b39ac394-5db5-4da9-9d98-09d46ca3701f} - - - {9a4c733c-bade-4ac6-b58a-6e274395e90e} - - - {1909cd2d-1707-456f-86ca-0df42a727c99} - - - {9e9da440-e9ad-413c-b648-91030e792211} - - - {3e5c4e02-1ba9-4776-bdbe-e3f91ffa34cf} - - - - - - - - - \ No newline at end of file diff --git a/Source/Core/DolphinWX/Dolphin.vcxproj.user b/Source/Core/DolphinWX/Dolphin.vcxproj.user deleted file mode 100644 index ac67ec629b..0000000000 --- a/Source/Core/DolphinWX/Dolphin.vcxproj.user +++ /dev/null @@ -1,29 +0,0 @@ - - - - $(TargetDir) - WindowsLocalDebugger - -d - - - $(TargetDir) - WindowsLocalDebugger - - - $(TargetDir) - WindowsLocalDebugger - - - $(TargetDir) - WindowsLocalDebugger - -d - - - $(TargetDir) - WindowsLocalDebugger - - - $(TargetDir) - WindowsLocalDebugger - - \ No newline at end of file diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj b/Source/Core/DolphinWX/DolphinWX.vcxproj new file mode 100644 index 0000000000..14eacfd440 --- /dev/null +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj @@ -0,0 +1,244 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {47411FDB-1BF2-48D0-AB4E-C7C41160F898} + Dolphin + + + + Application + v120 + Unicode + + + true + + + false + + + + + + + + + + + + + 0x00400000 + false + true + ..\..\..\Externals\SDL2-2.0.1\lib\$(PlatformName);..\..\..\Externals\OpenAL\$(PlatformName);%(AdditionalLibraryDirectories) + dsound.lib;iphlpapi.lib;winmm.lib;setupapi.lib;vfw32.lib;opengl32.lib;glu32.lib;rpcrt4.lib;comctl32.lib;OpenAL32.lib;%(AdditionalDependencies) + + + ..\..\..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {8ada04d7-6db1-4da4-ab55-64fb12a0997b} + + + {aa862e5e-a993-497a-b6a0-0e8e94b10050} + + + {4c9f135b-a85e-430c-bad4-4c67ef5fc12c} + + + {ab993f38-c31d-4897-b139-a620c42bc565} + + + {31643fdb-1bb8-4965-9de7-000fc88d35ae} + + + {93d73454-2512-424e-9cda-4bb357fe13dd} + + + {1c8436c9-dbaf-42be-83bc-cf3ec9175abe} + + + {ff213b23-2c26-4214-9f88-85271e557e87} + + + {54aa7840-5beb-4a0c-9452-74ba4cc7fd44} + + + {2e6c348c-c75c-4d94-8d1e-9c1fcbf3efe4} + + + {41279555-f94f-4ebc-99de-af863c10c5c4} + + + {e54cf649-140e-4255-81a5-30a673c1fb36} + + + {160bdc25-5626-4b0d-bdd8-2953d9777fb5} + + + {6bbd47cf-91fd-4077-b676-8b76980178a9} + + + {96020103-4ba5-4fd2-b4aa-5b6d24492d4e} + + + {ec1a314c-5588-4506-9c1e-2e58e5817f75} + + + {a4c423aa-f57c-46c7-a172-d1a777017d29} + + + {3de9ee35-3e91-4f27-a014-2866ad8c3fe3} + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Core/DolphinWX/Dolphin.vcxproj.filters b/Source/Core/DolphinWX/DolphinWX.vcxproj.filters similarity index 93% rename from Source/Core/DolphinWX/Dolphin.vcxproj.filters rename to Source/Core/DolphinWX/DolphinWX.vcxproj.filters index 6c1f530015..94d3eab1ed 100644 --- a/Source/Core/DolphinWX/Dolphin.vcxproj.filters +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj.filters @@ -1,16 +1,81 @@  + + {0c0288ac-1168-4534-b3d3-051b9981f842} + + + {ef70fd67-8f30-467a-8af0-ea0d48837f04} + + + {d0d9afb4-2b02-45c4-b6fc-91b9ae53a18c} + + + {fb02111e-3fe2-4ded-a594-7a56048f97b5} + + + {80626e3b-e13b-41c3-bd63-4ef1faf92924} + + + {7dc222d2-f1f0-44af-b4eb-76f6ca6cc29f} + + + {4352dc64-398e-4a96-ba4a-824dffa2004c} + + + {d6bc4dd6-06ed-46ad-b327-04afb26e10ec} + + + + - - - GUI\Saves + + GUI\Debugger - - GUI\NetPlay + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger GUI\InputConfig @@ -18,6 +83,21 @@ GUI\InputConfig + + GUI\NetPlay + + + GUI\Saves + + + GUI\Video + + + GUI\Video + + + Misc + GUI @@ -30,6 +110,9 @@ GUI + + GUI + GUI @@ -51,6 +134,9 @@ GUI + + GUI + GUI @@ -60,107 +146,103 @@ GUI + + GUI + + + GUI + GUI GUI - - Misc - - - GUI - - - GUI\Debugger - - - GUI\Video - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Video - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI - - - GUI - - - GUI - - + + + + - - - GUI\Saves + + GUI\Debugger - - GUI\NetPlay + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger + + + GUI\Debugger GUI\InputConfig - - GUI + + GUI\NetPlay + + + GUI\Saves + + + GUI\Video + + + GUI\Video + + + Misc + + + Resources GUI - + GUI GUI - + + GUI + + GUI @@ -169,6 +251,9 @@ GUI + + GUI + GUI @@ -178,6 +263,9 @@ GUI + + GUI + GUI @@ -187,117 +275,31 @@ GUI + + GUI + + + GUI + GUI GUI - - Misc - - - Resources - - - GUI - - - GUI\Debugger - - - GUI\Video - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Video - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI\Debugger - - - GUI - - - GUI - - - GUI - - - - + - - - Resources - - - - - {2f20d058-1119-4738-bda8-90fe900e8d69} - - - {70eb2f12-fab7-4953-8ad1-a981837c3a7e} - - - {38fc863a-0392-4c5d-ab28-7fe1f70e8a70} - - - {3727fb17-2efd-43ce-b71f-d110f0f40474} - - - {0721c9ae-4d49-49d6-997b-3731f8ab64cc} - - - {9dd3ef96-b03a-4c14-9d35-6a4850acd430} - - - {8ab1ce40-f5e7-47b8-9706-59c924af4eaa} - - - {ff5180be-244f-4c0e-8a35-bd4bffb6a343} - + Resources + + + Resources + + \ No newline at end of file diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj.user b/Source/Core/DolphinWX/DolphinWX.vcxproj.user new file mode 100644 index 0000000000..ff24062772 --- /dev/null +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj.user @@ -0,0 +1,9 @@ + + + + + $(BinaryOutputDir)$(TargetFileName) + $(BinaryOutputDir) + WindowsLocalDebugger + + \ No newline at end of file diff --git a/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp b/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp index 3e02c96272..d3dacf5fdf 100644 --- a/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp +++ b/Source/Core/DolphinWX/Src/ARCodeAddEdit.cpp @@ -38,7 +38,7 @@ CARCodeAddEdit::CARCodeAddEdit(int _selection, wxWindow* parent, wxWindowID id, EditCheatName = new wxTextCtrl(this, ID_EDITCHEAT_NAME, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); EditCheatName->SetValue(currentName); EntrySelection = new wxSpinButton(this, ID_ENTRY_SELECT, wxDefaultPosition, wxDefaultSize, wxVERTICAL); - EntrySelection->SetRange(1, ((int)arCodes.size()) > 0 ? (int)arCodes.size() : 1); + EntrySelection->SetRange(1, ((int)arCodes.size()) > 0 ? (int)arCodes.size() : 1); EntrySelection->SetValue((int)(arCodes.size() - selection)); EditCheatCode = new wxTextCtrl(this, ID_EDITCHEAT_CODE, wxEmptyString, wxDefaultPosition, wxSize(300, 100), wxTE_MULTILINE); UpdateTextCtrl(tempEntries); @@ -158,8 +158,8 @@ void CARCodeAddEdit::UpdateTextCtrl(ActionReplay::ARCode arCode) if (arCode.name != "") { - for (u32 i = 0; i < arCode.ops.size(); i++) - EditCheatCode->AppendText(wxString::Format(wxT("%08X %08X\n"), arCode.ops.at(i).cmd_addr, arCode.ops.at(i).value)); + for (auto& op : arCode.ops) + EditCheatCode->AppendText(wxString::Format(wxT("%08X %08X\n"), op.cmd_addr, op.value)); } else { diff --git a/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp b/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp index a80e28f373..d7fa34e4e0 100644 --- a/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp +++ b/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp @@ -47,7 +47,7 @@ namespace ButtonManager "InputL", "InputR" }; const int configStringNum = 20; - + void AddBind(std::string dev, sBind *bind) { auto it = m_controllers.find(dev); @@ -93,9 +93,9 @@ namespace ButtonManager { hasbind = true; type = BIND_AXIS; - sscanf(value.c_str(), "Device '%[^\']'-Axis %d%c", dev, &bindnum, &modifier); + sscanf(value.c_str(), "Device '%[^\']'-Axis %d%c", dev, &bindnum, &modifier); } - else if (std::string::npos != value.find("Button")) + else if (std::string::npos != value.find("Button")) { hasbind = true; type = BIND_BUTTON; @@ -121,7 +121,7 @@ namespace ButtonManager auto it = m_controllers.begin(); if (it == m_controllers.end()) return 0.0f; - return it->second->AxisValue(axis); + return it->second->AxisValue(axis); } void TouchEvent(int button, int action) { @@ -168,7 +168,7 @@ namespace ButtonManager { // XXX: Make platform specific drawing } - + // InputDevice void InputDevice::PressEvent(int button, int action) { @@ -195,8 +195,8 @@ namespace ButtonManager return 0.0f; if (it->second->m_bindtype == BIND_BUTTON) return ButtonValue(axis); - else + else return m_axises[it->second->m_bind] * it->second->m_neg; } - + } diff --git a/Source/Core/DolphinWX/Src/Android/ButtonManager.h b/Source/Core/DolphinWX/Src/Android/ButtonManager.h index 4b284f83d0..2273b786f9 100644 --- a/Source/Core/DolphinWX/Src/Android/ButtonManager.h +++ b/Source/Core/DolphinWX/Src/Android/ButtonManager.h @@ -76,11 +76,11 @@ namespace ButtonManager const BindType m_bindtype; const int m_bind; const float m_neg; - sBind(ButtonType buttontype, BindType bindtype, int bind, float neg) - : m_buttontype(buttontype), m_bindtype(bindtype), m_bind(bind), m_neg(neg) + sBind(ButtonType buttontype, BindType bindtype, int bind, float neg) + : m_buttontype(buttontype), m_bindtype(bindtype), m_bind(bind), m_neg(neg) {} }; - + class InputDevice { @@ -99,7 +99,7 @@ namespace ButtonManager for (auto it = m_binds.begin(); it != m_binds.end(); ++it) delete it->second; } - void AddBind(sBind *bind) { m_binds[bind->m_buttontype] = bind; } + void AddBind(sBind *bind) { m_binds[bind->m_buttontype] = bind; } void PressEvent(int button, int action); void AxisEvent(int axis, float value); bool ButtonValue(ButtonType button); diff --git a/Source/Core/DolphinWX/Src/Android/TextureLoader.cpp b/Source/Core/DolphinWX/Src/Android/TextureLoader.cpp index 093370da78..de4c3ee093 100644 --- a/Source/Core/DolphinWX/Src/Android/TextureLoader.cpp +++ b/Source/Core/DolphinWX/Src/Android/TextureLoader.cpp @@ -40,7 +40,7 @@ char* LoadPNG(const char *filename, u32 &width, u32 &height) /* Open the file. */ infile = fopen(filename, "rb"); - if (!infile) + if (!infile) return NULL; /* @@ -55,8 +55,8 @@ char* LoadPNG(const char *filename, u32 &width, u32 &height) return NULL; } - /* - * Set up the PNG structs + /* + * Set up the PNG structs */ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) { @@ -73,7 +73,7 @@ char* LoadPNG(const char *filename, u32 &width, u32 &height) /* - * block to handle libpng errors, + * block to handle libpng errors, * then check whether the PNG file had a bKGD chunk */ if (setjmp(png_jmpbuf(png_ptr))) { @@ -82,16 +82,16 @@ char* LoadPNG(const char *filename, u32 &width, u32 &height) return NULL; } - /* - * takes our file stream pointer (infile) and + /* + * takes our file stream pointer (infile) and * stores it in the png_ptr struct for later use. */ /* png_ptr->io_ptr = (png_voidp)infile;*/ png_init_io(png_ptr, infile); /* - * lets libpng know that we already checked the 8 - * signature bytes, so it should not expect to find + * lets libpng know that we already checked the 8 + * signature bytes, so it should not expect to find * them at the current file pointer location */ png_set_sig_bytes(png_ptr, 8); @@ -99,25 +99,25 @@ char* LoadPNG(const char *filename, u32 &width, u32 &height) /* Read the image */ /* - * reads and processes not only the PNG file's IHDR chunk - * but also any other chunks up to the first IDAT + * reads and processes not only the PNG file's IHDR chunk + * but also any other chunks up to the first IDAT * (i.e., everything before the image data). */ /* read all the info up to the image data */ png_read_info(png_ptr, info_ptr); - png_get_IHDR(png_ptr, info_ptr, &_width, &_height, &bit_depth, + png_get_IHDR(png_ptr, info_ptr, &_width, &_height, &bit_depth, &color_type, NULL, NULL, NULL); /* Set up some transforms. */ - if (bit_depth > 8) + if (bit_depth > 8) png_set_strip_16(png_ptr); - - if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + + if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(png_ptr); - if (color_type == PNG_COLOR_TYPE_PALETTE) + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); /* Update the png info struct.*/ diff --git a/Source/Core/DolphinWX/Src/CheatsWindow.cpp b/Source/Core/DolphinWX/Src/CheatsWindow.cpp index 413713b4ae..8bea682734 100644 --- a/Source/Core/DolphinWX/Src/CheatsWindow.cpp +++ b/Source/Core/DolphinWX/Src/CheatsWindow.cpp @@ -73,7 +73,7 @@ void wxCheatsWindow::Init_ChildControls() sizer_tab_cheats->Add(m_CheckListBox_CheatsList, 1, wxEXPAND | wxTOP | wxBOTTOM | wxLEFT, 10); sizer_tab_cheats->Add(sGroupBoxInfo, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 5); - m_Tab_Cheats->SetSizerAndFit(sizer_tab_cheats); + m_Tab_Cheats->SetSizerAndFit(sizer_tab_cheats); // $ Cheat Search Tab wxPanel* const tab_cheat_search = new CheatSearchTab(m_Notebook_Main); @@ -594,7 +594,7 @@ CreateCodeDialog::CreateCodeDialog(wxWindow* const parent, const u32 address) sizer_main->Add(textctrl_code, 0, wxALL, 5); sizer_main->Add(sizer_value_label, 0, wxALL, 5); sizer_main->Add(textctrl_value, 0, wxALL, 5); - sizer_main->Add(CreateButtonSizer(wxOK | wxCANCEL | wxNO_DEFAULT), 0, wxALL, 5); + sizer_main->Add(CreateButtonSizer(wxOK | wxCANCEL | wxNO_DEFAULT), 0, wxALL, 5); Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CreateCodeDialog::PressOK, this, wxID_OK); Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CreateCodeDialog::PressCancel, this, wxID_CANCEL); diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index a301534522..0dfa714318 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -103,7 +103,7 @@ static const wxLanguage langIds[] = #define WXSTR_TRANS(a) wxString(wxGetTranslation(wxT(a))) #ifdef WIN32 //only used with xgettext to be picked up as translatable string. -//win32 does not have wx on its path, the provided wxALL_FILES +//win32 does not have wx on its path, the provided wxALL_FILES //translation does not work there. #define unusedALL_FILES wxTRANSLATE("All files (*.*)|*.*"); #endif @@ -185,9 +185,9 @@ CConfigMain::CConfigMain(wxWindow* parent, wxWindowID id, const wxString& title, CreateGUIControls(); // Update selected ISO paths - for(u32 i = 0; i < SConfig::GetInstance().m_ISOFolder.size(); i++) + for(auto& folder : SConfig::GetInstance().m_ISOFolder) { - ISOPaths->Append(StrToWxStr(SConfig::GetInstance().m_ISOFolder[i])); + ISOPaths->Append(StrToWxStr(folder)); } } @@ -216,7 +216,7 @@ void CConfigMain::UpdateGUI() CPUThread->Disable(); SkipIdle->Disable(); EnableCheats->Disable(); - + CPUEngine->Disable(); _NTSCJ->Disable(); @@ -251,14 +251,14 @@ void CConfigMain::InitializeGUILists() arrayStringFor_Framelimit.Add(wxString::Format(wxT("%i"), i)); // Emulator Engine - for (unsigned int a = 0; a < (sizeof(CPUCores) / sizeof(CPUCore)); ++a) - arrayStringFor_CPUEngine.Add(wxGetTranslation(CPUCores[a].name)); - - // DSP Engine + for (auto& CPUCores_a : CPUCores) + arrayStringFor_CPUEngine.Add(wxGetTranslation(CPUCores_a.name)); + + // DSP Engine arrayStringFor_DSPEngine.Add(_("DSP HLE emulation (fast)")); arrayStringFor_DSPEngine.Add(_("DSP LLE recompiler")); arrayStringFor_DSPEngine.Add(_("DSP LLE interpreter (slow)")); - + // Gamecube page // GC Language arrayStrings arrayStringFor_GCSystemLang.Add(_("English")); @@ -268,16 +268,16 @@ void CConfigMain::InitializeGUILists() arrayStringFor_GCSystemLang.Add(_("Italian")); arrayStringFor_GCSystemLang.Add(_("Dutch")); - + // Wii page // Sensorbar Position arrayStringFor_WiiSensBarPos.Add(_("Bottom")); arrayStringFor_WiiSensBarPos.Add(_("Top")); - + // Aspect ratio arrayStringFor_WiiAspectRatio.Add(wxT("4:3")); arrayStringFor_WiiAspectRatio.Add(wxT("16:9")); - + // Wii Language arrayStrings arrayStringFor_WiiSystemLang = arrayStringFor_GCSystemLang; arrayStringFor_WiiSystemLang.Insert(_("Japanese"), 0); @@ -318,7 +318,7 @@ void CConfigMain::InitializeGUILists() void CConfigMain::InitializeGUIValues() { const SCoreStartupParameter& startup_params = SConfig::GetInstance().m_LocalCoreStartupParameter; - + // General - Basic CPUThread->SetValue(startup_params.bCPUThread); SkipIdle->SetValue(startup_params.bSkipIdle); @@ -473,7 +473,7 @@ void CConfigMain::InitializeGUIValues() WiiEuRGB60->SetValue(!!SConfig::GetInstance().m_SYSCONF->GetData("IPL.E60")); WiiAspectRatio->SetSelection(SConfig::GetInstance().m_SYSCONF->GetData("IPL.AR")); WiiSystemLang->SetSelection(SConfig::GetInstance().m_SYSCONF->GetData("IPL.LNG")); - + // Wii - Devices WiiSDCard->SetValue(SConfig::GetInstance().m_WiiSDCard); WiiKeyboard->SetValue(SConfig::GetInstance().m_WiiKeyboard); @@ -525,7 +525,7 @@ void CConfigMain::InitializeGUITooltips() void CConfigMain::CreateGUIControls() { InitializeGUILists(); - + // Create the notebook and pages Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize); wxPanel* const GeneralPage = new wxPanel(Notebook, ID_GENERALPAGE, wxDefaultPosition, wxDefaultSize); @@ -613,7 +613,7 @@ void CConfigMain::CreateGUIControls() if (-1 == theme_selection->FindString(wxname)) theme_selection->Append(wxname); }); - + theme_selection->SetStringSelection(StrToWxStr(SConfig::GetInstance().m_LocalCoreStartupParameter.theme_name)); // std::function = avoid error on msvc @@ -639,7 +639,7 @@ void CConfigMain::CreateGUIControls() sDisplayPage->Add(sbInterface, 0, wxEXPAND | wxALL, 5); DisplayPage->SetSizer(sDisplayPage); - + // Audio page DSPEngine = new wxRadioBox(AudioPage, ID_DSPENGINE, _("DSP Emulator Engine"), wxDefaultPosition, wxDefaultSize, arrayStringFor_DSPEngine, 0, wxRA_SPECIFY_ROWS); @@ -796,7 +796,7 @@ void CConfigMain::CreateGUIControls() sWiiPage->Add(sbWiiDeviceSettings, 0, wxEXPAND|wxALL, 5); WiiPage->SetSizer(sWiiPage); - + // Paths page ISOPaths = new wxListBox(PathsPage, ID_ISOPATHS, wxDefaultPosition, wxDefaultSize, arrayStringFor_ISOPaths, wxLB_SINGLE, wxDefaultValidator); RecursiveISOPath = new wxCheckBox(PathsPage, ID_RECURSIVEISOPATH, _("Search Subfolders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); @@ -988,7 +988,7 @@ void CConfigMain::AddAudioBackends() { std::vector backends = AudioCommon::GetSoundBackends(); // I'm sure Billiard will change this into an auto sometimes soon :P - for (std::vector::const_iterator iter = backends.begin(); + for (std::vector::const_iterator iter = backends.begin(); iter != backends.end(); ++iter) { BackendSelection->Append(wxGetTranslation(StrToWxStr(*iter))); diff --git a/Source/Core/DolphinWX/Src/ConfigMain.h b/Source/Core/DolphinWX/Src/ConfigMain.h index 094fb6df85..1624254003 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.h +++ b/Source/Core/DolphinWX/Src/ConfigMain.h @@ -124,7 +124,7 @@ private: wxCheckBox* EnableCheats; wxChoice* Framelimit; wxCheckBox* UseFPSForLimiting; - + // Advanced wxCheckBox* EnableOpenCL; wxRadioBox* CPUEngine; diff --git a/Source/Core/DolphinWX/Src/Debugger/BreakpointDlg.h b/Source/Core/DolphinWX/Src/Debugger/BreakpointDlg.h index b5d6248e6f..208f1038b9 100644 --- a/Source/Core/DolphinWX/Src/Debugger/BreakpointDlg.h +++ b/Source/Core/DolphinWX/Src/Debugger/BreakpointDlg.h @@ -14,7 +14,7 @@ class BreakPointDlg : public wxDialog { public: BreakPointDlg(CBreakPointWindow *_Parent); - + private: CBreakPointWindow *Parent; wxTextCtrl *m_pEditAddress; diff --git a/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp b/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp index c3d366c1dc..c23412e7ad 100644 --- a/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/BreakpointView.cpp @@ -32,9 +32,8 @@ void CBreakPointView::Update() char szBuffer[64]; const BreakPoints::TBreakPoints& rBreakPoints = PowerPC::breakpoints.GetBreakPoints(); - for (size_t i = 0; i < rBreakPoints.size(); i++) + for (const auto& rBP : rBreakPoints) { - const TBreakPoint& rBP = rBreakPoints[i]; if (!rBP.bTemporary) { wxString temp; @@ -42,14 +41,14 @@ void CBreakPointView::Update() int Item = InsertItem(0, temp); temp = StrToWxStr("BP"); SetItem(Item, 1, temp); - + Symbol *symbol = g_symbolDB.GetSymbolFromAddr(rBP.iAddress); if (symbol) { temp = StrToWxStr(g_symbolDB.GetDescription(rBP.iAddress)); SetItem(Item, 2, temp); } - + sprintf(szBuffer, "%08x", rBP.iAddress); temp = StrToWxStr(szBuffer); SetItem(Item, 3, temp); @@ -59,10 +58,8 @@ void CBreakPointView::Update() } const MemChecks::TMemChecks& rMemChecks = PowerPC::memchecks.GetMemChecks(); - for (size_t i = 0; i < rMemChecks.size(); i++) + for (const auto& rMemCheck : rMemChecks) { - const TMemCheck& rMemCheck = rMemChecks[i]; - wxString temp; temp = StrToWxStr((rMemCheck.Break || rMemCheck.Log) ? "on" : " "); int Item = InsertItem(0, temp); diff --git a/Source/Core/DolphinWX/Src/Debugger/BreakpointWindow.cpp b/Source/Core/DolphinWX/Src/Debugger/BreakpointWindow.cpp index 0dfd614853..7a2f91ccf2 100644 --- a/Source/Core/DolphinWX/Src/Debugger/BreakpointWindow.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/BreakpointWindow.cpp @@ -176,10 +176,10 @@ void CBreakPointWindow::LoadAll(wxCommandEvent& WXUNUSED(event)) IniFile ini; BreakPoints::TBreakPointsStr newbps; MemChecks::TMemChecksStr newmcs; - + if (!ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX))) return; - + if (ini.GetLines("BreakPoints", newbps, false)) PowerPC::breakpoints.AddFromStrings(newbps); if (ini.GetLines("MemoryChecks", newmcs, false)) diff --git a/Source/Core/DolphinWX/Src/Debugger/CodeView.cpp b/Source/Core/DolphinWX/Src/Debugger/CodeView.cpp index bcfb1ab586..b4d6c4378d 100644 --- a/Source/Core/DolphinWX/Src/Debugger/CodeView.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/CodeView.cpp @@ -269,7 +269,7 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event) case IDM_JITRESULTS: debugger->showJitResults(selection); break; - + case IDM_FOLLOWBRANCH: { u32 dest = AddrToBranch(selection); @@ -280,7 +280,7 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event) } } break; - + case IDM_ADDFUNCTION: symbol_db->AddFunction(selection); Host_NotifyMapLoaded(); @@ -378,7 +378,7 @@ void CCodeView::OnPaint(wxPaintEvent& event) // -------------------------------------------------------------------- // Colors and brushes - // ------------------------- + // ------------------------- dc.SetBackgroundMode(wxTRANSPARENT); // the text background const wxChar* bgColor = _T("#ffffff"); wxPen nullPen(bgColor); @@ -387,7 +387,7 @@ void CCodeView::OnPaint(wxPaintEvent& event) nullPen.SetStyle(wxTRANSPARENT); currentPen.SetStyle(wxSOLID); wxBrush currentBrush(_T("#FFEfE8")); // light gray - wxBrush pcBrush(_T("#70FF70")); // green + wxBrush pcBrush(_T("#70FF70")); // green wxBrush bpBrush(_T("#FF3311")); // red wxBrush bgBrush(bgColor); @@ -526,7 +526,7 @@ void CCodeView::OnPaint(wxPaintEvent& event) // Colors and brushes // ------------------------- dc.SetPen(currentPen); - + for (int i = 0; i < numBranches; i++) { int x = 17 + 49 * charWidth + (branches[i].srcAddr % 9) * 8; diff --git a/Source/Core/DolphinWX/Src/Debugger/CodeView.h b/Source/Core/DolphinWX/Src/Debugger/CodeView.h index 5618abf4d7..fcd3164eec 100644 --- a/Source/Core/DolphinWX/Src/Debugger/CodeView.h +++ b/Source/Core/DolphinWX/Src/Debugger/CodeView.h @@ -34,7 +34,7 @@ public: void InsertBlrNop(int); u32 GetSelection() {return(selection);} - void ToggleBreakpoint(u32 address); + void ToggleBreakpoint(u32 address); struct BlrStruct // for IDM_INSERTBLR { diff --git a/Source/Core/DolphinWX/Src/Debugger/CodeWindow.cpp b/Source/Core/DolphinWX/Src/Debugger/CodeWindow.cpp index 17e66337d2..3a6c9d4f42 100644 --- a/Source/Core/DolphinWX/Src/Debugger/CodeWindow.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/CodeWindow.cpp @@ -296,9 +296,9 @@ void CCodeWindow::UpdateLists() if (!symbol) return; - for (int i = 0; i < (int)symbol->callers.size(); i++) + for (auto& call : symbol->callers) { - u32 caller_addr = symbol->callers[i].callAddress; + u32 caller_addr = call.callAddress; Symbol *caller_symbol = g_symbolDB.GetSymbolFromAddr(caller_addr); if (caller_symbol) { @@ -309,9 +309,9 @@ void CCodeWindow::UpdateLists() } calls->Clear(); - for (int i = 0; i < (int)symbol->calls.size(); i++) + for (auto& call : symbol->calls) { - u32 call_addr = symbol->calls[i].function; + u32 call_addr = call.function; Symbol *call_symbol = g_symbolDB.GetSymbolFromAddr(call_addr); if (call_symbol) { @@ -332,10 +332,10 @@ void CCodeWindow::UpdateCallstack() bool ret = Dolphin_Debugger::GetCallstack(stack); - for (size_t i = 0; i < stack.size(); i++) + for (auto& frame : stack) { - int idx = callstack->Append(StrToWxStr(stack[i].Name)); - callstack->SetClientData(idx, (void*)(u64)stack[i].vAddress); + int idx = callstack->Append(StrToWxStr(frame.Name)); + callstack->SetClientData(idx, (void*)(u64)frame.vAddress); } if (!ret) @@ -348,20 +348,20 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam // CPU Mode wxMenu* pCoreMenu = new wxMenu; - wxMenuItem* interpreter = pCoreMenu->Append(IDM_INTERPRETER, _("&Interpreter core"), + wxMenuItem* interpreter = pCoreMenu->Append(IDM_INTERPRETER, _("&Interpreter core"), StrToWxStr("This is necessary to get break points" " and stepping to work as explained in the Developer Documentation. But it can be very" - " slow, perhaps slower than 1 fps."), + " slow, perhaps slower than 1 fps."), wxITEM_CHECK); interpreter->Check(_LocalCoreStartupParameter.iCPUCore == 0); pCoreMenu->AppendSeparator(); pCoreMenu->Append(IDM_JITBLOCKLINKING, _("&JIT Block Linking off"), - _("Provide safer execution by not linking the JIT blocks."), + _("Provide safer execution by not linking the JIT blocks."), wxITEM_CHECK); pCoreMenu->Append(IDM_JITNOBLOCKCACHE, _("&Disable JIT Cache"), - _("Avoid any involuntary JIT cache clearing, this may prevent Zelda TP from crashing.\n[This option must be selected before a game is started.]"), + _("Avoid any involuntary JIT cache clearing, this may prevent Zelda TP from crashing.\n[This option must be selected before a game is started.]"), wxITEM_CHECK); pCoreMenu->Append(IDM_CLEARCODECACHE, _("&Clear JIT cache")); @@ -412,17 +412,17 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam void CCodeWindow::CreateMenuOptions(wxMenu* pMenu) { wxMenuItem* boottopause = pMenu->Append(IDM_BOOTTOPAUSE, _("Boot to pause"), - _("Start the game directly instead of booting to pause"), + _("Start the game directly instead of booting to pause"), wxITEM_CHECK); boottopause->Check(bBootToPause); - wxMenuItem* automaticstart = pMenu->Append(IDM_AUTOMATICSTART, _("&Automatic start"), + wxMenuItem* automaticstart = pMenu->Append(IDM_AUTOMATICSTART, _("&Automatic start"), StrToWxStr( "Automatically load the Default ISO when Dolphin starts, or the last game you loaded," " if you have not given it an elf file with the --elf command line. [This can be" " convenient if you are bug-testing with a certain game and want to rebuild" " and retry it several times, either with changes to Dolphin or if you are" - " developing a homebrew game.]"), + " developing a homebrew game.]"), wxITEM_CHECK); automaticstart->Check(bAutomaticStart); @@ -480,7 +480,7 @@ void CCodeWindow::OnCPUMode(wxCommandEvent& event) // Clear the JIT cache to enable these changes JitInterface::ClearCache(); - + // Update UpdateButtonStates(); } @@ -552,8 +552,8 @@ void CCodeWindow::InitBitmaps() m_Bitmaps[Toolbar_SetPC] = wxGetBitmapFromMemory(toolbar_add_memcheck_png); // scale to 24x24 for toolbar - for (size_t n = 0; n < ToolbarDebugBitmapMax; n++) - m_Bitmaps[n] = wxBitmap(m_Bitmaps[n].ConvertToImage().Scale(24, 24)); + for (auto& bitmap : m_Bitmaps) + bitmap = wxBitmap(bitmap.ConvertToImage().Scale(24, 24)); } void CCodeWindow::PopulateToolbar(wxAuiToolBar* toolBar) diff --git a/Source/Core/DolphinWX/Src/Debugger/CodeWindowFunctions.cpp b/Source/Core/DolphinWX/Src/Debugger/CodeWindowFunctions.cpp index d9fe275abd..3582866c48 100644 --- a/Source/Core/DolphinWX/Src/Debugger/CodeWindowFunctions.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/CodeWindowFunctions.cpp @@ -108,7 +108,7 @@ void CCodeWindow::Save() "Registers", "Breakpoints", "Memory", - "JIT", + "JIT", "Sound", "Video", "Code" diff --git a/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.cpp b/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.cpp index d5e589c09b..3be7432eca 100644 --- a/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.cpp @@ -19,7 +19,7 @@ DSPDebuggerLLE* m_DebuggerFrame = NULL; -BEGIN_EVENT_TABLE(DSPDebuggerLLE, wxPanel) +BEGIN_EVENT_TABLE(DSPDebuggerLLE, wxPanel) EVT_CLOSE(DSPDebuggerLLE::OnClose) EVT_MENU_RANGE(ID_RUNTOOL, ID_SHOWPCTOOL, DSPDebuggerLLE::OnChangeState) EVT_TEXT_ENTER(ID_ADDRBOX, DSPDebuggerLLE::OnAddrBoxChange) diff --git a/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.cpp b/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.cpp index a12e4d638a..eea0bf9426 100644 --- a/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.cpp @@ -68,7 +68,7 @@ void GFXDebuggerPanel::SaveSettings() const // TODO: get the screen resolution and make limits from that if (GetPosition().x < 1000 && GetPosition().y < 1000 - && GetSize().GetWidth() < 1000 + && GetSize().GetWidth() < 1000 && GetSize().GetHeight() < 1000) { file.Set("VideoWindow", "x", GetPosition().x); diff --git a/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.h b/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.h index eac6734bc9..90d4773841 100644 --- a/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.h +++ b/Source/Core/DolphinWX/Src/Debugger/DebuggerPanel.h @@ -74,7 +74,7 @@ private: ID_COUNT }; - void OnClose(wxCloseEvent& event); + void OnClose(wxCloseEvent& event); void CreateGUIControls(); void GeneralSettings(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/Src/Debugger/MemoryCheckDlg.h b/Source/Core/DolphinWX/Src/Debugger/MemoryCheckDlg.h index 9783869ffe..cc212fb88b 100644 --- a/Source/Core/DolphinWX/Src/Debugger/MemoryCheckDlg.h +++ b/Source/Core/DolphinWX/Src/Debugger/MemoryCheckDlg.h @@ -13,7 +13,7 @@ class MemoryCheckDlg : public wxDialog { public: MemoryCheckDlg(CBreakPointWindow *parent); - + private: CBreakPointWindow *m_parent; wxCheckBox* m_pReadFlag; diff --git a/Source/Core/DolphinWX/Src/Debugger/MemoryView.cpp b/Source/Core/DolphinWX/Src/Debugger/MemoryView.cpp index 7c5225a05d..56a5c4c493 100644 --- a/Source/Core/DolphinWX/Src/Debugger/MemoryView.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/MemoryView.cpp @@ -294,9 +294,9 @@ void CMemoryView::OnPaint(wxPaintEvent& event) (mem_data&0xff0000)>>16, (mem_data&0xff00)>>8, mem_data&0xff}; - for (size_t i = 0; i < 4; i++) - if (a[i] == '\0') - a[i] = ' '; + for (auto& word : a) + if (word == '\0') + word = ' '; sprintf(dis, "%c%c%c%c", a[0], a[1], a[2], a[3]); } else if (viewAsType == VIEWAS_HEX) @@ -314,31 +314,31 @@ void CMemoryView::OnPaint(wxPaintEvent& event) debugger->readExtraMemory(memory, address+28) }; - for (int i = 0; i < 8; i++) + for (auto& word : mema) { char buf[32] = ""; switch (dataType) { case 0: sprintf(buf, " %02X %02X %02X %02X", - ((mema[i]&0xff000000)>>24)&0xFF, - ((mema[i]&0xff0000)>>16)&0xFF, - ((mema[i]&0xff00)>>8)&0xFF, - mema[i]&0xff); + ((word&0xff000000)>>24)&0xFF, + ((word&0xff0000)>>16)&0xFF, + ((word&0xff00)>>8)&0xFF, + word&0xff); break; case 1: sprintf(buf, " %02X%02X %02X%02X", - ((mema[i]&0xff000000)>>24)&0xFF, - ((mema[i]&0xff0000)>>16)&0xFF, - ((mema[i]&0xff00)>>8)&0xFF, - mema[i]&0xff); + ((word&0xff000000)>>24)&0xFF, + ((word&0xff0000)>>16)&0xFF, + ((word&0xff00)>>8)&0xFF, + word&0xff); break; case 2: sprintf(buf, " %02X%02X%02X%02X", - ((mema[i]&0xff000000)>>24)&0xFF, - ((mema[i]&0xff0000)>>16)&0xFF, - ((mema[i]&0xff00)>>8)&0xFF, - mema[i]&0xff); + ((word&0xff000000)>>24)&0xFF, + ((word&0xff0000)>>16)&0xFF, + ((word&0xff00)>>8)&0xFF, + word&0xff); break; } strcat(dis, buf); diff --git a/Source/Core/DolphinWX/Src/Debugger/MemoryWindow.cpp b/Source/Core/DolphinWX/Src/Debugger/MemoryWindow.cpp index 99f80e0936..6e60451e07 100644 --- a/Source/Core/DolphinWX/Src/Debugger/MemoryWindow.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/MemoryWindow.cpp @@ -238,7 +238,7 @@ void CMemoryWindow::OnDumpMemory( wxCommandEvent& event ) // Write exram (aram or mem2) to file void CMemoryWindow::OnDumpMem2( wxCommandEvent& event ) -{ +{ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) { DumpArray(File::GetUserPath(F_ARAMDUMP_IDX), Memory::m_pEXRAM, Memory::EXRAM_SIZE); diff --git a/Source/Core/DolphinWX/Src/Debugger/RegisterView.cpp b/Source/Core/DolphinWX/Src/Debugger/RegisterView.cpp index ac56b8e4cc..d059a908ae 100644 --- a/Source/Core/DolphinWX/Src/Debugger/RegisterView.cpp +++ b/Source/Core/DolphinWX/Src/Debugger/RegisterView.cpp @@ -33,7 +33,7 @@ static u32 GetSpecialRegValue(int reg) case 8: return PowerPC::ppcState.Exceptions; case 9: return ProcessorInterface::GetMask(); case 10: return ProcessorInterface::GetCause(); - default: return 0; + default: return 0; } } @@ -154,7 +154,7 @@ wxGridCellAttr *CRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind) switch (col) { case 1: red = row < 32 ? m_CachedRegHasChanged[row] : m_CachedSpecialRegHasChanged[row-32]; break; - case 3: + case 3: case 4: red = row < 32 ? m_CachedFRegHasChanged[row][col-3] : false; break; } diff --git a/Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp b/Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp index 63781008b3..0a957c7b06 100644 --- a/Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp +++ b/Source/Core/DolphinWX/Src/FifoPlayerDlg.cpp @@ -74,75 +74,75 @@ void FifoPlayerDlg::CreateGUIControls() { wxBoxSizer* sMain; sMain = new wxBoxSizer(wxVERTICAL); - + m_Notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0); { m_PlayPage = new wxPanel(m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); wxBoxSizer* sPlayPage; sPlayPage = new wxBoxSizer(wxVERTICAL); - + wxStaticBoxSizer* sPlayInfo; sPlayInfo = new wxStaticBoxSizer(new wxStaticBox(m_PlayPage, wxID_ANY, _("File Info")), wxVERTICAL); - + m_NumFramesLabel = new wxStaticText(m_PlayPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_NumFramesLabel->Wrap(-1); sPlayInfo->Add(m_NumFramesLabel, 0, wxALL, 5); - + m_CurrentFrameLabel = new wxStaticText(m_PlayPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_CurrentFrameLabel->Wrap(-1); sPlayInfo->Add(m_CurrentFrameLabel, 0, wxALL, 5); - + m_NumObjectsLabel = new wxStaticText(m_PlayPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_NumObjectsLabel->Wrap(-1); sPlayInfo->Add(m_NumObjectsLabel, 0, wxALL, 5); - + sPlayPage->Add(sPlayInfo, 1, wxEXPAND, 5); - + wxStaticBoxSizer* sFrameRange; sFrameRange = new wxStaticBoxSizer(new wxStaticBox(m_PlayPage, wxID_ANY, _("Frame Range")), wxHORIZONTAL); - + m_FrameFromLabel = new wxStaticText(m_PlayPage, wxID_ANY, _("From"), wxDefaultPosition, wxDefaultSize, 0); m_FrameFromLabel->Wrap(-1); sFrameRange->Add(m_FrameFromLabel, 0, wxALL, 5); - + m_FrameFromCtrl = new wxSpinCtrl(m_PlayPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 10, 0); sFrameRange->Add(m_FrameFromCtrl, 0, wxALL, 5); - + m_FrameToLabel = new wxStaticText(m_PlayPage, wxID_ANY, _("To"), wxDefaultPosition, wxDefaultSize, 0); m_FrameToLabel->Wrap(-1); sFrameRange->Add(m_FrameToLabel, 0, wxALL, 5); - + m_FrameToCtrl = new wxSpinCtrl(m_PlayPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(-1,-1), wxSP_ARROW_KEYS, 0, 10, 0); sFrameRange->Add(m_FrameToCtrl, 0, wxALL, 5); - + sPlayPage->Add(sFrameRange, 0, wxEXPAND, 5); - + wxStaticBoxSizer* sObjectRange; sObjectRange = new wxStaticBoxSizer(new wxStaticBox(m_PlayPage, wxID_ANY, _("Object Range")), wxHORIZONTAL); - + m_ObjectFromLabel = new wxStaticText(m_PlayPage, wxID_ANY, _("From"), wxDefaultPosition, wxDefaultSize, 0); m_ObjectFromLabel->Wrap(-1); sObjectRange->Add(m_ObjectFromLabel, 0, wxALL, 5); - + m_ObjectFromCtrl = new wxSpinCtrl(m_PlayPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 10000, 0); sObjectRange->Add(m_ObjectFromCtrl, 0, wxALL, 5); - + m_ObjectToLabel = new wxStaticText(m_PlayPage, wxID_ANY, _("To"), wxDefaultPosition, wxDefaultSize, 0); m_ObjectToLabel->Wrap(-1); sObjectRange->Add(m_ObjectToLabel, 0, wxALL, 5); - + m_ObjectToCtrl = new wxSpinCtrl(m_PlayPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 10000, 0); sObjectRange->Add(m_ObjectToCtrl, 0, wxALL, 5); - + sPlayPage->Add(sObjectRange, 0, wxEXPAND, 5); - + wxStaticBoxSizer* sPlayOptions; sPlayOptions = new wxStaticBoxSizer(new wxStaticBox(m_PlayPage, wxID_ANY, _("Playback Options")), wxVERTICAL); - + m_EarlyMemoryUpdates = new wxCheckBox(m_PlayPage, wxID_ANY, _("Early Memory Updates"), wxDefaultPosition, wxDefaultSize, 0); sPlayOptions->Add(m_EarlyMemoryUpdates, 0, wxALL, 5); - + sPlayPage->Add(sPlayOptions, 0, wxEXPAND, 5); sPlayPage->AddStretchSpacer(); @@ -156,46 +156,46 @@ void FifoPlayerDlg::CreateGUIControls() m_RecordPage = new wxPanel(m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); wxBoxSizer* sRecordPage; sRecordPage = new wxBoxSizer(wxVERTICAL); - + wxStaticBoxSizer* sRecordInfo; sRecordInfo = new wxStaticBoxSizer(new wxStaticBox(m_RecordPage, wxID_ANY, _("Recording Info")), wxVERTICAL); - + m_RecordingFifoSizeLabel = new wxStaticText(m_RecordPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_RecordingFifoSizeLabel->Wrap(-1); sRecordInfo->Add(m_RecordingFifoSizeLabel, 0, wxALL, 5); - + m_RecordingMemSizeLabel = new wxStaticText(m_RecordPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_RecordingMemSizeLabel->Wrap(-1); sRecordInfo->Add(m_RecordingMemSizeLabel, 0, wxALL, 5); - + m_RecordingFramesLabel = new wxStaticText(m_RecordPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_RecordingFramesLabel->Wrap(-1); sRecordInfo->Add(m_RecordingFramesLabel, 0, wxALL, 5); - + sRecordPage->Add(sRecordInfo, 0, wxEXPAND, 5); - + wxBoxSizer* sRecordButtons; sRecordButtons = new wxBoxSizer(wxHORIZONTAL); - + m_RecordStop = new wxButton(m_RecordPage, wxID_ANY, _("Record"), wxDefaultPosition, wxDefaultSize, 0); sRecordButtons->Add(m_RecordStop, 0, wxALL, 5); - + m_Save = new wxButton(m_RecordPage, wxID_ANY, _("Save"), wxDefaultPosition, wxDefaultSize, 0); sRecordButtons->Add(m_Save, 0, wxALL, 5); - + sRecordPage->Add(sRecordButtons, 0, wxEXPAND, 5); - + wxStaticBoxSizer* sRecordingOptions; sRecordingOptions = new wxStaticBoxSizer(new wxStaticBox(m_RecordPage, wxID_ANY, _("Recording Options")), wxHORIZONTAL); - + m_FramesToRecordLabel = new wxStaticText(m_RecordPage, wxID_ANY, _("Frames To Record"), wxDefaultPosition, wxDefaultSize, 0); m_FramesToRecordLabel->Wrap(-1); sRecordingOptions->Add(m_FramesToRecordLabel, 0, wxALL, 5); - + wxString initialNum = wxString::Format(_T("%d"), m_FramesToRecord); m_FramesToRecordCtrl = new wxSpinCtrl(m_RecordPage, wxID_ANY, initialNum, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 10000, 1); sRecordingOptions->Add(m_FramesToRecordCtrl, 0, wxALL, 5); - + sRecordPage->Add(sRecordingOptions, 0, wxEXPAND, 5); sRecordPage->AddStretchSpacer(); @@ -353,7 +353,7 @@ void FifoPlayerDlg::OnFrameTo(wxSpinEvent& event) player.SetFrameRangeEnd(event.GetPosition()); m_FrameFromCtrl->SetValue(player.GetFrameRangeStart()); - m_FrameToCtrl->SetValue(player.GetFrameRangeEnd()); + m_FrameToCtrl->SetValue(player.GetFrameRangeEnd()); } void FifoPlayerDlg::OnObjectFrom(wxSpinEvent& event) @@ -388,7 +388,7 @@ void FifoPlayerDlg::OnSaveFile(wxCommandEvent& WXUNUSED(event)) wxBeginBusyCursor(); bool result = file->Save(WxStrToStr(path).c_str()); wxEndBusyCursor(); - + // Wasn't able to save the file, shit's whack, yo. if (!result) PanicAlert("Error saving file"); @@ -624,8 +624,8 @@ void FifoPlayerDlg::OnObjectListSelectionChanged(wxCommandEvent& event) { const AnalyzedFrameInfo& frame = player.GetAnalyzedFrameInfo(frame_idx); const FifoFrameInfo& fifo_frame = player.GetFile()->GetFrame(frame_idx); - const u8* objectdata_start = &fifo_frame.fifoData[frame.objectStarts[object_idx]]; - const u8* objectdata_end = &fifo_frame.fifoData[frame.objectEnds[object_idx]]; + const u8* objectdata_start = &fifo_frame.fifoData[frame.objectStarts[object_idx]]; + const u8* objectdata_end = &fifo_frame.fifoData[frame.objectEnds[object_idx]]; u8* objectdata = (u8*)objectdata_start; const int obj_offset = objectdata_start - &fifo_frame.fifoData[frame.objectStarts[0]]; @@ -647,7 +647,7 @@ void FifoPlayerDlg::OnObjectListSelectionChanged(wxCommandEvent& event) // Between objectdata_end and next_objdata_start, there are register setting commands if (object_idx + 1 < (int)frame.objectStarts.size()) { - const u8* next_objdata_start = &fifo_frame.fifoData[frame.objectStarts[object_idx+1]]; + const u8* next_objdata_start = &fifo_frame.fifoData[frame.objectStarts[object_idx+1]]; while (objectdata < next_objdata_start) { m_objectCmdOffsets.push_back(objectdata - objectdata_start); @@ -807,7 +807,7 @@ void FifoPlayerDlg::OnRecordingFinished(wxEvent&) void FifoPlayerDlg::OnFrameWritten(wxEvent&) { m_CurrentFrameLabel->SetLabel(CreateCurrentFrameLabel()); - m_NumObjectsLabel->SetLabel(CreateFileObjectCountLabel()); + m_NumObjectsLabel->SetLabel(CreateFileObjectCountLabel()); } void FifoPlayerDlg::UpdatePlayGui() @@ -836,7 +836,7 @@ void FifoPlayerDlg::UpdateRecorderGui() { m_RecordingFifoSizeLabel->SetLabel(CreateRecordingFifoSizeLabel()); m_RecordingMemSizeLabel->SetLabel(CreateRecordingMemSizeLabel()); - m_RecordingFramesLabel->SetLabel(CreateRecordingFrameCountLabel()); + m_RecordingFramesLabel->SetLabel(CreateRecordingFrameCountLabel()); m_Save->Enable(GetSaveButtonEnabled()); } @@ -867,7 +867,7 @@ wxString FifoPlayerDlg::CreateFileFrameCountLabel() const if (file) return CreateIntegerLabel(file->GetFrameCount(), _("Frame")); - + return _("No file loaded"); } @@ -877,7 +877,7 @@ wxString FifoPlayerDlg::CreateCurrentFrameLabel() const if (file) return _("Frame ") + wxString::Format(wxT("%i"), FifoPlayer::GetInstance().GetCurrentFrameNum()); - + return wxEmptyString; } @@ -887,7 +887,7 @@ wxString FifoPlayerDlg::CreateFileObjectCountLabel() const if (file) return CreateIntegerLabel(FifoPlayer::GetInstance().GetFrameObjectCount(), _("Object")); - + return wxEmptyString; } @@ -901,9 +901,9 @@ wxString FifoPlayerDlg::CreateRecordingFifoSizeLabel() const for (int i = 0; i < file->GetFrameCount(); ++i) fifoBytes += file->GetFrame(i).fifoDataSize; - return CreateIntegerLabel(fifoBytes, _("FIFO Byte")); + return CreateIntegerLabel(fifoBytes, _("FIFO Byte")); } - + return _("No recorded file"); } @@ -917,13 +917,13 @@ wxString FifoPlayerDlg::CreateRecordingMemSizeLabel() const for (int frameNum = 0; frameNum < file->GetFrameCount(); ++frameNum) { const vector& memUpdates = file->GetFrame(frameNum).memoryUpdates; - for (unsigned int i = 0; i < memUpdates.size(); ++i) - memBytes += memUpdates[i].size; + for (auto& memUpdate : memUpdates) + memBytes += memUpdate.size; } - return CreateIntegerLabel(memBytes, _("Memory Byte")); + return CreateIntegerLabel(memBytes, _("Memory Byte")); } - + return wxEmptyString; } @@ -936,7 +936,7 @@ wxString FifoPlayerDlg::CreateRecordingFrameCountLabel() const int numFrames = file->GetFrameCount(); return CreateIntegerLabel(numFrames, _("Frame")); } - + return wxEmptyString; } diff --git a/Source/Core/DolphinWX/Src/FifoPlayerDlg.h b/Source/Core/DolphinWX/Src/FifoPlayerDlg.h index 6f4a8074b9..1d6b8e3895 100644 --- a/Source/Core/DolphinWX/Src/FifoPlayerDlg.h +++ b/Source/Core/DolphinWX/Src/FifoPlayerDlg.h @@ -28,7 +28,7 @@ private: void OnObjectTo( wxSpinEvent& event ); void OnCheckEarlyMemoryUpdates( wxCommandEvent& event ); void OnRecordStop( wxCommandEvent& event ); - void OnSaveFile( wxCommandEvent& event ); + void OnSaveFile( wxCommandEvent& event ); void OnNumFramesToRecord( wxSpinEvent& event ); void OnCloseClick( wxCommandEvent& event ); diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index a85e20f46d..1ca16ff1ac 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -446,7 +446,7 @@ void CFrame::OnActive(wxActivateEvent& event) #else m_RenderParent->SetFocus(); #endif - + if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor && Core::GetState() == Core::CORE_RUN) m_RenderParent->SetCursor(wxCURSOR_BLANK); @@ -609,7 +609,7 @@ void CFrame::OnHostMessage(wxCommandEvent& event) { wxString caption = event.GetString().BeforeFirst(':'); wxString text = event.GetString().AfterFirst(':'); - bPanicResult = (wxYES == wxMessageBox(text, + bPanicResult = (wxYES == wxMessageBox(text, caption, event.GetInt() ? wxYES_NO : wxOK, wxGetActiveWindow())); panic_event.Set(); } @@ -642,7 +642,7 @@ void CFrame::GetRenderWindowSize(int& x, int& y, int& width, int& height) void CFrame::OnRenderWindowSizeRequest(int width, int height) { if (Core::GetState() == Core::CORE_UNINITIALIZED || - !SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderWindowAutoSize || + !SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderWindowAutoSize || RendererIsFullscreen() || m_RenderFrame->IsMaximized()) return; @@ -933,7 +933,7 @@ void CFrame::OnKeyDown(wxKeyEvent& event) { int cmd = GetCmdForHotkey(i); if (cmd >= 0) - { + { wxCommandEvent evt(wxEVT_COMMAND_MENU_SELECTED, cmd); wxMenuItem *item = GetMenuBar()->FindItem(cmd); if (item && item->IsCheckable()) diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 376ced5b10..4abf453041 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -164,7 +164,7 @@ public: std::vector Width, Height; }; std::vector Perspectives; - u32 ActivePerspective; + u32 ActivePerspective; private: CGameListCtrl* m_GameListCtrl; @@ -250,10 +250,10 @@ private: void OnPaneClose(wxAuiManagerEvent& evt); void ReloadPanes(); void DoLoadPerspective(); - void OnDropDownToolbarSelect(wxCommandEvent& event); + void OnDropDownToolbarSelect(wxCommandEvent& event); void OnDropDownSettingsToolbar(wxAuiToolBarEvent& event); void OnDropDownToolbarItem(wxAuiToolBarEvent& event); - void OnSelectPerspective(wxCommandEvent& event); + void OnSelectPerspective(wxCommandEvent& event); #ifdef _WIN32 // Override window proc for tricks like screensaver disabling @@ -284,7 +284,7 @@ private: void OnChangeDisc(wxCommandEvent& event); void OnScreenshot(wxCommandEvent& event); void OnActive(wxActivateEvent& event); - void OnClose(wxCloseEvent &event); + void OnClose(wxCloseEvent &event); void OnLoadState(wxCommandEvent& event); void OnSaveState(wxCommandEvent& event); void OnLoadStateFromFile(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/Src/FrameAui.cpp b/Source/Core/DolphinWX/Src/FrameAui.cpp index 5ba5d54b43..2333541f2e 100644 --- a/Source/Core/DolphinWX/Src/FrameAui.cpp +++ b/Source/Core/DolphinWX/Src/FrameAui.cpp @@ -38,7 +38,7 @@ void CFrame::OnPaneClose(wxAuiManagerEvent& event) if (!g_pCodeWindow) { - if (nb->GetPage(0)->GetId() == IDM_LOGWINDOW || + if (nb->GetPage(0)->GetId() == IDM_LOGWINDOW || nb->GetPage(0)->GetId() == IDM_LOGCONFIGWINDOW || nb->GetPage(0)->GetId() == IDM_CONSOLEWINDOW) { @@ -494,7 +494,7 @@ void CFrame::DoRemovePage(wxWindow *Win, bool bHide) void CFrame::DoAddPage(wxWindow *Win, int i, bool Float) { if (!Win) return; - + // Ensure accessor remains within valid bounds. if (i < 0 || i > GetNotebookCount()-1) i = 0; @@ -577,7 +577,7 @@ void CFrame::OnDropDownToolbarItem(wxAuiToolBarEvent& event) wxMenuItem* mItem = new wxMenuItem(menuPopup, IDM_PERSPECTIVES_0 + i, StrToWxStr(Perspectives[i].Name), wxT(""), wxITEM_CHECK); - + menuPopup->Append(mItem); if (i == ActivePerspective) @@ -905,12 +905,12 @@ void CFrame::LoadIniPerspectives() ini.Get("Perspectives", "Active", &ActivePerspective, 0); SplitString(_Perspectives, ',', VPerspectives); - for (u32 i = 0; i < VPerspectives.size(); i++) + for (auto& VPerspective : VPerspectives) { SPerspectives Tmp; - std::string _Section, _Perspective, _Width, _Height; + std::string _Section, _Perspective, _Widths, _Heights; std::vector _SWidth, _SHeight; - Tmp.Name = VPerspectives[i]; + Tmp.Name = VPerspective; // Don't save a blank perspective if (Tmp.Name.empty()) @@ -922,22 +922,22 @@ void CFrame::LoadIniPerspectives() "name=Pane 0;caption=Pane 0;state=768;dir=5;prop=100000;|" "name=Pane 1;caption=Pane 1;state=31458108;dir=4;prop=100000;|" "dock_size(5,0,0)=22|dock_size(4,0,0)=333|"); - ini.Get(_Section.c_str(), "Width", &_Width, "70,25"); - ini.Get(_Section.c_str(), "Height", &_Height, "80,80"); + ini.Get(_Section.c_str(), "Width", &_Widths, "70,25"); + ini.Get(_Section.c_str(), "Height", &_Heights, "80,80"); Tmp.Perspective = StrToWxStr(_Perspective); - SplitString(_Width, ',', _SWidth); - SplitString(_Height, ',', _SHeight); - for (u32 j = 0; j < _SWidth.size(); j++) + SplitString(_Widths, ',', _SWidth); + SplitString(_Heights, ',', _SHeight); + for (auto& Width : _SWidth) { int _Tmp; - if (TryParse(_SWidth[j].c_str(), &_Tmp)) Tmp.Width.push_back(_Tmp); + if (TryParse(Width.c_str(), &_Tmp)) Tmp.Width.push_back(_Tmp); } - for (u32 j = 0; j < _SHeight.size(); j++) + for (auto& Height : _SHeight) { int _Tmp; - if (TryParse(_SHeight[j].c_str(), &_Tmp)) Tmp.Height.push_back(_Tmp); + if (TryParse(Height.c_str(), &_Tmp)) Tmp.Height.push_back(_Tmp); } Perspectives.push_back(Tmp); } @@ -983,25 +983,25 @@ void CFrame::SaveIniPerspectives() // Save perspective names std::string STmp = ""; - for (u32 i = 0; i < Perspectives.size(); i++) + for (auto& Perspective : Perspectives) { - STmp += Perspectives[i].Name + ","; + STmp += Perspective.Name + ","; } STmp = STmp.substr(0, STmp.length()-1); ini.Set("Perspectives", "Perspectives", STmp.c_str()); ini.Set("Perspectives", "Active", ActivePerspective); // Save the perspectives - for (u32 i = 0; i < Perspectives.size(); i++) + for (auto& Perspective : Perspectives) { - std::string _Section = "P - " + Perspectives[i].Name; - ini.Set(_Section.c_str(), "Perspective", WxStrToStr(Perspectives[i].Perspective)); + std::string _Section = "P - " + Perspective.Name; + ini.Set(_Section.c_str(), "Perspective", WxStrToStr(Perspective.Perspective)); std::string SWidth = "", SHeight = ""; - for (u32 j = 0; j < Perspectives[i].Width.size(); j++) + for (u32 j = 0; j < Perspective.Width.size(); j++) { - SWidth += StringFromFormat("%i,", Perspectives[i].Width[j]); - SHeight += StringFromFormat("%i,", Perspectives[i].Height[j]); + SWidth += StringFromFormat("%i,", Perspective.Width[j]); + SHeight += StringFromFormat("%i,", Perspective.Height[j]); } // Remove the ending "," SWidth = SWidth.substr(0, SWidth.length()-1); diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index 5864c6ae8c..359b09f0aa 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -98,7 +98,7 @@ void CFrame::CreateMenu() wxMenu *externalDrive = new wxMenu; fileMenu->Append(IDM_DRIVES, _("&Boot from DVD Drive..."), externalDrive); - + drives = cdio_get_devices(); // Windows Limitation of 24 character drives for (unsigned int i = 0; i < drives.size() && i < 24; i++) { @@ -155,7 +155,7 @@ void CFrame::CreateMenu() saveMenu->AppendSeparator(); loadMenu->Append(IDM_LOADSTATEFILE, GetMenuLabel(HK_LOAD_STATE_FILE)); - + loadMenu->Append(IDM_UNDOLOADSTATE, GetMenuLabel(HK_UNDO_LOAD_STATE)); loadMenu->AppendSeparator(); @@ -386,7 +386,7 @@ wxString CFrame::GetMenuLabel(int Id) case HK_LOAD_STATE_SLOT_8: case HK_LOAD_STATE_SLOT_9: case HK_LOAD_STATE_SLOT_10: - Label = wxString::Format(_("Slot %i"), + Label = wxString::Format(_("Slot %i"), Id - HK_LOAD_STATE_SLOT_1 + 1); break; @@ -400,7 +400,7 @@ wxString CFrame::GetMenuLabel(int Id) case HK_SAVE_STATE_SLOT_8: case HK_SAVE_STATE_SLOT_9: case HK_SAVE_STATE_SLOT_10: - Label = wxString::Format(_("Slot %i"), + Label = wxString::Format(_("Slot %i"), Id - HK_SAVE_STATE_SLOT_1 + 1); break; case HK_SAVE_STATE_FILE: @@ -437,7 +437,7 @@ wxString CFrame::GetMenuLabel(int Id) hotkeymodifier |= wxMOD_CONTROL; #endif hotkeymodifier &= wxMOD_CONTROL | wxMOD_ALT | wxMOD_SHIFT; - + Modifier = InputCommon::WXKeymodToString(hotkeymodifier); Hotkey = InputCommon::WXKeyToString(hotkey); if (Modifier.Len() + Hotkey.Len() > 0) @@ -505,7 +505,7 @@ void CFrame::RecreateToolbar() m_ToolBar = new wxAuiToolBar(this, ID_TOOLBAR, wxDefaultPosition, wxDefaultSize, TOOLBAR_STYLE); PopulateToolbar(m_ToolBar); - + m_Mgr->AddPane(m_ToolBar, wxAuiPaneInfo(). Name(wxT("TBMain")).Caption(wxT("TBMain")). ToolbarPane().Top(). @@ -515,7 +515,7 @@ void CFrame::RecreateToolbar() { m_ToolBarDebug = new wxAuiToolBar(this, ID_TOOLBAR_DEBUG, wxDefaultPosition, wxDefaultSize, TOOLBAR_STYLE); g_pCodeWindow->PopulateToolbar(m_ToolBarDebug); - + m_Mgr->AddPane(m_ToolBarDebug, wxAuiPaneInfo(). Name(wxT("TBDebug")).Caption(wxT("TBDebug")). ToolbarPane().Top(). @@ -695,7 +695,7 @@ void CFrame::OnChangeDisc(wxCommandEvent& WXUNUSED (event)) void CFrame::OnRecord(wxCommandEvent& WXUNUSED (event)) { int controllers = 0; - + if (Movie::IsReadOnly()) { //PanicAlertT("Cannot record movies in read-only mode."); @@ -723,7 +723,7 @@ void CFrame::OnPlayRecording(wxCommandEvent& WXUNUSED (event)) wxString path = wxFileSelector( _("Select The Recording File"), wxEmptyString, wxEmptyString, wxEmptyString, - _("Dolphin TAS Movies (*.dtm)") + + _("Dolphin TAS Movies (*.dtm)") + wxString::Format(wxT("|*.dtm|%s"), wxGetTranslation(wxALL_FILES)), wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST, this); @@ -951,7 +951,7 @@ void CFrame::StartGame(const std::string& filename) #else m_RenderParent->SetFocus(); #endif - + wxTheApp->Bind(wxEVT_KEY_DOWN, &CFrame::OnKeyDown, this); wxTheApp->Bind(wxEVT_KEY_UP, &CFrame::OnKeyUp, this); wxTheApp->Bind(wxEVT_RIGHT_DOWN, &CFrame::OnMouse, this); @@ -1135,23 +1135,23 @@ void CFrame::DoStop() void CFrame::DoRecordingSave() { bool paused = (Core::GetState() == Core::CORE_PAUSE); - + if (!paused) DoPause(); - + wxString path = wxFileSelector( _("Select The Recording File"), wxEmptyString, wxEmptyString, wxEmptyString, - _("Dolphin TAS Movies (*.dtm)") + + _("Dolphin TAS Movies (*.dtm)") + wxString::Format(wxT("|*.dtm|%s"), wxGetTranslation(wxALL_FILES)), wxFD_SAVE | wxFD_PREVIEW | wxFD_OVERWRITE_PROMPT, this); if(path.IsEmpty()) return; - + Movie::SaveRecording(WxStrToStr(path).c_str()); - + if (!paused) DoPause(); } @@ -1323,12 +1323,12 @@ void CFrame::OnMemcard(wxCommandEvent& WXUNUSED (event)) MemcardManager.ShowModal(); } -void CFrame::OnExportAllSaves(wxCommandEvent& WXUNUSED (event)) +void CFrame::OnExportAllSaves(wxCommandEvent& WXUNUSED (event)) { CWiiSaveCrypted::ExportAllSaves(); } -void CFrame::OnImportSave(wxCommandEvent& WXUNUSED (event)) +void CFrame::OnImportSave(wxCommandEvent& WXUNUSED (event)) { wxString path = wxFileSelector(_("Select the save file"), wxEmptyString, wxEmptyString, wxEmptyString, @@ -1477,7 +1477,7 @@ void CFrame::OnLoadStateFromFile(wxCommandEvent& WXUNUSED (event)) wxString path = wxFileSelector( _("Select the state to load"), wxEmptyString, wxEmptyString, wxEmptyString, - _("All Save States (sav, s##)") + + _("All Save States (sav, s##)") + wxString::Format(wxT("|*.sav;*.s??|%s"), wxGetTranslation(wxALL_FILES)), wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST, this); @@ -1491,7 +1491,7 @@ void CFrame::OnSaveStateToFile(wxCommandEvent& WXUNUSED (event)) wxString path = wxFileSelector( _("Select the state to save"), wxEmptyString, wxEmptyString, wxEmptyString, - _("All Save States (sav, s##)") + + _("All Save States (sav, s##)") + wxString::Format(wxT("|*.sav;*.s??|%s"), wxGetTranslation(wxALL_FILES)), wxFD_SAVE, this); @@ -1658,9 +1658,9 @@ void CFrame::UpdateGUI() m_ToolBar->SetToolLabel(IDM_PLAY, _("Play")); } } - + GetMenuBar()->FindItem(IDM_RECORDREADONLY)->Enable(Running || Paused); - + if (!Initialized && !m_bGameLoading) { if (m_GameListCtrl->IsEnabled()) @@ -1791,17 +1791,17 @@ void CFrame::GameListChanged(wxCommandEvent& event) Directories.push_back(File::GetUserPath(D_CACHE_IDX).c_str()); CFileSearch::XStringVector Extensions; Extensions.push_back("*.cache"); - + CFileSearch FileSearch(Extensions, Directories); const CFileSearch::XStringVector& rFilenames = FileSearch.GetFileNames(); - - for (u32 i = 0; i < rFilenames.size(); i++) + + for (auto& rFilename : rFilenames) { - File::Delete(rFilenames[i]); + File::Delete(rFilename); } break; } - + // Update gamelist if (m_GameListCtrl) { diff --git a/Source/Core/DolphinWX/Src/GLInterface/AGL.cpp b/Source/Core/DolphinWX/Src/GLInterface/AGL.cpp index 2062268e05..1068e870a0 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/AGL.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/AGL.cpp @@ -114,10 +114,10 @@ void cInterfaceAGL::Update() if( s_backbuffer_width == size.width && s_backbuffer_height == size.height) return; - + s_backbuffer_width = size.width; s_backbuffer_height = size.height; - + [GLWin.cocoaCtx update]; } diff --git a/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp b/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp index b8276ae546..741492e0a4 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/EGL.cpp @@ -45,16 +45,15 @@ bool cInterfaceEGL::Create(void *&window_handle) EGLint num_configs; // attributes for a visual in RGBA format with at least - // 8 bits per color and a 24 bit depth buffer + // 8 bits per color int attribs[] = { EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, - EGL_DEPTH_SIZE, 24, #ifdef USE_GLES #ifdef USE_GLES3 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - + // OpenGL ES 3 bit is disabled for now, until we have a way to select it from runtime // Qualcomm drivers don't even care if it is ES2 or ES3 bit set. // Intel drivers /might/ not care, but that code path is untested diff --git a/Source/Core/DolphinWX/Src/GLInterface/EGL.h b/Source/Core/DolphinWX/Src/GLInterface/EGL.h index cd0969c4b7..ce32edd264 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/EGL.h +++ b/Source/Core/DolphinWX/Src/GLInterface/EGL.h @@ -43,7 +43,7 @@ public: void UpdateFPSDisplay(const char *Text); bool Create(void *&window_handle); bool MakeCurrent(); - void Shutdown(); + void Shutdown(); }; #endif diff --git a/Source/Core/DolphinWX/Src/GLInterface/GLX.cpp b/Source/Core/DolphinWX/Src/GLInterface/GLX.cpp index 929d365081..22b472d662 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/GLX.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/GLX.cpp @@ -55,20 +55,18 @@ bool cInterfaceGLX::Create(void *&window_handle) int glxMajorVersion, glxMinorVersion; // attributes for a single buffered visual in RGBA format with at least - // 8 bits per color and a 24 bit depth buffer + // 8 bits per color int attrListSgl[] = {GLX_RGBA, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, - GLX_DEPTH_SIZE, 24, None}; // attributes for a double buffered visual in RGBA format with at least - // 8 bits per color and a 24 bit depth buffer + // 8 bits per color int attrListDbl[] = {GLX_RGBA, GLX_DOUBLEBUFFER, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, - GLX_DEPTH_SIZE, 24, None }; int attrListDefault[] = { @@ -77,7 +75,6 @@ bool cInterfaceGLX::Create(void *&window_handle) GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_DOUBLEBUFFER, - GLX_DEPTH_SIZE, 1, None }; GLWin.dpy = XOpenDisplay(0); diff --git a/Source/Core/DolphinWX/Src/GLInterface/GLX.h b/Source/Core/DolphinWX/Src/GLInterface/GLX.h index ba8e6a9b82..2e8bde121f 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/GLX.h +++ b/Source/Core/DolphinWX/Src/GLInterface/GLX.h @@ -37,7 +37,7 @@ public: bool Create(void *&window_handle); bool MakeCurrent(); bool ClearCurrent(); - void Shutdown(); + void Shutdown(); }; #endif diff --git a/Source/Core/DolphinWX/Src/GLInterface/InterfaceBase.h b/Source/Core/DolphinWX/Src/GLInterface/InterfaceBase.h index 506adcbb6e..b69d9fea9c 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/InterfaceBase.h +++ b/Source/Core/DolphinWX/Src/GLInterface/InterfaceBase.h @@ -16,13 +16,13 @@ public: virtual bool Create(void *&window_handle) { return true; } virtual bool MakeCurrent() { return true; } virtual bool ClearCurrent() { return true; } - virtual void Shutdown() {} + virtual void Shutdown() {} virtual void SwapInterval(int Interval) { } virtual u32 GetBackBufferWidth() { return s_backbuffer_width; } virtual u32 GetBackBufferHeight() { return s_backbuffer_height; } virtual void SetBackBufferDimensions(u32 W, u32 H) {s_backbuffer_width = W; s_backbuffer_height = H; } - virtual void Update() { } + virtual void Update() { } virtual bool PeekMessages() { return false; } }; #endif diff --git a/Source/Core/DolphinWX/Src/GLInterface/Platform.cpp b/Source/Core/DolphinWX/Src/GLInterface/Platform.cpp index 64e32591d8..8094eef810 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/Platform.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/Platform.cpp @@ -110,7 +110,7 @@ out: if (GLWin.wl_display) wl_display_disconnect(GLWin.wl_display); } - + #endif #if HAVE_X11 if (selected_platform != EGL_PLATFORM_X11) { @@ -179,7 +179,7 @@ EGLNativeWindowType cPlatform::CreateWindow(void) return (EGLNativeWindowType) XInterface.CreateWindow(); #endif #ifdef ANDROID - return (EGLNativeWindowType)Host_GetRenderHandle(); + return (EGLNativeWindowType)Host_GetRenderHandle(); #endif return 0; } diff --git a/Source/Core/DolphinWX/Src/GLInterface/WGL.cpp b/Source/Core/DolphinWX/Src/GLInterface/WGL.cpp index 7ba315a5b4..62a4438c6d 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/WGL.cpp +++ b/Source/Core/DolphinWX/Src/GLInterface/WGL.cpp @@ -84,8 +84,8 @@ bool cInterfaceWGL::Create(void *&window_handle) 0, // Shift Bit Ignored 0, // No Accumulation Buffer 0, 0, 0, 0, // Accumulation Bits Ignored - 24, // 24Bit Z-Buffer (Depth Buffer) - 8, // 8bit Stencil Buffer + 0, // 0Bit Z-Buffer (Depth Buffer) + 0, // 0bit Stencil Buffer 0, // No Auxiliary Buffer PFD_MAIN_PLANE, // Main Drawing Layer 0, // Reserved diff --git a/Source/Core/DolphinWX/Src/GLInterface/WGL.h b/Source/Core/DolphinWX/Src/GLInterface/WGL.h index 5c968d963e..02526984ff 100644 --- a/Source/Core/DolphinWX/Src/GLInterface/WGL.h +++ b/Source/Core/DolphinWX/Src/GLInterface/WGL.h @@ -22,7 +22,7 @@ public: bool Create(void *&window_handle); bool MakeCurrent(); bool ClearCurrent(); - void Shutdown(); + void Shutdown(); void Update(); bool PeekMessages(); diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index 300bf470c0..54c59dd806 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include "FileSearch.h" @@ -62,7 +63,7 @@ static int CompareGameListItems(const GameListItem* iso1, const GameListItem* is int indexOne = 0; int indexOther = 0; - + // index only matters for WADS and PAL GC games, but invalid indicies for the others // will return the (only) language in the list if (iso1->GetPlatform() == GameListItem::WII_WAD) @@ -307,7 +308,7 @@ void CGameListCtrl::Update() #else const int platform_padding = 8; #endif - + // set initial sizes for columns SetColumnWidth(COLUMN_DUMMY,0); SetColumnWidth(COLUMN_PLATFORM, 35 + platform_padding); @@ -375,15 +376,15 @@ void CGameListCtrl::Update() wxString NiceSizeFormat(u64 _size) { const char* const unit_symbols[] = {"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}; - + auto const unit = Log2(std::max(_size, 1)) / 10; auto const unit_size = (1 << (unit * 10)); - + // ugly rounding integer math auto const value = (_size + unit_size / 2) / unit_size; auto const frac = (_size % unit_size * 10 + unit_size / 2) / unit_size % 10; - return StrToWxStr(StringFromFormat("%llu.%llu %s", value, frac, unit_symbols[unit])); + return StrToWxStr(StringFromFormat("%" PRIu64 ".%" PRIu64 " %s", value, frac, unit_symbols[unit])); } void CGameListCtrl::InsertItemInReportView(long _Index) @@ -409,13 +410,13 @@ void CGameListCtrl::InsertItemInReportView(long _Index) SetItemColumnImage(_Index, COLUMN_BANNER, ImageIndex); int SelectedLanguage = SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage; - + // Is this sane? if (rISOFile.GetPlatform() == GameListItem::WII_WAD) { SelectedLanguage = SConfig::GetInstance().m_SYSCONF->GetData("IPL.LNG"); } - + std::string const name = rISOFile.GetName(SelectedLanguage); SetItem(_Index, COLUMN_TITLE, StrToWxStr(name), -1); @@ -475,15 +476,15 @@ void CGameListCtrl::ScanForISOs() { File::FSTEntry FST_Temp; File::ScanDirectoryTree(Directories[i], FST_Temp); - for (u32 j = 0; j < FST_Temp.children.size(); j++) + for (auto& Entry : FST_Temp.children) { - if (FST_Temp.children[j].isDirectory) + if (Entry.isDirectory) { bool duplicate = false; - for (u32 k = 0; k < Directories.size(); k++) + for (auto& Directory : Directories) { - if (strcmp(Directories[k].c_str(), - FST_Temp.children[j].physicalName.c_str()) == 0) + if (strcmp(Directory.c_str(), + Entry.physicalName.c_str()) == 0) { duplicate = true; break; @@ -491,7 +492,7 @@ void CGameListCtrl::ScanForISOs() } if (!duplicate) Directories.push_back( - FST_Temp.children[j].physicalName.c_str()); + Entry.physicalName.c_str()); } } } @@ -539,7 +540,7 @@ void CGameListCtrl::ScanForISOs() if (dialog.WasCancelled()) break; - std::auto_ptr iso_file(new GameListItem(rFilenames[i])); + std::unique_ptr iso_file(new GameListItem(rFilenames[i])); const GameListItem& ISOFile = *iso_file; if (ISOFile.IsValid()) @@ -603,13 +604,9 @@ void CGameListCtrl::ScanForISOs() { const std::vector drives = cdio_get_devices(); - for (std::vector::const_iterator iter = drives.begin(); iter != drives.end(); ++iter) + for (const auto& drive : drives) { - #ifdef __APPLE__ - std::auto_ptr gli(new GameListItem(*iter)); - #else - std::unique_ptr gli(new GameListItem(*iter)); - #endif + std::unique_ptr gli(new GameListItem(drive)); if (gli->IsValid()) m_ISOFiles.push_back(gli.release()); @@ -830,7 +827,7 @@ void CGameListCtrl::OnLeftClick(wxMouseEvent& event) } void CGameListCtrl::OnRightClick(wxMouseEvent& event) -{ +{ // Focus the clicked item. int flags; long item = HitTest(event.GetPosition(), flags); @@ -873,7 +870,7 @@ void CGameListCtrl::OnRightClick(wxMouseEvent& event) { if (selected_iso->IsCompressed()) popupMenu->Append(IDM_COMPRESSGCM, _("Decompress ISO...")); - else if (selected_iso->GetFileName().substr(selected_iso->GetFileName().find_last_of(".")) != ".ciso" + else if (selected_iso->GetFileName().substr(selected_iso->GetFileName().find_last_of(".")) != ".ciso" && selected_iso->GetFileName().substr(selected_iso->GetFileName().find_last_of(".")) != ".wbfs") popupMenu->Append(IDM_COMPRESSGCM, _("Compress ISO...")); } @@ -1109,7 +1106,7 @@ void CGameListCtrl::CompressSelection(bool _compress) if (wxFileExists(StrToWxStr(OutputFileName)) && wxMessageBox( wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"), - StrToWxStr(OutputFileName)), + StrToWxStr(OutputFileName)), _("Confirm File Overwrite"), wxYES_NO) == wxNO) continue; @@ -1137,7 +1134,7 @@ void CGameListCtrl::CompressSelection(bool _compress) if (wxFileExists(StrToWxStr(OutputFileName)) && wxMessageBox( wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"), - StrToWxStr(OutputFileName)), + StrToWxStr(OutputFileName)), _("Confirm File Overwrite"), wxYES_NO) == wxNO) continue; @@ -1198,7 +1195,7 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event)) StrToWxStr(FilePath), StrToWxStr(FileName) + _T(".gcz"), wxEmptyString, - _("All compressed GC/Wii ISO files (gcz)") + + _("All compressed GC/Wii ISO files (gcz)") + wxString::Format(wxT("|*.gcz|%s"), wxGetTranslation(wxALL_FILES)), wxFD_SAVE, this); @@ -1207,7 +1204,7 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event)) return; } while (wxFileExists(path) && wxMessageBox( - wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"), path.c_str()), + wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"), path.c_str()), _("Confirm File Overwrite"), wxYES_NO) == wxNO); diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.h b/Source/Core/DolphinWX/Src/GameListCtrl.h index ad46ec6d67..7ac02eae16 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.h +++ b/Source/Core/DolphinWX/Src/GameListCtrl.h @@ -75,7 +75,7 @@ private: void InsertItemInReportView(long _Index); void SetBackgroundColor(); void ScanForISOs(); - + DECLARE_EVENT_TABLE() // events diff --git a/Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp b/Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp index 514fea3463..fc1e62896e 100644 --- a/Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp +++ b/Source/Core/DolphinWX/Src/GeckoCodeDiag.cpp @@ -52,7 +52,7 @@ CodeConfigPanel::CodeConfigPanel(wxWindow* const parent) wxBoxSizer* const sizer_vert = new wxBoxSizer(wxVERTICAL); sizer_vert->Add(sizer_infobox, 1, wxEXPAND); sizer_vert->Add(sizer_buttons, 0, wxEXPAND | wxTOP, 5); - + wxBoxSizer* const sizer_main = new wxBoxSizer(wxVERTICAL); sizer_main->Add(m_listbox_gcodes, 1, wxALL | wxEXPAND, 5); sizer_main->Add(sizer_vert, 0, wxALL | wxEXPAND, 5); @@ -76,7 +76,7 @@ void CodeConfigPanel::UpdateCodeList(bool checkRunning) if (gcodes_iter->enabled) m_listbox_gcodes->Check(m_listbox_gcodes->GetCount()-1, true); } - + wxCommandEvent evt; UpdateInfoBox(evt); } @@ -146,7 +146,7 @@ void CodeConfigPanel::DownloadCodes(wxCommandEvent&) std::string gameid = m_gameid; - + switch (m_gameid[0]) { case 'R': @@ -225,7 +225,7 @@ void CodeConfigPanel::DownloadCodes(wxCommandEvent&) // read code lines case 1 : { - std::istringstream ssline(line); + std::istringstream ssline(line); std::string addr, data; ssline >> addr >> data; ssline.seekg(0); diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h index 42c0154405..2cb8a41519 100644 --- a/Source/Core/DolphinWX/Src/Globals.h +++ b/Source/Core/DolphinWX/Src/Globals.h @@ -128,7 +128,7 @@ enum IDM_CONFIG_HOTKEYS, IDM_CONFIG_LOGGER, - // Views + // Views IDM_LOGWINDOW, IDM_LOGCONFIGWINDOW, IDM_CONSOLEWINDOW, diff --git a/Source/Core/DolphinWX/Src/HotkeyDlg.cpp b/Source/Core/DolphinWX/Src/HotkeyDlg.cpp index 67d540b16e..03b40dd286 100644 --- a/Source/Core/DolphinWX/Src/HotkeyDlg.cpp +++ b/Source/Core/DolphinWX/Src/HotkeyDlg.cpp @@ -255,12 +255,12 @@ void HotkeyConfigDialog::CreateHotkeyGUIControls(void) wxStaticText *StaticTextHeader = new wxStaticText(Page, wxID_ANY, _("Action")); HeaderSizer->Add(StaticTextHeader, 1, wxALL, 2); StaticTextHeader = new wxStaticText(Page, wxID_ANY, _("Key"), wxDefaultPosition, size); - HeaderSizer->Add(StaticTextHeader, 0, wxALL, 2); + HeaderSizer->Add(StaticTextHeader, 0, wxALL, 2); sHotkeys->Add(HeaderSizer, wxGBPosition(0, i), wxDefaultSpan, wxEXPAND | wxLEFT, (i > 0) ? 30 : 1); } int column_break = (page_breaks[j+1] + page_breaks[j] + 1) / 2; - + for (int i = page_breaks[j]; i < page_breaks[j+1]; i++) { // Text for the action diff --git a/Source/Core/DolphinWX/Src/ISOFile.cpp b/Source/Core/DolphinWX/Src/ISOFile.cpp index 2a70a550f7..5aa02f5df1 100644 --- a/Source/Core/DolphinWX/Src/ISOFile.cpp +++ b/Source/Core/DolphinWX/Src/ISOFile.cpp @@ -82,7 +82,7 @@ GameListItem::GameListItem(const std::string& _rFileName) m_names = pBannerLoader->GetNames(); m_company = pBannerLoader->GetCompany(); m_descriptions = pBannerLoader->GetDescriptions(); - + std::vector Buffer = pBannerLoader->GetBanner(&m_ImageWidth, &m_ImageHeight); u32* pData = &Buffer[0]; // resize vector to image size @@ -188,7 +188,7 @@ std::string GameListItem::CreateCacheFilename() // Filename.extension_HashOfFolderPath_Size.cache // Append hash to prevent ISO name-clashing in different folders. - Filename.append(StringFromFormat("%s_%x_%llx.cache", + Filename.append(StringFromFormat("%s_%x_%zx.cache", extension.c_str(), HashFletcher((const u8 *)LegalPathname.c_str(), LegalPathname.size()), File::GetSize(m_FileName))); @@ -212,7 +212,7 @@ std::string GameListItem::GetDescription(int _index) const if (index < m_descriptions.size()) return m_descriptions[index]; - + if (!m_descriptions.empty()) return m_descriptions[0]; @@ -229,7 +229,7 @@ std::string GameListItem::GetVolumeName(int _index) const if (!m_volume_names.empty()) return m_volume_names[0]; - + return ""; } @@ -240,7 +240,7 @@ std::string GameListItem::GetBannerName(int _index) const if (index < m_names.size() && !m_names[index].empty()) return m_names[index]; - + if (!m_names.empty()) return m_names[0]; @@ -251,9 +251,9 @@ std::string GameListItem::GetBannerName(int _index) const std::string GameListItem::GetName(int _index) const { // Prefer name from banner, fallback to name from volume, fallback to filename - + std::string name = GetBannerName(_index); - + if (name.empty()) name = GetVolumeName(_index); diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index e5943ef8cf..89f07815b1 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -7,6 +7,7 @@ #endif #include +#include #include "Common.h" #include "CommonPaths.h" @@ -118,7 +119,7 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW u8 _tTitleID[8]; if(OpenISO->GetTitleID(_tTitleID)) { - snprintf(tmp, 17, "%016llx", Common::swap64(_tTitleID)); + snprintf(tmp, 17, "%016" PRIx64, Common::swap64(_tTitleID)); _iniFilename = tmp; } } @@ -196,7 +197,7 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW m_Country->SetValue(_("UNKNOWN")); break; } - + if (IsWiiDisc) // Only one language with wii banners { m_Lang->SetSelection(0); @@ -218,7 +219,7 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW { ChangeBannerDetails(SConfig::GetInstance().m_SYSCONF->GetData("IPL.LNG")); } - + m_Banner->SetBitmap(OpenGameListItem->GetBitmap()); m_Banner->Bind(wxEVT_RIGHT_DOWN, &CISOProperties::RightClickOnBanner, this); @@ -233,7 +234,7 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW WiiPartition partition = WiiDisc.at(i); wxTreeItemId PartitionRoot = m_Treectrl->AppendItem(RootId, wxString::Format(_("Partition %i"), i), 0, 0); - CreateDirectoryTree(PartitionRoot, partition.Files, 1, partition.Files.at(0)->m_FileSize); + CreateDirectoryTree(PartitionRoot, partition.Files, 1, partition.Files.at(0)->m_FileSize); if (i == 1) m_Treectrl->Expand(PartitionRoot); } @@ -260,7 +261,7 @@ CISOProperties::~CISOProperties() size_t CISOProperties::CreateDirectoryTree(wxTreeItemId& parent, std::vector fileInfos, - const size_t _FirstIndex, + const size_t _FirstIndex, const size_t _LastIndex) { size_t CurrentIndex = _FirstIndex; @@ -365,7 +366,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) UseZTPSpeedupHack = new wxCheckBox(m_GameConfig, ID_ZTP_SPEEDUP, _("ZTP hack"), wxDefaultPosition, wxDefaultSize, GetElementStyle("Video", "ZTPSpeedupHack")); UseZTPSpeedupHack->SetToolTip(_("Enable this to speed up The Legend of Zelda: Twilight Princess. Disable for ANY other game.")); - + // Hack wxFlexGridSizer * const szrPHackSettings = new wxFlexGridSizer(0); PHackEnable = new wxCheckBox(m_GameConfig, ID_PHACKENABLE, _("Custom Projection Hack"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE); @@ -396,7 +397,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) sbCoreOverrides->Add(DCBZOFF, 0, wxLEFT, 5); sbCoreOverrides->Add(VBeam, 0, wxLEFT, 5); sbCoreOverrides->Add(SyncGPU, 0, wxLEFT, 5); - sbCoreOverrides->Add(FastDiscSpeed, 0, wxLEFT, 5); + sbCoreOverrides->Add(FastDiscSpeed, 0, wxLEFT, 5); sbCoreOverrides->Add(BlockMerging, 0, wxLEFT, 5); sbCoreOverrides->Add(DSPHLE, 0, wxLEFT, 5); @@ -430,7 +431,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) sConfigPage->Add(sEmuState, 0, wxEXPAND|wxALL, 5); m_GameConfig->SetSizer(sConfigPage); - + // Patches wxBoxSizer * const sPatches = new wxBoxSizer(wxVERTICAL); Patches = new wxCheckListBox(m_PatchPage, ID_PATCHES_LIST, wxDefaultPosition, @@ -452,7 +453,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) sPatchPage->Add(sPatches, 1, wxEXPAND|wxALL, 5); m_PatchPage->SetSizer(sPatchPage); - + // Action Replay Cheats wxBoxSizer * const sCheats = new wxBoxSizer(wxVERTICAL); Cheats = new wxCheckListBox(m_CheatPage, ID_CHEATS_LIST, wxDefaultPosition, @@ -475,7 +476,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) sCheatPage->Add(sCheats, 1, wxEXPAND|wxALL, 5); m_CheatPage->SetSizer(sCheatPage); - + wxStaticText * const m_NameText = new wxStaticText(m_Information, wxID_ANY, _("Name:")); m_Name = new wxTextCtrl(m_Information, ID_NAME, wxEmptyString, @@ -501,7 +502,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) m_Date = new wxTextCtrl(m_Information, ID_DATE, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY); wxStaticText * const m_FSTText = - new wxStaticText(m_Information, wxID_ANY, _("FST Size:")); + new wxStaticText(m_Information, wxID_ANY, _("FST Size:")); m_FST = new wxTextCtrl(m_Information, ID_FST, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY); @@ -519,12 +520,12 @@ void CISOProperties::CreateGUIControls(bool IsWad) arrayStringFor_Lang.Add(_("Simplified Chinese")); arrayStringFor_Lang.Add(_("Traditional Chinese")); arrayStringFor_Lang.Add(_("Korean")); - + language = SConfig::GetInstance().m_SYSCONF->GetData("IPL.LNG"); } m_Lang = new wxChoice(m_Information, ID_LANG, wxDefaultPosition, wxDefaultSize, arrayStringFor_Lang); m_Lang->SetSelection(language); - + wxStaticText * const m_ShortText = new wxStaticText(m_Information, wxID_ANY, _("Short Name:")); m_ShortName = new wxTextCtrl(m_Information, ID_SHORTNAME, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY); wxStaticText * const m_MakerText = new wxStaticText(m_Information, wxID_ANY, _("Maker:")); @@ -670,9 +671,9 @@ void CISOProperties::OnRightClickOnTree(wxTreeEvent& event) popupMenu->Append(IDM_EXTRACTDIR, _("Extract Directory...")); else if (m_Treectrl->GetItemImage(m_Treectrl->GetSelection()) == 2) popupMenu->Append(IDM_EXTRACTFILE, _("Extract File...")); - + popupMenu->Append(IDM_EXTRACTALL, _("Extract All Files...")); - + if (m_Treectrl->GetItemImage(m_Treectrl->GetSelection()) == 0 && m_Treectrl->GetFirstVisibleItem() != m_Treectrl->GetSelection()) { @@ -682,7 +683,7 @@ void CISOProperties::OnRightClickOnTree(wxTreeEvent& event) popupMenu->AppendSeparator(); popupMenu->Append(IDM_CHECKINTEGRITY, _("Check Partition Integrity")); } - + PopupMenu(popupMenu); event.Skip(); @@ -694,7 +695,7 @@ void CISOProperties::OnExtractFile(wxCommandEvent& WXUNUSED (event)) wxString File; File = m_Treectrl->GetItemText(m_Treectrl->GetSelection()); - + Path = wxFileSelector( _("Export File"), wxEmptyString, File, wxEmptyString, @@ -784,7 +785,7 @@ void CISOProperties::ExportDir(const char* _rFullPath, const char* _rExportFolde { dialog.SetTitle(wxString::Format(wxT("%s : %d%%"), dialogTitle.c_str(), (u32)(((float)(i - index[0]) / (float)(index[1] - index[0])) * 100))); - + dialog.Update(i, wxString::Format(_("Extracting %s"), StrToWxStr(fst[i]->m_FullPath))); @@ -794,7 +795,7 @@ void CISOProperties::ExportDir(const char* _rFullPath, const char* _rExportFolde if (fst[i]->IsDirectory()) { snprintf(exportName, sizeof(exportName), "%s/%s/", _rExportFolder, fst[i]->m_FullPath); - DEBUG_LOG(DISCIO, "%s", exportName); + DEBUG_LOG(DISCIO, "%s", exportName); if (!File::Exists(exportName) && !File::CreateFullPath(exportName)) { @@ -879,7 +880,7 @@ void CISOProperties::OnExtractDataFromHeader(wxCommandEvent& event) wxString Directory = m_Treectrl->GetItemText(m_Treectrl->GetSelection()); std::size_t partitionNum = (std::size_t)wxAtoi(Directory.Mid(Directory.find_first_of("/"), 1)); Directory.Remove(0, Directory.find_first_of("/") +1); // Remove "Partition x/" - + if(WiiDisc.size() > partitionNum) { // Get the filesystem of the LAST partition @@ -895,7 +896,7 @@ void CISOProperties::OnExtractDataFromHeader(wxCommandEvent& event) { FS = pFileSystem; } - + bool ret = false; if (event.GetId() == IDM_EXTRACTAPPLOADER) { @@ -919,7 +920,7 @@ public: Create(); } - virtual ExitCode Entry() + virtual ExitCode Entry() override { return (ExitCode)m_Partition.Partition->CheckIntegrity(); } @@ -1159,7 +1160,7 @@ void CISOProperties::LaunchExternalEditor(const std::string& filename) bRefreshList = true; // Just in case - // Once we're done with the ini edit, give the focus back to Dolphin + // Once we're done with the ini edit, give the focus back to Dolphin SetFocus(); } @@ -1223,9 +1224,8 @@ void CISOProperties::PatchList_Load() PatchEngine::LoadPatchSection("OnFrame", onFrame, GameIniDefault, GameIniLocal); u32 index = 0; - for (auto it = onFrame.begin(); it != onFrame.end(); ++it) + for (PatchEngine::Patch& p : onFrame) { - PatchEngine::Patch p = *it; Patches->Append(StrToWxStr(p.name)); Patches->Check(index, p.active); if (!p.user_defined) @@ -1239,16 +1239,16 @@ void CISOProperties::PatchList_Save() std::vector lines; std::vector enabledLines; u32 index = 0; - for (auto onFrame_it = onFrame.begin(); onFrame_it != onFrame.end(); ++onFrame_it) + for (PatchEngine::Patch& p : onFrame) { if (Patches->IsChecked(index)) - enabledLines.push_back("$" + onFrame_it->name); + enabledLines.push_back("$" + p.name); // Do not save default patches. - if (DefaultPatches.find(onFrame_it->name) == DefaultPatches.end()) + if (DefaultPatches.find(p.name) == DefaultPatches.end()) { - lines.push_back("$" + onFrame_it->name); - for (auto iter2 = onFrame_it->entries.begin(); iter2 != onFrame_it->entries.end(); ++iter2) + lines.push_back("$" + p.name); + for (auto iter2 = p.entries.begin(); iter2 != p.entries.end(); ++iter2) { std::string temp = StringFromFormat("0x%08X:%s:0x%08X", iter2->address, PatchEngine::PatchTypeStrings[iter2->type], iter2->value); lines.push_back(temp); @@ -1274,7 +1274,7 @@ void CISOProperties::PHackButtonClicked(wxCommandEvent& event) void CISOProperties::PatchButtonClicked(wxCommandEvent& event) { int selection = Patches->GetSelection(); - + switch (event.GetId()) { case ID_EDITPATCH: @@ -1330,10 +1330,8 @@ void CISOProperties::ActionReplayList_Save() std::vector lines; std::vector enabledLines; u32 index = 0; - for (auto iter = arCodes.begin(); iter != arCodes.end(); ++iter) + for (auto code : arCodes) { - ActionReplay::ARCode code = *iter; - if (Cheats->IsChecked(index)) enabledLines.push_back("$" + code.name); @@ -1341,9 +1339,9 @@ void CISOProperties::ActionReplayList_Save() if (DefaultCheats.find(code.name) == DefaultCheats.end()) { lines.push_back("$" + code.name); - for (auto iter2 = code.ops.begin(); iter2 != code.ops.end(); ++iter2) + for (auto& op : code.ops) { - lines.push_back(WxStrToStr(wxString::Format(wxT("%08X %08X"), iter2->cmd_addr, iter2->value))); + lines.push_back(WxStrToStr(wxString::Format(wxT("%08X %08X"), op.cmd_addr, op.value))); } } ++index; @@ -1355,7 +1353,7 @@ void CISOProperties::ActionReplayList_Save() void CISOProperties::ActionReplayButtonClicked(wxCommandEvent& event) { int selection = Cheats->GetSelection(); - + switch (event.GetId()) { case ID_EDITCHEAT: diff --git a/Source/Core/DolphinWX/Src/ISOProperties.h b/Source/Core/DolphinWX/Src/ISOProperties.h index f58c51dbee..d19e2f9dc4 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.h +++ b/Source/Core/DolphinWX/Src/ISOProperties.h @@ -192,7 +192,7 @@ private: size_t CreateDirectoryTree(wxTreeItemId& parent, std::vector fileInfos, - const size_t _FirstIndex, + const size_t _FirstIndex, const size_t _LastIndex); void ExportDir(const char* _rFullPath, const char* _rExportFilename, const int partitionNum = 0); diff --git a/Source/Core/DolphinWX/Src/InputConfigDiag.cpp b/Source/Core/DolphinWX/Src/InputConfigDiag.cpp index 574834f940..a8b7b8aaec 100644 --- a/Source/Core/DolphinWX/Src/InputConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/InputConfigDiag.cpp @@ -307,7 +307,7 @@ bool ControlDialog::Validate() void GamepadPage::SetDevice(wxCommandEvent&) { controller->default_device.FromString(WxStrToStr(device_cbox->GetValue())); - + // show user what it was validated as device_cbox->SetValue(StrToWxStr(controller->default_device.ToString())); @@ -322,7 +322,7 @@ void GamepadPage::SetDevice(wxCommandEvent&) void ControlDialog::SetDevice(wxCommandEvent&) { m_devq.FromString(WxStrToStr(device_cbox->GetValue())); - + // show user what it was validated as device_cbox->SetValue(StrToWxStr(m_devq.ToString())); @@ -647,7 +647,7 @@ void GamepadPage::SaveProfile(wxCommandEvent&) IniFile inifile; controller->SaveConfig(inifile.GetOrCreateSection("Profile")); inifile.Save(fname); - + m_config_dialog->UpdateProfileComboBox(); } else @@ -731,7 +731,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin { wxStaticText* const label = new wxStaticText(parent, -1, wxGetTranslation(StrToWxStr((*ci)->name))); - + ControlButton* const control_button = new ControlButton(parent, (*ci)->control_ref, 80); control_button->SetFont(m_SmallFont); @@ -827,7 +827,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin if (GROUP_TYPE_MIXED_TRIGGERS == group->type) width = 64+12+1; - + if (GROUP_TYPE_TRIGGERS != group->type) height /= 2; @@ -905,14 +905,14 @@ ControlGroupsSizer::ControlGroupsSizer(ControllerEmu* const controller, wxWindow size_t col_size = 0; wxBoxSizer* stacked_groups = NULL; - for (unsigned int i = 0; i < controller->groups.size(); ++i) + for (ControllerEmu::ControlGroup* group : controller->groups) { - ControlGroupBox* control_group_box = new ControlGroupBox(controller->groups[i], parent, eventsink); + ControlGroupBox* control_group_box = new ControlGroupBox(group, parent, eventsink); wxStaticBoxSizer *control_group = - new wxStaticBoxSizer(wxVERTICAL, parent, wxGetTranslation(StrToWxStr(controller->groups[i]->name))); + new wxStaticBoxSizer(wxVERTICAL, parent, wxGetTranslation(StrToWxStr(group->name))); control_group->Add(control_group_box); - const size_t grp_size = controller->groups[i]->controls.size() + controller->groups[i]->settings.size(); + const size_t grp_size = group->controls.size() + group->settings.size(); col_size += grp_size; if (col_size > 8 || NULL == stacked_groups) { diff --git a/Source/Core/DolphinWX/Src/InputConfigDiag.h b/Source/Core/DolphinWX/Src/InputConfigDiag.h index 7d337ed0de..cf88046aeb 100644 --- a/Source/Core/DolphinWX/Src/InputConfigDiag.h +++ b/Source/Core/DolphinWX/Src/InputConfigDiag.h @@ -86,7 +86,7 @@ class ControlDialog : public wxDialog { public: ControlDialog(GamepadPage* const parent, InputPlugin& plugin, ControllerInterface::ControlReference* const ref); - + wxStaticBoxSizer* CreateControlChooser(GamepadPage* const parent); virtual bool Validate(); @@ -207,7 +207,7 @@ public: std::vector control_groups; protected: - + ControllerEmu* const controller; private: diff --git a/Source/Core/DolphinWX/Src/InputConfigDiagBitmaps.cpp b/Source/Core/DolphinWX/Src/InputConfigDiagBitmaps.cpp index 6aa37d78e9..fd132475ef 100644 --- a/Source/Core/DolphinWX/Src/InputConfigDiagBitmaps.cpp +++ b/Source/Core/DolphinWX/Src/InputConfigDiagBitmaps.cpp @@ -263,7 +263,7 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event)) } delete[] bitmasks; - + } break; case GROUP_TYPE_TRIGGERS : diff --git a/Source/Core/DolphinWX/Src/LogConfigWindow.cpp b/Source/Core/DolphinWX/Src/LogConfigWindow.cpp index 1518acdf24..23faa656c8 100644 --- a/Source/Core/DolphinWX/Src/LogConfigWindow.cpp +++ b/Source/Core/DolphinWX/Src/LogConfigWindow.cpp @@ -101,13 +101,13 @@ void LogConfigWindow::LoadSettings() // Retrieve the verbosity value from the config ini file. int verbosity; ini.Get("Options", "Verbosity", &verbosity, 0); - + // Ensure the verbosity level is valid. if (verbosity < 1) verbosity = 1; if (verbosity > MAX_LOGLEVEL) verbosity = MAX_LOGLEVEL; - + // Actually set the logging verbosity. m_verbosity->SetSelection(verbosity - 1); @@ -136,10 +136,10 @@ void LogConfigWindow::LoadSettings() { bool log_enabled; ini.Get("Logs", m_LogManager->GetShortName((LogTypes::LOG_TYPE)i), &log_enabled, true); - + if (log_enabled) enableAll = false; - + m_checks->Check(i, log_enabled); } } @@ -175,7 +175,7 @@ void LogConfigWindow::OnVerbosityChange(wxCommandEvent& event) { // Get the new verbosity int v = m_verbosity->GetSelection() + 1; - + // Set all log types to that verbosity level for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) { diff --git a/Source/Core/DolphinWX/Src/LogWindow.cpp b/Source/Core/DolphinWX/Src/LogWindow.cpp index 421ca9ae6b..6579a8831e 100644 --- a/Source/Core/DolphinWX/Src/LogWindow.cpp +++ b/Source/Core/DolphinWX/Src/LogWindow.cpp @@ -51,7 +51,7 @@ void CLogWindow::CreateGUIControls() // Set up log listeners int verbosity; ini.Get("Options", "Verbosity", &verbosity, 0); - + // Ensure the verbosity level is valid if (verbosity < 1) verbosity = 1; @@ -305,23 +305,23 @@ void CLogWindow::UpdateLog() case ERROR_LEVEL: m_Log->SetDefaultStyle(wxTextAttr(*wxRED)); break; - + case WARNING_LEVEL: m_Log->SetDefaultStyle(wxTextAttr(wxColour(255, 255, 0))); // YELLOW break; - + case NOTICE_LEVEL: m_Log->SetDefaultStyle(wxTextAttr(*wxGREEN)); break; - + case INFO_LEVEL: m_Log->SetDefaultStyle(wxTextAttr(*wxCYAN)); break; - + case DEBUG_LEVEL: m_Log->SetDefaultStyle(wxTextAttr(*wxLIGHT_GREY)); break; - + default: m_Log->SetDefaultStyle(wxTextAttr(*wxWHITE)); break; diff --git a/Source/Core/DolphinWX/Src/Main.cpp b/Source/Core/DolphinWX/Src/Main.cpp index 285fc2729e..d1fc31bc1a 100644 --- a/Source/Core/DolphinWX/Src/Main.cpp +++ b/Source/Core/DolphinWX/Src/Main.cpp @@ -112,11 +112,11 @@ bool DolphinApp::Initialize(int& c, wxChar **v) { #if defined HAVE_X11 && HAVE_X11 XInitThreads(); -#endif +#endif return wxApp::Initialize(c, v); } -// The `main program' equivalent that creates the main window and return the main frame +// The `main program' equivalent that creates the main window and return the main frame bool DolphinApp::OnInit() { @@ -190,7 +190,7 @@ bool DolphinApp::OnInit() if (parser.Parse() != 0) { return false; - } + } UseDebugger = parser.Found(wxT("debugger")); UseLogger = parser.Found(wxT("logger")); @@ -229,7 +229,7 @@ bool DolphinApp::OnInit() #ifndef _M_ARM // TODO: if First Boot - if (!cpu_info.bSSE2) + if (!cpu_info.bSSE2) { PanicAlertT("Hi,\n\nDolphin requires that your CPU has support for SSE2 extensions.\n" "Unfortunately your CPU does not support them, so Dolphin will not run.\n\n" @@ -321,7 +321,7 @@ bool DolphinApp::OnInit() int leftPos = GetSystemMetrics(SM_XVIRTUALSCREEN); int topPos = GetSystemMetrics(SM_YVIRTUALSCREEN); int width = GetSystemMetrics(SM_CXVIRTUALSCREEN); - int height = GetSystemMetrics(SM_CYVIRTUALSCREEN); + int height = GetSystemMetrics(SM_CYVIRTUALSCREEN); if ((leftPos + width) < (x + w) || leftPos > x || (topPos + height) < (y + h) || topPos > y) x = y = wxDefaultCoord; #elif defined __APPLE__ @@ -456,7 +456,7 @@ void DolphinApp::OnFatalException() // ------------ // Talk to GUI -void Host_SysMessage(const char *fmt, ...) +void Host_SysMessage(const char *fmt, ...) { va_list list; char msg[512]; diff --git a/Source/Core/DolphinWX/Src/MainAndroid.cpp b/Source/Core/DolphinWX/Src/MainAndroid.cpp index 3c0c80871a..f94a90a4df 100644 --- a/Source/Core/DolphinWX/Src/MainAndroid.cpp +++ b/Source/Core/DolphinWX/Src/MainAndroid.cpp @@ -94,8 +94,8 @@ void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height) { x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos; y = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowYPos; - width = g_width; - height = g_height; + width = g_width; + height = g_height; } void Host_RequestRenderWindowSize(int width, int height) {} @@ -227,12 +227,12 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_UnPauseEmula { PowerPC::Start(); } -JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_PauseEmulation(JNIEnv *env, jobject obj) +JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_PauseEmulation(JNIEnv *env, jobject obj) { PowerPC::Pause(); } -JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_StopEmulation(JNIEnv *env, jobject obj) +JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_StopEmulation(JNIEnv *env, jobject obj) { Core::Stop(); updateMainFrameEvent.Set(); // Kick the waiting event @@ -289,12 +289,12 @@ JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetConfig const char *Key = env->GetStringUTFChars(jKey, NULL); const char *Value = env->GetStringUTFChars(jValue, NULL); const char *Default = env->GetStringUTFChars(jDefault, NULL); - + ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(File)); std::string value; - + ini.Get(Key, Value, &value, Default); - + env->ReleaseStringUTFChars(jFile, File); env->ReleaseStringUTFChars(jKey, Key); env->ReleaseStringUTFChars(jValue, Value); @@ -309,7 +309,7 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetConfig(JN const char *Key = env->GetStringUTFChars(jKey, NULL); const char *Value = env->GetStringUTFChars(jValue, NULL); const char *Default = env->GetStringUTFChars(jDefault, NULL); - + ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(File)); ini.Set(Key, Value, Default); diff --git a/Source/Core/DolphinWX/Src/MainNoGUI.cpp b/Source/Core/DolphinWX/Src/MainNoGUI.cpp index ad1ac8120d..c9e61b46f7 100644 --- a/Source/Core/DolphinWX/Src/MainNoGUI.cpp +++ b/Source/Core/DolphinWX/Src/MainNoGUI.cpp @@ -260,7 +260,7 @@ int main(int argc, char* argv[]) { #ifdef __APPLE__ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSEvent *event = [[NSEvent alloc] init]; + NSEvent *event = [[NSEvent alloc] init]; [NSApplication sharedApplication]; [NSApp activateIgnoringOtherApps: YES]; [NSApp finishLaunching]; @@ -313,7 +313,7 @@ int main(int argc, char* argv[]) event = [NSApp nextEventMatchingMask: NSAnyEventMask untilDate: [NSDate distantFuture] inMode: NSDefaultRunLoopMode dequeue: YES]; - + if ([event type] == NSKeyDown && [event modifierFlags] & NSCommandKeyMask && [[event characters] UTF8String][0] == 'q') @@ -321,10 +321,10 @@ int main(int argc, char* argv[]) Core::Stop(); break; } - + if ([event type] != NSKeyDown) [NSApp sendEvent: event]; - } + } [event release]; [pool release]; diff --git a/Source/Core/DolphinWX/Src/MemcardManager.cpp b/Source/Core/DolphinWX/Src/MemcardManager.cpp index 68f56c014c..9b345c3469 100644 --- a/Source/Core/DolphinWX/Src/MemcardManager.cpp +++ b/Source/Core/DolphinWX/Src/MemcardManager.cpp @@ -176,7 +176,7 @@ void CMemcardManager::CreateGUIControls() m_ConvertToGci = new wxButton(this, ID_CONVERTTOGCI, _("Convert to GCI")); wxStaticBoxSizer *sMemcard[2]; - + for (int slot = SLOT_A; slot <= SLOT_B; slot++) { m_CopyFrom[slot] = new wxButton(this, ID_COPYFROM_A + slot, @@ -203,10 +203,10 @@ void CMemcardManager::CreateGUIControls() m_MemcardPath[slot] = new wxFilePickerCtrl(this, ID_MEMCARDPATH_A + slot, StrToWxStr(File::GetUserPath(D_GCUSER_IDX)), _("Choose a memory card:"), _("Gamecube Memory Cards (*.raw,*.gcp)") + wxString(wxT("|*.raw;*.gcp")), wxDefaultPosition, wxDefaultSize, wxFLP_USE_TEXTCTRL|wxFLP_OPEN); - + m_MemcardList[slot] = new CMemcardListCtrl(this, ID_MEMCARDLIST_A + slot, wxDefaultPosition, wxSize(350,400), wxLC_REPORT | wxSUNKEN_BORDER | wxLC_ALIGN_LEFT | wxLC_SINGLE_SEL, mcmSettings); - + m_MemcardList[slot]->AssignImageList(new wxImageList(96,32),wxIMAGE_LIST_SMALL); sMemcard[slot] = new wxStaticBoxSizer(wxVERTICAL, this, _("Memory Card") + wxString::Format(wxT(" %c"), 'A' + slot)); @@ -499,7 +499,7 @@ void CMemcardManager::CopyDeleteClick(wxCommandEvent& event) { PanicAlert(E_SAVEFAILED); } - break; + break; case ID_CONVERTTOGCI: fileName2 = "convert"; case ID_SAVEIMPORT_A: @@ -703,7 +703,7 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card) auto const string_decoder = memoryCard[card]->IsAsciiEncoding() ? CP1252ToUTF8 : SHIFTJISToUTF8; - + wxTitle = StrToWxStr(string_decoder(title)); wxComment = StrToWxStr(string_decoder(comment)); @@ -711,10 +711,10 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card) m_MemcardList[card]->SetItem(index, COLUMN_COMMENT, wxComment); blocks = memoryCard[card]->DEntry_BlockCount(fileIndex); - + if (blocks == 0xFFFF) blocks = 0; - + wxBlock.Printf(wxT("%10d"), blocks); m_MemcardList[card]->SetItem(index,COLUMN_BLOCKS, wxBlock); firstblock = memoryCard[card]->DEntry_FirstBlock(fileIndex); @@ -777,7 +777,7 @@ void CMemcardManager::CMemcardListCtrl::OnRightClick(wxMouseEvent& event) long item = HitTest(event.GetPosition(), flags); wxMenu* popupMenu = new wxMenu; - if (item != wxNOT_FOUND) + if (item != wxNOT_FOUND) { if (GetItemState(item, wxLIST_STATE_SELECTED) != wxLIST_STATE_SELECTED) { @@ -791,7 +791,7 @@ void CMemcardManager::CMemcardListCtrl::OnRightClick(wxMouseEvent& event) popupMenu->Append(ID_SAVEIMPORT_A + slot, _("Import Save")); popupMenu->Append(ID_SAVEEXPORT_A + slot, _("Export Save")); popupMenu->Append(ID_EXPORTALL_A + slot, _("Export all saves")); - + popupMenu->FindItem(ID_COPYFROM_A + slot)->Enable(__mcmSettings.twoCardsLoaded); popupMenu->AppendSeparator(); @@ -805,7 +805,7 @@ void CMemcardManager::CMemcardListCtrl::OnRightClick(wxMouseEvent& event) popupMenu->FindItem(ID_PREVPAGE_A + slot)->Enable(prevPage && __mcmSettings.usePages); popupMenu->FindItem(ID_NEXTPAGE_A + slot)->Enable(nextPage && __mcmSettings.usePages); popupMenu->FindItem(ID_USEPAGES)->Check(__mcmSettings.usePages); - + popupMenu->AppendSeparator(); // popupMenu->AppendCheckItem(COLUMN_BANNER, _("Show save banner")); diff --git a/Source/Core/DolphinWX/Src/MemcardManager.h b/Source/Core/DolphinWX/Src/MemcardManager.h index 9f2f8f0d9b..4310fbcfcf 100644 --- a/Source/Core/DolphinWX/Src/MemcardManager.h +++ b/Source/Core/DolphinWX/Src/MemcardManager.h @@ -103,7 +103,7 @@ class CMemcardManager : public wxDialog COLUMN_COMMENTSADDRESS, NUMBER_OF_COLUMN }; - + GCMemcard *memoryCard[2]; void CreateGUIControls(); @@ -146,9 +146,9 @@ class CMemcardManager : public wxDialog bool prevPage, nextPage; private: - void OnRightClick(wxMouseEvent& event); + void OnRightClick(wxMouseEvent& event); }; - + CMemcardListCtrl *m_MemcardList[2]; }; diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp index 091804e786..2ccc236395 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp @@ -7,12 +7,14 @@ // Licensed under the terms of the GNU GPL, version 2 // http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt +#include +#include + #include "WiiSaveCrypted.h" #include "FileUtil.h" #include "MathUtil.h" #include "NandPaths.h" #include "FileUtil.h" -#include static Common::replace_v replacements; @@ -40,17 +42,17 @@ void CWiiSaveCrypted::ExportAllSaves() std::vector titles; u32 pathMask = 0x00010000; for (int i = 0; i < 8; ++i) - { + { File::FSTEntry FST_Temp; std::string folder = StringFromFormat("%s/%08x/", titleFolder.c_str(), pathMask | i); File::ScanDirectoryTree(folder, FST_Temp); - - for (u32 j = 0; j < FST_Temp.children.size(); j++) + + for (auto& entry : FST_Temp.children) { - if (FST_Temp.children[j].isDirectory) + if (entry.isDirectory) { u32 gameid; - if (AsciiToHex(FST_Temp.children[j].virtualName.c_str(), gameid)) + if (AsciiToHex(entry.virtualName.c_str(), gameid)) { std::string bannerPath = StringFromFormat("%s%08x/data/banner.bin", folder.c_str(), gameid); if (File::Exists(bannerPath)) @@ -61,11 +63,11 @@ void CWiiSaveCrypted::ExportAllSaves() } } } - } + } SuccessAlertT("Found %x save files", (unsigned int) titles.size()); - for (u32 i = 0; i < titles.size(); ++i) + for (auto& title : titles) { - CWiiSaveCrypted* exportSave = new CWiiSaveCrypted("", titles[i]); + CWiiSaveCrypted* exportSave = new CWiiSaveCrypted("", title); delete exportSave; } } @@ -78,7 +80,7 @@ CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 TitleID) if (!TitleID) // Import { - AES_set_decrypt_key(SDKey, 128, &m_AES_KEY); + aes_setkey_dec(&m_AES_ctx, SDKey, 128); b_valid = true; ReadHDR(); ReadBKHDR(); @@ -95,8 +97,8 @@ CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 TitleID) } else { - AES_set_encrypt_key(SDKey, 128, &m_AES_KEY); - + aes_setkey_enc(&m_AES_ctx, SDKey, 128); + if (getPaths(true)) { b_valid = true; @@ -133,7 +135,7 @@ void CWiiSaveCrypted::ReadHDR() } fpData_bin.Close(); - AES_cbc_encrypt((const u8*)&_encryptedHeader, (u8*)&_header, HEADER_SZ, &m_AES_KEY, SD_IV, AES_DECRYPT); + aes_crypt_cbc(&m_AES_ctx, AES_DECRYPT, HEADER_SZ, SD_IV, (const u8*)&_encryptedHeader, (u8*)&_header); u32 bannerSize = Common::swap32(_header.hdr.BannerSize); if ((bannerSize < FULL_BNR_MIN) || (bannerSize > FULL_BNR_MAX) || (((bannerSize - BNR_SZ) % ICON_SZ) != 0)) @@ -144,7 +146,7 @@ void CWiiSaveCrypted::ReadHDR() } m_TitleID = Common::swap64(_header.hdr.SaveGameTitle); - + u8 md5_file[16], md5_calc[16]; memcpy(md5_file, _header.hdr.Md5, 0x10); @@ -152,14 +154,14 @@ void CWiiSaveCrypted::ReadHDR() md5((u8*)&_header, HEADER_SZ, md5_calc); if (memcmp(md5_file, md5_calc, 0x10)) { - PanicAlertT("MD5 mismatch\n %016llx%016llx != %016llx%016llx", Common::swap64(md5_file),Common::swap64(md5_file+8), Common::swap64(md5_calc), Common::swap64(md5_calc+8)); + PanicAlertT("MD5 mismatch\n %016" PRIx64 "%016" PRIx64 " != %016" PRIx64 "%016" PRIx64, Common::swap64(md5_file),Common::swap64(md5_file+8), Common::swap64(md5_calc), Common::swap64(md5_calc+8)); b_valid= false; } - + if (!getPaths()) { b_valid = false; - return; + return; } std::string BannerFilePath = WiiTitlePath + "banner.bin"; if (!File::Exists(BannerFilePath) || AskYesNoT("%s already exists, overwrite?", BannerFilePath.c_str())) @@ -197,8 +199,8 @@ void CWiiSaveCrypted::WriteHDR() md5((u8*)&_header, HEADER_SZ, md5_calc); memcpy(_header.hdr.Md5, md5_calc, 0x10); - AES_cbc_encrypt((const unsigned char *)&_header, (u8*)&_encryptedHeader, HEADER_SZ, &m_AES_KEY, SD_IV, AES_ENCRYPT); - + aes_crypt_cbc(&m_AES_ctx, AES_ENCRYPT, HEADER_SZ, SD_IV, (const u8*)&_header, (u8*)&_encryptedHeader); + File::IOFile fpData_bin(encryptedSavePath, "wb"); if (!fpData_bin.WriteBytes(&_encryptedHeader, HEADER_SZ)) { @@ -212,7 +214,7 @@ void CWiiSaveCrypted::WriteHDR() void CWiiSaveCrypted::ReadBKHDR() { if (!b_valid) return; - + File::IOFile fpData_bin(encryptedSavePath, "rb"); if (!fpData_bin) { @@ -228,7 +230,7 @@ void CWiiSaveCrypted::ReadBKHDR() return; } fpData_bin.Close(); - + if (bkhdr.size != Common::swap32(BK_LISTED_SZ) || bkhdr.magic != Common::swap32(BK_HDR_MAGIC)) { @@ -236,15 +238,15 @@ void CWiiSaveCrypted::ReadBKHDR() b_valid = false; return; } - + _numberOfFiles = Common::swap32(bkhdr.numberOfFiles); _sizeOfFiles = Common::swap32(bkhdr.sizeOfFiles); _totalSize = Common::swap32(bkhdr.totalSize); - + if (_sizeOfFiles + FULL_CERT_SZ != _totalSize) WARN_LOG(CONSOLE, "Size(%x) + cert(%x) does not equal totalsize(%x)", _sizeOfFiles, FULL_CERT_SZ, _totalSize); if (m_TitleID != Common::swap64(bkhdr.SaveGameTitle)) - WARN_LOG(CONSOLE, "Encrypted title (%llx) does not match unencrypted title (%llx)", m_TitleID, Common::swap64(bkhdr.SaveGameTitle)); + WARN_LOG(CONSOLE, "Encrypted title (%" PRIx64 ") does not match unencrypted title (%" PRIx64 ")", m_TitleID, Common::swap64(bkhdr.SaveGameTitle)); } void CWiiSaveCrypted::WriteBKHDR() @@ -252,7 +254,7 @@ void CWiiSaveCrypted::WriteBKHDR() if (!b_valid) return; _numberOfFiles = 0; _sizeOfFiles = 0; - + ScanForFiles(WiiTitlePath, FilesList, &_numberOfFiles, &_sizeOfFiles); memset(&bkhdr, 0, BK_SZ); bkhdr.size = Common::swap32(BK_LISTED_SZ); @@ -293,13 +295,13 @@ void CWiiSaveCrypted::ImportWiiSaveFiles() memset(&_tmpFileHDR, 0, FILE_HDR_SZ); memset(IV, 0, 0x10); u32 _fileSize = 0; - + if (!fpData_bin.ReadBytes(&_tmpFileHDR, FILE_HDR_SZ)) { PanicAlertT("Failed to read header for file %d", i); b_valid = false; } - + if (Common::swap32(_tmpFileHDR.magic) != FILE_HDR_MAGIC) { PanicAlertT("Bad File Header"); @@ -315,7 +317,7 @@ void CWiiSaveCrypted::ImportWiiSaveFiles() } std::string fullFilePath = WiiTitlePath + fileName; - File::CreateFullPath(fullFilePath); + File::CreateFullPath(fullFilePath); if (_tmpFileHDR.type == 1) { _fileSize = Common::swap32(_tmpFileHDR.size); @@ -329,20 +331,20 @@ void CWiiSaveCrypted::ImportWiiSaveFiles() b_valid = false; break; } - - + + memcpy(IV, _tmpFileHDR.IV, 0x10); - AES_cbc_encrypt((const unsigned char *)&_encryptedData[0], &_data[0], RoundedFileSize, &m_AES_KEY, IV, AES_DECRYPT); - + aes_crypt_cbc(&m_AES_ctx, AES_DECRYPT, RoundedFileSize, IV, (const u8*)&_encryptedData[0], &_data[0]); + if (!File::Exists(fullFilePath) || AskYesNoT("%s already exists, overwrite?", fullFilePath.c_str())) { INFO_LOG(CONSOLE, "Creating file %s", fullFilePath.c_str()); - + File::IOFile fpRawSaveFile(fullFilePath, "wb"); fpRawSaveFile.WriteBytes(&_data[0], _fileSize); } } - } + } } } @@ -355,18 +357,18 @@ void CWiiSaveCrypted::ExportWiiSaveFiles() FileHDR tmpFileHDR; std::string __name, __ext; memset(&tmpFileHDR, 0, FILE_HDR_SZ); - + u32 _fileSize = 0; if (File::IsDirectory(FilesList[i])) { - tmpFileHDR.type = 2; + tmpFileHDR.type = 2; } else { _fileSize = File::GetSize(FilesList[i]); tmpFileHDR.type = 1; } - + u32 _roundedfileSize = ROUND_UP(_fileSize, BLOCK_SZ); tmpFileHDR.magic = Common::swap32(FILE_HDR_MAGIC); tmpFileHDR.size = Common::swap32(_fileSize); @@ -374,7 +376,7 @@ void CWiiSaveCrypted::ExportWiiSaveFiles() __name = FilesList[i].substr(WiiTitlePath.length()+1); - + for (Common::replace_v::const_iterator iter = replacements.begin(); iter != replacements.end(); ++iter) { for (size_t j = 0; (j = __name.find(iter->second, j)) != __name.npos; ++j) @@ -382,7 +384,7 @@ void CWiiSaveCrypted::ExportWiiSaveFiles() __name.replace(j, iter->second.length(), 1, iter->first); } } - + if (__name.length() > 0x44) { PanicAlertT("%s is too long for the filename, max chars is 45", __name.c_str()); @@ -390,7 +392,7 @@ void CWiiSaveCrypted::ExportWiiSaveFiles() return; } strncpy((char *)tmpFileHDR.name, __name.c_str(), __name.length()); - + { File::IOFile fpData_bin(encryptedSavePath, "ab"); fpData_bin.WriteBytes(&tmpFileHDR, FILE_HDR_SZ); @@ -410,7 +412,7 @@ void CWiiSaveCrypted::ExportWiiSaveFiles() PanicAlertT("%s failed to open", FilesList[i].c_str()); b_valid = false; } - + std::vector _data,_encryptedData; _data.reserve(_roundedfileSize); _encryptedData.reserve(_roundedfileSize); @@ -421,8 +423,8 @@ void CWiiSaveCrypted::ExportWiiSaveFiles() b_valid = false; } - AES_cbc_encrypt((const u8*)&_data[0], &_encryptedData[0], _roundedfileSize, &m_AES_KEY, tmpFileHDR.IV, AES_ENCRYPT); - + aes_crypt_cbc(&m_AES_ctx, AES_ENCRYPT, _roundedfileSize, tmpFileHDR.IV, (const u8*)&_data[0], &_encryptedData[0]); + File::IOFile fpData_bin(encryptedSavePath, "ab"); if (!fpData_bin.WriteBytes(&_encryptedData[0], _roundedfileSize)) PanicAlertT("Failed to write data to file: %s", encryptedSavePath.c_str()); @@ -445,7 +447,7 @@ void CWiiSaveCrypted::do_sig() char name[64]; u8 *data; u32 data_size; - + u32 NG_key_id = 0x6AAB8C59; u8 NG_priv[30] = { 0, 0xAB, 0xEE, 0xC1, 0xDD, 0xB4, 0xA6, 0x16, 0x6B, 0x70, 0xFD, 0x7E, 0x56, 0x67, 0x70, @@ -503,7 +505,7 @@ void CWiiSaveCrypted::do_sig() } generate_ecdsa(sig, sig + 30, ap_priv, hash); *(u32*)(sig + 60) = Common::swap32(0x2f536969); - + fpData_bin.WriteArray(sig, sizeof(sig)); fpData_bin.WriteArray(ng_cert, sizeof(ng_cert)); fpData_bin.WriteArray(ap_cert, sizeof(ap_cert)); @@ -545,21 +547,21 @@ bool CWiiSaveCrypted::getPaths(bool forExport) PanicAlertT("No save folder found for title %s", GameID); return false; } - + if(!File::Exists(WiiTitlePath + "banner.bin")) { b_valid = false; PanicAlertT("No banner file found for title %s", GameID); return false; } - if (encryptedSavePath.length() == 0) + if (encryptedSavePath.length() == 0) encryptedSavePath = "."; // If no path was passed, use current dir encryptedSavePath += StringFromFormat("/private/wii/title/%s/data.bin", GameID); File::CreateFullPath(encryptedSavePath); } else { - File::CreateFullPath(WiiTitlePath); + File::CreateFullPath(WiiTitlePath); if (!AskYesNoT("Warning! it is advised to backup all files in the folder:\n%s\nDo you wish to continue?", WiiTitlePath.c_str())) return false; } @@ -581,25 +583,25 @@ void CWiiSaveCrypted::ScanForFiles(std::string savDir, std::vector& File::FSTEntry FST_Temp; File::ScanDirectoryTree(Directories[i], FST_Temp); - for (u32 j = 0; j < FST_Temp.children.size(); j++) + for (auto& elem : FST_Temp.children) { - if (strncmp(FST_Temp.children.at(j).virtualName.c_str(), "banner.bin", 10) != 0) + if (strncmp(elem.virtualName.c_str(), "banner.bin", 10) != 0) { (*_numFiles)++; *_sizeFiles += FILE_HDR_SZ; - if (FST_Temp.children.at(j).isDirectory) + if (elem.isDirectory) { - if ((FST_Temp.children.at(j).virtualName == "nocopy") || FST_Temp.children.at(j).virtualName == "nomove") + if ((elem.virtualName == "nocopy") || elem.virtualName == "nomove") { PanicAlert("This save will likely require homebrew tools to copy to a real wii"); } - Directories.push_back(FST_Temp.children.at(j).physicalName); + Directories.push_back(elem.physicalName); } else { - FileList.push_back(FST_Temp.children.at(j).physicalName); - *_sizeFiles += ROUND_UP(FST_Temp.children.at(j).size, BLOCK_SZ); + FileList.push_back(elem.physicalName); + *_sizeFiles += ROUND_UP(elem.size, BLOCK_SZ); } } } diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h index 29a3e1f530..68afad43cf 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h @@ -6,8 +6,8 @@ #define _WII_SAVE_CRYPTED #include "StringUtil.h" -#include "Crypto/aes.h" #include "Crypto/tools.h" +#include #include "polarssl/md5.h" // --- this is used for encrypted Wii save files @@ -35,8 +35,7 @@ private: bool getPaths(bool forExport = false); void ScanForFiles(std::string savDir, std::vector&FilesList, u32 *_numFiles, u32 *_sizeFiles); - - AES_KEY m_AES_KEY; + aes_context m_AES_ctx; u8 SD_IV[0x10]; std::vector FilesList; @@ -45,7 +44,7 @@ private: std::string WiiTitlePath; u8 IV[0x10]; - + u32 //_bannerSize, _numberOfFiles, _sizeOfFiles, diff --git a/Source/Core/DolphinWX/Src/NetWindow.cpp b/Source/Core/DolphinWX/Src/NetWindow.cpp index b575ad6663..79ec2b59a5 100644 --- a/Source/Core/DolphinWX/Src/NetWindow.cpp +++ b/Source/Core/DolphinWX/Src/NetWindow.cpp @@ -32,7 +32,7 @@ std::string BuildGameName(const GameListItem& game) { // Lang needs to be consistent auto const lang = 0; - + std::string name(game.GetBannerName(lang)); if (name.empty()) name = game.GetVolumeName(lang); @@ -62,7 +62,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl* // top row wxStaticText* const nick_lbl = new wxStaticText(panel, wxID_ANY, _("Nickname :"), wxDefaultPosition, wxDefaultSize); - + std::string nickname; netplay_section.Get("Nickname", &nickname, "Player"); m_nickname_text = new wxTextCtrl(panel, wxID_ANY, StrToWxStr(nickname)); @@ -84,17 +84,17 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl* { wxStaticText* const ip_lbl = new wxStaticText(connect_tab, wxID_ANY, _("Address :"), wxDefaultPosition, wxDefaultSize); - + std::string address; netplay_section.Get("Address", &address, "localhost"); m_connect_ip_text = new wxTextCtrl(connect_tab, wxID_ANY, StrToWxStr(address)); wxStaticText* const port_lbl = new wxStaticText(connect_tab, wxID_ANY, _("Port :"), wxDefaultPosition, wxDefaultSize); - + // string? w/e std::string port; - netplay_section.Get("ConnectPort", &port, "2626"); + netplay_section.Get("ConnectPort", &port, "2626"); m_connect_port_text = new wxTextCtrl(connect_tab, wxID_ANY, StrToWxStr(port)); wxButton* const connect_btn = new wxButton(connect_tab, wxID_ANY, _("Connect")); @@ -136,10 +136,10 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl* { wxStaticText* const port_lbl = new wxStaticText(host_tab, wxID_ANY, _("Port :"), wxDefaultPosition, wxDefaultSize); - + // string? w/e std::string port; - netplay_section.Get("HostPort", &port, "2626"); + netplay_section.Get("HostPort", &port, "2626"); m_host_port_text = new wxTextCtrl(host_tab, wxID_ANY, StrToWxStr(port)); wxButton* const host_btn = new wxButton(host_tab, wxID_ANY, _("Host")); @@ -147,7 +147,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl* m_game_lbox = new wxListBox(host_tab, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, nullptr, wxLB_SORT); m_game_lbox->Bind(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, &NetPlaySetupDiag::OnHost, this); - + FillWithGameNames(m_game_lbox, *game_list); wxBoxSizer* const top_szr = new wxBoxSizer(wxHORIZONTAL); @@ -294,7 +294,7 @@ NetPlayDiag::NetPlayDiag(wxWindow* const parent, const CGameListCtrl* const game m_game_btn = new wxButton(panel, wxID_ANY, StrToWxStr(m_selected_game).Prepend(_(" Game : ")), wxDefaultPosition, wxDefaultSize, wxBU_LEFT); - + if (is_hosting) m_game_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnChangeGame, this); else @@ -422,7 +422,7 @@ std::string NetPlayDiag::FindGame() for (u32 i = 0 ; auto game = m_game_list->GetISO(i); ++i) if (m_selected_game == BuildGameName(*game)) return game->GetFileName(); - + PanicAlertT("Game not found!"); return ""; } @@ -622,8 +622,8 @@ PadMapDiag::PadMapDiag(wxWindow* const parent, PadMapping map[], PadMapping wiim wxArrayString player_names; player_names.Add(_("None")); - for (unsigned int i = 0; i < m_player_list.size(); i++) - player_names.Add(m_player_list[i]->name); + for (auto& player : m_player_list) + player_names.Add(player->name); wxString wiimote_names[5]; wiimote_names[0] = _("None"); diff --git a/Source/Core/DolphinWX/Src/PatchAddEdit.cpp b/Source/Core/DolphinWX/Src/PatchAddEdit.cpp index e730b21afe..9850d2bc32 100644 --- a/Source/Core/DolphinWX/Src/PatchAddEdit.cpp +++ b/Source/Core/DolphinWX/Src/PatchAddEdit.cpp @@ -74,7 +74,7 @@ void CPatchAddEdit::CreateGUIControls(int _selection) wxGridBagSizer* sgEntry = new wxGridBagSizer(0, 0); sgEntry->Add(EditPatchType, wxGBPosition(0, 0), wxGBSpan(1, 2), wxEXPAND|wxALL, 5); sgEntry->Add(EditPatchOffsetText, wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sgEntry->Add(EditPatchOffset, wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + sgEntry->Add(EditPatchOffset, wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); sgEntry->Add(EditPatchValueText, wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); sgEntry->Add(EditPatchValue, wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); sgEntry->Add(EntrySelection, wxGBPosition(0, 2), wxGBSpan(3, 1), wxEXPAND|wxALL, 5); @@ -95,7 +95,7 @@ void CPatchAddEdit::ChangeEntry(wxSpinEvent& event) { if (!UpdateTempEntryData(itCurEntry)) return; - + itCurEntry = tempEntries.end() - event.GetPosition() - 1; currentItem = (int)tempEntries.size() - event.GetPosition(); UpdateEntryCtrls(*itCurEntry); @@ -147,9 +147,9 @@ void CPatchAddEdit::AddRemoveEntry(wxCommandEvent& event) } break; case ID_ENTRY_REMOVE: - { + { itCurEntry = tempEntries.erase(itCurEntry); - + if (itCurEntry != tempEntries.begin()) { --itCurEntry; @@ -159,8 +159,8 @@ void CPatchAddEdit::AddRemoveEntry(wxCommandEvent& event) { EntrySelection->SetValue(EntrySelection->GetValue() - 1); } - - EntrySelection->SetRange(EntrySelection->GetMin(), EntrySelection->GetMax() - 1); + + EntrySelection->SetRange(EntrySelection->GetMin(), EntrySelection->GetMax() - 1); UpdateEntryCtrls(*itCurEntry); if ((int)tempEntries.size() <= 1) @@ -193,7 +193,7 @@ bool CPatchAddEdit::UpdateTempEntryData(std::vector::it else parsed_ok = false; - PatchEngine::PatchType tempType = + PatchEngine::PatchType tempType = (*iterEntry).type = (PatchEngine::PatchType)EditPatchType->GetSelection(); if (EditPatchValue->GetValue().ToULong(&value, 16)) diff --git a/Source/Core/DolphinWX/Src/TASInputDlg.cpp b/Source/Core/DolphinWX/Src/TASInputDlg.cpp index 2bae92287b..8952725463 100644 --- a/Source/Core/DolphinWX/Src/TASInputDlg.cpp +++ b/Source/Core/DolphinWX/Src/TASInputDlg.cpp @@ -32,7 +32,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, A_turbo = B_turbo = X_turbo = Y_turbo = Z_turbo = L_turbo = R_turbo = START_turbo = DL_turbo = DR_turbo = DD_turbo = DU_turbo = false; xaxis = yaxis = c_xaxis = c_yaxis = 128; A_cont = B_cont = X_cont = Y_cont = Z_cont = L_cont = L_button_cont = R_cont = R_button_cont = START_cont = DL_cont = DR_cont = DD_cont = DU_cont = mstickx = msticky = cstickx = csticky = false; - + wxBoxSizer* const top_box = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* const bottom_box = new wxBoxSizer(wxHORIZONTAL); wxStaticBoxSizer* const main_box = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Main Stick")); @@ -66,7 +66,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, wxBoxSizer* const c_xslider_box = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* const c_yslider_box = new wxBoxSizer(wxVERTICAL); wxBoxSizer* const c_stick_box = new wxBoxSizer(wxVERTICAL); - + static_bitmap_c = new wxStaticBitmap(this, ID_C_STICK, TASInputDlg::CreateStickBitmap(128,128), wxDefaultPosition, wxDefaultSize); static_bitmap_c->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::OnMouseDownL, this); static_bitmap_c->Bind(wxEVT_MOTION, &TASInputDlg::OnMouseDownL, this); @@ -90,7 +90,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, c_box->Add(c_yslider_box); wxStaticBoxSizer* const shoulder_box = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Shoulder Buttons")); - + wx_l_s = new wxSlider(this, ID_L_SLIDER, 0, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE); wx_l_s->SetMinSize(wxSize(-1,100)); wx_l_t = new wxTextCtrl(this, ID_L_TEXT, wxT("0"), wxDefaultPosition, wxSize(40, 20)); @@ -99,7 +99,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, wx_r_s->SetMinSize(wxSize(-1,100)); wx_r_t = new wxTextCtrl(this, ID_R_TEXT, wxT("0"), wxDefaultPosition, wxSize(40, 20)); wx_r_t->SetMaxLength(3); - + shoulder_box->Add(wx_l_s, 0, wxALIGN_CENTER_VERTICAL); shoulder_box->Add(wx_l_t, 0, wxALIGN_CENTER_VERTICAL); shoulder_box->Add(wx_r_s, 0, wxALIGN_CENTER_VERTICAL); @@ -107,7 +107,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, wxStaticBoxSizer* const buttons_box = new wxStaticBoxSizer(wxVERTICAL, this, _("Buttons")); wxGridSizer* const buttons_grid = new wxGridSizer(4); - + wx_a_button = new wxCheckBox(this,ID_A,_T("A"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr); wx_a_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_a_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); @@ -132,7 +132,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, wx_start_button = new wxCheckBox(this,ID_START,_T("Start"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr); wx_start_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_start_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); - + buttons_grid->Add(wx_a_button,false); buttons_grid->Add(wx_b_button,false); buttons_grid->Add(wx_x_button,false); @@ -144,7 +144,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, buttons_grid->AddSpacer(5); wxGridSizer* const buttons_dpad = new wxGridSizer(3); - + wx_up_button = new wxCheckBox(this,ID_UP,_T("Up"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr); wx_up_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_up_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); @@ -157,7 +157,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, wx_left_button = new wxCheckBox(this,ID_LEFT,_T("Left"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr); wx_left_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_left_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); - + buttons_dpad->AddSpacer(20); buttons_dpad->Add(wx_up_button,false); buttons_dpad->AddSpacer(20); @@ -192,21 +192,21 @@ void TASInputDlg::ResetValues() { mainX = mainY = cX = cY = 128; lTrig = rTrig = 0; - + wx_mainX_s->SetValue(128); wx_mainY_s->SetValue(128); wx_cX_s->SetValue(128); wx_cY_s->SetValue(128); wx_l_s->SetValue(0); wx_r_s->SetValue(0); - + wx_mainX_t->SetValue(wxT("128")); wx_mainY_t->SetValue(wxT("128")); wx_cX_t->SetValue(wxT("128")); wx_cY_t->SetValue(wxT("128")); wx_l_t->SetValue(wxT("0")); wx_r_t->SetValue(wxT("0")); - + wx_up_button->SetValue(false); wx_down_button->SetValue(false); wx_left_button->SetValue(false); @@ -229,7 +229,7 @@ void TASInputDlg::GetKeyBoardInput(SPADStatus *PadStatus) mstickx = true; wx_mainX_t->SetValue(wxString::Format(wxT("%i"), mainX)); } - + else if(mstickx) { mstickx = false; @@ -308,7 +308,7 @@ void TASInputDlg::GetKeyBoardInput(SPADStatus *PadStatus) wx_left_button->SetValue(false); DL_cont = false; } - + if(((PadStatus->button & PAD_BUTTON_RIGHT) != 0)) { wx_right_button->SetValue(true); @@ -388,7 +388,7 @@ void TASInputDlg::GetKeyBoardInput(SPADStatus *PadStatus) wx_l_t->SetValue(wxT("0")); L_cont = false; } - + if(((PadStatus->triggerRight) != 0)) { if (PadStatus->triggerRight == 255) @@ -424,7 +424,7 @@ void TASInputDlg::GetKeyBoardInput(SPADStatus *PadStatus) wx_z_button->SetValue(false); Z_cont = false; } - + if(((PadStatus->button & PAD_BUTTON_START) != 0)) { wx_start_button->SetValue(true); @@ -454,7 +454,7 @@ void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID) { if (!IsShown()) return; - + //TODO:: Make this instant not when polled. GetKeyBoardInput(PadStatus); SetLandRTriggers(); @@ -485,7 +485,7 @@ void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID) PadStatus->button |= PAD_BUTTON_RIGHT; else PadStatus->button &= ~PAD_BUTTON_RIGHT; - + if(wx_a_button->IsChecked()) { PadStatus->button |= PAD_BUTTON_A; @@ -537,7 +537,7 @@ void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID) PadStatus->button |= PAD_TRIGGER_L; else PadStatus->button &= ~PAD_TRIGGER_L; - + ButtonTurbo(); } @@ -594,12 +594,12 @@ void TASInputDlg::UpdateFromSliders(wxCommandEvent& event) int value = ((wxSlider *) event.GetEventObject())->GetValue(); *v = (u8) value; text->SetValue(wxString::Format(wxT("%i"), value)); - + if(update == 1) { static_bitmap_main->SetBitmap(TASInputDlg::CreateStickBitmap(xaxis, yaxis)); } - + if(update == 2) { static_bitmap_c->SetBitmap(TASInputDlg::CreateStickBitmap(c_xaxis, c_yaxis)); @@ -612,7 +612,7 @@ void TASInputDlg::UpdateFromText(wxCommandEvent& event) u8 *v; update = 0; update_axis = 0; - + switch(event.GetId()) { case ID_MAIN_X_TEXT: @@ -639,7 +639,7 @@ void TASInputDlg::UpdateFromText(wxCommandEvent& event) case ID_C_Y_TEXT: slider = wx_cY_s; v = &cY; - update = 2; + update = 2; update_axis = 2; break; @@ -662,7 +662,7 @@ void TASInputDlg::UpdateFromText(wxCommandEvent& event) { *v = (u8) (value > 255 ? 255 : value); slider->SetValue(*v); - + if(update == 1) { if(update_axis == 1) @@ -670,13 +670,13 @@ void TASInputDlg::UpdateFromText(wxCommandEvent& event) xaxis = *v; static_bitmap_main->SetBitmap(TASInputDlg::CreateStickBitmap(xaxis,yaxis)); } - + if(update_axis == 2) { yaxis =256 - *v; static_bitmap_main->SetBitmap(TASInputDlg::CreateStickBitmap(xaxis,yaxis)); } - + } if(update == 2) @@ -686,13 +686,13 @@ void TASInputDlg::UpdateFromText(wxCommandEvent& event) c_xaxis = *v; static_bitmap_c->SetBitmap(TASInputDlg::CreateStickBitmap(c_xaxis,c_yaxis)); } - + if(update_axis == 2) { c_yaxis =256- *v; static_bitmap_c->SetBitmap(TASInputDlg::CreateStickBitmap(c_xaxis,c_yaxis)); } - + } } } @@ -708,7 +708,7 @@ void TASInputDlg::OnCloseWindow(wxCloseEvent& event) } bool TASInputDlg::TASHasFocus() -{ +{ //allows numbers to be used as hotkeys if(TextBoxHasFocus()) return false; @@ -782,10 +782,10 @@ void TASInputDlg::OnMouseUpR(wxMouseEvent& event) *y = 128; sbitmap->SetBitmap(TASInputDlg::CreateStickBitmap(*x,*y)); - + textX->SetValue(wxString::Format(wxT("%i"), *x)); textY->SetValue(wxString::Format(wxT("%i"), 256 - *y)); - + sliderX->SetValue(*x); sliderY->SetValue(256 - *y); event.Skip(true); @@ -828,21 +828,21 @@ void TASInputDlg::OnMouseDownL(wxMouseEvent& event) return; } - wxPoint ptM(event.GetPosition()); + wxPoint ptM(event.GetPosition()); *x = ptM.x *2; *y = ptM.y * 2; if(*x > 255) *x = 255; - + if(*y > 255) *y = 255; sbitmap->SetBitmap(TASInputDlg::CreateStickBitmap(*x,*y)); - + textX->SetValue(wxString::Format(wxT("%i"), *x)); textY->SetValue(wxString::Format(wxT("%i"), 256 - *y)); - + sliderX->SetValue(*x); sliderY->SetValue(256 - *y); event.Skip(true); @@ -915,7 +915,7 @@ void TASInputDlg::SetTurbo(wxMouseEvent& event) { case ID_A: placeholder = wx_a_button; - + if(A_turbo) A_turbo = false; else diff --git a/Source/Core/DolphinWX/Src/UDPConfigDiag.cpp b/Source/Core/DolphinWX/Src/UDPConfigDiag.cpp index 9619f38dee..3504ae5c85 100644 --- a/Source/Core/DolphinWX/Src/UDPConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/UDPConfigDiag.cpp @@ -45,7 +45,7 @@ UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) : point->SetValue(wrp->updIR); nun->SetValue(wrp->updNun); nunaccel->SetValue(wrp->updNunAccel); - + sizer1->Add(enable, 1, wxALL | wxEXPAND, 5); sizer1->Add(port_sizer, 1, wxBOTTOM | wxLEFT| wxRIGHT | wxEXPAND, 5); diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp index 7f6f1e0080..dc91670f4b 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp @@ -101,7 +101,7 @@ wxString wireframe_desc = wxTRANSLATE("Render the scene as a wireframe.\n\nIf un wxString disable_fog_desc = wxTRANSLATE("Makes distant objects more visible by removing fog, thus increasing the overall detail.\nDisabling fog will break some games which rely on proper fog emulation.\n\nIf unsure, leave this unchecked."); wxString disable_dstalpha_desc = wxTRANSLATE("Disables emulation of a hardware feature called destination alpha, which is used in many games for various graphical effects.\n\nIf unsure, leave this unchecked."); wxString show_fps_desc = wxTRANSLATE("Show the number of frames rendered per second as a measure of emulation speed.\n\nIf unsure, leave this unchecked."); -wxString log_fps_to_file_desc = wxTRANSLATE("Log the number of frames rendered per second to User/Logs/fps.txt. Use this feature when you want to measure the performance of Dolphin.\n\nIf unsure, leave this unchecked."); +wxString log_fps_to_file_desc = wxTRANSLATE("Log the number of frames rendered per second to User/Logs/fps.txt. Use this feature when you want to measure the performance of Dolphin.\n\nIf unsure, leave this unchecked."); wxString show_input_display_desc = wxTRANSLATE("Display the inputs read by the emulator.\n\nIf unsure, leave this unchecked."); wxString show_stats_desc = wxTRANSLATE("Show various statistics.\n\nIf unsure, leave this unchecked."); wxString texfmt_desc = wxTRANSLATE("Modify textures to show the format they're encoded in. Needs an emulation reset in most cases.\n\nIf unsure, leave this unchecked."); @@ -344,7 +344,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con // Internal resolution { const wxString efbscale_choices[] = { _("Auto (Window Size)"), _("Auto (Multiple of 640x528)"), - _("1x Native (640x528)"), _("1.5x Native (960x792)"), _("2x Native (1280x1056)"), + _("1x Native (640x528)"), _("1.5x Native (960x792)"), _("2x Native (1280x1056)"), _("2.5x Native (1600x1320)"), _("3x Native (1920x1584)"), _("4x Native (2560x2112)") }; wxChoice *const choice_efbscale = CreateChoice(page_enh, @@ -503,7 +503,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con szr_other->Add(CreateCheckBox(page_hacks, _("OpenMP Texture Decoder"), wxGetTranslation(omp_desc), vconfig.bOMPDecoder)); szr_other->Add(CreateCheckBox(page_hacks, _("Fast Depth Calculation"), wxGetTranslation(fast_depth_calc_desc), vconfig.bFastDepthCalc)); szr_other->Add(hacked_buffer_upload = CreateCheckBox(page_hacks, _("Vertex Streaming Hack"), wxGetTranslation(hacked_buffer_upload_desc), vconfig.bHackedBufferUpload)); - + wxStaticBoxSizer* const group_other = new wxStaticBoxSizer(wxVERTICAL, page_hacks, _("Other")); group_other->Add(szr_other, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5); szr_hacks->Add(group_other, 0, wxEXPAND | wxALL, 5); diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.h b/Source/Core/DolphinWX/Src/VideoConfigDiag.h index 563f5076d6..a1b3b59e12 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.h +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.h @@ -166,7 +166,7 @@ protected: // XFB virtual_xfb->Enable(vconfig.bUseXFB); real_xfb->Enable(vconfig.bUseXFB); - + // OGL Hacked buffer hacked_buffer_upload->Enable(Core::GetState() == Core::CORE_UNINITIALIZED && vconfig.backend_info.APIType == API_OPENGL); hacked_buffer_upload->Show(vconfig.backend_info.APIType == API_OPENGL); diff --git a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp index 06b839b960..5e145ec391 100644 --- a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp @@ -3,6 +3,7 @@ #include "HW/Wiimote.h" #include "HW/WiimoteReal/WiimoteReal.h" #include "Frame.h" +#include "NetPlayProto.h" WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin) : wxDialog(parent, -1, _("Dolphin Wiimote Configuration"), wxDefaultPosition, wxDefaultSize) @@ -54,8 +55,8 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin wiimote_sizer->Add(wiimote_configure_bt[i]); } wiimote_group->Add(wiimote_sizer, 1, wxEXPAND, 5 ); - - + + // "BalanceBoard" layout wxStaticBoxSizer* const bb_group = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Balance Board")); wxFlexGridSizer* const bb_sizer = new wxFlexGridSizer(1, 5, 5); @@ -64,27 +65,27 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin const wxString src_choices[] = { _("None"), _("Real Balance Board") }; wxChoice* bb_source = new wxChoice(this, source_ctrl_id, wxDefaultPosition, wxDefaultSize, sizeof(src_choices)/sizeof(*src_choices), src_choices); bb_source->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &WiimoteConfigDiag::SelectSource, this); - + m_orig_wiimote_sources[WIIMOTE_BALANCE_BOARD] = g_wiimote_sources[WIIMOTE_BALANCE_BOARD]; bb_source->Select(m_orig_wiimote_sources[WIIMOTE_BALANCE_BOARD] ? 1 : 0); - + bb_sizer->Add(bb_source, 0, wxALIGN_CENTER_VERTICAL); - + bb_group->Add(bb_sizer, 1, wxEXPAND, 5 ); - + // "Real wiimotes" controls wxButton* const refresh_btn = new wxButton(this, -1, _("Refresh"), wxDefaultPosition); refresh_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &WiimoteConfigDiag::RefreshRealWiimotes, this); wxStaticBoxSizer* const real_wiimotes_group = new wxStaticBoxSizer(wxVERTICAL, this, _("Real Wiimotes")); - + wxBoxSizer* const real_wiimotes_sizer = new wxBoxSizer(wxHORIZONTAL); - + if (!WiimoteReal::g_wiimote_scanner.IsReady()) real_wiimotes_group->Add(new wxStaticText(this, -1, _("A supported bluetooth device could not be found.\n" "You must manually connect your wiimotes.")), 0, wxALIGN_CENTER | wxALL, 5); - + wxCheckBox* const continuous_scanning = new wxCheckBox(this, wxID_ANY, _("Continuous Scanning")); continuous_scanning->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &WiimoteConfigDiag::OnContinuousScanning, this); continuous_scanning->SetValue(SConfig::GetInstance().m_WiimoteContinuousScanning); @@ -92,7 +93,7 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin auto wiimote_speaker = new wxCheckBox(this, wxID_ANY, _("Enable Speaker Data")); wiimote_speaker->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &WiimoteConfigDiag::OnEnableSpeaker, this); wiimote_speaker->SetValue(SConfig::GetInstance().m_WiimoteEnableSpeaker); - + real_wiimotes_sizer->Add(continuous_scanning, 0, wxALIGN_CENTER_VERTICAL); real_wiimotes_sizer->AddStretchSpacer(1); real_wiimotes_sizer->Add(refresh_btn, 0, wxALL | wxALIGN_CENTER, 5); @@ -134,6 +135,16 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin WiimoteSpkVolumeText->Disable(); WiimoteSpkVolumeMinText->Disable(); WiimoteSpkVolumeMaxText->Disable(); + if (NetPlay::IsNetPlayRunning()) + { + bb_source->Disable(); + for (int i = 0; i < 4; ++i) + { + wiimote_label[i]->Disable(); + wiimote_source_ch[i]->Disable(); + } + } + } @@ -209,7 +220,7 @@ void WiimoteConfigDiag::SelectSource(wxCommandEvent& event) // This needs to be changed now in order for refresh to work right. // Revert if the dialog is canceled. int index = m_wiimote_index_from_ctrl_id[event.GetId()]; - + if(index != WIIMOTE_BALANCE_BOARD) { WiimoteReal::ChangeWiimoteSource(index, event.GetInt()); @@ -220,7 +231,7 @@ void WiimoteConfigDiag::SelectSource(wxCommandEvent& event) } else { - WiimoteReal::ChangeWiimoteSource(index, event.GetInt() ? WIIMOTE_SRC_REAL : WIIMOTE_SRC_NONE); + WiimoteReal::ChangeWiimoteSource(index, event.GetInt() ? WIIMOTE_SRC_REAL : WIIMOTE_SRC_NONE); } } @@ -245,7 +256,7 @@ void WiimoteConfigDiag::Save(wxCommandEvent& event) sec.Set("Source", (int)g_wiimote_sources[i]); } - + std::string secname("BalanceBoard"); IniFile::Section& sec = *inifile.GetOrCreateSection(secname.c_str()); sec.Set("Source", (int)g_wiimote_sources[WIIMOTE_BALANCE_BOARD]); diff --git a/Source/Core/DolphinWX/Src/X11Utils.cpp b/Source/Core/DolphinWX/Src/X11Utils.cpp index 9c509add91..71f0e43a2d 100644 --- a/Source/Core/DolphinWX/Src/X11Utils.cpp +++ b/Source/Core/DolphinWX/Src/X11Utils.cpp @@ -166,7 +166,7 @@ void XRRConfiguration::Update() { if(SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution == "Auto") return; - + if (!bValid) return; diff --git a/Source/Core/DolphinWX/resource.h b/Source/Core/DolphinWX/resource.h index 2032a4efd9..bd0d18386d 100644 --- a/Source/Core/DolphinWX/resource.h +++ b/Source/Core/DolphinWX/resource.h @@ -5,7 +5,7 @@ #define IDI_ICON1 101 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 diff --git a/Source/Core/DolphinWX/resources/dolphin_logo.cpp b/Source/Core/DolphinWX/resources/dolphin_logo.cpp index a78ca0fb95..2514e4ae37 100644 --- a/Source/Core/DolphinWX/resources/dolphin_logo.cpp +++ b/Source/Core/DolphinWX/resources/dolphin_logo.cpp @@ -1,2868 +1,2868 @@ static const unsigned char dolphin_logo_png[] = { -0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, -0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x76, -0x08, 0x02, 0x00, 0x00, 0x00, 0xec, 0xb7, 0xca, 0x94, 0x00, 0x00, 0x00, -0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, -0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, -0x61, 0x05, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, -0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, -0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, -0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, -0x85, 0xcd, 0x49, 0x44, 0x41, 0x54, 0x78, 0x5e, 0xed, 0x9d, 0x07, 0x98, -0x14, 0x55, 0xb6, 0xc7, 0x7b, 0x62, 0x4f, 0x1e, 0x18, 0x26, 0x90, 0xd3, -0x30, 0xe4, 0xcc, 0x90, 0xe3, 0x90, 0x73, 0x8e, 0x22, 0x41, 0x92, 0x82, -0x48, 0x14, 0x15, 0x45, 0x24, 0x89, 0xc0, 0xc0, 0x90, 0x83, 0x04, 0x45, -0x50, 0x11, 0x31, 0x60, 0xc0, 0xac, 0x6b, 0x5c, 0x73, 0x5a, 0xd3, 0xa6, -0xf7, 0x36, 0xb9, 0xcf, 0x4d, 0xba, 0xee, 0xae, 0xae, 0xab, 0xee, 0x2e, -0xef, 0xd7, 0x1c, 0xbc, 0x73, 0xa7, 0xaa, 0xba, 0xbb, 0x3a, 0x4c, 0xe8, -0x50, 0xdf, 0xc0, 0xd7, 0xd3, 0x53, 0x75, 0xeb, 0xd6, 0xad, 0xf3, 0xbf, -0x27, 0x9f, 0x13, 0x13, 0x17, 0x17, 0x97, 0x9e, 0x9e, 0xfe, 0xed, 0xb7, -0xdf, 0xc6, 0xc4, 0xc4, 0x38, 0xac, 0x8e, 0xf3, 0xe7, 0xcf, 0x5b, 0x7e, -0x1f, 0xfd, 0x32, 0xba, 0x02, 0xa1, 0xbb, 0x02, 0x96, 0xd4, 0x0e, 0xa9, -0x3b, 0x9d, 0xce, 0x7f, 0xfc, 0xe3, 0x1f, 0x8e, 0xcc, 0xcc, 0xcc, 0x7d, -0xfb, 0xf6, 0xdd, 0x7b, 0xef, 0xbd, 0xa7, 0x4c, 0xc7, 0xdd, 0x17, 0x8e, -0xbb, 0x2e, 0x1c, 0x77, 0xde, 0x79, 0xe7, 0xc9, 0x0b, 0xc7, 0x89, 0x0b, -0xc7, 0x1d, 0x6e, 0x8e, 0xe3, 0xc7, 0x8f, 0xab, 0xbf, 0xf0, 0xd9, 0xeb, -0x71, 0x7b, 0x39, 0x1f, 0xb7, 0xd9, 0x3e, 0x8e, 0x95, 0xc3, 0x71, 0xf4, -0xe8, 0x51, 0x46, 0xe5, 0x7f, 0x9f, 0x8e, 0x23, 0x47, 0x8e, 0xf8, 0x74, -0xbe, 0xdc, 0x25, 0xe8, 0x87, 0xed, 0x95, 0xbb, 0x8d, 0x77, 0xc8, 0xc9, -0xe5, 0xf1, 0x26, 0xa1, 0x1f, 0x86, 0xf5, 0x4a, 0x45, 0x3a, 0xd5, 0x99, -0x09, 0x53, 0x28, 0x56, 0xa8, 0x17, 0x32, 0x16, 0x7a, 0x16, 0xda, 0x36, -0x90, 0x3c, 0x28, 0x00, 0x0b, 0x20, 0xc2, 0x91, 0x92, 0x92, 0xc2, 0x9f, -0x41, 0x89, 0x7e, 0xfc, 0xf7, 0xc2, 0xf1, 0x9f, 0x0b, 0xc7, 0xbf, 0xff, -0xfd, 0xef, 0xef, 0xbf, 0xff, 0x1e, 0x66, 0xf2, 0xcd, 0x37, 0xdf, 0xfc, -0xf3, 0x9f, 0xff, 0xfc, 0xfa, 0xeb, 0xaf, 0xbf, 0xfa, 0xea, 0x2b, 0xf0, -0xc4, 0xf1, 0x77, 0xd3, 0xf1, 0xb7, 0xbf, 0xfd, 0x4d, 0x7d, 0xc7, 0x67, -0xcb, 0xe3, 0x4b, 0x1b, 0xc7, 0x5f, 0x6d, 0x1c, 0x5f, 0xd8, 0x38, 0x3e, -0xb7, 0x71, 0xfc, 0xc5, 0x74, 0xfc, 0xf9, 0xcf, 0x7f, 0xd6, 0xbf, 0xe3, -0x57, 0x3b, 0xc7, 0x9f, 0x4c, 0xc7, 0x1f, 0xff, 0xf8, 0x47, 0xf5, 0x1d, -0x9f, 0x2d, 0x8f, 0x3f, 0xfc, 0xe1, 0x0f, 0x86, 0xef, 0xcd, 0xdf, 0x58, -0x5e, 0x68, 0xbe, 0x9d, 0xf9, 0x1b, 0x3b, 0xd3, 0x36, 0x3f, 0xbe, 0x7c, -0xa3, 0x56, 0x4e, 0xff, 0xac, 0x2f, 0xa7, 0xbe, 0xfc, 0x7c, 0xef, 0xee, -0x6d, 0xa8, 0x37, 0xc9, 0x09, 0xee, 0xde, 0xaa, 0xa2, 0x08, 0x4e, 0xb0, -0xa4, 0x0e, 0x77, 0xb4, 0xa4, 0xbe, 0x37, 0x93, 0x22, 0xdf, 0x40, 0xa2, -0xd0, 0x2a, 0x07, 0x44, 0x0b, 0xe9, 0xfe, 0xeb, 0x5f, 0xff, 0x82, 0x8c, -0xbf, 0xfb, 0xee, 0x3b, 0xe8, 0x19, 0xaa, 0x86, 0xb6, 0x85, 0xce, 0x75, -0xca, 0x07, 0x0b, 0x20, 0xc2, 0x02, 0x15, 0x82, 0x07, 0x01, 0x03, 0x43, -0x08, 0x1e, 0x18, 0x97, 0x7b, 0x30, 0x09, 0x79, 0x30, 0x59, 0x1d, 0x77, -0xf4, 0xe4, 0xee, 0x65, 0x78, 0x78, 0x91, 0xee, 0x88, 0x86, 0xef, 0x85, -0x4a, 0xf8, 0xdf, 0xf2, 0xf8, 0xcc, 0xdb, 0xf1, 0x7f, 0xee, 0x8f, 0xdf, -0xff, 0xfe, 0xf7, 0xfc, 0x91, 0xff, 0x0d, 0xc7, 0xa7, 0x9f, 0x7e, 0xca, -0x37, 0xfc, 0xef, 0xe1, 0xf8, 0x9d, 0xc7, 0xe3, 0xb7, 0xa6, 0xe3, 0x37, -0xbf, 0xf9, 0x0d, 0xdf, 0xf1, 0x7f, 0xe0, 0x87, 0x79, 0x70, 0xf9, 0xc6, -0xf3, 0x94, 0x3c, 0x3f, 0x8e, 0xfc, 0xd5, 0xbc, 0x14, 0xb2, 0x3e, 0x96, -0x4b, 0xe8, 0x6d, 0xe1, 0x3f, 0xe3, 0x7d, 0x71, 0x8e, 0xbb, 0x17, 0xa7, -0xde, 0xac, 0x4f, 0x98, 0x77, 0x47, 0x5a, 0x90, 0xa2, 0xfa, 0x93, 0x22, -0x4b, 0xc1, 0xaa, 0x20, 0x4d, 0x40, 0x02, 0x19, 0x43, 0xcc, 0xc0, 0xc3, -0x80, 0x0d, 0x05, 0x0c, 0x6b, 0x54, 0xe8, 0x90, 0x30, 0xe3, 0x81, 0xfb, -0x41, 0xd9, 0x3c, 0x86, 0xac, 0x88, 0x2c, 0x96, 0x79, 0x29, 0xe5, 0x1b, -0xb5, 0xca, 0xe6, 0xf7, 0x61, 0xf9, 0xfe, 0xdc, 0xbd, 0x6c, 0xa1, 0x27, -0x77, 0x24, 0xf5, 0x6b, 0x37, 0xc7, 0xaf, 0x7e, 0xf5, 0x2b, 0xf9, 0x0b, -0x1f, 0xcc, 0xc7, 0xff, 0x9a, 0x8e, 0xff, 0x71, 0x73, 0xfc, 0xf2, 0x97, -0xbf, 0x94, 0xbf, 0xf0, 0xc1, 0x7c, 0xfc, 0xc2, 0xcd, 0xf1, 0x73, 0xd3, -0xf1, 0xb3, 0x9f, 0xfd, 0x4c, 0xbe, 0xe3, 0x83, 0xf9, 0xf8, 0xe9, 0x0f, -0x87, 0xe5, 0x5f, 0x0d, 0x5f, 0x9a, 0x07, 0xb7, 0x9c, 0x85, 0xcc, 0x96, -0x3f, 0x59, 0xce, 0x5c, 0x3d, 0x97, 0xe1, 0xb9, 0x65, 0x61, 0xf8, 0xd2, -0xbc, 0x44, 0x96, 0x2b, 0xa9, 0xd6, 0xd9, 0xf0, 0x1e, 0x04, 0xfc, 0x7c, -0xe9, 0x6e, 0x17, 0xb0, 0x7c, 0xdd, 0x42, 0x18, 0x3a, 0xc2, 0x85, 0x78, -0xf8, 0xd2, 0x1d, 0xaa, 0x2d, 0xc9, 0x4f, 0xc1, 0x58, 0xb6, 0x54, 0x00, -0x03, 0x42, 0x04, 0x1e, 0x0a, 0x1b, 0xc2, 0x37, 0x14, 0xd3, 0x10, 0x60, -0x58, 0xa0, 0x42, 0x41, 0x82, 0xb3, 0x85, 0x3f, 0x80, 0x30, 0xc6, 0x02, -0x0c, 0xcf, 0x3c, 0xf3, 0xcc, 0x8a, 0x15, 0x2b, 0x7a, 0xf4, 0xe8, 0x91, -0x9b, 0x9b, 0x1b, 0x1b, 0x1b, 0x1b, 0xba, 0x6a, 0x56, 0x74, 0xe6, 0x91, -0xb3, 0x02, 0x10, 0x6a, 0x76, 0x76, 0x36, 0x44, 0xbb, 0x7c, 0xf9, 0xf2, -0xc7, 0x1f, 0x7f, 0x1c, 0xa8, 0x80, 0x10, 0x88, 0x19, 0x06, 0x82, 0xd4, -0x83, 0x64, 0x05, 0x91, 0x0b, 0xd3, 0x10, 0x69, 0xca, 0x02, 0x15, 0x06, -0x48, 0x00, 0x29, 0x80, 0xc5, 0x10, 0xf7, 0xdd, 0x77, 0x5f, 0x9f, 0x3e, -0x7d, 0x22, 0x67, 0x29, 0xa3, 0x4f, 0x1a, 0xae, 0x2b, 0xd0, 0xbb, 0x77, -0x6f, 0xd4, 0x6b, 0x78, 0x0e, 0x62, 0x0e, 0x84, 0x0d, 0x79, 0x2b, 0x60, -0x28, 0x8e, 0x51, 0x86, 0x57, 0x18, 0x20, 0x01, 0x8b, 0x80, 0xe3, 0xc0, -0x7d, 0xe6, 0xce, 0x9d, 0xcb, 0x1a, 0x0d, 0x1c, 0x38, 0x30, 0x5c, 0x57, -0x2a, 0xfa, 0x5c, 0x91, 0xb6, 0x02, 0xb3, 0x67, 0xcf, 0x46, 0x3e, 0x44, -0x24, 0x83, 0x6f, 0xc0, 0x34, 0xd8, 0xfd, 0x85, 0x63, 0x08, 0x30, 0x30, -0x4f, 0x95, 0x6a, 0xdb, 0xa0, 0x42, 0xd4, 0x6b, 0xce, 0xe0, 0x3c, 0x20, -0x81, 0xbc, 0xd8, 0xaf, 0x5f, 0xbf, 0xac, 0xac, 0xac, 0x48, 0x5b, 0xb5, -0xe8, 0xf3, 0x86, 0xfd, 0x0a, 0xc0, 0x34, 0x3e, 0xf8, 0xe0, 0x03, 0x14, -0x1e, 0xf6, 0x7d, 0x14, 0x04, 0x38, 0x86, 0xe8, 0xdf, 0x40, 0x00, 0xd3, -0x6d, 0x72, 0x72, 0xb2, 0xcb, 0x06, 0x05, 0x3e, 0x40, 0x89, 0x98, 0x5f, -0xd1, 0x25, 0xe0, 0x2c, 0x9c, 0x5d, 0x54, 0x54, 0x34, 0x69, 0xd2, 0xa4, -0x32, 0x0b, 0x54, 0x30, 0xc8, 0x31, 0xe1, 0x88, 0x63, 0xe5, 0x27, 0x8e, -0x4d, 0xdf, 0x38, 0x36, 0xff, 0xdb, 0xb1, 0xe5, 0xbf, 0xe5, 0xf9, 0xf3, -0x1f, 0xc7, 0x16, 0x6e, 0x21, 0x3f, 0x7c, 0xe6, 0xc7, 0xb7, 0xdb, 0xc5, -0x6c, 0xf9, 0x6f, 0xcc, 0x96, 0xff, 0xc4, 0x6e, 0xf9, 0x0f, 0xff, 0xcb, -0x4f, 0xec, 0x56, 0x7e, 0xfe, 0x1d, 0x1b, 0xc0, 0x98, 0xbe, 0xce, 0xc1, -0xe3, 0xf9, 0xf2, 0x50, 0xea, 0xd1, 0x64, 0x92, 0x17, 0x9f, 0x51, 0x26, -0x1f, 0xd4, 0xdb, 0xf9, 0xb6, 0x7a, 0x61, 0x72, 0x6b, 0x08, 0x15, 0x72, -0x85, 0x68, 0x21, 0xdd, 0xb2, 0x47, 0xcf, 0x9e, 0x3d, 0x31, 0x5a, 0xa0, -0xd6, 0xa3, 0x88, 0x43, 0xf0, 0xd8, 0x6d, 0x21, 0x7e, 0x20, 0x60, 0x44, -0x85, 0x68, 0xd8, 0xc8, 0x4e, 0x88, 0x5c, 0xf3, 0xe6, 0xcd, 0x73, 0xf9, -0x32, 0x7e, 0x38, 0x12, 0x72, 0xf2, 0x1d, 0xb3, 0x1f, 0xad, 0xd8, 0x95, -0x12, 0x72, 0x09, 0x04, 0x15, 0x2e, 0x3a, 0x2b, 0x3b, 0x67, 0x9d, 0x0a, -0xab, 0x02, 0x95, 0x18, 0xd0, 0x5e, 0x8a, 0x0a, 0xa6, 0xad, 0x10, 0x52, -0xb1, 0xcb, 0x5e, 0x15, 0x96, 0xa5, 0x7c, 0xe6, 0x30, 0xfb, 0xd1, 0x78, -0xc8, 0x58, 0x3b, 0x2e, 0xbd, 0xf4, 0x52, 0x0c, 0x71, 0xa8, 0xe0, 0x10, -0xbc, 0x92, 0xa3, 0x2e, 0xa2, 0x02, 0x7e, 0xc1, 0x27, 0x78, 0x87, 0x30, -0x0a, 0x18, 0x0a, 0xea, 0xb5, 0x7e, 0x71, 0x52, 0x93, 0x5e, 0x8e, 0x9b, -0xbe, 0xa8, 0x8c, 0x77, 0x63, 0xd8, 0x4d, 0xcb, 0x67, 0xb1, 0x7c, 0x64, -0x41, 0xc1, 0x5e, 0x87, 0x32, 0xb8, 0x8d, 0x22, 0x21, 0xd8, 0xcb, 0x5b, -0x96, 0x66, 0x6e, 0xfa, 0xc2, 0x99, 0xdf, 0x4b, 0xa7, 0x6d, 0x9c, 0xe2, -0xb0, 0x0b, 0x14, 0x0c, 0xd8, 0x05, 0xc4, 0x0f, 0x04, 0xf0, 0x7f, 0xbb, -0x24, 0x28, 0x41, 0x85, 0xd2, 0x28, 0xc0, 0x4d, 0xdf, 0xbe, 0x7d, 0x1b, -0x34, 0x68, 0x20, 0x17, 0xbb, 0xb8, 0x44, 0xe5, 0x40, 0x82, 0xe7, 0x11, -0x8a, 0xf1, 0x47, 0x7c, 0x2a, 0xdf, 0xc5, 0xad, 0x64, 0x20, 0x85, 0xe5, -0xee, 0x50, 0x51, 0x0f, 0x75, 0xd3, 0x17, 0x3a, 0xc7, 0xe8, 0xde, 0xbd, -0x3b, 0x6e, 0x19, 0xd8, 0x85, 0x52, 0xbb, 0x89, 0x0d, 0xb9, 0x88, 0x0a, -0xf0, 0x21, 0x8c, 0x02, 0x23, 0xee, 0xd3, 0x4f, 0x3f, 0x5d, 0x46, 0x00, -0xab, 0x68, 0xc1, 0xc9, 0x72, 0x75, 0xa2, 0x12, 0x76, 0x45, 0x11, 0x4d, -0x24, 0x00, 0x1e, 0x92, 0xd6, 0x8e, 0xb3, 0x67, 0xcf, 0x62, 0x8f, 0x42, -0xbb, 0x80, 0xf8, 0x81, 0x00, 0x61, 0x54, 0x17, 0x51, 0x01, 0x3e, 0xc4, -0xf4, 0x84, 0xf8, 0xb4, 0x72, 0xe5, 0xca, 0xd2, 0x4b, 0xd0, 0x51, 0x42, -0x69, 0x99, 0xa2, 0xe0, 0x89, 0x82, 0xc7, 0xde, 0x0a, 0x68, 0xca, 0xf7, -0xa2, 0x45, 0x8b, 0x70, 0xc0, 0x2b, 0x2b, 0x2d, 0x32, 0x55, 0x29, 0x2a, -0xd0, 0xc1, 0xc1, 0x0a, 0xe2, 0x13, 0xba, 0x79, 0x29, 0x2a, 0x50, 0xde, -0x43, 0x09, 0x15, 0xf6, 0x56, 0x24, 0xfa, 0x44, 0xd1, 0x15, 0x80, 0xb0, -0x7f, 0x38, 0x3a, 0x77, 0xee, 0x8c, 0xfb, 0x42, 0x74, 0x6e, 0x4c, 0x4d, -0xa5, 0xa8, 0x80, 0x6b, 0x88, 0x9e, 0x4d, 0x8c, 0x53, 0x4e, 0x4e, 0x4e, -0x29, 0x2a, 0xb0, 0x6a, 0x45, 0x57, 0x30, 0xba, 0x02, 0xe1, 0xb7, 0x02, -0x10, 0xf6, 0x0f, 0x07, 0x21, 0x21, 0x98, 0x68, 0x11, 0xa2, 0x20, 0x7e, -0x74, 0x6e, 0x42, 0xe2, 0x2f, 0xf2, 0x0a, 0xf0, 0x81, 0x23, 0x03, 0x85, -0x03, 0x3e, 0x52, 0x26, 0xc6, 0x09, 0x73, 0x6f, 0xf8, 0xad, 0x48, 0xf4, -0x89, 0xa2, 0x2b, 0x00, 0x61, 0xff, 0x70, 0x40, 0xf0, 0x44, 0x66, 0x8a, -0x25, 0x0a, 0xc6, 0x50, 0x06, 0x15, 0xe2, 0xcf, 0x26, 0x3e, 0xa4, 0x8c, -0xaa, 0x1d, 0x5d, 0xbe, 0xe8, 0x0a, 0x84, 0xe5, 0x0a, 0xe0, 0x83, 0xd6, -0x8e, 0x4f, 0x3e, 0xf9, 0x04, 0xd5, 0x02, 0xe2, 0x87, 0x31, 0x44, 0x51, -0x11, 0xd5, 0x43, 0x22, 0x78, 0x05, 0x34, 0x54, 0x7c, 0xfc, 0xf1, 0xc7, -0xd6, 0xa8, 0x10, 0x97, 0x36, 0x3a, 0x47, 0x94, 0x57, 0x44, 0x85, 0xc6, -0x88, 0x58, 0x01, 0x8d, 0xd0, 0x3f, 0xfa, 0xe8, 0x23, 0xa2, 0xfe, 0x20, -0x7e, 0xc4, 0x25, 0x12, 0x7d, 0x4b, 0xf5, 0x8a, 0x28, 0x2a, 0x22, 0x82, -0x14, 0xc2, 0x52, 0x1c, 0xf2, 0xef, 0xa1, 0xec, 0xa3, 0x82, 0xb4, 0xa6, -0x28, 0xaf, 0x88, 0xc2, 0x23, 0x22, 0x56, 0x20, 0x8a, 0x8a, 0x88, 0x78, -0xcd, 0xfe, 0x6d, 0x99, 0x11, 0x7b, 0x55, 0x14, 0x15, 0x21, 0x87, 0x8a, -0xa4, 0x6d, 0xdf, 0xe5, 0xed, 0xf8, 0x47, 0xfe, 0xce, 0xcf, 0x5b, 0xee, -0xfc, 0xac, 0x5d, 0xc9, 0x6f, 0x46, 0x6e, 0x3c, 0x5d, 0x74, 0xed, 0xb1, -0x76, 0x57, 0xec, 0x6e, 0x3c, 0x73, 0x6b, 0xdb, 0xcb, 0x77, 0xf7, 0xbf, -0xe6, 0xe8, 0x98, 0xe2, 0x73, 0xfc, 0x35, 0xe4, 0x9e, 0xab, 0x0a, 0x4d, -0x58, 0x43, 0xc5, 0x87, 0x1f, 0x7e, 0x28, 0xd1, 0x50, 0xd6, 0x7a, 0x45, -0x54, 0x82, 0xaa, 0x94, 0xd7, 0x96, 0xbd, 0xfd, 0xeb, 0x56, 0x25, 0x9f, -0x8e, 0xdc, 0x74, 0xa6, 0xdf, 0xc2, 0xcd, 0x1d, 0x47, 0xce, 0x6a, 0xd4, -0xa6, 0x73, 0x66, 0xcd, 0xc6, 0xce, 0xcc, 0x3c, 0x67, 0x7a, 0x96, 0x33, -0xbd, 0x86, 0x33, 0xad, 0x46, 0x62, 0x52, 0x7a, 0x62, 0x52, 0x9a, 0xfe, -0xe3, 0x4c, 0xad, 0x96, 0xde, 0xb0, 0x43, 0xcf, 0x79, 0x1b, 0xda, 0xee, -0xfe, 0x2c, 0x67, 0xc7, 0x3f, 0x2b, 0x65, 0xda, 0xa1, 0x7d, 0x53, 0xaf, -0xbc, 0x82, 0x42, 0x54, 0x84, 0x7b, 0x10, 0x20, 0x15, 0x45, 0x45, 0x05, -0xbf, 0x69, 0xf6, 0xfb, 0xa1, 0xab, 0x8f, 0xd6, 0xef, 0x50, 0xe4, 0x88, -0x4b, 0x8a, 0x8b, 0x89, 0x4b, 0x75, 0x26, 0x55, 0x4f, 0x4d, 0xcd, 0xcd, -0xcc, 0xa8, 0x59, 0x3d, 0xb3, 0x65, 0x7e, 0xe3, 0x3e, 0xdd, 0xba, 0xf6, -0xec, 0x5c, 0xd8, 0xbf, 0x57, 0xcf, 0x99, 0xd3, 0xa6, 0x5e, 0x36, 0xe3, -0xd2, 0x39, 0xda, 0xcf, 0x88, 0x41, 0x83, 0xb2, 0x33, 0xd2, 0x12, 0x1c, -0x8e, 0xd8, 0xe4, 0x8c, 0x66, 0x43, 0x66, 0x8d, 0xdd, 0xf9, 0x74, 0x93, -0xdd, 0x5f, 0x56, 0xf0, 0xe4, 0x43, 0xfb, 0x76, 0x5e, 0x51, 0x81, 0x6f, -0x1b, 0x1b, 0x54, 0x14, 0x15, 0x15, 0xf6, 0x9a, 0xb3, 0x77, 0x7c, 0xdd, -0x66, 0xd7, 0xff, 0xf5, 0x59, 0xbc, 0x23, 0x31, 0xaf, 0x80, 0xb7, 0x93, -0x93, 0x99, 0xd1, 0xbd, 0xb0, 0x70, 0xce, 0xcc, 0x99, 0xc5, 0x5b, 0xb6, -0x3c, 0xfa, 0xc8, 0x23, 0xd4, 0xaa, 0x81, 0xa1, 0x4b, 0x45, 0x19, 0x55, -0xf5, 0x47, 0x2f, 0xfd, 0x22, 0xb5, 0x61, 0x5e, 0x7d, 0xf5, 0xd5, 0xe5, -0x4b, 0x97, 0xb6, 0x6d, 0xde, 0x3c, 0x35, 0x01, 0x74, 0xc4, 0xa5, 0x34, -0xea, 0x58, 0xb4, 0x62, 0x5f, 0xc1, 0x9e, 0xbf, 0x55, 0xd8, 0x53, 0x84, -0xf6, 0x8d, 0xa2, 0xa8, 0xa8, 0x3a, 0xef, 0xaf, 0xf1, 0xce, 0xcf, 0x47, -0x6f, 0x7f, 0xa2, 0xdd, 0xa5, 0x37, 0x26, 0x64, 0xd6, 0xe2, 0xbd, 0x34, -0xa8, 0x95, 0x37, 0x7d, 0xca, 0x94, 0xfb, 0xcf, 0x9c, 0x81, 0xd0, 0xa5, -0x18, 0x99, 0xd4, 0x2f, 0x92, 0x72, 0x72, 0x52, 0xf6, 0xcb, 0xb2, 0x74, -0x9f, 0x14, 0x05, 0xe3, 0x1c, 0xb2, 0xc9, 0x6e, 0x3d, 0x78, 0x70, 0xcc, -0x88, 0x61, 0xb5, 0xb3, 0x5c, 0xb9, 0x93, 0x69, 0xf9, 0x9d, 0x07, 0xaf, -0x39, 0xd9, 0x34, 0x8a, 0x0d, 0xaf, 0x56, 0x04, 0x9b, 0x7a, 0x45, 0x94, -0x57, 0x94, 0x37, 0x78, 0x90, 0x97, 0x7a, 0x2f, 0xda, 0xe6, 0xac, 0x56, -0x93, 0x37, 0xd2, 0xb8, 0x4e, 0xad, 0x15, 0x4b, 0x97, 0x3c, 0xf9, 0xc4, -0x13, 0x52, 0xa4, 0x48, 0xca, 0x78, 0xa9, 0x42, 0x77, 0x52, 0x28, 0x52, -0xaa, 0x44, 0x4a, 0xf1, 0x52, 0xf3, 0xc1, 0x9f, 0xa4, 0x94, 0x23, 0x57, -0x71, 0xf9, 0x13, 0x8f, 0x3f, 0x3e, 0x77, 0xd6, 0xac, 0xcc, 0x24, 0x17, -0xdf, 0xc8, 0xe9, 0x36, 0x7e, 0xc8, 0xe6, 0x87, 0x0a, 0xf6, 0x44, 0x65, -0x2a, 0xf7, 0xce, 0x7b, 0xaf, 0xa8, 0x50, 0x7a, 0x05, 0xa5, 0x72, 0xa2, -0xfe, 0x8a, 0xf2, 0xc0, 0x46, 0xe3, 0x92, 0xbf, 0x0c, 0xb8, 0xf1, 0xee, -0x8c, 0x26, 0x1d, 0x59, 0xde, 0x3a, 0x35, 0xaa, 0x6d, 0xde, 0xb8, 0x01, -0xf9, 0x07, 0x3c, 0x40, 0xcd, 0x90, 0x35, 0xc4, 0x2d, 0x05, 0xed, 0x88, -0xe7, 0x97, 0x7a, 0x8f, 0xfa, 0x41, 0x42, 0x98, 0xe5, 0xc1, 0x39, 0xaa, -0xf2, 0xaf, 0x14, 0x3b, 0x65, 0xb4, 0x87, 0x1f, 0x7e, 0x78, 0x58, 0xff, -0x7e, 0xdc, 0x25, 0x21, 0x35, 0xab, 0xd7, 0xac, 0xd5, 0x51, 0x81, 0xca, -0xed, 0xdb, 0xb4, 0x8f, 0x8a, 0xa8, 0xb6, 0x5d, 0x1e, 0x90, 0x80, 0x45, -0xf4, 0xba, 0x62, 0xb3, 0x33, 0x3d, 0x9b, 0x17, 0x31, 0x79, 0xdc, 0xd8, -0x97, 0x5e, 0x7a, 0x89, 0x75, 0x86, 0x3f, 0xc0, 0x1c, 0x04, 0x0f, 0x02, -0x06, 0x21, 0x7d, 0x29, 0x65, 0x67, 0x38, 0xc8, 0xaa, 0x37, 0x1c, 0x72, -0x02, 0x27, 0xeb, 0x85, 0x80, 0xe1, 0x1e, 0x52, 0x9f, 0xe5, 0x8e, 0xdb, -0x6e, 0x6b, 0xde, 0xb0, 0x3e, 0x8d, 0x17, 0x9c, 0x19, 0xb9, 0x7d, 0xae, -0xd8, 0x5c, 0x10, 0x55, 0xc4, 0xcd, 0x02, 0x55, 0x14, 0x15, 0xe5, 0x41, -0xeb, 0x76, 0xc6, 0x84, 0x45, 0x0c, 0xda, 0xf4, 0x40, 0x6a, 0xc3, 0xb6, -0xbc, 0x82, 0x7a, 0x79, 0x39, 0xbb, 0x76, 0xee, 0x44, 0x8d, 0x56, 0x85, -0xeb, 0x04, 0x0f, 0x86, 0x4a, 0xc0, 0x52, 0x07, 0x5e, 0x6a, 0x65, 0x7b, -0x3d, 0xcc, 0x45, 0xe3, 0x55, 0x11, 0x54, 0x6e, 0xb4, 0xee, 0xc6, 0x35, -0x75, 0xb3, 0x6b, 0x50, 0xfc, 0xb4, 0x70, 0xc4, 0xcc, 0xa8, 0xa6, 0x61, -0x7c, 0x5f, 0x26, 0x54, 0xb0, 0x55, 0xa1, 0xad, 0x95, 0xc6, 0x41, 0x45, -0x25, 0x28, 0x3b, 0x24, 0xee, 0xeb, 0x39, 0x28, 0xd6, 0xfd, 0x96, 0xee, -0x89, 0x4b, 0xcb, 0x8e, 0x77, 0x38, 0xc6, 0x8e, 0x18, 0xf1, 0xc6, 0xeb, -0xaf, 0x23, 0xa0, 0x4a, 0x26, 0x24, 0x9b, 0xba, 0xd4, 0x72, 0x34, 0x14, -0x00, 0x56, 0x30, 0x30, 0x34, 0x4e, 0x70, 0xf7, 0xab, 0x3a, 0x5f, 0x6a, -0xc8, 0xc3, 0x37, 0xc0, 0x18, 0x48, 0x63, 0x70, 0xa9, 0x86, 0xfa, 0xfe, -0xfb, 0xef, 0x8f, 0x1b, 0x35, 0x0a, 0x55, 0x23, 0x21, 0x3d, 0x7b, 0xd0, -0x9a, 0x3b, 0xa2, 0x02, 0x55, 0xe9, 0x4b, 0xb4, 0x42, 0x45, 0x19, 0x2f, -0x5e, 0x14, 0x15, 0xbe, 0x52, 0xbc, 0xd7, 0xf3, 0x91, 0x9a, 0xba, 0xcf, -0xb8, 0x96, 0x95, 0xaf, 0x9d, 0x5d, 0x63, 0xc7, 0xf6, 0xed, 0x58, 0x52, -0x95, 0xc8, 0xe4, 0x0e, 0x0f, 0x36, 0x91, 0x60, 0x79, 0x9a, 0xea, 0x37, -0x22, 0x62, 0x95, 0x60, 0x43, 0x12, 0xf1, 0x29, 0xe7, 0xbd, 0x71, 0xdd, -0xba, 0x2c, 0x57, 0x75, 0xaf, 0x84, 0x3e, 0x0b, 0x36, 0x35, 0xdd, 0xfb, -0x77, 0xaf, 0x93, 0x8f, 0x88, 0x13, 0xa2, 0xa8, 0xa8, 0xe0, 0xd7, 0x9c, -0xbf, 0xeb, 0x8b, 0x4e, 0xc3, 0x2e, 0x61, 0xd9, 0xbb, 0x15, 0x76, 0x7a, -0xe8, 0xc1, 0x07, 0x61, 0xcd, 0x98, 0x50, 0x21, 0x50, 0x58, 0x84, 0x59, -0x64, 0x32, 0x74, 0x15, 0xf1, 0x1b, 0x1b, 0x0a, 0x18, 0x7a, 0x17, 0x1e, -0x10, 0x88, 0xea, 0xc2, 0x16, 0x78, 0xee, 0xd1, 0x47, 0xdb, 0xb7, 0x68, -0xce, 0x94, 0xaa, 0xb5, 0xe8, 0x35, 0xd4, 0x65, 0x9e, 0x8a, 0x78, 0xb7, -0x86, 0x4d, 0x54, 0xf0, 0xe6, 0xa2, 0x36, 0xa8, 0x00, 0xf1, 0xe3, 0xb2, -0x35, 0xad, 0xbb, 0x27, 0xbd, 0x8e, 0x8b, 0xfe, 0xa6, 0x4e, 0x9a, 0xf8, -0xfa, 0x6b, 0xaf, 0x49, 0x9a, 0xbc, 0x54, 0x55, 0x51, 0x75, 0xe1, 0xdd, -0x35, 0xda, 0xf1, 0x1b, 0x12, 0xea, 0x42, 0x77, 0xd8, 0x40, 0xa0, 0xfa, -0xc9, 0xfb, 0xef, 0xe3, 0x20, 0x67, 0x62, 0xc9, 0xd5, 0xeb, 0x0c, 0xba, -0x21, 0xe2, 0xa5, 0xa9, 0x28, 0x2a, 0x02, 0xa4, 0x75, 0x9b, 0x97, 0xa3, -0x48, 0xf4, 0x5d, 0xb6, 0x37, 0x21, 0xb5, 0x3a, 0x8a, 0xc4, 0xaa, 0x15, -0xcb, 0x55, 0xb5, 0x46, 0x81, 0x84, 0xaa, 0xef, 0x6b, 0xd9, 0x78, 0x2a, -0x70, 0x3c, 0x18, 0x1a, 0xb8, 0xe9, 0xdd, 0xaa, 0xa4, 0x15, 0x09, 0xd3, -0x80, 0x6b, 0xed, 0x2a, 0x29, 0xa9, 0x9e, 0xec, 0x8c, 0x8d, 0x4d, 0xe8, -0x35, 0xe3, 0xda, 0x88, 0x56, 0xc1, 0xed, 0xa0, 0x82, 0xbd, 0x24, 0xca, -0x2b, 0x6c, 0x52, 0xbf, 0xe5, 0x69, 0x28, 0x12, 0x5d, 0xa7, 0x5f, 0xcd, -0x52, 0xe7, 0x56, 0xcf, 0xdc, 0xb3, 0x67, 0x37, 0x11, 0x19, 0xd8, 0x9a, -0x10, 0x5d, 0x44, 0x6a, 0x92, 0xca, 0xbe, 0x86, 0xb6, 0x3a, 0xc1, 0x45, -0x82, 0xbb, 0xce, 0x86, 0x4a, 0xa0, 0x12, 0xf3, 0x14, 0xba, 0xfe, 0xb3, -0xcf, 0x3c, 0xdd, 0xb1, 0x55, 0x4b, 0xa6, 0xda, 0xa1, 0xff, 0xe8, 0xc8, -0x55, 0x33, 0x6c, 0xda, 0xa0, 0xa2, 0xa8, 0xf0, 0x1b, 0x15, 0xf9, 0x3b, -0xbf, 0xe8, 0x38, 0xdc, 0xa5, 0x48, 0xb4, 0x6b, 0xd5, 0xea, 0xec, 0x83, -0x0f, 0x4a, 0x6f, 0x04, 0x03, 0x24, 0x2a, 0x80, 0x45, 0x98, 0x61, 0x26, -0x02, 0x95, 0x00, 0x43, 0x57, 0xc1, 0xa9, 0xf5, 0x82, 0x34, 0x15, 0x17, -0xe3, 0x48, 0xa8, 0x5e, 0x7b, 0xf0, 0xda, 0x53, 0x91, 0xe8, 0x05, 0xb7, -0x8f, 0x0a, 0x5e, 0x67, 0xd4, 0xb7, 0xed, 0x2b, 0x36, 0xd0, 0xad, 0xdb, -0xf5, 0x1d, 0xc1, 0xba, 0x8d, 0x1d, 0x39, 0x52, 0x14, 0x09, 0x29, 0xfe, -0x2e, 0x65, 0xae, 0xe1, 0x12, 0x15, 0xc9, 0x22, 0xdc, 0x59, 0xa8, 0xa4, -0x13, 0x83, 0x94, 0x9d, 0x57, 0x2a, 0x78, 0xc9, 0x8e, 0x1d, 0x19, 0x49, -0xce, 0xf8, 0x94, 0xea, 0x83, 0xd7, 0xdd, 0x13, 0x71, 0xd2, 0x94, 0x1b, -0x54, 0xd0, 0xa6, 0xf9, 0x62, 0xde, 0xb6, 0x58, 0x66, 0xe1, 0x15, 0x51, -0x54, 0xf8, 0x04, 0x89, 0x0b, 0x4e, 0xba, 0x07, 0x93, 0x73, 0x1b, 0xe3, -0x29, 0x5b, 0xbc, 0x70, 0xa1, 0x2a, 0x41, 0xa7, 0xb7, 0x96, 0x52, 0x3d, -0xd7, 0x82, 0x65, 0x6b, 0xf2, 0x4f, 0xee, 0xd2, 0x7b, 0x59, 0xc1, 0x34, -0x94, 0x34, 0x75, 0xf4, 0xf0, 0xe1, 0xcc, 0xc4, 0x78, 0xc2, 0x43, 0x06, -0xaf, 0x3b, 0xdd, 0x74, 0x6f, 0x24, 0x19, 0xa6, 0xbc, 0xa2, 0x82, 0x1a, -0x38, 0xa2, 0x57, 0x44, 0x51, 0x61, 0x1f, 0x15, 0x2e, 0x48, 0x6c, 0x78, -0x20, 0x25, 0x2f, 0x1f, 0x48, 0xac, 0x5e, 0xb5, 0x8a, 0xb0, 0x6f, 0x42, -0x2d, 0x44, 0x6a, 0x32, 0xeb, 0xd6, 0xfe, 0x91, 0x72, 0x70, 0xaf, 0x32, -0x77, 0xc7, 0x95, 0xd6, 0x87, 0xb7, 0x1f, 0x3d, 0x9a, 0x99, 0x10, 0x9b, -0x98, 0x9e, 0x3d, 0x64, 0xdd, 0xe9, 0x08, 0xb2, 0xd8, 0x6a, 0xa8, 0xa0, -0xef, 0x11, 0x3b, 0x9a, 0xf8, 0xb6, 0x4b, 0x79, 0x45, 0x14, 0x15, 0xf6, -0xc1, 0x20, 0x67, 0x36, 0x72, 0x41, 0xe2, 0xbe, 0xe4, 0xbc, 0x7c, 0xcc, -0x4d, 0xab, 0xaf, 0xb9, 0x86, 0x2c, 0x08, 0xd1, 0xad, 0x61, 0xb9, 0xe2, -0x91, 0xa8, 0x60, 0xdd, 0xda, 0x26, 0x7e, 0x0c, 0xc0, 0x50, 0x9e, 0xbe, -0x13, 0xb7, 0xdf, 0x9e, 0x91, 0x18, 0x87, 0xff, 0x7b, 0xc8, 0x4d, 0xf7, -0x44, 0x0a, 0x30, 0xa2, 0xbc, 0xc2, 0x57, 0xa2, 0xf7, 0x7c, 0x3e, 0x90, -0x18, 0xb8, 0xfe, 0x8c, 0x33, 0xa7, 0x51, 0x62, 0x6c, 0xcc, 0xea, 0x6b, -0xaf, 0xc5, 0xdc, 0xa4, 0xb8, 0x84, 0x32, 0x37, 0x55, 0x8a, 0x6e, 0x6d, -0x07, 0x1b, 0xba, 0x43, 0x43, 0xfa, 0xa9, 0x4b, 0x78, 0xc8, 0x89, 0xe3, -0xb7, 0x57, 0x4b, 0x4e, 0x8a, 0x4b, 0xcd, 0xba, 0xc0, 0x31, 0x22, 0x20, -0x04, 0x3d, 0x8a, 0x8a, 0x20, 0xa2, 0x02, 0xc1, 0x49, 0x20, 0xe1, 0x04, -0x12, 0xd7, 0x5c, 0x23, 0x90, 0x90, 0xd0, 0x26, 0x03, 0x24, 0xec, 0xd0, -0x68, 0x65, 0x9d, 0x23, 0x4c, 0x43, 0x3a, 0x21, 0x0a, 0x30, 0x70, 0xbd, -0xdf, 0x7e, 0xec, 0x58, 0x46, 0x6a, 0x4a, 0x42, 0xf5, 0xba, 0xc3, 0xb6, -0x3d, 0x1e, 0xc4, 0x15, 0xab, 0xa2, 0x43, 0xd9, 0x44, 0x05, 0xc6, 0x44, -0xde, 0x71, 0xd4, 0x06, 0xe5, 0xf9, 0x2d, 0x0e, 0x5a, 0x7f, 0x26, 0x39, -0xa7, 0x21, 0xf1, 0x76, 0xc2, 0x25, 0x54, 0xdf, 0x83, 0x10, 0x82, 0x84, -0x40, 0xd1, 0xd0, 0x4b, 0x5a, 0x38, 0xc6, 0xce, 0xed, 0xdb, 0x9d, 0x09, -0xf1, 0x29, 0xb5, 0x9a, 0x35, 0xdb, 0x17, 0xee, 0xe1, 0x52, 0x36, 0xf5, -0x8a, 0x28, 0x2a, 0xbc, 0xee, 0x6a, 0xf8, 0x25, 0x92, 0x72, 0x1a, 0xa2, -0x4b, 0x5c, 0x7f, 0xed, 0xb5, 0xd2, 0x97, 0x36, 0xe4, 0xb8, 0x84, 0xd9, -0x05, 0x2e, 0x1c, 0x43, 0x74, 0x0c, 0x1e, 0xe7, 0xc6, 0xd5, 0xab, 0x49, -0xcc, 0x28, 0xec, 0x3f, 0x36, 0xcc, 0x1d, 0x7c, 0x51, 0x54, 0x78, 0x25, -0x77, 0x3b, 0x27, 0x10, 0xd0, 0xd1, 0xbe, 0xff, 0x58, 0x2c, 0x4e, 0x37, -0xac, 0xbe, 0x8e, 0x4a, 0x03, 0x66, 0xd7, 0xb5, 0xe8, 0x12, 0x95, 0x25, -0x14, 0xf9, 0x77, 0x5f, 0x5d, 0x94, 0x02, 0x18, 0xc8, 0x81, 0xd8, 0x0c, -0x16, 0x2e, 0x58, 0xe0, 0x0a, 0x6d, 0x1c, 0x3d, 0x2b, 0x9c, 0x81, 0x11, -0x45, 0x85, 0x1d, 0xa2, 0xf7, 0x7c, 0x0e, 0xea, 0x44, 0x97, 0x49, 0x57, -0xb1, 0x92, 0xf3, 0x67, 0xcf, 0x96, 0x8a, 0x5a, 0x12, 0xf3, 0xa7, 0x2c, -0x4e, 0xa1, 0x08, 0x09, 0x5d, 0x94, 0x52, 0xdd, 0xd6, 0x79, 0xa8, 0xdf, -0xfc, 0xfa, 0xd7, 0x93, 0xc6, 0x8f, 0xe7, 0x61, 0x7b, 0xcd, 0x58, 0x15, -0xb6, 0x26, 0x29, 0x3b, 0xa8, 0x40, 0xd9, 0x0a, 0x03, 0x09, 0xaa, 0xc6, -0xf6, 0xaf, 0x5a, 0x95, 0xfc, 0x8e, 0x0a, 0x4b, 0x9d, 0xa7, 0x2e, 0xaf, -0x53, 0x38, 0xb8, 0x76, 0xe1, 0x90, 0x4e, 0x13, 0xae, 0x1c, 0x7a, 0xc3, -0xed, 0xd0, 0x74, 0x80, 0xc0, 0xe8, 0xb3, 0x64, 0x8f, 0x8b, 0x4a, 0xba, -0x75, 0x7d, 0xf7, 0x9d, 0x77, 0xc5, 0x7b, 0x2d, 0x31, 0x7f, 0x12, 0xe0, -0x54, 0x65, 0x2d, 0x4e, 0x76, 0x18, 0x88, 0x21, 0x2a, 0x44, 0x14, 0x0c, -0x8a, 0xd7, 0xf7, 0xbb, 0xd0, 0x0b, 0xae, 0xef, 0x15, 0xb7, 0x84, 0x67, -0xa5, 0xa9, 0x48, 0x40, 0x85, 0xcb, 0x81, 0xb0, 0x72, 0x6f, 0x9d, 0xd6, -0xbc, 0xc8, 0xb8, 0xf8, 0x18, 0x47, 0xb5, 0x94, 0xe4, 0x5a, 0xd9, 0x35, -0xf8, 0xa9, 0x9e, 0x96, 0x8a, 0xcc, 0x13, 0x9f, 0x5a, 0xbd, 0xcf, 0xb2, -0x3d, 0x7e, 0x63, 0x03, 0xd9, 0x29, 0x3e, 0x23, 0xb7, 0x56, 0x4e, 0xce, -0x7d, 0x67, 0xce, 0x10, 0x6c, 0x2f, 0x01, 0x1d, 0xe2, 0xaa, 0x13, 0xbf, -0x84, 0x10, 0x96, 0x1d, 0x12, 0xac, 0x9a, 0xe7, 0x18, 0x34, 0x6f, 0x49, -0x57, 0x7a, 0xed, 0xd5, 0x57, 0xdb, 0x36, 0x6f, 0x06, 0xf1, 0x0c, 0x5c, -0x73, 0x47, 0x80, 0x7b, 0x4a, 0x55, 0xbc, 0x3c, 0xec, 0x51, 0x01, 0xb9, -0x77, 0x9f, 0x75, 0x43, 0x8c, 0x23, 0xa6, 0x6e, 0x4e, 0xd6, 0xb0, 0x41, -0x83, 0xae, 0x5d, 0xb5, 0xea, 0xf0, 0xa1, 0x43, 0x8f, 0x3f, 0xf6, 0xd8, -0x63, 0xe7, 0xce, 0x9d, 0x38, 0x7e, 0x9c, 0x58, 0x8c, 0x3a, 0x79, 0x79, -0x14, 0xe7, 0x2b, 0xba, 0xfa, 0x90, 0x1f, 0xaf, 0x87, 0xc1, 0xdb, 0xf5, -0x1b, 0x95, 0x10, 0x1f, 0xbf, 0x71, 0xfd, 0x7a, 0xd5, 0x3d, 0x8d, 0x0d, -0x55, 0x20, 0x11, 0xd2, 0x5c, 0xc2, 0xa0, 0x79, 0x4b, 0x1c, 0xa1, 0xc4, -0x4a, 0x49, 0xef, 0xab, 0x47, 0x1e, 0x7e, 0x38, 0x2f, 0x3b, 0xdb, 0x99, -0xd7, 0x24, 0x0c, 0x3d, 0x18, 0x26, 0x54, 0xb0, 0xdf, 0x19, 0x7d, 0xdb, -0xa1, 0x2c, 0x41, 0x9d, 0xef, 0xb3, 0xb8, 0xc4, 0x11, 0x97, 0xd0, 0xb1, -0x6d, 0x9b, 0x87, 0xce, 0x9e, 0xc5, 0x75, 0x8f, 0xc1, 0x94, 0x27, 0x44, -0xce, 0xe1, 0xc0, 0x8d, 0x8f, 0xb1, 0xe8, 0xae, 0x93, 0x27, 0x6b, 0x54, -0xaf, 0x16, 0xeb, 0x4c, 0x27, 0x92, 0xcf, 0x27, 0x60, 0xc0, 0x82, 0xba, -0x4d, 0x5d, 0xce, 0x02, 0x4e, 0x99, 0x38, 0x11, 0x75, 0x42, 0x8c, 0x4e, -0x92, 0x62, 0x0a, 0xf5, 0x84, 0x01, 0x97, 0xb0, 0xcc, 0xca, 0x10, 0x93, -0x94, 0x94, 0xd2, 0xb9, 0x74, 0xea, 0x54, 0x1e, 0x7f, 0xcc, 0x2d, 0x0f, -0xf8, 0xb4, 0x6e, 0x21, 0x70, 0xb2, 0x4d, 0x54, 0xf0, 0xca, 0x21, 0xa0, -0x90, 0xf3, 0x57, 0x60, 0x2d, 0x4d, 0xc9, 0x69, 0x50, 0xb3, 0x5a, 0x3a, -0x65, 0xc2, 0x28, 0x41, 0x29, 0xe9, 0xa0, 0xec, 0x73, 0xe0, 0x5c, 0x2a, -0x88, 0xa1, 0x2f, 0xf1, 0x25, 0x1e, 0x37, 0x2c, 0xaa, 0x5d, 0xa7, 0x2e, -0x41, 0x1c, 0xb2, 0xff, 0xce, 0xa8, 0x04, 0x1e, 0x9f, 0x9c, 0xd1, 0x3c, -0xbf, 0xd1, 0x9b, 0x6f, 0xbe, 0x29, 0x7b, 0x09, 0x56, 0x1a, 0x05, 0x89, -0xd0, 0xd5, 0xb0, 0x3d, 0x94, 0x47, 0x10, 0xef, 0x1e, 0x9c, 0x50, 0x5c, -0x7b, 0x6c, 0x28, 0xd5, 0xd3, 0xd3, 0x0a, 0x8a, 0xa6, 0xe4, 0xee, 0x0c, -0xaf, 0xd6, 0xa1, 0xf6, 0x51, 0x11, 0x82, 0x5e, 0xbc, 0xf3, 0xc3, 0xae, -0xde, 0xcb, 0x03, 0xae, 0xb9, 0xee, 0x3a, 0xf6, 0x72, 0x3d, 0x43, 0x9a, -0x97, 0x8a, 0x18, 0x20, 0x79, 0x36, 0xe0, 0xe4, 0x17, 0xbf, 0xfc, 0x65, -0xbb, 0x16, 0x2d, 0x62, 0xe3, 0x93, 0x46, 0x17, 0x3f, 0x6a, 0x13, 0x15, -0xe0, 0x27, 0xbd, 0x5e, 0x6b, 0xb0, 0x44, 0x1d, 0x5e, 0xf6, 0x0b, 0xd0, -0x25, 0xea, 0x84, 0xae, 0x61, 0x57, 0x4d, 0x3d, 0x21, 0x90, 0x59, 0x29, -0x39, 0x4a, 0x0c, 0xb5, 0xb0, 0x8b, 0xae, 0x1d, 0xda, 0xc7, 0x26, 0xa6, -0x76, 0xd8, 0x1f, 0xa8, 0xc5, 0xc2, 0xe6, 0xb2, 0x57, 0xd0, 0x69, 0x61, -0x8d, 0x8a, 0xff, 0xf6, 0x9a, 0x7c, 0x45, 0x7a, 0x8c, 0xe3, 0x47, 0xcf, -0x3d, 0xa7, 0x9a, 0xc3, 0x82, 0x07, 0x31, 0x98, 0x4a, 0x69, 0x3d, 0xd1, -0x1d, 0x71, 0x2f, 0x6c, 0xda, 0xb0, 0x3e, 0x29, 0xd1, 0xd9, 0xeb, 0xf2, -0x4d, 0x76, 0xd6, 0xdd, 0xa5, 0xab, 0xcc, 0x5c, 0xcd, 0xd2, 0x5d, 0x31, -0x7f, 0x3e, 0xb9, 0xa6, 0xe2, 0x9d, 0x30, 0xa8, 0x13, 0x81, 0x10, 0x5f, -0x95, 0xbd, 0x56, 0x69, 0xde, 0x12, 0x70, 0xce, 0x9e, 0xb2, 0x7e, 0xed, -0x8d, 0x49, 0xce, 0xa4, 0x81, 0xab, 0x0e, 0xdb, 0x59, 0xb7, 0x90, 0x39, -0xc7, 0x0a, 0x15, 0x6c, 0x01, 0x65, 0x62, 0x66, 0xa1, 0x9b, 0x10, 0x95, -0xa0, 0x5a, 0xf7, 0x18, 0xdc, 0xa5, 0x6d, 0xab, 0x77, 0xdf, 0x79, 0xc7, -0xe0, 0x43, 0x50, 0x75, 0xf5, 0x24, 0x97, 0x00, 0x76, 0xf1, 0xf4, 0x53, -0x4f, 0xa5, 0x27, 0x27, 0x35, 0xec, 0x39, 0x36, 0xa3, 0xf8, 0x5f, 0x5e, -0x5f, 0x5e, 0xd1, 0x35, 0xc7, 0x28, 0x15, 0xd3, 0xae, 0x75, 0x4b, 0x4c, -0x31, 0x12, 0x63, 0x8c, 0x9c, 0xad, 0xab, 0x13, 0x55, 0x96, 0xac, 0x03, -0x9f, 0x98, 0x00, 0x43, 0xd4, 0x6e, 0x96, 0x6e, 0xdf, 0xee, 0xdd, 0x89, -0x09, 0x89, 0x79, 0x7d, 0xa6, 0x37, 0xdb, 0xf7, 0x0f, 0xaf, 0xeb, 0x16, -0x32, 0x27, 0xd8, 0xe7, 0x15, 0x95, 0xa8, 0x57, 0xb0, 0x37, 0x0f, 0xbf, -0xe1, 0xb6, 0x3e, 0xf3, 0xd7, 0xb7, 0x1c, 0x38, 0x35, 0xaf, 0xe3, 0x90, -0xf4, 0x96, 0xfd, 0x72, 0xdb, 0x0f, 0x6c, 0x33, 0x62, 0xee, 0x80, 0x15, -0x7b, 0x47, 0x6f, 0x39, 0xeb, 0xc1, 0xa8, 0xda, 0xa0, 0x75, 0xd7, 0xbe, -0x5d, 0x3a, 0x11, 0x22, 0x2f, 0x5d, 0xc4, 0xe1, 0x0c, 0xaa, 0x6e, 0x80, -0xca, 0xcc, 0x64, 0x8f, 0x67, 0xa7, 0x87, 0x99, 0xe4, 0x66, 0xa6, 0xa7, -0xd6, 0x6c, 0xe2, 0x55, 0xe7, 0xe6, 0x76, 0x49, 0x75, 0x9a, 0x3b, 0x63, -0x1d, 0xb7, 0x1d, 0x3b, 0x26, 0xa6, 0x58, 0xb3, 0x77, 0x22, 0x70, 0xe2, -0xab, 0xb2, 0x23, 0xe8, 0x0e, 0x6f, 0xf6, 0x94, 0xdb, 0x6f, 0xbb, 0xad, -0xa0, 0x41, 0x03, 0x97, 0xef, 0x62, 0xfe, 0x3a, 0xc7, 0x96, 0xf3, 0x21, -0x43, 0xf7, 0x9e, 0xcb, 0x92, 0x57, 0x71, 0x54, 0x34, 0xdc, 0xfe, 0xa7, -0xa2, 0x1b, 0x4e, 0x12, 0x91, 0xc6, 0x3c, 0xe3, 0x1c, 0x8e, 0xba, 0x59, -0x19, 0x0d, 0x72, 0xaa, 0xd7, 0xcf, 0xae, 0xde, 0x28, 0xb7, 0x46, 0xb5, -0x24, 0xe7, 0x85, 0xc9, 0x27, 0x64, 0x36, 0xed, 0xda, 0x7f, 0xed, 0xa9, -0xc6, 0x25, 0x16, 0x8a, 0x72, 0x56, 0x41, 0x97, 0xb6, 0x4d, 0x1a, 0x52, -0x24, 0x4f, 0xdc, 0x08, 0x22, 0xe4, 0x88, 0x81, 0x48, 0x0e, 0xb1, 0xa8, -0x20, 0x09, 0x20, 0x05, 0x15, 0xf5, 0xec, 0xee, 0xcc, 0xc8, 0x69, 0xb7, -0xeb, 0x53, 0xcf, 0xaf, 0xb6, 0xfb, 0xec, 0x35, 0xdc, 0x75, 0xee, 0x65, -0x97, 0xa1, 0xbe, 0x0b, 0xd8, 0x0c, 0xde, 0x89, 0x2a, 0x4b, 0xd0, 0xc1, -0x9a, 0x98, 0xc1, 0x4a, 0x4b, 0xed, 0xf4, 0xcc, 0x78, 0x47, 0x66, 0xb3, -0x1e, 0xe1, 0xc3, 0x2e, 0xaa, 0x38, 0x2a, 0xfa, 0x5c, 0x7d, 0x30, 0x3e, -0x2d, 0x2b, 0x39, 0x3e, 0x6e, 0xc1, 0x9c, 0xcb, 0xee, 0xb8, 0xe3, 0x8e, -0x47, 0x1f, 0x7d, 0x14, 0x57, 0x03, 0xaf, 0x81, 0x9f, 0xfb, 0xef, 0xbf, -0x7f, 0xdb, 0x2d, 0xb7, 0x4c, 0x1c, 0x3d, 0x92, 0x78, 0xb5, 0xe4, 0xea, -0xb5, 0x8b, 0xae, 0x3b, 0x66, 0x6e, 0x06, 0x97, 0xd7, 0x69, 0x48, 0xad, -0x8c, 0xe4, 0xb7, 0xde, 0x7a, 0x4b, 0x95, 0x5d, 0x52, 0xda, 0xb0, 0x94, -0x61, 0x15, 0x49, 0x00, 0xc0, 0x40, 0xdf, 0x37, 0x5c, 0x77, 0x6d, 0x7c, -0x6c, 0xfc, 0x10, 0x14, 0x74, 0xf7, 0x1b, 0x49, 0xa3, 0x1d, 0x7f, 0x8e, -0xab, 0x56, 0xa7, 0x49, 0xa3, 0x86, 0x2f, 0x3c, 0xff, 0x3c, 0x8c, 0x02, -0x26, 0xa3, 0xf3, 0x9f, 0xf0, 0xb3, 0x3b, 0x79, 0x4e, 0xf5, 0x16, 0xed, -0x02, 0xe9, 0x7a, 0x68, 0xbf, 0xde, 0xce, 0xac, 0x7a, 0x93, 0x0f, 0xbc, -0x1c, 0x7e, 0xbc, 0xe2, 0x27, 0x3f, 0xf9, 0x09, 0xaa, 0xa3, 0xb5, 0xbf, -0xa2, 0x52, 0xf4, 0x0a, 0x48, 0x30, 0xb9, 0x5e, 0x2b, 0x6c, 0x7f, 0xc5, -0x5b, 0xb7, 0xfe, 0xec, 0x67, 0x3f, 0xc3, 0x8e, 0x24, 0x4d, 0x7d, 0xc4, -0xd5, 0xc0, 0x67, 0x76, 0x6b, 0xa2, 0x0f, 0x6e, 0xb9, 0x79, 0x53, 0x7a, -0x7c, 0x4c, 0xbc, 0x33, 0xad, 0xef, 0xd2, 0xbd, 0x65, 0x2b, 0x6c, 0x9f, -0x6f, 0x3f, 0x6e, 0x21, 0xb0, 0x7f, 0xe5, 0xe5, 0x97, 0xcd, 0xe1, 0xab, -0x82, 0x0a, 0xb1, 0x33, 0x8a, 0xf5, 0xfd, 0xa9, 0x27, 0x9f, 0xe4, 0xe4, -0xa6, 0xfd, 0x26, 0x64, 0xbb, 0xef, 0x25, 0x37, 0x62, 0xf3, 0x59, 0xce, -0x19, 0x3d, 0x62, 0x84, 0x54, 0x4a, 0x8e, 0x04, 0xbb, 0x93, 0x3b, 0x60, -0x28, 0xa7, 0x1e, 0xda, 0xc5, 0xfa, 0x35, 0xd7, 0xb3, 0x2c, 0x83, 0xaf, -0x3f, 0x5e, 0x6d, 0xc7, 0xb7, 0xe1, 0x00, 0x0c, 0x3b, 0xbc, 0x02, 0x92, -0xaa, 0x14, 0x54, 0x8c, 0x58, 0x7f, 0x8f, 0x90, 0x20, 0xa4, 0x4f, 0xcf, -0x2b, 0x31, 0xad, 0x4a, 0x83, 0x1f, 0x69, 0xe7, 0xc3, 0xac, 0x00, 0x09, -0x7f, 0x22, 0x8b, 0xb2, 0x76, 0x76, 0x96, 0x23, 0x3e, 0x79, 0xc0, 0xb5, -0xc7, 0xb4, 0x58, 0xce, 0xf3, 0xfd, 0xaf, 0x2a, 0x66, 0x84, 0x53, 0x77, -0xdd, 0x29, 0x4a, 0x05, 0xc2, 0x92, 0x88, 0x4f, 0x02, 0x09, 0x95, 0x5b, -0xc3, 0x9f, 0x18, 0xf0, 0xe3, 0x8f, 0x3e, 0x6a, 0x54, 0x33, 0x27, 0xb5, -0x6e, 0x2b, 0x1a, 0x70, 0x59, 0xbe, 0xda, 0xf4, 0x6d, 0xdf, 0x74, 0x9d, -0xb1, 0x3a, 0x39, 0x21, 0x61, 0xc3, 0x4d, 0x37, 0xa1, 0x87, 0x30, 0x19, -0x29, 0xd5, 0xa1, 0x7c, 0x76, 0xc1, 0x12, 0x51, 0xaa, 0xfe, 0x38, 0xba, -0x76, 0x81, 0x5c, 0xfa, 0xe4, 0xe3, 0x8f, 0xb3, 0xce, 0x2d, 0xc6, 0x2e, -0x69, 0xba, 0x37, 0x2c, 0x74, 0x6e, 0x3b, 0x36, 0xa8, 0xca, 0x42, 0x45, -0xcf, 0x59, 0xd7, 0xa7, 0x27, 0x25, 0x6d, 0xdf, 0xb6, 0x8d, 0x0a, 0x45, -0x52, 0x46, 0x89, 0x99, 0xb0, 0x3d, 0x4b, 0x23, 0x1f, 0x3e, 0x48, 0x23, -0x1f, 0xf6, 0x6c, 0xfe, 0x7a, 0xfa, 0xd4, 0xa9, 0x9c, 0x6a, 0x99, 0x8e, -0xc4, 0xf4, 0xa1, 0x1b, 0xce, 0x34, 0x3f, 0xf0, 0xb5, 0x90, 0xf5, 0xd8, -0x0d, 0xa7, 0x78, 0xc0, 0x4d, 0x37, 0xad, 0xd5, 0x2b, 0x6b, 0x28, 0xaf, -0xb3, 0xc8, 0xc7, 0xc8, 0x54, 0xbc, 0x57, 0x86, 0x02, 0x5d, 0xd3, 0x27, -0x8e, 0xc7, 0xc9, 0x3d, 0x7a, 0xf3, 0x7d, 0x96, 0xa8, 0x80, 0x77, 0xd5, -0x6c, 0xd5, 0xa3, 0x66, 0x76, 0x8d, 0x67, 0x9e, 0x7e, 0x5a, 0x58, 0xaa, -0x28, 0x2a, 0x02, 0xb3, 0xaa, 0x4f, 0xca, 0xc1, 0x9d, 0xa1, 0xee, 0xbb, -0xa0, 0x20, 0x67, 0xdd, 0xcc, 0x94, 0xcc, 0x96, 0x45, 0x1d, 0xf7, 0xff, -0x29, 0x5c, 0x79, 0x85, 0xd1, 0x32, 0x2b, 0xca, 0x28, 0xe2, 0x4a, 0x05, -0xfb, 0xb6, 0x5b, 0x14, 0x8d, 0xcf, 0xad, 0x56, 0x8d, 0x12, 0xc5, 0x22, -0xae, 0xa8, 0x1a, 0x19, 0xe2, 0x6a, 0x90, 0xa2, 0xf3, 0x20, 0x04, 0x3e, -0x20, 0x7c, 0xe3, 0xe4, 0x1d, 0x77, 0x54, 0xcb, 0x48, 0x8f, 0x4b, 0xcb, -0x19, 0xb5, 0xfd, 0xa9, 0x96, 0x87, 0x5c, 0xde, 0xd6, 0x19, 0xb7, 0xbf, -0x93, 0x54, 0xa3, 0x7e, 0xbf, 0x6e, 0x5d, 0xd8, 0xd7, 0xcd, 0xb1, 0x18, -0x3a, 0x2a, 0x18, 0x04, 0xc1, 0xac, 0xa4, 0x78, 0x1b, 0xcf, 0x38, 0x60, -0x69, 0x89, 0xa5, 0x39, 0xa5, 0xf5, 0xf6, 0x5f, 0xc5, 0x25, 0xa6, 0x76, -0x6e, 0xdf, 0x0e, 0x94, 0x72, 0x32, 0xcb, 0x22, 0x6e, 0xbb, 0x08, 0x51, -0x27, 0xcc, 0xa0, 0x92, 0xca, 0x9c, 0xbc, 0x0e, 0x56, 0x63, 0xf4, 0xe0, -0x01, 0x31, 0xe9, 0x35, 0x27, 0xed, 0x7f, 0x31, 0xcc, 0x50, 0xa1, 0xf4, -0x8a, 0xaa, 0x82, 0x8a, 0xec, 0x26, 0x9d, 0x6a, 0xe7, 0x64, 0xd3, 0xfe, -0x47, 0x59, 0x7b, 0x54, 0x21, 0x7b, 0xe9, 0xfd, 0xa3, 0x3c, 0x71, 0xb0, -0x0e, 0x68, 0x94, 0xcd, 0x9b, 0xc8, 0xbf, 0x14, 0xbc, 0x4a, 0xd9, 0x0d, -0xc6, 0xec, 0x7b, 0x09, 0xca, 0x6e, 0x75, 0xeb, 0xb7, 0xd9, 0xed, 0x07, -0xa7, 0xc6, 0x38, 0x7e, 0xf9, 0x8b, 0x5f, 0x18, 0xb2, 0x1d, 0x54, 0x8c, -0x34, 0xf2, 0x0f, 0xc4, 0x2d, 0x7d, 0x80, 0x88, 0x7b, 0x05, 0x15, 0x9d, -0xa7, 0x5f, 0x63, 0x89, 0x8a, 0x61, 0xd7, 0xdf, 0x96, 0x98, 0x98, 0x74, -0xf9, 0xbc, 0xb9, 0x34, 0x32, 0x05, 0xa5, 0x00, 0x49, 0x44, 0xb2, 0x88, -0x45, 0x85, 0x6c, 0x2b, 0x12, 0x00, 0xb2, 0xe1, 0xa6, 0xb5, 0x2c, 0xdd, -0xf0, 0x75, 0xa7, 0xa2, 0xa8, 0x70, 0xdf, 0x6f, 0xcf, 0x6b, 0x9b, 0x4a, -0x1b, 0x27, 0x64, 0x17, 0x14, 0xd6, 0xce, 0xce, 0x7e, 0xf9, 0xa5, 0x97, -0x70, 0x95, 0x88, 0x5b, 0x40, 0x12, 0xa0, 0x95, 0x5d, 0x55, 0xb2, 0x61, -0x54, 0xb3, 0x12, 0x91, 0xac, 0xf0, 0x2b, 0x61, 0xc3, 0x4d, 0xaf, 0x55, -0x30, 0xee, 0xd0, 0x6b, 0x10, 0x77, 0xc3, 0x49, 0xab, 0xe3, 0x1c, 0x31, -0xc7, 0x8f, 0x1d, 0x95, 0x5a, 0x7d, 0x7a, 0x28, 0xab, 0x2e, 0x03, 0x70, -0x21, 0x12, 0x1a, 0xa2, 0x11, 0x41, 0x1c, 0xf5, 0xfb, 0x4d, 0x4d, 0x2d, -0xfe, 0xce, 0xfc, 0x76, 0x7b, 0x5d, 0x76, 0x43, 0x72, 0x42, 0xe2, 0xf6, -0xe2, 0x62, 0xa2, 0x0c, 0x81, 0x10, 0xa8, 0x10, 0xa5, 0x22, 0x92, 0x51, -0xc1, 0xb3, 0xb3, 0xaa, 0x2e, 0xc7, 0xc5, 0x31, 0x3c, 0x9b, 0x8e, 0x5e, -0x4b, 0xf7, 0xa6, 0x16, 0x7f, 0x1f, 0xf2, 0xc0, 0xd0, 0x84, 0xa2, 0x2a, -0xc7, 0x2b, 0x5a, 0x0d, 0x9c, 0x96, 0x9d, 0x99, 0x79, 0xe6, 0xde, 0x7b, -0x15, 0x2a, 0xf4, 0xd8, 0x3b, 0x61, 0xdf, 0x52, 0x0a, 0x52, 0xf1, 0x0d, -0x5e, 0x0f, 0x1a, 0xf0, 0xb6, 0x2d, 0x5b, 0x78, 0xae, 0xb4, 0x3a, 0xcd, -0x78, 0x3d, 0x6d, 0x6f, 0x7e, 0xc1, 0x99, 0x52, 0x7d, 0xcc, 0xb0, 0x21, -0xe6, 0xba, 0xdf, 0x4a, 0x65, 0x14, 0x37, 0x2d, 0xc0, 0xc3, 0x57, 0x5d, -0x37, 0x2b, 0x3d, 0xa3, 0x79, 0x9f, 0xfa, 0xbb, 0xbf, 0x32, 0xbf, 0xda, -0xd6, 0x03, 0xa7, 0xa4, 0x26, 0xc4, 0x3d, 0xfc, 0xd0, 0x43, 0x48, 0x74, -0x12, 0xf8, 0xa4, 0x47, 0x8c, 0x07, 0x57, 0x6a, 0x0f, 0x89, 0xd1, 0x64, -0x01, 0xc5, 0xe7, 0x43, 0xdd, 0x30, 0xd6, 0xbc, 0xe5, 0x9c, 0xad, 0xf5, -0x77, 0x5d, 0x54, 0xea, 0x42, 0x18, 0x1b, 0x55, 0x19, 0x15, 0xbd, 0x66, -0x5d, 0x9f, 0x91, 0x9c, 0xbc, 0x7b, 0x67, 0x89, 0xa0, 0x02, 0xc2, 0x35, -0x53, 0xb6, 0x01, 0x1b, 0x12, 0xe0, 0x04, 0x36, 0x36, 0xaf, 0x5f, 0xc7, -0xa3, 0x25, 0xd7, 0x2a, 0xe8, 0xb0, 0xed, 0xf5, 0x6a, 0x2d, 0xfb, 0xd4, -0xce, 0xaa, 0xfe, 0xa7, 0x3f, 0xfe, 0xd1, 0xc0, 0x28, 0x14, 0x2a, 0x44, -0x06, 0x40, 0x6f, 0xf9, 0xe0, 0x27, 0x3f, 0xe9, 0xd4, 0xa2, 0x69, 0x52, -0x9d, 0xd6, 0xad, 0xf7, 0xff, 0xd5, 0xf4, 0x52, 0xcf, 0xe7, 0x36, 0xef, -0x9c, 0x16, 0x1f, 0xfb, 0xd6, 0x9b, 0x6f, 0x22, 0xd1, 0xa1, 0xa8, 0xc0, -0x5e, 0xa2, 0xa8, 0x10, 0x9f, 0x0f, 0xa8, 0x38, 0x7d, 0x8f, 0xcb, 0x60, -0x98, 0xd7, 0xe7, 0xd2, 0x56, 0x7b, 0x7d, 0x88, 0x3b, 0xae, 0xa2, 0xc8, -0xa9, 0xca, 0xa8, 0x18, 0xb9, 0xc1, 0xb5, 0xd0, 0x93, 0x2f, 0x64, 0x2f, -0xc8, 0xde, 0xac, 0x24, 0x28, 0x95, 0xd0, 0x23, 0x94, 0xad, 0xb0, 0xa1, -0x58, 0x07, 0x1b, 0x58, 0xc9, 0xb6, 0x6d, 0x88, 0x52, 0x49, 0xb5, 0x5b, -0xe4, 0x76, 0x9b, 0x90, 0x91, 0x96, 0x7e, 0xcf, 0xdd, 0x77, 0xab, 0xab, -0xd4, 0x4e, 0x2c, 0x17, 0x8a, 0x0c, 0x80, 0x44, 0x84, 0x57, 0xa4, 0x5f, -0xd7, 0xc2, 0x84, 0x9c, 0xfc, 0xc2, 0x03, 0x7f, 0x36, 0xa3, 0xa2, 0x56, -0xa7, 0xc1, 0x69, 0x09, 0xf1, 0x4f, 0x3f, 0xf9, 0xa4, 0x8e, 0x52, 0xee, -0x18, 0xd2, 0xa9, 0x76, 0x81, 0x30, 0x25, 0x15, 0x13, 0xc5, 0x7b, 0xf9, -0xf9, 0xcf, 0x7e, 0xd6, 0xbb, 0x4b, 0xa1, 0xc3, 0x99, 0xd9, 0x61, 0x8f, -0xb5, 0x5d, 0xbb, 0x8a, 0x02, 0xc0, 0x52, 0x92, 0xaf, 0xca, 0xa8, 0x20, -0xe2, 0x28, 0xbe, 0x46, 0xfd, 0x82, 0xc6, 0x8d, 0x70, 0xc3, 0xa1, 0xdd, -0x4a, 0x4e, 0x8f, 0xb2, 0x84, 0x8a, 0xba, 0xac, 0x1f, 0x0a, 0x1e, 0x22, -0x59, 0x71, 0x1c, 0xdc, 0xb7, 0x2f, 0x39, 0x31, 0x21, 0x21, 0xa7, 0x31, -0xf0, 0x58, 0x30, 0x67, 0x8e, 0x39, 0x59, 0x54, 0x99, 0xa1, 0x24, 0x93, -0x06, 0xe3, 0xec, 0xc8, 0x41, 0xfd, 0x1d, 0x58, 0xb1, 0x76, 0xff, 0xc8, -0xfc, 0x16, 0x3b, 0x8c, 0x5f, 0x94, 0x92, 0x90, 0x70, 0xc7, 0xed, 0xb7, -0xe3, 0xac, 0x90, 0x6c, 0x0a, 0xe1, 0x15, 0x11, 0x8e, 0x0a, 0xd9, 0x53, -0xe0, 0xb4, 0x57, 0xcc, 0x9d, 0x03, 0x39, 0x4d, 0xd8, 0xfd, 0x4c, 0x28, -0x01, 0x20, 0xe4, 0x50, 0xc1, 0xe2, 0x76, 0x9b, 0xe9, 0x72, 0x9a, 0x2e, -0xba, 0xe2, 0x0a, 0xc9, 0xff, 0x14, 0x85, 0x5b, 0x79, 0xe2, 0x74, 0x2a, -0x57, 0xf0, 0x50, 0x1e, 0x3a, 0xe1, 0x03, 0xc7, 0x8f, 0x1d, 0x4b, 0x49, -0x4e, 0x66, 0x90, 0xee, 0xdd, 0xba, 0x99, 0xc9, 0x57, 0xed, 0x76, 0xd0, -0x37, 0x0a, 0x09, 0x72, 0xda, 0xbc, 0x79, 0x73, 0x39, 0x39, 0xa7, 0xeb, -0xb8, 0x2e, 0x07, 0x8c, 0xa6, 0xf7, 0x01, 0x8b, 0x8b, 0x93, 0x13, 0x9c, -0x84, 0x99, 0xe0, 0x4f, 0x14, 0x88, 0x8a, 0xea, 0x1f, 0xc9, 0xa8, 0x50, -0x0e, 0x9f, 0x4f, 0x3e, 0xfe, 0xb8, 0x67, 0xa7, 0x8e, 0xb1, 0xd5, 0xea, -0xb5, 0xdb, 0xf3, 0xc7, 0x08, 0x42, 0x05, 0xfb, 0x68, 0x05, 0xfb, 0x2b, -0x58, 0x5c, 0x42, 0x9b, 0x92, 0x6a, 0x35, 0x75, 0xc6, 0x39, 0x76, 0xef, -0xdc, 0x29, 0x2e, 0x02, 0xdd, 0x9d, 0x6c, 0x69, 0xfc, 0x31, 0xf3, 0x90, -0x07, 0xce, 0x9c, 0x69, 0xdb, 0xa2, 0xc5, 0x94, 0x09, 0x13, 0xcc, 0xd2, -0x82, 0x21, 0x02, 0x94, 0xed, 0xff, 0x9d, 0x77, 0xde, 0x19, 0x3b, 0x7c, -0x18, 0x4f, 0xda, 0x60, 0xda, 0x86, 0x91, 0x25, 0xcf, 0xea, 0x11, 0x6f, -0x63, 0x36, 0x9e, 0x72, 0x26, 0x26, 0xaf, 0x58, 0xba, 0x44, 0xcc, 0xb2, -0x6c, 0x90, 0x11, 0xe8, 0xd5, 0xd6, 0xd7, 0x50, 0xf6, 0x1d, 0xd9, 0x50, -0x8e, 0x1e, 0x39, 0xe2, 0x72, 0x6f, 0x8f, 0x59, 0x98, 0x53, 0x12, 0xfa, -0x79, 0x79, 0x55, 0x59, 0x82, 0x92, 0x2d, 0x67, 0xc0, 0xf5, 0x27, 0x62, -0x93, 0x32, 0x32, 0x52, 0x92, 0xb0, 0xfd, 0x89, 0x7b, 0x5b, 0xbc, 0x16, -0xaa, 0x82, 0x86, 0x1d, 0xc9, 0x98, 0xee, 0xbd, 0xc4, 0x4e, 0x79, 0x0d, -0xe9, 0x91, 0x9e, 0x26, 0x08, 0x6c, 0x05, 0x8d, 0x1a, 0x39, 0x62, 0x9c, -0x54, 0xa8, 0x4f, 0xab, 0xd3, 0xbc, 0xf7, 0x9c, 0x35, 0x82, 0x8d, 0xe6, -0xfb, 0xbf, 0x8a, 0x4f, 0x4c, 0xeb, 0xd7, 0xb3, 0x87, 0xa8, 0xfe, 0x32, -0x87, 0x08, 0x37, 0xcb, 0xb2, 0x02, 0xac, 0xc3, 0x2f, 0x7f, 0xfe, 0xf3, -0xb6, 0x2d, 0x9a, 0x51, 0x14, 0x62, 0x5c, 0xf1, 0x23, 0x21, 0xcf, 0x28, -0xa0, 0x3a, 0xaf, 0xa8, 0xa0, 0x1f, 0x3d, 0x22, 0x63, 0xa5, 0xf8, 0xb6, -0x65, 0x7d, 0xc9, 0x05, 0xed, 0x7f, 0xcd, 0x61, 0x80, 0x91, 0x95, 0x96, -0x72, 0xef, 0xe9, 0xd3, 0xc8, 0x51, 0x12, 0xbe, 0x11, 0xac, 0x5c, 0x50, -0x61, 0x17, 0x22, 0x09, 0xa8, 0x66, 0x3f, 0x84, 0x99, 0x14, 0xf5, 0xea, -0x31, 0x6e, 0xd8, 0x90, 0x7a, 0xd9, 0x59, 0x78, 0x30, 0x52, 0x72, 0x1b, -0x4d, 0x3b, 0x84, 0x5b, 0xf0, 0xbf, 0x19, 0x4d, 0xbb, 0xd7, 0xcd, 0xcd, -0x79, 0xe7, 0xad, 0xb7, 0x0c, 0x1a, 0x8e, 0x1d, 0x64, 0x86, 0xd3, 0x39, -0x06, 0x1f, 0xe8, 0xfa, 0x1b, 0x5d, 0xd1, 0xf5, 0x03, 0x96, 0xec, 0x08, -0x93, 0x60, 0x72, 0xfb, 0xa8, 0xa8, 0x14, 0x09, 0x4a, 0x80, 0x41, 0x26, -0x50, 0xff, 0xab, 0x0f, 0xc7, 0x3b, 0x53, 0xa9, 0x4b, 0xf0, 0xe8, 0xc3, -0x0f, 0xab, 0xca, 0x7c, 0xc1, 0x12, 0x60, 0x74, 0x39, 0x4a, 0x0c, 0xbb, -0x12, 0x48, 0xc2, 0x8d, 0xd0, 0x67, 0x56, 0x2e, 0x5d, 0xca, 0x2a, 0x55, -0x6b, 0xd5, 0x8f, 0x99, 0xd4, 0x9f, 0xb6, 0x3e, 0x29, 0x36, 0x76, 0xdb, -0xe6, 0xcd, 0x51, 0xff, 0x1d, 0x8b, 0x26, 0x5e, 0xd4, 0x47, 0x1e, 0x7e, -0x28, 0x3d, 0xd6, 0x91, 0x56, 0xb7, 0x45, 0x8b, 0x83, 0xff, 0x0c, 0x07, -0x46, 0x61, 0x9f, 0x57, 0x20, 0xd3, 0x57, 0x22, 0x2a, 0x58, 0xeb, 0x26, -0xbb, 0xfe, 0xda, 0x7f, 0xc5, 0x81, 0xf8, 0x78, 0x67, 0xc3, 0x5a, 0x79, -0x78, 0xa0, 0x95, 0x3d, 0x4a, 0x64, 0x98, 0x00, 0xb7, 0x61, 0xd9, 0xf9, -0x24, 0x84, 0x16, 0xa4, 0xe9, 0xce, 0xf2, 0x0b, 0x41, 0x56, 0x7f, 0x99, -0x77, 0xd9, 0x6c, 0x80, 0xd1, 0x74, 0xe1, 0xa1, 0xf6, 0xc5, 0xaf, 0xf1, -0x61, 0x70, 0xff, 0xa2, 0xaf, 0xbf, 0xfa, 0x2a, 0x2a, 0x3e, 0xb1, 0x02, -0xef, 0xbc, 0xfd, 0x76, 0xa3, 0x5a, 0x79, 0x89, 0xc9, 0x19, 0xae, 0x18, -0x7b, 0x1b, 0xf1, 0x0a, 0xa1, 0x71, 0x8e, 0x89, 0x57, 0xb0, 0x39, 0x96, -0x89, 0x83, 0x12, 0x09, 0xaa, 0xd2, 0x51, 0xe1, 0x02, 0xc6, 0xee, 0x2f, -0x8b, 0x96, 0xee, 0x66, 0xc2, 0xcd, 0x1a, 0x36, 0x78, 0xf1, 0x85, 0x17, -0xa4, 0x29, 0x44, 0xb0, 0x02, 0x2e, 0x14, 0x30, 0x54, 0xb3, 0x5d, 0x09, -0xb2, 0x92, 0x6a, 0x20, 0xcf, 0xff, 0xe8, 0x47, 0x8d, 0x6a, 0xe6, 0xa6, -0xb7, 0x19, 0xd8, 0xf9, 0xf0, 0xff, 0xd4, 0xec, 0x7f, 0x99, 0xab, 0xaf, -0xd7, 0x35, 0xd7, 0x70, 0x42, 0x24, 0x5b, 0x9f, 0xd8, 0x44, 0xb0, 0xc5, -0xf5, 0xea, 0xda, 0xc5, 0xe1, 0x88, 0x29, 0x58, 0x78, 0xb0, 0xe5, 0xa1, -0xb0, 0xc8, 0xac, 0x10, 0x60, 0x87, 0x10, 0x2a, 0x98, 0x2e, 0x65, 0xea, -0xfa, 0x2d, 0xde, 0xce, 0x9c, 0xdb, 0xb7, 0x6c, 0xf1, 0xce, 0xdb, 0xef, -0x04, 0xdd, 0x36, 0xaa, 0x63, 0x43, 0x02, 0x49, 0xc4, 0x59, 0x4e, 0xdc, -0x78, 0xcf, 0xce, 0x85, 0xb1, 0xb9, 0x4d, 0x3a, 0x1f, 0xfe, 0x75, 0xe1, -0xde, 0x8f, 0xe3, 0x6b, 0x36, 0x6f, 0x96, 0xdf, 0xf0, 0xa3, 0x0f, 0x3f, -0x8c, 0x70, 0x54, 0x48, 0x95, 0xb4, 0x9a, 0xfd, 0x66, 0xb5, 0xdb, 0xf2, -0x72, 0x93, 0xf9, 0x7b, 0x87, 0xdd, 0x74, 0x4f, 0xb3, 0xfd, 0x16, 0x91, -0x32, 0xa1, 0xc1, 0x1f, 0x74, 0x46, 0xa7, 0xa1, 0x82, 0xf4, 0x66, 0x82, -0x41, 0xab, 0x2e, 0xaf, 0x90, 0xc5, 0x25, 0xa9, 0xa8, 0xdf, 0xc2, 0xcd, -0x4c, 0xbb, 0x47, 0x61, 0x21, 0x11, 0xdd, 0x2a, 0xe6, 0x22, 0x40, 0x21, -0xca, 0xb2, 0x4e, 0x9e, 0x08, 0x54, 0x02, 0x8f, 0x59, 0xd3, 0xa7, 0x73, -0xd3, 0xdc, 0x6e, 0xe3, 0x5b, 0x5d, 0xff, 0x50, 0x4a, 0xe3, 0xce, 0xb9, -0x19, 0xa9, 0xaf, 0xbc, 0xf4, 0x52, 0x10, 0x6f, 0x1a, 0x5a, 0x43, 0xc9, -0xf6, 0x41, 0xa7, 0x0e, 0xd6, 0xc4, 0x59, 0xbd, 0x4e, 0x52, 0x56, 0x9d, -0xb8, 0x38, 0x67, 0x7c, 0x42, 0x4a, 0x52, 0xf5, 0x5a, 0x5d, 0xc7, 0xce, -0x29, 0x9b, 0x11, 0x59, 0xbe, 0x21, 0xa4, 0xe5, 0x02, 0xb9, 0xd0, 0xe2, -0x15, 0xb2, 0x04, 0x18, 0x3a, 0xfa, 0x2e, 0xd8, 0xc0, 0xcc, 0x47, 0x0c, -0x1a, 0x88, 0x49, 0x2a, 0x58, 0x42, 0x94, 0x01, 0x18, 0xca, 0x36, 0x25, -0x32, 0x15, 0x62, 0xe4, 0xcc, 0x69, 0x53, 0x29, 0xa0, 0x90, 0x10, 0x9f, -0x84, 0x55, 0xea, 0xea, 0x65, 0xcb, 0x22, 0x96, 0x51, 0xb0, 0x50, 0x82, -0x0a, 0x38, 0xe9, 0xe3, 0xe7, 0xce, 0x0d, 0xee, 0xd7, 0x67, 0xdc, 0xb0, -0x61, 0x1b, 0xd6, 0xae, 0x59, 0xb5, 0x6c, 0x69, 0x9f, 0x2e, 0x85, 0x29, -0xf1, 0x71, 0xce, 0xcc, 0xdc, 0xf1, 0x7b, 0x9f, 0x2d, 0x17, 0x7a, 0xad, -0x18, 0xd5, 0xc5, 0x0a, 0x15, 0x50, 0x5a, 0x69, 0x3d, 0xa8, 0xaa, 0xa3, -0x57, 0xe8, 0xab, 0xdc, 0xf5, 0xd0, 0xe7, 0xd5, 0x5a, 0xf6, 0x4d, 0x74, -0x38, 0x08, 0xbf, 0x29, 0x0f, 0x54, 0xa8, 0x17, 0x2f, 0xd8, 0x50, 0x07, -0x89, 0x4d, 0x57, 0x2e, 0x58, 0xf0, 0xf8, 0xa3, 0x8f, 0x02, 0x95, 0xd0, -0xda, 0xdd, 0x83, 0x3e, 0x5b, 0xdd, 0xa2, 0xad, 0xea, 0xcd, 0x11, 0x60, -0x7f, 0xf3, 0x86, 0x0d, 0xa9, 0x71, 0x8e, 0xd4, 0x5a, 0x05, 0x4d, 0x76, -0x9b, 0x23, 0x2c, 0x43, 0x84, 0x6f, 0xd8, 0xe7, 0x15, 0x84, 0xe8, 0x55, -0xbc, 0x6f, 0xdb, 0x72, 0xbf, 0x41, 0x88, 0xea, 0x7f, 0x55, 0x89, 0x2b, -0x88, 0xa3, 0x73, 0x21, 0xbe, 0xb9, 0x0a, 0x08, 0xbb, 0x50, 0xfe, 0xf2, -0xa0, 0xd3, 0x56, 0x48, 0x0f, 0xa8, 0x5b, 0xb4, 0x05, 0x18, 0xe2, 0xda, -0x5a, 0xb5, 0x72, 0xa5, 0xeb, 0xed, 0x4c, 0xb9, 0x2a, 0x54, 0x81, 0x61, -0x5f, 0xaf, 0xa8, 0x3a, 0xa8, 0xe8, 0xbf, 0xf2, 0x80, 0x2b, 0xb8, 0xa0, -0xa0, 0xc9, 0x1b, 0xaf, 0xbd, 0xa6, 0xa2, 0x68, 0x23, 0x59, 0x9e, 0xa9, -0x44, 0x68, 0x19, 0x80, 0x41, 0x64, 0x00, 0x4e, 0x1e, 0xb2, 0xb2, 0x7a, -0x74, 0xee, 0xe4, 0x48, 0x48, 0x19, 0xb5, 0xe9, 0x74, 0x48, 0x96, 0x4e, -0x0b, 0x39, 0x54, 0xe0, 0xd1, 0x73, 0xd6, 0x6c, 0x9a, 0x57, 0xbd, 0xda, -0xc3, 0x67, 0xcf, 0xaa, 0xcc, 0xe9, 0x48, 0x0e, 0xd1, 0xab, 0x44, 0x48, -0xc8, 0xad, 0x0d, 0xb1, 0x64, 0x02, 0x8c, 0x47, 0x1f, 0x7a, 0x08, 0xfb, -0x75, 0xcb, 0x51, 0x0b, 0x42, 0x32, 0x2c, 0x2a, 0xe4, 0x50, 0xd1, 0x73, -0xc1, 0xcd, 0xcc, 0x79, 0xe1, 0xe5, 0x97, 0xab, 0xcc, 0xe9, 0x48, 0xae, -0x27, 0x50, 0xe9, 0x90, 0x50, 0x0a, 0x98, 0x5e, 0xa1, 0x54, 0xba, 0x84, -0x51, 0xe1, 0x97, 0x18, 0xfe, 0xf6, 0xfb, 0xcc, 0x99, 0x2a, 0x55, 0x5e, -0xbb, 0xb0, 0x83, 0x0a, 0xa0, 0x8f, 0xbf, 0xa6, 0x2a, 0x48, 0x50, 0x34, -0x52, 0xa1, 0xb9, 0x4e, 0x83, 0xda, 0xb5, 0xe8, 0x47, 0x81, 0x62, 0xc7, -0xea, 0x47, 0x78, 0xe4, 0x45, 0x55, 0x40, 0x85, 0x62, 0x17, 0x7a, 0x33, -0x24, 0x62, 0x02, 0xae, 0x5e, 0xe6, 0x8a, 0x94, 0x19, 0xb7, 0x25, 0x04, -0x7b, 0xbe, 0x58, 0xa1, 0xc2, 0x68, 0x83, 0xaa, 0x3a, 0xa8, 0x18, 0xbd, -0xc3, 0x55, 0x8d, 0x6b, 0xec, 0xc8, 0x91, 0x84, 0x9f, 0x48, 0xba, 0x85, -0x42, 0x45, 0x15, 0xa1, 0x8f, 0x88, 0x9d, 0x86, 0x41, 0xc1, 0x20, 0xf2, -0x40, 0x72, 0x56, 0xfb, 0x5c, 0x7e, 0x73, 0xe8, 0x99, 0x68, 0xbd, 0xa2, -0x02, 0x1b, 0x6d, 0xd5, 0x41, 0xc5, 0xc0, 0xa5, 0x25, 0x94, 0xee, 0xbb, -0x71, 0xcd, 0x1a, 0x32, 0xa7, 0xa5, 0xea, 0x47, 0x84, 0x67, 0xc3, 0x55, -0x29, 0x10, 0x2a, 0x60, 0x48, 0x1e, 0x3c, 0x61, 0x32, 0x35, 0xd3, 0x93, -0x1b, 0xf4, 0x9b, 0x16, 0x7a, 0x65, 0x36, 0x43, 0x0b, 0x15, 0xdd, 0x26, -0xcc, 0xaf, 0x91, 0x91, 0x41, 0xd5, 0x8f, 0x68, 0x8e, 0x68, 0x95, 0xc2, -0x83, 0x9a, 0x0c, 0xc0, 0x50, 0x95, 0xde, 0xdf, 0x7b, 0xf7, 0x5d, 0x0a, -0xc2, 0x27, 0x37, 0xee, 0xd2, 0x6c, 0xdf, 0xdf, 0x43, 0x8c, 0x5d, 0xd8, -0x47, 0x05, 0xe6, 0xb6, 0x4a, 0xf7, 0x57, 0xb4, 0xee, 0x3e, 0xb0, 0x76, -0x4e, 0x0e, 0xe9, 0x72, 0xc4, 0xa5, 0x48, 0x3d, 0xf0, 0x0a, 0x70, 0x56, -0x54, 0x4d, 0xfa, 0xab, 0x9a, 0xb3, 0x12, 0x76, 0x21, 0x95, 0xde, 0xe1, -0xe7, 0x83, 0xfa, 0xf4, 0x74, 0x64, 0xd4, 0xe9, 0x74, 0x20, 0xd4, 0xfa, -0x83, 0x85, 0x16, 0x2a, 0x1a, 0x36, 0x6d, 0xdd, 0xb8, 0x6e, 0x6d, 0xc2, -0x9f, 0x08, 0xd7, 0x8b, 0x66, 0x4e, 0x57, 0x59, 0x60, 0xa8, 0x4a, 0xef, -0x33, 0xa6, 0x4c, 0x82, 0xc0, 0x26, 0xec, 0x7d, 0x2e, 0xa4, 0x78, 0xc5, -0x7f, 0xf4, 0xdd, 0x5f, 0x45, 0x07, 0x96, 0xd1, 0xb6, 0x95, 0x5e, 0x51, -0x15, 0x78, 0x45, 0x5e, 0xdd, 0x46, 0xed, 0x5a, 0x36, 0x27, 0x86, 0x11, -0x9b, 0x18, 0x56, 0x0e, 0x84, 0xd7, 0x60, 0x25, 0x1e, 0x55, 0x4d, 0x0a, -0x0b, 0xc5, 0x59, 0xa9, 0x6c, 0x24, 0x38, 0xf9, 0xbc, 0xd9, 0x33, 0xa1, -0xb0, 0x9e, 0x37, 0x3d, 0x18, 0x52, 0xa8, 0x28, 0x13, 0x49, 0x2e, 0xa8, -0x90, 0x12, 0xf4, 0xa5, 0x71, 0x50, 0x55, 0x0a, 0x15, 0xa9, 0x19, 0xd9, -0xfd, 0x7b, 0xf7, 0xa2, 0xcb, 0x06, 0xf9, 0x1e, 0x51, 0x54, 0x54, 0x4d, -0xcc, 0xe8, 0xa8, 0x98, 0x3b, 0xcb, 0x85, 0x8a, 0xe6, 0x57, 0x87, 0x5a, -0xf1, 0x59, 0x93, 0x04, 0x65, 0x8d, 0x0a, 0x24, 0x96, 0xaa, 0xc0, 0x2b, -0x12, 0x93, 0x32, 0x06, 0xf5, 0xeb, 0xcb, 0x4c, 0x14, 0x2a, 0xa2, 0x7a, -0x45, 0x55, 0xc3, 0x86, 0xa0, 0x02, 0x33, 0x14, 0xc6, 0xd9, 0x79, 0xb3, -0x67, 0xb9, 0x78, 0xc5, 0xba, 0x10, 0xe6, 0x15, 0xef, 0xbd, 0xf7, 0x1e, -0x12, 0x7b, 0x95, 0x46, 0x45, 0x4a, 0x66, 0x76, 0x87, 0x56, 0x2d, 0xa3, -0xa8, 0xa8, 0x6a, 0x48, 0x30, 0x04, 0xe1, 0x2b, 0x54, 0xcc, 0x99, 0xe1, -0x4a, 0x4a, 0x99, 0xb8, 0x3b, 0x84, 0xa2, 0xca, 0xff, 0x63, 0xc8, 0xc5, -0xf3, 0x82, 0x0a, 0xe4, 0x96, 0x4a, 0xb7, 0x41, 0xe5, 0xd5, 0x6b, 0xd2, -0xb8, 0x6e, 0x1d, 0x5d, 0x82, 0x8a, 0xf2, 0x8a, 0x2a, 0x85, 0x10, 0xdd, -0x65, 0x41, 0xdd, 0xd1, 0x41, 0xbd, 0x7b, 0x38, 0xaa, 0xd5, 0x2b, 0x3c, -0x18, 0x42, 0x36, 0x28, 0x4f, 0xa8, 0x38, 0x72, 0xe4, 0x48, 0x32, 0x15, -0xf7, 0xf8, 0x87, 0x5e, 0x81, 0xbf, 0xac, 0x8a, 0x48, 0x50, 0xf9, 0x1d, -0x7a, 0xd7, 0xc9, 0xcd, 0xa1, 0x46, 0xb2, 0xd2, 0xb6, 0xa3, 0xa8, 0xa8, -0x82, 0xa8, 0x10, 0xcb, 0xec, 0x4b, 0x2f, 0xbe, 0x58, 0x3b, 0x23, 0xa5, -0x41, 0xd1, 0x25, 0xcd, 0x43, 0xae, 0x15, 0xb7, 0xb6, 0xfd, 0xeb, 0xbc, -0xa2, 0x8a, 0xa2, 0xa2, 0x5d, 0xff, 0x71, 0x35, 0xb3, 0xaa, 0xbf, 0xf8, -0xe2, 0x8b, 0xd1, 0x9a, 0x96, 0x55, 0x0a, 0x0c, 0x6a, 0x32, 0x7a, 0x35, -0xeb, 0x53, 0x77, 0xdd, 0x05, 0x75, 0x15, 0x2d, 0xdb, 0x55, 0x6d, 0x87, -0x45, 0x33, 0x90, 0x2a, 0x6c, 0x95, 0x2a, 0x63, 0x99, 0x55, 0xa8, 0xa0, -0x42, 0x9f, 0x05, 0x2a, 0xaa, 0x82, 0x04, 0xd5, 0x6d, 0xdc, 0xfc, 0xec, -0x8c, 0x8c, 0xfb, 0xef, 0xbb, 0x4f, 0x79, 0xf1, 0xa2, 0x11, 0x1f, 0x55, -0x07, 0x1e, 0xe2, 0xd8, 0x16, 0x46, 0x81, 0xaa, 0xbd, 0x7c, 0xf1, 0x22, -0x50, 0x31, 0xbe, 0xf8, 0xe1, 0x2a, 0x0c, 0x00, 0x73, 0xf4, 0xae, 0x8f, -0x12, 0x54, 0x55, 0x40, 0x45, 0xbf, 0xf9, 0x6b, 0xe9, 0x68, 0xb1, 0x77, -0xd7, 0x2e, 0x6c, 0x02, 0x12, 0x07, 0x15, 0x8d, 0x99, 0xad, 0x0a, 0xa8, -0x50, 0xb5, 0x51, 0xa4, 0x6e, 0x1a, 0x7e, 0xa4, 0x0f, 0x3f, 0xf8, 0xa0, -0x61, 0x6e, 0x8d, 0xe4, 0xba, 0xad, 0x3b, 0x1c, 0xf8, 0x22, 0xd4, 0x50, -0x61, 0xcd, 0x2b, 0xf0, 0x57, 0x54, 0x51, 0x5e, 0x31, 0x72, 0xe3, 0xbd, -0xd4, 0xdc, 0x9f, 0x33, 0x7b, 0x36, 0x31, 0xb3, 0x86, 0x8e, 0x16, 0xd1, -0x5c, 0xbc, 0xca, 0x82, 0x87, 0x0e, 0x09, 0x29, 0x30, 0xc7, 0x6e, 0x75, -0xeb, 0xc1, 0x83, 0x30, 0x8a, 0x76, 0xd3, 0xae, 0xc9, 0xdd, 0xf9, 0xaf, -0x28, 0x2a, 0xca, 0x37, 0xa1, 0xa4, 0x55, 0xc9, 0xa7, 0xf4, 0x0e, 0xee, -0xda, 0xa9, 0x23, 0xc6, 0x59, 0xbd, 0xa3, 0x45, 0x24, 0x97, 0xf1, 0xab, -0x2c, 0x30, 0xe8, 0x11, 0x81, 0x52, 0x76, 0x51, 0x5a, 0x81, 0x21, 0x3b, -0x7d, 0xfa, 0xbb, 0xdf, 0x75, 0x6d, 0xdf, 0x26, 0x21, 0x23, 0x6f, 0xc2, -0xae, 0xa7, 0x43, 0x0d, 0x12, 0xc6, 0x2a, 0x69, 0x5e, 0xb4, 0xed, 0xaa, -0x20, 0x41, 0xd5, 0xd8, 0xfe, 0x55, 0xa3, 0x5e, 0x63, 0xd2, 0x9c, 0x09, -0x08, 0x51, 0xaa, 0xa3, 0x85, 0xb4, 0xf7, 0xd5, 0xbb, 0x7b, 0x55, 0x3a, -0xa1, 0x44, 0xc8, 0x04, 0x84, 0x4b, 0xa8, 0x6a, 0x8b, 0xc2, 0x25, 0x88, -0xda, 0x2c, 0xde, 0xb6, 0x15, 0x96, 0xde, 0x73, 0xda, 0x52, 0xea, 0x4e, -0x84, 0x14, 0x2a, 0x7e, 0xd8, 0xd3, 0x6d, 0xda, 0xa0, 0x20, 0xc1, 0xaa, -0x80, 0x0a, 0x96, 0x78, 0xc4, 0x2d, 0x67, 0x1d, 0xb1, 0xce, 0xfc, 0x7a, -0xf5, 0x48, 0xc7, 0x13, 0x76, 0x21, 0xa5, 0x35, 0x05, 0x18, 0xd2, 0x10, -0x5e, 0x95, 0xe4, 0xb0, 0xfc, 0x10, 0x21, 0x24, 0x5b, 0xae, 0x8f, 0xa9, -0xa4, 0x26, 0x1d, 0x12, 0x52, 0xe3, 0x03, 0x5b, 0x48, 0x8d, 0xd4, 0x24, -0x67, 0x46, 0x4e, 0x08, 0x42, 0xe2, 0x82, 0xaa, 0x5d, 0xb6, 0xa2, 0xa6, -0x27, 0x1b, 0x54, 0xd5, 0x41, 0x05, 0x6d, 0xc1, 0x7a, 0x5f, 0x59, 0x0c, -0x98, 0x5b, 0x36, 0x6d, 0x4a, 0x19, 0x66, 0xe9, 0x68, 0x01, 0x30, 0xe0, -0x18, 0x08, 0xb5, 0x60, 0x03, 0x1b, 0x88, 0xc0, 0xc3, 0x7c, 0xe8, 0x95, -0x9d, 0xe4, 0xbd, 0x96, 0x2b, 0xe9, 0x84, 0xdf, 0xe0, 0x0a, 0x0c, 0x7a, -0x93, 0x4e, 0xa9, 0xe2, 0x2e, 0x5c, 0xe2, 0xd5, 0x57, 0x5e, 0x69, 0x52, -0xbf, 0x1e, 0x95, 0x67, 0x07, 0x5e, 0x77, 0x2c, 0x04, 0xb9, 0x04, 0xa8, -0x70, 0x6b, 0x83, 0xb2, 0xb0, 0xcc, 0x82, 0x0a, 0x22, 0x07, 0x2b, 0xdd, -0xb7, 0x2d, 0x0b, 0x4d, 0x03, 0xa4, 0x3e, 0x57, 0xb8, 0x7a, 0x07, 0xb7, -0x69, 0xd9, 0xe2, 0x85, 0xe7, 0x9f, 0x17, 0x60, 0xf0, 0x56, 0x30, 0x7d, -0xf0, 0x7a, 0x78, 0x49, 0x02, 0x0f, 0x39, 0xa4, 0x24, 0xa6, 0x1c, 0xd2, -0x2c, 0x4f, 0x61, 0xc6, 0xdc, 0x3c, 0x32, 0xfc, 0xe8, 0x38, 0x58, 0x4f, -0xa4, 0xb8, 0xae, 0x8e, 0x07, 0x29, 0xc2, 0x2b, 0xad, 0x70, 0x48, 0xd8, -0x7c, 0xe0, 0x81, 0x07, 0x9a, 0x36, 0x68, 0xe0, 0xca, 0x4a, 0x5d, 0xb0, -0x91, 0x52, 0xd9, 0x21, 0x8b, 0x0a, 0xdb, 0xfe, 0x8a, 0x2a, 0x85, 0x0a, -0x17, 0x30, 0x76, 0x7d, 0xe1, 0x4a, 0x08, 0x76, 0xc4, 0x14, 0xb6, 0x6f, -0x47, 0x26, 0x24, 0xc1, 0x82, 0x18, 0xce, 0xd8, 0xab, 0x08, 0xa4, 0xe5, -0x0d, 0xc1, 0x3a, 0xe0, 0xe6, 0xbc, 0x2d, 0xc1, 0x89, 0x1c, 0x48, 0x59, -0x1c, 0xbc, 0x45, 0x05, 0x1b, 0x83, 0xc4, 0x15, 0x2c, 0x02, 0x0a, 0xbf, -0x71, 0x74, 0x79, 0x49, 0xef, 0x6e, 0xce, 0x22, 0x0b, 0x8b, 0xc0, 0xa9, -0xba, 0x79, 0xe3, 0xc6, 0xac, 0x8c, 0x74, 0x6a, 0x40, 0xf5, 0x9e, 0xbf, -0x31, 0xc4, 0xeb, 0xcc, 0x86, 0x2c, 0x2a, 0x5c, 0x85, 0xfb, 0x77, 0xfd, -0xb5, 0xd7, 0xfc, 0xf5, 0x8e, 0x98, 0xd8, 0x4e, 0x6d, 0xdb, 0x3c, 0xf9, -0xe4, 0x93, 0x78, 0x30, 0xc0, 0x06, 0x85, 0x3f, 0x80, 0x07, 0xfb, 0x16, -0xaf, 0x0a, 0x06, 0x02, 0x48, 0xe4, 0xa0, 0x1a, 0x88, 0xa0, 0x45, 0x01, -0x06, 0x84, 0x98, 0xbb, 0x77, 0x87, 0x1f, 0x41, 0x07, 0xfe, 0x44, 0xba, -0xe1, 0x55, 0x9a, 0x7b, 0xb0, 0xc5, 0x08, 0x1e, 0x58, 0x61, 0xbc, 0x46, -0x3f, 0x7e, 0xe5, 0x95, 0xc9, 0xe3, 0xc7, 0xc5, 0x50, 0x86, 0x39, 0xa7, -0xfe, 0xc0, 0xd5, 0xb7, 0x85, 0x26, 0x97, 0x40, 0x06, 0xf9, 0x41, 0xa9, -0x28, 0xab, 0x57, 0xbc, 0xfb, 0xee, 0xbb, 0xf4, 0x9b, 0x26, 0xa6, 0xab, -0xaa, 0x4b, 0x50, 0x8a, 0x35, 0xc3, 0x31, 0x7a, 0xcd, 0x5b, 0x07, 0xcb, -0xae, 0x5f, 0x33, 0x6f, 0xf2, 0x84, 0x09, 0xeb, 0xd6, 0xae, 0xdd, 0xb4, -0x7e, 0xfd, 0xf1, 0xdb, 0x6e, 0xc3, 0x6e, 0x0b, 0x73, 0x63, 0x03, 0x03, -0x27, 0x1c, 0x28, 0xe5, 0xa0, 0x45, 0x00, 0xc3, 0x5b, 0x04, 0x33, 0x4a, -0xe2, 0x32, 0xab, 0xe9, 0x81, 0x93, 0x51, 0x98, 0x8d, 0x60, 0x2e, 0x9b, -0xc9, 0x16, 0xc3, 0xa6, 0xc3, 0x62, 0xb2, 0xb6, 0x74, 0x94, 0x2d, 0xb8, -0x20, 0x35, 0x15, 0x8e, 0x98, 0x51, 0xb0, 0xe7, 0x6f, 0x21, 0x28, 0x35, -0x19, 0x7c, 0x09, 0x17, 0x54, 0x0b, 0x93, 0x0d, 0xca, 0x02, 0x15, 0x3c, -0x7f, 0x55, 0x93, 0xa0, 0xd4, 0xea, 0xd3, 0x35, 0xaf, 0xd7, 0xc2, 0x2d, -0x09, 0x35, 0xea, 0xb2, 0x57, 0x25, 0xc5, 0xc7, 0x53, 0x01, 0x04, 0xe7, -0x77, 0xbb, 0x16, 0x2d, 0xb0, 0x84, 0x10, 0x16, 0x0f, 0xca, 0xf9, 0x1f, -0x8d, 0x08, 0x03, 0x1a, 0x50, 0xa1, 0xa4, 0x15, 0xee, 0x3f, 0x0e, 0x18, -0x0b, 0x98, 0x01, 0xfd, 0xb0, 0x11, 0x61, 0x1a, 0x51, 0x69, 0xca, 0x12, -0xcc, 0xe6, 0x7a, 0x36, 0x82, 0x87, 0x0f, 0x3e, 0xf8, 0x60, 0xe3, 0xba, -0x9b, 0x0a, 0xdb, 0xb4, 0xa6, 0x48, 0x7b, 0x8c, 0x33, 0xb3, 0xf7, 0x15, -0xb7, 0x84, 0x6a, 0x49, 0xd9, 0xd2, 0x22, 0xe7, 0x8a, 0x57, 0x84, 0x3e, -0x2a, 0x04, 0x1e, 0x60, 0x63, 0xd4, 0xd6, 0x87, 0x7a, 0x2d, 0x2a, 0x6e, -0x31, 0xed, 0x86, 0x1a, 0x9d, 0x46, 0xc6, 0xc5, 0x25, 0x24, 0x38, 0x1c, -0x79, 0x19, 0xe9, 0xed, 0x9b, 0x17, 0xb4, 0x29, 0x68, 0x7c, 0xe1, 0x27, -0xbf, 0x6d, 0x41, 0x7e, 0x87, 0xe6, 0x4d, 0xf3, 0x6b, 0xe7, 0xa5, 0xc5, -0xc6, 0xd0, 0x7f, 0x9b, 0x9f, 0x94, 0x18, 0x47, 0x97, 0x4e, 0x9d, 0x30, -0x64, 0x49, 0x53, 0x56, 0xb3, 0x6d, 0x37, 0xcc, 0x76, 0x7d, 0x5f, 0x1f, -0x47, 0x20, 0x21, 0x35, 0x3b, 0xe8, 0x2b, 0x7b, 0xd3, 0x8d, 0x37, 0xae, -0x5c, 0xb2, 0x78, 0xea, 0xb8, 0xb1, 0x9d, 0xdb, 0xb4, 0xac, 0x91, 0xe2, -0x4c, 0x88, 0x89, 0x8d, 0x4f, 0x48, 0x2e, 0x1c, 0x31, 0x33, 0x64, 0x45, -0x26, 0xcb, 0x20, 0xa8, 0xb0, 0xe0, 0x15, 0x3a, 0xcb, 0xce, 0x28, 0xfe, -0x06, 0x78, 0xb4, 0x2d, 0xf9, 0xed, 0x88, 0xeb, 0x8f, 0xf5, 0x9d, 0xb6, -0xa4, 0x73, 0xd1, 0x88, 0xd6, 0x5d, 0xfb, 0x16, 0xb4, 0xef, 0x5e, 0xb7, -0x69, 0x87, 0xcc, 0xba, 0x4d, 0x53, 0x72, 0x1b, 0xa6, 0xe4, 0x34, 0x4c, -0xad, 0x5d, 0x90, 0xd1, 0xb0, 0x7d, 0x66, 0xa3, 0x0e, 0xd5, 0x9a, 0x14, -0xd2, 0x35, 0x18, 0x56, 0xb9, 0x61, 0xdd, 0x3a, 0x69, 0xca, 0x2a, 0xd2, -0x94, 0x32, 0xec, 0x46, 0xb8, 0x85, 0x4a, 0x79, 0xe8, 0x24, 0xda, 0xef, -0xc8, 0xad, 0xb7, 0xc6, 0xc7, 0xc6, 0x3a, 0x62, 0x12, 0x9d, 0xe9, 0x39, -0xc9, 0xd9, 0x0d, 0x9a, 0x74, 0x1d, 0x3a, 0x64, 0xc9, 0x56, 0x5a, 0x4f, -0x85, 0xbe, 0xc8, 0xe4, 0x45, 0x82, 0x72, 0xab, 0x57, 0x54, 0x65, 0x09, -0xca, 0xfd, 0x5b, 0x39, 0xaf, 0xff, 0xc9, 0xb9, 0xed, 0xfb, 0xac, 0x1d, -0xdf, 0xd4, 0xdd, 0xf9, 0x0f, 0x36, 0xb6, 0x56, 0x7b, 0x3f, 0xa7, 0xf8, -0x69, 0xe1, 0xfe, 0x3f, 0xb5, 0xbc, 0xee, 0x3e, 0x50, 0x41, 0x59, 0x79, -0x1e, 0x50, 0xd7, 0x34, 0x44, 0x0b, 0x8f, 0x64, 0x99, 0xca, 0x10, 0xda, -0xc4, 0x96, 0x71, 0xd3, 0x1a, 0x57, 0xef, 0xe0, 0x86, 0x53, 0xd7, 0x8e, -0xd8, 0xf1, 0x54, 0x87, 0x03, 0x9f, 0xe7, 0xee, 0x0c, 0xfd, 0x56, 0xf3, -0xc6, 0x06, 0x31, 0xe2, 0xac, 0x30, 0xfa, 0x2b, 0x3c, 0xa1, 0x02, 0x41, -0x1c, 0x01, 0xbd, 0x8a, 0xf8, 0x2b, 0x82, 0xb5, 0x3f, 0x0d, 0xdd, 0xf2, -0x28, 0x4f, 0x34, 0x79, 0xec, 0x58, 0x9e, 0x0e, 0x8d, 0x1c, 0x45, 0x1c, -0x35, 0x43, 0x1c, 0x82, 0x22, 0x50, 0x49, 0x01, 0x91, 0x48, 0x63, 0x1a, -0x86, 0x00, 0x58, 0x58, 0x28, 0x4d, 0x42, 0x86, 0x0c, 0xec, 0xcf, 0x5a, -0x75, 0x3d, 0x44, 0x56, 0x5d, 0x99, 0xed, 0x26, 0x58, 0xef, 0xa2, 0x52, -0xc7, 0xd1, 0x34, 0x0a, 0x93, 0x6f, 0xdb, 0x0b, 0x2a, 0xaa, 0x8e, 0x17, -0x2f, 0x58, 0x2b, 0x88, 0x82, 0x98, 0xde, 0xbc, 0x27, 0xda, 0x45, 0x49, -0x71, 0x31, 0x8a, 0x38, 0x16, 0x05, 0x4b, 0x6c, 0x44, 0x5a, 0xe8, 0xa1, -0x52, 0x27, 0x44, 0x76, 0xc2, 0x08, 0xbb, 0x71, 0x9d, 0xcb, 0xd0, 0xd7, -0x6b, 0xfa, 0x8a, 0x60, 0xad, 0x7c, 0x15, 0x1b, 0x47, 0xe3, 0x12, 0x51, -0x54, 0xf0, 0x6e, 0x8a, 0xae, 0x3d, 0x16, 0xe7, 0x4c, 0x4d, 0x8e, 0x73, -0x4c, 0x9d, 0x30, 0xe1, 0xb1, 0x73, 0xe7, 0x04, 0x1b, 0xd8, 0xa6, 0xb0, -0xb4, 0x88, 0xb3, 0x5c, 0x69, 0xe1, 0xc2, 0x31, 0x7c, 0x55, 0x58, 0x43, -0xee, 0x7c, 0xc5, 0x28, 0xc4, 0x35, 0x01, 0xf3, 0xdc, 0xb4, 0x6e, 0x1d, -0x96, 0x89, 0xa4, 0xda, 0xcd, 0x9a, 0x87, 0x47, 0x7f, 0x54, 0xeb, 0xce, -0x7a, 0x3f, 0xc8, 0x4e, 0xbe, 0xa2, 0x22, 0xfc, 0x24, 0x28, 0x50, 0x41, -0xe9, 0xff, 0xa2, 0xeb, 0x8f, 0x27, 0xd7, 0x6c, 0x42, 0x8c, 0x67, 0x4a, -0x5c, 0x4c, 0xf3, 0x86, 0xf5, 0xa7, 0x8e, 0x1f, 0xb7, 0x7b, 0xe7, 0x4e, -0xcc, 0xb8, 0x22, 0x50, 0xb1, 0x53, 0x2a, 0x9f, 0x46, 0x24, 0x00, 0x43, -0xb7, 0x3b, 0xe1, 0x8e, 0x28, 0xea, 0xd5, 0x8b, 0x95, 0x49, 0xce, 0xaa, -0x33, 0x75, 0xf7, 0x53, 0x55, 0x6c, 0x83, 0x0f, 0x7a, 0xce, 0x82, 0x2f, -0x5e, 0x3c, 0xf2, 0x8f, 0x50, 0x46, 0xc3, 0x52, 0xaf, 0x28, 0x75, 0x7a, -0x94, 0xfc, 0x65, 0xd0, 0xf2, 0x9d, 0x4d, 0xfb, 0x4e, 0xc0, 0x4e, 0xe5, -0xc0, 0xe7, 0x11, 0xe3, 0x58, 0xb7, 0x66, 0x0d, 0x0e, 0x0d, 0x1e, 0x5c, -0x80, 0x21, 0x1c, 0x43, 0xe9, 0x18, 0x21, 0xc7, 0x01, 0xec, 0x4f, 0x58, -0x2f, 0xd2, 0x31, 0x77, 0x16, 0xd5, 0x9c, 0x62, 0xfa, 0xce, 0xbc, 0xba, -0xe5, 0xa1, 0xf0, 0xd3, 0xad, 0x75, 0x50, 0x95, 0x65, 0x14, 0x76, 0x7c, -0xdb, 0x91, 0x80, 0x0a, 0x81, 0x47, 0xf6, 0x8e, 0x7f, 0xb6, 0xd9, 0xf5, -0xd9, 0x80, 0xd5, 0xb7, 0x27, 0xd7, 0x6a, 0x82, 0x18, 0x7d, 0xed, 0xca, -0x95, 0x52, 0x1b, 0x4b, 0x01, 0x43, 0x57, 0xbe, 0xed, 0xd3, 0x59, 0x68, -0x9d, 0xa9, 0x50, 0x71, 0xf2, 0xf8, 0xf1, 0x94, 0xa4, 0xa4, 0xea, 0x1d, -0x86, 0xf5, 0xb8, 0x2d, 0x2c, 0x1a, 0xcb, 0xfb, 0xd4, 0x92, 0x58, 0x33, -0x2b, 0x59, 0x6b, 0xdb, 0x91, 0x83, 0x8a, 0x1f, 0x58, 0xc7, 0x79, 0x82, -0xdb, 0xda, 0xf5, 0x1a, 0x42, 0x5b, 0xb7, 0x55, 0x2b, 0x56, 0x50, 0xf2, -0x07, 0x60, 0x88, 0x43, 0x43, 0x72, 0xc4, 0xc3, 0x9b, 0x63, 0x28, 0x54, -0x0c, 0x1d, 0x3c, 0x18, 0xda, 0xa8, 0xde, 0x76, 0xe0, 0xc8, 0x2d, 0x0f, -0x5f, 0xe0, 0x15, 0xe1, 0x67, 0x7a, 0x12, 0x76, 0x61, 0x62, 0x14, 0x51, -0x5e, 0xe1, 0x4e, 0x56, 0xc6, 0x3c, 0xd5, 0xb6, 0xe7, 0x10, 0x57, 0xb7, -0xf9, 0xe5, 0xcb, 0x25, 0xe9, 0x4f, 0xca, 0xda, 0x86, 0x3d, 0x30, 0x94, -0x5e, 0x71, 0xfb, 0xb1, 0x63, 0x5d, 0x3b, 0x76, 0x44, 0xcf, 0x8e, 0x4b, -0x48, 0x49, 0xab, 0xdf, 0xba, 0xcf, 0xf4, 0x15, 0x61, 0xaa, 0x6d, 0xfb, -0x8b, 0x0a, 0x6c, 0x32, 0xe1, 0xad, 0x57, 0x58, 0x62, 0x83, 0xd0, 0xc3, -0x36, 0x3d, 0x06, 0xa3, 0x63, 0xac, 0x5a, 0xbe, 0x1c, 0x1d, 0x03, 0xe5, -0x3b, 0x12, 0x38, 0x86, 0x6e, 0x83, 0xc2, 0x16, 0xbf, 0x73, 0xc7, 0x8e, -0xb1, 0xc3, 0x86, 0xe4, 0xd7, 0xcc, 0x73, 0x85, 0xc4, 0x56, 0xaf, 0xdd, -0x7b, 0xfe, 0x86, 0xb0, 0x08, 0x01, 0xf4, 0xa8, 0x54, 0xb8, 0xe1, 0x15, -0x44, 0x97, 0x96, 0xd6, 0xf8, 0xe0, 0x53, 0x64, 0xa2, 0x42, 0xb2, 0x38, -0x92, 0x6b, 0x35, 0x85, 0x63, 0xac, 0x5e, 0xb5, 0x0a, 0x51, 0x4a, 0xac, -0x52, 0x66, 0x8e, 0x11, 0x66, 0x16, 0x5b, 0x83, 0xbf, 0x02, 0xb7, 0x26, -0xc6, 0xa8, 0x92, 0xed, 0xdb, 0x1b, 0xd4, 0xac, 0x89, 0x4c, 0x95, 0xda, -0xa8, 0xc3, 0x80, 0xd5, 0xc7, 0x09, 0xe3, 0x0f, 0x17, 0x93, 0x94, 0x66, -0x7a, 0x52, 0xba, 0x87, 0x1d, 0xbd, 0x02, 0x54, 0x10, 0x49, 0x4b, 0xfc, -0x69, 0x98, 0xf9, 0xb6, 0xed, 0xbc, 0xd7, 0x81, 0x1b, 0xee, 0x4f, 0xae, -0x59, 0x80, 0x75, 0x72, 0xed, 0x0d, 0xd7, 0xeb, 0x1c, 0x23, 0x8c, 0x73, -0x33, 0xf4, 0x1c, 0x23, 0x2c, 0x6f, 0xe2, 0xc8, 0x83, 0x4f, 0xd2, 0xc9, -0x61, 0xd6, 0xf4, 0xe9, 0x59, 0x69, 0xa9, 0xb1, 0x09, 0xc9, 0x7d, 0x08, -0x92, 0x0d, 0x1f, 0x60, 0x98, 0x8c, 0xbc, 0x51, 0x54, 0x78, 0xc6, 0x06, -0x69, 0xe2, 0x83, 0x37, 0x3d, 0x98, 0x94, 0x97, 0x0f, 0x30, 0x08, 0x1a, -0xfd, 0xf4, 0xd3, 0x32, 0xa2, 0x54, 0xb8, 0xd6, 0x16, 0x31, 0x07, 0x7d, -0x00, 0x0c, 0xf8, 0x24, 0xfb, 0xe3, 0x89, 0x13, 0x27, 0x9a, 0x35, 0xc9, -0x87, 0x6c, 0x7a, 0x5c, 0xb2, 0x22, 0x5c, 0x80, 0x61, 0x62, 0x17, 0x51, -0x54, 0x78, 0xe5, 0x18, 0xc4, 0xe1, 0xba, 0x80, 0x91, 0xd3, 0x00, 0x51, -0x8a, 0x20, 0x39, 0x83, 0x8e, 0x11, 0xae, 0xc0, 0xc0, 0xa0, 0xac, 0x7b, -0xf4, 0x84, 0x63, 0x00, 0x0c, 0x0c, 0x0f, 0x2f, 0xbf, 0xf8, 0x62, 0x8f, -0x6e, 0xdd, 0x5c, 0x99, 0x46, 0xc3, 0x2f, 0x6d, 0xb2, 0x2b, 0xb4, 0x4a, -0x03, 0x5a, 0xfa, 0xfe, 0x3c, 0xa1, 0x82, 0x26, 0x8c, 0x3f, 0xfd, 0xe9, -0x4f, 0x8d, 0x59, 0x47, 0xa2, 0x57, 0x44, 0xac, 0x04, 0xa5, 0xf2, 0x37, -0x06, 0x6d, 0x7c, 0x20, 0x29, 0xbb, 0x41, 0x92, 0xc3, 0xb1, 0xce, 0xc5, -0x31, 0x5c, 0xe6, 0xda, 0x48, 0xf0, 0x7c, 0x9b, 0x13, 0xf1, 0x04, 0x18, -0x1f, 0x7f, 0xf2, 0xc9, 0xb4, 0x89, 0x13, 0x5d, 0x05, 0x25, 0xba, 0xf5, -0x0f, 0x17, 0x8e, 0xa1, 0x01, 0xc6, 0x0e, 0xaf, 0x40, 0xfb, 0x8e, 0x70, -0x54, 0xb8, 0x12, 0x9b, 0xf0, 0x7f, 0xaf, 0x3f, 0x93, 0x58, 0xad, 0x4e, -0x72, 0x7c, 0xdc, 0x05, 0x51, 0xca, 0x08, 0x8c, 0x70, 0xf5, 0x63, 0xe8, -0x1c, 0x83, 0xe0, 0x17, 0xd1, 0x31, 0x00, 0xc6, 0x6f, 0x7e, 0xfb, 0x5b, -0x8c, 0x10, 0x49, 0x09, 0x09, 0xad, 0x3b, 0xf7, 0x09, 0x37, 0x60, 0x58, -0xa1, 0x02, 0x14, 0x1c, 0x3e, 0x7c, 0xf8, 0x62, 0xff, 0x8a, 0x28, 0xaf, -0xd0, 0x03, 0x43, 0x06, 0xae, 0x3b, 0xe3, 0xcc, 0xaa, 0x9b, 0x18, 0xe3, -0xb8, 0xf6, 0x82, 0x55, 0xca, 0xec, 0xf9, 0x0e, 0x33, 0x7b, 0x94, 0x38, -0xe6, 0x75, 0x8e, 0x21, 0xa5, 0x6e, 0xe0, 0x18, 0xd2, 0xd5, 0x64, 0xcd, -0xf5, 0xd7, 0x27, 0x3a, 0x1c, 0xed, 0xfb, 0x8e, 0x0c, 0xa3, 0x0c, 0xd5, -0x32, 0xdd, 0x22, 0xdd, 0xfa, 0xb6, 0x45, 0x82, 0x42, 0xba, 0x8a, 0x40, -0x1b, 0x94, 0x41, 0xeb, 0x70, 0x29, 0xdf, 0x1b, 0xee, 0x4b, 0xa9, 0xd5, -0x94, 0xa5, 0x58, 0xba, 0xf8, 0xca, 0xdf, 0xfc, 0xc6, 0x55, 0x1a, 0x9d, -0xbd, 0xd3, 0x50, 0xd5, 0x33, 0xb4, 0xa2, 0x3c, 0xbc, 0xce, 0xd6, 0x50, -0xf9, 0x46, 0xd5, 0x80, 0xe2, 0xd9, 0x31, 0xda, 0x2e, 0x5c, 0x30, 0xdf, -0xa5, 0x63, 0x8c, 0x9c, 0x11, 0x9a, 0xc0, 0x70, 0x79, 0xf1, 0x62, 0x2e, -0xfc, 0x94, 0x96, 0xf9, 0xd0, 0x08, 0xdd, 0x8b, 0x5e, 0x11, 0x45, 0x85, -0x42, 0x08, 0xaf, 0xbf, 0x7d, 0xbf, 0x51, 0x2c, 0xdd, 0x92, 0x45, 0x0b, -0xa5, 0x93, 0x06, 0x46, 0xfd, 0xf0, 0xee, 0x19, 0x60, 0x09, 0x0c, 0xb6, -0x03, 0x80, 0xf1, 0xeb, 0x5f, 0xfd, 0x6a, 0xca, 0xc4, 0x09, 0xac, 0x46, -0xb7, 0x49, 0x57, 0x86, 0x94, 0x28, 0x25, 0x4a, 0xb6, 0xeb, 0xff, 0x98, -0x0b, 0x3f, 0xa5, 0x3b, 0x60, 0x14, 0x15, 0x5e, 0x6d, 0x50, 0x96, 0x27, -0x10, 0x2b, 0xd5, 0xa1, 0xff, 0x58, 0x56, 0x6f, 0xe3, 0xfa, 0x75, 0x52, -0x2b, 0x44, 0x4a, 0x7a, 0x8a, 0x76, 0xe1, 0x75, 0xf7, 0x0d, 0xd1, 0x13, -0x74, 0x07, 0x1f, 0x0f, 0x2b, 0x55, 0x03, 0x01, 0xc6, 0x4f, 0x3f, 0xf9, -0x64, 0xc8, 0xc0, 0x01, 0x2e, 0x73, 0xed, 0xa5, 0x2b, 0x71, 0x7d, 0xfa, -0xb7, 0xa4, 0x95, 0x7a, 0x55, 0x59, 0x33, 0x94, 0x09, 0x15, 0xbf, 0xfe, -0xf5, 0xaf, 0xa3, 0x7a, 0x85, 0xad, 0xd8, 0x7d, 0x72, 0xf9, 0x93, 0xb2, -0xea, 0x66, 0x24, 0x26, 0xdc, 0x71, 0xfc, 0x38, 0x94, 0x21, 0x01, 0xe7, -0x92, 0xb8, 0x17, 0xa2, 0x44, 0x6f, 0x67, 0xda, 0x06, 0xcf, 0x37, 0xc0, -0x10, 0x8e, 0xf1, 0xee, 0xdb, 0x6f, 0x77, 0x29, 0x2c, 0x74, 0x01, 0x63, -0xc6, 0xb5, 0x94, 0x3c, 0xad, 0x54, 0x12, 0xb7, 0xf5, 0xfa, 0xf4, 0x19, -0x96, 0x61, 0x14, 0xee, 0x23, 0x3e, 0x4a, 0xb5, 0x6d, 0x3e, 0x45, 0x6d, -0x50, 0xee, 0xde, 0xf1, 0xc0, 0xb5, 0x77, 0x39, 0xe2, 0x93, 0xf2, 0xeb, -0xd7, 0x47, 0xfa, 0x14, 0xed, 0x42, 0x82, 0x6a, 0xc3, 0x52, 0xe7, 0x56, -0x98, 0xb1, 0x04, 0x06, 0x86, 0x87, 0x17, 0x5f, 0x78, 0xa1, 0x79, 0xbe, -0xcb, 0xc1, 0xd7, 0x77, 0xf9, 0x1e, 0x9c, 0x3c, 0xa1, 0x02, 0x8c, 0x0b, -0xe2, 0x93, 0x5b, 0x5e, 0xa1, 0xb4, 0xed, 0x28, 0xaf, 0xb0, 0xbb, 0xd9, -0xb4, 0xdb, 0xfd, 0x7f, 0x35, 0x07, 0xce, 0x75, 0x26, 0x26, 0x50, 0x42, -0x8f, 0x2a, 0x21, 0x6c, 0x9c, 0x11, 0xd2, 0xd3, 0xd5, 0x9c, 0xdb, 0xcd, -0xe3, 0x23, 0x49, 0x3e, 0xf8, 0xc0, 0x03, 0xb5, 0x73, 0xb2, 0x63, 0x62, -0x13, 0x07, 0xde, 0x74, 0x2a, 0x74, 0x50, 0xa1, 0xb4, 0x6d, 0x8b, 0xfe, -0x15, 0x51, 0x54, 0xd8, 0x05, 0x43, 0xa9, 0xda, 0xbd, 0xeb, 0xf3, 0x46, -0xb3, 0x8a, 0x13, 0x1c, 0x31, 0x4b, 0x17, 0x2f, 0xa6, 0x50, 0x27, 0x3a, -0x77, 0xe4, 0x74, 0xaf, 0x34, 0x78, 0xbe, 0x79, 0x76, 0x80, 0x81, 0x49, -0x6a, 0xdf, 0x9e, 0x3d, 0xa9, 0xf1, 0x71, 0x69, 0x75, 0x5b, 0x84, 0x94, -0xe6, 0x5d, 0xf6, 0xd5, 0x47, 0xf5, 0x8a, 0x40, 0xb6, 0xb4, 0xcc, 0xe2, -0x6f, 0x1a, 0x4c, 0x5d, 0x97, 0x18, 0x1b, 0x77, 0xcd, 0xca, 0x95, 0xd2, -0xbd, 0x32, 0x72, 0x50, 0x61, 0xf0, 0x63, 0x48, 0x0b, 0x0b, 0x71, 0x62, -0x2c, 0x5b, 0xbc, 0x18, 0xba, 0xea, 0x32, 0x66, 0x4e, 0xa8, 0x02, 0xc3, -0xbe, 0x0d, 0x2a, 0x32, 0x63, 0x66, 0xbd, 0x62, 0xa6, 0xee, 0xd8, 0xab, -0x93, 0xe3, 0xe3, 0x29, 0xfc, 0x2c, 0xdd, 0x2b, 0x45, 0xe1, 0x0e, 0x6f, -0xbd, 0x42, 0x57, 0xca, 0x79, 0x52, 0x69, 0x77, 0x24, 0x26, 0x29, 0x89, -0x07, 0xa1, 0x16, 0xc4, 0xc8, 0x61, 0xc3, 0x5c, 0x9a, 0xf7, 0xcc, 0xeb, -0x42, 0xd2, 0x24, 0x15, 0x45, 0x85, 0x57, 0xba, 0xf7, 0x70, 0x42, 0x7a, -0xf1, 0xbf, 0x6a, 0x8f, 0x5c, 0x96, 0x92, 0x90, 0xb0, 0x69, 0xc3, 0x06, -0x41, 0x45, 0x44, 0xf1, 0x0a, 0x3d, 0x82, 0x50, 0x15, 0x8f, 0x42, 0x8e, -0x42, 0x31, 0x7d, 0xe3, 0xf5, 0xd7, 0x5b, 0x37, 0x6f, 0x46, 0x26, 0xdf, -0x80, 0x6b, 0x8e, 0x04, 0xb2, 0xc2, 0x95, 0x73, 0xad, 0x9d, 0x38, 0xa8, -0x68, 0x74, 0xa0, 0xbb, 0x77, 0xd3, 0x68, 0xc7, 0x9f, 0x6b, 0x0d, 0xbe, -0x3c, 0xd5, 0xe9, 0xdc, 0xbe, 0x6d, 0x9b, 0x8e, 0x8a, 0x48, 0xa8, 0x91, -0x63, 0x69, 0x92, 0x92, 0x1e, 0xaa, 0xb8, 0x35, 0x01, 0xc6, 0x99, 0xd3, -0xa7, 0xab, 0xa7, 0x26, 0x27, 0x52, 0x94, 0x76, 0x77, 0xa8, 0xa5, 0x28, -0x45, 0xe3, 0xa0, 0x02, 0xd9, 0x8d, 0x5a, 0x6f, 0xff, 0x55, 0x62, 0x7a, -0x4e, 0x4e, 0x66, 0xc6, 0xe9, 0x7b, 0xee, 0x89, 0x4c, 0x5e, 0x61, 0x0e, -0x94, 0x52, 0x9d, 0x54, 0xd1, 0xbc, 0x37, 0xdc, 0x74, 0x13, 0x04, 0xd6, -0xf5, 0x92, 0x50, 0x2b, 0x3a, 0x18, 0xe5, 0x15, 0x81, 0xa0, 0xa2, 0x68, -0xc1, 0xfa, 0xc4, 0xb8, 0xb8, 0x15, 0x4b, 0x96, 0x20, 0x49, 0x47, 0xa6, -0x5e, 0x61, 0xe0, 0x18, 0xd2, 0x75, 0x1b, 0xcd, 0x1b, 0x8e, 0x81, 0x51, -0xee, 0xa3, 0x0f, 0x3f, 0x2c, 0x6c, 0xdf, 0xd6, 0xe1, 0xcc, 0x0c, 0xb1, -0xea, 0xe5, 0x51, 0xbd, 0x22, 0x00, 0x54, 0x9c, 0xef, 0x30, 0x68, 0x52, -0x72, 0x5c, 0xcc, 0x53, 0x4f, 0x3e, 0x49, 0x29, 0x4e, 0x50, 0x11, 0x69, -0x36, 0x28, 0x83, 0x2f, 0x5c, 0xd7, 0xbc, 0x01, 0x86, 0x68, 0xde, 0x04, -0xd5, 0x92, 0xc6, 0x38, 0xe0, 0xf2, 0x75, 0x01, 0xac, 0xb3, 0xcf, 0x16, -0xf3, 0x40, 0xef, 0x15, 0xe5, 0x15, 0x7e, 0xaf, 0x60, 0xfa, 0xb6, 0x6f, -0x6a, 0x36, 0xed, 0x98, 0x1e, 0x1f, 0x8b, 0xa3, 0x07, 0x54, 0x40, 0x01, -0x11, 0x8e, 0x0a, 0xa5, 0x7c, 0x4b, 0x8d, 0x5a, 0x42, 0x60, 0xd0, 0xbc, -0x09, 0x2a, 0x6d, 0xd1, 0xa4, 0x49, 0xad, 0x06, 0x4d, 0x73, 0x4b, 0x42, -0xa7, 0x00, 0xa1, 0x4d, 0x54, 0x44, 0x60, 0xe5, 0x1b, 0xaf, 0x68, 0x69, -0xb4, 0xe3, 0x4f, 0x29, 0xb9, 0x8d, 0xea, 0xe7, 0x66, 0x93, 0xe6, 0x4f, -0xf4, 0x18, 0xa6, 0xfa, 0x88, 0xf2, 0xe2, 0x79, 0xe8, 0x18, 0x86, 0xad, -0x16, 0x60, 0x88, 0x07, 0x83, 0xcd, 0x62, 0xcc, 0xf0, 0xe1, 0x31, 0x8e, -0xb8, 0xf6, 0xfb, 0xa8, 0xf2, 0x5f, 0xe1, 0xbb, 0xbe, 0x7f, 0x77, 0x8c, -0xa2, 0xc2, 0xef, 0x57, 0xd5, 0xaa, 0xf8, 0x7f, 0x93, 0xaa, 0xd7, 0xee, -0xd8, 0xba, 0xe5, 0x87, 0x1f, 0x7e, 0x48, 0xfe, 0x89, 0xf8, 0xb6, 0x25, -0x8d, 0x3b, 0x72, 0xfc, 0x15, 0x66, 0x6c, 0xe8, 0x95, 0x6a, 0xf1, 0x60, -0x60, 0x8f, 0xa2, 0x36, 0xa9, 0x33, 0x21, 0x71, 0xec, 0xa6, 0x7b, 0xfc, -0x5e, 0xea, 0x8a, 0xbe, 0xd0, 0x8d, 0x0d, 0xaa, 0x4c, 0x3d, 0xa8, 0xb0, -0xaf, 0xbe, 0xec, 0xdf, 0xa2, 0x8f, 0xbc, 0xe5, 0xc1, 0xc4, 0xb4, 0xec, -0xc1, 0x45, 0x7d, 0x3f, 0xf9, 0xe4, 0x13, 0x78, 0x29, 0xaf, 0x1f, 0x99, -0x21, 0x42, 0xe2, 0xa0, 0x3c, 0x44, 0xd7, 0xea, 0x91, 0x20, 0xa2, 0x5d, -0x1c, 0x3b, 0x72, 0x24, 0x3d, 0x29, 0x79, 0xe0, 0xa2, 0xcd, 0xfe, 0xad, -0x73, 0x25, 0x5c, 0x65, 0x87, 0x57, 0x44, 0x51, 0x61, 0x7e, 0x31, 0x28, -0x15, 0x7d, 0x57, 0x1d, 0x8e, 0x4f, 0x4a, 0xbf, 0x64, 0xd2, 0x04, 0x7a, -0x18, 0x10, 0xe6, 0x10, 0x45, 0x85, 0x6e, 0x8f, 0x92, 0x1e, 0x93, 0x62, -0xa5, 0xfd, 0xf1, 0xcb, 0x2f, 0xd7, 0x48, 0x4f, 0xef, 0x30, 0x7c, 0x66, -0x25, 0xd0, 0x77, 0xf9, 0x49, 0x50, 0x51, 0x54, 0x98, 0x5f, 0x27, 0xfe, -0xbb, 0x16, 0x97, 0xac, 0x75, 0xc4, 0xc4, 0x2d, 0x5b, 0xbc, 0x88, 0xb6, -0xc5, 0x94, 0xc3, 0x89, 0xa8, 0x98, 0x59, 0xcf, 0x99, 0x18, 0xc2, 0x2e, -0xc4, 0xdb, 0x8d, 0x54, 0x89, 0x75, 0xae, 0x56, 0xf5, 0x6a, 0x79, 0x05, -0x1d, 0xa2, 0xa8, 0x08, 0x11, 0xbd, 0xca, 0xbf, 0xbd, 0x64, 0xcb, 0x7f, -0x51, 0x2a, 0x6a, 0xb4, 0x1b, 0x84, 0xcd, 0x91, 0x8a, 0xf6, 0x38, 0x2b, -0xf0, 0x58, 0x49, 0x3a, 0x5e, 0x24, 0xe4, 0x57, 0x78, 0x4d, 0x4e, 0x52, -0xa8, 0x10, 0x4b, 0xd4, 0x67, 0xff, 0xf7, 0x7f, 0x35, 0xab, 0x67, 0xa6, -0xd5, 0x69, 0x11, 0x3e, 0xa8, 0x38, 0x7a, 0xf4, 0x68, 0x94, 0x57, 0x98, -0x5f, 0xe7, 0xa8, 0x2d, 0x0f, 0xc5, 0xa5, 0x65, 0xf7, 0xe9, 0xda, 0xf9, -0x8d, 0x37, 0xde, 0xa0, 0xad, 0x3d, 0x01, 0x0e, 0x04, 0x41, 0x21, 0x30, -0x80, 0x8a, 0x88, 0x0a, 0xf7, 0xf0, 0x60, 0x89, 0x12, 0xfb, 0x2c, 0xbc, -0xe2, 0xbd, 0x77, 0xdf, 0xcd, 0xc9, 0x48, 0xaf, 0x5d, 0x38, 0x34, 0x0c, -0x51, 0x11, 0x7e, 0xdd, 0x22, 0x03, 0x79, 0x49, 0x43, 0xd7, 0xdc, 0x8e, -0x4a, 0xb6, 0x68, 0xfe, 0xdc, 0x8f, 0x3f, 0xfe, 0x18, 0xb3, 0xac, 0xb8, -0xf0, 0x40, 0x45, 0xa4, 0xb5, 0x96, 0x74, 0x67, 0x83, 0x12, 0xe3, 0xac, -0x48, 0x50, 0xcf, 0x3d, 0xfb, 0x4c, 0x56, 0x5a, 0x5a, 0x87, 0x31, 0x0b, -0x02, 0x59, 0xf0, 0x0a, 0xbd, 0xd6, 0xab, 0xb6, 0xad, 0x78, 0x45, 0x14, -0x15, 0xfa, 0x8b, 0x19, 0xb4, 0xea, 0x00, 0x4b, 0x77, 0xcd, 0x8a, 0xe5, -0x04, 0xd8, 0x4b, 0x4b, 0x24, 0x29, 0xf3, 0x11, 0x45, 0x85, 0x6e, 0x99, -0x65, 0x9b, 0x80, 0x85, 0xde, 0x79, 0xf2, 0x64, 0x46, 0x72, 0xf2, 0x80, -0xf9, 0x37, 0x55, 0x28, 0x65, 0xfb, 0x2b, 0x1b, 0xbb, 0x26, 0x69, 0x1f, -0x15, 0x61, 0xd9, 0x2d, 0xd2, 0xdf, 0xf7, 0x74, 0xbe, 0xff, 0xf2, 0x3d, -0x2c, 0xdd, 0xf5, 0xd7, 0x5e, 0xc3, 0xb2, 0x50, 0xfc, 0x46, 0x5c, 0x78, -0x51, 0x54, 0x98, 0x53, 0xba, 0x59, 0x99, 0xc1, 0x45, 0x45, 0xb1, 0x8e, -0xb8, 0x09, 0xc5, 0x0f, 0xf9, 0xbb, 0xda, 0x15, 0xae, 0xa3, 0xda, 0x44, -0x05, 0x2f, 0x3e, 0xca, 0x2b, 0xb4, 0x97, 0x7a, 0xbe, 0xef, 0xe2, 0xed, -0x2c, 0xdd, 0x86, 0x9b, 0xd6, 0xb2, 0x2c, 0x98, 0x65, 0x71, 0xe1, 0x45, -0x48, 0x8d, 0x0f, 0x3b, 0x9e, 0x0a, 0xd1, 0x28, 0xa4, 0xfc, 0x07, 0x71, -0x50, 0xf4, 0x52, 0xeb, 0x71, 0xc9, 0xf2, 0x66, 0xfb, 0xfe, 0x11, 0x45, -0x45, 0x85, 0xe3, 0x3b, 0x10, 0x8e, 0xe9, 0xf3, 0xb5, 0xe7, 0x7b, 0x5c, -0xbe, 0x19, 0x54, 0xdc, 0xb2, 0x69, 0xa3, 0x98, 0x65, 0xa3, 0xa8, 0x30, -0x94, 0x8a, 0x92, 0x70, 0x8f, 0xfd, 0x7b, 0xf6, 0x64, 0xa6, 0xa5, 0x24, -0x66, 0xd5, 0x0b, 0xb1, 0xee, 0x61, 0x51, 0x5e, 0xe1, 0xd7, 0x06, 0x76, -0xbe, 0x70, 0xf6, 0x3a, 0x96, 0xae, 0xa4, 0x78, 0x9b, 0x98, 0x65, 0x71, -0xe1, 0xb1, 0x35, 0x86, 0x7d, 0x95, 0x34, 0x77, 0x8c, 0xc2, 0x2c, 0x38, -0xb1, 0x20, 0x1b, 0xd6, 0xae, 0x4d, 0x4e, 0x8c, 0x8f, 0x4b, 0xca, 0x18, -0xba, 0xe1, 0x3e, 0xbf, 0x16, 0xb9, 0xf2, 0x36, 0x56, 0x0d, 0x15, 0xef, -0xbd, 0xf7, 0x1e, 0x42, 0xb2, 0xb1, 0x52, 0xbf, 0x68, 0xdb, 0x51, 0x09, -0xaa, 0xec, 0x7b, 0x3d, 0xdf, 0xf6, 0x92, 0xd5, 0x2c, 0xdd, 0xde, 0xdd, -0xbb, 0x88, 0x96, 0x35, 0xa3, 0x22, 0xa2, 0xe2, 0xa0, 0xcc, 0x90, 0x80, -0x73, 0x5e, 0xb5, 0x70, 0x61, 0x02, 0xed, 0xeb, 0xeb, 0x34, 0x1f, 0x7e, -0xcb, 0xc3, 0x4d, 0xf7, 0xfe, 0x3d, 0x0c, 0x51, 0x81, 0xc2, 0x14, 0x45, -0x85, 0x01, 0x15, 0x4d, 0xc7, 0x2f, 0x07, 0x15, 0xb7, 0x1e, 0x3c, 0x08, -0x2a, 0x3e, 0xfb, 0xec, 0x33, 0x71, 0x6c, 0x47, 0x20, 0xaf, 0x30, 0x43, -0x02, 0xef, 0xcd, 0xd4, 0x09, 0xe3, 0xd1, 0x25, 0x0a, 0x07, 0x8c, 0x09, -0x31, 0xc1, 0xc9, 0xaa, 0x2f, 0x9e, 0x5b, 0x5e, 0x11, 0x45, 0x85, 0x69, -0xab, 0x3b, 0x5f, 0x7f, 0xd8, 0x15, 0xa0, 0xe2, 0xb6, 0xa3, 0x47, 0x21, -0x02, 0x1d, 0x15, 0x61, 0x5f, 0x51, 0x53, 0x0f, 0x76, 0x32, 0x40, 0x82, -0xad, 0xe1, 0xc4, 0xf1, 0xe3, 0x8d, 0x6b, 0xe5, 0xb9, 0xaa, 0x7b, 0x8c, -0x5f, 0x10, 0xaa, 0x90, 0xb0, 0x69, 0x99, 0x8d, 0xa2, 0xc2, 0x8c, 0x8a, -0x5a, 0x03, 0xe7, 0xf0, 0xee, 0x4f, 0x9e, 0x38, 0x11, 0x99, 0xa8, 0x30, -0x37, 0xce, 0x7b, 0xed, 0xc7, 0xaf, 0x4e, 0x1e, 0x3b, 0x86, 0x06, 0xc4, -0x24, 0xb2, 0xf7, 0xbf, 0x72, 0x6b, 0xb3, 0xfd, 0x5f, 0x85, 0x98, 0xd4, -0xe4, 0xa6, 0x26, 0xb9, 0xf0, 0x0a, 0x71, 0x49, 0x95, 0x46, 0x92, 0xa3, -0x57, 0x44, 0x51, 0x61, 0xc1, 0x2b, 0x46, 0x2c, 0x12, 0x09, 0x2a, 0x02, -0x51, 0x61, 0x80, 0xc4, 0x87, 0x1f, 0x7c, 0xb0, 0xfe, 0xc6, 0x1b, 0xeb, -0xe5, 0xe5, 0xb2, 0x20, 0x39, 0x5d, 0xc7, 0x8d, 0x2c, 0x7e, 0x22, 0x94, -0x8c, 0xb0, 0x96, 0xe6, 0x47, 0x93, 0xb6, 0x6d, 0x8d, 0x0a, 0x4c, 0xf2, -0x98, 0x20, 0x75, 0x9f, 0x5f, 0x08, 0xef, 0x04, 0x3e, 0xdb, 0x61, 0xcd, -0xc6, 0x90, 0xf3, 0xcd, 0xa7, 0x5e, 0xcf, 0x6a, 0x6c, 0xdd, 0x7c, 0xb3, -0x01, 0x15, 0xe1, 0x5d, 0xa9, 0xdf, 0x5c, 0xd1, 0xe3, 0xb6, 0x63, 0xc7, -0x2e, 0xd4, 0x7d, 0x72, 0x38, 0x73, 0xf2, 0x87, 0x5c, 0x77, 0xb4, 0xf9, -0x81, 0xaf, 0xc3, 0x81, 0x30, 0xa2, 0xa8, 0xf0, 0xeb, 0x2d, 0x9e, 0x6f, -0x3f, 0x77, 0x0b, 0x4b, 0xb7, 0xfa, 0x9a, 0x55, 0x96, 0xa8, 0x08, 0x63, -0x1b, 0x94, 0x30, 0x0a, 0x09, 0x73, 0x22, 0xa0, 0xa3, 0xb0, 0x6d, 0x5b, -0xd6, 0x61, 0xe0, 0xb2, 0x3d, 0x2d, 0x0f, 0x86, 0x4e, 0x5a, 0xb6, 0xd7, -0x6d, 0xd1, 0x0a, 0x15, 0x84, 0xba, 0x19, 0x25, 0xa8, 0x28, 0xaf, 0x30, -0x80, 0xa7, 0xc3, 0x94, 0x15, 0x2c, 0x1d, 0x45, 0x97, 0x61, 0xa1, 0x11, -0x65, 0x83, 0x32, 0x24, 0xa0, 0xb6, 0x6a, 0xde, 0x2c, 0x2e, 0x35, 0xa7, -0xdb, 0xe1, 0xbf, 0xf9, 0xb5, 0xb9, 0x54, 0x9e, 0x47, 0xc2, 0x33, 0x30, -0xa2, 0xbc, 0xc2, 0xbf, 0xd7, 0xd9, 0xb2, 0x68, 0x7c, 0xa3, 0xbc, 0x1a, -0xb7, 0x1e, 0x3a, 0x64, 0xf0, 0xe2, 0x85, 0xbd, 0x0d, 0x4a, 0x18, 0x85, -0xe4, 0xd9, 0xa1, 0x70, 0xb6, 0x68, 0x92, 0x9f, 0x98, 0xd5, 0xb0, 0xf0, -0xd6, 0x28, 0x2a, 0x04, 0x49, 0x5e, 0xd9, 0x50, 0x58, 0x9f, 0xd0, 0x69, -0xf4, 0x9c, 0x6a, 0x09, 0x8e, 0x87, 0xce, 0x9e, 0x8d, 0x58, 0x54, 0x10, -0xd3, 0x41, 0x08, 0x7d, 0xd3, 0x86, 0x0d, 0x92, 0x6a, 0x35, 0x6f, 0x73, -0x30, 0xd4, 0xfc, 0x74, 0x51, 0x5e, 0x51, 0x1e, 0x00, 0xee, 0x31, 0x6d, -0x19, 0x89, 0x78, 0xf7, 0x9e, 0x3e, 0x1d, 0x69, 0x71, 0x50, 0xe4, 0x54, -0xa9, 0x0a, 0xe4, 0x94, 0x71, 0xc8, 0xaf, 0x57, 0x37, 0xa5, 0x7e, 0xbb, -0xfc, 0xbd, 0x61, 0xa1, 0x64, 0xbb, 0xf7, 0xe2, 0xb9, 0xb5, 0x41, 0xb1, -0x29, 0x46, 0x6d, 0x50, 0x3f, 0x00, 0xec, 0x7c, 0xd1, 0xbc, 0xb5, 0xe2, -0xaf, 0x88, 0xb4, 0x98, 0x59, 0x41, 0x05, 0x31, 0xf3, 0xc4, 0x08, 0xbf, -0xfd, 0xd6, 0x5b, 0x0d, 0x6b, 0xd5, 0xaa, 0xd1, 0xba, 0x4f, 0xde, 0xce, -0x7f, 0x95, 0xc7, 0xd6, 0x53, 0x69, 0x63, 0x6a, 0x84, 0x4e, 0xb1, 0x2f, -0x5e, 0xb1, 0xa0, 0x02, 0x2f, 0xc5, 0xc5, 0x2e, 0xf4, 0xe2, 0xaf, 0x40, -0xdb, 0x8e, 0xa2, 0x42, 0x8f, 0x24, 0x1f, 0x78, 0xe5, 0x56, 0xf1, 0x57, -0xa8, 0xfc, 0x0a, 0x3d, 0x92, 0x3c, 0x5c, 0x6d, 0x50, 0x4a, 0xd5, 0x96, -0xda, 0xe3, 0xaf, 0xbc, 0xfc, 0x72, 0xbd, 0xbc, 0xbc, 0xfc, 0x5e, 0x63, -0x93, 0xb6, 0x7d, 0x5f, 0x69, 0x14, 0x5c, 0x1e, 0x82, 0xba, 0x1d, 0x54, -0x10, 0xec, 0x15, 0x45, 0x85, 0xe1, 0xad, 0x0f, 0xbf, 0x90, 0xa1, 0x3a, -0xff, 0xb2, 0xd9, 0x9f, 0x7c, 0xfc, 0x71, 0xe4, 0xe4, 0xe2, 0xa9, 0x32, -0x05, 0x52, 0xd2, 0xe6, 0xb9, 0x67, 0x9f, 0xad, 0x93, 0x93, 0xdd, 0x3e, -0x84, 0x4a, 0xda, 0xd8, 0x84, 0x50, 0x14, 0x15, 0xfe, 0x6d, 0x72, 0x8d, -0x4b, 0xfe, 0x92, 0x5e, 0xaf, 0x25, 0x61, 0xa1, 0xfb, 0x76, 0xef, 0x96, -0x30, 0x63, 0xc9, 0xdb, 0x0e, 0xef, 0x1a, 0x1f, 0xca, 0x53, 0x81, 0xaa, -0x4d, 0x46, 0xd1, 0xfd, 0xf7, 0xdd, 0x47, 0x97, 0x82, 0x9e, 0xd3, 0x43, -0xad, 0x10, 0xbf, 0x57, 0x6c, 0xb8, 0xb1, 0xcc, 0x96, 0x91, 0xa0, 0xa2, -0xbc, 0xc2, 0x12, 0x39, 0xfd, 0x6f, 0x38, 0x91, 0x98, 0x5a, 0xad, 0x41, -0xcd, 0xdc, 0x5f, 0xfe, 0xe2, 0x17, 0x52, 0xe3, 0x23, 0xec, 0x2b, 0xdf, -0x28, 0x54, 0x48, 0xb3, 0xaf, 0x5d, 0x3b, 0x77, 0xa6, 0x25, 0x26, 0x0c, -0x59, 0xb1, 0xcb, 0xbf, 0x9d, 0xa5, 0xea, 0x5e, 0x65, 0xe2, 0x15, 0xc4, -0x8c, 0x1b, 0xf5, 0x8a, 0x28, 0x2a, 0x2c, 0xdf, 0x5f, 0xdb, 0x92, 0xdf, -0x65, 0x34, 0xee, 0x98, 0x1c, 0xe3, 0xf8, 0xe0, 0x83, 0x0f, 0x22, 0xa4, -0x1e, 0x94, 0x72, 0x56, 0x80, 0x0a, 0x22, 0x64, 0x97, 0x5e, 0x79, 0x25, -0xf4, 0x33, 0x6e, 0x6b, 0xe8, 0x24, 0x64, 0x7b, 0xe5, 0x12, 0x72, 0x82, -0x4d, 0x54, 0x90, 0x84, 0x69, 0xd2, 0xb6, 0xcb, 0x36, 0xee, 0xb6, 0x79, -0xbf, 0x30, 0x3a, 0x2d, 0x7f, 0xe7, 0xe7, 0xd5, 0xdb, 0xf4, 0x4f, 0x72, -0xf5, 0xaf, 0x78, 0x42, 0xd5, 0x0e, 0x8c, 0x04, 0x09, 0x0a, 0x17, 0x9e, -0xa0, 0x62, 0xec, 0xc8, 0x91, 0xd0, 0x4f, 0xc7, 0xbd, 0x7f, 0xa8, 0xba, -0xbb, 0xbe, 0x7f, 0xf4, 0x66, 0x1f, 0x15, 0xa4, 0xd7, 0x94, 0xb5, 0xcc, -0x46, 0x3a, 0x2a, 0x32, 0x8a, 0xbf, 0x69, 0x3c, 0x70, 0x46, 0x52, 0x7c, -0xfc, 0xf1, 0xdb, 0x6f, 0x83, 0xc3, 0x46, 0x42, 0x9d, 0x59, 0xc5, 0x2b, -0x5c, 0x15, 0x01, 0x3f, 0xfb, 0xac, 0x47, 0xd7, 0x2e, 0x8e, 0xe4, 0xac, -0xd6, 0xfb, 0xbe, 0x88, 0xa2, 0xe2, 0x07, 0x68, 0x6c, 0x89, 0x74, 0x54, -0x40, 0x0a, 0x3d, 0x17, 0x6c, 0x74, 0x26, 0x38, 0x89, 0xa3, 0xc6, 0x0c, -0x15, 0x09, 0x95, 0xfa, 0x41, 0x85, 0xf4, 0xf8, 0xc2, 0x2c, 0x4b, 0x97, -0xd4, 0xe6, 0x8d, 0x1a, 0x64, 0xb7, 0xec, 0xdb, 0x60, 0x77, 0x28, 0xa7, -0x52, 0x78, 0x8b, 0x24, 0x17, 0x7f, 0x85, 0xb5, 0x5e, 0x61, 0x25, 0x41, -0x55, 0xd5, 0xd0, 0x2e, 0xff, 0x98, 0xa6, 0x5f, 0x57, 0x51, 0x57, 0x33, -0xde, 0x99, 0x3a, 0x74, 0xe0, 0x00, 0xe9, 0xea, 0x12, 0xf6, 0xbd, 0x8e, -0x04, 0x15, 0x24, 0xe2, 0xf2, 0xa4, 0x0f, 0xdc, 0x7f, 0x7f, 0x4e, 0x5a, -0x72, 0xfb, 0x89, 0x4b, 0x53, 0x8b, 0xbf, 0x8b, 0xf2, 0x0a, 0xc5, 0x2b, -0xa2, 0xa8, 0xf8, 0x6f, 0xab, 0x92, 0x4f, 0x13, 0x33, 0x6a, 0x36, 0xaa, -0x53, 0x9b, 0x78, 0xf2, 0x48, 0xe8, 0x00, 0xa6, 0xa3, 0x02, 0x03, 0x14, -0xa4, 0x30, 0x68, 0xd5, 0xc1, 0x70, 0x83, 0x84, 0x4f, 0xda, 0xb6, 0x49, -0xaf, 0x88, 0xa2, 0xe2, 0xbf, 0xd9, 0xdb, 0xbf, 0xaa, 0xd6, 0xba, 0x28, -0xa7, 0x5a, 0xe6, 0xb9, 0x47, 0x1f, 0x8d, 0x84, 0x1e, 0xaa, 0x82, 0x0a, -0xc2, 0x3d, 0x30, 0x43, 0xaf, 0x5c, 0xba, 0x14, 0x54, 0x4c, 0xd8, 0xf1, -0x78, 0x24, 0xa2, 0xe2, 0xd8, 0xb1, 0x63, 0x48, 0xcc, 0x48, 0x50, 0x7e, -0xa1, 0xe2, 0x3f, 0x31, 0x5b, 0x5c, 0x3f, 0x8e, 0x8b, 0x3f, 0x61, 0x08, -0xa4, 0x1a, 0x5d, 0xc6, 0x66, 0xa5, 0xa7, 0x51, 0x4a, 0x35, 0x12, 0x7a, -0xa8, 0xaa, 0xae, 0x14, 0xff, 0xfb, 0x3f, 0xff, 0x53, 0xd4, 0xb3, 0xbb, -0x23, 0x25, 0xbb, 0xfd, 0xbe, 0x3f, 0x47, 0x51, 0xa1, 0x59, 0xa1, 0xbc, -0x0b, 0xe2, 0x80, 0xe1, 0xdf, 0xb1, 0x17, 0x7e, 0xf8, 0x70, 0x01, 0x18, -0xe1, 0x86, 0x8a, 0x1a, 0xdb, 0xbf, 0x4e, 0xae, 0xd3, 0xb2, 0x56, 0x4e, -0xf6, 0x5b, 0x6f, 0xbe, 0xa9, 0xa3, 0x22, 0x2c, 0x8b, 0xf5, 0xeb, 0xe1, -0x1e, 0x84, 0xd0, 0x27, 0x3b, 0x1c, 0xcd, 0x87, 0xce, 0xce, 0xdd, 0x19, -0x46, 0x29, 0x78, 0x56, 0x31, 0xb3, 0xd6, 0xda, 0x36, 0xbc, 0x02, 0x9b, -0x23, 0x5e, 0x2a, 0xdf, 0x79, 0xc5, 0x7f, 0xe2, 0xb6, 0x7c, 0x9f, 0xb8, -0xf5, 0xfb, 0xf8, 0xad, 0x02, 0x89, 0x30, 0x44, 0x45, 0xab, 0x1d, 0xbf, -0x4d, 0x70, 0xa6, 0xf5, 0xe9, 0xd6, 0x45, 0xba, 0xd0, 0x87, 0xb7, 0xb6, -0xad, 0xcc, 0xb2, 0xb8, 0xf0, 0x6f, 0xbc, 0xee, 0x5a, 0x36, 0xc8, 0xb1, -0x9b, 0x43, 0xad, 0x28, 0xa0, 0xcd, 0x7d, 0xd9, 0xca, 0x5f, 0x81, 0x35, -0xa5, 0x34, 0xe2, 0xc3, 0x2f, 0x54, 0xb8, 0xb8, 0x04, 0x90, 0x70, 0x6e, -0xfb, 0x2e, 0x69, 0xdb, 0x77, 0xf1, 0x5b, 0x09, 0xa8, 0x0c, 0x43, 0x48, -0xc0, 0xfa, 0x06, 0x2d, 0xdf, 0x9d, 0x98, 0xe0, 0x5c, 0xb5, 0x7c, 0xb9, -0xa0, 0x02, 0x69, 0x5b, 0xca, 0x92, 0x87, 0x5f, 0xcc, 0xac, 0x2a, 0xfd, -0x84, 0x01, 0x8a, 0x87, 0xed, 0xd6, 0xae, 0x4d, 0x7c, 0xf5, 0x7a, 0x1d, -0x0e, 0x7c, 0x1e, 0x7e, 0xfc, 0xdf, 0x9d, 0x6f, 0x3b, 0x40, 0x54, 0xb8, -0x20, 0x01, 0x7f, 0x00, 0x12, 0x29, 0xdb, 0xbf, 0x4d, 0x2e, 0xfe, 0x36, -0x7e, 0x2b, 0x96, 0xbb, 0x30, 0x44, 0x05, 0x0d, 0x23, 0x0b, 0xc7, 0x2d, -0x48, 0x8a, 0x8b, 0xa3, 0x09, 0x58, 0xd8, 0x77, 0xa1, 0xd7, 0x2b, 0x18, -0x3c, 0xfb, 0xec, 0x33, 0x6c, 0xa6, 0xad, 0xc7, 0x2c, 0xcc, 0x0d, 0xb3, -0xb4, 0x0a, 0x8f, 0x12, 0x54, 0x20, 0xa8, 0x70, 0x49, 0x4a, 0x17, 0xb8, -0xc4, 0xb7, 0x69, 0xdb, 0xbf, 0x4d, 0xdf, 0xf1, 0xaf, 0xe4, 0xed, 0xdf, -0xc6, 0x6e, 0x11, 0x5e, 0x11, 0x6e, 0xc0, 0xa0, 0x61, 0x64, 0xbd, 0x8e, -0xfd, 0x93, 0x62, 0x1d, 0xcf, 0x3f, 0xff, 0x7c, 0x78, 0x5b, 0x66, 0x55, -0x5a, 0x05, 0xfe, 0x3b, 0xbc, 0xda, 0xd7, 0xad, 0x5a, 0xe9, 0x12, 0x9f, -0x6e, 0xbe, 0xd7, 0xb1, 0xe5, 0x7c, 0xa4, 0xf3, 0x0a, 0x5e, 0xbc, 0x8d, -0x5c, 0xbc, 0x0b, 0x8c, 0x62, 0xcb, 0x77, 0xa9, 0xc5, 0xdf, 0x66, 0x94, -0xfc, 0x8b, 0xff, 0x13, 0xb7, 0x7e, 0x17, 0x13, 0xa6, 0xaa, 0x76, 0xeb, -0xe2, 0xff, 0x4d, 0xc9, 0xa9, 0x9f, 0x1a, 0xe7, 0xf8, 0xc9, 0x4f, 0x7e, -0x12, 0xc6, 0x5d, 0xe8, 0x95, 0xec, 0x24, 0x15, 0x0c, 0x7e, 0xfb, 0x9b, -0xdf, 0x34, 0xaf, 0x5f, 0x27, 0xa5, 0x56, 0xd3, 0x8e, 0x07, 0xff, 0x1a, -0x9e, 0x90, 0x28, 0xeb, 0xaf, 0xe0, 0xe5, 0x92, 0x84, 0x2c, 0x8d, 0x7b, -0x2c, 0xf4, 0x0a, 0x3b, 0xa8, 0xc0, 0x08, 0x0b, 0x67, 0x40, 0x70, 0xca, -0xd8, 0xe1, 0xfa, 0x49, 0xdd, 0xfe, 0x5d, 0x7c, 0x98, 0x32, 0x8a, 0x86, -0xdb, 0xff, 0xd8, 0x65, 0xca, 0x32, 0xb6, 0x89, 0x99, 0xd3, 0x2f, 0xa1, -0x09, 0x58, 0x18, 0xc7, 0x41, 0x89, 0xec, 0x24, 0x6e, 0x0a, 0x82, 0x02, -0xef, 0xbd, 0xe7, 0x1e, 0x9e, 0xba, 0xed, 0xa4, 0x65, 0x79, 0xbb, 0xc2, -0x2b, 0x2b, 0xd5, 0x4d, 0x45, 0x4d, 0x85, 0x8a, 0x32, 0x91, 0xe4, 0x4a, -0xdb, 0xb6, 0x81, 0x0a, 0x20, 0xf1, 0x6f, 0x98, 0x43, 0xaa, 0x0b, 0x15, -0x2e, 0x46, 0x91, 0xb0, 0xf5, 0xfb, 0x70, 0x65, 0x14, 0x23, 0x6e, 0x7e, -0x20, 0x21, 0x3d, 0xa7, 0x45, 0xe3, 0x86, 0x3f, 0x7a, 0xee, 0x39, 0x29, -0x68, 0x40, 0xbe, 0x01, 0x44, 0x13, 0x66, 0x31, 0xb3, 0xba, 0xec, 0x84, -0xe9, 0x89, 0x67, 0xec, 0xde, 0xa9, 0x43, 0x62, 0x72, 0xb5, 0xf1, 0xdb, -0x1f, 0x09, 0x5b, 0x46, 0x11, 0x54, 0x5e, 0x01, 0x24, 0x5c, 0x1a, 0x45, -0x4a, 0xf1, 0xbf, 0x50, 0x27, 0x10, 0x9f, 0xd0, 0xb6, 0xe3, 0x2e, 0xca, -0x4e, 0xe1, 0xa6, 0x51, 0x20, 0x4f, 0x0f, 0x58, 0xe6, 0x8a, 0x77, 0xa0, -0x76, 0xe0, 0x87, 0x1f, 0x7e, 0x28, 0xc5, 0xfa, 0x2b, 0x3e, 0xeb, 0x88, -0xfd, 0xfb, 0xcb, 0xbf, 0xfe, 0xf5, 0x8b, 0xcf, 0x3f, 0xe7, 0xe7, 0xaf, -0x5f, 0x7c, 0x81, 0x84, 0x23, 0x85, 0xfd, 0x82, 0x68, 0x01, 0x53, 0x3e, -0x0a, 0xe9, 0x9c, 0x7d, 0xf2, 0x8e, 0xe3, 0xc9, 0xf1, 0xf1, 0x79, 0xbd, -0xa6, 0x84, 0x7c, 0x25, 0x59, 0xdb, 0x95, 0x6f, 0x94, 0xbf, 0xc2, 0x3f, -0x09, 0x0a, 0x1f, 0x36, 0x76, 0x27, 0x94, 0xec, 0x7f, 0xa5, 0x63, 0x7a, -0x42, 0x76, 0x72, 0x31, 0x8a, 0x30, 0x54, 0xb2, 0x2f, 0xec, 0x91, 0xe7, -0x7b, 0xcf, 0x5f, 0x0f, 0x2a, 0x76, 0xed, 0xd8, 0x6e, 0xe8, 0x2c, 0x5c, -0x91, 0xfd, 0xb6, 0xef, 0xb9, 0xfb, 0xee, 0x41, 0x7d, 0xfa, 0x14, 0x75, -0x2d, 0xec, 0xd7, 0xb5, 0x70, 0xd4, 0xb0, 0x61, 0xcf, 0x3d, 0xf3, 0x8c, -0x54, 0xb9, 0x15, 0x1f, 0x62, 0x50, 0xb0, 0xa1, 0x7c, 0x14, 0x92, 0xa8, -0xdd, 0xa3, 0x4b, 0xe7, 0xf8, 0xa4, 0xf4, 0xe1, 0x37, 0x87, 0x5d, 0x9a, -0x91, 0x01, 0x24, 0x9a, 0x02, 0x1d, 0xa0, 0x5e, 0x01, 0xa3, 0xf8, 0x37, -0x76, 0xd8, 0xf4, 0xed, 0xff, 0x42, 0x82, 0x4a, 0xdc, 0xf6, 0xfd, 0x05, -0x97, 0x76, 0xf8, 0x71, 0x09, 0x71, 0xcf, 0x9f, 0xef, 0x7c, 0xa9, 0xcb, -0x8d, 0x45, 0x8d, 0x0f, 0xbd, 0xb3, 0x70, 0x45, 0xf6, 0xdb, 0x86, 0x5e, -0xa7, 0x4c, 0x98, 0xc0, 0x1c, 0x9c, 0xb5, 0x5a, 0xc4, 0xe5, 0xe4, 0xf3, -0xe1, 0xd0, 0x81, 0x03, 0x60, 0x12, 0x06, 0x22, 0xd8, 0x08, 0x0a, 0x30, -0xf4, 0xea, 0x4f, 0x87, 0x0f, 0x1e, 0x4c, 0x49, 0x72, 0x66, 0x77, 0x9d, -0x10, 0xe6, 0x8c, 0xc2, 0xbe, 0x04, 0x85, 0x84, 0xe0, 0x59, 0xaf, 0x40, -0x7c, 0x4a, 0xd8, 0xf2, 0x5d, 0x4a, 0xf1, 0xb7, 0xa8, 0xda, 0xc8, 0x4e, -0xfc, 0x1a, 0xbe, 0x90, 0x70, 0xa1, 0xa2, 0xd5, 0xf8, 0x25, 0x10, 0xe2, -0x1d, 0xc7, 0x8f, 0x5b, 0xd6, 0x83, 0x0a, 0xca, 0x3e, 0xed, 0xb9, 0x5b, -0x29, 0x55, 0x14, 0x92, 0x63, 0x1d, 0x99, 0x6d, 0x06, 0xb0, 0xce, 0x4d, -0xae, 0x38, 0xc4, 0x64, 0x76, 0x97, 0x94, 0x20, 0xe7, 0x20, 0x47, 0x89, -0x6e, 0x13, 0x94, 0xa8, 0x13, 0x55, 0xfd, 0x09, 0x8d, 0xa2, 0xa8, 0x67, -0x4f, 0x47, 0x5c, 0xf2, 0xf0, 0xe2, 0x27, 0xc3, 0x59, 0xa3, 0x30, 0x65, -0xa8, 0x0a, 0xaf, 0xa0, 0xc6, 0x8d, 0x85, 0x04, 0x05, 0x2a, 0x48, 0x21, -0x70, 0x6f, 0x99, 0x75, 0x31, 0x8a, 0x44, 0x50, 0xb1, 0xfd, 0x5b, 0x97, -0x33, 0x7b, 0xcb, 0xbf, 0x2f, 0xc8, 0x4e, 0xe1, 0x16, 0xf5, 0xa4, 0x9e, -0xc8, 0xb9, 0xf5, 0xfb, 0x06, 0x43, 0xe7, 0xb3, 0x1a, 0x27, 0x4e, 0x9c, -0xc0, 0xd1, 0x8b, 0xaa, 0xad, 0xba, 0x45, 0x96, 0x77, 0x17, 0x7a, 0xe1, -0x00, 0xef, 0xbf, 0xf7, 0x5e, 0xfd, 0x9a, 0xb9, 0xf1, 0x79, 0xcd, 0x26, -0x1c, 0x7e, 0x93, 0x59, 0x15, 0x5c, 0x75, 0x9c, 0xc9, 0x94, 0x14, 0x17, -0xa3, 0x10, 0x63, 0x29, 0x02, 0x1b, 0x41, 0x01, 0x86, 0xf2, 0xdc, 0x31, -0x2c, 0x8c, 0x82, 0x82, 0x26, 0x35, 0xba, 0x8e, 0x0f, 0x7f, 0x46, 0x61, -0xc5, 0x2b, 0x8c, 0xa8, 0xb8, 0xed, 0xb6, 0xdb, 0xc8, 0xd0, 0xf5, 0x88, -0x8a, 0x8b, 0x3e, 0x8a, 0xe4, 0x6d, 0x78, 0xb2, 0xbf, 0x0b, 0x77, 0xd9, -0xc9, 0x05, 0xf5, 0x1a, 0xdb, 0xff, 0x29, 0xbd, 0x8e, 0x08, 0x95, 0x55, -0x95, 0xfa, 0x21, 0x9d, 0xf2, 0xee, 0x8b, 0x27, 0x90, 0x60, 0xff, 0x3e, -0x73, 0xef, 0xbd, 0xdc, 0x3d, 0x7f, 0xd6, 0xb6, 0x1e, 0x77, 0xb8, 0xca, -0x93, 0x35, 0xba, 0x6c, 0x57, 0x3c, 0x35, 0x78, 0xf6, 0xec, 0x41, 0x21, -0x16, 0x60, 0xc0, 0x31, 0x02, 0xc7, 0xa7, 0x52, 0x2a, 0x7e, 0xfd, 0xab, -0x5f, 0xf5, 0xe9, 0xde, 0xcd, 0x11, 0x97, 0x32, 0xa2, 0xe4, 0xd9, 0x30, -0xde, 0xec, 0x4a, 0x1f, 0xcd, 0xa4, 0x57, 0xb8, 0x45, 0x85, 0x7b, 0x09, -0xca, 0x85, 0x0a, 0xc4, 0x27, 0xf0, 0x90, 0xb8, 0x8d, 0xf0, 0xa7, 0x70, -0x8e, 0x1b, 0x97, 0x85, 0xab, 0xb7, 0xe3, 0xcb, 0xda, 0x83, 0xe6, 0xb1, -0x74, 0x77, 0xdf, 0x75, 0x97, 0x14, 0x83, 0x42, 0xc0, 0x80, 0x1c, 0xa1, -0xc5, 0xf2, 0xeb, 0xea, 0xa2, 0x20, 0xc1, 0x2d, 0x76, 0x6d, 0x2f, 0xe6, -0xee, 0xbd, 0x6f, 0xbc, 0xaf, 0xf6, 0x5e, 0x17, 0x4f, 0x6e, 0x38, 0xfd, -0x16, 0xe7, 0x05, 0xbd, 0x02, 0x3b, 0x98, 0x02, 0x46, 0xe0, 0xec, 0x82, -0x3b, 0x4a, 0xe6, 0xdd, 0x81, 0x7d, 0xfb, 0xb8, 0x5d, 0x5e, 0xd1, 0xec, -0xd0, 0xee, 0xeb, 0x65, 0x5f, 0x78, 0xb1, 0x8f, 0x0a, 0xf7, 0x12, 0x94, -0xcb, 0x20, 0x8b, 0xb7, 0x0e, 0xa3, 0xd3, 0x05, 0x48, 0x84, 0xad, 0xe0, -0xa4, 0x1e, 0xad, 0x69, 0xc9, 0x9f, 0x84, 0x57, 0x9c, 0x3e, 0x75, 0x4a, -0x32, 0x7a, 0x21, 0x47, 0x54, 0x6d, 0x41, 0x45, 0x79, 0x28, 0x15, 0x0a, -0x12, 0x90, 0xe9, 0xd7, 0x5f, 0x7d, 0xb5, 0x68, 0xee, 0x6c, 0x47, 0x4c, -0xf2, 0xf4, 0xc3, 0x3f, 0xbe, 0x88, 0xd2, 0xa9, 0xeb, 0x53, 0x1c, 0x8e, -0x23, 0x87, 0x0f, 0x03, 0x4e, 0x32, 0xaa, 0x71, 0x9b, 0xc0, 0x2e, 0x02, -0x47, 0x85, 0x28, 0x15, 0xbf, 0xf8, 0xf9, 0xcf, 0xdb, 0x36, 0x6d, 0x12, -0x9b, 0x91, 0x37, 0x7a, 0xcf, 0x0b, 0x91, 0xf0, 0x72, 0x0d, 0xd1, 0x81, -0xd6, 0x7a, 0x85, 0x37, 0x09, 0xea, 0x62, 0x78, 0x2c, 0xa8, 0x40, 0xb5, -0x08, 0x6f, 0x75, 0x42, 0xd1, 0x44, 0xab, 0x92, 0xdf, 0xe7, 0xf4, 0x98, -0x9c, 0xe8, 0x70, 0x3c, 0xf2, 0xf0, 0xc3, 0xf0, 0x56, 0xb2, 0xb2, 0xb0, -0x5a, 0x2a, 0x42, 0x0c, 0x3a, 0x2a, 0x74, 0x48, 0x00, 0x3c, 0x8a, 0xb2, -0x35, 0xaf, 0x5f, 0x3b, 0x25, 0xbf, 0x4b, 0xeb, 0xc3, 0x17, 0x13, 0xa6, -0x73, 0xfb, 0xcf, 0xcb, 0x4a, 0x4d, 0xc2, 0xeb, 0x8c, 0x7a, 0x23, 0xec, -0x42, 0x20, 0x1a, 0x88, 0x10, 0xa5, 0x3c, 0x15, 0xbb, 0x2f, 0x64, 0xa2, -0x0e, 0x58, 0xb4, 0x25, 0x4c, 0xba, 0x7b, 0xd9, 0xd9, 0xb5, 0x03, 0xe3, -0x15, 0x2e, 0x48, 0xc4, 0xb8, 0x18, 0x05, 0x82, 0x93, 0x64, 0x17, 0x45, -0x04, 0xaf, 0x68, 0xb7, 0xe3, 0x57, 0xce, 0xbc, 0xfc, 0x5a, 0xd5, 0x32, -0x70, 0x11, 0x48, 0xa3, 0x23, 0x08, 0x11, 0x49, 0x23, 0x10, 0x2a, 0xf4, -0x6c, 0x71, 0x62, 0xdb, 0x96, 0x5e, 0x2a, 0xbf, 0xff, 0xf4, 0xd3, 0x4b, -0x26, 0x4f, 0xe6, 0xad, 0x0d, 0x5a, 0xb2, 0x5d, 0x50, 0x7a, 0xc9, 0x91, -0xd7, 0x1d, 0x09, 0xe9, 0x6d, 0xdb, 0xb6, 0xf9, 0xf9, 0xcf, 0x7e, 0x16, -0x5c, 0x54, 0x70, 0x47, 0x06, 0x1c, 0xd0, 0xa3, 0x6b, 0x42, 0x56, 0xfd, -0x96, 0x87, 0xc2, 0x31, 0xbb, 0xc8, 0x1d, 0x42, 0x02, 0x47, 0x05, 0x81, -0x4f, 0x3f, 0xe0, 0x21, 0x22, 0x20, 0x41, 0xa8, 0x6c, 0xc7, 0xe1, 0x97, -0xb2, 0x6e, 0xf3, 0xe7, 0xcc, 0xc1, 0xab, 0x2d, 0x4a, 0x05, 0x42, 0x4b, -0x80, 0x7b, 0xb3, 0x67, 0x54, 0x48, 0x1f, 0x3a, 0xd8, 0xd1, 0x92, 0xc5, -0xae, 0x72, 0x7d, 0x7d, 0xa6, 0x2d, 0x6d, 0x75, 0xeb, 0xb7, 0x40, 0xa2, -0xd6, 0x9e, 0xef, 0x5b, 0x8d, 0x98, 0x93, 0x92, 0x10, 0xbf, 0x7d, 0xeb, -0x56, 0x4c, 0x87, 0x41, 0x44, 0x85, 0xe0, 0x90, 0x4a, 0xa1, 0xad, 0x1b, -0xd7, 0x4f, 0xcb, 0x2f, 0x8c, 0xa2, 0xa2, 0x8c, 0x65, 0xd6, 0xa3, 0x04, -0x25, 0xbc, 0x22, 0xbc, 0x5d, 0x13, 0x46, 0x35, 0xa9, 0xef, 0x65, 0x37, -0x40, 0x97, 0xa3, 0x86, 0x0e, 0x25, 0xd6, 0x43, 0x4c, 0x13, 0xe5, 0x5a, -0x77, 0x59, 0x24, 0x19, 0xa9, 0xc2, 0x84, 0x42, 0xdf, 0x20, 0x2f, 0x27, -0x29, 0xbb, 0x7e, 0xf7, 0x63, 0x17, 0xbb, 0xa8, 0x74, 0x39, 0xfa, 0x55, -0x7c, 0x72, 0x46, 0xc7, 0x36, 0xad, 0x01, 0x27, 0x82, 0x1c, 0x5c, 0x8b, -0xc9, 0xe8, 0x7a, 0x85, 0xdf, 0xe2, 0x9c, 0xa0, 0x82, 0x58, 0x92, 0x11, -0x03, 0x8a, 0xe2, 0xb3, 0xea, 0x8d, 0xd9, 0xff, 0x4a, 0xb8, 0x2b, 0x15, -0xda, 0x9e, 0x1e, 0x00, 0xaf, 0x70, 0x41, 0x22, 0x2c, 0x13, 0x27, 0x3c, -0xbc, 0xfe, 0xac, 0xe2, 0x7f, 0xe4, 0x15, 0x74, 0x28, 0x68, 0xd4, 0xf0, -0xd9, 0x67, 0x9f, 0xc5, 0x53, 0x81, 0xf8, 0x24, 0x25, 0x03, 0xcb, 0x55, -0xa9, 0x50, 0x8c, 0x82, 0x1b, 0xe5, 0x64, 0xa4, 0xa6, 0xd6, 0x6a, 0xda, -0xea, 0xd0, 0xc5, 0x78, 0xd5, 0xa9, 0x87, 0x5e, 0x4e, 0x74, 0xa6, 0x4c, -0x9b, 0x38, 0x41, 0xa1, 0x02, 0x6d, 0x5b, 0x6c, 0xc4, 0x81, 0xc4, 0x29, -0x2a, 0x28, 0xf2, 0x5c, 0x5b, 0x6f, 0xde, 0x04, 0x91, 0xd4, 0x1e, 0x72, -0x45, 0xb8, 0x7b, 0x2a, 0x82, 0x83, 0x0a, 0x55, 0xa3, 0x20, 0x22, 0x04, -0x27, 0x81, 0x4a, 0x8b, 0x62, 0x57, 0x92, 0x49, 0xbf, 0x5e, 0xbd, 0x68, -0x7e, 0x85, 0x51, 0x4e, 0xd9, 0x64, 0xcb, 0x55, 0xa9, 0x50, 0xdd, 0x19, -0xe1, 0x03, 0xb9, 0xe9, 0xa9, 0x75, 0x9a, 0x75, 0xaa, 0xbe, 0x93, 0xc5, -0xff, 0x6f, 0xf5, 0x92, 0xef, 0x47, 0x6c, 0x7f, 0xd2, 0xe9, 0x4c, 0x9d, -0x33, 0x73, 0x06, 0x33, 0x09, 0xa2, 0xf8, 0xa4, 0x50, 0xc1, 0x73, 0x51, -0xce, 0xa3, 0x27, 0x95, 0x33, 0x79, 0xea, 0x85, 0xb7, 0x14, 0xec, 0x09, -0xaf, 0xae, 0x90, 0x65, 0xf4, 0x8a, 0x28, 0x2a, 0xec, 0x18, 0x22, 0xac, -0xce, 0xe9, 0xb1, 0xa8, 0x38, 0xd6, 0xe1, 0xb8, 0x6c, 0xe6, 0x4c, 0x69, -0x71, 0x24, 0xd6, 0x27, 0x65, 0x93, 0x0d, 0x4a, 0x90, 0x85, 0x41, 0xc1, -0xd0, 0x23, 0x91, 0x1e, 0x3f, 0x77, 0x2e, 0xc3, 0x99, 0xd0, 0x75, 0xe4, -0x8c, 0x8b, 0x10, 0x3d, 0xf0, 0x75, 0xe7, 0xd5, 0xa7, 0xe3, 0xe3, 0x9d, -0x23, 0x87, 0x0e, 0xc1, 0x3a, 0x0c, 0x2a, 0x94, 0xf8, 0x14, 0xa0, 0x92, -0xa3, 0xa3, 0x02, 0x79, 0xec, 0x8d, 0x37, 0xde, 0x68, 0xdd, 0xcc, 0xd5, -0x6a, 0xbe, 0xf7, 0xfc, 0x0d, 0xed, 0x76, 0x7d, 0xda, 0xb8, 0xe4, 0xcf, -0x64, 0xe7, 0x86, 0x97, 0x40, 0x55, 0x56, 0x0b, 0xb0, 0x29, 0x41, 0xa1, -0x75, 0xe1, 0xae, 0x2a, 0x1b, 0xf1, 0x11, 0x59, 0xea, 0x04, 0x44, 0xd0, -0xa0, 0xf8, 0x8f, 0x29, 0xf5, 0x5a, 0x65, 0xa4, 0xa7, 0xdd, 0x7e, 0xdb, -0x6d, 0x12, 0x3d, 0x8e, 0x9e, 0x2d, 0xd6, 0xa7, 0xf2, 0x0b, 0x95, 0x55, -0x91, 0x48, 0x7f, 0xfb, 0xf2, 0x4b, 0xf6, 0xec, 0x98, 0xd8, 0xc4, 0x49, -0x25, 0x8f, 0x09, 0x45, 0x76, 0x3e, 0xf4, 0x45, 0x76, 0x87, 0x21, 0x34, -0xad, 0xdc, 0xbe, 0x6d, 0x1b, 0xea, 0x8d, 0x4c, 0x26, 0x70, 0xf1, 0x49, -0x60, 0xa9, 0xac, 0x5e, 0x60, 0x1e, 0x6b, 0xef, 0x8f, 0x5f, 0xf9, 0x71, -0xeb, 0xa6, 0x05, 0x10, 0x40, 0xcd, 0xfe, 0x97, 0xb5, 0x99, 0xb7, 0xbd, -0xff, 0x0d, 0x27, 0x87, 0x6f, 0x3e, 0xdb, 0x62, 0xeb, 0x2f, 0x1a, 0x6c, -0xfb, 0x43, 0xda, 0xd6, 0x7f, 0x86, 0x38, 0x42, 0x4c, 0x7e, 0x67, 0x8d, -0xd0, 0x69, 0xc3, 0x80, 0xa8, 0x6c, 0xed, 0xdb, 0x76, 0x83, 0x8a, 0xf0, -0x77, 0xd8, 0xa9, 0xf7, 0xdd, 0xa0, 0xf8, 0x0f, 0x85, 0x53, 0x5c, 0xd5, -0xf2, 0x86, 0x0c, 0x18, 0x40, 0xf4, 0xb8, 0x74, 0xfd, 0x62, 0x6f, 0x16, -0x97, 0x76, 0xb9, 0xda, 0x64, 0x25, 0x0f, 0x8e, 0xf8, 0xdc, 0xe4, 0xc4, -0xc4, 0xac, 0xc2, 0xd1, 0x2d, 0x0e, 0x5e, 0xa4, 0xc2, 0xd1, 0xeb, 0xee, -0x8c, 0x4b, 0x48, 0xea, 0xdf, 0xab, 0x27, 0x59, 0xa3, 0xa0, 0x02, 0xda, -0x15, 0x3d, 0x3b, 0x28, 0xf3, 0x51, 0x41, 0x50, 0x60, 0x1e, 0x5d, 0x05, -0x46, 0xf4, 0xe2, 0x8b, 0x2f, 0x0a, 0x30, 0x62, 0xe3, 0x53, 0x12, 0xd3, -0x6a, 0x24, 0x66, 0xe4, 0xa6, 0xd4, 0x6c, 0x52, 0xaf, 0xd3, 0x60, 0x96, -0x65, 0xf0, 0x0d, 0x77, 0xd4, 0xdf, 0x26, 0xf5, 0xfa, 0x43, 0x51, 0x9c, -0x36, 0xed, 0xef, 0x76, 0x50, 0xc1, 0x26, 0x14, 0xe1, 0xa8, 0xe0, 0x95, -0x77, 0x9f, 0xb3, 0x3e, 0x26, 0x36, 0x01, 0xb2, 0x78, 0xee, 0xb9, 0xe7, -0x88, 0x93, 0xa5, 0x40, 0x96, 0x44, 0x04, 0x4a, 0xa9, 0x9b, 0xf2, 0x90, -0x9d, 0xd8, 0xb0, 0x95, 0x2b, 0x8d, 0x0d, 0x7b, 0xd2, 0xf8, 0xf1, 0xbc, -0xac, 0xd1, 0x7b, 0x5f, 0x12, 0xa0, 0xe6, 0xed, 0xfa, 0xae, 0x59, 0xff, -0x49, 0x44, 0xec, 0x3d, 0xf5, 0xc4, 0x13, 0x4c, 0x46, 0xc9, 0x72, 0xa2, -0xe1, 0x04, 0xee, 0x62, 0x37, 0xd8, 0xbe, 0xc0, 0x3f, 0xbb, 0x00, 0xc0, -0xb8, 0x6e, 0xd5, 0xd5, 0xf3, 0x67, 0xcf, 0x1e, 0x39, 0x68, 0x60, 0xff, -0x9e, 0xdd, 0x6b, 0x67, 0x65, 0xe2, 0xca, 0x4c, 0x88, 0x89, 0x8d, 0x77, -0xa6, 0x55, 0x6b, 0xd5, 0xaf, 0xcf, 0x35, 0xc7, 0xea, 0x6f, 0xfb, 0x2c, -0x04, 0x81, 0x61, 0x42, 0xb2, 0x15, 0x2a, 0x58, 0xe1, 0xd2, 0xbc, 0x6d, -0x2c, 0xb3, 0x11, 0x8e, 0x0a, 0xde, 0x74, 0xf7, 0xcb, 0x6f, 0x89, 0x49, -0x48, 0xae, 0x59, 0x23, 0x8b, 0xb0, 0x3c, 0x49, 0x33, 0xaa, 0x80, 0x28, -0x0f, 0x41, 0x85, 0x18, 0xa0, 0x30, 0xb9, 0xf6, 0xed, 0x41, 0x05, 0xcb, -0x9c, 0xae, 0x87, 0xbf, 0x14, 0x54, 0x74, 0x38, 0xf0, 0x45, 0x4a, 0xed, -0xe6, 0xed, 0x9a, 0xe6, 0x13, 0x92, 0x20, 0x10, 0x65, 0x47, 0x17, 0x46, -0x11, 0xac, 0x30, 0x72, 0xb9, 0xbb, 0x84, 0x42, 0x49, 0x23, 0x3c, 0x9e, -0x5a, 0x6a, 0xab, 0x62, 0x6c, 0x20, 0x49, 0xed, 0xcd, 0x37, 0xdf, 0x7c, -0xf8, 0xec, 0xd9, 0x4d, 0x1b, 0x36, 0x14, 0xb6, 0x6d, 0x9b, 0x18, 0xe3, -0x88, 0x75, 0xa6, 0x76, 0x99, 0xb5, 0x06, 0x99, 0x2a, 0xa4, 0x04, 0x2a, -0x2b, 0xe6, 0x66, 0xa5, 0x57, 0xd8, 0x44, 0x45, 0x44, 0x88, 0x4f, 0xf5, -0xb7, 0x7e, 0xd6, 0xfd, 0x8a, 0x2d, 0x8e, 0x84, 0xe4, 0x8c, 0xe4, 0xa4, -0x03, 0xfb, 0xf7, 0x4b, 0xbe, 0x22, 0x52, 0xa6, 0x50, 0x61, 0xf9, 0x99, -0x9e, 0x44, 0xb8, 0x57, 0xa8, 0xb8, 0x98, 0xde, 0x90, 0x9c, 0xd5, 0xf1, -0xf0, 0x3f, 0x84, 0xe6, 0x26, 0x1f, 0x78, 0x21, 0x3e, 0xa3, 0xe6, 0xb0, -0xfe, 0xfd, 0x40, 0xa9, 0x84, 0xb2, 0x0b, 0x2a, 0x82, 0xa8, 0xe1, 0x08, -0xbb, 0x50, 0x76, 0x61, 0x18, 0x23, 0xc0, 0x40, 0x54, 0x03, 0x84, 0x08, -0x90, 0x60, 0x03, 0x93, 0xc3, 0x47, 0x1f, 0x7d, 0xf4, 0xde, 0x7b, 0xef, -0xbd, 0xfa, 0xea, 0xab, 0x37, 0xde, 0xb0, 0x86, 0x2e, 0xc3, 0x90, 0x53, -0xd7, 0xd9, 0x6b, 0x90, 0x36, 0x2b, 0x04, 0x18, 0x81, 0x4b, 0x6b, 0x32, -0x42, 0x30, 0x79, 0x45, 0xf8, 0xa3, 0xa2, 0xde, 0xd6, 0xcf, 0xba, 0xcd, -0xdf, 0xe4, 0x88, 0x77, 0x56, 0xcf, 0x48, 0xdf, 0xb6, 0x65, 0xcb, 0x3b, -0xef, 0xbc, 0xf3, 0xd3, 0x9f, 0xfe, 0x54, 0x82, 0x64, 0x25, 0x4b, 0xbb, -0xfc, 0xc2, 0x01, 0x75, 0x54, 0x48, 0xc7, 0xad, 0xc1, 0x45, 0x45, 0x24, -0xde, 0xb5, 0x3c, 0x78, 0xd1, 0x7f, 0xd7, 0x74, 0xef, 0xdf, 0x53, 0x1b, -0xb4, 0x6f, 0x98, 0x97, 0xfd, 0xee, 0x3b, 0xef, 0x28, 0x54, 0x04, 0x1d, -0xa5, 0x06, 0x60, 0xf0, 0xc8, 0x88, 0x52, 0x30, 0x2e, 0x98, 0x06, 0xc6, -0x06, 0xac, 0x70, 0x44, 0x52, 0x83, 0x0d, 0x1c, 0x9a, 0x2c, 0xce, 0xa9, -0x53, 0xa7, 0x1a, 0xd6, 0xab, 0x8b, 0xde, 0xd1, 0xf3, 0xca, 0x92, 0x0a, -0x01, 0x46, 0xb0, 0x50, 0x61, 0xa2, 0x64, 0xfb, 0x12, 0x14, 0xdb, 0x43, -0x59, 0x1b, 0x54, 0x98, 0xa3, 0xc2, 0x05, 0x89, 0x79, 0x1b, 0x11, 0x0b, -0xaa, 0x57, 0xcb, 0xdc, 0xb9, 0x63, 0x07, 0x6f, 0x9d, 0x5d, 0x19, 0x22, -0x10, 0x71, 0xa5, 0x62, 0x7a, 0xce, 0xab, 0x0c, 0x07, 0x6e, 0x87, 0x37, -0x3d, 0x39, 0x39, 0xb9, 0xde, 0x1e, 0x55, 0x6f, 0xe6, 0x7c, 0x8f, 0x4b, -0x96, 0xc7, 0x38, 0x1c, 0x2b, 0x97, 0x2d, 0x15, 0xde, 0x55, 0x4e, 0xb1, -0x58, 0x3a, 0x30, 0x44, 0x94, 0x82, 0x29, 0xb1, 0x29, 0x70, 0x47, 0x76, -0x07, 0x56, 0x83, 0x6d, 0x02, 0x2b, 0x0d, 0x32, 0x15, 0xb2, 0xdc, 0xad, -0x87, 0x0e, 0x55, 0xcb, 0xcc, 0x8c, 0x4b, 0xca, 0xe8, 0xbd, 0x6c, 0x5f, -0x85, 0xb0, 0x8b, 0xf2, 0x21, 0xc2, 0x28, 0x2a, 0x2c, 0x5f, 0x1e, 0x82, -0x53, 0xd7, 0xd9, 0x6b, 0x63, 0xe3, 0x9c, 0xd5, 0xd3, 0xd2, 0xf6, 0xec, -0xde, 0xfd, 0xee, 0xbb, 0xef, 0xf2, 0xd6, 0x91, 0x19, 0xd8, 0x95, 0x0d, -0x3e, 0x0a, 0xbf, 0x43, 0x2a, 0x3c, 0x04, 0x3e, 0xa9, 0x3f, 0x49, 0x86, -0x83, 0x54, 0xec, 0x1b, 0x37, 0x6a, 0x54, 0xdd, 0xba, 0x75, 0x53, 0x8a, -0x5d, 0xfe, 0x3b, 0xf9, 0xc1, 0xa7, 0x96, 0x5c, 0xa3, 0x5e, 0x56, 0x4a, -0x12, 0xbb, 0x35, 0xb3, 0xe2, 0x9c, 0xa0, 0x58, 0x9f, 0xcc, 0x13, 0xd3, -0x81, 0xc1, 0x2d, 0x90, 0xd3, 0xc0, 0x06, 0xb7, 0x03, 0x1b, 0xdc, 0x17, -0x6c, 0xb0, 0x2c, 0xe8, 0x5a, 0xc8, 0x96, 0xd8, 0x31, 0x37, 0x6f, 0xda, -0xe4, 0x8c, 0x8d, 0x49, 0xc9, 0x6d, 0x44, 0xc0, 0x98, 0xbf, 0xc0, 0x08, -0x9c, 0x09, 0x04, 0x86, 0x16, 0x9b, 0x36, 0x28, 0x9e, 0x3c, 0x72, 0x78, -0x05, 0x90, 0xe8, 0x34, 0x65, 0x59, 0x6c, 0x6c, 0x5c, 0x5e, 0xf5, 0xcc, -0xfd, 0xfb, 0xf7, 0x03, 0x09, 0x04, 0x27, 0xe1, 0x12, 0x12, 0xf5, 0x54, -0xae, 0xd6, 0x58, 0x9d, 0x28, 0x15, 0x2a, 0xfe, 0xfc, 0x97, 0xbf, 0xf4, -0xe9, 0xd1, 0xbd, 0x45, 0x87, 0x1e, 0x3a, 0x9d, 0x15, 0xec, 0xf9, 0x32, -0x25, 0xa7, 0x41, 0x5e, 0x66, 0x1a, 0x15, 0x15, 0xca, 0xbb, 0x2b, 0x9f, -0x02, 0x86, 0xa0, 0x14, 0xa6, 0x21, 0x45, 0xd3, 0xe0, 0x1b, 0xe8, 0x3c, -0xdc, 0x5d, 0x04, 0x2a, 0x52, 0x9c, 0xd1, 0x34, 0x26, 0x8e, 0x1d, 0x13, -0x1b, 0x1b, 0x3f, 0x70, 0xe9, 0x0e, 0x7f, 0x51, 0x11, 0x18, 0x4d, 0xfb, -0xeb, 0xa2, 0x2d, 0x9d, 0xad, 0x4d, 0x5e, 0x11, 0x39, 0xa8, 0x00, 0x12, -0x6d, 0x87, 0x4c, 0x67, 0x59, 0x9a, 0x35, 0x6a, 0x74, 0xd7, 0xc9, 0x93, -0x02, 0x09, 0x36, 0x42, 0x09, 0x79, 0x52, 0x9e, 0xec, 0xf2, 0xb3, 0xc6, -0x9a, 0x51, 0x01, 0x09, 0x3e, 0xf7, 0xec, 0xb3, 0xf5, 0x72, 0x6b, 0xf4, -0xb9, 0xe4, 0x2a, 0x9d, 0xce, 0x7a, 0xcf, 0x5b, 0xc7, 0x3c, 0x17, 0xcc, -0x9d, 0x83, 0x0c, 0x03, 0x5c, 0x95, 0xf6, 0x5f, 0x4e, 0xec, 0x4b, 0x4f, -0x06, 0xe4, 0xf1, 0x51, 0xeb, 0x15, 0xdf, 0xe0, 0xd6, 0xa2, 0x6c, 0x20, -0xcb, 0xc1, 0x51, 0xcf, 0x9d, 0x3b, 0x97, 0xe4, 0x70, 0x34, 0xea, 0xd4, -0x3f, 0x7b, 0xc7, 0x45, 0x2d, 0xc8, 0x17, 0x78, 0x28, 0x9f, 0x5a, 0xe5, -0x25, 0x75, 0xda, 0x41, 0x05, 0x8c, 0x32, 0x12, 0x50, 0x51, 0xf7, 0x96, -0xdf, 0x77, 0x5f, 0xbc, 0xd3, 0x99, 0xdb, 0x90, 0x35, 0xe9, 0xde, 0xa5, -0xf3, 0x23, 0x8f, 0x3c, 0x82, 0x2e, 0x81, 0xe0, 0x24, 0x99, 0xd9, 0x22, -0x38, 0x19, 0xb8, 0x44, 0x39, 0xd1, 0x9f, 0x41, 0x82, 0x02, 0x15, 0x4b, -0x17, 0x2f, 0x66, 0x56, 0xe3, 0x37, 0xde, 0xad, 0x89, 0x4f, 0x5f, 0x26, -0xe7, 0x36, 0xac, 0x99, 0x99, 0xfe, 0xc2, 0x0b, 0x2f, 0xc0, 0xc6, 0x2b, -0x00, 0x15, 0x62, 0x13, 0x13, 0xa6, 0x21, 0xb6, 0x29, 0xc1, 0x06, 0xd3, -0xc3, 0x9d, 0x82, 0x40, 0x05, 0xd3, 0x10, 0x60, 0xa0, 0x80, 0x15, 0xf5, -0xe8, 0xea, 0xac, 0x5e, 0xb7, 0xcd, 0x2e, 0xdc, 0x17, 0x3e, 0x6d, 0xfc, -0x06, 0x48, 0xf8, 0x74, 0x6d, 0xf0, 0x4e, 0x8e, 0xa2, 0x42, 0xbd, 0xb6, -0x2e, 0x73, 0x37, 0xc6, 0x39, 0xd3, 0xf0, 0x1f, 0x4f, 0x9f, 0x3a, 0xf5, -0xf1, 0xc7, 0x1f, 0x7f, 0xfb, 0xed, 0xb7, 0x79, 0xbb, 0xec, 0x7c, 0xa2, -0x5e, 0x9b, 0xb9, 0x44, 0x79, 0x43, 0x42, 0xa8, 0x10, 0xca, 0xfb, 0xf0, -0x83, 0x0f, 0x5a, 0xe6, 0x37, 0x4c, 0xac, 0xd3, 0x5a, 0x39, 0x2b, 0x28, -0xbd, 0xd3, 0x67, 0xe1, 0x56, 0xde, 0xdd, 0x35, 0xab, 0xae, 0x86, 0x95, -0x55, 0x18, 0x2a, 0x94, 0x65, 0xcc, 0xc0, 0x37, 0x84, 0x69, 0x20, 0x50, -0x09, 0x30, 0x58, 0xb4, 0x49, 0xa3, 0x47, 0xc6, 0xa7, 0xd6, 0x18, 0xbd, -0xf5, 0x61, 0x5f, 0x50, 0x21, 0x90, 0xa8, 0x02, 0x81, 0xd8, 0x51, 0x54, -0xc8, 0x6b, 0xab, 0xbb, 0xe5, 0xf7, 0x09, 0xe9, 0xd9, 0x19, 0x69, 0xa9, -0x9b, 0x36, 0x6e, 0x7c, 0xf9, 0xe5, 0x97, 0x81, 0x04, 0xf2, 0xb1, 0x54, -0xb5, 0xa9, 0x60, 0x5d, 0xc2, 0x20, 0x41, 0xb1, 0x25, 0xff, 0xe8, 0xd9, -0x67, 0xd3, 0x09, 0x40, 0x1a, 0xb2, 0xb0, 0xcb, 0x91, 0xbf, 0x2b, 0x3d, -0x3b, 0xb5, 0x7e, 0x1b, 0xde, 0xdd, 0x99, 0xd3, 0xa7, 0x55, 0x9c, 0xa2, -0x68, 0xdb, 0x81, 0x7b, 0xb5, 0xed, 0x98, 0x01, 0x14, 0x3c, 0x14, 0xd3, -0x90, 0x8a, 0xe5, 0x12, 0x1b, 0x82, 0x82, 0x31, 0x63, 0xca, 0xe4, 0xb8, -0xa4, 0x6a, 0x5d, 0xaf, 0xbe, 0xdd, 0x77, 0x54, 0x54, 0x9e, 0xe0, 0xa4, -0xd8, 0x9a, 0x09, 0x15, 0x62, 0x65, 0x31, 0xfa, 0xb6, 0x91, 0xa0, 0x78, -0xd4, 0x30, 0xb6, 0xcc, 0xf6, 0x5b, 0xb6, 0x3b, 0x2e, 0x36, 0x7e, 0xd8, -0xe0, 0x41, 0x08, 0x24, 0x6f, 0xbd, 0xf5, 0x96, 0x40, 0x42, 0x62, 0xc2, -0x54, 0xa5, 0x82, 0x8a, 0xd1, 0x25, 0xcc, 0xa8, 0x80, 0xf4, 0x59, 0xf9, -0xc6, 0x33, 0xb6, 0x14, 0x1e, 0xb9, 0xd8, 0xef, 0xbd, 0xe7, 0x05, 0x8d, -0xe2, 0x8a, 0x05, 0x0b, 0xb0, 0xf9, 0x48, 0xed, 0x67, 0xb1, 0xcc, 0x56, -0x30, 0x2a, 0x74, 0x99, 0x4a, 0xe5, 0x45, 0x89, 0xbc, 0xbd, 0xf8, 0xf2, -0xf9, 0x8e, 0xf8, 0xe4, 0x2e, 0x2b, 0x0e, 0xfb, 0x82, 0x8a, 0xe0, 0x89, -0x40, 0xbe, 0x89, 0x6d, 0xde, 0xfd, 0x15, 0x16, 0xa8, 0x90, 0xe7, 0x0c, -0x6f, 0x54, 0xb4, 0x1b, 0x3e, 0x33, 0x35, 0x31, 0x71, 0x7b, 0x71, 0xf1, -0x6b, 0xaf, 0xbd, 0x26, 0xa4, 0x06, 0x24, 0x24, 0xac, 0xa3, 0x5c, 0xb3, -0x4f, 0x3d, 0x6f, 0xcc, 0xe2, 0xaf, 0x38, 0x7a, 0xf8, 0x30, 0x18, 0x68, -0x7a, 0xc5, 0xa1, 0xb6, 0xb7, 0xba, 0xe2, 0xb7, 0x29, 0x3f, 0x13, 0x9f, -0xd5, 0xb0, 0x59, 0xa3, 0xfa, 0x0f, 0x3f, 0xf4, 0x90, 0xd8, 0x8b, 0x91, -0xf1, 0x50, 0x76, 0x65, 0x9e, 0x15, 0xc9, 0x2b, 0x0c, 0x1c, 0x03, 0x1d, -0x43, 0xd8, 0x05, 0xd4, 0x32, 0x63, 0xca, 0xc4, 0xb8, 0x94, 0xac, 0x71, -0x3b, 0xce, 0x85, 0x39, 0x2a, 0xc2, 0xdb, 0x32, 0x5b, 0xab, 0x5d, 0xbf, -0xf4, 0x24, 0xe7, 0x3d, 0xa7, 0x4e, 0x61, 0x74, 0x12, 0x99, 0x44, 0xb8, -0x84, 0x04, 0x66, 0x57, 0x3c, 0x97, 0xd0, 0x7d, 0xdb, 0x3b, 0xb6, 0x6e, -0x01, 0x15, 0xcd, 0x97, 0x1c, 0x6f, 0x7e, 0xd0, 0xe5, 0xc2, 0x1b, 0xb6, -0xf9, 0x2c, 0xbf, 0xce, 0x9e, 0x31, 0x03, 0xf4, 0x62, 0x93, 0x15, 0x63, -0x80, 0xca, 0x1d, 0xaf, 0x78, 0x54, 0xa8, 0xc8, 0x14, 0x89, 0x98, 0x02, -0x9c, 0x90, 0x4a, 0x41, 0x9d, 0x9a, 0x69, 0xf5, 0xdb, 0x10, 0xac, 0x15, -0xce, 0xa8, 0x60, 0xd7, 0x0c, 0x6f, 0x5e, 0x51, 0xbb, 0x6d, 0xdf, 0xf4, -0xa4, 0xa4, 0x07, 0xee, 0xbf, 0x1f, 0x52, 0x53, 0xb9, 0x13, 0xbc, 0x60, -0x3d, 0x77, 0xa2, 0x02, 0xd4, 0x6b, 0x03, 0xeb, 0x10, 0x5e, 0xb1, 0x7e, -0xcd, 0x1a, 0x60, 0xd0, 0x62, 0xe5, 0xdd, 0x0d, 0xf6, 0xb9, 0x4a, 0xdd, -0x14, 0x2c, 0xba, 0x95, 0x5f, 0x97, 0x2f, 0x5d, 0x4a, 0x9c, 0x05, 0x00, -0xc6, 0x6a, 0x4c, 0x44, 0xb3, 0x94, 0x69, 0x0b, 0x24, 0x2b, 0xd5, 0xbe, -0x3a, 0x61, 0xe9, 0xe6, 0xd3, 0x3b, 0xbf, 0xbc, 0xf6, 0xea, 0xab, 0x38, -0xdd, 0x5b, 0x0e, 0xbc, 0x24, 0x6f, 0xa7, 0xab, 0xe4, 0x42, 0xe8, 0xfd, -0xd8, 0xd1, 0x2b, 0x24, 0x58, 0x32, 0xbc, 0x51, 0xd1, 0x69, 0xc2, 0x95, -0xc9, 0x09, 0x09, 0xf8, 0x65, 0x55, 0xee, 0x84, 0x04, 0xdb, 0xa9, 0xa8, -0xec, 0x8a, 0x87, 0x84, 0xda, 0x83, 0x57, 0xaf, 0x5c, 0xce, 0x6b, 0x6a, -0x73, 0xdd, 0x7d, 0xd9, 0xbb, 0x5c, 0xf5, 0x33, 0x47, 0x94, 0xb8, 0x9a, -0x35, 0x4e, 0x9f, 0x32, 0x19, 0xe5, 0x07, 0x77, 0x32, 0xce, 0x0a, 0x50, -0x51, 0xf1, 0xdd, 0x33, 0x74, 0xf3, 0xb1, 0x1e, 0x44, 0x88, 0x7a, 0xb3, -0x66, 0xf5, 0x75, 0xf1, 0xb1, 0x09, 0xa3, 0xae, 0x3f, 0x1a, 0x7a, 0x78, -0x30, 0x55, 0x5f, 0x96, 0xac, 0x23, 0x6b, 0xbd, 0x22, 0xec, 0x51, 0x31, -0x74, 0xdd, 0x3d, 0xa4, 0x09, 0x90, 0x90, 0x8d, 0xa1, 0x53, 0x0a, 0x9f, -0x09, 0xa3, 0x28, 0xbf, 0x0a, 0x99, 0x5e, 0xf7, 0x66, 0xf1, 0x0c, 0xa0, -0x2a, 0xac, 0x58, 0xbc, 0xc8, 0xe5, 0x42, 0x59, 0xff, 0x68, 0xe2, 0x36, -0x57, 0x28, 0x44, 0x73, 0x97, 0x5e, 0x51, 0x9f, 0x36, 0x4b, 0x8f, 0x9d, -0x3b, 0x57, 0x15, 0x78, 0x85, 0x21, 0x13, 0x03, 0x25, 0xa7, 0x69, 0x83, -0xfa, 0x29, 0x79, 0x8d, 0x99, 0x67, 0x18, 0xa0, 0x42, 0xba, 0xf6, 0xf8, -0x8d, 0x0a, 0x77, 0xfe, 0x97, 0xca, 0x8e, 0x69, 0xb1, 0xc7, 0xc1, 0x1b, -0x6e, 0xff, 0x53, 0x52, 0xcd, 0x26, 0x79, 0xd9, 0x35, 0xce, 0x3d, 0xf2, -0x88, 0x28, 0xaf, 0xe5, 0x5a, 0x21, 0xd3, 0x2b, 0x24, 0x14, 0xa3, 0x80, -0x5f, 0x2d, 0x5d, 0x74, 0x05, 0xa8, 0x18, 0x70, 0xcb, 0xe3, 0x8a, 0xc8, -0xfa, 0x2d, 0x76, 0xd5, 0x99, 0x25, 0x5d, 0x1b, 0x0b, 0xb2, 0xae, 0x57, -0x54, 0xbc, 0x04, 0x65, 0x08, 0xaa, 0x85, 0xc1, 0xee, 0xd8, 0xb6, 0x2d, -0x21, 0x3e, 0xbe, 0xf7, 0xec, 0xd5, 0xa1, 0x0a, 0x89, 0xb2, 0x35, 0xc9, -0xad, 0x51, 0x71, 0xfb, 0xed, 0xb7, 0xdb, 0x90, 0xa0, 0xcc, 0x36, 0x66, -0x95, 0xf5, 0xa7, 0x42, 0xd8, 0xab, 0x7a, 0x9e, 0x77, 0xaf, 0xcb, 0x5d, -0x4a, 0xed, 0x84, 0x31, 0x63, 0xd8, 0x18, 0x14, 0x2a, 0xca, 0x29, 0xc9, -0xce, 0x12, 0x15, 0xe2, 0x1a, 0x53, 0x87, 0x64, 0x6c, 0xa3, 0x2d, 0x5c, -0x39, 0x8f, 0x9a, 0xb6, 0xf1, 0x23, 0x76, 0x3c, 0xa3, 0xe8, 0x8c, 0x30, -0xf2, 0xac, 0xf6, 0x83, 0x99, 0x2d, 0x46, 0x33, 0xd5, 0x2a, 0xa0, 0xfc, -0xa2, 0x03, 0x3d, 0x60, 0x58, 0x31, 0x0a, 0x09, 0xa7, 0x65, 0xe9, 0x3a, -0xb4, 0x6c, 0xc9, 0x6c, 0x43, 0x98, 0x51, 0x94, 0x03, 0x2a, 0x74, 0xce, -0x50, 0x05, 0x02, 0x5a, 0xec, 0x31, 0x0a, 0xa1, 0xb6, 0xb6, 0x3b, 0x7e, -0x9d, 0x90, 0xdb, 0xb4, 0x55, 0xd3, 0x82, 0x77, 0xde, 0x7e, 0x1b, 0xf3, -0xbf, 0x04, 0x77, 0x94, 0x37, 0x2a, 0x0c, 0x48, 0x30, 0xc7, 0x53, 0xc0, -0x2b, 0xae, 0x5d, 0xbe, 0x0c, 0x00, 0x8c, 0xdd, 0x51, 0xca, 0x2b, 0x98, -0xed, 0xc0, 0x1b, 0xef, 0x74, 0xc4, 0x25, 0xcd, 0x98, 0x36, 0x15, 0xe3, -0xac, 0x54, 0x1b, 0xf1, 0x90, 0x75, 0x64, 0xbe, 0x8b, 0xfa, 0xc6, 0x0e, -0xd7, 0x72, 0x77, 0x8e, 0xce, 0x28, 0xc4, 0x26, 0xbb, 0xe8, 0x0a, 0x17, -0x5b, 0xeb, 0x79, 0xe9, 0xd5, 0x21, 0xcc, 0x28, 0xca, 0xa2, 0xc2, 0x5a, -0xaf, 0x80, 0x57, 0x48, 0xce, 0xae, 0x95, 0xb6, 0xed, 0x35, 0x6a, 0x45, -0x3f, 0xa1, 0xaa, 0xdb, 0x22, 0x9a, 0xef, 0xfc, 0x43, 0x5c, 0x46, 0xed, -0xc2, 0xb6, 0x6d, 0xa0, 0x33, 0x88, 0xac, 0xfc, 0x50, 0x61, 0x60, 0x08, -0x2a, 0xac, 0x08, 0x1d, 0x46, 0x2c, 0x39, 0x7a, 0xec, 0x1d, 0xea, 0x8d, -0x14, 0xca, 0x1f, 0xbb, 0xe9, 0xb4, 0x4e, 0x6a, 0xed, 0xf6, 0xfc, 0x31, -0xb9, 0x56, 0xd3, 0x36, 0x4d, 0x1a, 0x62, 0xf0, 0xd1, 0x2b, 0x53, 0xe9, -0x19, 0xaa, 0x3a, 0xdb, 0x91, 0xbb, 0x88, 0x5a, 0xac, 0x3e, 0xfb, 0x87, -0x0d, 0x7d, 0x58, 0xc9, 0xd4, 0x93, 0x5e, 0x92, 0xc7, 0x8e, 0x1c, 0x49, -0x8e, 0x8f, 0x4d, 0x2f, 0xe8, 0x1e, 0xf2, 0x05, 0xfd, 0x35, 0x1b, 0x94, -0x5b, 0x09, 0xca, 0x36, 0x2a, 0x68, 0x18, 0x69, 0x26, 0xfd, 0xd0, 0xd0, -0x2b, 0x5c, 0x41, 0x1f, 0x25, 0x5f, 0xa6, 0x64, 0xe4, 0xf4, 0xea, 0xda, -0x45, 0x9c, 0x15, 0x4a, 0xdb, 0x0e, 0xa2, 0xf5, 0xc9, 0x40, 0xa6, 0x02, -0x03, 0x1d, 0x09, 0x12, 0x88, 0x2a, 0x71, 0xda, 0xec, 0xbe, 0x92, 0x14, -0xba, 0x63, 0xab, 0x2b, 0xe4, 0x69, 0xc2, 0x2d, 0xf7, 0xeb, 0xa8, 0xc8, -0x29, 0xf9, 0x67, 0xe3, 0xee, 0xc3, 0x53, 0x1d, 0x8e, 0xc7, 0x1f, 0x7b, -0x0c, 0x21, 0x4a, 0xcf, 0x85, 0x52, 0x35, 0xfa, 0x15, 0xf5, 0x03, 0x33, -0xec, 0x54, 0xa0, 0x1d, 0x5b, 0x82, 0x2a, 0x77, 0x60, 0x86, 0x87, 0x1d, -0xbe, 0x61, 0x80, 0x84, 0xca, 0xea, 0x06, 0x9c, 0x8d, 0x48, 0xc4, 0x8b, -0x4b, 0x1a, 0xb1, 0xed, 0x62, 0x61, 0x9e, 0x10, 0x66, 0x17, 0xf6, 0x51, -0x81, 0x65, 0xc6, 0x14, 0xf1, 0x61, 0x96, 0x91, 0xaa, 0xba, 0xf2, 0xe0, -0xe1, 0x55, 0xa5, 0x6c, 0xfb, 0xb6, 0x61, 0xdb, 0xee, 0xed, 0x5a, 0xb6, -0x20, 0x11, 0x19, 0xde, 0xa8, 0x2c, 0xb3, 0x01, 0x0a, 0x51, 0xe6, 0x0d, -0x5b, 0x45, 0x9b, 0x0a, 0x06, 0x74, 0x18, 0x80, 0x04, 0x78, 0x14, 0x60, -0x60, 0xeb, 0x55, 0xb9, 0xa0, 0x57, 0x11, 0x3d, 0xe1, 0x88, 0x99, 0xb2, -0xe7, 0xe9, 0xb2, 0x93, 0x3f, 0xdf, 0x77, 0xd6, 0x2a, 0xde, 0xc8, 0xcc, -0xe9, 0xd3, 0x25, 0x40, 0x50, 0x0a, 0x19, 0x4a, 0x92, 0xa0, 0xa4, 0x1f, -0x29, 0xb6, 0x73, 0xf3, 0x86, 0x0d, 0xfd, 0x7b, 0xf7, 0x6e, 0x5f, 0xd0, -0xb8, 0x55, 0x7e, 0xc3, 0xc5, 0x0b, 0x17, 0x52, 0x29, 0x87, 0x13, 0xb8, -0xbb, 0x74, 0x97, 0x14, 0xeb, 0xb3, 0x0e, 0x12, 0x33, 0x33, 0x51, 0xdf, -0x08, 0xb7, 0x91, 0x47, 0x50, 0x91, 0xe4, 0x3f, 0xfd, 0xe4, 0x13, 0xda, -0xab, 0x32, 0x99, 0x81, 0x57, 0xef, 0x0f, 0x87, 0xc2, 0x9b, 0x6e, 0x50, -0x41, 0xef, 0x79, 0xd2, 0x21, 0x1d, 0xfc, 0x53, 0xda, 0xb6, 0x37, 0x54, -0x08, 0x97, 0x08, 0x61, 0x54, 0x30, 0xff, 0x6e, 0x53, 0x96, 0x54, 0x4f, -0x76, 0xd2, 0x03, 0x92, 0x9d, 0xd5, 0x32, 0x6e, 0x5c, 0x48, 0xdc, 0xec, -0x6b, 0xd3, 0x8d, 0xf7, 0x66, 0xa5, 0x59, 0xa7, 0x24, 0x88, 0x09, 0x1a, -0x42, 0xd8, 0xd8, 0xbf, 0x77, 0xef, 0x53, 0x4f, 0x3e, 0x09, 0x0c, 0x14, -0x12, 0x60, 0x0b, 0xb4, 0x50, 0xe1, 0xe7, 0x67, 0x90, 0xf9, 0x27, 0x9f, -0x7c, 0xfc, 0xd1, 0x47, 0xaf, 0xbf, 0xf6, 0xda, 0xd2, 0xab, 0x16, 0xe7, -0xa4, 0x3a, 0x53, 0xeb, 0xb5, 0x32, 0x53, 0x5b, 0xe3, 0x92, 0xbf, 0x74, -0x18, 0x30, 0x9e, 0x5a, 0x86, 0x03, 0x8b, 0x8a, 0xf6, 0xef, 0xdb, 0xc7, -0x85, 0xaa, 0x56, 0x1a, 0x63, 0x4a, 0xe7, 0x48, 0x81, 0x5c, 0xcf, 0x2e, -0x94, 0xc4, 0x8c, 0x49, 0x69, 0xde, 0x2f, 0xa9, 0x7e, 0x07, 0xde, 0xf8, -0xdd, 0x27, 0x4f, 0xaa, 0x0e, 0x7a, 0x72, 0x8e, 0x19, 0x21, 0x8a, 0x8f, -0x19, 0x18, 0x9a, 0x92, 0xee, 0x24, 0x80, 0x1c, 0x00, 0x7f, 0xf2, 0xf1, -0xc7, 0x3d, 0x0a, 0x0b, 0x19, 0xb6, 0xdf, 0xe5, 0x1b, 0x43, 0x5e, 0x76, -0x32, 0xf9, 0x2b, 0x74, 0x09, 0xaa, 0x0c, 0x2a, 0x44, 0x82, 0x32, 0xa1, -0x42, 0x0f, 0xfa, 0xd5, 0xc1, 0x10, 0xc2, 0xc0, 0x18, 0xbe, 0xf6, 0x24, -0x6f, 0xf7, 0xca, 0x85, 0x0b, 0x55, 0x15, 0x0f, 0xd5, 0x1e, 0x45, 0x36, -0x54, 0x7d, 0xcb, 0xb4, 0xfc, 0x6c, 0x20, 0x26, 0x5d, 0x49, 0x60, 0x28, -0x0a, 0xe7, 0xd0, 0x21, 0xbb, 0x6e, 0x6e, 0x4e, 0x86, 0xd3, 0x99, 0x96, -0x90, 0x90, 0x5b, 0x2d, 0xb3, 0x55, 0x93, 0xfc, 0xd6, 0x05, 0x4d, 0xf8, -0x69, 0x55, 0xd0, 0xa4, 0x79, 0xe3, 0x46, 0x8d, 0x6a, 0xd7, 0xe2, 0xa7, -0xa1, 0xfc, 0xd4, 0xaa, 0xc5, 0x99, 0x34, 0xbc, 0x73, 0xe6, 0x36, 0x9a, -0xb4, 0xd3, 0x5a, 0x2c, 0x01, 0x18, 0xed, 0x07, 0x4d, 0x62, 0xce, 0x69, -0x89, 0x09, 0x2d, 0x0b, 0x9a, 0xcc, 0xba, 0x64, 0xda, 0xfe, 0x3d, 0xbb, -0xdf, 0x78, 0xfd, 0x35, 0x5e, 0x19, 0x4c, 0x43, 0x0e, 0x2c, 0x07, 0x9d, -0xdb, 0xb6, 0x71, 0x66, 0xe4, 0xd0, 0x05, 0x66, 0xcc, 0x8e, 0x27, 0x63, -0x53, 0xaa, 0xb7, 0x2e, 0x68, 0x0c, 0xea, 0x38, 0x87, 0x03, 0x96, 0x28, -0x15, 0x07, 0x31, 0x1f, 0xbd, 0xfd, 0xd6, 0x5b, 0x6f, 0xbf, 0xf9, 0xe6, -0x3b, 0x6f, 0xbd, 0x25, 0x3f, 0xef, 0xbe, 0xfd, 0xb6, 0xfa, 0x71, 0xfd, -0xfa, 0xce, 0x3b, 0xd4, 0x9e, 0xba, 0xf3, 0xe4, 0x89, 0x3b, 0x4f, 0xdc, -0x41, 0x3b, 0xfa, 0x13, 0x77, 0x1c, 0xbf, 0x83, 0x22, 0x8a, 0x47, 0x0e, -0x77, 0x6e, 0xd7, 0xce, 0x05, 0x89, 0x79, 0xeb, 0x42, 0xdb, 0xee, 0xa4, -0x0b, 0xff, 0x56, 0xbc, 0x82, 0x65, 0xf4, 0x15, 0x15, 0x06, 0x75, 0x22, -0x64, 0x74, 0x09, 0x83, 0x40, 0xd5, 0x78, 0xe7, 0xe7, 0x38, 0xc8, 0xea, -0xe5, 0x64, 0x53, 0xd1, 0x15, 0x81, 0x44, 0xda, 0xb5, 0xa8, 0x7d, 0x57, -0xc9, 0x1b, 0x4a, 0x38, 0x31, 0x7f, 0x90, 0x4d, 0x57, 0x0e, 0xd9, 0xa7, -0x45, 0x49, 0x60, 0xcb, 0x99, 0x34, 0x66, 0x14, 0x24, 0x1e, 0xeb, 0x88, -0x49, 0x6b, 0xd4, 0xb1, 0xde, 0xa4, 0x1b, 0x1b, 0x4c, 0x5b, 0x5f, 0xbd, -0xcd, 0xc0, 0xf8, 0xd4, 0x9c, 0xd8, 0xc4, 0xd4, 0x58, 0x67, 0xba, 0x33, -0x35, 0x2b, 0xa7, 0x6e, 0x93, 0x82, 0x6e, 0xc3, 0x5a, 0xf7, 0x19, 0xdd, -0x71, 0xe0, 0x84, 0x6e, 0xc3, 0xa6, 0xf4, 0x1c, 0x79, 0x49, 0x9f, 0x09, -0x73, 0x46, 0x5e, 0xb3, 0x17, 0x3b, 0xac, 0x07, 0xc1, 0x8f, 0x39, 0x8f, -0xdc, 0xfc, 0x40, 0xb3, 0xa1, 0xb3, 0x9d, 0x35, 0xea, 0x27, 0xc4, 0x27, -0x26, 0x3b, 0x93, 0xd2, 0x12, 0xe3, 0x6b, 0xa4, 0x24, 0xb6, 0x6e, 0xd2, -0xa8, 0x7f, 0x8f, 0x6e, 0x97, 0x4e, 0x9a, 0xd8, 0xac, 0x7e, 0x5d, 0xee, -0xdb, 0x6f, 0xf6, 0xf5, 0x0c, 0xd2, 0xf2, 0xd0, 0xb7, 0x83, 0x56, 0xee, -0x8d, 0x8b, 0x89, 0x4d, 0x8f, 0x73, 0x54, 0x73, 0xc6, 0x95, 0xfd, 0x89, -0xcf, 0x70, 0x26, 0x7a, 0xfe, 0x49, 0xa3, 0xd4, 0xb3, 0x33, 0x49, 0xff, -0x49, 0x49, 0x74, 0xc6, 0xc7, 0x39, 0xc3, 0x0a, 0x12, 0x6e, 0x2c, 0xb3, -0x16, 0xa8, 0x80, 0x35, 0x9b, 0x78, 0x85, 0xca, 0x0e, 0x09, 0x61, 0xe6, -0x60, 0xa6, 0xb6, 0x5e, 0x57, 0xdc, 0xc2, 0x4e, 0x31, 0x67, 0xd6, 0x2c, -0x89, 0xa4, 0x00, 0x18, 0xd2, 0x53, 0x0b, 0x51, 0x81, 0x0d, 0x15, 0x84, -0x40, 0xe2, 0xee, 0x0e, 0x11, 0x87, 0x44, 0x22, 0x92, 0x7c, 0x7f, 0x76, -0x62, 0x0c, 0x44, 0xbb, 0x76, 0xec, 0xc8, 0x49, 0x4f, 0x21, 0x34, 0xa8, -0x7a, 0x8b, 0x9e, 0x63, 0x76, 0x3d, 0xdb, 0xfd, 0xe8, 0xdf, 0xbb, 0x1e, -0xfd, 0x07, 0x61, 0xe1, 0xed, 0x6f, 0xfd, 0xba, 0xe5, 0xc1, 0x7f, 0xe6, -0xef, 0xff, 0xa6, 0xce, 0x9e, 0x6f, 0xb3, 0x4a, 0x5c, 0xbd, 0x36, 0xfd, -0xd6, 0x50, 0x51, 0xbe, 0xdb, 0xef, 0xfb, 0xf3, 0x84, 0x9d, 0x4f, 0x0c, -0x59, 0xb6, 0xb3, 0xe3, 0xe8, 0x39, 0x35, 0x9b, 0x75, 0x4e, 0xad, 0x99, -0x9f, 0x9c, 0x55, 0xd7, 0x99, 0x9e, 0x4d, 0xc5, 0x83, 0xbe, 0x73, 0x6e, -0x50, 0x75, 0x38, 0x5b, 0x1c, 0xf8, 0x7a, 0xcc, 0x75, 0xfb, 0xfb, 0x8f, -0x9d, 0xd1, 0x77, 0xd4, 0xd4, 0x3e, 0x23, 0xa7, 0xf4, 0x1e, 0x3e, 0xb9, -0xfb, 0xd0, 0x09, 0x9d, 0x07, 0x8c, 0x29, 0x1c, 0x32, 0xa5, 0xd3, 0xd8, -0x05, 0x6d, 0x46, 0xcc, 0x69, 0x36, 0x78, 0x66, 0xc3, 0x7e, 0xd3, 0x6a, -0xf6, 0x98, 0x98, 0xd3, 0x75, 0x5c, 0xcd, 0x1e, 0x13, 0x1a, 0xf4, 0x9d, -0xc6, 0x37, 0x6d, 0x46, 0xcc, 0xed, 0x38, 0x66, 0x41, 0xcf, 0x99, 0xd7, -0xf5, 0x5f, 0x5c, 0x3c, 0x68, 0xe9, 0x8e, 0x61, 0xcb, 0x4b, 0x86, 0xaf, -0xd8, 0x35, 0x72, 0xe5, 0xee, 0x51, 0xab, 0xf6, 0xc0, 0xc7, 0xc2, 0x41, -0x97, 0xf0, 0x83, 0x57, 0x58, 0xa1, 0xc2, 0xe0, 0xb9, 0x0b, 0x55, 0xfe, -0x60, 0x20, 0xc4, 0xfc, 0x9d, 0x5f, 0x64, 0x36, 0xe9, 0x42, 0xa1, 0xc8, -0x0d, 0xeb, 0xd7, 0x11, 0x3f, 0x8b, 0xb9, 0x1a, 0xd3, 0x8d, 0x04, 0xa5, -0x02, 0x0f, 0x91, 0x37, 0x2c, 0x0f, 0xfe, 0xc4, 0x21, 0x62, 0x09, 0x48, -0x40, 0x35, 0xf8, 0xd1, 0x73, 0xcf, 0xed, 0xdf, 0xb7, 0xb7, 0x3f, 0x35, -0xff, 0x1c, 0x54, 0xfd, 0x6b, 0x34, 0xf4, 0x86, 0xdb, 0xc1, 0x80, 0xdf, -0x74, 0x6f, 0xff, 0xc2, 0xb4, 0xed, 0xdf, 0x37, 0xdc, 0xfb, 0xcf, 0xb6, -0x07, 0xff, 0xde, 0xf9, 0xe0, 0xe7, 0x53, 0xf6, 0x3f, 0xef, 0x46, 0xb0, -0x39, 0x4f, 0x42, 0x9f, 0xe9, 0xa7, 0xaa, 0x5b, 0xcf, 0xed, 0x2f, 0x42, -0x40, 0x67, 0xda, 0x94, 0xa0, 0x3c, 0xa2, 0x22, 0x4c, 0xf0, 0xa0, 0xd6, -0x71, 0xc2, 0x9e, 0x67, 0x9d, 0x35, 0x5c, 0x52, 0x47, 0xc7, 0x56, 0xcd, -0xbb, 0xb6, 0x6f, 0xdb, 0xb3, 0x53, 0x87, 0x51, 0x83, 0x07, 0x4d, 0x1e, -0x37, 0x66, 0xe2, 0x98, 0x51, 0xf3, 0x2e, 0x9b, 0xbd, 0x7c, 0xc9, 0x92, -0xa5, 0x57, 0x5d, 0x75, 0xc3, 0x75, 0xd7, 0x6d, 0xb9, 0xf9, 0xe6, 0x6b, -0xae, 0xbe, 0x7a, 0xd9, 0x92, 0x25, 0x2b, 0x96, 0x2e, 0x5d, 0x72, 0xe5, -0x95, 0xd3, 0x27, 0x4f, 0x9c, 0x34, 0x66, 0xf4, 0xa4, 0xb1, 0xa3, 0x39, -0xad, 0xa8, 0x7b, 0xb7, 0x6e, 0xed, 0x5a, 0xe7, 0x56, 0xcb, 0x60, 0x79, -0x63, 0x12, 0x52, 0x6a, 0xf6, 0xbd, 0x74, 0x64, 0xc9, 0x33, 0xcd, 0xf7, -0xfb, 0x91, 0xda, 0x1f, 0x25, 0xd3, 0xca, 0x58, 0x01, 0xfb, 0xa8, 0x40, -0x1b, 0x2b, 0x6b, 0x99, 0x0d, 0x2b, 0xc1, 0xc9, 0xb0, 0xb5, 0x34, 0xd9, -0xf5, 0xc5, 0x80, 0x79, 0x37, 0xb6, 0xef, 0x3d, 0x3c, 0xbf, 0x63, 0xdf, -0xf4, 0x7a, 0xad, 0x1c, 0x09, 0x69, 0x90, 0xb7, 0xc3, 0x41, 0x55, 0x7c, -0x0f, 0x87, 0x9c, 0xc0, 0x4f, 0x7c, 0x4a, 0xcd, 0xfc, 0x86, 0xed, 0xfb, -0x76, 0x19, 0x7f, 0xf9, 0x88, 0x35, 0xb7, 0x4d, 0xde, 0xfb, 0x5c, 0xb3, -0x7d, 0x9e, 0x14, 0x83, 0x80, 0x76, 0x35, 0x5f, 0x9c, 0xf7, 0xd1, 0x1b, -0xd9, 0x5d, 0x01, 0x3b, 0x96, 0x59, 0x44, 0x02, 0x78, 0x85, 0x1b, 0x54, -0x84, 0x1b, 0xa3, 0x30, 0x2f, 0x5c, 0x5a, 0xf1, 0x77, 0x0d, 0xf6, 0x7c, -0xdd, 0x66, 0xff, 0x97, 0x85, 0x07, 0xff, 0x32, 0xe5, 0xc0, 0x4b, 0x63, -0x77, 0x3e, 0x3d, 0x68, 0xeb, 0xe3, 0xed, 0x57, 0x9e, 0x68, 0x74, 0x59, -0x49, 0x87, 0xeb, 0x4e, 0x0f, 0xda, 0xf2, 0xd8, 0xb8, 0x5d, 0xcf, 0x4c, -0x39, 0xf0, 0x22, 0xe2, 0x4a, 0x87, 0x83, 0x5f, 0x22, 0xae, 0xd4, 0xdd, -0xfd, 0x4d, 0x4a, 0xb1, 0x2b, 0xe4, 0x3b, 0xfa, 0x13, 0xaa, 0x2b, 0x60, -0x42, 0x85, 0x38, 0x49, 0x8d, 0x36, 0x28, 0xf7, 0x12, 0x54, 0xf4, 0xdd, -0x47, 0x57, 0x20, 0xec, 0x56, 0xc0, 0x2b, 0x2a, 0x8e, 0x1f, 0x3f, 0x8e, -0x12, 0x69, 0xc5, 0x2b, 0xc2, 0x6e, 0x2d, 0xa2, 0xbb, 0x7b, 0x74, 0x05, -0xdc, 0x78, 0xf1, 0x8c, 0xbc, 0x22, 0x8a, 0x8a, 0x50, 0x15, 0x03, 0xa2, -0x24, 0xee, 0xf7, 0x0a, 0xd8, 0xe4, 0x15, 0xc4, 0x90, 0x9a, 0xf4, 0x8a, -0x28, 0xaf, 0x88, 0xae, 0x40, 0x98, 0xae, 0x80, 0x86, 0x0a, 0xd2, 0x80, -0x55, 0x21, 0x7a, 0xa3, 0x5e, 0x01, 0x2a, 0x60, 0x22, 0x65, 0xec, 0x2f, -0x9b, 0xfd, 0x77, 0x39, 0x45, 0x77, 0xdf, 0xe8, 0x0a, 0x54, 0xe9, 0x15, -0xf0, 0x8a, 0x0a, 0x91, 0xa0, 0x04, 0x15, 0xb1, 0xb1, 0x84, 0xa2, 0xfd, -0x70, 0x6c, 0x0a, 0xb3, 0xde, 0xb2, 0x61, 0xba, 0xed, 0xf9, 0x2d, 0x45, -0x44, 0xec, 0x85, 0x10, 0xf6, 0x0f, 0x07, 0x04, 0x6f, 0xcd, 0x2b, 0x74, -0x54, 0xe4, 0xe4, 0xe4, 0x94, 0xa2, 0x62, 0xe5, 0x27, 0x55, 0x1a, 0xee, -0x11, 0xfb, 0x52, 0xa3, 0x0f, 0x1e, 0xe0, 0x0a, 0x40, 0xd8, 0x3f, 0x1c, -0x35, 0x6a, 0xd4, 0x70, 0x8b, 0x0a, 0x89, 0xbb, 0x84, 0x57, 0x74, 0xeb, -0xd6, 0xad, 0x14, 0x15, 0x13, 0x8e, 0x44, 0x51, 0x11, 0x5d, 0x81, 0x30, -0x5c, 0x01, 0x08, 0xfb, 0x87, 0xa3, 0x73, 0xe7, 0xce, 0x82, 0x0a, 0x42, -0x7e, 0x88, 0x88, 0xa3, 0x73, 0xea, 0xc5, 0xfc, 0x0a, 0x78, 0x85, 0xa0, -0x82, 0x3f, 0x2c, 0x59, 0xb2, 0xa4, 0x14, 0x15, 0x05, 0x83, 0xc2, 0x70, -0x45, 0x02, 0xdc, 0x66, 0xa2, 0x97, 0x87, 0xc1, 0x0a, 0x14, 0x0c, 0x4a, -0x4b, 0x23, 0x94, 0xc1, 0x75, 0x2c, 0x58, 0xb0, 0x40, 0x5a, 0xe6, 0x5a, -0xa0, 0x82, 0x70, 0x51, 0x80, 0x42, 0x00, 0x29, 0x2d, 0x1d, 0xca, 0x28, -0xdc, 0xb3, 0x1f, 0x8d, 0x02, 0x23, 0xba, 0x02, 0x61, 0xb5, 0x02, 0x90, -0xb4, 0x76, 0xdc, 0x79, 0xe7, 0x9d, 0xc4, 0x86, 0x4a, 0xf4, 0x34, 0xe1, -0xa1, 0xa5, 0xbc, 0xe2, 0x8e, 0x3b, 0xee, 0x90, 0xbe, 0x04, 0xe4, 0x1b, -0x00, 0x9a, 0x1e, 0x3d, 0x7a, 0x94, 0x5e, 0x95, 0xdd, 0xd4, 0x71, 0x53, -0x68, 0x16, 0x12, 0x0d, 0x83, 0x2d, 0x2d, 0xfa, 0x08, 0x41, 0x5f, 0x01, -0x88, 0x39, 0xbb, 0xe9, 0x94, 0x29, 0x53, 0x84, 0xc2, 0x11, 0x9f, 0xa4, -0x6b, 0xae, 0xca, 0xfe, 0x2d, 0x45, 0xc5, 0x89, 0x13, 0x27, 0xa4, 0x03, -0x39, 0xee, 0x6d, 0x40, 0x83, 0x40, 0x55, 0x86, 0x5d, 0xe4, 0x17, 0x45, -0x81, 0x11, 0x56, 0x9b, 0x65, 0xd0, 0x49, 0x2d, 0x54, 0x06, 0x04, 0x12, -0xf9, 0x45, 0x57, 0x5e, 0x79, 0xa5, 0x22, 0xef, 0xdd, 0xbb, 0x77, 0x93, -0xc1, 0x4f, 0x75, 0x46, 0x55, 0x9d, 0x9e, 0x6c, 0xed, 0x8b, 0x7a, 0x05, -0xa8, 0x20, 0x8d, 0x86, 0x00, 0x41, 0x8c, 0xb3, 0x14, 0xbf, 0xe0, 0xa4, -0x69, 0xd3, 0xa6, 0x95, 0x01, 0x06, 0x1c, 0x23, 0x2a, 0x4a, 0x85, 0xca, -0xbb, 0x8f, 0xce, 0xd3, 0x72, 0x05, 0x20, 0xe0, 0xec, 0xa6, 0x3a, 0x24, -0xc6, 0x8d, 0x1b, 0xf7, 0xca, 0x2b, 0xaf, 0xd0, 0x2b, 0x59, 0xda, 0x83, -0x48, 0x67, 0x9f, 0x32, 0xa8, 0x20, 0xf5, 0x0c, 0x85, 0x1b, 0xd5, 0x82, -0x3f, 0x53, 0x64, 0x05, 0x00, 0x75, 0xed, 0xda, 0xb5, 0x0c, 0x30, 0xf8, -0x05, 0xe5, 0x1b, 0xe5, 0x1d, 0xab, 0x56, 0xd4, 0x8f, 0x11, 0xa5, 0xbc, -0xaa, 0xbf, 0x02, 0xf8, 0xa0, 0x21, 0x54, 0xc8, 0x15, 0xa2, 0x85, 0x74, -0x1d, 0x0e, 0x25, 0x38, 0xf1, 0xb9, 0x53, 0xa7, 0x4e, 0xcf, 0x3c, 0xf3, -0xcc, 0xeb, 0xaf, 0xbf, 0x2e, 0x1d, 0xd6, 0xa5, 0x51, 0x28, 0x10, 0x40, -0x50, 0xba, 0xc8, 0x2b, 0x4e, 0x9e, 0x3c, 0x29, 0x4d, 0x09, 0x10, 0xa2, -0xd0, 0x39, 0x50, 0x2d, 0x48, 0x41, 0xa6, 0x21, 0x50, 0x17, 0x57, 0xd9, -0x08, 0x37, 0x47, 0x8c, 0xe6, 0xec, 0x73, 0x7b, 0x52, 0xf4, 0x0f, 0xd1, -0x15, 0xa8, 0x12, 0x2b, 0xa0, 0x2c, 0x4e, 0x32, 0x9b, 0xf6, 0xed, 0xdb, -0x9f, 0x3d, 0x7b, 0x16, 0x0a, 0xa7, 0x86, 0x2f, 0xed, 0x41, 0xd0, 0x1a, -0xa4, 0xa4, 0x10, 0x10, 0x28, 0x45, 0x05, 0x6a, 0xb8, 0xea, 0x61, 0x23, -0xf1, 0xe4, 0x9c, 0x4a, 0xea, 0x26, 0xcd, 0xe3, 0xe0, 0x32, 0x55, 0xe2, -0xb1, 0xa2, 0x93, 0x88, 0xae, 0x40, 0x90, 0x56, 0x60, 0xc4, 0x88, 0x11, -0x18, 0x5a, 0x9f, 0x7d, 0xf6, 0x59, 0x69, 0x79, 0xa5, 0x7a, 0x85, 0x12, -0xde, 0x81, 0x1e, 0x81, 0x36, 0x71, 0x91, 0x57, 0x80, 0x0a, 0x55, 0x1f, -0x0e, 0xc4, 0xc0, 0x2e, 0xe0, 0x29, 0xb8, 0x36, 0x68, 0x1e, 0xf7, 0xe2, -0x8b, 0x2f, 0x6e, 0xdb, 0xb6, 0xad, 0x79, 0x7b, 0x57, 0x79, 0xac, 0xe8, -0x11, 0x5d, 0x81, 0x90, 0x5e, 0x81, 0xc6, 0xad, 0x3a, 0xae, 0x5b, 0xb7, -0xee, 0xd1, 0x47, 0x1f, 0x7d, 0xfa, 0xe9, 0xa7, 0xd1, 0x28, 0xd8, 0xf7, -0xd9, 0xfd, 0x51, 0xa4, 0x55, 0x17, 0x38, 0x24, 0xa6, 0x32, 0xa8, 0x90, -0x5a, 0xa2, 0x68, 0x17, 0xd2, 0x21, 0x53, 0xb4, 0x0b, 0xe4, 0xa8, 0x37, -0xdf, 0x7c, 0x93, 0xeb, 0x9f, 0x7e, 0xe6, 0xb9, 0x8d, 0xdb, 0xf7, 0xf6, -0x9f, 0x38, 0x3b, 0x35, 0xbf, 0x5b, 0x5c, 0x5a, 0x0d, 0x47, 0x54, 0x7c, -0x0a, 0x69, 0xea, 0x88, 0x9c, 0xc9, 0xd3, 0xaf, 0x24, 0x2d, 0x3b, 0xa5, -0x51, 0xe7, 0x6e, 0xa3, 0x2e, 0x5d, 0xbb, 0xb9, 0xf8, 0xfe, 0x87, 0x1e, -0x79, 0xe2, 0x89, 0x27, 0x9e, 0x7b, 0xee, 0x39, 0x48, 0x1a, 0x83, 0xac, -0x68, 0x14, 0x52, 0xe4, 0x45, 0xca, 0x31, 0x02, 0x01, 0x38, 0x84, 0x8b, -0x57, 0xa4, 0xa4, 0xa4, 0xdc, 0x75, 0xd7, 0x5d, 0x52, 0x32, 0x9e, 0xea, -0x46, 0x98, 0x68, 0x55, 0xc5, 0x34, 0x74, 0x73, 0x38, 0x06, 0x90, 0x42, -0x29, 0x79, 0xe9, 0xa5, 0x97, 0x9e, 0x7c, 0xfa, 0xb9, 0xfb, 0x1e, 0x7d, -0xf2, 0xde, 0x87, 0xce, 0xdd, 0xf3, 0xe0, 0x23, 0x77, 0xdd, 0x77, 0xf6, -0xce, 0x33, 0x0f, 0xde, 0x79, 0xef, 0x03, 0xfc, 0x9c, 0x3c, 0x7d, 0xbf, -0x4f, 0x3f, 0x27, 0xee, 0xb9, 0xcf, 0x8f, 0x9f, 0x3b, 0x4e, 0x9d, 0xf1, -0xfa, 0x73, 0xfc, 0xee, 0x7b, 0x0d, 0xe7, 0xf0, 0x8d, 0xd7, 0x9f, 0xdb, -0xef, 0x3a, 0xed, 0xf5, 0xe7, 0xb6, 0x3b, 0xef, 0x31, 0x9c, 0xc3, 0x37, -0x5e, 0x7f, 0x8e, 0x9d, 0x3c, 0x65, 0x38, 0x87, 0x6f, 0x82, 0xf5, 0xe3, -0xf5, 0xee, 0x96, 0x73, 0xf6, 0xfa, 0xa4, 0x9c, 0x60, 0x58, 0x31, 0xf3, -0x37, 0x96, 0x4b, 0x6a, 0x5e, 0x79, 0xaf, 0xef, 0x8b, 0x13, 0xec, 0x53, -0x82, 0x7d, 0x1a, 0x13, 0xb2, 0x74, 0xd1, 0xe7, 0x99, 0x07, 0xef, 0xbe, -0xff, 0xa1, 0x53, 0xf7, 0x3f, 0x7c, 0xf6, 0x91, 0x73, 0x4f, 0x3e, 0xf9, -0x24, 0x78, 0x40, 0xf6, 0x41, 0x70, 0x12, 0x48, 0x48, 0x27, 0x17, 0x78, -0x80, 0xc8, 0x4e, 0x52, 0xa1, 0xb4, 0x14, 0x15, 0x77, 0xdf, 0x7d, 0xb7, -0x74, 0x67, 0x13, 0x76, 0xa1, 0x3c, 0x7a, 0x30, 0x17, 0x38, 0x06, 0x9e, -0x3f, 0xac, 0x57, 0xe8, 0x25, 0x0c, 0x87, 0xa6, 0xf1, 0xfc, 0xf3, 0xcf, -0x33, 0x3a, 0x3c, 0xe8, 0xa9, 0xa7, 0xa8, 0x16, 0xe9, 0x3a, 0xc0, 0x9f, -0x4f, 0x07, 0xed, 0xdf, 0xfd, 0x38, 0x1e, 0xf3, 0xeb, 0x38, 0x67, 0xfb, -0x80, 0xb1, 0xfa, 0x74, 0x20, 0x9b, 0xfa, 0x71, 0x3c, 0x1c, 0x8c, 0xc3, -0xfe, 0x7d, 0x7d, 0x7a, 0x22, 0x75, 0xb2, 0xed, 0x35, 0x2b, 0x73, 0xa2, -0x5f, 0xef, 0xe7, 0x31, 0x3b, 0x94, 0xe0, 0x13, 0x75, 0x71, 0xb2, 0x90, -0x25, 0xf4, 0xc9, 0x81, 0xa1, 0x09, 0x72, 0x45, 0xb1, 0x66, 0x5b, 0x87, -0x80, 0x51, 0x0a, 0xde, 0x7f, 0xff, 0x7d, 0x20, 0x21, 0x4d, 0xa5, 0x45, -0x76, 0xd2, 0xdb, 0x85, 0xc2, 0x21, 0x2e, 0xf2, 0x0a, 0x41, 0x85, 0x54, -0x4a, 0x95, 0x6a, 0xbb, 0x62, 0xa5, 0x45, 0x31, 0xe7, 0x4a, 0x4c, 0x52, -0xb4, 0x66, 0x63, 0x20, 0x86, 0x03, 0x64, 0x6f, 0xbc, 0xf1, 0x06, 0xa3, -0xc3, 0x83, 0x40, 0x08, 0x77, 0xe2, 0x00, 0x7f, 0x3e, 0x1d, 0x4c, 0xd1, -0x8f, 0x03, 0x34, 0xfa, 0x71, 0xfc, 0xc8, 0xf6, 0xc1, 0xda, 0xf9, 0x74, -0xa0, 0xae, 0xf9, 0x71, 0xf0, 0x92, 0x02, 0x3f, 0xec, 0xdf, 0xd7, 0xa7, -0x27, 0x52, 0x27, 0xdb, 0x5e, 0xb3, 0x32, 0x27, 0xfa, 0xf1, 0x76, 0xb8, -0xc4, 0x0e, 0x25, 0xf8, 0x44, 0x5d, 0x9c, 0x2c, 0x64, 0x09, 0x7d, 0x72, -0xfc, 0xf8, 0xc7, 0x3f, 0x86, 0x5c, 0x51, 0x04, 0xd8, 0xd6, 0x21, 0x60, -0x64, 0x1f, 0xdc, 0x71, 0x70, 0x09, 0x81, 0x84, 0xd8, 0x9d, 0x44, 0x76, -0x82, 0xf8, 0x41, 0x01, 0xa8, 0x40, 0x7a, 0x72, 0x49, 0x50, 0xa0, 0x42, -0xba, 0x51, 0x29, 0x39, 0x4a, 0xfa, 0x77, 0x00, 0x0c, 0xae, 0xc4, 0x94, -0x8b, 0x3f, 0x1c, 0x09, 0x0c, 0x6c, 0xe0, 0x1b, 0x47, 0xd9, 0x80, 0x75, -0xe0, 0xd0, 0x40, 0xb2, 0x02, 0x24, 0x1e, 0x0e, 0xe6, 0xe1, 0xf7, 0x01, -0xa6, 0x83, 0x72, 0xb0, 0x1c, 0x36, 0x0f, 0xd0, 0xee, 0xd3, 0x81, 0x54, -0x19, 0x94, 0x83, 0x77, 0x66, 0xe7, 0xf0, 0xef, 0x5e, 0x3e, 0x3d, 0x91, -0x3a, 0xd9, 0xe6, 0x8a, 0x19, 0x4e, 0x0b, 0xca, 0xfb, 0x62, 0x10, 0xfb, -0x34, 0xe3, 0x99, 0xfc, 0xa0, 0x4f, 0x0e, 0x90, 0x00, 0xb9, 0x02, 0x06, -0x44, 0x1e, 0xf0, 0x00, 0x8b, 0xc0, 0x0e, 0x8b, 0xe0, 0x04, 0x61, 0x2b, -0x75, 0x42, 0xef, 0x07, 0x02, 0x16, 0x8c, 0xa8, 0x30, 0x00, 0x03, 0x8e, -0x01, 0x7f, 0x41, 0xf0, 0x12, 0x6c, 0x00, 0x2f, 0x46, 0x04, 0x67, 0x0c, -0x0d, 0x42, 0xb8, 0x07, 0x2a, 0xbc, 0xd7, 0x03, 0x20, 0xa9, 0x73, 0xf8, -0x1c, 0xc4, 0x83, 0xe7, 0x0c, 0xca, 0x01, 0x1b, 0xf4, 0xe3, 0x60, 0xa1, -0x83, 0x72, 0xb0, 0xcb, 0xd8, 0x39, 0xfc, 0xbb, 0x97, 0x1f, 0xcf, 0x65, -0x79, 0x49, 0x50, 0xd6, 0x59, 0x7a, 0x6b, 0xf8, 0x7d, 0xe8, 0x54, 0xe4, -0x95, 0xea, 0x38, 0x01, 0xfa, 0xe4, 0x40, 0x37, 0x86, 0x5c, 0xd9, 0xd3, -0x21, 0x5d, 0x34, 0x02, 0x72, 0x25, 0x90, 0x80, 0x88, 0xe1, 0x90, 0x86, -0x07, 0x4a, 0x9d, 0x50, 0xad, 0x1a, 0x8c, 0xa8, 0x10, 0x76, 0xa1, 0x03, -0x43, 0x74, 0x0c, 0x98, 0x06, 0xd8, 0x00, 0x58, 0xb8, 0x32, 0x18, 0x11, -0x78, 0x30, 0x34, 0x08, 0x91, 0x83, 0x3b, 0x05, 0x7e, 0xc0, 0x8b, 0x18, -0x84, 0xff, 0xe5, 0xd0, 0x3f, 0xab, 0x2f, 0x03, 0xf9, 0xc0, 0x8a, 0xc8, -0xa1, 0x06, 0x51, 0xdf, 0x04, 0xf8, 0x01, 0xf1, 0xb2, 0x6a, 0x1e, 0x01, -0x3e, 0x97, 0xe1, 0x72, 0xd6, 0xcd, 0xc3, 0x1a, 0x06, 0xf2, 0x6a, 0xcc, -0xd7, 0xca, 0xdb, 0x0f, 0x9c, 0xa8, 0x84, 0x3e, 0x61, 0x0b, 0x90, 0x2b, -0x86, 0x26, 0x48, 0x17, 0x02, 0x66, 0x8b, 0x07, 0x0f, 0xd8, 0x93, 0x20, -0x6c, 0x33, 0x24, 0x80, 0x80, 0x05, 0x2a, 0x0c, 0xc0, 0x90, 0xbe, 0x4f, -0xaa, 0x25, 0x8f, 0x74, 0x21, 0x01, 0x21, 0x8c, 0x0b, 0x48, 0xe4, 0xe0, -0x36, 0xc1, 0x3a, 0x40, 0xb0, 0x1c, 0x6a, 0x40, 0x9f, 0xbe, 0x51, 0x27, -0x07, 0xf2, 0x81, 0x85, 0x53, 0x97, 0xf3, 0x59, 0x0e, 0x3b, 0xdf, 0xa8, -0x93, 0xab, 0xc8, 0x07, 0x3b, 0x73, 0xf6, 0x70, 0x4e, 0x20, 0x6b, 0x68, -0x79, 0xad, 0xaf, 0xef, 0x34, 0x70, 0xa2, 0x52, 0x24, 0x2a, 0xe5, 0x83, -0xa5, 0xb1, 0x81, 0x2a, 0xb0, 0x0d, 0x61, 0x4b, 0xfd, 0x79, 0xe1, 0x12, -0xaa, 0x63, 0x89, 0x35, 0x2a, 0x74, 0x60, 0xa8, 0x86, 0x3d, 0x7a, 0xab, -0x1e, 0xe9, 0xd3, 0xa3, 0x0e, 0x77, 0x85, 0x8a, 0xcb, 0xe9, 0x7b, 0xa9, -0x7f, 0xac, 0x17, 0x48, 0x0e, 0xf0, 0x1b, 0x75, 0x79, 0xe0, 0x1f, 0xa4, -0x2a, 0x33, 0x2f, 0x40, 0x0e, 0x69, 0x1c, 0xa1, 0x0e, 0xfd, 0x57, 0x39, -0x33, 0xf0, 0x6f, 0x0c, 0x73, 0x66, 0x40, 0x28, 0xc0, 0xce, 0xe1, 0x6e, -0x86, 0x32, 0x82, 0xfa, 0xab, 0xde, 0x22, 0xc3, 0xe6, 0x3a, 0xab, 0x47, -0x93, 0x41, 0xd4, 0x64, 0x0c, 0xab, 0xe1, 0xa1, 0xc4, 0x75, 0xb0, 0x28, -0x47, 0xa7, 0x52, 0x29, 0x20, 0x2f, 0xc5, 0xe4, 0xd9, 0xe5, 0x05, 0x12, -0xd2, 0xab, 0xc4, 0xd0, 0xc4, 0xc7, 0x2d, 0x2a, 0xa4, 0xa9, 0x8f, 0x92, -0xa6, 0xdc, 0x75, 0x76, 0x93, 0x0e, 0x3a, 0x15, 0x7c, 0x48, 0xb3, 0x08, -0xd5, 0xe3, 0x47, 0xb5, 0x8f, 0xa8, 0xdc, 0x6f, 0x78, 0xf7, 0xe8, 0x06, -0x58, 0x03, 0x89, 0xa2, 0xd9, 0xb4, 0x69, 0xd3, 0x9a, 0x35, 0x6b, 0x1e, -0x78, 0xe0, 0x01, 0xd5, 0x13, 0x43, 0xcd, 0x59, 0x26, 0xa9, 0xff, 0xea, -0xf7, 0x67, 0xd5, 0xe2, 0x48, 0xad, 0x06, 0xc1, 0x6c, 0xab, 0x57, 0xaf, -0xbe, 0xee, 0xba, 0xeb, 0xae, 0xbf, 0xfe, 0xfa, 0x1b, 0x6e, 0xb8, 0x81, -0x39, 0xac, 0x5d, 0xbb, 0x16, 0x57, 0xee, 0x86, 0x0d, 0x1b, 0x6e, 0xbe, -0xf9, 0xe6, 0xcd, 0x9b, 0x37, 0x6f, 0xd9, 0xb2, 0x65, 0xeb, 0xd6, 0xad, -0xdb, 0xb7, 0x6f, 0xdf, 0xb1, 0x63, 0xc7, 0xce, 0x9d, 0x3b, 0xd1, 0x41, -0x65, 0x86, 0x22, 0x0e, 0x60, 0x57, 0xe5, 0xfc, 0xf5, 0xeb, 0xd7, 0x1f, -0x3a, 0x74, 0xe8, 0xbe, 0xfb, 0xee, 0xc3, 0xba, 0xc4, 0x09, 0x88, 0x31, -0x90, 0xaf, 0xf9, 0x5e, 0xe6, 0x6f, 0x20, 0x7a, 0x14, 0x4e, 0xcc, 0x06, -0xf7, 0xdf, 0x7f, 0xff, 0xae, 0x5d, 0xbb, 0x96, 0x2f, 0x5f, 0xbe, 0x7f, -0xff, 0x7e, 0xa6, 0xc1, 0x04, 0xf8, 0x95, 0x04, 0x1e, 0x2c, 0xd2, 0xd8, -0x85, 0x58, 0x25, 0xe4, 0x19, 0xa1, 0xcb, 0x0a, 0xa3, 0x1c, 0x44, 0x5c, -0x0c, 0x53, 0x38, 0xad, 0x59, 0x0a, 0xe6, 0xc3, 0x6b, 0x92, 0xbe, 0x81, -0x96, 0x7d, 0x34, 0xbd, 0xa0, 0xc2, 0x80, 0x0d, 0xbd, 0x3f, 0xa7, 0xb9, -0x73, 0x94, 0xbb, 0x6f, 0xf4, 0x3e, 0x40, 0x3a, 0x41, 0x48, 0xc8, 0x3a, -0x3a, 0x10, 0x12, 0x24, 0x9f, 0xcd, 0xb4, 0x2e, 0xdc, 0xcd, 0xb2, 0xab, -0x90, 0x87, 0x7e, 0x2b, 0x41, 0xfc, 0x93, 0x34, 0x6d, 0x51, 0x44, 0xc3, -0x8b, 0x64, 0x71, 0x31, 0xf3, 0x41, 0x31, 0x7b, 0xf6, 0xec, 0x81, 0xfe, -0x66, 0xce, 0x9c, 0x39, 0x60, 0xc0, 0x80, 0x96, 0x2d, 0x5b, 0x56, 0xab, -0x56, 0xcd, 0xd2, 0x59, 0x3c, 0x64, 0xc8, 0x10, 0xd5, 0xd2, 0xdb, 0xb2, -0x59, 0x8c, 0xde, 0x1a, 0xc6, 0x40, 0x67, 0xfa, 0x7d, 0xb9, 0x35, 0xd6, -0x0e, 0xee, 0x0e, 0xd9, 0xf1, 0x41, 0x35, 0xd6, 0x50, 0x18, 0xc3, 0x1e, -0xd8, 0xa6, 0x4d, 0x1b, 0x3f, 0x1c, 0xd6, 0x57, 0x5f, 0x7d, 0xb5, 0x6c, -0xcc, 0x13, 0x27, 0x4e, 0xf4, 0x70, 0x79, 0x7c, 0x7c, 0x7c, 0x66, 0x66, -0x66, 0x5e, 0x5e, 0x5e, 0xfd, 0xfa, 0xf5, 0x1b, 0x37, 0x6e, 0x9c, 0x9f, -0x9f, 0xdf, 0xa4, 0x49, 0x13, 0xfe, 0x6f, 0x44, 0xdb, 0xa6, 0xda, 0xb5, -0xab, 0x57, 0xaf, 0x9e, 0x98, 0x48, 0xd7, 0x03, 0xdf, 0x0e, 0x06, 0x6c, -0xd0, 0xa0, 0x01, 0x51, 0x7a, 0x45, 0x45, 0x45, 0xe3, 0xc7, 0x8f, 0xbf, -0xec, 0xb2, 0xcb, 0xc8, 0x75, 0x23, 0x1a, 0x75, 0xf8, 0xf0, 0xe1, 0x33, -0x66, 0xcc, 0x58, 0xb1, 0x62, 0x05, 0x30, 0x3e, 0x7c, 0xf8, 0x30, 0x18, -0x03, 0x4b, 0xa8, 0xe9, 0xc8, 0xa5, 0x86, 0xcd, 0x45, 0x7a, 0x9a, 0xa9, -0x96, 0x7f, 0xe2, 0x83, 0xc6, 0xd4, 0x0b, 0x02, 0xa1, 0xfe, 0xb9, 0x73, -0xe7, 0x0e, 0x1a, 0x34, 0xa8, 0x69, 0xd3, 0xa6, 0x96, 0x73, 0x23, 0x51, -0x02, 0xd6, 0xc1, 0xe5, 0xe6, 0x7e, 0x88, 0xb6, 0x50, 0xa1, 0xb7, 0x87, -0x33, 0x34, 0x83, 0xf3, 0xfa, 0xab, 0xd8, 0x79, 0xb1, 0x56, 0x9d, 0x3e, -0x7d, 0x9a, 0xad, 0x6b, 0xd2, 0xa4, 0x49, 0x85, 0x85, 0x85, 0xb5, 0x6a, -0xd5, 0x8a, 0x8b, 0x33, 0xd6, 0xfd, 0x66, 0xdd, 0x1b, 0x36, 0x6c, 0x38, -0x70, 0xe0, 0xc0, 0x95, 0x2b, 0x57, 0xb2, 0x10, 0x32, 0x63, 0x5d, 0xe6, -0xf3, 0x7a, 0xaf, 0xa0, 0x9f, 0x80, 0x51, 0x81, 0x7d, 0x85, 0x17, 0x46, -0x79, 0x87, 0x7a, 0xf5, 0xea, 0x99, 0xe7, 0x6c, 0x87, 0x0a, 0xa6, 0x4f, -0x9f, 0x0e, 0xcd, 0x89, 0xe1, 0x4f, 0x9f, 0xa1, 0x6c, 0x31, 0x6a, 0xcb, -0x40, 0x11, 0xc4, 0x80, 0x88, 0x63, 0x14, 0x63, 0x79, 0x49, 0x49, 0xc9, -0xb5, 0xd7, 0x5e, 0x0b, 0x95, 0x10, 0xc4, 0x46, 0xa6, 0x18, 0x84, 0x98, -0x94, 0x94, 0xa4, 0xdf, 0x2b, 0x23, 0x23, 0x83, 0x20, 0x7f, 0x08, 0x1a, -0x63, 0xbc, 0x6c, 0x34, 0x16, 0x31, 0xff, 0x76, 0x26, 0x77, 0xe1, 0x1c, -0xf8, 0xc6, 0xe2, 0xc5, 0x8b, 0x6d, 0x9f, 0x5e, 0x99, 0x27, 0xb2, 0x0e, -0x75, 0xeb, 0xd6, 0x05, 0x48, 0xd0, 0x09, 0x64, 0x4d, 0xd2, 0x9c, 0x02, -0x06, 0x8b, 0x89, 0x4f, 0xba, 0x4e, 0x9d, 0x3a, 0xf6, 0xe7, 0xb7, 0x6a, -0xd5, 0x2a, 0x71, 0x53, 0x18, 0x80, 0xe1, 0x33, 0x2a, 0xec, 0x34, 0xa5, -0x15, 0xd1, 0x0b, 0x3e, 0x00, 0xd0, 0x99, 0x3a, 0xf4, 0x64, 0x7f, 0xa2, -0xea, 0x4c, 0x9c, 0x8b, 0xec, 0xc4, 0x70, 0x5b, 0xc5, 0xe9, 0x6c, 0xde, -0x3a, 0x28, 0xa7, 0x31, 0x7f, 0xe4, 0x87, 0xec, 0xec, 0x6c, 0x3f, 0x66, -0x6e, 0xbe, 0x84, 0xa8, 0x4c, 0x38, 0x06, 0x2f, 0x40, 0xcd, 0x0d, 0x1b, -0x2b, 0x7b, 0xe1, 0xd0, 0xa1, 0x43, 0x3b, 0x74, 0xe8, 0xc0, 0x8b, 0x4c, -0x48, 0x48, 0xf0, 0xfb, 0x46, 0x7d, 0xfb, 0xf6, 0x45, 0x54, 0xf3, 0xfb, -0x72, 0x2e, 0x64, 0x37, 0x75, 0xb9, 0x72, 0x43, 0xf3, 0x18, 0x39, 0x72, -0xa4, 0xf8, 0x1c, 0xf0, 0x67, 0xfb, 0xfa, 0x04, 0xbc, 0x5f, 0xa8, 0x14, -0x9d, 0x9e, 0x57, 0xc3, 0xf6, 0xa4, 0xde, 0x4e, 0xf0, 0x51, 0xc1, 0x14, -0xf7, 0xee, 0xdd, 0xcb, 0xab, 0xf2, 0x75, 0x8a, 0xee, 0xce, 0x07, 0x57, -0x18, 0x9e, 0x03, 0x6c, 0xfb, 0xab, 0x1e, 0x58, 0xa4, 0x7f, 0x44, 0x4c, -0xa2, 0x0c, 0x88, 0x55, 0x60, 0x51, 0x2c, 0x7b, 0xa5, 0xc2, 0xdc, 0x10, -0x0c, 0x7c, 0x7a, 0x04, 0x67, 0x42, 0x6c, 0x7e, 0x9d, 0xf4, 0xde, 0x6d, -0x73, 0x27, 0x17, 0x35, 0x58, 0x3e, 0xb9, 0x45, 0xb5, 0xb4, 0x52, 0x89, -0x82, 0x55, 0x46, 0x4a, 0x44, 0xef, 0x14, 0x5e, 0x01, 0x11, 0xc7, 0xc4, -0xd0, 0x04, 0xa3, 0x5c, 0x8e, 0x76, 0x4d, 0xaa, 0xdf, 0x30, 0xa3, 0x8d, -0xe5, 0xcf, 0xd5, 0x53, 0x5b, 0x5e, 0x39, 0xae, 0x99, 0xfc, 0xcc, 0x1e, -0x96, 0xaf, 0x6e, 0xaf, 0xf3, 0x40, 0xa6, 0xcd, 0x69, 0xb3, 0x86, 0xe6, -0x0f, 0xed, 0x5a, 0xbb, 0x4b, 0x8b, 0x1a, 0x05, 0x75, 0xd3, 0xf3, 0xaa, -0x27, 0xa5, 0x24, 0x79, 0x6e, 0xe8, 0x71, 0x71, 0xa4, 0xd4, 0xa4, 0xf8, -0x3a, 0xd9, 0xc9, 0x1d, 0x0a, 0xb2, 0x06, 0x77, 0xae, 0x3d, 0x67, 0x44, -0x13, 0x2e, 0xe7, 0x0f, 0x19, 0xa9, 0x09, 0xd7, 0x5e, 0xd2, 0x6a, 0xc1, -0xe8, 0x02, 0x96, 0x65, 0x50, 0xe7, 0x5a, 0x9d, 0x9b, 0xd7, 0x68, 0x52, -0x37, 0xbd, 0x46, 0x86, 0x33, 0x36, 0x36, 0x68, 0x2b, 0x40, 0x49, 0x1a, -0x38, 0x2d, 0xdc, 0xc3, 0xc3, 0x82, 0xe6, 0x54, 0x73, 0x76, 0x6a, 0x96, -0x35, 0xbe, 0x4f, 0xfd, 0x25, 0x13, 0x9b, 0xeb, 0xa7, 0x11, 0x9f, 0x81, -0x0c, 0xcf, 0xab, 0xd1, 0xf7, 0xac, 0xe0, 0xa0, 0x42, 0x02, 0xa8, 0xe0, -0xe6, 0xb3, 0x66, 0xcd, 0xb2, 0xff, 0xbe, 0x59, 0xaf, 0x7a, 0xb9, 0x29, -0xf5, 0x73, 0x53, 0xf9, 0x3f, 0x3d, 0x85, 0x96, 0x43, 0x6e, 0x0f, 0xc4, -0x56, 0x64, 0x2a, 0xec, 0x09, 0xca, 0x27, 0x6f, 0x87, 0x21, 0xc8, 0xac, -0xb8, 0x8a, 0xe4, 0x12, 0x78, 0x25, 0xc2, 0x6b, 0x6e, 0x6e, 0xae, 0xf9, -0x1e, 0x6c, 0xd8, 0x67, 0xce, 0x9c, 0x41, 0x60, 0x13, 0x21, 0x47, 0x64, -0xd3, 0x32, 0xc5, 0x1c, 0xb4, 0x6b, 0x58, 0xdc, 0xf6, 0x4d, 0xaa, 0x0f, -0xeb, 0x56, 0x67, 0xee, 0x88, 0x26, 0x6b, 0x67, 0xb7, 0x3d, 0xb4, 0xb2, -0xdb, 0x43, 0x9b, 0x8b, 0xde, 0x3e, 0x3a, 0xe2, 0xff, 0x1e, 0x9c, 0xf8, -0xcd, 0x33, 0xd3, 0xf5, 0x9f, 0xec, 0x4c, 0xa7, 0xba, 0x0e, 0x25, 0x18, -0x5f, 0x12, 0xfa, 0x00, 0x83, 0xa3, 0x92, 0x22, 0x9d, 0xfb, 0x01, 0x88, -0xb4, 0xe4, 0x78, 0x59, 0xab, 0x64, 0xa7, 0x27, 0x1a, 0x5d, 0x3f, 0xa7, -0x9d, 0x61, 0x26, 0x96, 0xbf, 0x1e, 0xbf, 0xbe, 0xa7, 0x9a, 0x43, 0x56, -0x56, 0x96, 0xfa, 0x3c, 0xaa, 0x47, 0x5d, 0x77, 0x97, 0xff, 0xe9, 0xe1, -0xc9, 0x9f, 0x9d, 0x9d, 0xf4, 0x3f, 0xf7, 0x8c, 0xfb, 0xe9, 0x9d, 0x63, -0xf4, 0x9f, 0x4f, 0xef, 0x9f, 0xc8, 0xf7, 0xe6, 0xab, 0xd8, 0x20, 0x18, -0x16, 0x44, 0x79, 0x18, 0xf0, 0x67, 0x77, 0x8d, 0x7d, 0xfd, 0xd6, 0xe1, -0x4f, 0x6e, 0x1f, 0x78, 0xea, 0xa6, 0xde, 0x07, 0x57, 0x76, 0xbd, 0xe9, -0xb2, 0x76, 0xcf, 0xef, 0x19, 0xf2, 0xe0, 0xcd, 0xfd, 0x0e, 0xaf, 0xea, -0xbe, 0x69, 0x7e, 0xfb, 0x15, 0x93, 0x5b, 0xce, 0x1c, 0xda, 0x18, 0x7c, -0x82, 0xa5, 0x46, 0xb5, 0xd2, 0x40, 0x9d, 0xbb, 0x75, 0x83, 0x8e, 0x0d, -0x4f, 0xc1, 0xb5, 0xbb, 0x97, 0x74, 0x3e, 0xbb, 0xb9, 0xdf, 0xbb, 0xc7, -0x46, 0x7e, 0x71, 0x6e, 0x8a, 0x9a, 0x03, 0xb7, 0x53, 0x83, 0xa4, 0xa7, -0xa7, 0xa3, 0x84, 0xc0, 0xb7, 0xd1, 0x58, 0x20, 0x80, 0x20, 0xf3, 0x0a, -0xf8, 0xd7, 0xe8, 0xd1, 0xa3, 0x3d, 0xbc, 0x69, 0x9e, 0xa7, 0x6f, 0xfb, -0xbc, 0x65, 0x93, 0x5a, 0xf0, 0xb4, 0xcf, 0xed, 0x1e, 0xfc, 0xbf, 0xa7, -0xc7, 0x7f, 0xf5, 0xe4, 0x34, 0xc3, 0x62, 0x7d, 0xf9, 0xd8, 0xd4, 0x9f, -0xdc, 0x3e, 0xea, 0xae, 0xb5, 0xbd, 0x17, 0x8d, 0x6b, 0x56, 0x37, 0x27, -0xc5, 0x30, 0x1a, 0x0a, 0x13, 0x2c, 0x12, 0x12, 0x87, 0x64, 0xed, 0xf0, -0x0d, 0x20, 0x01, 0x2d, 0x8e, 0x1d, 0x3b, 0xd6, 0xa6, 0x32, 0x80, 0xae, -0x89, 0x16, 0x81, 0xb4, 0x86, 0x4d, 0x66, 0xe1, 0xc2, 0x85, 0xfa, 0xdd, -0x2f, 0x1f, 0xdd, 0xf4, 0x47, 0xbb, 0x07, 0xf3, 0xfe, 0xfe, 0xf6, 0xf8, -0x54, 0x3b, 0x04, 0xc7, 0x39, 0x9f, 0x3f, 0x7a, 0xb1, 0x7e, 0x84, 0x8c, -0x73, 0xea, 0xd4, 0x29, 0x74, 0x06, 0xdc, 0x49, 0x6c, 0x48, 0x47, 0x8f, -0x1e, 0xb5, 0x5c, 0x28, 0xb6, 0xcf, 0xa6, 0xf5, 0x32, 0xfa, 0xb4, 0xcb, -0x9b, 0xd8, 0xaf, 0x01, 0x2b, 0xb0, 0x6e, 0x4e, 0xbb, 0x03, 0x2b, 0xba, -0x3e, 0xb0, 0xa9, 0xdf, 0x8b, 0xfb, 0x86, 0x70, 0xeb, 0xbf, 0x3e, 0x56, -0xe6, 0xd6, 0xbf, 0xba, 0x77, 0xfc, 0x89, 0x1b, 0x7a, 0x0e, 0xe8, 0x54, -0xd3, 0x3c, 0xd4, 0xfd, 0x1b, 0xfb, 0xda, 0x99, 0xe4, 0x88, 0xee, 0xa5, -0xf2, 0x37, 0xd6, 0x02, 0x35, 0xce, 0x96, 0xcb, 0x3b, 0xda, 0xb9, 0xdc, -0xeb, 0x39, 0xac, 0x40, 0x42, 0xbc, 0x2b, 0x55, 0x93, 0xfd, 0xce, 0xeb, -0xc9, 0xea, 0x84, 0x37, 0x0e, 0x0f, 0xf7, 0x7c, 0x32, 0x44, 0xf2, 0xcb, -0x7b, 0xc6, 0xbd, 0x7a, 0x70, 0xd8, 0xc3, 0xb7, 0x14, 0xd5, 0xaa, 0x51, -0x2a, 0xf5, 0xb5, 0x6a, 0xd5, 0x4a, 0x3d, 0x02, 0xc4, 0xf6, 0xf5, 0x53, -0x97, 0xb8, 0x1b, 0x67, 0xcf, 0xd2, 0xd2, 0x34, 0x21, 0xec, 0x13, 0x0f, -0x3d, 0xf4, 0x10, 0x41, 0x2b, 0xb8, 0xf9, 0xb0, 0xb3, 0x05, 0x0d, 0x15, -0xe2, 0x05, 0x47, 0x29, 0xb4, 0x7c, 0xd3, 0x5d, 0x5b, 0x66, 0xf3, 0x76, -0x5f, 0xde, 0x3f, 0xd4, 0x8c, 0x01, 0xcf, 0x0f, 0xcf, 0xf9, 0xa7, 0xd7, -0xf7, 0x69, 0xdd, 0xa8, 0x9a, 0x3e, 0x2c, 0x4f, 0x0e, 0xe1, 0xc2, 0xec, -0x64, 0x53, 0x37, 0xb3, 0x0b, 0x99, 0x0c, 0xbb, 0x32, 0xfa, 0xba, 0xbe, -0x73, 0xd8, 0xdc, 0x98, 0x5b, 0xb4, 0x68, 0x41, 0xcc, 0x0c, 0xba, 0x90, -0x7e, 0xfe, 0xe8, 0x9e, 0x75, 0x3d, 0x2c, 0xb1, 0xbb, 0xa7, 0xe0, 0x91, -0xd5, 0x20, 0x98, 0xa7, 0x50, 0xa0, 0x09, 0xec, 0x81, 0x53, 0xc3, 0x28, -0xf4, 0xb5, 0xba, 0x74, 0x70, 0xe3, 0x1f, 0x1f, 0x1c, 0xc6, 0xee, 0xfb, -0xf7, 0x27, 0x8c, 0x7b, 0x84, 0x4d, 0x4a, 0x3a, 0xb3, 0xa1, 0xaf, 0x81, -0xcd, 0xfe, 0xf4, 0xae, 0x31, 0x5e, 0xaf, 0x85, 0xb3, 0xc5, 0xc7, 0x95, -0x0a, 0x30, 0xa9, 0xa9, 0xa9, 0x6a, 0xb6, 0xcc, 0xdc, 0xeb, 0xe5, 0x76, -0x4e, 0x80, 0x6a, 0x65, 0x4c, 0xa0, 0x6e, 0xe7, 0x7c, 0x39, 0x07, 0x8e, -0x61, 0xff, 0x64, 0xb6, 0x0c, 0xcb, 0x37, 0xdb, 0xab, 0x4d, 0xae, 0x87, -0x41, 0xa6, 0x0f, 0x6a, 0xa4, 0xae, 0x42, 0x27, 0x41, 0x4c, 0xc0, 0x94, -0x8c, 0x20, 0xcd, 0xab, 0x09, 0x1a, 0x2a, 0xa0, 0x42, 0xc2, 0x3f, 0x0d, -0x93, 0x43, 0xbc, 0x86, 0xfd, 0xfd, 0xe2, 0xd4, 0x38, 0xfb, 0x4f, 0x68, -0x79, 0x26, 0xe4, 0xb8, 0xfa, 0xd2, 0xd6, 0xfa, 0xe0, 0x37, 0xde, 0x78, -0x23, 0xc0, 0x80, 0xd9, 0xe9, 0xba, 0x91, 0x32, 0x1f, 0x63, 0xbc, 0x9b, -0x37, 0x6f, 0x9e, 0x67, 0x0c, 0x20, 0x7e, 0xf0, 0x9e, 0x58, 0xb8, 0x91, -0x3d, 0xea, 0x76, 0x6c, 0x5a, 0x2a, 0x39, 0xc8, 0x55, 0xed, 0xda, 0xb5, -0xd3, 0xa5, 0x2c, 0x1e, 0xe4, 0x8f, 0x0f, 0x4d, 0xf6, 0xe3, 0x29, 0x76, -0x5d, 0x55, 0xba, 0x21, 0x61, 0xc1, 0xa4, 0x66, 0x04, 0x81, 0x7d, 0x12, -0xa7, 0xa9, 0x4f, 0x0f, 0x48, 0xf8, 0x31, 0xb8, 0xe1, 0x12, 0x78, 0x6f, -0xdc, 0x0f, 0x32, 0x3a, 0x08, 0xf9, 0xe7, 0xd3, 0x6e, 0xb7, 0x49, 0x75, -0x21, 0x82, 0x9f, 0x0e, 0x5a, 0xf5, 0x19, 0x99, 0xd6, 0xd7, 0xfd, 0xcb, -0xdd, 0xfc, 0xd1, 0xac, 0x64, 0x58, 0x98, 0x92, 0xcd, 0x67, 0x84, 0x01, -0xde, 0x76, 0x5d, 0x0f, 0x9b, 0x27, 0xcb, 0x69, 0x97, 0x0c, 0x2c, 0x25, -0x71, 0xf5, 0x14, 0x68, 0x0e, 0x1e, 0x06, 0xe1, 0x9d, 0xaa, 0x33, 0x11, -0x0a, 0x10, 0xbd, 0x30, 0xfb, 0x62, 0xf2, 0x46, 0xe1, 0x0c, 0x0e, 0x2a, -0xd8, 0x9b, 0xd9, 0xb6, 0xaf, 0xb8, 0xe2, 0x0a, 0x75, 0x9b, 0x96, 0x0d, -0x33, 0x91, 0xe4, 0xfc, 0xd8, 0x5c, 0x3d, 0x3c, 0xc6, 0xb4, 0x01, 0x0d, -0xd5, 0xf8, 0x98, 0xb7, 0x09, 0x5c, 0x33, 0x48, 0x81, 0x4c, 0x03, 0x06, -0xb2, 0x74, 0xe9, 0x52, 0x77, 0x78, 0x68, 0x5c, 0x3b, 0x6d, 0xe1, 0xd8, -0xa6, 0x77, 0xde, 0xd8, 0x0b, 0x69, 0xd8, 0x40, 0x34, 0x2f, 0xed, 0x1b, -0x6a, 0xc6, 0x86, 0x8c, 0x03, 0xa9, 0xf9, 0x4d, 0xb5, 0xe3, 0x7a, 0x97, -0x9a, 0xdd, 0x30, 0x3c, 0xe0, 0x3c, 0x82, 0x4d, 0x13, 0x12, 0x87, 0xc9, -0x55, 0x4d, 0x92, 0xd7, 0x63, 0x87, 0x82, 0xed, 0x50, 0xc9, 0xe2, 0xf1, -0xcd, 0x64, 0xd8, 0x6e, 0x2d, 0xb3, 0xed, 0x9c, 0xdf, 0xbf, 0x63, 0xa9, -0xe8, 0xd5, 0xb1, 0x63, 0xc7, 0xd2, 0xbd, 0xd3, 0xbd, 0x52, 0x61, 0x67, -0x58, 0xfd, 0x1c, 0x94, 0x7e, 0x19, 0x96, 0x7d, 0xcd, 0xe6, 0xb5, 0x3b, -0xae, 0x2c, 0xfc, 0xe8, 0xc4, 0x68, 0x9b, 0x27, 0xcb, 0x69, 0xbf, 0x7f, -0x60, 0x22, 0xc6, 0x00, 0xc3, 0x7b, 0x47, 0x65, 0x72, 0x37, 0xc8, 0xef, -0xee, 0x9f, 0xa0, 0x9f, 0x8c, 0x49, 0x1a, 0xd7, 0x13, 0xbc, 0x02, 0xe1, -0x36, 0x38, 0xbc, 0x42, 0xe9, 0xb2, 0x35, 0x6b, 0x96, 0x2e, 0xf1, 0xbd, -0xeb, 0xfb, 0xf8, 0xf4, 0x54, 0x76, 0x4e, 0x46, 0x09, 0x11, 0x09, 0x55, -0x0e, 0xdc, 0xa5, 0xc4, 0xa8, 0x81, 0x6c, 0x65, 0xfb, 0xa7, 0x07, 0x87, -0xa5, 0xfe, 0x8a, 0xbe, 0xcb, 0x8e, 0xf5, 0xa6, 0x0d, 0x51, 0x15, 0xbe, -0x61, 0x46, 0xd4, 0x8d, 0xb3, 0xda, 0xda, 0x99, 0x9e, 0xf9, 0x1c, 0xd4, -0x0f, 0x5d, 0xaa, 0xc1, 0xbe, 0x8c, 0x1d, 0x1d, 0x09, 0x0a, 0x3c, 0xf7, -0xef, 0xdf, 0x5f, 0xdd, 0xc8, 0x3e, 0xb9, 0x78, 0x9d, 0xc6, 0x6b, 0x87, -0x86, 0xc9, 0xb0, 0xd8, 0x00, 0xbc, 0x9e, 0xfc, 0x9b, 0x33, 0x13, 0x74, -0x03, 0x98, 0x6e, 0x6a, 0x43, 0x3d, 0xf5, 0x7a, 0xb9, 0x9d, 0x13, 0x74, -0xe2, 0xb3, 0xa9, 0xe7, 0x30, 0xec, 0x84, 0xbe, 0xf5, 0xfd, 0xd8, 0x26, -0x90, 0xb4, 0x0d, 0xef, 0x0e, 0xed, 0xd4, 0xdd, 0x24, 0x99, 0x8c, 0x3a, -0x19, 0xba, 0xc5, 0x85, 0x4f, 0xf2, 0x16, 0xaf, 0x06, 0x01, 0x04, 0xdd, -0x38, 0x08, 0xbc, 0x42, 0x92, 0x93, 0x10, 0xcb, 0xd4, 0x6d, 0xe0, 0xbf, -0x28, 0x43, 0x76, 0x56, 0xcd, 0xd7, 0x73, 0x30, 0xa8, 0xa9, 0xbb, 0x4c, -0x9d, 0x3a, 0x95, 0x4d, 0x97, 0xf8, 0x47, 0x34, 0x63, 0x18, 0x1f, 0x2e, -0x36, 0x33, 0x41, 0x37, 0xab, 0x9f, 0x81, 0x5a, 0x6f, 0x7f, 0x32, 0x7f, -0x79, 0x64, 0x4a, 0xfd, 0xbc, 0x52, 0xd9, 0x9a, 0x01, 0x5b, 0x34, 0xc8, -0xb4, 0xaf, 0x5b, 0x1b, 0x1e, 0x47, 0x97, 0x77, 0x09, 0xd3, 0xdf, 0xb8, -0x71, 0x23, 0x1e, 0x4c, 0xa9, 0x96, 0xa2, 0x4f, 0x15, 0xcb, 0x95, 0xaf, -0xeb, 0xe0, 0xee, 0x7c, 0xd4, 0x12, 0x19, 0x79, 0xe7, 0x55, 0x85, 0x5e, -0xc7, 0xe4, 0x1c, 0x35, 0x0d, 0x2a, 0xd4, 0xeb, 0x53, 0x42, 0xad, 0xf7, -0x7a, 0xb9, 0x9d, 0x13, 0x4e, 0xae, 0xe9, 0xa5, 0x86, 0x65, 0x3b, 0xb7, -0x73, 0x09, 0xea, 0x10, 0xe2, 0x90, 0x9d, 0x33, 0xcd, 0xe7, 0x4c, 0xea, -0xd7, 0x40, 0xdd, 0x8e, 0xfd, 0xc8, 0x83, 0xa8, 0x82, 0x8d, 0x58, 0x9d, -0x89, 0x37, 0x19, 0x27, 0x20, 0x6e, 0x53, 0xbc, 0x49, 0x98, 0x07, 0x83, -0x63, 0x83, 0x42, 0xb2, 0xc7, 0x5c, 0x83, 0xe3, 0x56, 0xdd, 0x66, 0xc6, -0x90, 0xc6, 0xfe, 0x3d, 0x95, 0xd7, 0xab, 0x8e, 0x5e, 0xdb, 0x5d, 0xdd, -0x05, 0x9d, 0x9b, 0x44, 0x13, 0xf0, 0x00, 0xa9, 0xe9, 0x6c, 0x4a, 0x4e, -0x68, 0x58, 0x2b, 0x0d, 0x06, 0xea, 0x87, 0x08, 0x07, 0x8a, 0x74, 0xfa, -0x78, 0xaa, 0x64, 0xa0, 0xd7, 0x59, 0xb9, 0x3b, 0x81, 0x3d, 0x4f, 0x0d, -0x85, 0x17, 0x96, 0xf2, 0x28, 0x38, 0x28, 0x08, 0x28, 0x42, 0x29, 0x52, -0xdf, 0x23, 0x6a, 0x9a, 0x2f, 0x87, 0xd3, 0xee, 0x5d, 0xd6, 0xe5, 0xad, -0x23, 0x3e, 0xa3, 0x05, 0x65, 0x40, 0x46, 0x7e, 0x72, 0x87, 0xf7, 0x69, -0xf7, 0x68, 0x5d, 0xda, 0x9c, 0x04, 0xca, 0x28, 0x9d, 0x6a, 0x93, 0xea, -0x7e, 0x3f, 0xb2, 0xe1, 0x42, 0xdc, 0x1d, 0x32, 0x2c, 0xf6, 0x12, 0x9b, -0x63, 0xa2, 0x88, 0xf2, 0x0a, 0x6c, 0x9e, 0x6c, 0x38, 0x0d, 0xd6, 0xa4, -0xec, 0xe0, 0x18, 0xf1, 0x3c, 0x0c, 0x82, 0x21, 0x54, 0x3d, 0x2f, 0xfb, -0x29, 0x3c, 0x9c, 0xad, 0x0a, 0x6f, 0x98, 0x44, 0xe5, 0x04, 0x81, 0x57, -0x60, 0x64, 0x44, 0x9a, 0x27, 0xf4, 0x40, 0xdd, 0xe6, 0x91, 0x2d, 0xfd, -0xfd, 0x7b, 0x2a, 0xaf, 0x57, 0x7d, 0x70, 0x7c, 0x94, 0xba, 0x0b, 0x77, -0xc4, 0x07, 0x47, 0xe4, 0x99, 0x4e, 0xc4, 0x7c, 0x4e, 0x4a, 0x8c, 0xc3, -0x54, 0x6f, 0x9f, 0x3f, 0x18, 0x6e, 0x8a, 0xe9, 0x53, 0x99, 0xc3, 0xd1, -0x0a, 0xbc, 0x4e, 0xc9, 0xdd, 0x09, 0xbf, 0xbd, 0x6f, 0x82, 0x2e, 0xef, -0xe1, 0xc0, 0x41, 0xe4, 0x23, 0x19, 0x9a, 0x0d, 0x49, 0xef, 0x0a, 0x82, -0x61, 0xde, 0x30, 0x02, 0xc2, 0x43, 0xed, 0x1f, 0x4c, 0x8d, 0x37, 0xcf, -0xef, 0xe0, 0xd3, 0x04, 0xd0, 0x97, 0x64, 0x35, 0xb8, 0xbb, 0xe7, 0x0b, -0x7f, 0x7e, 0xf7, 0x58, 0x7d, 0xdd, 0xf4, 0xf6, 0x3d, 0xbe, 0xde, 0xd4, -0xdd, 0x8d, 0x78, 0x10, 0x65, 0x58, 0xbf, 0x6a, 0x82, 0x27, 0xc5, 0x57, -0x1f, 0x01, 0x2f, 0x10, 0xa2, 0xb2, 0x4f, 0x4f, 0xad, 0x9f, 0x8c, 0xd2, -0x28, 0xcf, 0x85, 0xf5, 0xdf, 0xdd, 0x20, 0xec, 0x1d, 0xba, 0xc7, 0x83, -0xd8, 0x02, 0x24, 0x1d, 0xc4, 0x27, 0x76, 0x58, 0x94, 0x0a, 0x04, 0x9f, -0x20, 0xa0, 0x02, 0xd7, 0x01, 0x31, 0x58, 0x6a, 0x89, 0x01, 0xeb, 0x3f, -0x4c, 0x2e, 0x08, 0xbf, 0x1f, 0xd2, 0x70, 0x21, 0x23, 0xeb, 0xa2, 0xb0, -0xd9, 0x10, 0x8c, 0x4d, 0xc9, 0x57, 0x45, 0xcd, 0x3c, 0xb7, 0x21, 0x5d, -0x5c, 0xce, 0x6c, 0x7c, 0xae, 0x80, 0xd0, 0xef, 0x99, 0x6f, 0x98, 0xdb, -0x5e, 0xad, 0x09, 0xce, 0x47, 0x18, 0x05, 0x06, 0x28, 0x49, 0xa8, 0xd7, -0xc9, 0xf1, 0xc3, 0x3b, 0x8c, 0x6a, 0x25, 0x36, 0x78, 0x75, 0x42, 0x9b, -0xc6, 0x76, 0xb7, 0x58, 0x99, 0xe7, 0xed, 0xab, 0x5d, 0x05, 0xe4, 0x79, -0x05, 0x5e, 0xa7, 0xbd, 0x79, 0x41, 0x07, 0x75, 0x17, 0xdd, 0xda, 0xc6, -0xf2, 0x62, 0x20, 0xf6, 0x7a, 0xb9, 0x9d, 0x13, 0xde, 0x39, 0x36, 0x52, -0xdd, 0x02, 0x17, 0xa7, 0x9d, 0x4b, 0xde, 0xbf, 0x7d, 0x14, 0xda, 0xb9, -0x9d, 0x33, 0x3d, 0x9c, 0x33, 0xf6, 0x82, 0x85, 0x03, 0x37, 0x8e, 0xbb, -0x73, 0x74, 0xff, 0x1d, 0x11, 0x2e, 0xa8, 0xda, 0xc4, 0xf0, 0x62, 0xb7, -0x24, 0x80, 0xd7, 0x60, 0xd5, 0xf4, 0xdf, 0xb7, 0x0d, 0xbc, 0x74, 0x99, -0x1e, 0x97, 0x7e, 0x80, 0x4f, 0xe5, 0xf9, 0x72, 0x9c, 0x5c, 0x06, 0xe6, -0x20, 0xbf, 0xf2, 0x3a, 0xd9, 0x77, 0x83, 0x62, 0x4f, 0xc4, 0x1b, 0xca, -0x80, 0x38, 0x53, 0xfd, 0x7e, 0x10, 0xe4, 0x7b, 0x42, 0x1e, 0xd4, 0x3c, -0xfb, 0xf5, 0xeb, 0xb7, 0x6f, 0xdf, 0x3e, 0x09, 0xc9, 0xbe, 0xe6, 0x9a, -0x6b, 0xd4, 0xf7, 0xc4, 0x44, 0x98, 0x6f, 0x81, 0xa7, 0x5c, 0x9d, 0x80, -0xa0, 0xec, 0xd3, 0x1c, 0xc4, 0xe4, 0xe5, 0x59, 0x78, 0x90, 0x01, 0xb9, -0xb5, 0xba, 0x8b, 0x1e, 0x71, 0xe8, 0xc1, 0xa5, 0xed, 0xd3, 0x4c, 0x38, -0xf9, 0x96, 0xcb, 0x2f, 0x02, 0x0f, 0xee, 0xad, 0x3b, 0x95, 0x3d, 0x8c, -0x73, 0xc3, 0xcc, 0x36, 0xd7, 0xdb, 0x36, 0x55, 0xb9, 0x1b, 0xe7, 0xd7, -0x67, 0xc6, 0x57, 0x4f, 0x4f, 0xf4, 0xb0, 0x39, 0xea, 0xfe, 0x3b, 0xcc, -0xe5, 0x94, 0x22, 0xc7, 0x2f, 0x8c, 0x13, 0x89, 0x78, 0x6d, 0x83, 0x07, -0xcc, 0x4f, 0x54, 0x60, 0xff, 0x21, 0xf2, 0xc4, 0xe9, 0x2c, 0xa5, 0xd4, -0xa7, 0x77, 0x0e, 0xf2, 0x75, 0xf9, 0x7c, 0x3a, 0xdf, 0xec, 0xed, 0xe6, -0xed, 0xb2, 0x0a, 0x8f, 0x6d, 0x1b, 0xe0, 0xd3, 0x38, 0x1e, 0x4e, 0x46, -0x84, 0x00, 0x63, 0x81, 0xf0, 0x1c, 0xd9, 0xb3, 0xd5, 0x41, 0xdc, 0x2b, -0xfa, 0x1c, 0xa1, 0xfc, 0x58, 0xc4, 0x89, 0x02, 0x54, 0xdf, 0xb3, 0x61, -0x9b, 0xa7, 0x21, 0x51, 0x43, 0x1c, 0x44, 0x76, 0x78, 0xb0, 0xa2, 0x98, -0x2f, 0x64, 0x8f, 0x17, 0x97, 0x1c, 0x1e, 0x71, 0xcf, 0x4b, 0xa1, 0x0b, -0xa2, 0x86, 0x2d, 0xc6, 0x8e, 0x42, 0x62, 0x73, 0x9d, 0xfb, 0x75, 0xb8, -0x28, 0xbb, 0x13, 0x17, 0x63, 0xf3, 0x12, 0x3c, 0x48, 0x7e, 0x1b, 0xc1, -0xf5, 0x5b, 0x60, 0xe7, 0xf0, 0x60, 0xc5, 0xd2, 0xfd, 0x77, 0x84, 0xff, -0x20, 0xd9, 0x52, 0xd0, 0x04, 0xeb, 0x13, 0xfb, 0xbb, 0x84, 0x33, 0x07, -0x24, 0x41, 0x89, 0x4d, 0xf6, 0xd6, 0x5b, 0x6f, 0x55, 0x2b, 0xcb, 0x06, -0xe9, 0x87, 0x82, 0x6b, 0x73, 0xc9, 0xe4, 0xb4, 0x9a, 0x59, 0x46, 0xb3, -0x34, 0x81, 0x31, 0x3e, 0x89, 0x3a, 0x68, 0x0e, 0x18, 0x5b, 0xf1, 0x4e, -0x10, 0x49, 0x61, 0x79, 0x6b, 0x14, 0x3e, 0xa2, 0x2d, 0x7c, 0x9a, 0x95, -0x7e, 0x32, 0xef, 0x03, 0xc9, 0x47, 0xad, 0x09, 0x7a, 0x36, 0xf9, 0x3d, -0xc4, 0x7a, 0x10, 0x7f, 0xa6, 0x5b, 0xea, 0x38, 0xc1, 0x6c, 0xea, 0x41, -0x1f, 0x90, 0x0b, 0x89, 0x1a, 0x7a, 0x62, 0xbb, 0x6f, 0x38, 0xbf, 0x62, -0x4c, 0x53, 0xb9, 0x96, 0x38, 0x22, 0xcf, 0x93, 0xe7, 0xf1, 0x0d, 0x60, -0x90, 0x5f, 0x6d, 0x7a, 0x39, 0xec, 0xac, 0x0c, 0x4e, 0x4f, 0xe5, 0x35, -0xdf, 0xb7, 0xac, 0x8b, 0x9d, 0x4b, 0x30, 0x2b, 0x63, 0x00, 0xf4, 0xc3, -0x26, 0x6b, 0x67, 0x70, 0xfd, 0x1c, 0xa2, 0x12, 0xd5, 0xe3, 0xcf, 0x9e, -0x3d, 0xfb, 0xc8, 0x91, 0x23, 0xec, 0x56, 0x30, 0x0a, 0x74, 0x01, 0x43, -0x84, 0xa8, 0x3f, 0xbc, 0x42, 0x2a, 0xa9, 0xe9, 0xc2, 0xfd, 0xd2, 0x89, -0x6e, 0x55, 0x1c, 0x5f, 0xa7, 0xee, 0xee, 0x7c, 0x43, 0xd8, 0x26, 0xc6, -0x0d, 0x38, 0xa6, 0xfd, 0xc1, 0x89, 0x6c, 0xe3, 0xdd, 0xcb, 0xa2, 0xf0, -0x0e, 0x2c, 0x2f, 0x44, 0x82, 0x22, 0xe8, 0xc8, 0xfe, 0x98, 0x86, 0x33, -0x71, 0x5f, 0xea, 0x34, 0x37, 0x7f, 0xfe, 0x7c, 0x78, 0x34, 0x81, 0x89, -0xe4, 0x03, 0xe9, 0xd9, 0x0b, 0xdd, 0x5b, 0xe5, 0x98, 0x6f, 0x71, 0xe4, -0x1a, 0x97, 0x05, 0x0c, 0x6f, 0x23, 0xb2, 0xaf, 0x4f, 0x13, 0xe0, 0x7c, -0x15, 0x7c, 0xea, 0x35, 0x58, 0xa3, 0x79, 0xfd, 0x52, 0xd3, 0x88, 0x3e, -0xd5, 0x20, 0x32, 0x8a, 0xbb, 0xd7, 0xf6, 0x56, 0x23, 0xdb, 0xd4, 0x9e, -0x57, 0x4e, 0x69, 0x89, 0x5b, 0xc9, 0xa7, 0xa7, 0xf6, 0xe3, 0x64, 0x42, -0x18, 0xf5, 0x47, 0x26, 0xdf, 0x10, 0xad, 0x18, 0xff, 0x9d, 0x21, 0x5a, -0x56, 0xd8, 0x85, 0xcf, 0xa8, 0x00, 0x55, 0x40, 0x02, 0x77, 0x81, 0x7e, -0x8f, 0x57, 0x0e, 0xd8, 0x0d, 0x9e, 0x61, 0x9b, 0x24, 0x74, 0x07, 0x19, -0x1a, 0x51, 0x18, 0xbe, 0x09, 0x7c, 0x09, 0x69, 0xf6, 0x1a, 0x55, 0x81, -0x3f, 0x41, 0xbf, 0x1d, 0x90, 0xe0, 0x21, 0xed, 0x2f, 0x0d, 0x7c, 0x0c, -0x6e, 0xae, 0x46, 0x70, 0xa7, 0xd8, 0x05, 0x68, 0x84, 0xd1, 0x2d, 0x9e, -0x88, 0xad, 0x64, 0x84, 0xb2, 0x1b, 0xa1, 0x67, 0x63, 0xf8, 0xd3, 0x63, -0xd7, 0xf0, 0xe0, 0x9a, 0x67, 0x4e, 0x94, 0x35, 0xc6, 0x13, 0x1e, 0xd3, -0xfe, 0x43, 0x71, 0x26, 0xdc, 0x4f, 0x71, 0x27, 0x3c, 0xf1, 0x86, 0x08, -0x42, 0xc3, 0x50, 0x2c, 0x02, 0x0e, 0x4d, 0x89, 0x75, 0x25, 0x18, 0x87, -0x28, 0x57, 0x7e, 0x7c, 0xbd, 0xa3, 0xd7, 0xe9, 0x11, 0xd9, 0x25, 0xeb, -0x8c, 0x40, 0xe8, 0xf5, 0x64, 0x4e, 0x80, 0x45, 0x10, 0x08, 0x6c, 0x9f, -0x7e, 0xec, 0x8c, 0x69, 0x79, 0x8e, 0xee, 0x44, 0xc2, 0xcc, 0x40, 0xc6, -0x2c, 0x96, 0x7d, 0x0c, 0x50, 0x92, 0x7c, 0x6b, 0x88, 0xa9, 0xf3, 0x07, -0x15, 0xd8, 0x64, 0x51, 0x22, 0x15, 0x91, 0xb1, 0xc3, 0xd9, 0x64, 0x7f, -0x98, 0x4d, 0xd1, 0xc0, 0xcc, 0x4c, 0x9c, 0xdd, 0xc2, 0xf3, 0xd3, 0xea, -0x66, 0x0d, 0x02, 0x25, 0xf0, 0xce, 0xfa, 0xb4, 0x3a, 0xba, 0x9a, 0xc5, -0xdd, 0xc9, 0x1f, 0xb0, 0xbc, 0x3c, 0x90, 0x2d, 0x93, 0x6b, 0xf5, 0xe7, -0xc2, 0xd5, 0x48, 0x70, 0x07, 0x8b, 0x8b, 0x39, 0x9c, 0x22, 0x7f, 0xea, -0x4f, 0xe8, 0x2d, 0x44, 0xfb, 0x98, 0xef, 0xfe, 0xb1, 0x8f, 0x91, 0x0e, -0x32, 0xc2, 0x65, 0xc3, 0x9b, 0xa8, 0x91, 0xdb, 0xe6, 0x07, 0x6a, 0xc3, -0xf1, 0x69, 0x49, 0x2d, 0x4f, 0xc6, 0xe6, 0xa1, 0xfc, 0x06, 0x88, 0xa3, -0x76, 0x06, 0x24, 0x18, 0x99, 0x9d, 0xd1, 0x26, 0xfd, 0xd8, 0x19, 0xd0, -0xdd, 0x39, 0xba, 0xff, 0x8e, 0x66, 0x2e, 0x07, 0x0f, 0x1e, 0x84, 0x8d, -0xe3, 0x44, 0x92, 0x34, 0xc9, 0x80, 0x50, 0x21, 0x1a, 0x05, 0xda, 0x09, -0xc9, 0xca, 0xea, 0x7d, 0x5c, 0x37, 0xdd, 0x6e, 0xa0, 0x8b, 0x81, 0x74, -0xd4, 0x08, 0xf3, 0x46, 0x7a, 0xb1, 0x5f, 0xdd, 0xb3, 0xee, 0xa2, 0x57, -0x9f, 0x45, 0xf7, 0x95, 0x80, 0xd8, 0x41, 0x73, 0xab, 0x95, 0xea, 0x24, -0xd0, 0xa5, 0xd9, 0x2a, 0xca, 0x52, 0x12, 0x46, 0x1a, 0xc8, 0xc6, 0xa9, -0xbb, 0x87, 0x48, 0x65, 0xa6, 0x9a, 0x01, 0x11, 0xe3, 0xb8, 0x29, 0x08, -0x7f, 0x22, 0x8f, 0x54, 0x3d, 0x29, 0xa7, 0x05, 0xf2, 0x6a, 0xf5, 0x6b, -0xb7, 0x5e, 0x51, 0x1a, 0xbf, 0xc4, 0xf8, 0x76, 0x62, 0x3d, 0x82, 0x75, -0x6b, 0x77, 0xe3, 0x3c, 0xbb, 0xcb, 0xd5, 0x4c, 0x48, 0x0e, 0x9b, 0x46, -0x0b, 0x2c, 0x04, 0x08, 0x0e, 0xe5, 0x3d, 0x31, 0xc6, 0xd7, 0x5f, 0xd0, -0x84, 0x09, 0x13, 0x30, 0x97, 0x63, 0x80, 0xc2, 0x2c, 0x6b, 0x19, 0x69, -0xea, 0x1b, 0xaf, 0x90, 0x3c, 0x63, 0xb2, 0x34, 0xf4, 0x7d, 0x91, 0x8d, -0xdc, 0xe6, 0x53, 0x19, 0x02, 0x60, 0xd5, 0x20, 0x24, 0x9d, 0x78, 0x1e, -0x01, 0xb3, 0x1d, 0x27, 0xa3, 0xc6, 0x3d, 0xe3, 0xbb, 0xa5, 0x4b, 0x4f, -0xaf, 0x61, 0x10, 0x77, 0x0e, 0x78, 0xcf, 0xe2, 0x87, 0xe7, 0xe9, 0x31, -0x2b, 0x7d, 0x41, 0xf0, 0xf7, 0x53, 0xeb, 0xe0, 0xde, 0x7b, 0xef, 0xa5, -0x7c, 0x2a, 0xbb, 0x91, 0x9e, 0xbd, 0xb0, 0x7f, 0xb9, 0x2d, 0x05, 0xd4, -0xeb, 0x7a, 0x1e, 0x5e, 0x55, 0x1a, 0xf4, 0x2a, 0xb7, 0xf6, 0xdb, 0x31, -0xec, 0xf5, 0x5e, 0xf6, 0x4f, 0x40, 0x08, 0x94, 0xc9, 0xe0, 0x92, 0xb3, -0x73, 0x15, 0xbc, 0x85, 0x1c, 0x09, 0x24, 0x3a, 0x3b, 0x27, 0x07, 0x72, -0x8e, 0xc1, 0x7f, 0x87, 0x95, 0x1c, 0x2b, 0x08, 0xf9, 0x46, 0x64, 0x5c, -0xe2, 0xd2, 0x36, 0xc7, 0x5f, 0xfb, 0x86, 0x0a, 0x89, 0x7d, 0xa2, 0xf2, -0x82, 0x22, 0x82, 0x56, 0xb6, 0x5d, 0xfa, 0x3c, 0x95, 0xd2, 0x77, 0x75, -0x1a, 0xb2, 0xe3, 0xe8, 0x18, 0x58, 0x58, 0x8b, 0x4b, 0x2c, 0x25, 0x72, -0xaf, 0x8b, 0xa5, 0xc7, 0x5f, 0x10, 0x5f, 0xe9, 0xce, 0xfb, 0xeb, 0x77, -0x86, 0x03, 0x13, 0x28, 0xd2, 0x42, 0x50, 0x49, 0x52, 0xa7, 0xba, 0x0c, -0x9a, 0x1c, 0x19, 0xb0, 0xd4, 0x4b, 0xc5, 0x59, 0xa1, 0x1e, 0x16, 0xd1, -0xdf, 0x27, 0x75, 0xc8, 0xdd, 0xa3, 0x61, 0xdb, 0xd1, 0x17, 0x50, 0x3e, -0x5b, 0x32, 0x40, 0xaf, 0x8b, 0x13, 0xc4, 0x13, 0x90, 0x82, 0xb0, 0x0a, -0xca, 0x64, 0x36, 0xce, 0xb3, 0x25, 0x3e, 0x3d, 0x5e, 0x3c, 0xc0, 0x8e, -0x8f, 0x25, 0xf0, 0x49, 0x92, 0xcc, 0xa4, 0x56, 0x8c, 0xc8, 0x34, 0x6c, -0xb2, 0xc4, 0xe0, 0xbc, 0xfa, 0xea, 0xab, 0x38, 0x2b, 0x50, 0x07, 0xcc, -0xb9, 0x3a, 0xbe, 0xa1, 0x42, 0x62, 0x9f, 0xf4, 0xec, 0x4d, 0x9b, 0xf9, -0x90, 0x3c, 0x18, 0x56, 0x20, 0x95, 0x06, 0xa0, 0xa6, 0x48, 0x76, 0xaf, -0x57, 0x07, 0x1c, 0x51, 0x7a, 0x18, 0xa0, 0xc8, 0xfe, 0xf1, 0x4f, 0xfa, -0x54, 0xf6, 0x38, 0xbc, 0xfd, 0x2f, 0xec, 0xb5, 0x36, 0x31, 0x21, 0x3e, -0xf9, 0x6d, 0x59, 0x46, 0x32, 0xd6, 0x69, 0x94, 0x6e, 0x69, 0x62, 0x7a, -0x92, 0x62, 0x2d, 0x7a, 0x98, 0x3d, 0xd9, 0xcc, 0x01, 0xbe, 0x60, 0xd6, -0x0a, 0x1d, 0xcc, 0x0c, 0x09, 0x76, 0x5c, 0xff, 0x16, 0x27, 0xc0, 0xf9, -0xe8, 0x97, 0xeb, 0x94, 0xf7, 0xc9, 0x49, 0x5b, 0xdb, 0x3f, 0x7a, 0x11, -0xc6, 0xb7, 0x20, 0xce, 0xc1, 0xdd, 0x50, 0x44, 0x97, 0xa9, 0x45, 0x6b, -0xd6, 0xac, 0x19, 0xc2, 0x2d, 0x29, 0xfb, 0x44, 0xd3, 0x11, 0x40, 0xae, -0xfb, 0xef, 0xbc, 0xd7, 0x0e, 0xb4, 0x4c, 0x8c, 0xc6, 0xfa, 0x44, 0x38, -0xb4, 0xfe, 0x56, 0xec, 0x4b, 0xf9, 0x86, 0xcc, 0x29, 0x5c, 0x1c, 0x1e, -0x9c, 0xf3, 0xfa, 0xe3, 0xb1, 0xa3, 0xa0, 0x18, 0x10, 0x01, 0xe6, 0xdf, -0xf2, 0x61, 0x09, 0x65, 0xc2, 0xd8, 0x6a, 0x3c, 0x44, 0xdd, 0xf9, 0x6a, -0x0f, 0xd5, 0x67, 0x22, 0x71, 0x22, 0x72, 0xc0, 0x28, 0x28, 0x0a, 0xc6, -0xa2, 0xe3, 0x1e, 0xc2, 0xbe, 0x41, 0xc5, 0x5f, 0x4a, 0x27, 0xa9, 0xbf, -0x06, 0x48, 0x01, 0xa8, 0xe9, 0x3a, 0x53, 0xd2, 0xdf, 0xc2, 0xd4, 0x01, -0x0d, 0xfd, 0x5b, 0x9c, 0x20, 0x5e, 0x25, 0x52, 0x2e, 0x87, 0x4d, 0xeb, -0x13, 0x9b, 0x1d, 0x26, 0x72, 0x4b, 0x5d, 0xee, 0xcf, 0x8f, 0x4c, 0x0e, -0xae, 0x58, 0x75, 0xe9, 0xe0, 0xd2, 0xe4, 0x24, 0x2a, 0x44, 0x11, 0x14, -0x88, 0x09, 0x04, 0x4a, 0xc6, 0x94, 0x2a, 0x65, 0x6f, 0x54, 0xe2, 0x9a, -0x3f, 0x96, 0x59, 0x82, 0xb7, 0x31, 0x38, 0xaa, 0xf7, 0x51, 0xd8, 0xcc, -0x96, 0xf5, 0x4d, 0x96, 0x9e, 0x0c, 0x29, 0x5c, 0xd1, 0x64, 0x66, 0xa1, -0x5d, 0xa1, 0x3d, 0xdb, 0x0f, 0xe3, 0xc3, 0x4b, 0x45, 0x32, 0xb7, 0xdf, -0xef, 0x0f, 0x3f, 0x31, 0x01, 0xb0, 0x1e, 0x58, 0x01, 0x66, 0x4a, 0xbf, -0xad, 0x4f, 0x7a, 0x68, 0x0d, 0xcb, 0x42, 0x08, 0x0c, 0x71, 0xe3, 0xc8, -0xac, 0x28, 0xd9, 0x30, 0x0a, 0x72, 0x82, 0xd5, 0x5a, 0x25, 0x26, 0xc4, -0xfe, 0xc1, 0x2a, 0xe5, 0xdf, 0xe6, 0x73, 0xa1, 0x1d, 0x65, 0x65, 0xb8, -0x2d, 0x43, 0x86, 0x9a, 0x61, 0x73, 0x9c, 0xf2, 0x3b, 0x8d, 0xe8, 0x7d, -0x79, 0x58, 0x9b, 0x82, 0x2e, 0xbb, 0x24, 0xbc, 0xc2, 0x72, 0x3e, 0x64, -0x41, 0x6c, 0x5b, 0xd8, 0x29, 0x88, 0x53, 0xd5, 0xfd, 0x77, 0x0b, 0x16, -0x2c, 0xc0, 0xa9, 0x8a, 0x6b, 0x95, 0xbc, 0x48, 0x5c, 0x78, 0x52, 0x70, -0xcc, 0x4f, 0x54, 0x48, 0x4a, 0x34, 0x5e, 0x40, 0x3d, 0xf6, 0xd8, 0xa7, -0xa9, 0xe3, 0xd3, 0xf1, 0x43, 0x4a, 0x41, 0xdc, 0xf7, 0x3b, 0xec, 0xde, -0xe6, 0xb2, 0x92, 0xc8, 0x66, 0x1f, 0xa2, 0x86, 0x31, 0xf1, 0x33, 0x28, -0xba, 0xa7, 0xac, 0x13, 0x90, 0x38, 0x70, 0xe0, 0x00, 0x75, 0x29, 0x31, -0x48, 0xa0, 0xc9, 0x5d, 0x7e, 0xf9, 0xe5, 0xea, 0xaf, 0x7e, 0x07, 0x1a, -0x51, 0xa2, 0xc2, 0x5c, 0xb5, 0x40, 0x8f, 0xb5, 0xe1, 0x16, 0x36, 0xfd, -0x65, 0x36, 0x17, 0xc4, 0x8f, 0xd3, 0xf0, 0x84, 0xc8, 0x93, 0xe2, 0x52, -0xb4, 0x69, 0x37, 0x27, 0xc5, 0xd2, 0x9d, 0x40, 0xcb, 0x3e, 0xe8, 0x39, -0xf7, 0xda, 0xa7, 0x19, 0x1a, 0xfc, 0x77, 0x04, 0x1c, 0x48, 0xa6, 0x11, -0x15, 0x0c, 0xcc, 0xb1, 0x1e, 0xbe, 0xf1, 0x0a, 0xb1, 0x3e, 0xd1, 0xf2, -0x43, 0x67, 0xdc, 0xc1, 0x8a, 0xb2, 0xf4, 0xf0, 0x90, 0x64, 0x5a, 0x79, -0x4d, 0xa6, 0xf3, 0x69, 0x8d, 0x0c, 0x27, 0xe3, 0x0f, 0x1e, 0xd3, 0xcb, -0xcf, 0xb8, 0x71, 0x12, 0x65, 0xf4, 0xa2, 0x46, 0x63, 0xc6, 0x8c, 0x41, -0xa3, 0xb8, 0xe7, 0x9e, 0x7b, 0xf0, 0x51, 0xa0, 0xc6, 0xb1, 0x15, 0x51, -0xf3, 0x4f, 0x2d, 0x97, 0x4d, 0x71, 0x51, 0x9f, 0x1e, 0x51, 0xdf, 0xec, -0xa6, 0xe6, 0xba, 0x49, 0x54, 0x5e, 0xec, 0xd9, 0xb3, 0xb4, 0x6e, 0x8d, -0x65, 0xac, 0x61, 0x20, 0x6b, 0xe2, 0xc7, 0xb5, 0xab, 0xa6, 0x5d, 0xcc, -0xe6, 0xb1, 0xa9, 0x3b, 0x11, 0x35, 0x88, 0xa0, 0xe5, 0x4e, 0x17, 0x92, -0xad, 0xdd, 0xd2, 0xb1, 0xe3, 0xc7, 0xdc, 0x74, 0xd1, 0x9d, 0xc8, 0x79, -0x54, 0x6d, 0x32, 0x8d, 0xa8, 0x09, 0x46, 0x71, 0x34, 0xcc, 0xb2, 0x96, -0xf5, 0x62, 0xec, 0x6a, 0xdb, 0x40, 0x02, 0x6d, 0x9d, 0xb2, 0xbe, 0xea, -0x35, 0x53, 0xed, 0xc7, 0x8f, 0x29, 0xfa, 0x7a, 0x49, 0xb0, 0x72, 0x26, -0x2d, 0xef, 0x0b, 0x23, 0xc2, 0xcf, 0x4d, 0xe5, 0x01, 0x5f, 0x67, 0xa5, -0x64, 0x42, 0xb5, 0x1a, 0x54, 0xa1, 0x23, 0x88, 0x80, 0x5c, 0x59, 0x62, -0x01, 0x49, 0xbb, 0x63, 0x1f, 0x02, 0x1e, 0xea, 0xaf, 0x94, 0x50, 0xf0, -0xc9, 0x19, 0xc2, 0x46, 0x40, 0xe8, 0xae, 0x5e, 0x86, 0xa3, 0x54, 0x6a, -0x2d, 0x2c, 0x24, 0x7e, 0x84, 0xfc, 0x75, 0xf5, 0x4d, 0xc5, 0xd8, 0xfb, -0x3d, 0x2c, 0x11, 0x22, 0x00, 0xfe, 0x69, 0x99, 0x0f, 0xf1, 0x91, 0x76, -0x16, 0x13, 0x91, 0x18, 0x7f, 0x8b, 0xe5, 0x99, 0x2a, 0x57, 0xc4, 0xa6, -0x24, 0xe6, 0xf5, 0x76, 0xba, 0xff, 0xae, 0x6d, 0xdb, 0xb6, 0xd4, 0x70, -0xc1, 0x62, 0x4e, 0x65, 0x09, 0xbc, 0xda, 0x68, 0x04, 0xe6, 0x1a, 0x79, -0x3e, 0x44, 0x7c, 0xa0, 0xaa, 0x33, 0x8a, 0x1e, 0xb9, 0x80, 0x5e, 0xef, -0x75, 0x42, 0x01, 0x9e, 0x40, 0xc1, 0xac, 0x40, 0x02, 0x93, 0xbc, 0xde, -0x5d, 0x14, 0xc4, 0xf7, 0x6e, 0xb3, 0xeb, 0x6f, 0xd1, 0x07, 0x84, 0xca, -0xc9, 0xc8, 0x55, 0xa4, 0x49, 0x95, 0x65, 0x58, 0x33, 0x41, 0x04, 0xb0, -0x53, 0x56, 0x9c, 0x7a, 0x0b, 0xc4, 0x9f, 0xa9, 0xbf, 0xda, 0x8c, 0x0c, -0xc7, 0x14, 0x86, 0x43, 0x43, 0xcc, 0x03, 0xe6, 0x83, 0x04, 0x6b, 0xaa, -0xf4, 0x52, 0xd4, 0x47, 0xb7, 0x6b, 0xf9, 0x3d, 0x7f, 0xaf, 0x8b, 0x63, -0xff, 0x04, 0xe5, 0x9c, 0x25, 0xda, 0x97, 0x32, 0x50, 0x76, 0x2e, 0x9c, -0xd2, 0xbf, 0xa1, 0x3b, 0xf3, 0x89, 0xb2, 0x17, 0x51, 0x19, 0xcd, 0xce, -0x50, 0x5e, 0xcf, 0x51, 0x31, 0xbc, 0xac, 0xd5, 0xb0, 0x61, 0xc3, 0xf0, -0xdf, 0x11, 0xfe, 0x44, 0xa6, 0x91, 0xa1, 0x8a, 0xa6, 0x6e, 0x5e, 0xb2, -0xcb, 0x2b, 0x30, 0xc8, 0x92, 0x24, 0xa0, 0x5e, 0x15, 0x36, 0x56, 0xbf, -0x8d, 0x42, 0x5e, 0x1f, 0x43, 0x9d, 0x50, 0xae, 0x41, 0x63, 0xbc, 0x4b, -0xfc, 0xdc, 0xd4, 0x02, 0xf4, 0xcf, 0xa6, 0x09, 0xf9, 0xaa, 0xd5, 0x20, -0x51, 0x81, 0x02, 0xf7, 0x88, 0x4f, 0x08, 0xac, 0xb0, 0x66, 0x34, 0x39, -0x8a, 0x7a, 0xe8, 0x05, 0x16, 0x90, 0x03, 0xdd, 0x3d, 0x35, 0xc6, 0x56, -0x82, 0x46, 0xa9, 0x4d, 0xc6, 0xcb, 0x33, 0x5b, 0xae, 0xe5, 0x16, 0xa4, -0x1f, 0x52, 0x06, 0x81, 0x22, 0x26, 0x18, 0xb8, 0x70, 0x16, 0xf1, 0x6a, -0xd5, 0xad, 0x3d, 0x07, 0x7a, 0x10, 0x66, 0x0f, 0x4b, 0xef, 0xd9, 0x3a, -0x07, 0x13, 0x1c, 0xc1, 0x63, 0x52, 0x7a, 0x10, 0x30, 0x23, 0xb8, 0xdb, -0x7f, 0x0b, 0x5e, 0xcf, 0xc4, 0x31, 0x2a, 0xf3, 0xb1, 0x99, 0x9a, 0x42, -0xd8, 0x1b, 0x46, 0x21, 0x77, 0xc3, 0x22, 0xd0, 0xaa, 0xa7, 0xf3, 0x29, -0x26, 0xda, 0x72, 0x40, 0x83, 0xff, 0x8e, 0x0d, 0x05, 0x8a, 0x47, 0xa9, -0xc0, 0x26, 0xab, 0xeb, 0xd9, 0x7e, 0x46, 0x7c, 0xc0, 0x28, 0xf4, 0xd2, -0x32, 0x36, 0xc5, 0x47, 0xaf, 0x0b, 0xea, 0xe1, 0x84, 0x47, 0xb7, 0xf6, -0xa7, 0xc2, 0x5a, 0x20, 0x23, 0x78, 0xb8, 0x16, 0x95, 0x00, 0x3c, 0xb0, -0xfa, 0x7e, 0x2b, 0x15, 0xd8, 0xdf, 0xd4, 0xcb, 0x23, 0xae, 0x86, 0x20, -0x02, 0x4c, 0x7e, 0x54, 0x91, 0x31, 0x57, 0x67, 0x23, 0xbf, 0xde, 0xec, -0x38, 0x47, 0x05, 0xa4, 0xd8, 0x2b, 0x3e, 0x2c, 0xf6, 0x57, 0x4b, 0xce, -0x20, 0x5f, 0x52, 0xf2, 0x11, 0x15, 0x02, 0x91, 0x89, 0x74, 0x4a, 0xc4, -0x57, 0xfc, 0x83, 0x94, 0xa5, 0xd0, 0xcb, 0x6e, 0xbb, 0x93, 0x43, 0xe4, -0xd9, 0xf5, 0x2a, 0x10, 0xfa, 0x5d, 0x82, 0xc8, 0xe7, 0xb1, 0xa2, 0xaa, -0x70, 0x66, 0x9b, 0xc9, 0xee, 0x64, 0xe1, 0xf3, 0x72, 0x2d, 0xdf, 0x0e, -0x49, 0x97, 0x3a, 0x07, 0x5e, 0xe3, 0x6f, 0x99, 0x15, 0x35, 0xb8, 0xee, -0x45, 0x21, 0xff, 0x8e, 0x48, 0x1c, 0x0c, 0x50, 0x04, 0x1c, 0x90, 0x56, -0xe1, 0xa1, 0x02, 0xa5, 0x2d, 0x5e, 0x81, 0xec, 0x45, 0xa5, 0x19, 0xe2, -0x40, 0xd5, 0xca, 0x06, 0x68, 0x7a, 0xf7, 0x4a, 0xeb, 0x18, 0xb3, 0xb1, -0xf4, 0x05, 0x25, 0x13, 0xc5, 0x7c, 0x2f, 0xaa, 0x4e, 0xa8, 0x98, 0x6a, -0xff, 0xe2, 0x64, 0xb1, 0xf6, 0x7a, 0x20, 0x65, 0xc3, 0x9f, 0x2c, 0xf7, -0x45, 0xf4, 0x25, 0xcf, 0x23, 0x50, 0xa8, 0x41, 0x9a, 0x16, 0xc0, 0x1f, -0x78, 0x97, 0x74, 0x60, 0x21, 0xa1, 0x05, 0x43, 0x3b, 0xbf, 0xaa, 0x0b, -0x51, 0x3c, 0x3c, 0x24, 0x6a, 0xe3, 0x36, 0xa5, 0x20, 0xb4, 0xe5, 0x5d, -0xfc, 0x28, 0x98, 0xe0, 0xee, 0x95, 0xa9, 0x82, 0x6b, 0x38, 0xb6, 0x6d, -0x72, 0x5d, 0xa2, 0x19, 0xdc, 0x59, 0x23, 0xf5, 0x48, 0x2a, 0x66, 0xee, -0x53, 0xe4, 0x84, 0xe5, 0x0c, 0x75, 0xff, 0x1d, 0x04, 0x2c, 0x59, 0xa9, -0x78, 0x2a, 0x28, 0xea, 0x61, 0xa9, 0x51, 0xf8, 0x60, 0x83, 0xe2, 0x7a, -0xbd, 0x0c, 0x3a, 0xa6, 0x77, 0xaf, 0xb1, 0xdf, 0x5e, 0xe9, 0xde, 0xf3, -0x09, 0x94, 0xd4, 0xe6, 0x8d, 0x96, 0x47, 0x22, 0x38, 0x90, 0xd0, 0xb3, -0x34, 0xfd, 0xf3, 0x54, 0x90, 0x13, 0x6b, 0x1f, 0x15, 0x96, 0xb9, 0xcb, -0x48, 0x35, 0x96, 0x23, 0x20, 0x2c, 0xa1, 0x11, 0xc2, 0x79, 0x16, 0x2d, -0x5a, 0x44, 0xc5, 0x68, 0xba, 0x67, 0x10, 0x7b, 0x8b, 0x5b, 0x90, 0x1d, -0x8e, 0xa0, 0x74, 0x9c, 0x83, 0x7a, 0x60, 0x01, 0xd2, 0xb9, 0x87, 0x65, -0xa4, 0x0e, 0x9f, 0xe5, 0x2d, 0x88, 0xb0, 0xf4, 0xc3, 0x44, 0xee, 0xee, -0x46, 0x2a, 0x8a, 0xc7, 0x5c, 0x9f, 0xc1, 0xf2, 0x12, 0x98, 0xa4, 0x87, -0x78, 0x08, 0xe5, 0x0a, 0x54, 0x33, 0xb7, 0x53, 0x20, 0xd4, 0xc3, 0x22, -0xe8, 0xfe, 0x3b, 0xa4, 0x50, 0xec, 0xe6, 0x50, 0x32, 0x8a, 0x1f, 0x9e, -0x8a, 0x80, 0x50, 0x21, 0x36, 0x59, 0x5d, 0xc3, 0xf3, 0x5b, 0xea, 0xb0, -0x09, 0x15, 0x62, 0x28, 0x30, 0x47, 0xc2, 0x2b, 0x6c, 0x9e, 0x6f, 0xff, -0x34, 0x1c, 0x76, 0x94, 0x9c, 0xd1, 0x69, 0xc5, 0x3f, 0x78, 0xeb, 0xe2, -0x93, 0x99, 0xf2, 0x32, 0x53, 0x13, 0x7a, 0xb7, 0xcb, 0xc5, 0x0d, 0x42, -0x04, 0x3b, 0x5e, 0x79, 0x73, 0x84, 0x15, 0xd3, 0xd0, 0xaf, 0xa2, 0x9d, -0x0d, 0x4e, 0x71, 0xc8, 0xfd, 0x92, 0x4b, 0x2e, 0x81, 0x39, 0x10, 0xbb, -0x46, 0xfb, 0x1b, 0x2c, 0x5a, 0x6c, 0x6c, 0xc8, 0x4b, 0x70, 0x73, 0x62, -0x6f, 0x29, 0x6b, 0x42, 0xf6, 0x12, 0x36, 0x2e, 0xfd, 0x42, 0xcf, 0xa6, -0x08, 0x4a, 0x79, 0xab, 0x93, 0xf5, 0x36, 0x48, 0x9e, 0xb1, 0x64, 0x7f, -0x31, 0x39, 0x13, 0x5f, 0x8a, 0xdc, 0x02, 0x0d, 0xcd, 0x66, 0x01, 0x55, -0x12, 0x21, 0x3d, 0x54, 0x9d, 0x42, 0xc3, 0x36, 0xac, 0xa7, 0xcd, 0x84, -0x3e, 0x77, 0xd3, 0xd6, 0xfd, 0x77, 0x54, 0x5b, 0x45, 0xd5, 0x66, 0x67, -0xc1, 0x68, 0x4e, 0xa9, 0x9b, 0x80, 0x50, 0x21, 0x36, 0x59, 0x1a, 0xcc, -0xa8, 0xe9, 0x52, 0x65, 0xc4, 0xa7, 0xb5, 0xf3, 0xe9, 0x64, 0x32, 0xec, -0xa4, 0x00, 0x4c, 0xb0, 0x4c, 0x10, 0xea, 0xee, 0x80, 0xcd, 0x90, 0xe6, -0x4a, 0xf1, 0x28, 0x9f, 0xe6, 0x26, 0x27, 0x93, 0xac, 0x63, 0x78, 0x73, -0x0d, 0x6a, 0xa6, 0xe2, 0xa4, 0x23, 0x25, 0x9f, 0x82, 0x4e, 0xfa, 0xde, -0x46, 0x62, 0x1a, 0x81, 0x5e, 0xe6, 0x5b, 0xa0, 0x5b, 0xab, 0x11, 0xb0, -0xa0, 0xa3, 0x36, 0x50, 0xc8, 0x87, 0x24, 0x6f, 0x0a, 0x46, 0xd1, 0xb7, -0x0a, 0xe5, 0x81, 0x9c, 0x18, 0x12, 0x00, 0x90, 0x97, 0x88, 0xa7, 0x92, -0xe0, 0x11, 0x52, 0x97, 0xb0, 0xf6, 0x62, 0xe9, 0x52, 0x17, 0x7a, 0xf6, -0x73, 0xc1, 0x12, 0x75, 0xc3, 0x2e, 0xd5, 0x46, 0xd4, 0x85, 0x36, 0x8d, -0xa7, 0x76, 0x56, 0x46, 0xf5, 0x82, 0x20, 0xec, 0xc5, 0xce, 0xf9, 0x9c, -0x43, 0x0d, 0x14, 0x77, 0x67, 0x32, 0x67, 0x73, 0x57, 0x0f, 0x9b, 0xe6, -0x3b, 0x77, 0x7c, 0x49, 0x7f, 0x53, 0x2c, 0xac, 0x24, 0x0c, 0xab, 0x5e, -0x22, 0xee, 0xfa, 0x3d, 0x78, 0xef, 0x16, 0x09, 0x24, 0x30, 0xad, 0xa8, -0xd1, 0x89, 0xb1, 0xb3, 0x69, 0x7d, 0xb3, 0xb9, 0x4c, 0xfa, 0x69, 0x8c, -0xac, 0x76, 0x8b, 0x20, 0xf2, 0x0a, 0x0c, 0x11, 0x44, 0x71, 0x9a, 0x2d, -0x3c, 0xf6, 0x0b, 0x03, 0xeb, 0x93, 0x44, 0xa7, 0xc4, 0xcb, 0x81, 0xe1, -0x65, 0xfb, 0xa2, 0x4e, 0x7c, 0xf6, 0x10, 0xc7, 0x41, 0xbe, 0xa1, 0x65, -0x12, 0xb6, 0x5e, 0xd9, 0x16, 0x16, 0x81, 0x1a, 0x0d, 0x18, 0xe0, 0x0c, -0x20, 0x81, 0x60, 0x5b, 0x42, 0xd0, 0x61, 0x0e, 0x80, 0x81, 0xa0, 0x4e, -0xf8, 0x03, 0x78, 0xe0, 0x2d, 0x52, 0x9d, 0x85, 0x0e, 0x1e, 0xfa, 0x3b, -0xf6, 0x5c, 0x7d, 0x8b, 0x2d, 0x59, 0x9d, 0xac, 0xf7, 0xec, 0x03, 0x2a, -0x96, 0xbd, 0x26, 0xfc, 0x78, 0x59, 0x04, 0x04, 0xa8, 0x20, 0x14, 0x0f, -0x46, 0x36, 0x7d, 0x64, 0xdc, 0xbe, 0x1e, 0xbc, 0x99, 0xaa, 0xa6, 0x93, -0xfe, 0x98, 0xc4, 0xcb, 0xf9, 0x31, 0x37, 0xb9, 0x84, 0x3e, 0x18, 0x6a, -0x28, 0x4c, 0x82, 0x2c, 0xaf, 0x65, 0x5d, 0x7e, 0x33, 0x36, 0x3c, 0xa1, -0x42, 0x72, 0x8c, 0x48, 0x56, 0xa2, 0x41, 0x9b, 0x1a, 0xbd, 0xfc, 0x02, -0xd1, 0x30, 0xd4, 0x48, 0xc4, 0xb8, 0x1c, 0x10, 0x31, 0xfa, 0xa2, 0xdf, -0x2b, 0xa2, 0x2e, 0x24, 0x54, 0xc9, 0xcc, 0x97, 0xe5, 0x16, 0x5e, 0x73, -0x00, 0x03, 0xb9, 0x3b, 0x93, 0x87, 0x17, 0x99, 0x23, 0x82, 0x09, 0xf9, -0xd6, 0xdf, 0x3a, 0x1d, 0x0d, 0x89, 0x13, 0x21, 0xb7, 0x11, 0x63, 0x2e, -0xef, 0x0c, 0x30, 0x48, 0x9d, 0x66, 0x4c, 0x87, 0x68, 0x84, 0xd2, 0x29, -0x9d, 0x8d, 0x09, 0x1b, 0x60, 0xaf, 0x5e, 0xa5, 0x65, 0x2a, 0xf1, 0x69, -0x78, 0x56, 0x6d, 0xf5, 0x24, 0x1b, 0x14, 0x15, 0x75, 0x47, 0xfb, 0x75, -0x37, 0xbc, 0x3e, 0xbb, 0x2a, 0x68, 0x02, 0x07, 0xb6, 0x19, 0x87, 0x4f, -0xbc, 0x96, 0x87, 0x5a, 0x38, 0xaa, 0xe2, 0xe0, 0x05, 0x91, 0xac, 0xb4, -0x91, 0x80, 0xdf, 0x21, 0x14, 0xe4, 0xc3, 0xa9, 0x07, 0xc7, 0x4e, 0x28, -0xf5, 0x33, 0x31, 0x40, 0x51, 0x9e, 0x86, 0x55, 0xf5, 0xd0, 0x18, 0xc8, -0x0b, 0x2a, 0x10, 0x9f, 0x70, 0x8c, 0xeb, 0xed, 0xe1, 0xec, 0x17, 0xd3, -0xf5, 0xba, 0xac, 0xfa, 0x09, 0xc8, 0xf7, 0xfa, 0x8b, 0x94, 0x87, 0x09, -0x50, 0xa6, 0x44, 0xd2, 0x25, 0x62, 0xc2, 0x43, 0xab, 0x2d, 0xec, 0x27, -0x3e, 0x4d, 0xd2, 0xa7, 0x93, 0x8f, 0x5d, 0xd7, 0x83, 0x42, 0xe8, 0xe6, -0x4b, 0x74, 0x4d, 0x1d, 0xb9, 0xf4, 0xa6, 0x9b, 0x6e, 0x92, 0x6c, 0x49, -0xa2, 0x38, 0xc1, 0x03, 0x01, 0x54, 0x48, 0xbd, 0xd8, 0x0d, 0x31, 0xfa, -0x09, 0x1e, 0xe4, 0x40, 0xa6, 0xd2, 0xb1, 0x84, 0xad, 0xc6, 0xc3, 0x64, -0x88, 0x95, 0xd0, 0x9f, 0x5a, 0xef, 0x79, 0xe7, 0x47, 0xe0, 0x89, 0xbb, -0x1b, 0x29, 0x6f, 0xa3, 0xfd, 0x64, 0xcc, 0x5b, 0xaf, 0x76, 0xbb, 0xe0, -0x7a, 0xc5, 0x41, 0x9e, 0x54, 0x2f, 0x6a, 0x78, 0x9f, 0xbd, 0x3e, 0x35, -0xe6, 0x79, 0xea, 0xfe, 0x3b, 0xa9, 0x9f, 0x89, 0xf8, 0x24, 0xf5, 0x33, -0xf5, 0x7e, 0x5f, 0xbe, 0xf1, 0x0a, 0xc9, 0x31, 0x62, 0xac, 0x52, 0x5e, -0x9c, 0x96, 0xe8, 0x77, 0x4d, 0x62, 0x0f, 0x6f, 0x91, 0xed, 0x93, 0x6a, -0xc7, 0xfa, 0x5b, 0x97, 0xcf, 0xb8, 0x14, 0xfc, 0x8b, 0x7b, 0xc3, 0x2f, -0x46, 0x91, 0x04, 0xbd, 0xb2, 0xe5, 0x45, 0xfe, 0x13, 0x17, 0xa7, 0x2f, -0xb7, 0xd7, 0x1c, 0x40, 0x9f, 0x60, 0x60, 0x38, 0x19, 0x65, 0x97, 0xce, -0x12, 0xe6, 0x11, 0xf4, 0x27, 0xc5, 0xf6, 0x4a, 0x71, 0x41, 0xec, 0x4b, -0x12, 0x63, 0xab, 0xf8, 0x83, 0x24, 0x88, 0x49, 0x91, 0x22, 0x3e, 0x20, -0x41, 0xe9, 0x6e, 0x10, 0xaf, 0x05, 0x3f, 0x89, 0x95, 0x50, 0x8b, 0xa9, -0xd7, 0x57, 0xc6, 0x0c, 0x10, 0x48, 0xca, 0xa1, 0xfe, 0x2c, 0xaa, 0xd2, -0x21, 0xf0, 0xb3, 0x59, 0xb3, 0x99, 0xa4, 0x0b, 0x0f, 0x60, 0x56, 0x8a, -0xbb, 0x30, 0x8a, 0xe6, 0xcd, 0x4b, 0xbb, 0xd7, 0xf9, 0x57, 0x1c, 0x1e, -0x2e, 0xad, 0xfb, 0x82, 0xa4, 0x7e, 0xa6, 0x54, 0x28, 0xb6, 0xac, 0x60, -0x60, 0xd7, 0xb7, 0xcd, 0x5b, 0x01, 0x52, 0x93, 0x27, 0x4f, 0x56, 0x4b, -0x0c, 0xa9, 0x05, 0x42, 0x28, 0x96, 0xd7, 0xb2, 0x7b, 0x79, 0x68, 0x8a, -0x47, 0x1d, 0x10, 0x9b, 0x0e, 0x4e, 0xb8, 0x0d, 0x42, 0x3c, 0x49, 0xb0, -0x06, 0x2b, 0x93, 0x9a, 0x3c, 0x6d, 0x8b, 0xc9, 0x1d, 0x25, 0x15, 0x4b, -0x7d, 0x63, 0x33, 0x39, 0xc6, 0x8f, 0x47, 0x46, 0x71, 0xb4, 0x2c, 0xf2, -0x80, 0xa3, 0x40, 0x07, 0x3f, 0xaf, 0x8a, 0x60, 0x35, 0x6c, 0x85, 0x04, -0xd8, 0xa2, 0x4c, 0x53, 0x85, 0x05, 0xfe, 0x20, 0x3d, 0x63, 0xc5, 0xc7, -0xc4, 0xc1, 0x2b, 0xa0, 0x36, 0x82, 0xba, 0x8a, 0x90, 0x2a, 0xaf, 0xc6, -0x4a, 0x5a, 0x4c, 0xa9, 0xf3, 0xf5, 0x42, 0xfc, 0x5e, 0xcb, 0xa8, 0xd9, -0x7f, 0x52, 0x65, 0xf1, 0x1c, 0x6e, 0xbb, 0x14, 0x1a, 0x2f, 0xda, 0x83, -0xd4, 0x57, 0xbc, 0xa8, 0x93, 0x9a, 0x33, 0x6e, 0x4a, 0x5d, 0x5c, 0x24, -0x9b, 0xd2, 0xfe, 0xc4, 0xd4, 0x99, 0x06, 0xff, 0x1d, 0x6a, 0x1b, 0x02, -0x2a, 0x9e, 0x0a, 0x34, 0x34, 0x73, 0x56, 0xaa, 0x21, 0x1d, 0xcf, 0x93, -0x04, 0x25, 0x99, 0x77, 0x69, 0x69, 0x17, 0xd3, 0x0e, 0x99, 0x74, 0x10, -0x0b, 0xf5, 0x31, 0x7b, 0x1a, 0x9c, 0xe9, 0xdd, 0x4f, 0x64, 0x51, 0xa8, -0x4a, 0x42, 0xc3, 0x21, 0x9d, 0x74, 0x70, 0x8f, 0xcc, 0x1f, 0x55, 0x80, -0x63, 0xc1, 0x10, 0x60, 0x87, 0x37, 0x83, 0x48, 0x32, 0x24, 0xba, 0x6b, -0xa6, 0xb5, 0x72, 0xd7, 0x99, 0x45, 0xc6, 0xc1, 0x09, 0xc0, 0xae, 0x8c, -0x9d, 0xc7, 0x50, 0xb3, 0xd9, 0xef, 0x00, 0x72, 0xaf, 0x2f, 0x89, 0x78, -0x10, 0xcb, 0x70, 0x15, 0xa6, 0xaa, 0x1e, 0x8d, 0x08, 0x3f, 0xac, 0x22, -0xc7, 0x8f, 0x1f, 0xa7, 0xad, 0x3d, 0x71, 0x53, 0xe0, 0xc1, 0x50, 0xc1, -0x8e, 0xdd, 0x0b, 0x54, 0xd0, 0xac, 0x43, 0x5f, 0x0d, 0xcb, 0xba, 0x83, -0xfa, 0x7c, 0xc0, 0x8c, 0x99, 0xeb, 0xca, 0x37, 0xec, 0xc7, 0x5e, 0x67, -0x6e, 0xe7, 0x04, 0x55, 0xad, 0x90, 0x31, 0xe9, 0xf4, 0x65, 0xe7, 0x12, -0xce, 0xf1, 0x6c, 0xba, 0x24, 0x5a, 0x42, 0x4d, 0x9b, 0x32, 0xd5, 0x04, -0x20, 0xab, 0x5f, 0xed, 0x17, 0x36, 0xd7, 0x67, 0xa2, 0xe7, 0xf1, 0xaa, -0xfa, 0x99, 0x92, 0x53, 0x61, 0xee, 0x20, 0x67, 0x50, 0x33, 0x3c, 0xa1, -0x82, 0x8b, 0x69, 0xb8, 0xa8, 0x26, 0x47, 0xd2, 0xb3, 0xd7, 0x6c, 0x52, -0x9b, 0x0b, 0x84, 0xe0, 0x4b, 0x49, 0x32, 0x73, 0x15, 0x1c, 0x66, 0x8f, -0xf7, 0xea, 0xaa, 0xab, 0xae, 0x62, 0x5f, 0xb7, 0x7c, 0xb5, 0x78, 0xa0, -0x08, 0xe6, 0xe1, 0x87, 0xb2, 0xb3, 0x76, 0x7a, 0xf3, 0x02, 0x69, 0x22, -0x26, 0xe8, 0x3c, 0x8b, 0x9d, 0x07, 0xa5, 0x16, 0xbf, 0x98, 0x1a, 0x96, -0x14, 0x28, 0x9b, 0xb3, 0xf5, 0xe3, 0x34, 0x74, 0x24, 0xca, 0x10, 0x1a, -0x72, 0xa9, 0xd9, 0x29, 0xd1, 0xbf, 0xd5, 0x04, 0x86, 0x0f, 0x1f, 0x4e, -0x0b, 0x66, 0x61, 0xeb, 0x68, 0x11, 0xf0, 0x04, 0xb3, 0x05, 0x9d, 0x6f, -0x08, 0xf0, 0x54, 0x97, 0x20, 0x13, 0x12, 0x6d, 0x4a, 0x90, 0x85, 0x87, -0x29, 0x61, 0x6d, 0x53, 0xe7, 0xeb, 0xf5, 0x95, 0xc9, 0xe3, 0xf3, 0xe3, -0x41, 0x2c, 0x2f, 0x51, 0xdd, 0xbd, 0xe0, 0x87, 0x36, 0x1d, 0x82, 0x94, -0xbc, 0xc0, 0xe6, 0xc1, 0x66, 0x61, 0x6e, 0x36, 0xcb, 0x2d, 0x0c, 0x25, -0x91, 0xe0, 0x8d, 0xe4, 0x06, 0xa9, 0xa7, 0x80, 0x4e, 0x6c, 0x7a, 0xcd, -0xf5, 0xd9, 0xaa, 0xca, 0x54, 0x8c, 0x43, 0xc1, 0x5f, 0xfc, 0x77, 0x58, -0x32, 0xdc, 0xe5, 0x54, 0xe8, 0x65, 0xfa, 0xbd, 0xc4, 0xcc, 0xf2, 0x9e, -0xae, 0xbc, 0xf2, 0x4a, 0x35, 0x39, 0xaf, 0xf5, 0x69, 0xbc, 0x2e, 0x3a, -0x66, 0x19, 0xda, 0x01, 0x12, 0x9c, 0x63, 0x19, 0x23, 0xdd, 0xa5, 0x4b, -0x17, 0xc8, 0x17, 0x37, 0x16, 0xa5, 0x62, 0x20, 0x5f, 0x5a, 0xa3, 0xbb, -0xdb, 0xf3, 0xec, 0x7c, 0x8f, 0xe4, 0x40, 0x2d, 0x51, 0xe6, 0x0f, 0x7f, -0xc0, 0x2f, 0x46, 0x0a, 0x21, 0x76, 0x9e, 0xd5, 0xab, 0x57, 0xab, 0x6b, -0xf1, 0xef, 0x78, 0x9d, 0xb0, 0x7f, 0x27, 0xa0, 0x0b, 0x29, 0xc4, 0x62, -0xf3, 0x81, 0xc1, 0xca, 0x4b, 0xa5, 0xdb, 0x98, 0x3e, 0x73, 0x62, 0x37, -0xb0, 0x8a, 0x48, 0x8a, 0x92, 0x34, 0x4d, 0x36, 0xa8, 0x7d, 0x92, 0xe9, -0x65, 0x48, 0x09, 0x66, 0x04, 0xb0, 0x81, 0xb1, 0xae, 0x64, 0x71, 0xa1, -0xa5, 0x28, 0x45, 0xbc, 0xa0, 0xe5, 0xfa, 0x90, 0x66, 0xe0, 0xdf, 0xe3, -0x18, 0xae, 0x82, 0xac, 0x55, 0xbd, 0x7b, 0xfb, 0x69, 0x67, 0xaa, 0xbc, -0x0b, 0xaf, 0x1e, 0xa1, 0x8b, 0xd4, 0x42, 0x9d, 0xf3, 0xb3, 0x44, 0x6a, -0xce, 0x6c, 0x64, 0xd0, 0x00, 0xbb, 0x98, 0x9e, 0x59, 0xe5, 0x87, 0x7a, -0x49, 0xa7, 0x70, 0x35, 0x26, 0xfd, 0x12, 0xa8, 0x58, 0x47, 0xde, 0x0b, -0x8c, 0x02, 0x00, 0x98, 0x77, 0x1f, 0x5b, 0xa8, 0x50, 0x99, 0x77, 0x7a, -0x29, 0x48, 0xee, 0xc1, 0x9d, 0x28, 0x61, 0x8b, 0x08, 0x48, 0x2e, 0x35, -0x39, 0x31, 0x5e, 0xf7, 0x09, 0x56, 0x90, 0xb4, 0x1e, 0x8a, 0xb2, 0x10, -0x09, 0xc7, 0x56, 0xe1, 0x2e, 0x26, 0x14, 0x0d, 0x98, 0xc6, 0xbe, 0xd0, -0x2e, 0x01, 0x3f, 0xd4, 0x8c, 0x81, 0x7c, 0x91, 0xb6, 0x8b, 0x8b, 0x8b, -0xe9, 0x84, 0xad, 0xd7, 0xcd, 0xf6, 0x0a, 0x06, 0x62, 0xe9, 0xf2, 0xf3, -0xf3, 0xe9, 0x43, 0x37, 0x67, 0xce, 0x1c, 0x46, 0x23, 0x8e, 0x15, 0x30, -0x48, 0x04, 0x11, 0x3c, 0x91, 0x00, 0x18, 0xdc, 0x02, 0x6a, 0x90, 0xa0, -0x7b, 0x09, 0xa1, 0x1e, 0x4c, 0x11, 0x78, 0x03, 0xf4, 0x6a, 0xf8, 0x72, -0x3b, 0x34, 0x6c, 0xb6, 0x49, 0xe4, 0x40, 0x75, 0x77, 0x72, 0xea, 0x89, -0xb1, 0xc5, 0x35, 0x41, 0xd1, 0x03, 0xd2, 0xbb, 0x2d, 0xeb, 0xaf, 0x88, -0x65, 0x1c, 0x7b, 0x94, 0xbb, 0x16, 0xb5, 0x8c, 0x46, 0xa4, 0x10, 0x19, -0x3f, 0xa8, 0xf5, 0xc2, 0xc6, 0x89, 0x8a, 0xb7, 0x5c, 0x25, 0xd4, 0x33, -0xaf, 0x2f, 0xcb, 0x26, 0x66, 0x70, 0x56, 0xca, 0x2d, 0x08, 0x0a, 0xb4, -0xe9, 0xfa, 0x60, 0x53, 0xd0, 0x7b, 0x34, 0xca, 0xe5, 0x28, 0x48, 0x78, -0xe8, 0xb0, 0x2f, 0xb1, 0x68, 0x8a, 0xf9, 0xf0, 0x7d, 0xeb, 0xd6, 0xad, -0xb1, 0xcb, 0xc1, 0xd8, 0xf5, 0x96, 0x3d, 0xee, 0xb2, 0xf6, 0x98, 0x33, -0x73, 0x30, 0x3f, 0x1a, 0x7a, 0x9d, 0xbe, 0x0e, 0x04, 0x0a, 0x60, 0xf8, -0xa6, 0x61, 0xa7, 0xf0, 0x64, 0xb3, 0xd1, 0xc9, 0x16, 0x2a, 0x24, 0xca, -0x83, 0x21, 0x74, 0x03, 0x94, 0x79, 0xb9, 0xa1, 0x72, 0x9c, 0x2c, 0x14, -0xff, 0x21, 0x5c, 0x99, 0x0d, 0x80, 0xee, 0x72, 0xfc, 0xf0, 0x99, 0x80, -0x08, 0x78, 0xab, 0xa1, 0x32, 0xac, 0xe5, 0xdb, 0xa2, 0x8b, 0x76, 0xf7, -0xee, 0xdd, 0x11, 0x99, 0xd8, 0xc5, 0xa1, 0x60, 0x32, 0x42, 0xb0, 0x51, -0xe2, 0x34, 0x64, 0x07, 0x85, 0x8e, 0xc1, 0x06, 0xab, 0x03, 0x36, 0xa0, -0x75, 0x5d, 0x4b, 0x56, 0x43, 0x25, 0x24, 0x24, 0x60, 0x63, 0x29, 0x28, -0x28, 0x40, 0x39, 0x9b, 0x32, 0x65, 0x0a, 0x61, 0x29, 0x0c, 0x85, 0x0a, -0x4b, 0xc4, 0x04, 0x11, 0xd7, 0x00, 0x8c, 0xcd, 0x18, 0xe7, 0x17, 0x56, -0x6a, 0x64, 0x77, 0x3c, 0x62, 0x18, 0x7c, 0x4a, 0xe9, 0xd2, 0xd5, 0x25, -0xac, 0x1b, 0x3f, 0x6c, 0xba, 0xec, 0x79, 0x90, 0x32, 0xc1, 0x57, 0xfc, -0x50, 0xd4, 0x08, 0x0c, 0x63, 0x54, 0x45, 0xa1, 0xe4, 0x07, 0xce, 0xc6, -0x43, 0xe1, 0xef, 0xe3, 0xb9, 0xf8, 0x01, 0x4b, 0x44, 0x65, 0xf3, 0x23, -0x82, 0x1c, 0x52, 0x25, 0x31, 0x9e, 0x7a, 0x98, 0xa7, 0x57, 0xe8, 0xca, -0x09, 0xec, 0x02, 0x44, 0x37, 0xf1, 0x98, 0xa4, 0x28, 0x61, 0x7a, 0x42, -0xc3, 0x36, 0xd7, 0x5f, 0x91, 0xb7, 0xc0, 0x5f, 0xd9, 0xe4, 0xf4, 0x90, -0x0d, 0xcb, 0x5b, 0x20, 0x52, 0xb2, 0x61, 0xe9, 0x41, 0xb2, 0xba, 0x9e, -0x4d, 0xe8, 0x9e, 0xbc, 0x1d, 0x7e, 0x70, 0xc3, 0xcb, 0xa3, 0xe9, 0x3f, -0x3c, 0x2f, 0x4f, 0xad, 0xff, 0xa0, 0x02, 0xc9, 0x82, 0xa8, 0x1f, 0xdc, -0xd2, 0x2c, 0x54, 0xb5, 0xb4, 0x8b, 0xe9, 0xe3, 0xdc, 0x51, 0x8d, 0x89, -0xc4, 0x28, 0xeb, 0x63, 0xfe, 0xc1, 0x80, 0xeb, 0xce, 0xfe, 0x21, 0x0f, -0x82, 0x65, 0x0c, 0x69, 0x56, 0x3d, 0x14, 0x2d, 0xd2, 0x79, 0x4d, 0x28, -0xc7, 0x7a, 0x1d, 0x2d, 0xd2, 0x59, 0xa9, 0x65, 0x4c, 0xae, 0x32, 0xea, -0x07, 0xaf, 0x00, 0x8c, 0x71, 0x77, 0x83, 0xc4, 0x81, 0xa0, 0xc5, 0x97, -0x3c, 0x69, 0xa7, 0x66, 0x59, 0x7a, 0x48, 0x8e, 0xd7, 0xfa, 0x99, 0x80, -0xc4, 0x37, 0x54, 0xf0, 0x4a, 0xf4, 0x68, 0x7e, 0x9b, 0xaf, 0xdc, 0xce, -0x69, 0x68, 0xc0, 0xe0, 0x01, 0x5e, 0x04, 0x1e, 0x80, 0x32, 0x3b, 0x3a, -0x41, 0x3e, 0xe0, 0x01, 0x87, 0x2e, 0x89, 0x3b, 0xc4, 0x38, 0x20, 0x05, -0x52, 0xb4, 0x87, 0x2f, 0xb7, 0x6f, 0xdf, 0x0e, 0x36, 0xae, 0xbf, 0xfe, -0x7a, 0x64, 0x21, 0x42, 0x59, 0xe0, 0x86, 0x1c, 0x7c, 0xe0, 0x5a, 0x04, -0x2d, 0x0e, 0x62, 0x25, 0x60, 0xb8, 0x20, 0x81, 0x3d, 0x06, 0x68, 0x71, -0x3e, 0x70, 0x22, 0xe2, 0x05, 0x91, 0x9d, 0xa2, 0x4c, 0x98, 0xa8, 0x71, -0xdc, 0xe0, 0x17, 0x63, 0x4b, 0xd6, 0xdb, 0xd0, 0xd8, 0x99, 0x64, 0x39, -0x9d, 0x13, 0x1b, 0x1b, 0x0b, 0x68, 0x89, 0x3e, 0x40, 0x67, 0xc0, 0x7c, -0x8e, 0xb7, 0x4e, 0xaf, 0x34, 0x21, 0x4a, 0x36, 0x90, 0x40, 0xaf, 0x43, -0xd5, 0x86, 0xa5, 0x8c, 0x1a, 0x35, 0xca, 0x8f, 0xf6, 0xe1, 0xe5, 0x34, -0xf9, 0xf2, 0x1e, 0x16, 0x7a, 0xc0, 0x81, 0x03, 0x7b, 0xd7, 0x3b, 0x6b, -0x06, 0x72, 0x53, 0xc2, 0xfb, 0x55, 0xfd, 0x4c, 0x4b, 0x49, 0xd5, 0x07, -0x54, 0xf0, 0x9e, 0xe0, 0x15, 0x74, 0xe7, 0x86, 0x3a, 0xd9, 0xd8, 0x2c, -0x9b, 0x94, 0xfa, 0x31, 0x57, 0xa4, 0x46, 0x4c, 0xd1, 0x74, 0xff, 0x5e, -0xb6, 0x6c, 0x19, 0xa4, 0x0c, 0x1d, 0xb3, 0x31, 0x20, 0x32, 0xd1, 0xa7, -0x9d, 0x12, 0x3d, 0xe0, 0x81, 0x8c, 0x67, 0xcc, 0xf3, 0x68, 0x45, 0xc8, -0xd3, 0x6c, 0xf0, 0xc4, 0x3e, 0xc0, 0xfb, 0x58, 0x23, 0x42, 0x47, 0x39, -0x13, 0x62, 0x82, 0xee, 0x01, 0x89, 0x1c, 0x7c, 0xbe, 0xe5, 0x96, 0x5b, -0x64, 0x6b, 0x81, 0x7a, 0x00, 0x03, 0x28, 0x82, 0xbf, 0x01, 0x27, 0xcc, -0x9d, 0x08, 0x27, 0xec, 0xc4, 0xef, 0xbf, 0xff, 0x3e, 0xbf, 0x72, 0xf2, -0xb4, 0x69, 0xd3, 0xf0, 0xf2, 0xea, 0x1d, 0xd7, 0xfd, 0x98, 0xbf, 0x4f, -0x97, 0x50, 0xac, 0x5f, 0x4f, 0x25, 0x55, 0xd7, 0xa2, 0xfc, 0x61, 0x7d, -0x62, 0x0b, 0xc0, 0x4d, 0xc1, 0xbe, 0x83, 0x41, 0x56, 0xb7, 0x3e, 0x01, -0x09, 0x62, 0x01, 0x89, 0x89, 0xd2, 0x3b, 0x86, 0x99, 0xef, 0xab, 0x3b, -0x5e, 0x7c, 0x9a, 0x55, 0xe5, 0x9e, 0x8c, 0x34, 0x48, 0x46, 0xa7, 0xee, -0x58, 0xd4, 0xe7, 0x43, 0x97, 0x0f, 0x5e, 0x34, 0x6f, 0x1c, 0x33, 0x0f, -0x02, 0x70, 0x50, 0xa6, 0x8a, 0xf8, 0xe0, 0xb9, 0x7e, 0xa6, 0x5d, 0x54, -0xa8, 0x58, 0x0f, 0x7c, 0xe3, 0xa4, 0xf3, 0x21, 0xcc, 0xe0, 0x5b, 0x25, -0xeb, 0x88, 0x12, 0x60, 0xe8, 0xc4, 0xc8, 0x33, 0x6c, 0x5d, 0x44, 0x7a, -0xda, 0x99, 0x34, 0x30, 0xc0, 0x83, 0x0b, 0x39, 0x52, 0x9a, 0x16, 0x77, -0x01, 0xfa, 0x34, 0x12, 0x0e, 0x1b, 0x3f, 0x22, 0x3e, 0xfc, 0x01, 0x91, -0x89, 0xfc, 0x66, 0xf0, 0x80, 0x90, 0x40, 0xe7, 0x38, 0x3c, 0x2c, 0xb8, -0xd2, 0x41, 0x23, 0x91, 0x0e, 0xc8, 0xd3, 0xd8, 0xd1, 0xd8, 0xe6, 0xd9, -0xec, 0xf1, 0xfb, 0x42, 0x43, 0xc8, 0x42, 0xec, 0xaf, 0xe0, 0x47, 0x56, -0x8d, 0x83, 0x89, 0x91, 0x14, 0x0a, 0xd1, 0xf3, 0x57, 0x60, 0x40, 0x97, -0x2d, 0x76, 0x5f, 0xb0, 0x84, 0x65, 0x1a, 0x15, 0x05, 0x4f, 0x0b, 0xe2, -0xbb, 0x9d, 0x49, 0x56, 0xca, 0x39, 0xa3, 0x47, 0x8f, 0x06, 0xb1, 0xac, -0x30, 0x4e, 0x25, 0x50, 0x21, 0x0e, 0x0a, 0xac, 0x52, 0x86, 0xbe, 0xa6, -0x1e, 0xe6, 0x86, 0xad, 0xa6, 0x4f, 0x9f, 0x3e, 0x94, 0xb5, 0x8d, 0x8b, -0xb3, 0xa8, 0x69, 0x5d, 0x29, 0x0f, 0xe5, 0xe1, 0xa6, 0x50, 0x02, 0xd1, -0x8d, 0x50, 0x11, 0x1b, 0x22, 0xff, 0xf3, 0xf8, 0x2d, 0x5a, 0xb4, 0x40, -0x06, 0x56, 0x97, 0x20, 0x25, 0xb2, 0x79, 0x41, 0x12, 0xbc, 0x3e, 0x0e, -0x64, 0x69, 0x82, 0x88, 0x03, 0x79, 0x0a, 0x76, 0x40, 0xe4, 0x6a, 0xb6, -0x4b, 0x88, 0x04, 0xc2, 0xf8, 0xe5, 0x2f, 0x7f, 0xe9, 0x2e, 0x2b, 0xd5, -0x96, 0x04, 0x25, 0x4c, 0x9c, 0x21, 0x20, 0x50, 0xde, 0x1c, 0x34, 0xc7, -0x1e, 0xcc, 0xae, 0xcc, 0x06, 0x86, 0x7d, 0x00, 0x49, 0x06, 0xe2, 0xe6, -0x40, 0x8c, 0x61, 0xde, 0x40, 0x85, 0x0d, 0x80, 0x07, 0x1e, 0x3c, 0x78, -0x30, 0xff, 0x63, 0x70, 0xc4, 0xd8, 0x0c, 0x45, 0x22, 0xe7, 0x20, 0xe4, -0x80, 0x54, 0x39, 0x99, 0xb5, 0x00, 0x0f, 0x12, 0x19, 0xca, 0x4e, 0x09, -0x7f, 0x80, 0xa6, 0x11, 0xac, 0x21, 0x62, 0x8c, 0x30, 0x30, 0x25, 0x90, -0xa0, 0x7c, 0xba, 0xe2, 0x56, 0xe7, 0x57, 0x26, 0x40, 0x29, 0x2b, 0xd0, -0x82, 0x08, 0x84, 0x62, 0x80, 0x7c, 0x05, 0x48, 0x78, 0x42, 0x76, 0x53, -0x58, 0x01, 0xd7, 0xc2, 0x5e, 0x94, 0x80, 0xc4, 0x38, 0x14, 0x9b, 0xd1, -0x0b, 0x93, 0x05, 0xb2, 0xa6, 0xf6, 0xaf, 0x85, 0xf5, 0xe9, 0x41, 0x31, -0xf6, 0x2f, 0x24, 0x0f, 0x9b, 0xe8, 0x03, 0x2a, 0x4d, 0xf0, 0xbc, 0x1c, -0xbc, 0x3f, 0x0f, 0xd7, 0xa2, 0xbd, 0x10, 0xc3, 0xaf, 0xea, 0x06, 0x70, -0x26, 0x92, 0x15, 0x46, 0x36, 0x56, 0x98, 0x75, 0x36, 0x68, 0xe4, 0xd8, -0x85, 0x2d, 0xcb, 0xbf, 0x5b, 0x8e, 0x8f, 0x06, 0xa8, 0x57, 0x12, 0x21, -0x64, 0x08, 0xa9, 0x83, 0x6d, 0x1b, 0x5e, 0x87, 0xef, 0x88, 0x1d, 0x0d, -0x7a, 0x45, 0x4b, 0x31, 0x5b, 0x3e, 0x50, 0x0b, 0xd9, 0xec, 0x48, 0x42, -0xe4, 0xbd, 0xa3, 0xfe, 0xf1, 0xea, 0x99, 0x06, 0xab, 0xc1, 0xc1, 0xdc, -0xa0, 0x7b, 0x0e, 0x88, 0x01, 0x55, 0x01, 0xea, 0x84, 0x00, 0x10, 0x77, -0x11, 0x10, 0x90, 0x91, 0x38, 0xa0, 0x04, 0x7e, 0x85, 0x24, 0x38, 0x01, -0x29, 0x7d, 0xc6, 0x8c, 0x19, 0x10, 0x06, 0xd2, 0x2f, 0x54, 0x41, 0x2e, -0x34, 0x12, 0x0a, 0x7b, 0x1c, 0xf5, 0x48, 0x91, 0xae, 0xf1, 0x35, 0x31, -0x0d, 0xb6, 0xe3, 0xde, 0xbd, 0x7b, 0x43, 0x63, 0x8c, 0x09, 0x75, 0x71, -0x3e, 0xe4, 0xb7, 0x70, 0xe1, 0x42, 0x79, 0x7c, 0x54, 0x4a, 0x7e, 0xa5, -0xb5, 0x39, 0x37, 0xe2, 0x76, 0xcc, 0x87, 0xff, 0xa1, 0x55, 0x28, 0x4d, -0x95, 0xc1, 0x46, 0x06, 0xb1, 0xd4, 0xdf, 0xec, 0xf2, 0x0a, 0x51, 0xd2, -0x11, 0xa2, 0x78, 0x61, 0x50, 0x24, 0x8c, 0x5e, 0xa6, 0x88, 0x70, 0x02, -0x94, 0x31, 0xfd, 0xa2, 0xc8, 0xb2, 0xd3, 0xf3, 0x0c, 0x48, 0x2f, 0xdc, -0x18, 0xc0, 0x20, 0xcc, 0xe8, 0x07, 0xdf, 0xf0, 0x3d, 0x7f, 0xe5, 0x1c, -0xce, 0x14, 0xf1, 0x06, 0x41, 0x08, 0x5e, 0x26, 0x12, 0x0e, 0x78, 0x10, -0x09, 0x87, 0x14, 0x10, 0xe4, 0x25, 0x09, 0x4d, 0x41, 0xb9, 0x14, 0x87, -0xae, 0x30, 0x2b, 0x71, 0x23, 0xb2, 0x95, 0xc2, 0x40, 0x60, 0x1d, 0x08, -0xd9, 0xf8, 0x80, 0x11, 0xc4, 0x09, 0x8e, 0x00, 0x24, 0x1c, 0xfc, 0x8a, -0xb6, 0xc0, 0xd3, 0xf2, 0x57, 0xbe, 0xd4, 0xc3, 0x04, 0x3c, 0x90, 0x17, -0xfa, 0x22, 0x5e, 0x3f, 0x14, 0x53, 0x02, 0xa1, 0xc9, 0xc5, 0x23, 0x61, -0x12, 0x57, 0x20, 0xd1, 0x1f, 0x44, 0x31, 0x10, 0x2a, 0x22, 0x3f, 0xa4, -0x2e, 0x60, 0x67, 0x23, 0x14, 0x9c, 0x64, 0x2e, 0xac, 0x2e, 0x04, 0xae, -0xa1, 0x50, 0x92, 0xf4, 0x6c, 0x39, 0xac, 0x9e, 0xa5, 0x68, 0x1f, 0x12, -0x72, 0x26, 0xb9, 0x44, 0xc0, 0x9e, 0x67, 0xc7, 0x91, 0xa7, 0xbb, 0x17, -0xd4, 0x38, 0x4c, 0x95, 0x40, 0x23, 0x0a, 0x3c, 0x4b, 0x0e, 0x96, 0xde, -0x5b, 0x1a, 0x42, 0x44, 0xcc, 0x90, 0xc5, 0x87, 0x22, 0xf5, 0x4b, 0x38, -0x13, 0x3b, 0x38, 0xee, 0x64, 0x66, 0x8e, 0x17, 0x0c, 0x83, 0x8f, 0xfa, -0x2b, 0x91, 0x04, 0xc4, 0x23, 0x63, 0x32, 0x46, 0x7f, 0x25, 0xa7, 0x12, -0x77, 0xbb, 0xa1, 0xd6, 0x1b, 0x34, 0xc7, 0x2e, 0x8e, 0x84, 0xa6, 0x87, -0xe8, 0xb9, 0x7b, 0x2e, 0xf6, 0x63, 0x11, 0x86, 0x99, 0x09, 0x3b, 0x3d, -0x2c, 0x5a, 0x91, 0x01, 0xe2, 0xae, 0x1c, 0x22, 0xe5, 0x22, 0x1a, 0x41, -0x03, 0xd0, 0x28, 0x26, 0x10, 0x14, 0x3c, 0xfe, 0x87, 0x96, 0xd8, 0x1c, -0xf9, 0x1e, 0x01, 0x18, 0x3a, 0x11, 0x53, 0x21, 0x72, 0x01, 0xdb, 0x1c, -0x07, 0x9b, 0x20, 0x7b, 0x1f, 0x3b, 0x32, 0x34, 0xc3, 0xe5, 0x0c, 0x22, -0x62, 0x33, 0xb7, 0x90, 0x31, 0x21, 0x30, 0x2a, 0x48, 0xf0, 0x27, 0x75, -0xf0, 0x2b, 0x5f, 0x0a, 0x41, 0x62, 0xc3, 0x14, 0x61, 0x0c, 0x49, 0x04, -0x79, 0x07, 0x52, 0x61, 0x85, 0xdd, 0xe5, 0x6a, 0xdb, 0xe5, 0x15, 0xa0, -0x42, 0x59, 0xa2, 0x90, 0x7d, 0x19, 0x14, 0xa6, 0xc1, 0xc6, 0xcc, 0x3e, -0x8d, 0x49, 0x87, 0x3b, 0xc1, 0xe3, 0xc0, 0x09, 0xf2, 0x0f, 0x54, 0xce, -0xbd, 0xf1, 0xd1, 0x32, 0x7b, 0x1e, 0x95, 0xff, 0x39, 0xf8, 0x86, 0xef, -0x11, 0x78, 0x30, 0x3e, 0x3e, 0xf8, 0xe0, 0x83, 0x3c, 0x1b, 0xaf, 0x9f, -0x2a, 0xd0, 0xec, 0xee, 0xd4, 0x24, 0x96, 0xdd, 0x1d, 0xbc, 0x41, 0x10, -0xe0, 0x01, 0x1d, 0x08, 0xce, 0x60, 0x99, 0x05, 0x22, 0xf0, 0x10, 0xbe, -0x01, 0x3c, 0x60, 0x1d, 0x9c, 0x8f, 0xd5, 0x19, 0x9c, 0x88, 0xac, 0x85, -0x50, 0xce, 0xf7, 0x8c, 0xa0, 0xfb, 0x7d, 0xf4, 0x57, 0x88, 0xeb, 0x00, -0xb2, 0x20, 0xd1, 0x9e, 0xe8, 0x20, 0x48, 0x3f, 0xc0, 0x22, 0x0c, 0x58, -0xd9, 0x01, 0x0c, 0x50, 0xd1, 0x93, 0xee, 0x75, 0x55, 0x18, 0xeb, 0x87, -0x6e, 0xc2, 0xc2, 0xce, 0x43, 0x96, 0x8f, 0xb2, 0xd5, 0xe0, 0x67, 0xc0, -0x4a, 0xa3, 0x77, 0xbe, 0x64, 0x2f, 0x64, 0x6d, 0xe1, 0x93, 0xd0, 0x96, -0x9a, 0x36, 0x79, 0x88, 0x18, 0x94, 0x08, 0x4a, 0x35, 0xcf, 0x56, 0x5a, -0x5a, 0xca, 0x81, 0x7e, 0xc2, 0x76, 0x03, 0x85, 0xb1, 0xe0, 0x3a, 0x32, -0xc9, 0xdf, 0x30, 0x9b, 0x59, 0x99, 0x39, 0x46, 0x4c, 0xcb, 0xf4, 0x46, -0x3d, 0x61, 0xcd, 0xdc, 0xc2, 0xdc, 0x2b, 0xce, 0xc9, 0x1c, 0x84, 0x1c, -0xd9, 0x28, 0xf1, 0x09, 0x20, 0x53, 0x08, 0x01, 0x70, 0x40, 0x12, 0x1c, -0x4c, 0x8f, 0x03, 0x4a, 0x80, 0x5a, 0xd8, 0x0a, 0xe1, 0x03, 0xec, 0x86, -0x90, 0x29, 0x32, 0x33, 0xf4, 0x80, 0x39, 0x84, 0x2d, 0x92, 0x3f, 0x41, -0x27, 0x10, 0x15, 0xdf, 0x20, 0x48, 0xb3, 0x4b, 0x72, 0x40, 0x75, 0xec, -0x74, 0x90, 0x1c, 0x57, 0x41, 0x4e, 0x0c, 0xc8, 0xf8, 0x02, 0x2a, 0x86, -0x15, 0x02, 0x03, 0x45, 0x8c, 0x0c, 0x11, 0xf2, 0x3f, 0x07, 0xbf, 0xf2, -0x25, 0x87, 0x92, 0xae, 0xd9, 0xcd, 0x71, 0x92, 0x22, 0x3b, 0x61, 0xd2, -0xb0, 0x8c, 0x1e, 0x10, 0x06, 0xe0, 0x03, 0x2a, 0xc4, 0x12, 0xc2, 0x36, -0xc6, 0x3b, 0x83, 0x10, 0x09, 0x20, 0x81, 0x8e, 0xd9, 0xda, 0x11, 0x54, -0xd8, 0xe3, 0x99, 0xae, 0x08, 0x33, 0x80, 0x1b, 0x9c, 0x50, 0x07, 0x09, -0xc9, 0x5e, 0x0e, 0x3e, 0xf3, 0x0d, 0xdf, 0xf3, 0x90, 0xb2, 0x04, 0xd8, -0x94, 0x78, 0x5a, 0xb6, 0x79, 0x54, 0x05, 0x84, 0x25, 0xb6, 0x76, 0x80, -0xab, 0xc2, 0x42, 0x61, 0x4a, 0x66, 0xbb, 0xa4, 0x32, 0x2a, 0x2b, 0xbe, -0x01, 0x36, 0x98, 0x0c, 0x0f, 0xa0, 0x0e, 0x89, 0x27, 0xe5, 0x57, 0x1e, -0x98, 0x74, 0x36, 0xf5, 0xfe, 0x10, 0x1e, 0x70, 0xe5, 0x52, 0x28, 0x09, -0x18, 0xf8, 0x54, 0x88, 0xc9, 0xa6, 0xcd, 0x9e, 0xd3, 0xcc, 0xb9, 0x94, -0x72, 0x77, 0x3b, 0x7d, 0x0b, 0xb0, 0x8d, 0xaa, 0xa9, 0xb2, 0xcb, 0xf2, -0xda, 0xe0, 0xc6, 0x3a, 0xf1, 0x79, 0xc8, 0xe2, 0xd7, 0x23, 0xff, 0x3a, -0x77, 0xee, 0x0c, 0xa1, 0xb0, 0x3d, 0xb1, 0x07, 0xeb, 0x97, 0xdb, 0x4c, -0x8b, 0x93, 0x87, 0x25, 0xee, 0x46, 0x37, 0x71, 0x5a, 0x5a, 0xc0, 0xd5, -0xe0, 0x48, 0x71, 0x64, 0x3b, 0x11, 0x4f, 0xc5, 0x46, 0xa3, 0xbe, 0x84, -0x4d, 0x31, 0x01, 0x68, 0x91, 0xbd, 0x0f, 0xca, 0x16, 0x02, 0x50, 0x07, -0xbb, 0xa1, 0x6c, 0x88, 0x50, 0x0b, 0x4f, 0x0a, 0xa1, 0xb3, 0x0b, 0x60, -0x53, 0x81, 0x52, 0x75, 0xa9, 0x18, 0x3a, 0x61, 0x11, 0x20, 0x12, 0x38, -0x3f, 0xf4, 0xc6, 0x66, 0x07, 0x79, 0x80, 0x0d, 0xe8, 0x0d, 0x4a, 0x63, -0x04, 0xf0, 0x83, 0xe9, 0x85, 0xf1, 0x01, 0x89, 0x10, 0x18, 0x52, 0x16, -0xc3, 0x72, 0x40, 0x84, 0x1c, 0x7c, 0x00, 0x72, 0x50, 0x1d, 0x07, 0x60, -0xe0, 0x33, 0x5f, 0xc2, 0x70, 0xb8, 0x97, 0x84, 0x8e, 0xbb, 0xdb, 0x79, -0x7d, 0x43, 0x85, 0x99, 0x2e, 0x21, 0x41, 0xd2, 0x2d, 0xd8, 0xad, 0x21, -0x6b, 0x66, 0x8f, 0xf4, 0xc2, 0xa4, 0x31, 0x16, 0x51, 0xee, 0x85, 0xed, -0x1f, 0x66, 0xc2, 0x24, 0xf8, 0x9f, 0xcf, 0x3c, 0x1e, 0xe0, 0x01, 0x06, -0x3c, 0x3c, 0x92, 0x0f, 0x8f, 0x07, 0xae, 0x44, 0x73, 0x90, 0x28, 0x14, -0x11, 0x93, 0x3c, 0xc4, 0xb8, 0xdb, 0xf9, 0x93, 0x0c, 0xc2, 0x80, 0x7a, -0x4b, 0x0d, 0x36, 0xda, 0xf2, 0xcb, 0x8b, 0x12, 0x4a, 0x22, 0x9d, 0xc0, -0xdc, 0xbd, 0x12, 0x2a, 0xb1, 0x99, 0xbb, 0x8b, 0x6f, 0x47, 0x91, 0x14, -0x7a, 0x27, 0x2f, 0x0f, 0x05, 0x43, 0x7d, 0x43, 0x81, 0x71, 0x0f, 0x48, -0xd6, 0x1b, 0xcf, 0x61, 0xd1, 0x67, 0x77, 0xe4, 0x72, 0x44, 0x6a, 0x75, -0x39, 0x19, 0xe1, 0xf6, 0xb1, 0xcd, 0x99, 0x3a, 0xf3, 0xc9, 0xcc, 0x34, -0x46, 0x2e, 0x13, 0xa2, 0x42, 0x35, 0x78, 0x50, 0xea, 0x4a, 0x33, 0xfc, -0xa1, 0xd1, 0x04, 0x81, 0xb7, 0xba, 0x8b, 0x06, 0x05, 0x92, 0xcd, 0x5b, -0x4c, 0x88, 0x6c, 0x7f, 0x42, 0x00, 0xea, 0x80, 0x12, 0x38, 0xc4, 0x32, -0x2e, 0xa2, 0x32, 0xbc, 0x5d, 0x36, 0x32, 0xe8, 0x01, 0x7a, 0x65, 0xab, -0x65, 0xaf, 0x14, 0x3a, 0x91, 0x8e, 0xa6, 0xc8, 0x39, 0x72, 0x40, 0x6c, -0xec, 0x9e, 0x90, 0x35, 0xa3, 0xb1, 0x11, 0x33, 0x38, 0xb8, 0xe2, 0x03, -0xbf, 0xf2, 0xc6, 0x45, 0x90, 0x86, 0xc6, 0x20, 0x42, 0x39, 0xf8, 0x15, -0x6a, 0xe4, 0x4f, 0xf2, 0x57, 0xfe, 0x04, 0xc3, 0x01, 0x5d, 0xdc, 0xce, -0x1c, 0x63, 0xa6, 0x13, 0x98, 0x0f, 0xbc, 0x42, 0xbf, 0x4c, 0xf8, 0x06, -0x13, 0xd5, 0x85, 0x19, 0x08, 0x1d, 0xc6, 0x84, 0x14, 0xc4, 0xc3, 0x08, -0xd7, 0x53, 0x07, 0xdf, 0x70, 0xf0, 0x57, 0xce, 0x61, 0x21, 0x54, 0xf6, -0x8c, 0x0a, 0x90, 0xb6, 0x43, 0xf4, 0x5e, 0xcf, 0x11, 0x36, 0xc2, 0xfa, -0x62, 0x90, 0xf6, 0x9b, 0x2c, 0x7c, 0xa2, 0x21, 0x39, 0x59, 0x27, 0x4d, -0x7d, 0x93, 0xb6, 0x59, 0x94, 0x44, 0x2f, 0x63, 0x4e, 0xdc, 0x17, 0x52, -0xb5, 0x3e, 0x88, 0x87, 0x24, 0x04, 0x6e, 0x4d, 0x07, 0x67, 0x75, 0x32, -0xec, 0x91, 0x1d, 0x9a, 0x5d, 0x56, 0x8f, 0x8e, 0xf1, 0xa9, 0xda, 0x22, -0xba, 0x87, 0x4e, 0xdf, 0x28, 0xd9, 0x6a, 0x70, 0x04, 0x3f, 0x77, 0x49, -0xed, 0x27, 0xd7, 0x94, 0xe6, 0x3f, 0x61, 0x63, 0x45, 0x76, 0x12, 0xdf, -0x0b, 0x94, 0x0d, 0x89, 0x2b, 0x1a, 0x40, 0xb8, 0xe0, 0x33, 0xff, 0x73, -0x40, 0xfd, 0xfa, 0xb6, 0x28, 0x84, 0x24, 0xd9, 0x54, 0x90, 0x07, 0xc2, -0xb0, 0xc8, 0x0e, 0xaa, 0x9e, 0x9f, 0xf2, 0xd8, 0xf0, 0x72, 0xf9, 0xab, -0x08, 0x54, 0x6c, 0xc4, 0xfc, 0xcf, 0xc1, 0x80, 0x50, 0x17, 0x63, 0x72, -0x40, 0x63, 0xea, 0xe0, 0x57, 0xa8, 0x51, 0x08, 0x52, 0xfe, 0x04, 0xcf, -0x81, 0xe2, 0x11, 0x46, 0x3c, 0x6f, 0xc1, 0x7e, 0xa2, 0x42, 0xe7, 0x1b, -0x42, 0x8b, 0xa2, 0x0d, 0x73, 0x3f, 0x1e, 0xcf, 0xdd, 0xc1, 0x5f, 0x05, -0xf4, 0xca, 0xf2, 0xe8, 0x95, 0xd0, 0x7d, 0x3a, 0x81, 0x99, 0x30, 0x38, -0xcb, 0x7a, 0xe9, 0xa5, 0x97, 0xaa, 0xd7, 0x89, 0x53, 0xd6, 0x0f, 0x42, -0xf7, 0xe9, 0x12, 0xcb, 0x8a, 0xf9, 0xf6, 0x73, 0x97, 0xf5, 0x94, 0x43, -0xb6, 0x79, 0x4c, 0x3d, 0x6a, 0xf2, 0x48, 0x26, 0x9e, 0x43, 0x30, 0xf5, -0x3c, 0x04, 0xf4, 0x19, 0x04, 0x68, 0xf6, 0x69, 0x75, 0x39, 0xa6, 0x24, -0x0f, 0xb5, 0x70, 0xcc, 0xcf, 0xa8, 0x67, 0x90, 0x13, 0x77, 0xa4, 0xbb, -0xc3, 0x31, 0x42, 0xb8, 0x5b, 0x13, 0x1d, 0xd5, 0x48, 0x71, 0x88, 0x4f, -0x18, 0xcd, 0xd9, 0xc8, 0x21, 0x5f, 0x69, 0x33, 0x67, 0x3e, 0x84, 0x12, -0x74, 0x19, 0x41, 0xb7, 0xa9, 0x28, 0x22, 0x31, 0xec, 0xe8, 0xba, 0xf0, -0xcc, 0x98, 0x58, 0x90, 0xf4, 0x91, 0x19, 0x53, 0x11, 0x98, 0x90, 0xa2, -0x3a, 0x38, 0x4d, 0x3e, 0xdb, 0x24, 0xbc, 0x40, 0x51, 0x21, 0x54, 0x2b, -0x8f, 0x04, 0xf7, 0xe0, 0x10, 0x84, 0x58, 0x1e, 0x72, 0x82, 0x32, 0x2b, -0xf9, 0x44, 0xf1, 0x76, 0x4e, 0x66, 0x70, 0x9e, 0x9c, 0x5d, 0x41, 0xdf, -0x2c, 0x2d, 0x2b, 0xcd, 0xf8, 0x44, 0xf4, 0x9e, 0x4f, 0x76, 0xd7, 0xcb, -0xdd, 0x32, 0xc7, 0xc8, 0x72, 0x28, 0x3d, 0x47, 0x0c, 0xdf, 0xa2, 0xce, -0x28, 0xdc, 0x95, 0x0f, 0x53, 0xe3, 0x50, 0xed, 0x41, 0x9d, 0x8f, 0x0e, -0x80, 0xf6, 0x89, 0x17, 0x48, 0x7d, 0x03, 0xde, 0xec, 0x3f, 0x29, 0x72, -0x60, 0xdd, 0x9c, 0x52, 0xab, 0x1a, 0x06, 0x59, 0xdd, 0xe8, 0xe4, 0xae, -0x83, 0x04, 0xf1, 0xce, 0xba, 0x19, 0x17, 0x23, 0x87, 0xc4, 0x38, 0x22, -0x45, 0xb3, 0xd3, 0x4b, 0xeb, 0x20, 0xf3, 0xa1, 0x28, 0xc1, 0xf0, 0x5a, -0x15, 0x6d, 0x28, 0x3a, 0x31, 0x9f, 0xe0, 0x8e, 0xc6, 0x64, 0x4c, 0xcb, -0x43, 0xc0, 0xe0, 0x6e, 0x4c, 0x33, 0x69, 0x05, 0x07, 0x15, 0x76, 0x48, -0xb6, 0x02, 0xce, 0x11, 0xf3, 0x14, 0xbb, 0x94, 0xbe, 0x59, 0x06, 0x25, -0xdb, 0xdb, 0x03, 0x6d, 0x61, 0xd0, 0x34, 0x9b, 0x65, 0x7c, 0xea, 0x64, -0x45, 0x5d, 0x1c, 0x35, 0x82, 0x1e, 0x34, 0x30, 0xa8, 0xb3, 0x77, 0x9a, -0x26, 0xef, 0x59, 0x5d, 0x8b, 0xf3, 0x0e, 0xcb, 0xa6, 0x6e, 0x66, 0xf0, -0xa9, 0x91, 0x85, 0xa1, 0x60, 0x14, 0x1e, 0x06, 0x35, 0x32, 0x55, 0x4b, -0xdc, 0xad, 0x80, 0xce, 0x5e, 0x30, 0x25, 0x23, 0xfe, 0x89, 0x87, 0xc1, -0x5d, 0x8f, 0xb9, 0x0a, 0x20, 0x83, 0xc0, 0x6f, 0x11, 0x6e, 0xa8, 0x60, -0x73, 0xd2, 0x9d, 0x5f, 0x3e, 0x35, 0x9a, 0xb1, 0xbf, 0xad, 0xaa, 0x33, -0x51, 0x34, 0xf5, 0x50, 0x36, 0x45, 0x46, 0x38, 0x37, 0xec, 0x8f, 0x66, -0x59, 0x22, 0x0d, 0x0b, 0xb2, 0x9d, 0x92, 0x7e, 0xc4, 0x9f, 0xea, 0x98, -0xc4, 0x3d, 0xaa, 0x7e, 0x25, 0xc2, 0xdc, 0x7e, 0xe3, 0x18, 0xc6, 0xd1, -0x63, 0xce, 0x89, 0xc2, 0xd0, 0x05, 0x39, 0x0f, 0x59, 0x03, 0xaa, 0xc3, -0x37, 0xf7, 0xc5, 0x85, 0x27, 0x85, 0x33, 0xd0, 0xb3, 0xd1, 0x95, 0xdd, -0xf9, 0xc8, 0x02, 0xa7, 0xda, 0xf2, 0x1e, 0x21, 0xac, 0x50, 0x21, 0x6e, -0x3e, 0xdc, 0x99, 0x8a, 0x32, 0xdc, 0xf5, 0xd2, 0xb6, 0x4f, 0xb2, 0x9e, -0xcf, 0xc4, 0xed, 0x65, 0x66, 0x14, 0x64, 0x84, 0xfa, 0x34, 0xbe, 0x9e, -0x41, 0xaa, 0x46, 0x73, 0xd7, 0xf8, 0xc7, 0x3c, 0x32, 0xc9, 0x89, 0xea, -0x2a, 0x3d, 0x93, 0xd3, 0xa7, 0xc6, 0x31, 0xe7, 0xb6, 0xf6, 0xd7, 0x1f, -0x04, 0x41, 0x4e, 0x4f, 0xba, 0xa4, 0x66, 0x8c, 0xe5, 0x13, 0x19, 0xfc, -0x7d, 0x84, 0xeb, 0xe3, 0x37, 0xc0, 0x48, 0x8a, 0x95, 0x09, 0x05, 0xd7, -0x9c, 0xe3, 0x56, 0xde, 0xd4, 0x1c, 0xac, 0xf1, 0xc3, 0x0d, 0x15, 0xd8, -0x28, 0xf4, 0xe6, 0x29, 0xbc, 0x6c, 0x9f, 0x08, 0xd4, 0xd7, 0x93, 0x2d, -0x09, 0xda, 0xd7, 0x84, 0x1e, 0x73, 0xe9, 0x41, 0x62, 0x2e, 0xec, 0x37, -0x31, 0xd1, 0x43, 0xf4, 0xf5, 0x5a, 0x4f, 0x3e, 0xd5, 0xef, 0xd0, 0x35, -0x7e, 0x22, 0xa9, 0x08, 0xa3, 0x50, 0x20, 0xc1, 0xf9, 0xed, 0x2e, 0x77, -0xf7, 0xaa, 0x09, 0xa5, 0x45, 0x06, 0x08, 0x7c, 0x24, 0x6a, 0x41, 0x35, -0x23, 0xc5, 0xe6, 0x21, 0xa1, 0x09, 0xc1, 0xa2, 0xd4, 0x8a, 0x1c, 0x27, -0xac, 0x50, 0xc1, 0xe6, 0x84, 0xa7, 0x5c, 0xbd, 0x4e, 0x36, 0x51, 0x0f, -0xe5, 0x86, 0x7c, 0x05, 0x80, 0xf9, 0x7c, 0xc3, 0x4e, 0x29, 0xf7, 0xa5, -0x62, 0x9a, 0xaf, 0xf9, 0x93, 0x7a, 0xa1, 0x5b, 0x19, 0xc4, 0xa7, 0xe2, -0xdb, 0x96, 0x65, 0xcc, 0x81, 0x8a, 0x7d, 0x7f, 0xa5, 0x9e, 0xe9, 0xcf, -0xdd, 0xd1, 0x28, 0xc8, 0x51, 0x51, 0xcb, 0x48, 0x90, 0x88, 0xe5, 0x5a, -0xe1, 0x17, 0xa7, 0x40, 0xa8, 0x3a, 0x8d, 0x78, 0x13, 0x62, 0x7f, 0xf0, -0xaf, 0xc1, 0x28, 0x24, 0xef, 0x5c, 0xb4, 0xdb, 0x8a, 0xa4, 0xe6, 0x60, -0xdd, 0x2b, 0xac, 0x50, 0x81, 0x52, 0x41, 0xac, 0x81, 0x7a, 0x4f, 0xf6, -0x53, 0x93, 0x31, 0xbf, 0xb0, 0x59, 0x92, 0x4b, 0x44, 0xd1, 0x37, 0xf6, -0x3f, 0xa2, 0xa1, 0x08, 0xaf, 0xa0, 0x44, 0x08, 0xb9, 0x6c, 0x1e, 0x94, -0x75, 0xa4, 0x6d, 0xb3, 0xf8, 0x84, 0xef, 0xc2, 0x57, 0xbc, 0x19, 0x92, -0x48, 0x3d, 0xbb, 0xed, 0xcc, 0x83, 0xab, 0x04, 0x51, 0x7d, 0x32, 0x74, -0xe8, 0xb3, 0x3f, 0x0d, 0xc2, 0x49, 0xd4, 0xb5, 0xf4, 0x13, 0xd3, 0xad, -0x58, 0x7c, 0x4f, 0xe9, 0x51, 0xcb, 0xa1, 0xf4, 0x56, 0x5a, 0x44, 0x4c, -0xe3, 0x95, 0xc7, 0x28, 0x4c, 0xe0, 0x06, 0x7a, 0xb6, 0x87, 0xbe, 0x41, -0xc1, 0x22, 0xdc, 0x72, 0x1d, 0x27, 0x7c, 0x50, 0xc1, 0xb6, 0xc4, 0xfe, -0x44, 0x10, 0xa5, 0x7a, 0xc1, 0xb7, 0x5c, 0xde, 0xc1, 0x26, 0x65, 0x60, -0xbd, 0x35, 0xd3, 0xb7, 0xfa, 0x86, 0x80, 0x11, 0x72, 0x09, 0x49, 0x22, -0x23, 0x82, 0x70, 0xee, 0x88, 0x26, 0xc0, 0x46, 0xf2, 0xd1, 0xcc, 0xe4, -0x48, 0x98, 0x9d, 0x1f, 0x99, 0x9f, 0x86, 0xdc, 0x34, 0xcf, 0x6e, 0x3b, -0xf3, 0x13, 0x59, 0x06, 0xc3, 0x9e, 0xd9, 0xd0, 0xd7, 0xe6, 0xb3, 0x13, -0x0f, 0xa2, 0xa7, 0x0a, 0x13, 0xaf, 0xa1, 0x47, 0x55, 0x12, 0x8c, 0xe8, -0x6e, 0x1c, 0x3d, 0xd1, 0x8f, 0x40, 0x5a, 0xa2, 0xf4, 0x88, 0xd0, 0xc6, -0xd9, 0x4c, 0x08, 0x4f, 0xe8, 0xea, 0xd9, 0x02, 0xb6, 0x30, 0x41, 0x85, -0xf8, 0xef, 0x60, 0xdc, 0x7a, 0x80, 0xfe, 0xdb, 0x47, 0x47, 0xd8, 0xa4, -0x0c, 0x38, 0x03, 0x8d, 0x49, 0xc9, 0x66, 0xd6, 0x83, 0x49, 0x3d, 0xe0, -0xc4, 0xdd, 0x9f, 0x28, 0x10, 0x68, 0xf3, 0x8e, 0xfa, 0x69, 0xaa, 0x09, -0x2f, 0xc3, 0x7a, 0x75, 0xdb, 0x99, 0xc7, 0x37, 0xa7, 0xbf, 0x93, 0xe4, -0x69, 0xbf, 0x8a, 0x8f, 0x9e, 0x24, 0x4d, 0x55, 0x66, 0x22, 0xae, 0xf5, -0xa7, 0x73, 0x87, 0x2e, 0x52, 0xf0, 0x75, 0x2d, 0x9f, 0x40, 0x6e, 0x52, -0x6e, 0x08, 0x7c, 0x22, 0xb6, 0x02, 0x7f, 0x51, 0xe8, 0x6a, 0x14, 0x61, -0x85, 0x0a, 0x3c, 0x15, 0xec, 0x4f, 0x7a, 0x61, 0x1e, 0x12, 0x0f, 0x7c, -0x95, 0xef, 0x85, 0xe0, 0xc8, 0x7c, 0x27, 0x74, 0x9c, 0xb4, 0xfa, 0x9d, -0x57, 0x15, 0x12, 0x14, 0x44, 0xa8, 0x36, 0x3d, 0x19, 0x70, 0x6f, 0x79, -0xad, 0xac, 0x43, 0x8a, 0xb0, 0x87, 0x0e, 0x1b, 0x1e, 0x26, 0xa3, 0x97, -0x8f, 0xf7, 0xea, 0xb6, 0x33, 0xa0, 0x02, 0xd6, 0x64, 0x86, 0xa8, 0xcd, -0xd6, 0x5b, 0x0c, 0x45, 0x10, 0x87, 0x5e, 0x93, 0x8e, 0xca, 0x0f, 0x7a, -0x66, 0x48, 0x8f, 0xd6, 0x6e, 0xcb, 0xd7, 0xea, 0xed, 0x51, 0x50, 0xf1, -0x25, 0x6f, 0x81, 0x38, 0x3c, 0xa2, 0x9b, 0x3c, 0x57, 0xbd, 0x2f, 0x57, -0xc9, 0x27, 0x58, 0x83, 0x87, 0x09, 0xaf, 0x40, 0xcf, 0x26, 0xb8, 0x40, -0x0f, 0xf4, 0xa0, 0x83, 0x8e, 0x1f, 0xdb, 0xb6, 0x87, 0x4b, 0xa0, 0x78, -0x6a, 0x45, 0xb2, 0x77, 0xba, 0x63, 0x14, 0xd4, 0xfd, 0xf6, 0x70, 0x39, -0xfd, 0x90, 0xdc, 0xfd, 0x55, 0x55, 0x85, 0xf2, 0xdc, 0x48, 0x8d, 0x06, -0x28, 0xe6, 0x11, 0x08, 0x7c, 0x34, 0xcf, 0xc7, 0x3e, 0xb4, 0x10, 0x32, -0xd5, 0xe5, 0x84, 0x78, 0xe8, 0xdd, 0xd3, 0xd9, 0x05, 0xc8, 0x30, 0x71, -0x37, 0x67, 0xdd, 0xf8, 0x46, 0x89, 0x2d, 0x72, 0x06, 0x09, 0xff, 0x26, -0x1a, 0x9a, 0xa8, 0x24, 0x82, 0xdc, 0x42, 0x54, 0xc9, 0x56, 0xa0, 0x0a, -0x13, 0x54, 0xa0, 0x67, 0xb3, 0x45, 0xe9, 0xc9, 0x00, 0xf6, 0x8b, 0xd8, -0xf9, 0x04, 0x1e, 0xbd, 0x86, 0x8a, 0x9e, 0x94, 0x4b, 0x71, 0x13, 0xcf, -0x25, 0x77, 0x0f, 0xae, 0x74, 0x8b, 0x19, 0xc9, 0xa7, 0xf3, 0xea, 0xb6, -0xb3, 0x6c, 0x19, 0x4c, 0x98, 0x93, 0x01, 0x15, 0x54, 0xe3, 0xb5, 0xd9, -0x14, 0x0a, 0x1b, 0x03, 0xd3, 0x56, 0x97, 0x13, 0xe2, 0xa1, 0x0f, 0x45, -0x1b, 0x1a, 0x77, 0x2b, 0x63, 0x08, 0x72, 0x21, 0xf7, 0x4d, 0xea, 0x7b, -0x63, 0x7d, 0x92, 0xbc, 0x85, 0x60, 0xed, 0xd9, 0x95, 0x35, 0x4e, 0x98, -0xa0, 0x82, 0x37, 0xa1, 0x77, 0xd5, 0xc0, 0x58, 0x69, 0x5f, 0xb0, 0xf6, -0x09, 0x15, 0x1f, 0x9f, 0x28, 0x35, 0xe4, 0xeb, 0xe9, 0xd1, 0x9e, 0xbb, -0x41, 0x53, 0x35, 0xd0, 0x83, 0xb1, 0x55, 0x48, 0xd3, 0xb3, 0xdb, 0x0e, -0xa1, 0x8e, 0x3e, 0xed, 0xe6, 0xa9, 0x52, 0x1b, 0xd7, 0x80, 0x8a, 0xcb, -0x47, 0xdb, 0x6d, 0x88, 0x8a, 0x16, 0xa4, 0x5f, 0xab, 0xab, 0x64, 0x00, -0xd5, 0x43, 0x49, 0x42, 0xbd, 0xe4, 0x3d, 0x01, 0x26, 0x88, 0x4f, 0xd2, -0x43, 0x19, 0xf1, 0x89, 0xa0, 0x54, 0x44, 0xd9, 0xca, 0xa2, 0xe6, 0x60, -0xdd, 0x37, 0x1c, 0x50, 0x01, 0xbf, 0x86, 0x6b, 0xeb, 0x4d, 0xc9, 0x48, -0x53, 0xf6, 0x89, 0xd6, 0xed, 0x9f, 0x4c, 0xbf, 0x12, 0xb3, 0xc4, 0x82, -0xd9, 0xde, 0xb3, 0x63, 0x84, 0x6d, 0xde, 0x83, 0x7c, 0x45, 0x15, 0x29, -0xaf, 0x6e, 0x3b, 0x22, 0x08, 0x2d, 0x43, 0xfd, 0xcc, 0x3e, 0x13, 0x92, -0x57, 0x6d, 0x3e, 0x0e, 0x95, 0xbb, 0xd4, 0xb3, 0xe8, 0x7c, 0x0f, 0xae, -0xe5, 0xa1, 0x3f, 0xa0, 0xde, 0x64, 0x9e, 0xcb, 0x71, 0x53, 0xe0, 0xbc, -0x23, 0x01, 0x88, 0xec, 0x05, 0x62, 0xb6, 0x25, 0xd5, 0x3e, 0x58, 0xd4, -0x59, 0x59, 0xe3, 0x84, 0x09, 0x2a, 0x10, 0x9f, 0xf4, 0x5a, 0xb4, 0xe5, -0xd7, 0x94, 0x4c, 0xcf, 0xde, 0x54, 0x24, 0xe5, 0xb5, 0xf3, 0x2a, 0x3d, -0x5a, 0xcf, 0x6e, 0x76, 0x5b, 0xc1, 0x92, 0x6a, 0xb9, 0x9e, 0xab, 0xcf, -0x93, 0x47, 0xce, 0xbd, 0xc6, 0xf6, 0xae, 0x67, 0x26, 0x77, 0xba, 0x2b, -0xe9, 0x28, 0xc5, 0x2a, 0x60, 0xd3, 0x34, 0x8c, 0x8f, 0xcf, 0x9d, 0x82, -0xe4, 0xb9, 0x30, 0x26, 0xf9, 0x8c, 0xfa, 0x85, 0x52, 0xaf, 0x09, 0x3d, -0x9b, 0x6c, 0x07, 0xde, 0x82, 0xa1, 0x92, 0x55, 0x65, 0x91, 0x75, 0x80, -0xf7, 0x0d, 0x79, 0x54, 0x48, 0x04, 0x3b, 0x7b, 0x95, 0xee, 0x5e, 0xb0, -0xef, 0xd6, 0xb5, 0xb9, 0xad, 0xca, 0x69, 0x84, 0x6d, 0x9b, 0x9b, 0xf3, -0x12, 0x1d, 0xe8, 0x39, 0x2c, 0xf7, 0xcd, 0xc3, 0xae, 0xc2, 0x02, 0xf8, -0x8f, 0xdd, 0xdd, 0x8b, 0x32, 0x98, 0x1e, 0x26, 0x8c, 0xf4, 0x8f, 0xc9, -0x98, 0x11, 0x2c, 0xdb, 0x4a, 0x91, 0x13, 0xa7, 0xd3, 0x28, 0x95, 0x0e, -0x6d, 0x3e, 0x11, 0x66, 0x6b, 0x4b, 0x54, 0x50, 0x01, 0xd6, 0xf3, 0x08, -0x7a, 0x19, 0x63, 0x22, 0xf6, 0x0d, 0x75, 0xd4, 0x43, 0xd7, 0x9f, 0xad, -0x03, 0x29, 0xe4, 0x51, 0x21, 0x29, 0x81, 0xf3, 0xe7, 0xcf, 0x57, 0xef, -0x18, 0xef, 0x92, 0x4d, 0xca, 0xf0, 0xf5, 0x34, 0x44, 0x76, 0x33, 0x25, -0x79, 0x6d, 0x32, 0x22, 0xe5, 0xf8, 0x3d, 0x94, 0x4d, 0xb8, 0x67, 0x5d, -0x1f, 0x0f, 0x33, 0xd9, 0x75, 0xd5, 0xc5, 0x56, 0xdc, 0x96, 0xf6, 0x56, -0x5c, 0x7e, 0xfa, 0x94, 0x50, 0x3f, 0x6c, 0x3e, 0x94, 0xea, 0xc3, 0xa2, -0x2e, 0x47, 0x70, 0xa2, 0xb5, 0x9f, 0xe7, 0xcb, 0x41, 0xaf, 0xee, 0xbb, -0x24, 0x93, 0x96, 0xd8, 0x75, 0xac, 0x4f, 0x1e, 0xea, 0xa8, 0x07, 0xb8, -0x6d, 0x57, 0xca, 0xe5, 0x21, 0x8f, 0x0a, 0xc9, 0xa9, 0xd0, 0xad, 0x4f, -0xd4, 0x39, 0xb7, 0x49, 0x19, 0x3e, 0x9d, 0x06, 0x19, 0xe9, 0xe9, 0x35, -0x42, 0x4c, 0xa8, 0xf5, 0x96, 0xb5, 0xe6, 0xd5, 0xc8, 0x52, 0x8e, 0x9f, -0xa0, 0x6e, 0x0f, 0xfe, 0x0a, 0x0f, 0x7f, 0x22, 0x14, 0x5c, 0x55, 0x00, -0xb1, 0x6c, 0x20, 0x86, 0xf0, 0xa6, 0xc8, 0xda, 0xa7, 0x02, 0xd2, 0x8c, -0xac, 0x37, 0x7f, 0x42, 0xbd, 0xb6, 0xd3, 0xea, 0x49, 0x77, 0xf9, 0x11, -0x54, 0x4b, 0xc9, 0x19, 0xa9, 0xc3, 0x47, 0x7a, 0xb4, 0xbb, 0xea, 0x94, -0x95, 0x42, 0xd6, 0x01, 0xde, 0x34, 0xb4, 0x51, 0x81, 0xf8, 0x84, 0x4d, -0x96, 0x2a, 0x29, 0x8a, 0x32, 0xf0, 0x49, 0x05, 0xab, 0xab, 0x95, 0x8e, -0x19, 0x2c, 0x5a, 0x7a, 0x19, 0x0b, 0x75, 0x3b, 0x0a, 0x80, 0x7b, 0x86, -0x16, 0x75, 0x71, 0x38, 0xb9, 0x7e, 0x9e, 0xdb, 0xac, 0x1d, 0xcf, 0x97, -0xeb, 0xb5, 0x05, 0x2c, 0x65, 0x1b, 0x44, 0x26, 0x35, 0x19, 0xcb, 0x0a, -0x37, 0x1e, 0xc6, 0xc7, 0x13, 0x07, 0x62, 0xf1, 0x51, 0xc2, 0x22, 0xec, -0x14, 0x7c, 0xc0, 0x0d, 0xa2, 0xf3, 0x25, 0x92, 0x51, 0xc5, 0x4d, 0x41, -0xb5, 0x0e, 0xea, 0x0f, 0x84, 0x87, 0x9e, 0x1d, 0xf2, 0xbe, 0x6d, 0xc9, -0xe2, 0x25, 0x10, 0x8d, 0xba, 0xb7, 0xea, 0x6d, 0xb9, 0x0b, 0xf0, 0x34, -0x13, 0x07, 0x89, 0x41, 0x52, 0x48, 0xdc, 0xce, 0x8f, 0x1e, 0x1c, 0xaa, -0x2b, 0x30, 0x5e, 0xb3, 0xa2, 0xb1, 0xfa, 0x73, 0x3e, 0x31, 0x54, 0x3e, -0xf1, 0x25, 0x39, 0x99, 0xa4, 0x50, 0x3d, 0xaa, 0xc2, 0xd2, 0xf8, 0x4b, -0x5d, 0x6e, 0x35, 0x1f, 0x0f, 0xaa, 0x8b, 0x1f, 0x77, 0x37, 0x5c, 0x42, -0x82, 0x38, 0x81, 0x24, 0xea, 0x5e, 0x54, 0x43, 0xa3, 0xb6, 0x1f, 0x8c, -0x82, 0xaa, 0x33, 0x94, 0xd8, 0xa0, 0xbc, 0x40, 0xe8, 0x66, 0x53, 0x98, -0x19, 0x4b, 0x08, 0xf3, 0x0a, 0x89, 0x7d, 0x62, 0x97, 0xa2, 0xa6, 0xb7, -0x7a, 0x5b, 0xd8, 0x64, 0x6c, 0x52, 0x80, 0x1e, 0x28, 0xea, 0xce, 0x1a, -0xe3, 0xf9, 0x7b, 0xc2, 0x04, 0x3d, 0xdf, 0x0b, 0x73, 0x10, 0x01, 0xb0, -0x0c, 0xe2, 0x9f, 0xaa, 0xa3, 0xd7, 0x05, 0x64, 0x10, 0xcb, 0x68, 0x5c, -0x55, 0x48, 0x81, 0x22, 0x4e, 0x36, 0x9d, 0x77, 0x36, 0xd7, 0x47, 0x3f, -0x0d, 0xb7, 0x9d, 0x3c, 0x88, 0x3a, 0x28, 0x92, 0x49, 0xe0, 0x13, 0x55, -0x0b, 0x60, 0x14, 0xb8, 0x29, 0x28, 0xd8, 0x11, 0xea, 0xb1, 0x4f, 0x61, -0xa2, 0x6d, 0x8b, 0x46, 0x41, 0xc1, 0x46, 0xf5, 0xaa, 0x90, 0x07, 0x6c, -0xc6, 0x3e, 0x19, 0xb4, 0x46, 0x35, 0x02, 0x91, 0x76, 0x84, 0x33, 0x51, -0xcf, 0x8f, 0x0e, 0x7d, 0xaa, 0x9f, 0x03, 0xa5, 0xfe, 0x48, 0x81, 0x30, -0xf4, 0xdf, 0x40, 0x28, 0xf7, 0xda, 0xf8, 0x19, 0xab, 0xbf, 0x8c, 0xec, -0xc1, 0x4f, 0xec, 0x8e, 0x46, 0x69, 0x5c, 0x62, 0xc0, 0xe4, 0x2b, 0x07, -0x86, 0x9a, 0x4f, 0x56, 0x91, 0x85, 0xd8, 0x64, 0xfd, 0x20, 0x77, 0x3b, -0x97, 0xd0, 0x88, 0x07, 0x7f, 0xb9, 0x3e, 0x99, 0xae, 0x5d, 0xbb, 0x62, -0x90, 0xa5, 0x00, 0x26, 0xd9, 0x14, 0x94, 0x7b, 0xc2, 0x4d, 0x21, 0x15, -0xa3, 0x43, 0x3d, 0xd0, 0x23, 0x1c, 0x22, 0x3e, 0x24, 0x1f, 0x55, 0x4f, -0x2f, 0xf6, 0x6a, 0x0e, 0x52, 0x44, 0xa0, 0x5a, 0xa6, 0xf3, 0xb2, 0x71, -0x66, 0x51, 0xfd, 0x8e, 0x6f, 0xa8, 0xf3, 0xe7, 0xa1, 0x7d, 0x3a, 0x1b, -0x3f, 0xd6, 0x4c, 0x1a, 0x3b, 0x49, 0x30, 0x9f, 0x9d, 0x06, 0x68, 0x84, -0x9d, 0x0b, 0x31, 0x79, 0xed, 0xe9, 0x68, 0xa0, 0x4e, 0xb0, 0x8d, 0xb8, -0x6f, 0x40, 0x85, 0x39, 0x09, 0x9b, 0xd3, 0x94, 0x45, 0x88, 0xa2, 0xb7, -0x76, 0x48, 0xdc, 0xd7, 0x73, 0xf0, 0x7f, 0x1b, 0x22, 0xd5, 0x49, 0xe9, -0xa6, 0x59, 0x99, 0xf8, 0xb3, 0x69, 0x17, 0x04, 0xa3, 0xc0, 0x85, 0x8a, -0x3f, 0x3b, 0x6c, 0x20, 0x11, 0xda, 0x91, 0xe4, 0x38, 0x8c, 0xa8, 0x94, -0xa8, 0x48, 0x07, 0xc3, 0xa2, 0xfd, 0xd2, 0x91, 0xd8, 0xfe, 0x91, 0xa0, -0x28, 0xef, 0x45, 0x5c, 0x93, 0x4f, 0x84, 0x82, 0xda, 0x4d, 0xc1, 0x0b, -0x8c, 0x51, 0xee, 0x2a, 0xc1, 0xa8, 0xd1, 0x00, 0x58, 0x56, 0xc6, 0xc5, -0x9e, 0x3d, 0x40, 0xce, 0xa7, 0xbb, 0xe0, 0x85, 0x34, 0x40, 0x02, 0x01, -0xc6, 0x3c, 0x42, 0x99, 0xa0, 0xac, 0xb8, 0x98, 0xe0, 0xf6, 0x3e, 0xa7, -0x0a, 0xad, 0x59, 0xc8, 0xa4, 0x0c, 0x33, 0x6d, 0x0a, 0x31, 0x3d, 0xe1, -0xb9, 0xc3, 0xf4, 0x44, 0x41, 0x3e, 0x89, 0x1b, 0xc7, 0x3e, 0x1e, 0xa0, -0xd9, 0xa7, 0x4a, 0x5d, 0x1e, 0xaa, 0x7a, 0x85, 0x58, 0x9f, 0x28, 0xc5, -0xae, 0xa8, 0x87, 0xaa, 0xda, 0xf6, 0x29, 0xcf, 0xa6, 0x03, 0xd8, 0x3c, -0x20, 0x7e, 0x5f, 0xee, 0x88, 0x27, 0xcb, 0xeb, 0xbd, 0xf4, 0x4c, 0x26, -0x0f, 0x01, 0x14, 0xe6, 0x71, 0x00, 0x9e, 0xde, 0x5b, 0x55, 0x1e, 0xd0, -0x32, 0x9c, 0x96, 0xda, 0x84, 0x3a, 0x78, 0x1e, 0xd9, 0x12, 0x9c, 0x24, -0x75, 0x58, 0x10, 0xfb, 0x85, 0x41, 0x91, 0xe0, 0x46, 0xd4, 0xc7, 0x97, -0xce, 0x6c, 0x04, 0x8d, 0xab, 0x1e, 0x34, 0x30, 0x8a, 0xf0, 0xf0, 0xdc, -0x85, 0xbc, 0x5e, 0x21, 0xd6, 0x27, 0x42, 0x0c, 0x74, 0x3d, 0xdb, 0xd7, -0x1a, 0x02, 0x5e, 0xc9, 0xda, 0x7c, 0x02, 0xdb, 0xa7, 0xd4, 0xb9, 0x79, -0xdf, 0x7d, 0x58, 0xb8, 0xba, 0x4a, 0xdf, 0x68, 0xd1, 0x56, 0xed, 0xdf, -0x4e, 0x8f, 0xee, 0x56, 0x44, 0x4f, 0x40, 0x9e, 0x79, 0x04, 0x43, 0x25, -0x4f, 0x62, 0xa5, 0x6c, 0xaa, 0x55, 0x1e, 0x26, 0xf3, 0xec, 0xae, 0x41, -0x96, 0x95, 0x78, 0xa8, 0x1e, 0x42, 0xff, 0x07, 0x20, 0x41, 0x72, 0x36, -0x8d, 0x36, 0x29, 0xba, 0x45, 0xbd, 0x57, 0x91, 0x9d, 0xaa, 0xd4, 0x36, -0x1f, 0x94, 0xc9, 0x84, 0x24, 0xaf, 0x10, 0x3d, 0x9b, 0x76, 0x61, 0x8a, -0x68, 0x70, 0x08, 0x04, 0xab, 0xf9, 0xb7, 0x07, 0x8a, 0x59, 0x39, 0xc5, -0x55, 0x16, 0xdf, 0x4e, 0xe8, 0x21, 0x3e, 0x13, 0xbd, 0xc8, 0x80, 0x1d, -0x6f, 0x80, 0xdc, 0x97, 0x24, 0x0a, 0xcb, 0x66, 0x93, 0x84, 0x42, 0x99, -0x27, 0xb6, 0x69, 0x7e, 0x7b, 0x83, 0xa0, 0x65, 0x3f, 0x29, 0xd7, 0x30, -0x1a, 0xab, 0x47, 0xa2, 0x95, 0x5e, 0xaf, 0x4d, 0x8d, 0x4c, 0xa1, 0x4e, -0x8a, 0xef, 0xa3, 0x4b, 0x20, 0x38, 0xd1, 0x53, 0x02, 0x07, 0x05, 0xfd, -0x15, 0x80, 0x04, 0x99, 0x8f, 0xee, 0x7a, 0x05, 0x05, 0x85, 0x34, 0x2b, -0x71, 0x90, 0x90, 0x44, 0x05, 0x1a, 0x05, 0x9e, 0x54, 0x3d, 0x1c, 0x10, -0xfa, 0xb0, 0xbf, 0x19, 0xfb, 0x77, 0x26, 0xad, 0x93, 0x25, 0x08, 0x8a, -0xb8, 0x26, 0xaf, 0x23, 0xe0, 0x5f, 0x57, 0x54, 0x05, 0x95, 0x7b, 0x3d, -0x5f, 0x9d, 0x80, 0x03, 0xdb, 0x40, 0xe8, 0xf2, 0xab, 0x65, 0xca, 0xd1, -0x9c, 0x1f, 0xb4, 0x79, 0xfd, 0x12, 0x6a, 0x19, 0xda, 0x07, 0x21, 0xf7, -0xc5, 0xcb, 0x41, 0x4c, 0x8a, 0x5e, 0x4b, 0x53, 0x1f, 0x8d, 0x84, 0x6c, -0x7a, 0x59, 0x21, 0x38, 0x51, 0x26, 0x02, 0x48, 0x50, 0xd8, 0x86, 0xd6, -0x2a, 0x84, 0xc7, 0x12, 0x31, 0x0e, 0x24, 0xc2, 0x4f, 0x76, 0x0a, 0x61, -0x2f, 0x1e, 0x50, 0xa6, 0x51, 0x83, 0x7a, 0x79, 0x18, 0x49, 0x7c, 0x55, -0x9a, 0xed, 0x93, 0xa9, 0x3a, 0x53, 0xa2, 0x65, 0xb1, 0xd2, 0xda, 0xb9, -0x56, 0xcf, 0xf4, 0x27, 0x60, 0xd6, 0xce, 0x25, 0x9c, 0x43, 0xbe, 0x9e, -0x65, 0x0f, 0x72, 0xca, 0x1d, 0x58, 0x8e, 0x40, 0xdd, 0x4e, 0x4b, 0x08, -0x11, 0x9a, 0x4e, 0xb1, 0x05, 0xc8, 0xdd, 0x52, 0x7d, 0x82, 0x2d, 0x20, -0x01, 0x52, 0x3f, 0x13, 0x50, 0xc1, 0x63, 0x2d, 0x47, 0xe0, 0x4b, 0x12, -0x27, 0x08, 0x73, 0x42, 0xb7, 0x96, 0x96, 0x85, 0x94, 0x3f, 0xa3, 0x65, -0x04, 0xd9, 0x76, 0x54, 0xc0, 0x47, 0xc3, 0x56, 0x9d, 0xa8, 0x2a, 0x71, -0x47, 0x2f, 0xbf, 0x5b, 0x87, 0x1e, 0xaf, 0x40, 0xa9, 0xc0, 0x3a, 0x8e, -0xc9, 0x5c, 0xbd, 0x4e, 0x0c, 0xa0, 0x36, 0xc9, 0xce, 0xef, 0xd3, 0x54, -0x1a, 0xc3, 0x4b, 0xfb, 0x2c, 0x9c, 0x06, 0x86, 0x61, 0x09, 0xa1, 0xd5, -0xad, 0x99, 0xf6, 0x0b, 0xf0, 0x00, 0x39, 0xf5, 0x50, 0xe9, 0xe9, 0x2e, -0xfb, 0xaf, 0x1c, 0x96, 0x11, 0x50, 0xdc, 0xb4, 0x76, 0x59, 0xcf, 0x9a, -0x99, 0xbe, 0x91, 0xe2, 0xf0, 0xb4, 0xa0, 0xa9, 0xab, 0xde, 0xe7, 0x05, -0x75, 0xd3, 0xf5, 0xf0, 0x27, 0x4b, 0x48, 0x50, 0xfc, 0x86, 0xac, 0x09, -0x32, 0xec, 0xa8, 0x05, 0x88, 0x98, 0x4a, 0xe5, 0x7d, 0x1a, 0x00, 0x60, -0xee, 0xa3, 0xa0, 0x32, 0xf5, 0x3b, 0xa4, 0xa6, 0x72, 0xb8, 0x72, 0x89, -0x90, 0xe4, 0x15, 0x12, 0x37, 0x0e, 0x1f, 0xd7, 0x5f, 0x27, 0x55, 0x9b, -0xfc, 0x26, 0x77, 0x9b, 0x17, 0x4a, 0x69, 0x3d, 0xea, 0x80, 0xd8, 0x39, -0xdf, 0x50, 0xc6, 0x18, 0x26, 0x63, 0xe7, 0x2a, 0x43, 0xde, 0x82, 0x5e, -0x05, 0x10, 0x89, 0xdf, 0x3c, 0x02, 0xb9, 0x72, 0xfa, 0x22, 0x50, 0xf2, -0xc7, 0xdc, 0xbe, 0xd1, 0x1d, 0x1f, 0x70, 0xf7, 0x3d, 0x7d, 0xc3, 0x68, -0xf6, 0x09, 0x7f, 0x90, 0xfe, 0x7a, 0xc4, 0xc3, 0x52, 0xe2, 0x89, 0xba, -0xb1, 0x34, 0xa3, 0x20, 0xac, 0x83, 0x9c, 0x6c, 0x32, 0x28, 0x50, 0xaf, -0xc3, 0xc9, 0x8d, 0x6d, 0xc9, 0x70, 0x42, 0x8c, 0x57, 0x48, 0x94, 0x07, -0x3b, 0x99, 0x7a, 0xaf, 0x34, 0x0a, 0xb2, 0x43, 0x73, 0x81, 0x9c, 0xa3, -0x6a, 0xb0, 0xd2, 0x42, 0xc5, 0xce, 0x38, 0xd8, 0x88, 0x75, 0xb2, 0xb3, -0xd3, 0x40, 0x03, 0x51, 0x47, 0xcf, 0x8c, 0xd3, 0x2b, 0x93, 0x13, 0xca, -0x61, 0x99, 0x2c, 0xaa, 0x9b, 0x65, 0x33, 0x32, 0x32, 0x48, 0x45, 0x9c, -0x3b, 0x77, 0x6e, 0xeb, 0xd6, 0xad, 0x7d, 0x45, 0x02, 0xe7, 0xd7, 0xa9, -0x53, 0xa7, 0x47, 0x8f, 0x1e, 0xb3, 0x67, 0xcf, 0xa6, 0x01, 0x29, 0xc5, -0xce, 0x10, 0x99, 0xe0, 0x0f, 0x88, 0x4c, 0xe0, 0x81, 0x3e, 0x5a, 0x34, -0x13, 0xc2, 0x55, 0xe7, 0xb5, 0x6b, 0x56, 0xf9, 0xc9, 0x33, 0x15, 0x3f, -0x72, 0x28, 0xa1, 0x02, 0x48, 0xa0, 0x67, 0xf3, 0x9e, 0xf4, 0x17, 0x8f, -0x25, 0xd1, 0x0e, 0xa5, 0xfa, 0x7d, 0x0e, 0xf4, 0x4a, 0x91, 0x4c, 0xee, -0x48, 0x03, 0x38, 0x3b, 0x83, 0xa0, 0xe1, 0xe8, 0x7d, 0xe5, 0xb8, 0x90, -0x9e, 0xab, 0xf0, 0x01, 0x9c, 0xc4, 0xf8, 0x3a, 0x08, 0x6b, 0xe5, 0x7f, -0x3a, 0xa4, 0x3c, 0xb6, 0x6d, 0x00, 0x29, 0xe0, 0x2a, 0x72, 0xc9, 0x50, -0xc5, 0x59, 0x6f, 0x38, 0xef, 0x4e, 0x00, 0xd3, 0xdd, 0xf3, 0xd4, 0x78, -0x65, 0x83, 0xc7, 0x4c, 0x44, 0xe7, 0x72, 0x28, 0xbb, 0xa8, 0xa8, 0x88, -0x62, 0xbb, 0x1e, 0xba, 0x6e, 0x93, 0xa2, 0x8d, 0x98, 0x44, 0x58, 0x00, -0x9d, 0x7f, 0x69, 0x46, 0x4c, 0x4b, 0x5f, 0x1a, 0xfb, 0xc2, 0x1f, 0xa8, -0x74, 0x26, 0x5d, 0xcf, 0xcf, 0x9c, 0x39, 0x43, 0x75, 0x02, 0x5c, 0xd7, -0x84, 0x88, 0x63, 0x01, 0x97, 0xfe, 0x2c, 0x9e, 0xfb, 0x15, 0x56, 0x3c, -0xed, 0x96, 0xdf, 0x1d, 0x43, 0x06, 0x15, 0x22, 0x3b, 0x31, 0x5d, 0xac, -0x84, 0x0a, 0x15, 0x14, 0x2c, 0xb2, 0xa4, 0x54, 0xb2, 0xa8, 0x51, 0x28, -0xd9, 0xda, 0x71, 0x12, 0xef, 0x59, 0xda, 0x79, 0xdd, 0x9c, 0x76, 0x84, -0x64, 0x23, 0x9d, 0xab, 0xd0, 0xa6, 0xf9, 0xa3, 0x0a, 0xe8, 0x23, 0x7c, -0xd3, 0x65, 0xed, 0x88, 0xa6, 0xc6, 0xe8, 0x89, 0x59, 0xc9, 0x5d, 0xe2, -0xb5, 0x4a, 0xf9, 0xd7, 0x7d, 0x64, 0x94, 0x51, 0x22, 0x0c, 0x91, 0x6b, -0x19, 0x76, 0xda, 0x80, 0xd2, 0x9e, 0xa8, 0xf8, 0x28, 0x28, 0xcb, 0x69, -0x7f, 0xb7, 0x06, 0x3f, 0x24, 0xe2, 0x51, 0xfd, 0x52, 0x6f, 0xab, 0x97, -0x9f, 0x9f, 0xaf, 0xf7, 0x08, 0x27, 0xa5, 0x81, 0x48, 0x24, 0x22, 0x7c, -0x49, 0x19, 0x3f, 0xbc, 0xaa, 0x3b, 0x91, 0xb3, 0x4c, 0x1b, 0x1b, 0x31, -0x71, 0xb8, 0xea, 0x46, 0xb4, 0xea, 0x42, 0x01, 0x50, 0x9d, 0x9d, 0x21, -0x6e, 0x7e, 0x05, 0x21, 0x70, 0x0f, 0x02, 0x8a, 0x29, 0x07, 0x28, 0xbd, -0xcf, 0x09, 0xe9, 0xa3, 0x4d, 0x30, 0x19, 0x5a, 0x78, 0x1e, 0xa4, 0xd7, -0xf5, 0x9a, 0x35, 0x6b, 0xd6, 0xad, 0x5b, 0x87, 0x17, 0x82, 0x6e, 0xbc, -0xf0, 0x07, 0xf0, 0x40, 0xf3, 0x2e, 0x3c, 0x74, 0xb4, 0x11, 0xa3, 0x60, -0x07, 0xfd, 0xbb, 0x08, 0xfb, 0xf3, 0xd0, 0x6b, 0xb4, 0xfc, 0xe8, 0xb2, -0x72, 0x47, 0x0e, 0x25, 0x54, 0x20, 0x3b, 0xd1, 0x01, 0x4d, 0xa7, 0x39, -0xfc, 0xc7, 0x58, 0x54, 0x3e, 0x3a, 0x31, 0x9a, 0x44, 0xcd, 0x0d, 0x73, -0xdb, 0x43, 0xf4, 0x14, 0xc2, 0xd0, 0x1b, 0xf5, 0xda, 0x27, 0x50, 0xce, -0x24, 0x2e, 0x90, 0xa0, 0x40, 0x62, 0x96, 0x48, 0x8a, 0x90, 0x5d, 0x1c, -0xb7, 0x83, 0x94, 0xa5, 0xe9, 0xd4, 0x2c, 0x8b, 0x30, 0x24, 0xec, 0xad, -0xc0, 0x09, 0x9b, 0x92, 0x4f, 0xc3, 0xfa, 0x7a, 0x32, 0x65, 0x5e, 0x6d, -0x76, 0x0a, 0x57, 0x23, 0xb3, 0xe5, 0x93, 0xea, 0x40, 0x60, 0x92, 0x1c, -0x08, 0x3f, 0xb8, 0x9f, 0xd1, 0x0a, 0x68, 0x32, 0x8d, 0x7a, 0x80, 0x44, -0x04, 0xe9, 0x83, 0x13, 0xfe, 0xe7, 0xa0, 0x47, 0xb5, 0xf4, 0x9f, 0x86, -0x2d, 0x10, 0xb8, 0x41, 0xd1, 0x1a, 0xfa, 0xb0, 0xd0, 0xee, 0x99, 0x08, -0x0e, 0xf8, 0x30, 0xa5, 0x3a, 0xc0, 0x03, 0x22, 0x13, 0xa5, 0xf6, 0x3d, -0x77, 0x79, 0xae, 0x5c, 0xc2, 0x2d, 0xd7, 0xbb, 0x87, 0x0c, 0x2a, 0xcc, -0x7d, 0x8c, 0x08, 0x7c, 0x42, 0xb6, 0x31, 0x27, 0x52, 0xfb, 0x4a, 0x85, -0x96, 0xe7, 0x93, 0x4b, 0x40, 0x20, 0xf7, 0x8c, 0x21, 0x8d, 0xe5, 0xaf, -0xec, 0xe5, 0x96, 0x36, 0xd3, 0xa0, 0xdc, 0x4b, 0x1f, 0x04, 0xa9, 0x86, -0x5d, 0x5c, 0xef, 0x33, 0xe4, 0xf5, 0x16, 0x28, 0x15, 0x6c, 0xf6, 0xec, -0xf1, 0x04, 0x75, 0xe3, 0x5f, 0xc3, 0x78, 0x0a, 0x71, 0x43, 0xe2, 0xb8, -0xdb, 0xe8, 0x6c, 0x2d, 0xad, 0xdd, 0xe1, 0x03, 0x60, 0x80, 0x7e, 0x37, -0x1c, 0x38, 0xa7, 0xf9, 0x52, 0x9a, 0x5e, 0xa3, 0x39, 0x10, 0xf7, 0xca, -0x55, 0x20, 0x81, 0xe6, 0x8e, 0xd2, 0xdb, 0x56, 0x9a, 0x9a, 0xe2, 0x27, -0x95, 0x00, 0xa7, 0x70, 0x0a, 0xfb, 0xb3, 0x89, 0xa5, 0x50, 0x42, 0x05, -0xd6, 0x0f, 0x64, 0x5c, 0xdd, 0x38, 0xe3, 0x95, 0x62, 0x2a, 0xeb, 0x04, -0x64, 0xfa, 0xfe, 0xfd, 0xfb, 0x53, 0x77, 0x0c, 0x92, 0x65, 0x0e, 0xd4, -0x6f, 0xc5, 0xe7, 0x48, 0x68, 0x5d, 0x9b, 0x36, 0x6d, 0xe8, 0xff, 0x4b, -0x83, 0x08, 0x0a, 0x57, 0x26, 0x26, 0x5e, 0x8c, 0x1d, 0x54, 0x93, 0xa4, -0x3e, 0x3e, 0x52, 0x0d, 0xf2, 0x0f, 0xb4, 0x4b, 0x68, 0xaa, 0x9d, 0xc9, -0x33, 0x3e, 0x5a, 0x32, 0xe7, 0x23, 0xf6, 0x40, 0xd9, 0xd2, 0xbe, 0x1a, -0x65, 0x80, 0x9e, 0xce, 0x02, 0x0f, 0xd4, 0x03, 0xfc, 0x0c, 0x34, 0xaa, -0xa3, 0xe0, 0x83, 0x1c, 0x00, 0x86, 0x2f, 0xa5, 0xe3, 0x35, 0x3d, 0xad, -0x31, 0x2e, 0x71, 0x09, 0xf6, 0x25, 0x0a, 0x9c, 0x11, 0xc1, 0xf1, 0xf5, -0xd7, 0x5f, 0x0b, 0x1e, 0x82, 0xd5, 0xee, 0xd9, 0x26, 0x21, 0x56, 0xa9, -0xd3, 0x42, 0x06, 0x15, 0xbc, 0x27, 0xcc, 0xe4, 0x70, 0x76, 0xbd, 0x99, -0xb4, 0x07, 0xba, 0xc1, 0x4c, 0x59, 0xa3, 0x46, 0x0d, 0xac, 0x2b, 0x88, -0xe9, 0x50, 0x58, 0x87, 0x0e, 0x1d, 0xba, 0x74, 0xe9, 0xd2, 0xbd, 0x7b, -0x77, 0x8c, 0x2d, 0x1c, 0xb8, 0x3b, 0x90, 0xc5, 0xf9, 0x1e, 0x09, 0x1e, -0x83, 0x8f, 0xe7, 0x5e, 0xeb, 0x96, 0x77, 0x81, 0x1c, 0xd1, 0x71, 0x09, -0x98, 0x63, 0x34, 0xb4, 0x5b, 0x9a, 0x5f, 0xf5, 0xeb, 0xd7, 0x8f, 0xcf, -0x0c, 0x4b, 0xc8, 0x10, 0x61, 0x8b, 0x0b, 0x17, 0x2e, 0x44, 0xf1, 0xc5, -0x31, 0x4c, 0x0b, 0x6d, 0x3e, 0xc8, 0xc1, 0x67, 0xf5, 0x0d, 0x6a, 0x2e, -0x45, 0x8b, 0x11, 0xfa, 0x99, 0x0c, 0xd9, 0x9e, 0xf0, 0x07, 0xb8, 0x04, -0xd2, 0x0e, 0x5b, 0xfb, 0x5d, 0x77, 0xdd, 0xc5, 0xff, 0x83, 0x06, 0x0d, -0xa2, 0xd3, 0x1c, 0x59, 0x6f, 0x6c, 0x04, 0x39, 0x39, 0x39, 0x3c, 0x0b, -0xd0, 0xa2, 0xac, 0x86, 0xb4, 0xe7, 0xe2, 0x71, 0xd0, 0x16, 0x68, 0xf9, -0x05, 0x8a, 0xd8, 0xfb, 0xe9, 0xc1, 0x2e, 0x0d, 0xaa, 0x11, 0x7b, 0x88, -0xc5, 0xc0, 0x64, 0x04, 0xa1, 0x4b, 0x77, 0x77, 0xfc, 0x6e, 0x78, 0xa3, -0x69, 0x3e, 0x2d, 0x07, 0xbf, 0xf2, 0x25, 0x7f, 0x62, 0x8b, 0x81, 0x39, -0x70, 0x26, 0x3d, 0x7c, 0x51, 0x1e, 0xc4, 0x31, 0x17, 0x66, 0xd1, 0xaf, -0xfe, 0x81, 0xcd, 0xc0, 0x1e, 0x91, 0x30, 0x5d, 0x14, 0xc2, 0x3f, 0x3e, -0xf9, 0x37, 0x62, 0x39, 0x5d, 0xc5, 0xd6, 0xc5, 0x6b, 0xe3, 0x5d, 0xb2, -0xc3, 0x19, 0xea, 0x66, 0x63, 0x51, 0x81, 0xb2, 0xd9, 0x89, 0x29, 0x78, -0x4a, 0x93, 0x1e, 0xf6, 0x4e, 0x88, 0x0f, 0x9b, 0x0c, 0x44, 0x86, 0x1f, -0x8a, 0x83, 0x0d, 0x98, 0x83, 0xb0, 0x05, 0x0e, 0x74, 0x50, 0x39, 0xe4, -0x57, 0xbe, 0xc7, 0xfc, 0xc2, 0x39, 0x38, 0xad, 0xd0, 0x44, 0x7b, 0xf7, -0xee, 0x0d, 0x4e, 0xf4, 0x2a, 0x7a, 0x3a, 0x24, 0x40, 0x02, 0x9b, 0x3d, -0x74, 0x4c, 0xa7, 0x50, 0x51, 0x58, 0xb9, 0x56, 0x46, 0x56, 0xc3, 0x62, -0x08, 0xe2, 0xc0, 0x9e, 0xb3, 0x7e, 0xfd, 0x7a, 0xd1, 0x62, 0x49, 0x45, -0x20, 0x82, 0x48, 0x0e, 0x3e, 0xcb, 0x37, 0x48, 0xf6, 0x50, 0x33, 0xe7, -0x20, 0xee, 0x93, 0xea, 0xc9, 0xf9, 0xa2, 0x2e, 0x1f, 0x3a, 0x74, 0x08, -0xc5, 0x80, 0xbd, 0x9c, 0xff, 0x11, 0xfa, 0x39, 0x19, 0x85, 0x98, 0xc1, -0xb9, 0x91, 0x1c, 0xea, 0x59, 0xf8, 0x52, 0x14, 0x65, 0x89, 0x4d, 0x62, -0xd7, 0x57, 0xfd, 0xa4, 0xd9, 0xef, 0xa5, 0xa9, 0x3b, 0xe4, 0x0e, 0x48, -0x10, 0x8a, 0x38, 0x80, 0x8a, 0x1c, 0xd2, 0xf2, 0x9c, 0x3f, 0x11, 0xb5, -0x81, 0xb0, 0x24, 0x78, 0x10, 0xfb, 0x92, 0xb4, 0x30, 0x2d, 0xa7, 0x37, -0x18, 0xba, 0xc3, 0x56, 0x75, 0x54, 0x60, 0x15, 0x41, 0x30, 0x40, 0x1a, -0x86, 0xb0, 0xa8, 0xb5, 0x3c, 0x7e, 0xfc, 0x78, 0x9d, 0x40, 0x21, 0x14, -0x28, 0x0c, 0xf2, 0x62, 0xc7, 0x85, 0xe6, 0x14, 0x15, 0xa2, 0x59, 0x42, -0x70, 0xb4, 0xf7, 0x2c, 0x29, 0x29, 0x41, 0xbc, 0x96, 0x83, 0xcf, 0x7c, -0xa3, 0xec, 0x36, 0x9c, 0x8c, 0x1a, 0x0a, 0x9d, 0x41, 0x85, 0x50, 0x1e, -0xc1, 0x0e, 0x84, 0x00, 0x21, 0xea, 0xb0, 0x2b, 0x03, 0x42, 0x3c, 0x24, -0xb4, 0x8a, 0x03, 0x09, 0xe0, 0x07, 0xa2, 0xe7, 0x16, 0xa2, 0xb3, 0x42, -0xb5, 0x32, 0x32, 0x03, 0x92, 0xb1, 0x29, 0x82, 0x3b, 0x07, 0x3d, 0xa7, -0xa1, 0x6f, 0x14, 0x59, 0x14, 0x5f, 0x24, 0x78, 0xf2, 0x9b, 0xe5, 0xe0, -0x33, 0x85, 0xd3, 0xe5, 0x1b, 0x14, 0x62, 0x08, 0x1a, 0xd2, 0x87, 0x2d, -0x70, 0x3e, 0x07, 0x27, 0xe3, 0xa0, 0xa4, 0x01, 0x29, 0xf2, 0x0f, 0x7b, -0x3f, 0xb4, 0xce, 0x08, 0x8c, 0xc6, 0xf8, 0xdc, 0x48, 0x0e, 0xf5, 0x2c, -0xdc, 0x91, 0x4b, 0x18, 0x84, 0x34, 0x51, 0x4e, 0x86, 0x09, 0xe8, 0x3d, -0xdb, 0x85, 0x04, 0x55, 0xa3, 0x5e, 0x77, 0x1f, 0x42, 0x97, 0x52, 0x2b, -0x72, 0xe6, 0x55, 0x17, 0x15, 0xaa, 0x97, 0x36, 0xa2, 0x33, 0x01, 0x6a, -0x50, 0x0f, 0xa1, 0x50, 0x60, 0x43, 0xf6, 0x5d, 0x68, 0x05, 0x2a, 0xc7, -0x0e, 0x03, 0x91, 0x41, 0x28, 0x90, 0x1d, 0x41, 0x0a, 0x68, 0x93, 0xd8, -0xdd, 0x39, 0xf3, 0xec, 0xd9, 0xb3, 0x04, 0x3f, 0x23, 0x52, 0x9f, 0x3b, -0x77, 0x0e, 0x09, 0x5b, 0x0e, 0x3e, 0xf3, 0x0d, 0xdf, 0x63, 0x7e, 0x81, -0xfe, 0x38, 0x19, 0xa2, 0x3c, 0x76, 0xec, 0x18, 0x23, 0x40, 0xdf, 0x04, -0xc3, 0x41, 0xf7, 0x20, 0x44, 0x9c, 0x00, 0x80, 0x8d, 0x7d, 0x9d, 0x7b, -0x41, 0xa0, 0x10, 0x31, 0x12, 0x0b, 0x27, 0xb3, 0x9d, 0x33, 0xb8, 0x8c, -0x8c, 0xec, 0x8e, 0xbc, 0x4e, 0x6a, 0x3f, 0x07, 0xfa, 0x2b, 0xb5, 0xf4, -0x44, 0x70, 0xc7, 0xa4, 0x83, 0xd5, 0x1f, 0x24, 0xcb, 0xc1, 0xaf, 0x72, -0xf0, 0x19, 0x1d, 0x17, 0x03, 0x28, 0xa7, 0x71, 0x32, 0x64, 0xcd, 0xc1, -0x37, 0x14, 0x56, 0x82, 0xbe, 0x09, 0xac, 0xe0, 0x31, 0x39, 0x8d, 0xbf, -0x32, 0x4f, 0x76, 0x01, 0x66, 0x08, 0xf5, 0xcb, 0xb3, 0xf0, 0x2b, 0x5a, -0x04, 0x8f, 0x40, 0x14, 0x06, 0x5e, 0x67, 0x82, 0xba, 0x11, 0x90, 0x10, -0x84, 0x42, 0xbd, 0x97, 0x4a, 0x45, 0x12, 0xba, 0x4f, 0xf7, 0xaa, 0xba, -0xa8, 0x90, 0x9c, 0x0a, 0xa4, 0x02, 0x44, 0x61, 0xd4, 0x4a, 0xa8, 0x01, -0x12, 0x81, 0x3a, 0xe5, 0x20, 0x30, 0x01, 0x59, 0x1c, 0xd2, 0x81, 0x46, -0xa1, 0x4b, 0xb6, 0x5b, 0x5a, 0x51, 0x41, 0x8e, 0x50, 0x0c, 0x89, 0xc5, -0xb4, 0x1a, 0x51, 0xf2, 0x34, 0x9a, 0x89, 0x1c, 0x22, 0x70, 0x43, 0x7c, -0x8c, 0x86, 0xfb, 0x16, 0x32, 0x65, 0x4c, 0xae, 0x85, 0xe6, 0x40, 0x08, -0x9b, 0x34, 0x3b, 0xb1, 0xe2, 0x24, 0x80, 0x01, 0x33, 0x0e, 0x78, 0x03, -0x6c, 0xdc, 0x17, 0x8a, 0x14, 0x23, 0x26, 0x83, 0x33, 0xb2, 0x88, 0xe9, -0xf0, 0x31, 0x0e, 0x84, 0x75, 0x91, 0xd7, 0xc9, 0x66, 0x46, 0x56, 0x41, -0x4a, 0x61, 0xce, 0x96, 0x07, 0x32, 0x0c, 0xde, 0x31, 0xa8, 0x99, 0x93, -0xb1, 0x38, 0x73, 0x20, 0x02, 0x21, 0xdb, 0x88, 0x09, 0x88, 0xbf, 0x32, -0x02, 0x03, 0x42, 0xf1, 0x04, 0x20, 0x31, 0x43, 0x18, 0x08, 0x9a, 0x31, -0x9f, 0x51, 0xa6, 0xf9, 0x92, 0x9b, 0x72, 0x23, 0x51, 0x24, 0x70, 0xb1, -0xa1, 0x22, 0x47, 0x85, 0x1f, 0x9f, 0x68, 0xdd, 0xfe, 0xc9, 0x55, 0x1a, -0x15, 0xe2, 0xc5, 0x83, 0x08, 0xa0, 0x06, 0xa8, 0x19, 0xa2, 0x47, 0xfe, -0x96, 0x03, 0x1a, 0x65, 0xdf, 0x85, 0xb2, 0xe9, 0x16, 0x29, 0x30, 0x10, -0xba, 0x51, 0x3a, 0x25, 0xd4, 0x03, 0xfd, 0x41, 0x76, 0x1c, 0xc8, 0xd6, -0xf2, 0x81, 0x6f, 0xf8, 0x1e, 0xad, 0x14, 0xe2, 0xe3, 0x64, 0xc6, 0x84, -0xec, 0x18, 0x81, 0x3d, 0x9e, 0x9d, 0x9b, 0xbd, 0x1f, 0x84, 0xb0, 0x37, -0x0b, 0x43, 0x00, 0x09, 0x6c, 0xea, 0xdc, 0x85, 0xfb, 0x42, 0xa3, 0x9c, -0x0c, 0xb4, 0x84, 0x2e, 0x19, 0x0a, 0x00, 0x40, 0xe2, 0x1c, 0x4c, 0x8f, -0x03, 0x18, 0x40, 0xdc, 0xc8, 0xf7, 0xec, 0xdf, 0x1c, 0x90, 0xac, 0xf9, -0x40, 0x9a, 0xe7, 0x71, 0x20, 0x68, 0x85, 0x19, 0x3e, 0xf3, 0x8d, 0x04, -0x1a, 0xf1, 0x81, 0xef, 0x19, 0x10, 0x6c, 0xc8, 0x0c, 0x05, 0x6f, 0x7c, -0x16, 0xc8, 0xe9, 0x10, 0x0a, 0xa7, 0xaa, 0x33, 0xf6, 0x89, 0xb5, 0xc2, -0xce, 0xac, 0xba, 0xa8, 0x10, 0x29, 0x59, 0x2c, 0x51, 0x90, 0x0b, 0x94, -0x0d, 0x7d, 0x40, 0xca, 0x72, 0xc8, 0x56, 0xcd, 0x37, 0xec, 0xb8, 0xd0, -0xba, 0x52, 0x28, 0x39, 0x13, 0x52, 0x43, 0xa1, 0x84, 0xc8, 0xb8, 0x90, -0x43, 0xc8, 0x94, 0x43, 0x7e, 0xe5, 0x7b, 0xfe, 0x0a, 0x05, 0xb3, 0x37, -0x73, 0x15, 0xd7, 0x32, 0x02, 0xc4, 0x07, 0xc5, 0xc3, 0x49, 0xd8, 0x95, -0x01, 0x18, 0x07, 0x18, 0x80, 0x27, 0xf0, 0xa5, 0xdc, 0x45, 0xf1, 0x01, -0xa1, 0x63, 0xc6, 0x51, 0x44, 0x8f, 0xda, 0xca, 0xa1, 0x2c, 0x9b, 0x9e, -0xdf, 0x9c, 0x38, 0xec, 0xe1, 0x81, 0xea, 0x50, 0xfe, 0x01, 0xa9, 0x14, -0xca, 0xb0, 0x6a, 0x86, 0x4c, 0x52, 0x9e, 0x05, 0xb0, 0xc9, 0x4d, 0x45, -0x45, 0x8e, 0x4c, 0x97, 0x42, 0x85, 0x41, 0x82, 0x1b, 0x55, 0x69, 0x54, -0x08, 0x30, 0xc4, 0x9d, 0x07, 0x65, 0xc8, 0x56, 0x2a, 0x7b, 0x33, 0x34, -0xcd, 0x21, 0x3b, 0xb4, 0x60, 0x40, 0x27, 0x56, 0x21, 0x53, 0xa1, 0x54, -0xfd, 0x90, 0x2f, 0xf9, 0x2b, 0x03, 0xea, 0x08, 0x61, 0x1c, 0x31, 0xdd, -0x28, 0x96, 0x22, 0xdc, 0x40, 0x6e, 0xa4, 0x6e, 0x21, 0x60, 0x30, 0x0c, -0x0b, 0x8d, 0x0a, 0x99, 0xda, 0x94, 0x67, 0xcc, 0x7a, 0xb0, 0x52, 0x94, -0x05, 0x30, 0x6a, 0x86, 0x02, 0x3c, 0xfd, 0x59, 0x7c, 0xba, 0x51, 0x45, -0x92, 0x51, 0x98, 0xdd, 0xab, 0xaa, 0xa3, 0xc2, 0xb0, 0xdc, 0x06, 0x92, -0x0a, 0xe2, 0xcb, 0xf0, 0x60, 0xbd, 0x09, 0xe2, 0x5d, 0xa2, 0x43, 0x85, -0xc4, 0x0a, 0x84, 0x18, 0x2a, 0x42, 0x62, 0x4d, 0xa3, 0x93, 0x0c, 0xf5, -0x15, 0x88, 0xa2, 0x22, 0xd4, 0xdf, 0x60, 0x74, 0xfe, 0xc1, 0x5f, 0x81, -0x28, 0x2a, 0x82, 0xbf, 0xa6, 0xd1, 0x11, 0x43, 0x7d, 0x05, 0xa2, 0xa8, -0x08, 0xf5, 0x37, 0x18, 0x9d, 0x7f, 0xf0, 0x57, 0x20, 0x8a, 0x8a, 0xe0, -0xaf, 0x69, 0x74, 0xc4, 0x50, 0x5f, 0x81, 0x8b, 0xa8, 0xc8, 0xcc, 0xcc, -0x24, 0xae, 0x81, 0x6e, 0x29, 0x78, 0x79, 0xa3, 0x47, 0x74, 0x05, 0x22, -0x79, 0x05, 0x40, 0x01, 0x58, 0x00, 0x11, 0x0e, 0xd2, 0x03, 0x88, 0x5e, -0x4e, 0x4e, 0x4e, 0x26, 0x78, 0x36, 0x7a, 0x44, 0x57, 0x20, 0x92, 0x57, -0x00, 0x14, 0x80, 0x05, 0x10, 0xf1, 0xff, 0x0a, 0xfb, 0x09, 0x6c, 0x5e, -0xaf, 0x2e, 0x17, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, -0x42, 0x60, 0x82, +0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, +0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x01, 0x76, +0x08, 0x02, 0x00, 0x00, 0x00, 0xec, 0xb7, 0xca, 0x94, 0x00, 0x00, 0x00, +0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, +0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, +0x61, 0x05, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, +0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, +0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, +0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, +0x85, 0xcd, 0x49, 0x44, 0x41, 0x54, 0x78, 0x5e, 0xed, 0x9d, 0x07, 0x98, +0x14, 0x55, 0xb6, 0xc7, 0x7b, 0x62, 0x4f, 0x1e, 0x18, 0x26, 0x90, 0xd3, +0x30, 0xe4, 0xcc, 0x90, 0xe3, 0x90, 0x73, 0x8e, 0x22, 0x41, 0x92, 0x82, +0x48, 0x14, 0x15, 0x45, 0x24, 0x89, 0xc0, 0xc0, 0x90, 0x83, 0x04, 0x45, +0x50, 0x11, 0x31, 0x60, 0xc0, 0xac, 0x6b, 0x5c, 0x73, 0x5a, 0xd3, 0xa6, +0xf7, 0x36, 0xb9, 0xcf, 0x4d, 0xba, 0xee, 0xae, 0xae, 0xab, 0xee, 0x2e, +0xef, 0xd7, 0x1c, 0xbc, 0x73, 0xa7, 0xaa, 0xba, 0xbb, 0x3a, 0x4c, 0xe8, +0x50, 0xdf, 0xc0, 0xd7, 0xd3, 0x53, 0x75, 0xeb, 0xd6, 0xad, 0xf3, 0xbf, +0x27, 0x9f, 0x13, 0x13, 0x17, 0x17, 0x97, 0x9e, 0x9e, 0xfe, 0xed, 0xb7, +0xdf, 0xc6, 0xc4, 0xc4, 0x38, 0xac, 0x8e, 0xf3, 0xe7, 0xcf, 0x5b, 0x7e, +0x1f, 0xfd, 0x32, 0xba, 0x02, 0xa1, 0xbb, 0x02, 0x96, 0xd4, 0x0e, 0xa9, +0x3b, 0x9d, 0xce, 0x7f, 0xfc, 0xe3, 0x1f, 0x8e, 0xcc, 0xcc, 0xcc, 0x7d, +0xfb, 0xf6, 0xdd, 0x7b, 0xef, 0xbd, 0xa7, 0x4c, 0xc7, 0xdd, 0x17, 0x8e, +0xbb, 0x2e, 0x1c, 0x77, 0xde, 0x79, 0xe7, 0xc9, 0x0b, 0xc7, 0x89, 0x0b, +0xc7, 0x1d, 0x6e, 0x8e, 0xe3, 0xc7, 0x8f, 0xab, 0xbf, 0xf0, 0xd9, 0xeb, +0x71, 0x7b, 0x39, 0x1f, 0xb7, 0xd9, 0x3e, 0x8e, 0x95, 0xc3, 0x71, 0xf4, +0xe8, 0x51, 0x46, 0xe5, 0x7f, 0x9f, 0x8e, 0x23, 0x47, 0x8e, 0xf8, 0x74, +0xbe, 0xdc, 0x25, 0xe8, 0x87, 0xed, 0x95, 0xbb, 0x8d, 0x77, 0xc8, 0xc9, +0xe5, 0xf1, 0x26, 0xa1, 0x1f, 0x86, 0xf5, 0x4a, 0x45, 0x3a, 0xd5, 0x99, +0x09, 0x53, 0x28, 0x56, 0xa8, 0x17, 0x32, 0x16, 0x7a, 0x16, 0xda, 0x36, +0x90, 0x3c, 0x28, 0x00, 0x0b, 0x20, 0xc2, 0x91, 0x92, 0x92, 0xc2, 0x9f, +0x41, 0x89, 0x7e, 0xfc, 0xf7, 0xc2, 0xf1, 0x9f, 0x0b, 0xc7, 0xbf, 0xff, +0xfd, 0xef, 0xef, 0xbf, 0xff, 0x1e, 0x66, 0xf2, 0xcd, 0x37, 0xdf, 0xfc, +0xf3, 0x9f, 0xff, 0xfc, 0xfa, 0xeb, 0xaf, 0xbf, 0xfa, 0xea, 0x2b, 0xf0, +0xc4, 0xf1, 0x77, 0xd3, 0xf1, 0xb7, 0xbf, 0xfd, 0x4d, 0x7d, 0xc7, 0x67, +0xcb, 0xe3, 0x4b, 0x1b, 0xc7, 0x5f, 0x6d, 0x1c, 0x5f, 0xd8, 0x38, 0x3e, +0xb7, 0x71, 0xfc, 0xc5, 0x74, 0xfc, 0xf9, 0xcf, 0x7f, 0xd6, 0xbf, 0xe3, +0x57, 0x3b, 0xc7, 0x9f, 0x4c, 0xc7, 0x1f, 0xff, 0xf8, 0x47, 0xf5, 0x1d, +0x9f, 0x2d, 0x8f, 0x3f, 0xfc, 0xe1, 0x0f, 0x86, 0xef, 0xcd, 0xdf, 0x58, +0x5e, 0x68, 0xbe, 0x9d, 0xf9, 0x1b, 0x3b, 0xd3, 0x36, 0x3f, 0xbe, 0x7c, +0xa3, 0x56, 0x4e, 0xff, 0xac, 0x2f, 0xa7, 0xbe, 0xfc, 0x7c, 0xef, 0xee, +0x6d, 0xa8, 0x37, 0xc9, 0x09, 0xee, 0xde, 0xaa, 0xa2, 0x08, 0x4e, 0xb0, +0xa4, 0x0e, 0x77, 0xb4, 0xa4, 0xbe, 0x37, 0x93, 0x22, 0xdf, 0x40, 0xa2, +0xd0, 0x2a, 0x07, 0x44, 0x0b, 0xe9, 0xfe, 0xeb, 0x5f, 0xff, 0x82, 0x8c, +0xbf, 0xfb, 0xee, 0x3b, 0xe8, 0x19, 0xaa, 0x86, 0xb6, 0x85, 0xce, 0x75, +0xca, 0x07, 0x0b, 0x20, 0xc2, 0x02, 0x15, 0x82, 0x07, 0x01, 0x03, 0x43, +0x08, 0x1e, 0x18, 0x97, 0x7b, 0x30, 0x09, 0x79, 0x30, 0x59, 0x1d, 0x77, +0xf4, 0xe4, 0xee, 0x65, 0x78, 0x78, 0x91, 0xee, 0x88, 0x86, 0xef, 0x85, +0x4a, 0xf8, 0xdf, 0xf2, 0xf8, 0xcc, 0xdb, 0xf1, 0x7f, 0xee, 0x8f, 0xdf, +0xff, 0xfe, 0xf7, 0xfc, 0x91, 0xff, 0x0d, 0xc7, 0xa7, 0x9f, 0x7e, 0xca, +0x37, 0xfc, 0xef, 0xe1, 0xf8, 0x9d, 0xc7, 0xe3, 0xb7, 0xa6, 0xe3, 0x37, +0xbf, 0xf9, 0x0d, 0xdf, 0xf1, 0x7f, 0xe0, 0x87, 0x79, 0x70, 0xf9, 0xc6, +0xf3, 0x94, 0x3c, 0x3f, 0x8e, 0xfc, 0xd5, 0xbc, 0x14, 0xb2, 0x3e, 0x96, +0x4b, 0xe8, 0x6d, 0xe1, 0x3f, 0xe3, 0x7d, 0x71, 0x8e, 0xbb, 0x17, 0xa7, +0xde, 0xac, 0x4f, 0x98, 0x77, 0x47, 0x5a, 0x90, 0xa2, 0xfa, 0x93, 0x22, +0x4b, 0xc1, 0xaa, 0x20, 0x4d, 0x40, 0x02, 0x19, 0x43, 0xcc, 0xc0, 0xc3, +0x80, 0x0d, 0x05, 0x0c, 0x6b, 0x54, 0xe8, 0x90, 0x30, 0xe3, 0x81, 0xfb, +0x41, 0xd9, 0x3c, 0x86, 0xac, 0x88, 0x2c, 0x96, 0x79, 0x29, 0xe5, 0x1b, +0xb5, 0xca, 0xe6, 0xf7, 0x61, 0xf9, 0xfe, 0xdc, 0xbd, 0x6c, 0xa1, 0x27, +0x77, 0x24, 0xf5, 0x6b, 0x37, 0xc7, 0xaf, 0x7e, 0xf5, 0x2b, 0xf9, 0x0b, +0x1f, 0xcc, 0xc7, 0xff, 0x9a, 0x8e, 0xff, 0x71, 0x73, 0xfc, 0xf2, 0x97, +0xbf, 0x94, 0xbf, 0xf0, 0xc1, 0x7c, 0xfc, 0xc2, 0xcd, 0xf1, 0x73, 0xd3, +0xf1, 0xb3, 0x9f, 0xfd, 0x4c, 0xbe, 0xe3, 0x83, 0xf9, 0xf8, 0xe9, 0x0f, +0x87, 0xe5, 0x5f, 0x0d, 0x5f, 0x9a, 0x07, 0xb7, 0x9c, 0x85, 0xcc, 0x96, +0x3f, 0x59, 0xce, 0x5c, 0x3d, 0x97, 0xe1, 0xb9, 0x65, 0x61, 0xf8, 0xd2, +0xbc, 0x44, 0x96, 0x2b, 0xa9, 0xd6, 0xd9, 0xf0, 0x1e, 0x04, 0xfc, 0x7c, +0xe9, 0x6e, 0x17, 0xb0, 0x7c, 0xdd, 0x42, 0x18, 0x3a, 0xc2, 0x85, 0x78, +0xf8, 0xd2, 0x1d, 0xaa, 0x2d, 0xc9, 0x4f, 0xc1, 0x58, 0xb6, 0x54, 0x00, +0x03, 0x42, 0x04, 0x1e, 0x0a, 0x1b, 0xc2, 0x37, 0x14, 0xd3, 0x10, 0x60, +0x58, 0xa0, 0x42, 0x41, 0x82, 0xb3, 0x85, 0x3f, 0x80, 0x30, 0xc6, 0x02, +0x0c, 0xcf, 0x3c, 0xf3, 0xcc, 0x8a, 0x15, 0x2b, 0x7a, 0xf4, 0xe8, 0x91, +0x9b, 0x9b, 0x1b, 0x1b, 0x1b, 0x1b, 0xba, 0x6a, 0x56, 0x74, 0xe6, 0x91, +0xb3, 0x02, 0x10, 0x6a, 0x76, 0x76, 0x36, 0x44, 0xbb, 0x7c, 0xf9, 0xf2, +0xc7, 0x1f, 0x7f, 0x1c, 0xa8, 0x80, 0x10, 0x88, 0x19, 0x06, 0x82, 0xd4, +0x83, 0x64, 0x05, 0x91, 0x0b, 0xd3, 0x10, 0x69, 0xca, 0x02, 0x15, 0x06, +0x48, 0x00, 0x29, 0x80, 0xc5, 0x10, 0xf7, 0xdd, 0x77, 0x5f, 0x9f, 0x3e, +0x7d, 0x22, 0x67, 0x29, 0xa3, 0x4f, 0x1a, 0xae, 0x2b, 0xd0, 0xbb, 0x77, +0x6f, 0xd4, 0x6b, 0x78, 0x0e, 0x62, 0x0e, 0x84, 0x0d, 0x79, 0x2b, 0x60, +0x28, 0x8e, 0x51, 0x86, 0x57, 0x18, 0x20, 0x01, 0x8b, 0x80, 0xe3, 0xc0, +0x7d, 0xe6, 0xce, 0x9d, 0xcb, 0x1a, 0x0d, 0x1c, 0x38, 0x30, 0x5c, 0x57, +0x2a, 0xfa, 0x5c, 0x91, 0xb6, 0x02, 0xb3, 0x67, 0xcf, 0x46, 0x3e, 0x44, +0x24, 0x83, 0x6f, 0xc0, 0x34, 0xd8, 0xfd, 0x85, 0x63, 0x08, 0x30, 0x30, +0x4f, 0x95, 0x6a, 0xdb, 0xa0, 0x42, 0xd4, 0x6b, 0xce, 0xe0, 0x3c, 0x20, +0x81, 0xbc, 0xd8, 0xaf, 0x5f, 0xbf, 0xac, 0xac, 0xac, 0x48, 0x5b, 0xb5, +0xe8, 0xf3, 0x86, 0xfd, 0x0a, 0xc0, 0x34, 0x3e, 0xf8, 0xe0, 0x03, 0x14, +0x1e, 0xf6, 0x7d, 0x14, 0x04, 0x38, 0x86, 0xe8, 0xdf, 0x40, 0x00, 0xd3, +0x6d, 0x72, 0x72, 0xb2, 0xcb, 0x06, 0x05, 0x3e, 0x40, 0x89, 0x98, 0x5f, +0xd1, 0x25, 0xe0, 0x2c, 0x9c, 0x5d, 0x54, 0x54, 0x34, 0x69, 0xd2, 0xa4, +0x32, 0x0b, 0x54, 0x30, 0xc8, 0x31, 0xe1, 0x88, 0x63, 0xe5, 0x27, 0x8e, +0x4d, 0xdf, 0x38, 0x36, 0xff, 0xdb, 0xb1, 0xe5, 0xbf, 0xe5, 0xf9, 0xf3, +0x1f, 0xc7, 0x16, 0x6e, 0x21, 0x3f, 0x7c, 0xe6, 0xc7, 0xb7, 0xdb, 0xc5, +0x6c, 0xf9, 0x6f, 0xcc, 0x96, 0xff, 0xc4, 0x6e, 0xf9, 0x0f, 0xff, 0xcb, +0x4f, 0xec, 0x56, 0x7e, 0xfe, 0x1d, 0x1b, 0xc0, 0x98, 0xbe, 0xce, 0xc1, +0xe3, 0xf9, 0xf2, 0x50, 0xea, 0xd1, 0x64, 0x92, 0x17, 0x9f, 0x51, 0x26, +0x1f, 0xd4, 0xdb, 0xf9, 0xb6, 0x7a, 0x61, 0x72, 0x6b, 0x08, 0x15, 0x72, +0x85, 0x68, 0x21, 0xdd, 0xb2, 0x47, 0xcf, 0x9e, 0x3d, 0x31, 0x5a, 0xa0, +0xd6, 0xa3, 0x88, 0x43, 0xf0, 0xd8, 0x6d, 0x21, 0x7e, 0x20, 0x60, 0x44, +0x85, 0x68, 0xd8, 0xc8, 0x4e, 0x88, 0x5c, 0xf3, 0xe6, 0xcd, 0x73, 0xf9, +0x32, 0x7e, 0x38, 0x12, 0x72, 0xf2, 0x1d, 0xb3, 0x1f, 0xad, 0xd8, 0x95, +0x12, 0x72, 0x09, 0x04, 0x15, 0x2e, 0x3a, 0x2b, 0x3b, 0x67, 0x9d, 0x0a, +0xab, 0x02, 0x95, 0x18, 0xd0, 0x5e, 0x8a, 0x0a, 0xa6, 0xad, 0x10, 0x52, +0xb1, 0xcb, 0x5e, 0x15, 0x96, 0xa5, 0x7c, 0xe6, 0x30, 0xfb, 0xd1, 0x78, +0xc8, 0x58, 0x3b, 0x2e, 0xbd, 0xf4, 0x52, 0x0c, 0x71, 0xa8, 0xe0, 0x10, +0xbc, 0x92, 0xa3, 0x2e, 0xa2, 0x02, 0x7e, 0xc1, 0x27, 0x78, 0x87, 0x30, +0x0a, 0x18, 0x0a, 0xea, 0xb5, 0x7e, 0x71, 0x52, 0x93, 0x5e, 0x8e, 0x9b, +0xbe, 0xa8, 0x8c, 0x77, 0x63, 0xd8, 0x4d, 0xcb, 0x67, 0xb1, 0x7c, 0x64, +0x41, 0xc1, 0x5e, 0x87, 0x32, 0xb8, 0x8d, 0x22, 0x21, 0xd8, 0xcb, 0x5b, +0x96, 0x66, 0x6e, 0xfa, 0xc2, 0x99, 0xdf, 0x4b, 0xa7, 0x6d, 0x9c, 0xe2, +0xb0, 0x0b, 0x14, 0x0c, 0xd8, 0x05, 0xc4, 0x0f, 0x04, 0xf0, 0x7f, 0xbb, +0x24, 0x28, 0x41, 0x85, 0xd2, 0x28, 0xc0, 0x4d, 0xdf, 0xbe, 0x7d, 0x1b, +0x34, 0x68, 0x20, 0x17, 0xbb, 0xb8, 0x44, 0xe5, 0x40, 0x82, 0xe7, 0x11, +0x8a, 0xf1, 0x47, 0x7c, 0x2a, 0xdf, 0xc5, 0xad, 0x64, 0x20, 0x85, 0xe5, +0xee, 0x50, 0x51, 0x0f, 0x75, 0xd3, 0x17, 0x3a, 0xc7, 0xe8, 0xde, 0xbd, +0x3b, 0x6e, 0x19, 0xd8, 0x85, 0x52, 0xbb, 0x89, 0x0d, 0xb9, 0x88, 0x0a, +0xf0, 0x21, 0x8c, 0x02, 0x23, 0xee, 0xd3, 0x4f, 0x3f, 0x5d, 0x46, 0x00, +0xab, 0x68, 0xc1, 0xc9, 0x72, 0x75, 0xa2, 0x12, 0x76, 0x45, 0x11, 0x4d, +0x24, 0x00, 0x1e, 0x92, 0xd6, 0x8e, 0xb3, 0x67, 0xcf, 0x62, 0x8f, 0x42, +0xbb, 0x80, 0xf8, 0x81, 0x00, 0x61, 0x54, 0x17, 0x51, 0x01, 0x3e, 0xc4, +0xf4, 0x84, 0xf8, 0xb4, 0x72, 0xe5, 0xca, 0xd2, 0x4b, 0xd0, 0x51, 0x42, +0x69, 0x99, 0xa2, 0xe0, 0x89, 0x82, 0xc7, 0xde, 0x0a, 0x68, 0xca, 0xf7, +0xa2, 0x45, 0x8b, 0x70, 0xc0, 0x2b, 0x2b, 0x2d, 0x32, 0x55, 0x29, 0x2a, +0xd0, 0xc1, 0xc1, 0x0a, 0xe2, 0x13, 0xba, 0x79, 0x29, 0x2a, 0x50, 0xde, +0x43, 0x09, 0x15, 0xf6, 0x56, 0x24, 0xfa, 0x44, 0xd1, 0x15, 0x80, 0xb0, +0x7f, 0x38, 0x3a, 0x77, 0xee, 0x8c, 0xfb, 0x42, 0x74, 0x6e, 0x4c, 0x4d, +0xa5, 0xa8, 0x80, 0x6b, 0x88, 0x9e, 0x4d, 0x8c, 0x53, 0x4e, 0x4e, 0x4e, +0x29, 0x2a, 0xb0, 0x6a, 0x45, 0x57, 0x30, 0xba, 0x02, 0xe1, 0xb7, 0x02, +0x10, 0xf6, 0x0f, 0x07, 0x21, 0x21, 0x98, 0x68, 0x11, 0xa2, 0x20, 0x7e, +0x74, 0x6e, 0x42, 0xe2, 0x2f, 0xf2, 0x0a, 0xf0, 0x81, 0x23, 0x03, 0x85, +0x03, 0x3e, 0x52, 0x26, 0xc6, 0x09, 0x73, 0x6f, 0xf8, 0xad, 0x48, 0xf4, +0x89, 0xa2, 0x2b, 0x00, 0x61, 0xff, 0x70, 0x40, 0xf0, 0x44, 0x66, 0x8a, +0x25, 0x0a, 0xc6, 0x50, 0x06, 0x15, 0xe2, 0xcf, 0x26, 0x3e, 0xa4, 0x8c, +0xaa, 0x1d, 0x5d, 0xbe, 0xe8, 0x0a, 0x84, 0xe5, 0x0a, 0xe0, 0x83, 0xd6, +0x8e, 0x4f, 0x3e, 0xf9, 0x04, 0xd5, 0x02, 0xe2, 0x87, 0x31, 0x44, 0x51, +0x11, 0xd5, 0x43, 0x22, 0x78, 0x05, 0x34, 0x54, 0x7c, 0xfc, 0xf1, 0xc7, +0xd6, 0xa8, 0x10, 0x97, 0x36, 0x3a, 0x47, 0x94, 0x57, 0x44, 0x85, 0xc6, +0x88, 0x58, 0x01, 0x8d, 0xd0, 0x3f, 0xfa, 0xe8, 0x23, 0xa2, 0xfe, 0x20, +0x7e, 0xc4, 0x25, 0x12, 0x7d, 0x4b, 0xf5, 0x8a, 0x28, 0x2a, 0x22, 0x82, +0x14, 0xc2, 0x52, 0x1c, 0xf2, 0xef, 0xa1, 0xec, 0xa3, 0x82, 0xb4, 0xa6, +0x28, 0xaf, 0x88, 0xc2, 0x23, 0x22, 0x56, 0x20, 0x8a, 0x8a, 0x88, 0x78, +0xcd, 0xfe, 0x6d, 0x99, 0x11, 0x7b, 0x55, 0x14, 0x15, 0x21, 0x87, 0x8a, +0xa4, 0x6d, 0xdf, 0xe5, 0xed, 0xf8, 0x47, 0xfe, 0xce, 0xcf, 0x5b, 0xee, +0xfc, 0xac, 0x5d, 0xc9, 0x6f, 0x46, 0x6e, 0x3c, 0x5d, 0x74, 0xed, 0xb1, +0x76, 0x57, 0xec, 0x6e, 0x3c, 0x73, 0x6b, 0xdb, 0xcb, 0x77, 0xf7, 0xbf, +0xe6, 0xe8, 0x98, 0xe2, 0x73, 0xfc, 0x35, 0xe4, 0x9e, 0xab, 0x0a, 0x4d, +0x58, 0x43, 0xc5, 0x87, 0x1f, 0x7e, 0x28, 0xd1, 0x50, 0xd6, 0x7a, 0x45, +0x54, 0x82, 0xaa, 0x94, 0xd7, 0x96, 0xbd, 0xfd, 0xeb, 0x56, 0x25, 0x9f, +0x8e, 0xdc, 0x74, 0xa6, 0xdf, 0xc2, 0xcd, 0x1d, 0x47, 0xce, 0x6a, 0xd4, +0xa6, 0x73, 0x66, 0xcd, 0xc6, 0xce, 0xcc, 0x3c, 0x67, 0x7a, 0x96, 0x33, +0xbd, 0x86, 0x33, 0xad, 0x46, 0x62, 0x52, 0x7a, 0x62, 0x52, 0x9a, 0xfe, +0xe3, 0x4c, 0xad, 0x96, 0xde, 0xb0, 0x43, 0xcf, 0x79, 0x1b, 0xda, 0xee, +0xfe, 0x2c, 0x67, 0xc7, 0x3f, 0x2b, 0x65, 0xda, 0xa1, 0x7d, 0x53, 0xaf, +0xbc, 0x82, 0x42, 0x54, 0x84, 0x7b, 0x10, 0x20, 0x15, 0x45, 0x45, 0x05, +0xbf, 0x69, 0xf6, 0xfb, 0xa1, 0xab, 0x8f, 0xd6, 0xef, 0x50, 0xe4, 0x88, +0x4b, 0x8a, 0x8b, 0x89, 0x4b, 0x75, 0x26, 0x55, 0x4f, 0x4d, 0xcd, 0xcd, +0xcc, 0xa8, 0x59, 0x3d, 0xb3, 0x65, 0x7e, 0xe3, 0x3e, 0xdd, 0xba, 0xf6, +0xec, 0x5c, 0xd8, 0xbf, 0x57, 0xcf, 0x99, 0xd3, 0xa6, 0x5e, 0x36, 0xe3, +0xd2, 0x39, 0xda, 0xcf, 0x88, 0x41, 0x83, 0xb2, 0x33, 0xd2, 0x12, 0x1c, +0x8e, 0xd8, 0xe4, 0x8c, 0x66, 0x43, 0x66, 0x8d, 0xdd, 0xf9, 0x74, 0x93, +0xdd, 0x5f, 0x56, 0xf0, 0xe4, 0x43, 0xfb, 0x76, 0x5e, 0x51, 0x81, 0x6f, +0x1b, 0x1b, 0x54, 0x14, 0x15, 0x15, 0xf6, 0x9a, 0xb3, 0x77, 0x7c, 0xdd, +0x66, 0xd7, 0xff, 0xf5, 0x59, 0xbc, 0x23, 0x31, 0xaf, 0x80, 0xb7, 0x93, +0x93, 0x99, 0xd1, 0xbd, 0xb0, 0x70, 0xce, 0xcc, 0x99, 0xc5, 0x5b, 0xb6, +0x3c, 0xfa, 0xc8, 0x23, 0xd4, 0xaa, 0x81, 0xa1, 0x4b, 0x45, 0x19, 0x55, +0xf5, 0x47, 0x2f, 0xfd, 0x22, 0xb5, 0x61, 0x5e, 0x7d, 0xf5, 0xd5, 0xe5, +0x4b, 0x97, 0xb6, 0x6d, 0xde, 0x3c, 0x35, 0x01, 0x74, 0xc4, 0xa5, 0x34, +0xea, 0x58, 0xb4, 0x62, 0x5f, 0xc1, 0x9e, 0xbf, 0x55, 0xd8, 0x53, 0x84, +0xf6, 0x8d, 0xa2, 0xa8, 0xa8, 0x3a, 0xef, 0xaf, 0xf1, 0xce, 0xcf, 0x47, +0x6f, 0x7f, 0xa2, 0xdd, 0xa5, 0x37, 0x26, 0x64, 0xd6, 0xe2, 0xbd, 0x34, +0xa8, 0x95, 0x37, 0x7d, 0xca, 0x94, 0xfb, 0xcf, 0x9c, 0x81, 0xd0, 0xa5, +0x18, 0x99, 0xd4, 0x2f, 0x92, 0x72, 0x72, 0x52, 0xf6, 0xcb, 0xb2, 0x74, +0x9f, 0x14, 0x05, 0xe3, 0x1c, 0xb2, 0xc9, 0x6e, 0x3d, 0x78, 0x70, 0xcc, +0x88, 0x61, 0xb5, 0xb3, 0x5c, 0xb9, 0x93, 0x69, 0xf9, 0x9d, 0x07, 0xaf, +0x39, 0xd9, 0x34, 0x8a, 0x0d, 0xaf, 0x56, 0x04, 0x9b, 0x7a, 0x45, 0x94, +0x57, 0x94, 0x37, 0x78, 0x90, 0x97, 0x7a, 0x2f, 0xda, 0xe6, 0xac, 0x56, +0x93, 0x37, 0xd2, 0xb8, 0x4e, 0xad, 0x15, 0x4b, 0x97, 0x3c, 0xf9, 0xc4, +0x13, 0x52, 0xa4, 0x48, 0xca, 0x78, 0xa9, 0x42, 0x77, 0x52, 0x28, 0x52, +0xaa, 0x44, 0x4a, 0xf1, 0x52, 0xf3, 0xc1, 0x9f, 0xa4, 0x94, 0x23, 0x57, +0x71, 0xf9, 0x13, 0x8f, 0x3f, 0x3e, 0x77, 0xd6, 0xac, 0xcc, 0x24, 0x17, +0xdf, 0xc8, 0xe9, 0x36, 0x7e, 0xc8, 0xe6, 0x87, 0x0a, 0xf6, 0x44, 0x65, +0x2a, 0xf7, 0xce, 0x7b, 0xaf, 0xa8, 0x50, 0x7a, 0x05, 0xa5, 0x72, 0xa2, +0xfe, 0x8a, 0xf2, 0xc0, 0x46, 0xe3, 0x92, 0xbf, 0x0c, 0xb8, 0xf1, 0xee, +0x8c, 0x26, 0x1d, 0x59, 0xde, 0x3a, 0x35, 0xaa, 0x6d, 0xde, 0xb8, 0x01, +0xf9, 0x07, 0x3c, 0x40, 0xcd, 0x90, 0x35, 0xc4, 0x2d, 0x05, 0xed, 0x88, +0xe7, 0x97, 0x7a, 0x8f, 0xfa, 0x41, 0x42, 0x98, 0xe5, 0xc1, 0x39, 0xaa, +0xf2, 0xaf, 0x14, 0x3b, 0x65, 0xb4, 0x87, 0x1f, 0x7e, 0x78, 0x58, 0xff, +0x7e, 0xdc, 0x25, 0x21, 0x35, 0xab, 0xd7, 0xac, 0xd5, 0x51, 0x81, 0xca, +0xed, 0xdb, 0xb4, 0x8f, 0x8a, 0xa8, 0xb6, 0x5d, 0x1e, 0x90, 0x80, 0x45, +0xf4, 0xba, 0x62, 0xb3, 0x33, 0x3d, 0x9b, 0x17, 0x31, 0x79, 0xdc, 0xd8, +0x97, 0x5e, 0x7a, 0x89, 0x75, 0x86, 0x3f, 0xc0, 0x1c, 0x04, 0x0f, 0x02, +0x06, 0x21, 0x7d, 0x29, 0x65, 0x67, 0x38, 0xc8, 0xaa, 0x37, 0x1c, 0x72, +0x02, 0x27, 0xeb, 0x85, 0x80, 0xe1, 0x1e, 0x52, 0x9f, 0xe5, 0x8e, 0xdb, +0x6e, 0x6b, 0xde, 0xb0, 0x3e, 0x8d, 0x17, 0x9c, 0x19, 0xb9, 0x7d, 0xae, +0xd8, 0x5c, 0x10, 0x55, 0xc4, 0xcd, 0x02, 0x55, 0x14, 0x15, 0xe5, 0x41, +0xeb, 0x76, 0xc6, 0x84, 0x45, 0x0c, 0xda, 0xf4, 0x40, 0x6a, 0xc3, 0xb6, +0xbc, 0x82, 0x7a, 0x79, 0x39, 0xbb, 0x76, 0xee, 0x44, 0x8d, 0x56, 0x85, +0xeb, 0x04, 0x0f, 0x86, 0x4a, 0xc0, 0x52, 0x07, 0x5e, 0x6a, 0x65, 0x7b, +0x3d, 0xcc, 0x45, 0xe3, 0x55, 0x11, 0x54, 0x6e, 0xb4, 0xee, 0xc6, 0x35, +0x75, 0xb3, 0x6b, 0x50, 0xfc, 0xb4, 0x70, 0xc4, 0xcc, 0xa8, 0xa6, 0x61, +0x7c, 0x5f, 0x26, 0x54, 0xb0, 0x55, 0xa1, 0xad, 0x95, 0xc6, 0x41, 0x45, +0x25, 0x28, 0x3b, 0x24, 0xee, 0xeb, 0x39, 0x28, 0xd6, 0xfd, 0x96, 0xee, +0x89, 0x4b, 0xcb, 0x8e, 0x77, 0x38, 0xc6, 0x8e, 0x18, 0xf1, 0xc6, 0xeb, +0xaf, 0x23, 0xa0, 0x4a, 0x26, 0x24, 0x9b, 0xba, 0xd4, 0x72, 0x34, 0x14, +0x00, 0x56, 0x30, 0x30, 0x34, 0x4e, 0x70, 0xf7, 0xab, 0x3a, 0x5f, 0x6a, +0xc8, 0xc3, 0x37, 0xc0, 0x18, 0x48, 0x63, 0x70, 0xa9, 0x86, 0xfa, 0xfe, +0xfb, 0xef, 0x8f, 0x1b, 0x35, 0x0a, 0x55, 0x23, 0x21, 0x3d, 0x7b, 0xd0, +0x9a, 0x3b, 0xa2, 0x02, 0x55, 0xe9, 0x4b, 0xb4, 0x42, 0x45, 0x19, 0x2f, +0x5e, 0x14, 0x15, 0xbe, 0x52, 0xbc, 0xd7, 0xf3, 0x91, 0x9a, 0xba, 0xcf, +0xb8, 0x96, 0x95, 0xaf, 0x9d, 0x5d, 0x63, 0xc7, 0xf6, 0xed, 0x58, 0x52, +0x95, 0xc8, 0xe4, 0x0e, 0x0f, 0x36, 0x91, 0x60, 0x79, 0x9a, 0xea, 0x37, +0x22, 0x62, 0x95, 0x60, 0x43, 0x12, 0xf1, 0x29, 0xe7, 0xbd, 0x71, 0xdd, +0xba, 0x2c, 0x57, 0x75, 0xaf, 0x84, 0x3e, 0x0b, 0x36, 0x35, 0xdd, 0xfb, +0x77, 0xaf, 0x93, 0x8f, 0x88, 0x13, 0xa2, 0xa8, 0xa8, 0xe0, 0xd7, 0x9c, +0xbf, 0xeb, 0x8b, 0x4e, 0xc3, 0x2e, 0x61, 0xd9, 0xbb, 0x15, 0x76, 0x7a, +0xe8, 0xc1, 0x07, 0x61, 0xcd, 0x98, 0x50, 0x21, 0x50, 0x58, 0x84, 0x59, +0x64, 0x32, 0x74, 0x15, 0xf1, 0x1b, 0x1b, 0x0a, 0x18, 0x7a, 0x17, 0x1e, +0x10, 0x88, 0xea, 0xc2, 0x16, 0x78, 0xee, 0xd1, 0x47, 0xdb, 0xb7, 0x68, +0xce, 0x94, 0xaa, 0xb5, 0xe8, 0x35, 0xd4, 0x65, 0x9e, 0x8a, 0x78, 0xb7, +0x86, 0x4d, 0x54, 0xf0, 0xe6, 0xa2, 0x36, 0xa8, 0x00, 0xf1, 0xe3, 0xb2, +0x35, 0xad, 0xbb, 0x27, 0xbd, 0x8e, 0x8b, 0xfe, 0xa6, 0x4e, 0x9a, 0xf8, +0xfa, 0x6b, 0xaf, 0x49, 0x9a, 0xbc, 0x54, 0x55, 0x51, 0x75, 0xe1, 0xdd, +0x35, 0xda, 0xf1, 0x1b, 0x12, 0xea, 0x42, 0x77, 0xd8, 0x40, 0xa0, 0xfa, +0xc9, 0xfb, 0xef, 0xe3, 0x20, 0x67, 0x62, 0xc9, 0xd5, 0xeb, 0x0c, 0xba, +0x21, 0xe2, 0xa5, 0xa9, 0x28, 0x2a, 0x02, 0xa4, 0x75, 0x9b, 0x97, 0xa3, +0x48, 0xf4, 0x5d, 0xb6, 0x37, 0x21, 0xb5, 0x3a, 0x8a, 0xc4, 0xaa, 0x15, +0xcb, 0x55, 0xb5, 0x46, 0x81, 0x84, 0xaa, 0xef, 0x6b, 0xd9, 0x78, 0x2a, +0x70, 0x3c, 0x18, 0x1a, 0xb8, 0xe9, 0xdd, 0xaa, 0xa4, 0x15, 0x09, 0xd3, +0x80, 0x6b, 0xed, 0x2a, 0x29, 0xa9, 0x9e, 0xec, 0x8c, 0x8d, 0x4d, 0xe8, +0x35, 0xe3, 0xda, 0x88, 0x56, 0xc1, 0xed, 0xa0, 0x82, 0xbd, 0x24, 0xca, +0x2b, 0x6c, 0x52, 0xbf, 0xe5, 0x69, 0x28, 0x12, 0x5d, 0xa7, 0x5f, 0xcd, +0x52, 0xe7, 0x56, 0xcf, 0xdc, 0xb3, 0x67, 0x37, 0x11, 0x19, 0xd8, 0x9a, +0x10, 0x5d, 0x44, 0x6a, 0x92, 0xca, 0xbe, 0x86, 0xb6, 0x3a, 0xc1, 0x45, +0x82, 0xbb, 0xce, 0x86, 0x4a, 0xa0, 0x12, 0xf3, 0x14, 0xba, 0xfe, 0xb3, +0xcf, 0x3c, 0xdd, 0xb1, 0x55, 0x4b, 0xa6, 0xda, 0xa1, 0xff, 0xe8, 0xc8, +0x55, 0x33, 0x6c, 0xda, 0xa0, 0xa2, 0xa8, 0xf0, 0x1b, 0x15, 0xf9, 0x3b, +0xbf, 0xe8, 0x38, 0xdc, 0xa5, 0x48, 0xb4, 0x6b, 0xd5, 0xea, 0xec, 0x83, +0x0f, 0x4a, 0x6f, 0x04, 0x03, 0x24, 0x2a, 0x80, 0x45, 0x98, 0x61, 0x26, +0x02, 0x95, 0x00, 0x43, 0x57, 0xc1, 0xa9, 0xf5, 0x82, 0x34, 0x15, 0x17, +0xe3, 0x48, 0xa8, 0x5e, 0x7b, 0xf0, 0xda, 0x53, 0x91, 0xe8, 0x05, 0xb7, +0x8f, 0x0a, 0x5e, 0x67, 0xd4, 0xb7, 0xed, 0x2b, 0x36, 0xd0, 0xad, 0xdb, +0xf5, 0x1d, 0xc1, 0xba, 0x8d, 0x1d, 0x39, 0x52, 0x14, 0x09, 0x29, 0xfe, +0x2e, 0x65, 0xae, 0xe1, 0x12, 0x15, 0xc9, 0x22, 0xdc, 0x59, 0xa8, 0xa4, +0x13, 0x83, 0x94, 0x9d, 0x57, 0x2a, 0x78, 0xc9, 0x8e, 0x1d, 0x19, 0x49, +0xce, 0xf8, 0x94, 0xea, 0x83, 0xd7, 0xdd, 0x13, 0x71, 0xd2, 0x94, 0x1b, +0x54, 0xd0, 0xa6, 0xf9, 0x62, 0xde, 0xb6, 0x58, 0x66, 0xe1, 0x15, 0x51, +0x54, 0xf8, 0x04, 0x89, 0x0b, 0x4e, 0xba, 0x07, 0x93, 0x73, 0x1b, 0xe3, +0x29, 0x5b, 0xbc, 0x70, 0xa1, 0x2a, 0x41, 0xa7, 0xb7, 0x96, 0x52, 0x3d, +0xd7, 0x82, 0x65, 0x6b, 0xf2, 0x4f, 0xee, 0xd2, 0x7b, 0x59, 0xc1, 0x34, +0x94, 0x34, 0x75, 0xf4, 0xf0, 0xe1, 0xcc, 0xc4, 0x78, 0xc2, 0x43, 0x06, +0xaf, 0x3b, 0xdd, 0x74, 0x6f, 0x24, 0x19, 0xa6, 0xbc, 0xa2, 0x82, 0x1a, +0x38, 0xa2, 0x57, 0x44, 0x51, 0x61, 0x1f, 0x15, 0x2e, 0x48, 0x6c, 0x78, +0x20, 0x25, 0x2f, 0x1f, 0x48, 0xac, 0x5e, 0xb5, 0x8a, 0xb0, 0x6f, 0x42, +0x2d, 0x44, 0x6a, 0x32, 0xeb, 0xd6, 0xfe, 0x91, 0x72, 0x70, 0xaf, 0x32, +0x77, 0xc7, 0x95, 0xd6, 0x87, 0xb7, 0x1f, 0x3d, 0x9a, 0x99, 0x10, 0x9b, +0x98, 0x9e, 0x3d, 0x64, 0xdd, 0xe9, 0x08, 0xb2, 0xd8, 0x6a, 0xa8, 0xa0, +0xef, 0x11, 0x3b, 0x9a, 0xf8, 0xb6, 0x4b, 0x79, 0x45, 0x14, 0x15, 0xf6, +0xc1, 0x20, 0x67, 0x36, 0x72, 0x41, 0xe2, 0xbe, 0xe4, 0xbc, 0x7c, 0xcc, +0x4d, 0xab, 0xaf, 0xb9, 0x86, 0x2c, 0x08, 0xd1, 0xad, 0x61, 0xb9, 0xe2, +0x91, 0xa8, 0x60, 0xdd, 0xda, 0x26, 0x7e, 0x0c, 0xc0, 0x50, 0x9e, 0xbe, +0x13, 0xb7, 0xdf, 0x9e, 0x91, 0x18, 0x87, 0xff, 0x7b, 0xc8, 0x4d, 0xf7, +0x44, 0x0a, 0x30, 0xa2, 0xbc, 0xc2, 0x57, 0xa2, 0xf7, 0x7c, 0x3e, 0x90, +0x18, 0xb8, 0xfe, 0x8c, 0x33, 0xa7, 0x51, 0x62, 0x6c, 0xcc, 0xea, 0x6b, +0xaf, 0xc5, 0xdc, 0xa4, 0xb8, 0x84, 0x32, 0x37, 0x55, 0x8a, 0x6e, 0x6d, +0x07, 0x1b, 0xba, 0x43, 0x43, 0xfa, 0xa9, 0x4b, 0x78, 0xc8, 0x89, 0xe3, +0xb7, 0x57, 0x4b, 0x4e, 0x8a, 0x4b, 0xcd, 0xba, 0xc0, 0x31, 0x22, 0x20, +0x04, 0x3d, 0x8a, 0x8a, 0x20, 0xa2, 0x02, 0xc1, 0x49, 0x20, 0xe1, 0x04, +0x12, 0xd7, 0x5c, 0x23, 0x90, 0x90, 0xd0, 0x26, 0x03, 0x24, 0xec, 0xd0, +0x68, 0x65, 0x9d, 0x23, 0x4c, 0x43, 0x3a, 0x21, 0x0a, 0x30, 0x70, 0xbd, +0xdf, 0x7e, 0xec, 0x58, 0x46, 0x6a, 0x4a, 0x42, 0xf5, 0xba, 0xc3, 0xb6, +0x3d, 0x1e, 0xc4, 0x15, 0xab, 0xa2, 0x43, 0xd9, 0x44, 0x05, 0xc6, 0x44, +0xde, 0x71, 0xd4, 0x06, 0xe5, 0xf9, 0x2d, 0x0e, 0x5a, 0x7f, 0x26, 0x39, +0xa7, 0x21, 0xf1, 0x76, 0xc2, 0x25, 0x54, 0xdf, 0x83, 0x10, 0x82, 0x84, +0x40, 0xd1, 0xd0, 0x4b, 0x5a, 0x38, 0xc6, 0xce, 0xed, 0xdb, 0x9d, 0x09, +0xf1, 0x29, 0xb5, 0x9a, 0x35, 0xdb, 0x17, 0xee, 0xe1, 0x52, 0x36, 0xf5, +0x8a, 0x28, 0x2a, 0xbc, 0xee, 0x6a, 0xf8, 0x25, 0x92, 0x72, 0x1a, 0xa2, +0x4b, 0x5c, 0x7f, 0xed, 0xb5, 0xd2, 0x97, 0x36, 0xe4, 0xb8, 0x84, 0xd9, +0x05, 0x2e, 0x1c, 0x43, 0x74, 0x0c, 0x1e, 0xe7, 0xc6, 0xd5, 0xab, 0x49, +0xcc, 0x28, 0xec, 0x3f, 0x36, 0xcc, 0x1d, 0x7c, 0x51, 0x54, 0x78, 0x25, +0x77, 0x3b, 0x27, 0x10, 0xd0, 0xd1, 0xbe, 0xff, 0x58, 0x2c, 0x4e, 0x37, +0xac, 0xbe, 0x8e, 0x4a, 0x03, 0x66, 0xd7, 0xb5, 0xe8, 0x12, 0x95, 0x25, +0x14, 0xf9, 0x77, 0x5f, 0x5d, 0x94, 0x02, 0x18, 0xc8, 0x81, 0xd8, 0x0c, +0x16, 0x2e, 0x58, 0xe0, 0x0a, 0x6d, 0x1c, 0x3d, 0x2b, 0x9c, 0x81, 0x11, +0x45, 0x85, 0x1d, 0xa2, 0xf7, 0x7c, 0x0e, 0xea, 0x44, 0x97, 0x49, 0x57, +0xb1, 0x92, 0xf3, 0x67, 0xcf, 0x96, 0x8a, 0x5a, 0x12, 0xf3, 0xa7, 0x2c, +0x4e, 0xa1, 0x08, 0x09, 0x5d, 0x94, 0x52, 0xdd, 0xd6, 0x79, 0xa8, 0xdf, +0xfc, 0xfa, 0xd7, 0x93, 0xc6, 0x8f, 0xe7, 0x61, 0x7b, 0xcd, 0x58, 0x15, +0xb6, 0x26, 0x29, 0x3b, 0xa8, 0x40, 0xd9, 0x0a, 0x03, 0x09, 0xaa, 0xc6, +0xf6, 0xaf, 0x5a, 0x95, 0xfc, 0x8e, 0x0a, 0x4b, 0x9d, 0xa7, 0x2e, 0xaf, +0x53, 0x38, 0xb8, 0x76, 0xe1, 0x90, 0x4e, 0x13, 0xae, 0x1c, 0x7a, 0xc3, +0xed, 0xd0, 0x74, 0x80, 0xc0, 0xe8, 0xb3, 0x64, 0x8f, 0x8b, 0x4a, 0xba, +0x75, 0x7d, 0xf7, 0x9d, 0x77, 0xc5, 0x7b, 0x2d, 0x31, 0x7f, 0x12, 0xe0, +0x54, 0x65, 0x2d, 0x4e, 0x76, 0x18, 0x88, 0x21, 0x2a, 0x44, 0x14, 0x0c, +0x8a, 0xd7, 0xf7, 0xbb, 0xd0, 0x0b, 0xae, 0xef, 0x15, 0xb7, 0x84, 0x67, +0xa5, 0xa9, 0x48, 0x40, 0x85, 0xcb, 0x81, 0xb0, 0x72, 0x6f, 0x9d, 0xd6, +0xbc, 0xc8, 0xb8, 0xf8, 0x18, 0x47, 0xb5, 0x94, 0xe4, 0x5a, 0xd9, 0x35, +0xf8, 0xa9, 0x9e, 0x96, 0x8a, 0xcc, 0x13, 0x9f, 0x5a, 0xbd, 0xcf, 0xb2, +0x3d, 0x7e, 0x63, 0x03, 0xd9, 0x29, 0x3e, 0x23, 0xb7, 0x56, 0x4e, 0xce, +0x7d, 0x67, 0xce, 0x10, 0x6c, 0x2f, 0x01, 0x1d, 0xe2, 0xaa, 0x13, 0xbf, +0x84, 0x10, 0x96, 0x1d, 0x12, 0xac, 0x9a, 0xe7, 0x18, 0x34, 0x6f, 0x49, +0x57, 0x7a, 0xed, 0xd5, 0x57, 0xdb, 0x36, 0x6f, 0x06, 0xf1, 0x0c, 0x5c, +0x73, 0x47, 0x80, 0x7b, 0x4a, 0x55, 0xbc, 0x3c, 0xec, 0x51, 0x01, 0xb9, +0x77, 0x9f, 0x75, 0x43, 0x8c, 0x23, 0xa6, 0x6e, 0x4e, 0xd6, 0xb0, 0x41, +0x83, 0xae, 0x5d, 0xb5, 0xea, 0xf0, 0xa1, 0x43, 0x8f, 0x3f, 0xf6, 0xd8, +0x63, 0xe7, 0xce, 0x9d, 0x38, 0x7e, 0x9c, 0x58, 0x8c, 0x3a, 0x79, 0x79, +0x14, 0xe7, 0x2b, 0xba, 0xfa, 0x90, 0x1f, 0xaf, 0x87, 0xc1, 0xdb, 0xf5, +0x1b, 0x95, 0x10, 0x1f, 0xbf, 0x71, 0xfd, 0x7a, 0xd5, 0x3d, 0x8d, 0x0d, +0x55, 0x20, 0x11, 0xd2, 0x5c, 0xc2, 0xa0, 0x79, 0x4b, 0x1c, 0xa1, 0xc4, +0x4a, 0x49, 0xef, 0xab, 0x47, 0x1e, 0x7e, 0x38, 0x2f, 0x3b, 0xdb, 0x99, +0xd7, 0x24, 0x0c, 0x3d, 0x18, 0x26, 0x54, 0xb0, 0xdf, 0x19, 0x7d, 0xdb, +0xa1, 0x2c, 0x41, 0x9d, 0xef, 0xb3, 0xb8, 0xc4, 0x11, 0x97, 0xd0, 0xb1, +0x6d, 0x9b, 0x87, 0xce, 0x9e, 0xc5, 0x75, 0x8f, 0xc1, 0x94, 0x27, 0x44, +0xce, 0xe1, 0xc0, 0x8d, 0x8f, 0xb1, 0xe8, 0xae, 0x93, 0x27, 0x6b, 0x54, +0xaf, 0x16, 0xeb, 0x4c, 0x27, 0x92, 0xcf, 0x27, 0x60, 0xc0, 0x82, 0xba, +0x4d, 0x5d, 0xce, 0x02, 0x4e, 0x99, 0x38, 0x11, 0x75, 0x42, 0x8c, 0x4e, +0x92, 0x62, 0x0a, 0xf5, 0x84, 0x01, 0x97, 0xb0, 0xcc, 0xca, 0x10, 0x93, +0x94, 0x94, 0xd2, 0xb9, 0x74, 0xea, 0x54, 0x1e, 0x7f, 0xcc, 0x2d, 0x0f, +0xf8, 0xb4, 0x6e, 0x21, 0x70, 0xb2, 0x4d, 0x54, 0xf0, 0xca, 0x21, 0xa0, +0x90, 0xf3, 0x57, 0x60, 0x2d, 0x4d, 0xc9, 0x69, 0x50, 0xb3, 0x5a, 0x3a, +0x65, 0xc2, 0x28, 0x41, 0x29, 0xe9, 0xa0, 0xec, 0x73, 0xe0, 0x5c, 0x2a, +0x88, 0xa1, 0x2f, 0xf1, 0x25, 0x1e, 0x37, 0x2c, 0xaa, 0x5d, 0xa7, 0x2e, +0x41, 0x1c, 0xb2, 0xff, 0xce, 0xa8, 0x04, 0x1e, 0x9f, 0x9c, 0xd1, 0x3c, +0xbf, 0xd1, 0x9b, 0x6f, 0xbe, 0x29, 0x7b, 0x09, 0x56, 0x1a, 0x05, 0x89, +0xd0, 0xd5, 0xb0, 0x3d, 0x94, 0x47, 0x10, 0xef, 0x1e, 0x9c, 0x50, 0x5c, +0x7b, 0x6c, 0x28, 0xd5, 0xd3, 0xd3, 0x0a, 0x8a, 0xa6, 0xe4, 0xee, 0x0c, +0xaf, 0xd6, 0xa1, 0xf6, 0x51, 0x11, 0x82, 0x5e, 0xbc, 0xf3, 0xc3, 0xae, +0xde, 0xcb, 0x03, 0xae, 0xb9, 0xee, 0x3a, 0xf6, 0x72, 0x3d, 0x43, 0x9a, +0x97, 0x8a, 0x18, 0x20, 0x79, 0x36, 0xe0, 0xe4, 0x17, 0xbf, 0xfc, 0x65, +0xbb, 0x16, 0x2d, 0x62, 0xe3, 0x93, 0x46, 0x17, 0x3f, 0x6a, 0x13, 0x15, +0xe0, 0x27, 0xbd, 0x5e, 0x6b, 0xb0, 0x44, 0x1d, 0x5e, 0xf6, 0x0b, 0xd0, +0x25, 0xea, 0x84, 0xae, 0x61, 0x57, 0x4d, 0x3d, 0x21, 0x90, 0x59, 0x29, +0x39, 0x4a, 0x0c, 0xb5, 0xb0, 0x8b, 0xae, 0x1d, 0xda, 0xc7, 0x26, 0xa6, +0x76, 0xd8, 0x1f, 0xa8, 0xc5, 0xc2, 0xe6, 0xb2, 0x57, 0xd0, 0x69, 0x61, +0x8d, 0x8a, 0xff, 0xf6, 0x9a, 0x7c, 0x45, 0x7a, 0x8c, 0xe3, 0x47, 0xcf, +0x3d, 0xa7, 0x9a, 0xc3, 0x82, 0x07, 0x31, 0x98, 0x4a, 0x69, 0x3d, 0xd1, +0x1d, 0x71, 0x2f, 0x6c, 0xda, 0xb0, 0x3e, 0x29, 0xd1, 0xd9, 0xeb, 0xf2, +0x4d, 0x76, 0xd6, 0xdd, 0xa5, 0xab, 0xcc, 0x5c, 0xcd, 0xd2, 0x5d, 0x31, +0x7f, 0x3e, 0xb9, 0xa6, 0xe2, 0x9d, 0x30, 0xa8, 0x13, 0x81, 0x10, 0x5f, +0x95, 0xbd, 0x56, 0x69, 0xde, 0x12, 0x70, 0xce, 0x9e, 0xb2, 0x7e, 0xed, +0x8d, 0x49, 0xce, 0xa4, 0x81, 0xab, 0x0e, 0xdb, 0x59, 0xb7, 0x90, 0x39, +0xc7, 0x0a, 0x15, 0x6c, 0x01, 0x65, 0x62, 0x66, 0xa1, 0x9b, 0x10, 0x95, +0xa0, 0x5a, 0xf7, 0x18, 0xdc, 0xa5, 0x6d, 0xab, 0x77, 0xdf, 0x79, 0xc7, +0xe0, 0x43, 0x50, 0x75, 0xf5, 0x24, 0x97, 0x00, 0x76, 0xf1, 0xf4, 0x53, +0x4f, 0xa5, 0x27, 0x27, 0x35, 0xec, 0x39, 0x36, 0xa3, 0xf8, 0x5f, 0x5e, +0x5f, 0x5e, 0xd1, 0x35, 0xc7, 0x28, 0x15, 0xd3, 0xae, 0x75, 0x4b, 0x4c, +0x31, 0x12, 0x63, 0x8c, 0x9c, 0xad, 0xab, 0x13, 0x55, 0x96, 0xac, 0x03, +0x9f, 0x98, 0x00, 0x43, 0xd4, 0x6e, 0x96, 0x6e, 0xdf, 0xee, 0xdd, 0x89, +0x09, 0x89, 0x79, 0x7d, 0xa6, 0x37, 0xdb, 0xf7, 0x0f, 0xaf, 0xeb, 0x16, +0x32, 0x27, 0xd8, 0xe7, 0x15, 0x95, 0xa8, 0x57, 0xb0, 0x37, 0x0f, 0xbf, +0xe1, 0xb6, 0x3e, 0xf3, 0xd7, 0xb7, 0x1c, 0x38, 0x35, 0xaf, 0xe3, 0x90, +0xf4, 0x96, 0xfd, 0x72, 0xdb, 0x0f, 0x6c, 0x33, 0x62, 0xee, 0x80, 0x15, +0x7b, 0x47, 0x6f, 0x39, 0xeb, 0xc1, 0xa8, 0xda, 0xa0, 0x75, 0xd7, 0xbe, +0x5d, 0x3a, 0x11, 0x22, 0x2f, 0x5d, 0xc4, 0xe1, 0x0c, 0xaa, 0x6e, 0x80, +0xca, 0xcc, 0x64, 0x8f, 0x67, 0xa7, 0x87, 0x99, 0xe4, 0x66, 0xa6, 0xa7, +0xd6, 0x6c, 0xe2, 0x55, 0xe7, 0xe6, 0x76, 0x49, 0x75, 0x9a, 0x3b, 0x63, +0x1d, 0xb7, 0x1d, 0x3b, 0x26, 0xa6, 0x58, 0xb3, 0x77, 0x22, 0x70, 0xe2, +0xab, 0xb2, 0x23, 0xe8, 0x0e, 0x6f, 0xf6, 0x94, 0xdb, 0x6f, 0xbb, 0xad, +0xa0, 0x41, 0x03, 0x97, 0xef, 0x62, 0xfe, 0x3a, 0xc7, 0x96, 0xf3, 0x21, +0x43, 0xf7, 0x9e, 0xcb, 0x92, 0x57, 0x71, 0x54, 0x34, 0xdc, 0xfe, 0xa7, +0xa2, 0x1b, 0x4e, 0x12, 0x91, 0xc6, 0x3c, 0xe3, 0x1c, 0x8e, 0xba, 0x59, +0x19, 0x0d, 0x72, 0xaa, 0xd7, 0xcf, 0xae, 0xde, 0x28, 0xb7, 0x46, 0xb5, +0x24, 0xe7, 0x85, 0xc9, 0x27, 0x64, 0x36, 0xed, 0xda, 0x7f, 0xed, 0xa9, +0xc6, 0x25, 0x16, 0x8a, 0x72, 0x56, 0x41, 0x97, 0xb6, 0x4d, 0x1a, 0x52, +0x24, 0x4f, 0xdc, 0x08, 0x22, 0xe4, 0x88, 0x81, 0x48, 0x0e, 0xb1, 0xa8, +0x20, 0x09, 0x20, 0x05, 0x15, 0xf5, 0xec, 0xee, 0xcc, 0xc8, 0x69, 0xb7, +0xeb, 0x53, 0xcf, 0xaf, 0xb6, 0xfb, 0xec, 0x35, 0xdc, 0x75, 0xee, 0x65, +0x97, 0xa1, 0xbe, 0x0b, 0xd8, 0x0c, 0xde, 0x89, 0x2a, 0x4b, 0xd0, 0xc1, +0x9a, 0x98, 0xc1, 0x4a, 0x4b, 0xed, 0xf4, 0xcc, 0x78, 0x47, 0x66, 0xb3, +0x1e, 0xe1, 0xc3, 0x2e, 0xaa, 0x38, 0x2a, 0xfa, 0x5c, 0x7d, 0x30, 0x3e, +0x2d, 0x2b, 0x39, 0x3e, 0x6e, 0xc1, 0x9c, 0xcb, 0xee, 0xb8, 0xe3, 0x8e, +0x47, 0x1f, 0x7d, 0x14, 0x57, 0x03, 0xaf, 0x81, 0x9f, 0xfb, 0xef, 0xbf, +0x7f, 0xdb, 0x2d, 0xb7, 0x4c, 0x1c, 0x3d, 0x92, 0x78, 0xb5, 0xe4, 0xea, +0xb5, 0x8b, 0xae, 0x3b, 0x66, 0x6e, 0x06, 0x97, 0xd7, 0x69, 0x48, 0xad, +0x8c, 0xe4, 0xb7, 0xde, 0x7a, 0x4b, 0x95, 0x5d, 0x52, 0xda, 0xb0, 0x94, +0x61, 0x15, 0x49, 0x00, 0xc0, 0x40, 0xdf, 0x37, 0x5c, 0x77, 0x6d, 0x7c, +0x6c, 0xfc, 0x10, 0x14, 0x74, 0xf7, 0x1b, 0x49, 0xa3, 0x1d, 0x7f, 0x8e, +0xab, 0x56, 0xa7, 0x49, 0xa3, 0x86, 0x2f, 0x3c, 0xff, 0x3c, 0x8c, 0x02, +0x26, 0xa3, 0xf3, 0x9f, 0xf0, 0xb3, 0x3b, 0x79, 0x4e, 0xf5, 0x16, 0xed, +0x02, 0xe9, 0x7a, 0x68, 0xbf, 0xde, 0xce, 0xac, 0x7a, 0x93, 0x0f, 0xbc, +0x1c, 0x7e, 0xbc, 0xe2, 0x27, 0x3f, 0xf9, 0x09, 0xaa, 0xa3, 0xb5, 0xbf, +0xa2, 0x52, 0xf4, 0x0a, 0x48, 0x30, 0xb9, 0x5e, 0x2b, 0x6c, 0x7f, 0xc5, +0x5b, 0xb7, 0xfe, 0xec, 0x67, 0x3f, 0xc3, 0x8e, 0x24, 0x4d, 0x7d, 0xc4, +0xd5, 0xc0, 0x67, 0x76, 0x6b, 0xa2, 0x0f, 0x6e, 0xb9, 0x79, 0x53, 0x7a, +0x7c, 0x4c, 0xbc, 0x33, 0xad, 0xef, 0xd2, 0xbd, 0x65, 0x2b, 0x6c, 0x9f, +0x6f, 0x3f, 0x6e, 0x21, 0xb0, 0x7f, 0xe5, 0xe5, 0x97, 0xcd, 0xe1, 0xab, +0x82, 0x0a, 0xb1, 0x33, 0x8a, 0xf5, 0xfd, 0xa9, 0x27, 0x9f, 0xe4, 0xe4, +0xa6, 0xfd, 0x26, 0x64, 0xbb, 0xef, 0x25, 0x37, 0x62, 0xf3, 0x59, 0xce, +0x19, 0x3d, 0x62, 0x84, 0x54, 0x4a, 0x8e, 0x04, 0xbb, 0x93, 0x3b, 0x60, +0x28, 0xa7, 0x1e, 0xda, 0xc5, 0xfa, 0x35, 0xd7, 0xb3, 0x2c, 0x83, 0xaf, +0x3f, 0x5e, 0x6d, 0xc7, 0xb7, 0xe1, 0x00, 0x0c, 0x3b, 0xbc, 0x02, 0x92, +0xaa, 0x14, 0x54, 0x8c, 0x58, 0x7f, 0x8f, 0x90, 0x20, 0xa4, 0x4f, 0xcf, +0x2b, 0x31, 0xad, 0x4a, 0x83, 0x1f, 0x69, 0xe7, 0xc3, 0xac, 0x00, 0x09, +0x7f, 0x22, 0x8b, 0xb2, 0x76, 0x76, 0x96, 0x23, 0x3e, 0x79, 0xc0, 0xb5, +0xc7, 0xb4, 0x58, 0xce, 0xf3, 0xfd, 0xaf, 0x2a, 0x66, 0x84, 0x53, 0x77, +0xdd, 0x29, 0x4a, 0x05, 0xc2, 0x92, 0x88, 0x4f, 0x02, 0x09, 0x95, 0x5b, +0xc3, 0x9f, 0x18, 0xf0, 0xe3, 0x8f, 0x3e, 0x6a, 0x54, 0x33, 0x27, 0xb5, +0x6e, 0x2b, 0x1a, 0x70, 0x59, 0xbe, 0xda, 0xf4, 0x6d, 0xdf, 0x74, 0x9d, +0xb1, 0x3a, 0x39, 0x21, 0x61, 0xc3, 0x4d, 0x37, 0xa1, 0x87, 0x30, 0x19, +0x29, 0xd5, 0xa1, 0x7c, 0x76, 0xc1, 0x12, 0x51, 0xaa, 0xfe, 0x38, 0xba, +0x76, 0x81, 0x5c, 0xfa, 0xe4, 0xe3, 0x8f, 0xb3, 0xce, 0x2d, 0xc6, 0x2e, +0x69, 0xba, 0x37, 0x2c, 0x74, 0x6e, 0x3b, 0x36, 0xa8, 0xca, 0x42, 0x45, +0xcf, 0x59, 0xd7, 0xa7, 0x27, 0x25, 0x6d, 0xdf, 0xb6, 0x8d, 0x0a, 0x45, +0x52, 0x46, 0x89, 0x99, 0xb0, 0x3d, 0x4b, 0x23, 0x1f, 0x3e, 0x48, 0x23, +0x1f, 0xf6, 0x6c, 0xfe, 0x7a, 0xfa, 0xd4, 0xa9, 0x9c, 0x6a, 0x99, 0x8e, +0xc4, 0xf4, 0xa1, 0x1b, 0xce, 0x34, 0x3f, 0xf0, 0xb5, 0x90, 0xf5, 0xd8, +0x0d, 0xa7, 0x78, 0xc0, 0x4d, 0x37, 0xad, 0xd5, 0x2b, 0x6b, 0x28, 0xaf, +0xb3, 0xc8, 0xc7, 0xc8, 0x54, 0xbc, 0x57, 0x86, 0x02, 0x5d, 0xd3, 0x27, +0x8e, 0xc7, 0xc9, 0x3d, 0x7a, 0xf3, 0x7d, 0x96, 0xa8, 0x80, 0x77, 0xd5, +0x6c, 0xd5, 0xa3, 0x66, 0x76, 0x8d, 0x67, 0x9e, 0x7e, 0x5a, 0x58, 0xaa, +0x28, 0x2a, 0x02, 0xb3, 0xaa, 0x4f, 0xca, 0xc1, 0x9d, 0xa1, 0xee, 0xbb, +0xa0, 0x20, 0x67, 0xdd, 0xcc, 0x94, 0xcc, 0x96, 0x45, 0x1d, 0xf7, 0xff, +0x29, 0x5c, 0x79, 0x85, 0xd1, 0x32, 0x2b, 0xca, 0x28, 0xe2, 0x4a, 0x05, +0xfb, 0xb6, 0x5b, 0x14, 0x8d, 0xcf, 0xad, 0x56, 0x8d, 0x12, 0xc5, 0x22, +0xae, 0xa8, 0x1a, 0x19, 0xe2, 0x6a, 0x90, 0xa2, 0xf3, 0x20, 0x04, 0x3e, +0x20, 0x7c, 0xe3, 0xe4, 0x1d, 0x77, 0x54, 0xcb, 0x48, 0x8f, 0x4b, 0xcb, +0x19, 0xb5, 0xfd, 0xa9, 0x96, 0x87, 0x5c, 0xde, 0xd6, 0x19, 0xb7, 0xbf, +0x93, 0x54, 0xa3, 0x7e, 0xbf, 0x6e, 0x5d, 0xd8, 0xd7, 0xcd, 0xb1, 0x18, +0x3a, 0x2a, 0x18, 0x04, 0xc1, 0xac, 0xa4, 0x78, 0x1b, 0xcf, 0x38, 0x60, +0x69, 0x89, 0xa5, 0x39, 0xa5, 0xf5, 0xf6, 0x5f, 0xc5, 0x25, 0xa6, 0x76, +0x6e, 0xdf, 0x0e, 0x94, 0x72, 0x32, 0xcb, 0x22, 0x6e, 0xbb, 0x08, 0x51, +0x27, 0xcc, 0xa0, 0x92, 0xca, 0x9c, 0xbc, 0x0e, 0x56, 0x63, 0xf4, 0xe0, +0x01, 0x31, 0xe9, 0x35, 0x27, 0xed, 0x7f, 0x31, 0xcc, 0x50, 0xa1, 0xf4, +0x8a, 0xaa, 0x82, 0x8a, 0xec, 0x26, 0x9d, 0x6a, 0xe7, 0x64, 0xd3, 0xfe, +0x47, 0x59, 0x7b, 0x54, 0x21, 0x7b, 0xe9, 0xfd, 0xa3, 0x3c, 0x71, 0xb0, +0x0e, 0x68, 0x94, 0xcd, 0x9b, 0xc8, 0xbf, 0x14, 0xbc, 0x4a, 0xd9, 0x0d, +0xc6, 0xec, 0x7b, 0x09, 0xca, 0x6e, 0x75, 0xeb, 0xb7, 0xd9, 0xed, 0x07, +0xa7, 0xc6, 0x38, 0x7e, 0xf9, 0x8b, 0x5f, 0x18, 0xb2, 0x1d, 0x54, 0x8c, +0x34, 0xf2, 0x0f, 0xc4, 0x2d, 0x7d, 0x80, 0x88, 0x7b, 0x05, 0x15, 0x9d, +0xa7, 0x5f, 0x63, 0x89, 0x8a, 0x61, 0xd7, 0xdf, 0x96, 0x98, 0x98, 0x74, +0xf9, 0xbc, 0xb9, 0x34, 0x32, 0x05, 0xa5, 0x00, 0x49, 0x44, 0xb2, 0x88, +0x45, 0x85, 0x6c, 0x2b, 0x12, 0x00, 0xb2, 0xe1, 0xa6, 0xb5, 0x2c, 0xdd, +0xf0, 0x75, 0xa7, 0xa2, 0xa8, 0x70, 0xdf, 0x6f, 0xcf, 0x6b, 0x9b, 0x4a, +0x1b, 0x27, 0x64, 0x17, 0x14, 0xd6, 0xce, 0xce, 0x7e, 0xf9, 0xa5, 0x97, +0x70, 0x95, 0x88, 0x5b, 0x40, 0x12, 0xa0, 0x95, 0x5d, 0x55, 0xb2, 0x61, +0x54, 0xb3, 0x12, 0x91, 0xac, 0xf0, 0x2b, 0x61, 0xc3, 0x4d, 0xaf, 0x55, +0x30, 0xee, 0xd0, 0x6b, 0x10, 0x77, 0xc3, 0x49, 0xab, 0xe3, 0x1c, 0x31, +0xc7, 0x8f, 0x1d, 0x95, 0x5a, 0x7d, 0x7a, 0x28, 0xab, 0x2e, 0x03, 0x70, +0x21, 0x12, 0x1a, 0xa2, 0x11, 0x41, 0x1c, 0xf5, 0xfb, 0x4d, 0x4d, 0x2d, +0xfe, 0xce, 0xfc, 0x76, 0x7b, 0x5d, 0x76, 0x43, 0x72, 0x42, 0xe2, 0xf6, +0xe2, 0x62, 0xa2, 0x0c, 0x81, 0x10, 0xa8, 0x10, 0xa5, 0x22, 0x92, 0x51, +0xc1, 0xb3, 0xb3, 0xaa, 0x2e, 0xc7, 0xc5, 0x31, 0x3c, 0x9b, 0x8e, 0x5e, +0x4b, 0xf7, 0xa6, 0x16, 0x7f, 0x1f, 0xf2, 0xc0, 0xd0, 0x84, 0xa2, 0x2a, +0xc7, 0x2b, 0x5a, 0x0d, 0x9c, 0x96, 0x9d, 0x99, 0x79, 0xe6, 0xde, 0x7b, +0x15, 0x2a, 0xf4, 0xd8, 0x3b, 0x61, 0xdf, 0x52, 0x0a, 0x52, 0xf1, 0x0d, +0x5e, 0x0f, 0x1a, 0xf0, 0xb6, 0x2d, 0x5b, 0x78, 0xae, 0xb4, 0x3a, 0xcd, +0x78, 0x3d, 0x6d, 0x6f, 0x7e, 0xc1, 0x99, 0x52, 0x7d, 0xcc, 0xb0, 0x21, +0xe6, 0xba, 0xdf, 0x4a, 0x65, 0x14, 0x37, 0x2d, 0xc0, 0xc3, 0x57, 0x5d, +0x37, 0x2b, 0x3d, 0xa3, 0x79, 0x9f, 0xfa, 0xbb, 0xbf, 0x32, 0xbf, 0xda, +0xd6, 0x03, 0xa7, 0xa4, 0x26, 0xc4, 0x3d, 0xfc, 0xd0, 0x43, 0x48, 0x74, +0x12, 0xf8, 0xa4, 0x47, 0x8c, 0x07, 0x57, 0x6a, 0x0f, 0x89, 0xd1, 0x64, +0x01, 0xc5, 0xe7, 0x43, 0xdd, 0x30, 0xd6, 0xbc, 0xe5, 0x9c, 0xad, 0xf5, +0x77, 0x5d, 0x54, 0xea, 0x42, 0x18, 0x1b, 0x55, 0x19, 0x15, 0xbd, 0x66, +0x5d, 0x9f, 0x91, 0x9c, 0xbc, 0x7b, 0x67, 0x89, 0xa0, 0x02, 0xc2, 0x35, +0x53, 0xb6, 0x01, 0x1b, 0x12, 0xe0, 0x04, 0x36, 0x36, 0xaf, 0x5f, 0xc7, +0xa3, 0x25, 0xd7, 0x2a, 0xe8, 0xb0, 0xed, 0xf5, 0x6a, 0x2d, 0xfb, 0xd4, +0xce, 0xaa, 0xfe, 0xa7, 0x3f, 0xfe, 0xd1, 0xc0, 0x28, 0x14, 0x2a, 0x44, +0x06, 0x40, 0x6f, 0xf9, 0xe0, 0x27, 0x3f, 0xe9, 0xd4, 0xa2, 0x69, 0x52, +0x9d, 0xd6, 0xad, 0xf7, 0xff, 0xd5, 0xf4, 0x52, 0xcf, 0xe7, 0x36, 0xef, +0x9c, 0x16, 0x1f, 0xfb, 0xd6, 0x9b, 0x6f, 0x22, 0xd1, 0xa1, 0xa8, 0xc0, +0x5e, 0xa2, 0xa8, 0x10, 0x9f, 0x0f, 0xa8, 0x38, 0x7d, 0x8f, 0xcb, 0x60, +0x98, 0xd7, 0xe7, 0xd2, 0x56, 0x7b, 0x7d, 0x88, 0x3b, 0xae, 0xa2, 0xc8, +0xa9, 0xca, 0xa8, 0x18, 0xb9, 0xc1, 0xb5, 0xd0, 0x93, 0x2f, 0x64, 0x2f, +0xc8, 0xde, 0xac, 0x24, 0x28, 0x95, 0xd0, 0x23, 0x94, 0xad, 0xb0, 0xa1, +0x58, 0x07, 0x1b, 0x58, 0xc9, 0xb6, 0x6d, 0x88, 0x52, 0x49, 0xb5, 0x5b, +0xe4, 0x76, 0x9b, 0x90, 0x91, 0x96, 0x7e, 0xcf, 0xdd, 0x77, 0xab, 0xab, +0xd4, 0x4e, 0x2c, 0x17, 0x8a, 0x0c, 0x80, 0x44, 0x84, 0x57, 0xa4, 0x5f, +0xd7, 0xc2, 0x84, 0x9c, 0xfc, 0xc2, 0x03, 0x7f, 0x36, 0xa3, 0xa2, 0x56, +0xa7, 0xc1, 0x69, 0x09, 0xf1, 0x4f, 0x3f, 0xf9, 0xa4, 0x8e, 0x52, 0xee, +0x18, 0xd2, 0xa9, 0x76, 0x81, 0x30, 0x25, 0x15, 0x13, 0xc5, 0x7b, 0xf9, +0xf9, 0xcf, 0x7e, 0xd6, 0xbb, 0x4b, 0xa1, 0xc3, 0x99, 0xd9, 0x61, 0x8f, +0xb5, 0x5d, 0xbb, 0x8a, 0x02, 0xc0, 0x52, 0x92, 0xaf, 0xca, 0xa8, 0x20, +0xe2, 0x28, 0xbe, 0x46, 0xfd, 0x82, 0xc6, 0x8d, 0x70, 0xc3, 0xa1, 0xdd, +0x4a, 0x4e, 0x8f, 0xb2, 0x84, 0x8a, 0xba, 0xac, 0x1f, 0x0a, 0x1e, 0x22, +0x59, 0x71, 0x1c, 0xdc, 0xb7, 0x2f, 0x39, 0x31, 0x21, 0x21, 0xa7, 0x31, +0xf0, 0x58, 0x30, 0x67, 0x8e, 0x39, 0x59, 0x54, 0x99, 0xa1, 0x24, 0x93, +0x06, 0xe3, 0xec, 0xc8, 0x41, 0xfd, 0x1d, 0x58, 0xb1, 0x76, 0xff, 0xc8, +0xfc, 0x16, 0x3b, 0x8c, 0x5f, 0x94, 0x92, 0x90, 0x70, 0xc7, 0xed, 0xb7, +0xe3, 0xac, 0x90, 0x6c, 0x0a, 0xe1, 0x15, 0x11, 0x8e, 0x0a, 0xd9, 0x53, +0xe0, 0xb4, 0x57, 0xcc, 0x9d, 0x03, 0x39, 0x4d, 0xd8, 0xfd, 0x4c, 0x28, +0x01, 0x20, 0xe4, 0x50, 0xc1, 0xe2, 0x76, 0x9b, 0xe9, 0x72, 0x9a, 0x2e, +0xba, 0xe2, 0x0a, 0xc9, 0xff, 0x14, 0x85, 0x5b, 0x79, 0xe2, 0x74, 0x2a, +0x57, 0xf0, 0x50, 0x1e, 0x3a, 0xe1, 0x03, 0xc7, 0x8f, 0x1d, 0x4b, 0x49, +0x4e, 0x66, 0x90, 0xee, 0xdd, 0xba, 0x99, 0xc9, 0x57, 0xed, 0x76, 0xd0, +0x37, 0x0a, 0x09, 0x72, 0xda, 0xbc, 0x79, 0x73, 0x39, 0x39, 0xa7, 0xeb, +0xb8, 0x2e, 0x07, 0x8c, 0xa6, 0xf7, 0x01, 0x8b, 0x8b, 0x93, 0x13, 0x9c, +0x84, 0x99, 0xe0, 0x4f, 0x14, 0x88, 0x8a, 0xea, 0x1f, 0xc9, 0xa8, 0x50, +0x0e, 0x9f, 0x4f, 0x3e, 0xfe, 0xb8, 0x67, 0xa7, 0x8e, 0xb1, 0xd5, 0xea, +0xb5, 0xdb, 0xf3, 0xc7, 0x08, 0x42, 0x05, 0xfb, 0x68, 0x05, 0xfb, 0x2b, +0x58, 0x5c, 0x42, 0x9b, 0x92, 0x6a, 0x35, 0x75, 0xc6, 0x39, 0x76, 0xef, +0xdc, 0x29, 0x2e, 0x02, 0xdd, 0x9d, 0x6c, 0x69, 0xfc, 0x31, 0xf3, 0x90, +0x07, 0xce, 0x9c, 0x69, 0xdb, 0xa2, 0xc5, 0x94, 0x09, 0x13, 0xcc, 0xd2, +0x82, 0x21, 0x02, 0x94, 0xed, 0xff, 0x9d, 0x77, 0xde, 0x19, 0x3b, 0x7c, +0x18, 0x4f, 0xda, 0x60, 0xda, 0x86, 0x91, 0x25, 0xcf, 0xea, 0x11, 0x6f, +0x63, 0x36, 0x9e, 0x72, 0x26, 0x26, 0xaf, 0x58, 0xba, 0x44, 0xcc, 0xb2, +0x6c, 0x90, 0x11, 0xe8, 0xd5, 0xd6, 0xd7, 0x50, 0xf6, 0x1d, 0xd9, 0x50, +0x8e, 0x1e, 0x39, 0xe2, 0x72, 0x6f, 0x8f, 0x59, 0x98, 0x53, 0x12, 0xfa, +0x79, 0x79, 0x55, 0x59, 0x82, 0x92, 0x2d, 0x67, 0xc0, 0xf5, 0x27, 0x62, +0x93, 0x32, 0x32, 0x52, 0x92, 0xb0, 0xfd, 0x89, 0x7b, 0x5b, 0xbc, 0x16, +0xaa, 0x82, 0x86, 0x1d, 0xc9, 0x98, 0xee, 0xbd, 0xc4, 0x4e, 0x79, 0x0d, +0xe9, 0x91, 0x9e, 0x26, 0x08, 0x6c, 0x05, 0x8d, 0x1a, 0x39, 0x62, 0x9c, +0x54, 0xa8, 0x4f, 0xab, 0xd3, 0xbc, 0xf7, 0x9c, 0x35, 0x82, 0x8d, 0xe6, +0xfb, 0xbf, 0x8a, 0x4f, 0x4c, 0xeb, 0xd7, 0xb3, 0x87, 0xa8, 0xfe, 0x32, +0x87, 0x08, 0x37, 0xcb, 0xb2, 0x02, 0xac, 0xc3, 0x2f, 0x7f, 0xfe, 0xf3, +0xb6, 0x2d, 0x9a, 0x51, 0x14, 0x62, 0x5c, 0xf1, 0x23, 0x21, 0xcf, 0x28, +0xa0, 0x3a, 0xaf, 0xa8, 0xa0, 0x1f, 0x3d, 0x22, 0x63, 0xa5, 0xf8, 0xb6, +0x65, 0x7d, 0xc9, 0x05, 0xed, 0x7f, 0xcd, 0x61, 0x80, 0x91, 0x95, 0x96, +0x72, 0xef, 0xe9, 0xd3, 0xc8, 0x51, 0x12, 0xbe, 0x11, 0xac, 0x5c, 0x50, +0x61, 0x17, 0x22, 0x09, 0xa8, 0x66, 0x3f, 0x84, 0x99, 0x14, 0xf5, 0xea, +0x31, 0x6e, 0xd8, 0x90, 0x7a, 0xd9, 0x59, 0x78, 0x30, 0x52, 0x72, 0x1b, +0x4d, 0x3b, 0x84, 0x5b, 0xf0, 0xbf, 0x19, 0x4d, 0xbb, 0xd7, 0xcd, 0xcd, +0x79, 0xe7, 0xad, 0xb7, 0x0c, 0x1a, 0x8e, 0x1d, 0x64, 0x86, 0xd3, 0x39, +0x06, 0x1f, 0xe8, 0xfa, 0x1b, 0x5d, 0xd1, 0xf5, 0x03, 0x96, 0xec, 0x08, +0x93, 0x60, 0x72, 0xfb, 0xa8, 0xa8, 0x14, 0x09, 0x4a, 0x80, 0x41, 0x26, +0x50, 0xff, 0xab, 0x0f, 0xc7, 0x3b, 0x53, 0xa9, 0x4b, 0xf0, 0xe8, 0xc3, +0x0f, 0xab, 0xca, 0x7c, 0xc1, 0x12, 0x60, 0x74, 0x39, 0x4a, 0x0c, 0xbb, +0x12, 0x48, 0xc2, 0x8d, 0xd0, 0x67, 0x56, 0x2e, 0x5d, 0xca, 0x2a, 0x55, +0x6b, 0xd5, 0x8f, 0x99, 0xd4, 0x9f, 0xb6, 0x3e, 0x29, 0x36, 0x76, 0xdb, +0xe6, 0xcd, 0x51, 0xff, 0x1d, 0x8b, 0x26, 0x5e, 0xd4, 0x47, 0x1e, 0x7e, +0x28, 0x3d, 0xd6, 0x91, 0x56, 0xb7, 0x45, 0x8b, 0x83, 0xff, 0x0c, 0x07, +0x46, 0x61, 0x9f, 0x57, 0x20, 0xd3, 0x57, 0x22, 0x2a, 0x58, 0xeb, 0x26, +0xbb, 0xfe, 0xda, 0x7f, 0xc5, 0x81, 0xf8, 0x78, 0x67, 0xc3, 0x5a, 0x79, +0x78, 0xa0, 0x95, 0x3d, 0x4a, 0x64, 0x98, 0x00, 0xb7, 0x61, 0xd9, 0xf9, +0x24, 0x84, 0x16, 0xa4, 0xe9, 0xce, 0xf2, 0x0b, 0x41, 0x56, 0x7f, 0x99, +0x77, 0xd9, 0x6c, 0x80, 0xd1, 0x74, 0xe1, 0xa1, 0xf6, 0xc5, 0xaf, 0xf1, +0x61, 0x70, 0xff, 0xa2, 0xaf, 0xbf, 0xfa, 0x2a, 0x2a, 0x3e, 0xb1, 0x02, +0xef, 0xbc, 0xfd, 0x76, 0xa3, 0x5a, 0x79, 0x89, 0xc9, 0x19, 0xae, 0x18, +0x7b, 0x1b, 0xf1, 0x0a, 0xa1, 0x71, 0x8e, 0x89, 0x57, 0xb0, 0x39, 0x96, +0x89, 0x83, 0x12, 0x09, 0xaa, 0xd2, 0x51, 0xe1, 0x02, 0xc6, 0xee, 0x2f, +0x8b, 0x96, 0xee, 0x66, 0xc2, 0xcd, 0x1a, 0x36, 0x78, 0xf1, 0x85, 0x17, +0xa4, 0x29, 0x44, 0xb0, 0x02, 0x2e, 0x14, 0x30, 0x54, 0xb3, 0x5d, 0x09, +0xb2, 0x92, 0x6a, 0x20, 0xcf, 0xff, 0xe8, 0x47, 0x8d, 0x6a, 0xe6, 0xa6, +0xb7, 0x19, 0xd8, 0xf9, 0xf0, 0xff, 0xd4, 0xec, 0x7f, 0x99, 0xab, 0xaf, +0xd7, 0x35, 0xd7, 0x70, 0x42, 0x24, 0x5b, 0x9f, 0xd8, 0x44, 0xb0, 0xc5, +0xf5, 0xea, 0xda, 0xc5, 0xe1, 0x88, 0x29, 0x58, 0x78, 0xb0, 0xe5, 0xa1, +0xb0, 0xc8, 0xac, 0x10, 0x60, 0x87, 0x10, 0x2a, 0x98, 0x2e, 0x65, 0xea, +0xfa, 0x2d, 0xde, 0xce, 0x9c, 0xdb, 0xb7, 0x6c, 0xf1, 0xce, 0xdb, 0xef, +0x04, 0xdd, 0x36, 0xaa, 0x63, 0x43, 0x02, 0x49, 0xc4, 0x59, 0x4e, 0xdc, +0x78, 0xcf, 0xce, 0x85, 0xb1, 0xb9, 0x4d, 0x3a, 0x1f, 0xfe, 0x75, 0xe1, +0xde, 0x8f, 0xe3, 0x6b, 0x36, 0x6f, 0x96, 0xdf, 0xf0, 0xa3, 0x0f, 0x3f, +0x8c, 0x70, 0x54, 0x48, 0x95, 0xb4, 0x9a, 0xfd, 0x66, 0xb5, 0xdb, 0xf2, +0x72, 0x93, 0xf9, 0x7b, 0x87, 0xdd, 0x74, 0x4f, 0xb3, 0xfd, 0x16, 0x91, +0x32, 0xa1, 0xc1, 0x1f, 0x74, 0x46, 0xa7, 0xa1, 0x82, 0xf4, 0x66, 0x82, +0x41, 0xab, 0x2e, 0xaf, 0x90, 0xc5, 0x25, 0xa9, 0xa8, 0xdf, 0xc2, 0xcd, +0x4c, 0xbb, 0x47, 0x61, 0x21, 0x11, 0xdd, 0x2a, 0xe6, 0x22, 0x40, 0x21, +0xca, 0xb2, 0x4e, 0x9e, 0x08, 0x54, 0x02, 0x8f, 0x59, 0xd3, 0xa7, 0x73, +0xd3, 0xdc, 0x6e, 0xe3, 0x5b, 0x5d, 0xff, 0x50, 0x4a, 0xe3, 0xce, 0xb9, +0x19, 0xa9, 0xaf, 0xbc, 0xf4, 0x52, 0x10, 0x6f, 0x1a, 0x5a, 0x43, 0xc9, +0xf6, 0x41, 0xa7, 0x0e, 0xd6, 0xc4, 0x59, 0xbd, 0x4e, 0x52, 0x56, 0x9d, +0xb8, 0x38, 0x67, 0x7c, 0x42, 0x4a, 0x52, 0xf5, 0x5a, 0x5d, 0xc7, 0xce, +0x29, 0x9b, 0x11, 0x59, 0xbe, 0x21, 0xa4, 0xe5, 0x02, 0xb9, 0xd0, 0xe2, +0x15, 0xb2, 0x04, 0x18, 0x3a, 0xfa, 0x2e, 0xd8, 0xc0, 0xcc, 0x47, 0x0c, +0x1a, 0x88, 0x49, 0x2a, 0x58, 0x42, 0x94, 0x01, 0x18, 0xca, 0x36, 0x25, +0x32, 0x15, 0x62, 0xe4, 0xcc, 0x69, 0x53, 0x29, 0xa0, 0x90, 0x10, 0x9f, +0x84, 0x55, 0xea, 0xea, 0x65, 0xcb, 0x22, 0x96, 0x51, 0xb0, 0x50, 0x82, +0x0a, 0x38, 0xe9, 0xe3, 0xe7, 0xce, 0x0d, 0xee, 0xd7, 0x67, 0xdc, 0xb0, +0x61, 0x1b, 0xd6, 0xae, 0x59, 0xb5, 0x6c, 0x69, 0x9f, 0x2e, 0x85, 0x29, +0xf1, 0x71, 0xce, 0xcc, 0xdc, 0xf1, 0x7b, 0x9f, 0x2d, 0x17, 0x7a, 0xad, +0x18, 0xd5, 0xc5, 0x0a, 0x15, 0x50, 0x5a, 0x69, 0x3d, 0xa8, 0xaa, 0xa3, +0x57, 0xe8, 0xab, 0xdc, 0xf5, 0xd0, 0xe7, 0xd5, 0x5a, 0xf6, 0x4d, 0x74, +0x38, 0x08, 0xbf, 0x29, 0x0f, 0x54, 0xa8, 0x17, 0x2f, 0xd8, 0x50, 0x07, +0x89, 0x4d, 0x57, 0x2e, 0x58, 0xf0, 0xf8, 0xa3, 0x8f, 0x02, 0x95, 0xd0, +0xda, 0xdd, 0x83, 0x3e, 0x5b, 0xdd, 0xa2, 0xad, 0xea, 0xcd, 0x11, 0x60, +0x7f, 0xf3, 0x86, 0x0d, 0xa9, 0x71, 0x8e, 0xd4, 0x5a, 0x05, 0x4d, 0x76, +0x9b, 0x23, 0x2c, 0x43, 0x84, 0x6f, 0xd8, 0xe7, 0x15, 0x84, 0xe8, 0x55, +0xbc, 0x6f, 0xdb, 0x72, 0xbf, 0x41, 0x88, 0xea, 0x7f, 0x55, 0x89, 0x2b, +0x88, 0xa3, 0x73, 0x21, 0xbe, 0xb9, 0x0a, 0x08, 0xbb, 0x50, 0xfe, 0xf2, +0xa0, 0xd3, 0x56, 0x48, 0x0f, 0xa8, 0x5b, 0xb4, 0x05, 0x18, 0xe2, 0xda, +0x5a, 0xb5, 0x72, 0xa5, 0xeb, 0xed, 0x4c, 0xb9, 0x2a, 0x54, 0x81, 0x61, +0x5f, 0xaf, 0xa8, 0x3a, 0xa8, 0xe8, 0xbf, 0xf2, 0x80, 0x2b, 0xb8, 0xa0, +0xa0, 0xc9, 0x1b, 0xaf, 0xbd, 0xa6, 0xa2, 0x68, 0x23, 0x59, 0x9e, 0xa9, +0x44, 0x68, 0x19, 0x80, 0x41, 0x64, 0x00, 0x4e, 0x1e, 0xb2, 0xb2, 0x7a, +0x74, 0xee, 0xe4, 0x48, 0x48, 0x19, 0xb5, 0xe9, 0x74, 0x48, 0x96, 0x4e, +0x0b, 0x39, 0x54, 0xe0, 0xd1, 0x73, 0xd6, 0x6c, 0x9a, 0x57, 0xbd, 0xda, +0xc3, 0x67, 0xcf, 0xaa, 0xcc, 0xe9, 0x48, 0x0e, 0xd1, 0xab, 0x44, 0x48, +0xc8, 0xad, 0x0d, 0xb1, 0x64, 0x02, 0x8c, 0x47, 0x1f, 0x7a, 0x08, 0xfb, +0x75, 0xcb, 0x51, 0x0b, 0x42, 0x32, 0x2c, 0x2a, 0xe4, 0x50, 0xd1, 0x73, +0xc1, 0xcd, 0xcc, 0x79, 0xe1, 0xe5, 0x97, 0xab, 0xcc, 0xe9, 0x48, 0xae, +0x27, 0x50, 0xe9, 0x90, 0x50, 0x0a, 0x98, 0x5e, 0xa1, 0x54, 0xba, 0x84, +0x51, 0xe1, 0x97, 0x18, 0xfe, 0xf6, 0xfb, 0xcc, 0x99, 0x2a, 0x55, 0x5e, +0xbb, 0xb0, 0x83, 0x0a, 0xa0, 0x8f, 0xbf, 0xa6, 0x2a, 0x48, 0x50, 0x34, +0x52, 0xa1, 0xb9, 0x4e, 0x83, 0xda, 0xb5, 0xe8, 0x47, 0x81, 0x62, 0xc7, +0xea, 0x47, 0x78, 0xe4, 0x45, 0x55, 0x40, 0x85, 0x62, 0x17, 0x7a, 0x33, +0x24, 0x62, 0x02, 0xae, 0x5e, 0xe6, 0x8a, 0x94, 0x19, 0xb7, 0x25, 0x04, +0x7b, 0xbe, 0x58, 0xa1, 0xc2, 0x68, 0x83, 0xaa, 0x3a, 0xa8, 0x18, 0xbd, +0xc3, 0x55, 0x8d, 0x6b, 0xec, 0xc8, 0x91, 0x84, 0x9f, 0x48, 0xba, 0x85, +0x42, 0x45, 0x15, 0xa1, 0x8f, 0x88, 0x9d, 0x86, 0x41, 0xc1, 0x20, 0xf2, +0x40, 0x72, 0x56, 0xfb, 0x5c, 0x7e, 0x73, 0xe8, 0x99, 0x68, 0xbd, 0xa2, +0x02, 0x1b, 0x6d, 0xd5, 0x41, 0xc5, 0xc0, 0xa5, 0x25, 0x94, 0xee, 0xbb, +0x71, 0xcd, 0x1a, 0x32, 0xa7, 0xa5, 0xea, 0x47, 0x84, 0x67, 0xc3, 0x55, +0x29, 0x10, 0x2a, 0x60, 0x48, 0x1e, 0x3c, 0x61, 0x32, 0x35, 0xd3, 0x93, +0x1b, 0xf4, 0x9b, 0x16, 0x7a, 0x65, 0x36, 0x43, 0x0b, 0x15, 0xdd, 0x26, +0xcc, 0xaf, 0x91, 0x91, 0x41, 0xd5, 0x8f, 0x68, 0x8e, 0x68, 0x95, 0xc2, +0x83, 0x9a, 0x0c, 0xc0, 0x50, 0x95, 0xde, 0xdf, 0x7b, 0xf7, 0x5d, 0x0a, +0xc2, 0x27, 0x37, 0xee, 0xd2, 0x6c, 0xdf, 0xdf, 0x43, 0x8c, 0x5d, 0xd8, +0x47, 0x05, 0xe6, 0xb6, 0x4a, 0xf7, 0x57, 0xb4, 0xee, 0x3e, 0xb0, 0x76, +0x4e, 0x0e, 0xe9, 0x72, 0xc4, 0xa5, 0x48, 0x3d, 0xf0, 0x0a, 0x70, 0x56, +0x54, 0x4d, 0xfa, 0xab, 0x9a, 0xb3, 0x12, 0x76, 0x21, 0x95, 0xde, 0xe1, +0xe7, 0x83, 0xfa, 0xf4, 0x74, 0x64, 0xd4, 0xe9, 0x74, 0x20, 0xd4, 0xfa, +0x83, 0x85, 0x16, 0x2a, 0x1a, 0x36, 0x6d, 0xdd, 0xb8, 0x6e, 0x6d, 0xc2, +0x9f, 0x08, 0xd7, 0x8b, 0x66, 0x4e, 0x57, 0x59, 0x60, 0xa8, 0x4a, 0xef, +0x33, 0xa6, 0x4c, 0x82, 0xc0, 0x26, 0xec, 0x7d, 0x2e, 0xa4, 0x78, 0xc5, +0x7f, 0xf4, 0xdd, 0x5f, 0x45, 0x07, 0x96, 0xd1, 0xb6, 0x95, 0x5e, 0x51, +0x15, 0x78, 0x45, 0x5e, 0xdd, 0x46, 0xed, 0x5a, 0x36, 0x27, 0x86, 0x11, +0x9b, 0x18, 0x56, 0x0e, 0x84, 0xd7, 0x60, 0x25, 0x1e, 0x55, 0x4d, 0x0a, +0x0b, 0xc5, 0x59, 0xa9, 0x6c, 0x24, 0x38, 0xf9, 0xbc, 0xd9, 0x33, 0xa1, +0xb0, 0x9e, 0x37, 0x3d, 0x18, 0x52, 0xa8, 0x28, 0x13, 0x49, 0x2e, 0xa8, +0x90, 0x12, 0xf4, 0xa5, 0x71, 0x50, 0x55, 0x0a, 0x15, 0xa9, 0x19, 0xd9, +0xfd, 0x7b, 0xf7, 0xa2, 0xcb, 0x06, 0xf9, 0x1e, 0x51, 0x54, 0x54, 0x4d, +0xcc, 0xe8, 0xa8, 0x98, 0x3b, 0xcb, 0x85, 0x8a, 0xe6, 0x57, 0x87, 0x5a, +0xf1, 0x59, 0x93, 0x04, 0x65, 0x8d, 0x0a, 0x24, 0x96, 0xaa, 0xc0, 0x2b, +0x12, 0x93, 0x32, 0x06, 0xf5, 0xeb, 0xcb, 0x4c, 0x14, 0x2a, 0xa2, 0x7a, +0x45, 0x55, 0xc3, 0x86, 0xa0, 0x02, 0x33, 0x14, 0xc6, 0xd9, 0x79, 0xb3, +0x67, 0xb9, 0x78, 0xc5, 0xba, 0x10, 0xe6, 0x15, 0xef, 0xbd, 0xf7, 0x1e, +0x12, 0x7b, 0x95, 0x46, 0x45, 0x4a, 0x66, 0x76, 0x87, 0x56, 0x2d, 0xa3, +0xa8, 0xa8, 0x6a, 0x48, 0x30, 0x04, 0xe1, 0x2b, 0x54, 0xcc, 0x99, 0xe1, +0x4a, 0x4a, 0x99, 0xb8, 0x3b, 0x84, 0xa2, 0xca, 0xff, 0x63, 0xc8, 0xc5, +0xf3, 0x82, 0x0a, 0xe4, 0x96, 0x4a, 0xb7, 0x41, 0xe5, 0xd5, 0x6b, 0xd2, +0xb8, 0x6e, 0x1d, 0x5d, 0x82, 0x8a, 0xf2, 0x8a, 0x2a, 0x85, 0x10, 0xdd, +0x65, 0x41, 0xdd, 0xd1, 0x41, 0xbd, 0x7b, 0x38, 0xaa, 0xd5, 0x2b, 0x3c, +0x18, 0x42, 0x36, 0x28, 0x4f, 0xa8, 0x38, 0x72, 0xe4, 0x48, 0x32, 0x15, +0xf7, 0xf8, 0x87, 0x5e, 0x81, 0xbf, 0xac, 0x8a, 0x48, 0x50, 0xf9, 0x1d, +0x7a, 0xd7, 0xc9, 0xcd, 0xa1, 0x46, 0xb2, 0xd2, 0xb6, 0xa3, 0xa8, 0xa8, +0x82, 0xa8, 0x10, 0xcb, 0xec, 0x4b, 0x2f, 0xbe, 0x58, 0x3b, 0x23, 0xa5, +0x41, 0xd1, 0x25, 0xcd, 0x43, 0xae, 0x15, 0xb7, 0xb6, 0xfd, 0xeb, 0xbc, +0xa2, 0x8a, 0xa2, 0xa2, 0x5d, 0xff, 0x71, 0x35, 0xb3, 0xaa, 0xbf, 0xf8, +0xe2, 0x8b, 0xd1, 0x9a, 0x96, 0x55, 0x0a, 0x0c, 0x6a, 0x32, 0x7a, 0x35, +0xeb, 0x53, 0x77, 0xdd, 0x05, 0x75, 0x15, 0x2d, 0xdb, 0x55, 0x6d, 0x87, +0x45, 0x33, 0x90, 0x2a, 0x6c, 0x95, 0x2a, 0x63, 0x99, 0x55, 0xa8, 0xa0, +0x42, 0x9f, 0x05, 0x2a, 0xaa, 0x82, 0x04, 0xd5, 0x6d, 0xdc, 0xfc, 0xec, +0x8c, 0x8c, 0xfb, 0xef, 0xbb, 0x4f, 0x79, 0xf1, 0xa2, 0x11, 0x1f, 0x55, +0x07, 0x1e, 0xe2, 0xd8, 0x16, 0x46, 0x81, 0xaa, 0xbd, 0x7c, 0xf1, 0x22, +0x50, 0x31, 0xbe, 0xf8, 0xe1, 0x2a, 0x0c, 0x00, 0x73, 0xf4, 0xae, 0x8f, +0x12, 0x54, 0x55, 0x40, 0x45, 0xbf, 0xf9, 0x6b, 0xe9, 0x68, 0xb1, 0x77, +0xd7, 0x2e, 0x6c, 0x02, 0x12, 0x07, 0x15, 0x8d, 0x99, 0xad, 0x0a, 0xa8, +0x50, 0xb5, 0x51, 0xa4, 0x6e, 0x1a, 0x7e, 0xa4, 0x0f, 0x3f, 0xf8, 0xa0, +0x61, 0x6e, 0x8d, 0xe4, 0xba, 0xad, 0x3b, 0x1c, 0xf8, 0x22, 0xd4, 0x50, +0x61, 0xcd, 0x2b, 0xf0, 0x57, 0x54, 0x51, 0x5e, 0x31, 0x72, 0xe3, 0xbd, +0xd4, 0xdc, 0x9f, 0x33, 0x7b, 0x36, 0x31, 0xb3, 0x86, 0x8e, 0x16, 0xd1, +0x5c, 0xbc, 0xca, 0x82, 0x87, 0x0e, 0x09, 0x29, 0x30, 0xc7, 0x6e, 0x75, +0xeb, 0xc1, 0x83, 0x30, 0x8a, 0x76, 0xd3, 0xae, 0xc9, 0xdd, 0xf9, 0xaf, +0x28, 0x2a, 0xca, 0x37, 0xa1, 0xa4, 0x55, 0xc9, 0xa7, 0xf4, 0x0e, 0xee, +0xda, 0xa9, 0x23, 0xc6, 0x59, 0xbd, 0xa3, 0x45, 0x24, 0x97, 0xf1, 0xab, +0x2c, 0x30, 0xe8, 0x11, 0x81, 0x52, 0x76, 0x51, 0x5a, 0x81, 0x21, 0x3b, +0x7d, 0xfa, 0xbb, 0xdf, 0x75, 0x6d, 0xdf, 0x26, 0x21, 0x23, 0x6f, 0xc2, +0xae, 0xa7, 0x43, 0x0d, 0x12, 0xc6, 0x2a, 0x69, 0x5e, 0xb4, 0xed, 0xaa, +0x20, 0x41, 0xd5, 0xd8, 0xfe, 0x55, 0xa3, 0x5e, 0x63, 0xd2, 0x9c, 0x09, +0x08, 0x51, 0xaa, 0xa3, 0x85, 0xb4, 0xf7, 0xd5, 0xbb, 0x7b, 0x55, 0x3a, +0xa1, 0x44, 0xc8, 0x04, 0x84, 0x4b, 0xa8, 0x6a, 0x8b, 0xc2, 0x25, 0x88, +0xda, 0x2c, 0xde, 0xb6, 0x15, 0x96, 0xde, 0x73, 0xda, 0x52, 0xea, 0x4e, +0x84, 0x14, 0x2a, 0x7e, 0xd8, 0xd3, 0x6d, 0xda, 0xa0, 0x20, 0xc1, 0xaa, +0x80, 0x0a, 0x96, 0x78, 0xc4, 0x2d, 0x67, 0x1d, 0xb1, 0xce, 0xfc, 0x7a, +0xf5, 0x48, 0xc7, 0x13, 0x76, 0x21, 0xa5, 0x35, 0x05, 0x18, 0xd2, 0x10, +0x5e, 0x95, 0xe4, 0xb0, 0xfc, 0x10, 0x21, 0x24, 0x5b, 0xae, 0x8f, 0xa9, +0xa4, 0x26, 0x1d, 0x12, 0x52, 0xe3, 0x03, 0x5b, 0x48, 0x8d, 0xd4, 0x24, +0x67, 0x46, 0x4e, 0x08, 0x42, 0xe2, 0x82, 0xaa, 0x5d, 0xb6, 0xa2, 0xa6, +0x27, 0x1b, 0x54, 0xd5, 0x41, 0x05, 0x6d, 0xc1, 0x7a, 0x5f, 0x59, 0x0c, +0x98, 0x5b, 0x36, 0x6d, 0x4a, 0x19, 0x66, 0xe9, 0x68, 0x01, 0x30, 0xe0, +0x18, 0x08, 0xb5, 0x60, 0x03, 0x1b, 0x88, 0xc0, 0xc3, 0x7c, 0xe8, 0x95, +0x9d, 0xe4, 0xbd, 0x96, 0x2b, 0xe9, 0x84, 0xdf, 0xe0, 0x0a, 0x0c, 0x7a, +0x93, 0x4e, 0xa9, 0xe2, 0x2e, 0x5c, 0xe2, 0xd5, 0x57, 0x5e, 0x69, 0x52, +0xbf, 0x1e, 0x95, 0x67, 0x07, 0x5e, 0x77, 0x2c, 0x04, 0xb9, 0x04, 0xa8, +0x70, 0x6b, 0x83, 0xb2, 0xb0, 0xcc, 0x82, 0x0a, 0x22, 0x07, 0x2b, 0xdd, +0xb7, 0x2d, 0x0b, 0x4d, 0x03, 0xa4, 0x3e, 0x57, 0xb8, 0x7a, 0x07, 0xb7, +0x69, 0xd9, 0xe2, 0x85, 0xe7, 0x9f, 0x17, 0x60, 0xf0, 0x56, 0x30, 0x7d, +0xf0, 0x7a, 0x78, 0x49, 0x02, 0x0f, 0x39, 0xa4, 0x24, 0xa6, 0x1c, 0xd2, +0x2c, 0x4f, 0x61, 0xc6, 0xdc, 0x3c, 0x32, 0xfc, 0xe8, 0x38, 0x58, 0x4f, +0xa4, 0xb8, 0xae, 0x8e, 0x07, 0x29, 0xc2, 0x2b, 0xad, 0x70, 0x48, 0xd8, +0x7c, 0xe0, 0x81, 0x07, 0x9a, 0x36, 0x68, 0xe0, 0xca, 0x4a, 0x5d, 0xb0, +0x91, 0x52, 0xd9, 0x21, 0x8b, 0x0a, 0xdb, 0xfe, 0x8a, 0x2a, 0x85, 0x0a, +0x17, 0x30, 0x76, 0x7d, 0xe1, 0x4a, 0x08, 0x76, 0xc4, 0x14, 0xb6, 0x6f, +0x47, 0x26, 0x24, 0xc1, 0x82, 0x18, 0xce, 0xd8, 0xab, 0x08, 0xa4, 0xe5, +0x0d, 0xc1, 0x3a, 0xe0, 0xe6, 0xbc, 0x2d, 0xc1, 0x89, 0x1c, 0x48, 0x59, +0x1c, 0xbc, 0x45, 0x05, 0x1b, 0x83, 0xc4, 0x15, 0x2c, 0x02, 0x0a, 0xbf, +0x71, 0x74, 0x79, 0x49, 0xef, 0x6e, 0xce, 0x22, 0x0b, 0x8b, 0xc0, 0xa9, +0xba, 0x79, 0xe3, 0xc6, 0xac, 0x8c, 0x74, 0x6a, 0x40, 0xf5, 0x9e, 0xbf, +0x31, 0xc4, 0xeb, 0xcc, 0x86, 0x2c, 0x2a, 0x5c, 0x85, 0xfb, 0x77, 0xfd, +0xb5, 0xd7, 0xfc, 0xf5, 0x8e, 0x98, 0xd8, 0x4e, 0x6d, 0xdb, 0x3c, 0xf9, +0xe4, 0x93, 0x78, 0x30, 0xc0, 0x06, 0x85, 0x3f, 0x80, 0x07, 0xfb, 0x16, +0xaf, 0x0a, 0x06, 0x02, 0x48, 0xe4, 0xa0, 0x1a, 0x88, 0xa0, 0x45, 0x01, +0x06, 0x84, 0x98, 0xbb, 0x77, 0x87, 0x1f, 0x41, 0x07, 0xfe, 0x44, 0xba, +0xe1, 0x55, 0x9a, 0x7b, 0xb0, 0xc5, 0x08, 0x1e, 0x58, 0x61, 0xbc, 0x46, +0x3f, 0x7e, 0xe5, 0x95, 0xc9, 0xe3, 0xc7, 0xc5, 0x50, 0x86, 0x39, 0xa7, +0xfe, 0xc0, 0xd5, 0xb7, 0x85, 0x26, 0x97, 0x40, 0x06, 0xf9, 0x41, 0xa9, +0x28, 0xab, 0x57, 0xbc, 0xfb, 0xee, 0xbb, 0xf4, 0x9b, 0x26, 0xa6, 0xab, +0xaa, 0x4b, 0x50, 0x8a, 0x35, 0xc3, 0x31, 0x7a, 0xcd, 0x5b, 0x07, 0xcb, +0xae, 0x5f, 0x33, 0x6f, 0xf2, 0x84, 0x09, 0xeb, 0xd6, 0xae, 0xdd, 0xb4, +0x7e, 0xfd, 0xf1, 0xdb, 0x6e, 0xc3, 0x6e, 0x0b, 0x73, 0x63, 0x03, 0x03, +0x27, 0x1c, 0x28, 0xe5, 0xa0, 0x45, 0x00, 0xc3, 0x5b, 0x04, 0x33, 0x4a, +0xe2, 0x32, 0xab, 0xe9, 0x81, 0x93, 0x51, 0x98, 0x8d, 0x60, 0x2e, 0x9b, +0xc9, 0x16, 0xc3, 0xa6, 0xc3, 0x62, 0xb2, 0xb6, 0x74, 0x94, 0x2d, 0xb8, +0x20, 0x35, 0x15, 0x8e, 0x98, 0x51, 0xb0, 0xe7, 0x6f, 0x21, 0x28, 0x35, +0x19, 0x7c, 0x09, 0x17, 0x54, 0x0b, 0x93, 0x0d, 0xca, 0x02, 0x15, 0x3c, +0x7f, 0x55, 0x93, 0xa0, 0xd4, 0xea, 0xd3, 0x35, 0xaf, 0xd7, 0xc2, 0x2d, +0x09, 0x35, 0xea, 0xb2, 0x57, 0x25, 0xc5, 0xc7, 0x53, 0x01, 0x04, 0xe7, +0x77, 0xbb, 0x16, 0x2d, 0xb0, 0x84, 0x10, 0x16, 0x0f, 0xca, 0xf9, 0x1f, +0x8d, 0x08, 0x03, 0x1a, 0x50, 0xa1, 0xa4, 0x15, 0xee, 0x3f, 0x0e, 0x18, +0x0b, 0x98, 0x01, 0xfd, 0xb0, 0x11, 0x61, 0x1a, 0x51, 0x69, 0xca, 0x12, +0xcc, 0xe6, 0x7a, 0x36, 0x82, 0x87, 0x0f, 0x3e, 0xf8, 0x60, 0xe3, 0xba, +0x9b, 0x0a, 0xdb, 0xb4, 0xa6, 0x48, 0x7b, 0x8c, 0x33, 0xb3, 0xf7, 0x15, +0xb7, 0x84, 0x6a, 0x49, 0xd9, 0xd2, 0x22, 0xe7, 0x8a, 0x57, 0x84, 0x3e, +0x2a, 0x04, 0x1e, 0x60, 0x63, 0xd4, 0xd6, 0x87, 0x7a, 0x2d, 0x2a, 0x6e, +0x31, 0xed, 0x86, 0x1a, 0x9d, 0x46, 0xc6, 0xc5, 0x25, 0x24, 0x38, 0x1c, +0x79, 0x19, 0xe9, 0xed, 0x9b, 0x17, 0xb4, 0x29, 0x68, 0x7c, 0xe1, 0x27, +0xbf, 0x6d, 0x41, 0x7e, 0x87, 0xe6, 0x4d, 0xf3, 0x6b, 0xe7, 0xa5, 0xc5, +0xc6, 0xd0, 0x7f, 0x9b, 0x9f, 0x94, 0x18, 0x47, 0x97, 0x4e, 0x9d, 0x30, +0x64, 0x49, 0x53, 0x56, 0xb3, 0x6d, 0x37, 0xcc, 0x76, 0x7d, 0x5f, 0x1f, +0x47, 0x20, 0x21, 0x35, 0x3b, 0xe8, 0x2b, 0x7b, 0xd3, 0x8d, 0x37, 0xae, +0x5c, 0xb2, 0x78, 0xea, 0xb8, 0xb1, 0x9d, 0xdb, 0xb4, 0xac, 0x91, 0xe2, +0x4c, 0x88, 0x89, 0x8d, 0x4f, 0x48, 0x2e, 0x1c, 0x31, 0x33, 0x64, 0x45, +0x26, 0xcb, 0x20, 0xa8, 0xb0, 0xe0, 0x15, 0x3a, 0xcb, 0xce, 0x28, 0xfe, +0x06, 0x78, 0xb4, 0x2d, 0xf9, 0xed, 0x88, 0xeb, 0x8f, 0xf5, 0x9d, 0xb6, +0xa4, 0x73, 0xd1, 0x88, 0xd6, 0x5d, 0xfb, 0x16, 0xb4, 0xef, 0x5e, 0xb7, +0x69, 0x87, 0xcc, 0xba, 0x4d, 0x53, 0x72, 0x1b, 0xa6, 0xe4, 0x34, 0x4c, +0xad, 0x5d, 0x90, 0xd1, 0xb0, 0x7d, 0x66, 0xa3, 0x0e, 0xd5, 0x9a, 0x14, +0xd2, 0x35, 0x18, 0x56, 0xb9, 0x61, 0xdd, 0x3a, 0x69, 0xca, 0x2a, 0xd2, +0x94, 0x32, 0xec, 0x46, 0xb8, 0x85, 0x4a, 0x79, 0xe8, 0x24, 0xda, 0xef, +0xc8, 0xad, 0xb7, 0xc6, 0xc7, 0xc6, 0x3a, 0x62, 0x12, 0x9d, 0xe9, 0x39, +0xc9, 0xd9, 0x0d, 0x9a, 0x74, 0x1d, 0x3a, 0x64, 0xc9, 0x56, 0x5a, 0x4f, +0x85, 0xbe, 0xc8, 0xe4, 0x45, 0x82, 0x72, 0xab, 0x57, 0x54, 0x65, 0x09, +0xca, 0xfd, 0x5b, 0x39, 0xaf, 0xff, 0xc9, 0xb9, 0xed, 0xfb, 0xac, 0x1d, +0xdf, 0xd4, 0xdd, 0xf9, 0x0f, 0x36, 0xb6, 0x56, 0x7b, 0x3f, 0xa7, 0xf8, +0x69, 0xe1, 0xfe, 0x3f, 0xb5, 0xbc, 0xee, 0x3e, 0x50, 0x41, 0x59, 0x79, +0x1e, 0x50, 0xd7, 0x34, 0x44, 0x0b, 0x8f, 0x64, 0x99, 0xca, 0x10, 0xda, +0xc4, 0x96, 0x71, 0xd3, 0x1a, 0x57, 0xef, 0xe0, 0x86, 0x53, 0xd7, 0x8e, +0xd8, 0xf1, 0x54, 0x87, 0x03, 0x9f, 0xe7, 0xee, 0x0c, 0xfd, 0x56, 0xf3, +0xc6, 0x06, 0x31, 0xe2, 0xac, 0x30, 0xfa, 0x2b, 0x3c, 0xa1, 0x02, 0x41, +0x1c, 0x01, 0xbd, 0x8a, 0xf8, 0x2b, 0x82, 0xb5, 0x3f, 0x0d, 0xdd, 0xf2, +0x28, 0x4f, 0x34, 0x79, 0xec, 0x58, 0x9e, 0x0e, 0x8d, 0x1c, 0x45, 0x1c, +0x35, 0x43, 0x1c, 0x82, 0x22, 0x50, 0x49, 0x01, 0x91, 0x48, 0x63, 0x1a, +0x86, 0x00, 0x58, 0x58, 0x28, 0x4d, 0x42, 0x86, 0x0c, 0xec, 0xcf, 0x5a, +0x75, 0x3d, 0x44, 0x56, 0x5d, 0x99, 0xed, 0x26, 0x58, 0xef, 0xa2, 0x52, +0xc7, 0xd1, 0x34, 0x0a, 0x93, 0x6f, 0xdb, 0x0b, 0x2a, 0xaa, 0x8e, 0x17, +0x2f, 0x58, 0x2b, 0x88, 0x82, 0x98, 0xde, 0xbc, 0x27, 0xda, 0x45, 0x49, +0x71, 0x31, 0x8a, 0x38, 0x16, 0x05, 0x4b, 0x6c, 0x44, 0x5a, 0xe8, 0xa1, +0x52, 0x27, 0x44, 0x76, 0xc2, 0x08, 0xbb, 0x71, 0x9d, 0xcb, 0xd0, 0xd7, +0x6b, 0xfa, 0x8a, 0x60, 0xad, 0x7c, 0x15, 0x1b, 0x47, 0xe3, 0x12, 0x51, +0x54, 0xf0, 0x6e, 0x8a, 0xae, 0x3d, 0x16, 0xe7, 0x4c, 0x4d, 0x8e, 0x73, +0x4c, 0x9d, 0x30, 0xe1, 0xb1, 0x73, 0xe7, 0x04, 0x1b, 0xd8, 0xa6, 0xb0, +0xb4, 0x88, 0xb3, 0x5c, 0x69, 0xe1, 0xc2, 0x31, 0x7c, 0x55, 0x58, 0x43, +0xee, 0x7c, 0xc5, 0x28, 0xc4, 0x35, 0x01, 0xf3, 0xdc, 0xb4, 0x6e, 0x1d, +0x96, 0x89, 0xa4, 0xda, 0xcd, 0x9a, 0x87, 0x47, 0x7f, 0x54, 0xeb, 0xce, +0x7a, 0x3f, 0xc8, 0x4e, 0xbe, 0xa2, 0x22, 0xfc, 0x24, 0x28, 0x50, 0x41, +0xe9, 0xff, 0xa2, 0xeb, 0x8f, 0x27, 0xd7, 0x6c, 0x42, 0x8c, 0x67, 0x4a, +0x5c, 0x4c, 0xf3, 0x86, 0xf5, 0xa7, 0x8e, 0x1f, 0xb7, 0x7b, 0xe7, 0x4e, +0xcc, 0xb8, 0x22, 0x50, 0xb1, 0x53, 0x2a, 0x9f, 0x46, 0x24, 0x00, 0x43, +0xb7, 0x3b, 0xe1, 0x8e, 0x28, 0xea, 0xd5, 0x8b, 0x95, 0x49, 0xce, 0xaa, +0x33, 0x75, 0xf7, 0x53, 0x55, 0x6c, 0x83, 0x0f, 0x7a, 0xce, 0x82, 0x2f, +0x5e, 0x3c, 0xf2, 0x8f, 0x50, 0x46, 0xc3, 0x52, 0xaf, 0x28, 0x75, 0x7a, +0x94, 0xfc, 0x65, 0xd0, 0xf2, 0x9d, 0x4d, 0xfb, 0x4e, 0xc0, 0x4e, 0xe5, +0xc0, 0xe7, 0x11, 0xe3, 0x58, 0xb7, 0x66, 0x0d, 0x0e, 0x0d, 0x1e, 0x5c, +0x80, 0x21, 0x1c, 0x43, 0xe9, 0x18, 0x21, 0xc7, 0x01, 0xec, 0x4f, 0x58, +0x2f, 0xd2, 0x31, 0x77, 0x16, 0xd5, 0x9c, 0x62, 0xfa, 0xce, 0xbc, 0xba, +0xe5, 0xa1, 0xf0, 0xd3, 0xad, 0x75, 0x50, 0x95, 0x65, 0x14, 0x76, 0x7c, +0xdb, 0x91, 0x80, 0x0a, 0x81, 0x47, 0xf6, 0x8e, 0x7f, 0xb6, 0xd9, 0xf5, +0xd9, 0x80, 0xd5, 0xb7, 0x27, 0xd7, 0x6a, 0x82, 0x18, 0x7d, 0xed, 0xca, +0x95, 0x52, 0x1b, 0x4b, 0x01, 0x43, 0x57, 0xbe, 0xed, 0xd3, 0x59, 0x68, +0x9d, 0xa9, 0x50, 0x71, 0xf2, 0xf8, 0xf1, 0x94, 0xa4, 0xa4, 0xea, 0x1d, +0x86, 0xf5, 0xb8, 0x2d, 0x2c, 0x1a, 0xcb, 0xfb, 0xd4, 0x92, 0x58, 0x33, +0x2b, 0x59, 0x6b, 0xdb, 0x91, 0x83, 0x8a, 0x1f, 0x58, 0xc7, 0x79, 0x82, +0xdb, 0xda, 0xf5, 0x1a, 0x42, 0x5b, 0xb7, 0x55, 0x2b, 0x56, 0x50, 0xf2, +0x07, 0x60, 0x88, 0x43, 0x43, 0x72, 0xc4, 0xc3, 0x9b, 0x63, 0x28, 0x54, +0x0c, 0x1d, 0x3c, 0x18, 0xda, 0xa8, 0xde, 0x76, 0xe0, 0xc8, 0x2d, 0x0f, +0x5f, 0xe0, 0x15, 0xe1, 0x67, 0x7a, 0x12, 0x76, 0x61, 0x62, 0x14, 0x51, +0x5e, 0xe1, 0x4e, 0x56, 0xc6, 0x3c, 0xd5, 0xb6, 0xe7, 0x10, 0x57, 0xb7, +0xf9, 0xe5, 0xcb, 0x25, 0xe9, 0x4f, 0xca, 0xda, 0x86, 0x3d, 0x30, 0x94, +0x5e, 0x71, 0xfb, 0xb1, 0x63, 0x5d, 0x3b, 0x76, 0x44, 0xcf, 0x8e, 0x4b, +0x48, 0x49, 0xab, 0xdf, 0xba, 0xcf, 0xf4, 0x15, 0x61, 0xaa, 0x6d, 0xfb, +0x8b, 0x0a, 0x6c, 0x32, 0xe1, 0xad, 0x57, 0x58, 0x62, 0x83, 0xd0, 0xc3, +0x36, 0x3d, 0x06, 0xa3, 0x63, 0xac, 0x5a, 0xbe, 0x1c, 0x1d, 0x03, 0xe5, +0x3b, 0x12, 0x38, 0x86, 0x6e, 0x83, 0xc2, 0x16, 0xbf, 0x73, 0xc7, 0x8e, +0xb1, 0xc3, 0x86, 0xe4, 0xd7, 0xcc, 0x73, 0x85, 0xc4, 0x56, 0xaf, 0xdd, +0x7b, 0xfe, 0x86, 0xb0, 0x08, 0x01, 0xf4, 0xa8, 0x54, 0xb8, 0xe1, 0x15, +0x44, 0x97, 0x96, 0xd6, 0xf8, 0xe0, 0x53, 0x64, 0xa2, 0x42, 0xb2, 0x38, +0x92, 0x6b, 0x35, 0x85, 0x63, 0xac, 0x5e, 0xb5, 0x0a, 0x51, 0x4a, 0xac, +0x52, 0x66, 0x8e, 0x11, 0x66, 0x16, 0x5b, 0x83, 0xbf, 0x02, 0xb7, 0x26, +0xc6, 0xa8, 0x92, 0xed, 0xdb, 0x1b, 0xd4, 0xac, 0x89, 0x4c, 0x95, 0xda, +0xa8, 0xc3, 0x80, 0xd5, 0xc7, 0x09, 0xe3, 0x0f, 0x17, 0x93, 0x94, 0x66, +0x7a, 0x52, 0xba, 0x87, 0x1d, 0xbd, 0x02, 0x54, 0x10, 0x49, 0x4b, 0xfc, +0x69, 0x98, 0xf9, 0xb6, 0xed, 0xbc, 0xd7, 0x81, 0x1b, 0xee, 0x4f, 0xae, +0x59, 0x80, 0x75, 0x72, 0xed, 0x0d, 0xd7, 0xeb, 0x1c, 0x23, 0x8c, 0x73, +0x33, 0xf4, 0x1c, 0x23, 0x2c, 0x6f, 0xe2, 0xc8, 0x83, 0x4f, 0xd2, 0xc9, +0x61, 0xd6, 0xf4, 0xe9, 0x59, 0x69, 0xa9, 0xb1, 0x09, 0xc9, 0x7d, 0x08, +0x92, 0x0d, 0x1f, 0x60, 0x98, 0x8c, 0xbc, 0x51, 0x54, 0x78, 0xc6, 0x06, +0x69, 0xe2, 0x83, 0x37, 0x3d, 0x98, 0x94, 0x97, 0x0f, 0x30, 0x08, 0x1a, +0xfd, 0xf4, 0xd3, 0x32, 0xa2, 0x54, 0xb8, 0xd6, 0x16, 0x31, 0x07, 0x7d, +0x00, 0x0c, 0xf8, 0x24, 0xfb, 0xe3, 0x89, 0x13, 0x27, 0x9a, 0x35, 0xc9, +0x87, 0x6c, 0x7a, 0x5c, 0xb2, 0x22, 0x5c, 0x80, 0x61, 0x62, 0x17, 0x51, +0x54, 0x78, 0xe5, 0x18, 0xc4, 0xe1, 0xba, 0x80, 0x91, 0xd3, 0x00, 0x51, +0x8a, 0x20, 0x39, 0x83, 0x8e, 0x11, 0xae, 0xc0, 0xc0, 0xa0, 0xac, 0x7b, +0xf4, 0x84, 0x63, 0x00, 0x0c, 0x0c, 0x0f, 0x2f, 0xbf, 0xf8, 0x62, 0x8f, +0x6e, 0xdd, 0x5c, 0x99, 0x46, 0xc3, 0x2f, 0x6d, 0xb2, 0x2b, 0xb4, 0x4a, +0x03, 0x5a, 0xfa, 0xfe, 0x3c, 0xa1, 0x82, 0x26, 0x8c, 0x3f, 0xfd, 0xe9, +0x4f, 0x8d, 0x59, 0x47, 0xa2, 0x57, 0x44, 0xac, 0x04, 0xa5, 0xf2, 0x37, +0x06, 0x6d, 0x7c, 0x20, 0x29, 0xbb, 0x41, 0x92, 0xc3, 0xb1, 0xce, 0xc5, +0x31, 0x5c, 0xe6, 0xda, 0x48, 0xf0, 0x7c, 0x9b, 0x13, 0xf1, 0x04, 0x18, +0x1f, 0x7f, 0xf2, 0xc9, 0xb4, 0x89, 0x13, 0x5d, 0x05, 0x25, 0xba, 0xf5, +0x0f, 0x17, 0x8e, 0xa1, 0x01, 0xc6, 0x0e, 0xaf, 0x40, 0xfb, 0x8e, 0x70, +0x54, 0xb8, 0x12, 0x9b, 0xf0, 0x7f, 0xaf, 0x3f, 0x93, 0x58, 0xad, 0x4e, +0x72, 0x7c, 0xdc, 0x05, 0x51, 0xca, 0x08, 0x8c, 0x70, 0xf5, 0x63, 0xe8, +0x1c, 0x83, 0xe0, 0x17, 0xd1, 0x31, 0x00, 0xc6, 0x6f, 0x7e, 0xfb, 0x5b, +0x8c, 0x10, 0x49, 0x09, 0x09, 0xad, 0x3b, 0xf7, 0x09, 0x37, 0x60, 0x58, +0xa1, 0x02, 0x14, 0x1c, 0x3e, 0x7c, 0xf8, 0x62, 0xff, 0x8a, 0x28, 0xaf, +0xd0, 0x03, 0x43, 0x06, 0xae, 0x3b, 0xe3, 0xcc, 0xaa, 0x9b, 0x18, 0xe3, +0xb8, 0xf6, 0x82, 0x55, 0xca, 0xec, 0xf9, 0x0e, 0x33, 0x7b, 0x94, 0x38, +0xe6, 0x75, 0x8e, 0x21, 0xa5, 0x6e, 0xe0, 0x18, 0xd2, 0xd5, 0x64, 0xcd, +0xf5, 0xd7, 0x27, 0x3a, 0x1c, 0xed, 0xfb, 0x8e, 0x0c, 0xa3, 0x0c, 0xd5, +0x32, 0xdd, 0x22, 0xdd, 0xfa, 0xb6, 0x45, 0x82, 0x42, 0xba, 0x8a, 0x40, +0x1b, 0x94, 0x41, 0xeb, 0x70, 0x29, 0xdf, 0x1b, 0xee, 0x4b, 0xa9, 0xd5, +0x94, 0xa5, 0x58, 0xba, 0xf8, 0xca, 0xdf, 0xfc, 0xc6, 0x55, 0x1a, 0x9d, +0xbd, 0xd3, 0x50, 0xd5, 0x33, 0xb4, 0xa2, 0x3c, 0xbc, 0xce, 0xd6, 0x50, +0xf9, 0x46, 0xd5, 0x80, 0xe2, 0xd9, 0x31, 0xda, 0x2e, 0x5c, 0x30, 0xdf, +0xa5, 0x63, 0x8c, 0x9c, 0x11, 0x9a, 0xc0, 0x70, 0x79, 0xf1, 0x62, 0x2e, +0xfc, 0x94, 0x96, 0xf9, 0xd0, 0x08, 0xdd, 0x8b, 0x5e, 0x11, 0x45, 0x85, +0x42, 0x08, 0xaf, 0xbf, 0x7d, 0xbf, 0x51, 0x2c, 0xdd, 0x92, 0x45, 0x0b, +0xa5, 0x93, 0x06, 0x46, 0xfd, 0xf0, 0xee, 0x19, 0x60, 0x09, 0x0c, 0xb6, +0x03, 0x80, 0xf1, 0xeb, 0x5f, 0xfd, 0x6a, 0xca, 0xc4, 0x09, 0xac, 0x46, +0xb7, 0x49, 0x57, 0x86, 0x94, 0x28, 0x25, 0x4a, 0xb6, 0xeb, 0xff, 0x98, +0x0b, 0x3f, 0xa5, 0x3b, 0x60, 0x14, 0x15, 0x5e, 0x6d, 0x50, 0x96, 0x27, +0x10, 0x2b, 0xd5, 0xa1, 0xff, 0x58, 0x56, 0x6f, 0xe3, 0xfa, 0x75, 0x52, +0x2b, 0x44, 0x4a, 0x7a, 0x8a, 0x76, 0xe1, 0x75, 0xf7, 0x0d, 0xd1, 0x13, +0x74, 0x07, 0x1f, 0x0f, 0x2b, 0x55, 0x03, 0x01, 0xc6, 0x4f, 0x3f, 0xf9, +0x64, 0xc8, 0xc0, 0x01, 0x2e, 0x73, 0xed, 0xa5, 0x2b, 0x71, 0x7d, 0xfa, +0xb7, 0xa4, 0x95, 0x7a, 0x55, 0x59, 0x33, 0x94, 0x09, 0x15, 0xbf, 0xfe, +0xf5, 0xaf, 0xa3, 0x7a, 0x85, 0xad, 0xd8, 0x7d, 0x72, 0xf9, 0x93, 0xb2, +0xea, 0x66, 0x24, 0x26, 0xdc, 0x71, 0xfc, 0x38, 0x94, 0x21, 0x01, 0xe7, +0x92, 0xb8, 0x17, 0xa2, 0x44, 0x6f, 0x67, 0xda, 0x06, 0xcf, 0x37, 0xc0, +0x10, 0x8e, 0xf1, 0xee, 0xdb, 0x6f, 0x77, 0x29, 0x2c, 0x74, 0x01, 0x63, +0xc6, 0xb5, 0x94, 0x3c, 0xad, 0x54, 0x12, 0xb7, 0xf5, 0xfa, 0xf4, 0x19, +0x96, 0x61, 0x14, 0xee, 0x23, 0x3e, 0x4a, 0xb5, 0x6d, 0x3e, 0x45, 0x6d, +0x50, 0xee, 0xde, 0xf1, 0xc0, 0xb5, 0x77, 0x39, 0xe2, 0x93, 0xf2, 0xeb, +0xd7, 0x47, 0xfa, 0x14, 0xed, 0x42, 0x82, 0x6a, 0xc3, 0x52, 0xe7, 0x56, +0x98, 0xb1, 0x04, 0x06, 0x86, 0x87, 0x17, 0x5f, 0x78, 0xa1, 0x79, 0xbe, +0xcb, 0xc1, 0xd7, 0x77, 0xf9, 0x1e, 0x9c, 0x3c, 0xa1, 0x02, 0x8c, 0x0b, +0xe2, 0x93, 0x5b, 0x5e, 0xa1, 0xb4, 0xed, 0x28, 0xaf, 0xb0, 0xbb, 0xd9, +0xb4, 0xdb, 0xfd, 0x7f, 0x35, 0x07, 0xce, 0x75, 0x26, 0x26, 0x50, 0x42, +0x8f, 0x2a, 0x21, 0x6c, 0x9c, 0x11, 0xd2, 0xd3, 0xd5, 0x9c, 0xdb, 0xcd, +0xe3, 0x23, 0x49, 0x3e, 0xf8, 0xc0, 0x03, 0xb5, 0x73, 0xb2, 0x63, 0x62, +0x13, 0x07, 0xde, 0x74, 0x2a, 0x74, 0x50, 0xa1, 0xb4, 0x6d, 0x8b, 0xfe, +0x15, 0x51, 0x54, 0xd8, 0x05, 0x43, 0xa9, 0xda, 0xbd, 0xeb, 0xf3, 0x46, +0xb3, 0x8a, 0x13, 0x1c, 0x31, 0x4b, 0x17, 0x2f, 0xa6, 0x50, 0x27, 0x3a, +0x77, 0xe4, 0x74, 0xaf, 0x34, 0x78, 0xbe, 0x79, 0x76, 0x80, 0x81, 0x49, +0x6a, 0xdf, 0x9e, 0x3d, 0xa9, 0xf1, 0x71, 0x69, 0x75, 0x5b, 0x84, 0x94, +0xe6, 0x5d, 0xf6, 0xd5, 0x47, 0xf5, 0x8a, 0x40, 0xb6, 0xb4, 0xcc, 0xe2, +0x6f, 0x1a, 0x4c, 0x5d, 0x97, 0x18, 0x1b, 0x77, 0xcd, 0xca, 0x95, 0xd2, +0xbd, 0x32, 0x72, 0x50, 0x61, 0xf0, 0x63, 0x48, 0x0b, 0x0b, 0x71, 0x62, +0x2c, 0x5b, 0xbc, 0x18, 0xba, 0xea, 0x32, 0x66, 0x4e, 0xa8, 0x02, 0xc3, +0xbe, 0x0d, 0x2a, 0x32, 0x63, 0x66, 0xbd, 0x62, 0xa6, 0xee, 0xd8, 0xab, +0x93, 0xe3, 0xe3, 0x29, 0xfc, 0x2c, 0xdd, 0x2b, 0x45, 0xe1, 0x0e, 0x6f, +0xbd, 0x42, 0x57, 0xca, 0x79, 0x52, 0x69, 0x77, 0x24, 0x26, 0x29, 0x89, +0x07, 0xa1, 0x16, 0xc4, 0xc8, 0x61, 0xc3, 0x5c, 0x9a, 0xf7, 0xcc, 0xeb, +0x42, 0xd2, 0x24, 0x15, 0x45, 0x85, 0x57, 0xba, 0xf7, 0x70, 0x42, 0x7a, +0xf1, 0xbf, 0x6a, 0x8f, 0x5c, 0x96, 0x92, 0x90, 0xb0, 0x69, 0xc3, 0x06, +0x41, 0x45, 0x44, 0xf1, 0x0a, 0x3d, 0x82, 0x50, 0x15, 0x8f, 0x42, 0x8e, +0x42, 0x31, 0x7d, 0xe3, 0xf5, 0xd7, 0x5b, 0x37, 0x6f, 0x46, 0x26, 0xdf, +0x80, 0x6b, 0x8e, 0x04, 0xb2, 0xc2, 0x95, 0x73, 0xad, 0x9d, 0x38, 0xa8, +0x68, 0x74, 0xa0, 0xbb, 0x77, 0xd3, 0x68, 0xc7, 0x9f, 0x6b, 0x0d, 0xbe, +0x3c, 0xd5, 0xe9, 0xdc, 0xbe, 0x6d, 0x9b, 0x8e, 0x8a, 0x48, 0xa8, 0x91, +0x63, 0x69, 0x92, 0x92, 0x1e, 0xaa, 0xb8, 0x35, 0x01, 0xc6, 0x99, 0xd3, +0xa7, 0xab, 0xa7, 0x26, 0x27, 0x52, 0x94, 0x76, 0x77, 0xa8, 0xa5, 0x28, +0x45, 0xe3, 0xa0, 0x02, 0xd9, 0x8d, 0x5a, 0x6f, 0xff, 0x55, 0x62, 0x7a, +0x4e, 0x4e, 0x66, 0xc6, 0xe9, 0x7b, 0xee, 0x89, 0x4c, 0x5e, 0x61, 0x0e, +0x94, 0x52, 0x9d, 0x54, 0xd1, 0xbc, 0x37, 0xdc, 0x74, 0x13, 0x04, 0xd6, +0xf5, 0x92, 0x50, 0x2b, 0x3a, 0x18, 0xe5, 0x15, 0x81, 0xa0, 0xa2, 0x68, +0xc1, 0xfa, 0xc4, 0xb8, 0xb8, 0x15, 0x4b, 0x96, 0x20, 0x49, 0x47, 0xa6, +0x5e, 0x61, 0xe0, 0x18, 0xd2, 0x75, 0x1b, 0xcd, 0x1b, 0x8e, 0x81, 0x51, +0xee, 0xa3, 0x0f, 0x3f, 0x2c, 0x6c, 0xdf, 0xd6, 0xe1, 0xcc, 0x0c, 0xb1, +0xea, 0xe5, 0x51, 0xbd, 0x22, 0x00, 0x54, 0x9c, 0xef, 0x30, 0x68, 0x52, +0x72, 0x5c, 0xcc, 0x53, 0x4f, 0x3e, 0x49, 0x29, 0x4e, 0x50, 0x11, 0x69, +0x36, 0x28, 0x83, 0x2f, 0x5c, 0xd7, 0xbc, 0x01, 0x86, 0x68, 0xde, 0x04, +0xd5, 0x92, 0xc6, 0x38, 0xe0, 0xf2, 0x75, 0x01, 0xac, 0xb3, 0xcf, 0x16, +0xf3, 0x40, 0xef, 0x15, 0xe5, 0x15, 0x7e, 0xaf, 0x60, 0xfa, 0xb6, 0x6f, +0x6a, 0x36, 0xed, 0x98, 0x1e, 0x1f, 0x8b, 0xa3, 0x07, 0x54, 0x40, 0x01, +0x11, 0x8e, 0x0a, 0xa5, 0x7c, 0x4b, 0x8d, 0x5a, 0x42, 0x60, 0xd0, 0xbc, +0x09, 0x2a, 0x6d, 0xd1, 0xa4, 0x49, 0xad, 0x06, 0x4d, 0x73, 0x4b, 0x42, +0xa7, 0x00, 0xa1, 0x4d, 0x54, 0x44, 0x60, 0xe5, 0x1b, 0xaf, 0x68, 0x69, +0xb4, 0xe3, 0x4f, 0x29, 0xb9, 0x8d, 0xea, 0xe7, 0x66, 0x93, 0xe6, 0x4f, +0xf4, 0x18, 0xa6, 0xfa, 0x88, 0xf2, 0xe2, 0x79, 0xe8, 0x18, 0x86, 0xad, +0x16, 0x60, 0x88, 0x07, 0x83, 0xcd, 0x62, 0xcc, 0xf0, 0xe1, 0x31, 0x8e, +0xb8, 0xf6, 0xfb, 0xa8, 0xf2, 0x5f, 0xe1, 0xbb, 0xbe, 0x7f, 0x77, 0x8c, +0xa2, 0xc2, 0xef, 0x57, 0xd5, 0xaa, 0xf8, 0x7f, 0x93, 0xaa, 0xd7, 0xee, +0xd8, 0xba, 0xe5, 0x87, 0x1f, 0x7e, 0x48, 0xfe, 0x89, 0xf8, 0xb6, 0x25, +0x8d, 0x3b, 0x72, 0xfc, 0x15, 0x66, 0x6c, 0xe8, 0x95, 0x6a, 0xf1, 0x60, +0x60, 0x8f, 0xa2, 0x36, 0xa9, 0x33, 0x21, 0x71, 0xec, 0xa6, 0x7b, 0xfc, +0x5e, 0xea, 0x8a, 0xbe, 0xd0, 0x8d, 0x0d, 0xaa, 0x4c, 0x3d, 0xa8, 0xb0, +0xaf, 0xbe, 0xec, 0xdf, 0xa2, 0x8f, 0xbc, 0xe5, 0xc1, 0xc4, 0xb4, 0xec, +0xc1, 0x45, 0x7d, 0x3f, 0xf9, 0xe4, 0x13, 0x78, 0x29, 0xaf, 0x1f, 0x99, +0x21, 0x42, 0xe2, 0xa0, 0x3c, 0x44, 0xd7, 0xea, 0x91, 0x20, 0xa2, 0x5d, +0x1c, 0x3b, 0x72, 0x24, 0x3d, 0x29, 0x79, 0xe0, 0xa2, 0xcd, 0xfe, 0xad, +0x73, 0x25, 0x5c, 0x65, 0x87, 0x57, 0x44, 0x51, 0x61, 0x7e, 0x31, 0x28, +0x15, 0x7d, 0x57, 0x1d, 0x8e, 0x4f, 0x4a, 0xbf, 0x64, 0xd2, 0x04, 0x7a, +0x18, 0x10, 0xe6, 0x10, 0x45, 0x85, 0x6e, 0x8f, 0x92, 0x1e, 0x93, 0x62, +0xa5, 0xfd, 0xf1, 0xcb, 0x2f, 0xd7, 0x48, 0x4f, 0xef, 0x30, 0x7c, 0x66, +0x25, 0xd0, 0x77, 0xf9, 0x49, 0x50, 0x51, 0x54, 0x98, 0x5f, 0x27, 0xfe, +0xbb, 0x16, 0x97, 0xac, 0x75, 0xc4, 0xc4, 0x2d, 0x5b, 0xbc, 0x88, 0xb6, +0xc5, 0x94, 0xc3, 0x89, 0xa8, 0x98, 0x59, 0xcf, 0x99, 0x18, 0xc2, 0x2e, +0xc4, 0xdb, 0x8d, 0x54, 0x89, 0x75, 0xae, 0x56, 0xf5, 0x6a, 0x79, 0x05, +0x1d, 0xa2, 0xa8, 0x08, 0x11, 0xbd, 0xca, 0xbf, 0xbd, 0x64, 0xcb, 0x7f, +0x51, 0x2a, 0x6a, 0xb4, 0x1b, 0x84, 0xcd, 0x91, 0x8a, 0xf6, 0x38, 0x2b, +0xf0, 0x58, 0x49, 0x3a, 0x5e, 0x24, 0xe4, 0x57, 0x78, 0x4d, 0x4e, 0x52, +0xa8, 0x10, 0x4b, 0xd4, 0x67, 0xff, 0xf7, 0x7f, 0x35, 0xab, 0x67, 0xa6, +0xd5, 0x69, 0x11, 0x3e, 0xa8, 0x38, 0x7a, 0xf4, 0x68, 0x94, 0x57, 0x98, +0x5f, 0xe7, 0xa8, 0x2d, 0x0f, 0xc5, 0xa5, 0x65, 0xf7, 0xe9, 0xda, 0xf9, +0x8d, 0x37, 0xde, 0xa0, 0xad, 0x3d, 0x01, 0x0e, 0x04, 0x41, 0x21, 0x30, +0x80, 0x8a, 0x88, 0x0a, 0xf7, 0xf0, 0x60, 0x89, 0x12, 0xfb, 0x2c, 0xbc, +0xe2, 0xbd, 0x77, 0xdf, 0xcd, 0xc9, 0x48, 0xaf, 0x5d, 0x38, 0x34, 0x0c, +0x51, 0x11, 0x7e, 0xdd, 0x22, 0x03, 0x79, 0x49, 0x43, 0xd7, 0xdc, 0x8e, +0x4a, 0xb6, 0x68, 0xfe, 0xdc, 0x8f, 0x3f, 0xfe, 0x18, 0xb3, 0xac, 0xb8, +0xf0, 0x40, 0x45, 0xa4, 0xb5, 0x96, 0x74, 0x67, 0x83, 0x12, 0xe3, 0xac, +0x48, 0x50, 0xcf, 0x3d, 0xfb, 0x4c, 0x56, 0x5a, 0x5a, 0x87, 0x31, 0x0b, +0x02, 0x59, 0xf0, 0x0a, 0xbd, 0xd6, 0xab, 0xb6, 0xad, 0x78, 0x45, 0x14, +0x15, 0xfa, 0x8b, 0x19, 0xb4, 0xea, 0x00, 0x4b, 0x77, 0xcd, 0x8a, 0xe5, +0x04, 0xd8, 0x4b, 0x4b, 0x24, 0x29, 0xf3, 0x11, 0x45, 0x85, 0x6e, 0x99, +0x65, 0x9b, 0x80, 0x85, 0xde, 0x79, 0xf2, 0x64, 0x46, 0x72, 0xf2, 0x80, +0xf9, 0x37, 0x55, 0x28, 0x65, 0xfb, 0x2b, 0x1b, 0xbb, 0x26, 0x69, 0x1f, +0x15, 0x61, 0xd9, 0x2d, 0xd2, 0xdf, 0xf7, 0x74, 0xbe, 0xff, 0xf2, 0x3d, +0x2c, 0xdd, 0xf5, 0xd7, 0x5e, 0xc3, 0xb2, 0x50, 0xfc, 0x46, 0x5c, 0x78, +0x51, 0x54, 0x98, 0x53, 0xba, 0x59, 0x99, 0xc1, 0x45, 0x45, 0xb1, 0x8e, +0xb8, 0x09, 0xc5, 0x0f, 0xf9, 0xbb, 0xda, 0x15, 0xae, 0xa3, 0xda, 0x44, +0x05, 0x2f, 0x3e, 0xca, 0x2b, 0xb4, 0x97, 0x7a, 0xbe, 0xef, 0xe2, 0xed, +0x2c, 0xdd, 0x86, 0x9b, 0xd6, 0xb2, 0x2c, 0x98, 0x65, 0x71, 0xe1, 0x45, +0x48, 0x8d, 0x0f, 0x3b, 0x9e, 0x0a, 0xd1, 0x28, 0xa4, 0xfc, 0x07, 0x71, +0x50, 0xf4, 0x52, 0xeb, 0x71, 0xc9, 0xf2, 0x66, 0xfb, 0xfe, 0x11, 0x45, +0x45, 0x85, 0xe3, 0x3b, 0x10, 0x8e, 0xe9, 0xf3, 0xb5, 0xe7, 0x7b, 0x5c, +0xbe, 0x19, 0x54, 0xdc, 0xb2, 0x69, 0xa3, 0x98, 0x65, 0xa3, 0xa8, 0x30, +0x94, 0x8a, 0x92, 0x70, 0x8f, 0xfd, 0x7b, 0xf6, 0x64, 0xa6, 0xa5, 0x24, +0x66, 0xd5, 0x0b, 0xb1, 0xee, 0x61, 0x51, 0x5e, 0xe1, 0xd7, 0x06, 0x76, +0xbe, 0x70, 0xf6, 0x3a, 0x96, 0xae, 0xa4, 0x78, 0x9b, 0x98, 0x65, 0x71, +0xe1, 0xb1, 0x35, 0x86, 0x7d, 0x95, 0x34, 0x77, 0x8c, 0xc2, 0x2c, 0x38, +0xb1, 0x20, 0x1b, 0xd6, 0xae, 0x4d, 0x4e, 0x8c, 0x8f, 0x4b, 0xca, 0x18, +0xba, 0xe1, 0x3e, 0xbf, 0x16, 0xb9, 0xf2, 0x36, 0x56, 0x0d, 0x15, 0xef, +0xbd, 0xf7, 0x1e, 0x42, 0xb2, 0xb1, 0x52, 0xbf, 0x68, 0xdb, 0x51, 0x09, +0xaa, 0xec, 0x7b, 0x3d, 0xdf, 0xf6, 0x92, 0xd5, 0x2c, 0xdd, 0xde, 0xdd, +0xbb, 0x88, 0x96, 0x35, 0xa3, 0x22, 0xa2, 0xe2, 0xa0, 0xcc, 0x90, 0x80, +0x73, 0x5e, 0xb5, 0x70, 0x61, 0x02, 0xed, 0xeb, 0xeb, 0x34, 0x1f, 0x7e, +0xcb, 0xc3, 0x4d, 0xf7, 0xfe, 0x3d, 0x0c, 0x51, 0x81, 0xc2, 0x14, 0x45, +0x85, 0x01, 0x15, 0x4d, 0xc7, 0x2f, 0x07, 0x15, 0xb7, 0x1e, 0x3c, 0x08, +0x2a, 0x3e, 0xfb, 0xec, 0x33, 0x71, 0x6c, 0x47, 0x20, 0xaf, 0x30, 0x43, +0x02, 0xef, 0xcd, 0xd4, 0x09, 0xe3, 0xd1, 0x25, 0x0a, 0x07, 0x8c, 0x09, +0x31, 0xc1, 0xc9, 0xaa, 0x2f, 0x9e, 0x5b, 0x5e, 0x11, 0x45, 0x85, 0x69, +0xab, 0x3b, 0x5f, 0x7f, 0xd8, 0x15, 0xa0, 0xe2, 0xb6, 0xa3, 0x47, 0x21, +0x02, 0x1d, 0x15, 0x61, 0x5f, 0x51, 0x53, 0x0f, 0x76, 0x32, 0x40, 0x82, +0xad, 0xe1, 0xc4, 0xf1, 0xe3, 0x8d, 0x6b, 0xe5, 0xb9, 0xaa, 0x7b, 0x8c, +0x5f, 0x10, 0xaa, 0x90, 0xb0, 0x69, 0x99, 0x8d, 0xa2, 0xc2, 0x8c, 0x8a, +0x5a, 0x03, 0xe7, 0xf0, 0xee, 0x4f, 0x9e, 0x38, 0x11, 0x99, 0xa8, 0x30, +0x37, 0xce, 0x7b, 0xed, 0xc7, 0xaf, 0x4e, 0x1e, 0x3b, 0x86, 0x06, 0xc4, +0x24, 0xb2, 0xf7, 0xbf, 0x72, 0x6b, 0xb3, 0xfd, 0x5f, 0x85, 0x98, 0xd4, +0xe4, 0xa6, 0x26, 0xb9, 0xf0, 0x0a, 0x71, 0x49, 0x95, 0x46, 0x92, 0xa3, +0x57, 0x44, 0x51, 0x61, 0xc1, 0x2b, 0x46, 0x2c, 0x12, 0x09, 0x2a, 0x02, +0x51, 0x61, 0x80, 0xc4, 0x87, 0x1f, 0x7c, 0xb0, 0xfe, 0xc6, 0x1b, 0xeb, +0xe5, 0xe5, 0xb2, 0x20, 0x39, 0x5d, 0xc7, 0x8d, 0x2c, 0x7e, 0x22, 0x94, +0x8c, 0xb0, 0x96, 0xe6, 0x47, 0x93, 0xb6, 0x6d, 0x8d, 0x0a, 0x4c, 0xf2, +0x98, 0x20, 0x75, 0x9f, 0x5f, 0x08, 0xef, 0x04, 0x3e, 0xdb, 0x61, 0xcd, +0xc6, 0x90, 0xf3, 0xcd, 0xa7, 0x5e, 0xcf, 0x6a, 0x6c, 0xdd, 0x7c, 0xb3, +0x01, 0x15, 0xe1, 0x5d, 0xa9, 0xdf, 0x5c, 0xd1, 0xe3, 0xb6, 0x63, 0xc7, +0x2e, 0xd4, 0x7d, 0x72, 0x38, 0x73, 0xf2, 0x87, 0x5c, 0x77, 0xb4, 0xf9, +0x81, 0xaf, 0xc3, 0x81, 0x30, 0xa2, 0xa8, 0xf0, 0xeb, 0x2d, 0x9e, 0x6f, +0x3f, 0x77, 0x0b, 0x4b, 0xb7, 0xfa, 0x9a, 0x55, 0x96, 0xa8, 0x08, 0x63, +0x1b, 0x94, 0x30, 0x0a, 0x09, 0x73, 0x22, 0xa0, 0xa3, 0xb0, 0x6d, 0x5b, +0xd6, 0x61, 0xe0, 0xb2, 0x3d, 0x2d, 0x0f, 0x86, 0x4e, 0x5a, 0xb6, 0xd7, +0x6d, 0xd1, 0x0a, 0x15, 0x84, 0xba, 0x19, 0x25, 0xa8, 0x28, 0xaf, 0x30, +0x80, 0xa7, 0xc3, 0x94, 0x15, 0x2c, 0x1d, 0x45, 0x97, 0x61, 0xa1, 0x11, +0x65, 0x83, 0x32, 0x24, 0xa0, 0xb6, 0x6a, 0xde, 0x2c, 0x2e, 0x35, 0xa7, +0xdb, 0xe1, 0xbf, 0xf9, 0xb5, 0xb9, 0x54, 0x9e, 0x47, 0xc2, 0x33, 0x30, +0xa2, 0xbc, 0xc2, 0xbf, 0xd7, 0xd9, 0xb2, 0x68, 0x7c, 0xa3, 0xbc, 0x1a, +0xb7, 0x1e, 0x3a, 0x64, 0xf0, 0xe2, 0x85, 0xbd, 0x0d, 0x4a, 0x18, 0x85, +0xe4, 0xd9, 0xa1, 0x70, 0xb6, 0x68, 0x92, 0x9f, 0x98, 0xd5, 0xb0, 0xf0, +0xd6, 0x28, 0x2a, 0x04, 0x49, 0x5e, 0xd9, 0x50, 0x58, 0x9f, 0xd0, 0x69, +0xf4, 0x9c, 0x6a, 0x09, 0x8e, 0x87, 0xce, 0x9e, 0x8d, 0x58, 0x54, 0x10, +0xd3, 0x41, 0x08, 0x7d, 0xd3, 0x86, 0x0d, 0x92, 0x6a, 0x35, 0x6f, 0x73, +0x30, 0xd4, 0xfc, 0x74, 0x51, 0x5e, 0x51, 0x1e, 0x00, 0xee, 0x31, 0x6d, +0x19, 0x89, 0x78, 0xf7, 0x9e, 0x3e, 0x1d, 0x69, 0x71, 0x50, 0xe4, 0x54, +0xa9, 0x0a, 0xe4, 0x94, 0x71, 0xc8, 0xaf, 0x57, 0x37, 0xa5, 0x7e, 0xbb, +0xfc, 0xbd, 0x61, 0xa1, 0x64, 0xbb, 0xf7, 0xe2, 0xb9, 0xb5, 0x41, 0xb1, +0x29, 0x46, 0x6d, 0x50, 0x3f, 0x00, 0xec, 0x7c, 0xd1, 0xbc, 0xb5, 0xe2, +0xaf, 0x88, 0xb4, 0x98, 0x59, 0x41, 0x05, 0x31, 0xf3, 0xc4, 0x08, 0xbf, +0xfd, 0xd6, 0x5b, 0x0d, 0x6b, 0xd5, 0xaa, 0xd1, 0xba, 0x4f, 0xde, 0xce, +0x7f, 0x95, 0xc7, 0xd6, 0x53, 0x69, 0x63, 0x6a, 0x84, 0x4e, 0xb1, 0x2f, +0x5e, 0xb1, 0xa0, 0x02, 0x2f, 0xc5, 0xc5, 0x2e, 0xf4, 0xe2, 0xaf, 0x40, +0xdb, 0x8e, 0xa2, 0x42, 0x8f, 0x24, 0x1f, 0x78, 0xe5, 0x56, 0xf1, 0x57, +0xa8, 0xfc, 0x0a, 0x3d, 0x92, 0x3c, 0x5c, 0x6d, 0x50, 0x4a, 0xd5, 0x96, +0xda, 0xe3, 0xaf, 0xbc, 0xfc, 0x72, 0xbd, 0xbc, 0xbc, 0xfc, 0x5e, 0x63, +0x93, 0xb6, 0x7d, 0x5f, 0x69, 0x14, 0x5c, 0x1e, 0x82, 0xba, 0x1d, 0x54, +0x10, 0xec, 0x15, 0x45, 0x85, 0xe1, 0xad, 0x0f, 0xbf, 0x90, 0xa1, 0x3a, +0xff, 0xb2, 0xd9, 0x9f, 0x7c, 0xfc, 0x71, 0xe4, 0xe4, 0xe2, 0xa9, 0x32, +0x05, 0x52, 0xd2, 0xe6, 0xb9, 0x67, 0x9f, 0xad, 0x93, 0x93, 0xdd, 0x3e, +0x84, 0x4a, 0xda, 0xd8, 0x84, 0x50, 0x14, 0x15, 0xfe, 0x6d, 0x72, 0x8d, +0x4b, 0xfe, 0x92, 0x5e, 0xaf, 0x25, 0x61, 0xa1, 0xfb, 0x76, 0xef, 0x96, +0x30, 0x63, 0xc9, 0xdb, 0x0e, 0xef, 0x1a, 0x1f, 0xca, 0x53, 0x81, 0xaa, +0x4d, 0x46, 0xd1, 0xfd, 0xf7, 0xdd, 0x47, 0x97, 0x82, 0x9e, 0xd3, 0x43, +0xad, 0x10, 0xbf, 0x57, 0x6c, 0xb8, 0xb1, 0xcc, 0x96, 0x91, 0xa0, 0xa2, +0xbc, 0xc2, 0x12, 0x39, 0xfd, 0x6f, 0x38, 0x91, 0x98, 0x5a, 0xad, 0x41, +0xcd, 0xdc, 0x5f, 0xfe, 0xe2, 0x17, 0x52, 0xe3, 0x23, 0xec, 0x2b, 0xdf, +0x28, 0x54, 0x48, 0xb3, 0xaf, 0x5d, 0x3b, 0x77, 0xa6, 0x25, 0x26, 0x0c, +0x59, 0xb1, 0xcb, 0xbf, 0x9d, 0xa5, 0xea, 0x5e, 0x65, 0xe2, 0x15, 0xc4, +0x8c, 0x1b, 0xf5, 0x8a, 0x28, 0x2a, 0x2c, 0xdf, 0x5f, 0xdb, 0x92, 0xdf, +0x65, 0x34, 0xee, 0x98, 0x1c, 0xe3, 0xf8, 0xe0, 0x83, 0x0f, 0x22, 0xa4, +0x1e, 0x94, 0x72, 0x56, 0x80, 0x0a, 0x22, 0x64, 0x97, 0x5e, 0x79, 0x25, +0xf4, 0x33, 0x6e, 0x6b, 0xe8, 0x24, 0x64, 0x7b, 0xe5, 0x12, 0x72, 0x82, +0x4d, 0x54, 0x90, 0x84, 0x69, 0xd2, 0xb6, 0xcb, 0x36, 0xee, 0xb6, 0x79, +0xbf, 0x30, 0x3a, 0x2d, 0x7f, 0xe7, 0xe7, 0xd5, 0xdb, 0xf4, 0x4f, 0x72, +0xf5, 0xaf, 0x78, 0x42, 0xd5, 0x0e, 0x8c, 0x04, 0x09, 0x0a, 0x17, 0x9e, +0xa0, 0x62, 0xec, 0xc8, 0x91, 0xd0, 0x4f, 0xc7, 0xbd, 0x7f, 0xa8, 0xba, +0xbb, 0xbe, 0x7f, 0xf4, 0x66, 0x1f, 0x15, 0xa4, 0xd7, 0x94, 0xb5, 0xcc, +0x46, 0x3a, 0x2a, 0x32, 0x8a, 0xbf, 0x69, 0x3c, 0x70, 0x46, 0x52, 0x7c, +0xfc, 0xf1, 0xdb, 0x6f, 0x83, 0xc3, 0x46, 0x42, 0x9d, 0x59, 0xc5, 0x2b, +0x5c, 0x15, 0x01, 0x3f, 0xfb, 0xac, 0x47, 0xd7, 0x2e, 0x8e, 0xe4, 0xac, +0xd6, 0xfb, 0xbe, 0x88, 0xa2, 0xe2, 0x07, 0x68, 0x6c, 0x89, 0x74, 0x54, +0x40, 0x0a, 0x3d, 0x17, 0x6c, 0x74, 0x26, 0x38, 0x89, 0xa3, 0xc6, 0x0c, +0x15, 0x09, 0x95, 0xfa, 0x41, 0x85, 0xf4, 0xf8, 0xc2, 0x2c, 0x4b, 0x97, +0xd4, 0xe6, 0x8d, 0x1a, 0x64, 0xb7, 0xec, 0xdb, 0x60, 0x77, 0x28, 0xa7, +0x52, 0x78, 0x8b, 0x24, 0x17, 0x7f, 0x85, 0xb5, 0x5e, 0x61, 0x25, 0x41, +0x55, 0xd5, 0xd0, 0x2e, 0xff, 0x98, 0xa6, 0x5f, 0x57, 0x51, 0x57, 0x33, +0xde, 0x99, 0x3a, 0x74, 0xe0, 0x00, 0xe9, 0xea, 0x12, 0xf6, 0xbd, 0x8e, +0x04, 0x15, 0x24, 0xe2, 0xf2, 0xa4, 0x0f, 0xdc, 0x7f, 0x7f, 0x4e, 0x5a, +0x72, 0xfb, 0x89, 0x4b, 0x53, 0x8b, 0xbf, 0x8b, 0xf2, 0x0a, 0xc5, 0x2b, +0xa2, 0xa8, 0xf8, 0x6f, 0xab, 0x92, 0x4f, 0x13, 0x33, 0x6a, 0x36, 0xaa, +0x53, 0x9b, 0x78, 0xf2, 0x48, 0xe8, 0x00, 0xa6, 0xa3, 0x02, 0x03, 0x14, +0xa4, 0x30, 0x68, 0xd5, 0xc1, 0x70, 0x83, 0x84, 0x4f, 0xda, 0xb6, 0x49, +0xaf, 0x88, 0xa2, 0xe2, 0xbf, 0xd9, 0xdb, 0xbf, 0xaa, 0xd6, 0xba, 0x28, +0xa7, 0x5a, 0xe6, 0xb9, 0x47, 0x1f, 0x8d, 0x84, 0x1e, 0xaa, 0x82, 0x0a, +0xc2, 0x3d, 0x30, 0x43, 0xaf, 0x5c, 0xba, 0x14, 0x54, 0x4c, 0xd8, 0xf1, +0x78, 0x24, 0xa2, 0xe2, 0xd8, 0xb1, 0x63, 0x48, 0xcc, 0x48, 0x50, 0x7e, +0xa1, 0xe2, 0x3f, 0x31, 0x5b, 0x5c, 0x3f, 0x8e, 0x8b, 0x3f, 0x61, 0x08, +0xa4, 0x1a, 0x5d, 0xc6, 0x66, 0xa5, 0xa7, 0x51, 0x4a, 0x35, 0x12, 0x7a, +0xa8, 0xaa, 0xae, 0x14, 0xff, 0xfb, 0x3f, 0xff, 0x53, 0xd4, 0xb3, 0xbb, +0x23, 0x25, 0xbb, 0xfd, 0xbe, 0x3f, 0x47, 0x51, 0xa1, 0x59, 0xa1, 0xbc, +0x0b, 0xe2, 0x80, 0xe1, 0xdf, 0xb1, 0x17, 0x7e, 0xf8, 0x70, 0x01, 0x18, +0xe1, 0x86, 0x8a, 0x1a, 0xdb, 0xbf, 0x4e, 0xae, 0xd3, 0xb2, 0x56, 0x4e, +0xf6, 0x5b, 0x6f, 0xbe, 0xa9, 0xa3, 0x22, 0x2c, 0x8b, 0xf5, 0xeb, 0xe1, +0x1e, 0x84, 0xd0, 0x27, 0x3b, 0x1c, 0xcd, 0x87, 0xce, 0xce, 0xdd, 0x19, +0x46, 0x29, 0x78, 0x56, 0x31, 0xb3, 0xd6, 0xda, 0x36, 0xbc, 0x02, 0x9b, +0x23, 0x5e, 0x2a, 0xdf, 0x79, 0xc5, 0x7f, 0xe2, 0xb6, 0x7c, 0x9f, 0xb8, +0xf5, 0xfb, 0xf8, 0xad, 0x02, 0x89, 0x30, 0x44, 0x45, 0xab, 0x1d, 0xbf, +0x4d, 0x70, 0xa6, 0xf5, 0xe9, 0xd6, 0x45, 0xba, 0xd0, 0x87, 0xb7, 0xb6, +0xad, 0xcc, 0xb2, 0xb8, 0xf0, 0x6f, 0xbc, 0xee, 0x5a, 0x36, 0xc8, 0xb1, +0x9b, 0x43, 0xad, 0x28, 0xa0, 0xcd, 0x7d, 0xd9, 0xca, 0x5f, 0x81, 0x35, +0xa5, 0x34, 0xe2, 0xc3, 0x2f, 0x54, 0xb8, 0xb8, 0x04, 0x90, 0x70, 0x6e, +0xfb, 0x2e, 0x69, 0xdb, 0x77, 0xf1, 0x5b, 0x09, 0xa8, 0x0c, 0x43, 0x48, +0xc0, 0xfa, 0x06, 0x2d, 0xdf, 0x9d, 0x98, 0xe0, 0x5c, 0xb5, 0x7c, 0xb9, +0xa0, 0x02, 0x69, 0x5b, 0xca, 0x92, 0x87, 0x5f, 0xcc, 0xac, 0x2a, 0xfd, +0x84, 0x01, 0x8a, 0x87, 0xed, 0xd6, 0xae, 0x4d, 0x7c, 0xf5, 0x7a, 0x1d, +0x0e, 0x7c, 0x1e, 0x7e, 0xfc, 0xdf, 0x9d, 0x6f, 0x3b, 0x40, 0x54, 0xb8, +0x20, 0x01, 0x7f, 0x00, 0x12, 0x29, 0xdb, 0xbf, 0x4d, 0x2e, 0xfe, 0x36, +0x7e, 0x2b, 0x96, 0xbb, 0x30, 0x44, 0x05, 0x0d, 0x23, 0x0b, 0xc7, 0x2d, +0x48, 0x8a, 0x8b, 0xa3, 0x09, 0x58, 0xd8, 0x77, 0xa1, 0xd7, 0x2b, 0x18, +0x3c, 0xfb, 0xec, 0x33, 0x6c, 0xa6, 0xad, 0xc7, 0x2c, 0xcc, 0x0d, 0xb3, +0xb4, 0x0a, 0x8f, 0x12, 0x54, 0x20, 0xa8, 0x70, 0x49, 0x4a, 0x17, 0xb8, +0xc4, 0xb7, 0x69, 0xdb, 0xbf, 0x4d, 0xdf, 0xf1, 0xaf, 0xe4, 0xed, 0xdf, +0xc6, 0x6e, 0x11, 0x5e, 0x11, 0x6e, 0xc0, 0xa0, 0x61, 0x64, 0xbd, 0x8e, +0xfd, 0x93, 0x62, 0x1d, 0xcf, 0x3f, 0xff, 0x7c, 0x78, 0x5b, 0x66, 0x55, +0x5a, 0x05, 0xfe, 0x3b, 0xbc, 0xda, 0xd7, 0xad, 0x5a, 0xe9, 0x12, 0x9f, +0x6e, 0xbe, 0xd7, 0xb1, 0xe5, 0x7c, 0xa4, 0xf3, 0x0a, 0x5e, 0xbc, 0x8d, +0x5c, 0xbc, 0x0b, 0x8c, 0x62, 0xcb, 0x77, 0xa9, 0xc5, 0xdf, 0x66, 0x94, +0xfc, 0x8b, 0xff, 0x13, 0xb7, 0x7e, 0x17, 0x13, 0xa6, 0xaa, 0x76, 0xeb, +0xe2, 0xff, 0x4d, 0xc9, 0xa9, 0x9f, 0x1a, 0xe7, 0xf8, 0xc9, 0x4f, 0x7e, +0x12, 0xc6, 0x5d, 0xe8, 0x95, 0xec, 0x24, 0x15, 0x0c, 0x7e, 0xfb, 0x9b, +0xdf, 0x34, 0xaf, 0x5f, 0x27, 0xa5, 0x56, 0xd3, 0x8e, 0x07, 0xff, 0x1a, +0x9e, 0x90, 0x28, 0xeb, 0xaf, 0xe0, 0xe5, 0x92, 0x84, 0x2c, 0x8d, 0x7b, +0x2c, 0xf4, 0x0a, 0x3b, 0xa8, 0xc0, 0x08, 0x0b, 0x67, 0x40, 0x70, 0xca, +0xd8, 0xe1, 0xfa, 0x49, 0xdd, 0xfe, 0x5d, 0x7c, 0x98, 0x32, 0x8a, 0x86, +0xdb, 0xff, 0xd8, 0x65, 0xca, 0x32, 0xb6, 0x89, 0x99, 0xd3, 0x2f, 0xa1, +0x09, 0x58, 0x18, 0xc7, 0x41, 0x89, 0xec, 0x24, 0x6e, 0x0a, 0x82, 0x02, +0xef, 0xbd, 0xe7, 0x1e, 0x9e, 0xba, 0xed, 0xa4, 0x65, 0x79, 0xbb, 0xc2, +0x2b, 0x2b, 0xd5, 0x4d, 0x45, 0x4d, 0x85, 0x8a, 0x32, 0x91, 0xe4, 0x4a, +0xdb, 0xb6, 0x81, 0x0a, 0x20, 0xf1, 0x6f, 0x98, 0x43, 0xaa, 0x0b, 0x15, +0x2e, 0x46, 0x91, 0xb0, 0xf5, 0xfb, 0x70, 0x65, 0x14, 0x23, 0x6e, 0x7e, +0x20, 0x21, 0x3d, 0xa7, 0x45, 0xe3, 0x86, 0x3f, 0x7a, 0xee, 0x39, 0x29, +0x68, 0x40, 0xbe, 0x01, 0x44, 0x13, 0x66, 0x31, 0xb3, 0xba, 0xec, 0x84, +0xe9, 0x89, 0x67, 0xec, 0xde, 0xa9, 0x43, 0x62, 0x72, 0xb5, 0xf1, 0xdb, +0x1f, 0x09, 0x5b, 0x46, 0x11, 0x54, 0x5e, 0x01, 0x24, 0x5c, 0x1a, 0x45, +0x4a, 0xf1, 0xbf, 0x50, 0x27, 0x10, 0x9f, 0xd0, 0xb6, 0xe3, 0x2e, 0xca, +0x4e, 0xe1, 0xa6, 0x51, 0x20, 0x4f, 0x0f, 0x58, 0xe6, 0x8a, 0x77, 0xa0, +0x76, 0xe0, 0x87, 0x1f, 0x7e, 0x28, 0xc5, 0xfa, 0x2b, 0x3e, 0xeb, 0x88, +0xfd, 0xfb, 0xcb, 0xbf, 0xfe, 0xf5, 0x8b, 0xcf, 0x3f, 0xe7, 0xe7, 0xaf, +0x5f, 0x7c, 0x81, 0x84, 0x23, 0x85, 0xfd, 0x82, 0x68, 0x01, 0x53, 0x3e, +0x0a, 0xe9, 0x9c, 0x7d, 0xf2, 0x8e, 0xe3, 0xc9, 0xf1, 0xf1, 0x79, 0xbd, +0xa6, 0x84, 0x7c, 0x25, 0x59, 0xdb, 0x95, 0x6f, 0x94, 0xbf, 0xc2, 0x3f, +0x09, 0x0a, 0x1f, 0x36, 0x76, 0x27, 0x94, 0xec, 0x7f, 0xa5, 0x63, 0x7a, +0x42, 0x76, 0x72, 0x31, 0x8a, 0x30, 0x54, 0xb2, 0x2f, 0xec, 0x91, 0xe7, +0x7b, 0xcf, 0x5f, 0x0f, 0x2a, 0x76, 0xed, 0xd8, 0x6e, 0xe8, 0x2c, 0x5c, +0x91, 0xfd, 0xb6, 0xef, 0xb9, 0xfb, 0xee, 0x41, 0x7d, 0xfa, 0x14, 0x75, +0x2d, 0xec, 0xd7, 0xb5, 0x70, 0xd4, 0xb0, 0x61, 0xcf, 0x3d, 0xf3, 0x8c, +0x54, 0xb9, 0x15, 0x1f, 0x62, 0x50, 0xb0, 0xa1, 0x7c, 0x14, 0x92, 0xa8, +0xdd, 0xa3, 0x4b, 0xe7, 0xf8, 0xa4, 0xf4, 0xe1, 0x37, 0x87, 0x5d, 0x9a, +0x91, 0x01, 0x24, 0x9a, 0x02, 0x1d, 0xa0, 0x5e, 0x01, 0xa3, 0xf8, 0x37, +0x76, 0xd8, 0xf4, 0xed, 0xff, 0x42, 0x82, 0x4a, 0xdc, 0xf6, 0xfd, 0x05, +0x97, 0x76, 0xf8, 0x71, 0x09, 0x71, 0xcf, 0x9f, 0xef, 0x7c, 0xa9, 0xcb, +0x8d, 0x45, 0x8d, 0x0f, 0xbd, 0xb3, 0x70, 0x45, 0xf6, 0xdb, 0x86, 0x5e, +0xa7, 0x4c, 0x98, 0xc0, 0x1c, 0x9c, 0xb5, 0x5a, 0xc4, 0xe5, 0xe4, 0xf3, +0xe1, 0xd0, 0x81, 0x03, 0x60, 0x12, 0x06, 0x22, 0xd8, 0x08, 0x0a, 0x30, +0xf4, 0xea, 0x4f, 0x87, 0x0f, 0x1e, 0x4c, 0x49, 0x72, 0x66, 0x77, 0x9d, +0x10, 0xe6, 0x8c, 0xc2, 0xbe, 0x04, 0x85, 0x84, 0xe0, 0x59, 0xaf, 0x40, +0x7c, 0x4a, 0xd8, 0xf2, 0x5d, 0x4a, 0xf1, 0xb7, 0xa8, 0xda, 0xc8, 0x4e, +0xfc, 0x1a, 0xbe, 0x90, 0x70, 0xa1, 0xa2, 0xd5, 0xf8, 0x25, 0x10, 0xe2, +0x1d, 0xc7, 0x8f, 0x5b, 0xd6, 0x83, 0x0a, 0xca, 0x3e, 0xed, 0xb9, 0x5b, +0x29, 0x55, 0x14, 0x92, 0x63, 0x1d, 0x99, 0x6d, 0x06, 0xb0, 0xce, 0x4d, +0xae, 0x38, 0xc4, 0x64, 0x76, 0x97, 0x94, 0x20, 0xe7, 0x20, 0x47, 0x89, +0x6e, 0x13, 0x94, 0xa8, 0x13, 0x55, 0xfd, 0x09, 0x8d, 0xa2, 0xa8, 0x67, +0x4f, 0x47, 0x5c, 0xf2, 0xf0, 0xe2, 0x27, 0xc3, 0x59, 0xa3, 0x30, 0x65, +0xa8, 0x0a, 0xaf, 0xa0, 0xc6, 0x8d, 0x85, 0x04, 0x05, 0x2a, 0x48, 0x21, +0x70, 0x6f, 0x99, 0x75, 0x31, 0x8a, 0x44, 0x50, 0xb1, 0xfd, 0x5b, 0x97, +0x33, 0x7b, 0xcb, 0xbf, 0x2f, 0xc8, 0x4e, 0xe1, 0x16, 0xf5, 0xa4, 0x9e, +0xc8, 0xb9, 0xf5, 0xfb, 0x06, 0x43, 0xe7, 0xb3, 0x1a, 0x27, 0x4e, 0x9c, +0xc0, 0xd1, 0x8b, 0xaa, 0xad, 0xba, 0x45, 0x96, 0x77, 0x17, 0x7a, 0xe1, +0x00, 0xef, 0xbf, 0xf7, 0x5e, 0xfd, 0x9a, 0xb9, 0xf1, 0x79, 0xcd, 0x26, +0x1c, 0x7e, 0x93, 0x59, 0x15, 0x5c, 0x75, 0x9c, 0xc9, 0x94, 0x14, 0x17, +0xa3, 0x10, 0x63, 0x29, 0x02, 0x1b, 0x41, 0x01, 0x86, 0xf2, 0xdc, 0x31, +0x2c, 0x8c, 0x82, 0x82, 0x26, 0x35, 0xba, 0x8e, 0x0f, 0x7f, 0x46, 0x61, +0xc5, 0x2b, 0x8c, 0xa8, 0xb8, 0xed, 0xb6, 0xdb, 0xc8, 0xd0, 0xf5, 0x88, +0x8a, 0x8b, 0x3e, 0x8a, 0xe4, 0x6d, 0x78, 0xb2, 0xbf, 0x0b, 0x77, 0xd9, +0xc9, 0x05, 0xf5, 0x1a, 0xdb, 0xff, 0x29, 0xbd, 0x8e, 0x08, 0x95, 0x55, +0x95, 0xfa, 0x21, 0x9d, 0xf2, 0xee, 0x8b, 0x27, 0x90, 0x60, 0xff, 0x3e, +0x73, 0xef, 0xbd, 0xdc, 0x3d, 0x7f, 0xd6, 0xb6, 0x1e, 0x77, 0xb8, 0xca, +0x93, 0x35, 0xba, 0x6c, 0x57, 0x3c, 0x35, 0x78, 0xf6, 0xec, 0x41, 0x21, +0x16, 0x60, 0xc0, 0x31, 0x02, 0xc7, 0xa7, 0x52, 0x2a, 0x7e, 0xfd, 0xab, +0x5f, 0xf5, 0xe9, 0xde, 0xcd, 0x11, 0x97, 0x32, 0xa2, 0xe4, 0xd9, 0x30, +0xde, 0xec, 0x4a, 0x1f, 0xcd, 0xa4, 0x57, 0xb8, 0x45, 0x85, 0x7b, 0x09, +0xca, 0x85, 0x0a, 0xc4, 0x27, 0xf0, 0x90, 0xb8, 0x8d, 0xf0, 0xa7, 0x70, +0x8e, 0x1b, 0x97, 0x85, 0xab, 0xb7, 0xe3, 0xcb, 0xda, 0x83, 0xe6, 0xb1, +0x74, 0x77, 0xdf, 0x75, 0x97, 0x14, 0x83, 0x42, 0xc0, 0x80, 0x1c, 0xa1, +0xc5, 0xf2, 0xeb, 0xea, 0xa2, 0x20, 0xc1, 0x2d, 0x76, 0x6d, 0x2f, 0xe6, +0xee, 0xbd, 0x6f, 0xbc, 0xaf, 0xf6, 0x5e, 0x17, 0x4f, 0x6e, 0x38, 0xfd, +0x16, 0xe7, 0x05, 0xbd, 0x02, 0x3b, 0x98, 0x02, 0x46, 0xe0, 0xec, 0x82, +0x3b, 0x4a, 0xe6, 0xdd, 0x81, 0x7d, 0xfb, 0xb8, 0x5d, 0x5e, 0xd1, 0xec, +0xd0, 0xee, 0xeb, 0x65, 0x5f, 0x78, 0xb1, 0x8f, 0x0a, 0xf7, 0x12, 0x94, +0xcb, 0x20, 0x8b, 0xb7, 0x0e, 0xa3, 0xd3, 0x05, 0x48, 0x84, 0xad, 0xe0, +0xa4, 0x1e, 0xad, 0x69, 0xc9, 0x9f, 0x84, 0x57, 0x9c, 0x3e, 0x75, 0x4a, +0x32, 0x7a, 0x21, 0x47, 0x54, 0x6d, 0x41, 0x45, 0x79, 0x28, 0x15, 0x0a, +0x12, 0x90, 0xe9, 0xd7, 0x5f, 0x7d, 0xb5, 0x68, 0xee, 0x6c, 0x47, 0x4c, +0xf2, 0xf4, 0xc3, 0x3f, 0xbe, 0x88, 0xd2, 0xa9, 0xeb, 0x53, 0x1c, 0x8e, +0x23, 0x87, 0x0f, 0x03, 0x4e, 0x32, 0xaa, 0x71, 0x9b, 0xc0, 0x2e, 0x02, +0x47, 0x85, 0x28, 0x15, 0xbf, 0xf8, 0xf9, 0xcf, 0xdb, 0x36, 0x6d, 0x12, +0x9b, 0x91, 0x37, 0x7a, 0xcf, 0x0b, 0x91, 0xf0, 0x72, 0x0d, 0xd1, 0x81, +0xd6, 0x7a, 0x85, 0x37, 0x09, 0xea, 0x62, 0x78, 0x2c, 0xa8, 0x40, 0xb5, +0x08, 0x6f, 0x75, 0x42, 0xd1, 0x44, 0xab, 0x92, 0xdf, 0xe7, 0xf4, 0x98, +0x9c, 0xe8, 0x70, 0x3c, 0xf2, 0xf0, 0xc3, 0xf0, 0x56, 0xb2, 0xb2, 0xb0, +0x5a, 0x2a, 0x42, 0x0c, 0x3a, 0x2a, 0x74, 0x48, 0x00, 0x3c, 0x8a, 0xb2, +0x35, 0xaf, 0x5f, 0x3b, 0x25, 0xbf, 0x4b, 0xeb, 0xc3, 0x17, 0x13, 0xa6, +0x73, 0xfb, 0xcf, 0xcb, 0x4a, 0x4d, 0xc2, 0xeb, 0x8c, 0x7a, 0x23, 0xec, +0x42, 0x20, 0x1a, 0x88, 0x10, 0xa5, 0x3c, 0x15, 0xbb, 0x2f, 0x64, 0xa2, +0x0e, 0x58, 0xb4, 0x25, 0x4c, 0xba, 0x7b, 0xd9, 0xd9, 0xb5, 0x03, 0xe3, +0x15, 0x2e, 0x48, 0xc4, 0xb8, 0x18, 0x05, 0x82, 0x93, 0x64, 0x17, 0x45, +0x04, 0xaf, 0x68, 0xb7, 0xe3, 0x57, 0xce, 0xbc, 0xfc, 0x5a, 0xd5, 0x32, +0x70, 0x11, 0x48, 0xa3, 0x23, 0x08, 0x11, 0x49, 0x23, 0x10, 0x2a, 0xf4, +0x6c, 0x71, 0x62, 0xdb, 0x96, 0x5e, 0x2a, 0xbf, 0xff, 0xf4, 0xd3, 0x4b, +0x26, 0x4f, 0xe6, 0xad, 0x0d, 0x5a, 0xb2, 0x5d, 0x50, 0x7a, 0xc9, 0x91, +0xd7, 0x1d, 0x09, 0xe9, 0x6d, 0xdb, 0xb6, 0xf9, 0xf9, 0xcf, 0x7e, 0x16, +0x5c, 0x54, 0x70, 0x47, 0x06, 0x1c, 0xd0, 0xa3, 0x6b, 0x42, 0x56, 0xfd, +0x96, 0x87, 0xc2, 0x31, 0xbb, 0xc8, 0x1d, 0x42, 0x02, 0x47, 0x05, 0x81, +0x4f, 0x3f, 0xe0, 0x21, 0x22, 0x20, 0x41, 0xa8, 0x6c, 0xc7, 0xe1, 0x97, +0xb2, 0x6e, 0xf3, 0xe7, 0xcc, 0xc1, 0xab, 0x2d, 0x4a, 0x05, 0x42, 0x4b, +0x80, 0x7b, 0xb3, 0x67, 0x54, 0x48, 0x1f, 0x3a, 0xd8, 0xd1, 0x92, 0xc5, +0xae, 0x72, 0x7d, 0x7d, 0xa6, 0x2d, 0x6d, 0x75, 0xeb, 0xb7, 0x40, 0xa2, +0xd6, 0x9e, 0xef, 0x5b, 0x8d, 0x98, 0x93, 0x92, 0x10, 0xbf, 0x7d, 0xeb, +0x56, 0x4c, 0x87, 0x41, 0x44, 0x85, 0xe0, 0x90, 0x4a, 0xa1, 0xad, 0x1b, +0xd7, 0x4f, 0xcb, 0x2f, 0x8c, 0xa2, 0xa2, 0x8c, 0x65, 0xd6, 0xa3, 0x04, +0x25, 0xbc, 0x22, 0xbc, 0x5d, 0x13, 0x46, 0x35, 0xa9, 0xef, 0x65, 0x37, +0x40, 0x97, 0xa3, 0x86, 0x0e, 0x25, 0xd6, 0x43, 0x4c, 0x13, 0xe5, 0x5a, +0x77, 0x59, 0x24, 0x19, 0xa9, 0xc2, 0x84, 0x42, 0xdf, 0x20, 0x2f, 0x27, +0x29, 0xbb, 0x7e, 0xf7, 0x63, 0x17, 0xbb, 0xa8, 0x74, 0x39, 0xfa, 0x55, +0x7c, 0x72, 0x46, 0xc7, 0x36, 0xad, 0x01, 0x27, 0x82, 0x1c, 0x5c, 0x8b, +0xc9, 0xe8, 0x7a, 0x85, 0xdf, 0xe2, 0x9c, 0xa0, 0x82, 0x58, 0x92, 0x11, +0x03, 0x8a, 0xe2, 0xb3, 0xea, 0x8d, 0xd9, 0xff, 0x4a, 0xb8, 0x2b, 0x15, +0xda, 0x9e, 0x1e, 0x00, 0xaf, 0x70, 0x41, 0x22, 0x2c, 0x13, 0x27, 0x3c, +0xbc, 0xfe, 0xac, 0xe2, 0x7f, 0xe4, 0x15, 0x74, 0x28, 0x68, 0xd4, 0xf0, +0xd9, 0x67, 0x9f, 0xc5, 0x53, 0x81, 0xf8, 0x24, 0x25, 0x03, 0xcb, 0x55, +0xa9, 0x50, 0x8c, 0x82, 0x1b, 0xe5, 0x64, 0xa4, 0xa6, 0xd6, 0x6a, 0xda, +0xea, 0xd0, 0xc5, 0x78, 0xd5, 0xa9, 0x87, 0x5e, 0x4e, 0x74, 0xa6, 0x4c, +0x9b, 0x38, 0x41, 0xa1, 0x02, 0x6d, 0x5b, 0x6c, 0xc4, 0x81, 0xc4, 0x29, +0x2a, 0x28, 0xf2, 0x5c, 0x5b, 0x6f, 0xde, 0x04, 0x91, 0xd4, 0x1e, 0x72, +0x45, 0xb8, 0x7b, 0x2a, 0x82, 0x83, 0x0a, 0x55, 0xa3, 0x20, 0x22, 0x04, +0x27, 0x81, 0x4a, 0x8b, 0x62, 0x57, 0x92, 0x49, 0xbf, 0x5e, 0xbd, 0x68, +0x7e, 0x85, 0x51, 0x4e, 0xd9, 0x64, 0xcb, 0x55, 0xa9, 0x50, 0xdd, 0x19, +0xe1, 0x03, 0xb9, 0xe9, 0xa9, 0x75, 0x9a, 0x75, 0xaa, 0xbe, 0x93, 0xc5, +0xff, 0x6f, 0xf5, 0x92, 0xef, 0x47, 0x6c, 0x7f, 0xd2, 0xe9, 0x4c, 0x9d, +0x33, 0x73, 0x06, 0x33, 0x09, 0xa2, 0xf8, 0xa4, 0x50, 0xc1, 0x73, 0x51, +0xce, 0xa3, 0x27, 0x95, 0x33, 0x79, 0xea, 0x85, 0xb7, 0x14, 0xec, 0x09, +0xaf, 0xae, 0x90, 0x65, 0xf4, 0x8a, 0x28, 0x2a, 0xec, 0x18, 0x22, 0xac, +0xce, 0xe9, 0xb1, 0xa8, 0x38, 0xd6, 0xe1, 0xb8, 0x6c, 0xe6, 0x4c, 0x69, +0x71, 0x24, 0xd6, 0x27, 0x65, 0x93, 0x0d, 0x4a, 0x90, 0x85, 0x41, 0xc1, +0xd0, 0x23, 0x91, 0x1e, 0x3f, 0x77, 0x2e, 0xc3, 0x99, 0xd0, 0x75, 0xe4, +0x8c, 0x8b, 0x10, 0x3d, 0xf0, 0x75, 0xe7, 0xd5, 0xa7, 0xe3, 0xe3, 0x9d, +0x23, 0x87, 0x0e, 0xc1, 0x3a, 0x0c, 0x2a, 0x94, 0xf8, 0x14, 0xa0, 0x92, +0xa3, 0xa3, 0x02, 0x79, 0xec, 0x8d, 0x37, 0xde, 0x68, 0xdd, 0xcc, 0xd5, +0x6a, 0xbe, 0xf7, 0xfc, 0x0d, 0xed, 0x76, 0x7d, 0xda, 0xb8, 0xe4, 0xcf, +0x64, 0xe7, 0x86, 0x97, 0x40, 0x55, 0x56, 0x0b, 0xb0, 0x29, 0x41, 0xa1, +0x75, 0xe1, 0xae, 0x2a, 0x1b, 0xf1, 0x11, 0x59, 0xea, 0x04, 0x44, 0xd0, +0xa0, 0xf8, 0x8f, 0x29, 0xf5, 0x5a, 0x65, 0xa4, 0xa7, 0xdd, 0x7e, 0xdb, +0x6d, 0x12, 0x3d, 0x8e, 0x9e, 0x2d, 0xd6, 0xa7, 0xf2, 0x0b, 0x95, 0x55, +0x91, 0x48, 0x7f, 0xfb, 0xf2, 0x4b, 0xf6, 0xec, 0x98, 0xd8, 0xc4, 0x49, +0x25, 0x8f, 0x09, 0x45, 0x76, 0x3e, 0xf4, 0x45, 0x76, 0x87, 0x21, 0x34, +0xad, 0xdc, 0xbe, 0x6d, 0x1b, 0xea, 0x8d, 0x4c, 0x26, 0x70, 0xf1, 0x49, +0x60, 0xa9, 0xac, 0x5e, 0x60, 0x1e, 0x6b, 0xef, 0x8f, 0x5f, 0xf9, 0x71, +0xeb, 0xa6, 0x05, 0x10, 0x40, 0xcd, 0xfe, 0x97, 0xb5, 0x99, 0xb7, 0xbd, +0xff, 0x0d, 0x27, 0x87, 0x6f, 0x3e, 0xdb, 0x62, 0xeb, 0x2f, 0x1a, 0x6c, +0xfb, 0x43, 0xda, 0xd6, 0x7f, 0x86, 0x38, 0x42, 0x4c, 0x7e, 0x67, 0x8d, +0xd0, 0x69, 0xc3, 0x80, 0xa8, 0x6c, 0xed, 0xdb, 0x76, 0x83, 0x8a, 0xf0, +0x77, 0xd8, 0xa9, 0xf7, 0xdd, 0xa0, 0xf8, 0x0f, 0x85, 0x53, 0x5c, 0xd5, +0xf2, 0x86, 0x0c, 0x18, 0x40, 0xf4, 0xb8, 0x74, 0xfd, 0x62, 0x6f, 0x16, +0x97, 0x76, 0xb9, 0xda, 0x64, 0x25, 0x0f, 0x8e, 0xf8, 0xdc, 0xe4, 0xc4, +0xc4, 0xac, 0xc2, 0xd1, 0x2d, 0x0e, 0x5e, 0xa4, 0xc2, 0xd1, 0xeb, 0xee, +0x8c, 0x4b, 0x48, 0xea, 0xdf, 0xab, 0x27, 0x59, 0xa3, 0xa0, 0x02, 0xda, +0x15, 0x3d, 0x3b, 0x28, 0xf3, 0x51, 0x41, 0x50, 0x60, 0x1e, 0x5d, 0x05, +0x46, 0xf4, 0xe2, 0x8b, 0x2f, 0x0a, 0x30, 0x62, 0xe3, 0x53, 0x12, 0xd3, +0x6a, 0x24, 0x66, 0xe4, 0xa6, 0xd4, 0x6c, 0x52, 0xaf, 0xd3, 0x60, 0x96, +0x65, 0xf0, 0x0d, 0x77, 0xd4, 0xdf, 0x26, 0xf5, 0xfa, 0x43, 0x51, 0x9c, +0x36, 0xed, 0xef, 0x76, 0x50, 0xc1, 0x26, 0x14, 0xe1, 0xa8, 0xe0, 0x95, +0x77, 0x9f, 0xb3, 0x3e, 0x26, 0x36, 0x01, 0xb2, 0x78, 0xee, 0xb9, 0xe7, +0x88, 0x93, 0xa5, 0x40, 0x96, 0x44, 0x04, 0x4a, 0xa9, 0x9b, 0xf2, 0x90, +0x9d, 0xd8, 0xb0, 0x95, 0x2b, 0x8d, 0x0d, 0x7b, 0xd2, 0xf8, 0xf1, 0xbc, +0xac, 0xd1, 0x7b, 0x5f, 0x12, 0xa0, 0xe6, 0xed, 0xfa, 0xae, 0x59, 0xff, +0x49, 0x44, 0xec, 0x3d, 0xf5, 0xc4, 0x13, 0x4c, 0x46, 0xc9, 0x72, 0xa2, +0xe1, 0x04, 0xee, 0x62, 0x37, 0xd8, 0xbe, 0xc0, 0x3f, 0xbb, 0x00, 0xc0, +0xb8, 0x6e, 0xd5, 0xd5, 0xf3, 0x67, 0xcf, 0x1e, 0x39, 0x68, 0x60, 0xff, +0x9e, 0xdd, 0x6b, 0x67, 0x65, 0xe2, 0xca, 0x4c, 0x88, 0x89, 0x8d, 0x77, +0xa6, 0x55, 0x6b, 0xd5, 0xaf, 0xcf, 0x35, 0xc7, 0xea, 0x6f, 0xfb, 0x2c, +0x04, 0x81, 0x61, 0x42, 0xb2, 0x15, 0x2a, 0x58, 0xe1, 0xd2, 0xbc, 0x6d, +0x2c, 0xb3, 0x11, 0x8e, 0x0a, 0xde, 0x74, 0xf7, 0xcb, 0x6f, 0x89, 0x49, +0x48, 0xae, 0x59, 0x23, 0x8b, 0xb0, 0x3c, 0x49, 0x33, 0xaa, 0x80, 0x28, +0x0f, 0x41, 0x85, 0x18, 0xa0, 0x30, 0xb9, 0xf6, 0xed, 0x41, 0x05, 0xcb, +0x9c, 0xae, 0x87, 0xbf, 0x14, 0x54, 0x74, 0x38, 0xf0, 0x45, 0x4a, 0xed, +0xe6, 0xed, 0x9a, 0xe6, 0x13, 0x92, 0x20, 0x10, 0x65, 0x47, 0x17, 0x46, +0x11, 0xac, 0x30, 0x72, 0xb9, 0xbb, 0x84, 0x42, 0x49, 0x23, 0x3c, 0x9e, +0x5a, 0x6a, 0xab, 0x62, 0x6c, 0x20, 0x49, 0xed, 0xcd, 0x37, 0xdf, 0x7c, +0xf8, 0xec, 0xd9, 0x4d, 0x1b, 0x36, 0x14, 0xb6, 0x6d, 0x9b, 0x18, 0xe3, +0x88, 0x75, 0xa6, 0x76, 0x99, 0xb5, 0x06, 0x99, 0x2a, 0xa4, 0x04, 0x2a, +0x2b, 0xe6, 0x66, 0xa5, 0x57, 0xd8, 0x44, 0x45, 0x44, 0x88, 0x4f, 0xf5, +0xb7, 0x7e, 0xd6, 0xfd, 0x8a, 0x2d, 0x8e, 0x84, 0xe4, 0x8c, 0xe4, 0xa4, +0x03, 0xfb, 0xf7, 0x4b, 0xbe, 0x22, 0x52, 0xa6, 0x50, 0x61, 0xf9, 0x99, +0x9e, 0x44, 0xb8, 0x57, 0xa8, 0xb8, 0x98, 0xde, 0x90, 0x9c, 0xd5, 0xf1, +0xf0, 0x3f, 0x84, 0xe6, 0x26, 0x1f, 0x78, 0x21, 0x3e, 0xa3, 0xe6, 0xb0, +0xfe, 0xfd, 0x40, 0xa9, 0x84, 0xb2, 0x0b, 0x2a, 0x82, 0xa8, 0xe1, 0x08, +0xbb, 0x50, 0x76, 0x61, 0x18, 0x23, 0xc0, 0x40, 0x54, 0x03, 0x84, 0x08, +0x90, 0x60, 0x03, 0x93, 0xc3, 0x47, 0x1f, 0x7d, 0xf4, 0xde, 0x7b, 0xef, +0xbd, 0xfa, 0xea, 0xab, 0x37, 0xde, 0xb0, 0x86, 0x2e, 0xc3, 0x90, 0x53, +0xd7, 0xd9, 0x6b, 0x90, 0x36, 0x2b, 0x04, 0x18, 0x81, 0x4b, 0x6b, 0x32, +0x42, 0x30, 0x79, 0x45, 0xf8, 0xa3, 0xa2, 0xde, 0xd6, 0xcf, 0xba, 0xcd, +0xdf, 0xe4, 0x88, 0x77, 0x56, 0xcf, 0x48, 0xdf, 0xb6, 0x65, 0xcb, 0x3b, +0xef, 0xbc, 0xf3, 0xd3, 0x9f, 0xfe, 0x54, 0x82, 0x64, 0x25, 0x4b, 0xbb, +0xfc, 0xc2, 0x01, 0x75, 0x54, 0x48, 0xc7, 0xad, 0xc1, 0x45, 0x45, 0x24, +0xde, 0xb5, 0x3c, 0x78, 0xd1, 0x7f, 0xd7, 0x74, 0xef, 0xdf, 0x53, 0x1b, +0xb4, 0x6f, 0x98, 0x97, 0xfd, 0xee, 0x3b, 0xef, 0x28, 0x54, 0x04, 0x1d, +0xa5, 0x06, 0x60, 0xf0, 0xc8, 0x88, 0x52, 0x30, 0x2e, 0x98, 0x06, 0xc6, +0x06, 0xac, 0x70, 0x44, 0x52, 0x83, 0x0d, 0x1c, 0x9a, 0x2c, 0xce, 0xa9, +0x53, 0xa7, 0x1a, 0xd6, 0xab, 0x8b, 0xde, 0xd1, 0xf3, 0xca, 0x92, 0x0a, +0x01, 0x46, 0xb0, 0x50, 0x61, 0xa2, 0x64, 0xfb, 0x12, 0x14, 0xdb, 0x43, +0x59, 0x1b, 0x54, 0x98, 0xa3, 0xc2, 0x05, 0x89, 0x79, 0x1b, 0x11, 0x0b, +0xaa, 0x57, 0xcb, 0xdc, 0xb9, 0x63, 0x07, 0x6f, 0x9d, 0x5d, 0x19, 0x22, +0x10, 0x71, 0xa5, 0x62, 0x7a, 0xce, 0xab, 0x0c, 0x07, 0x6e, 0x87, 0x37, +0x3d, 0x39, 0x39, 0xb9, 0xde, 0x1e, 0x55, 0x6f, 0xe6, 0x7c, 0x8f, 0x4b, +0x96, 0xc7, 0x38, 0x1c, 0x2b, 0x97, 0x2d, 0x15, 0xde, 0x55, 0x4e, 0xb1, +0x58, 0x3a, 0x30, 0x44, 0x94, 0x82, 0x29, 0xb1, 0x29, 0x70, 0x47, 0x76, +0x07, 0x56, 0x83, 0x6d, 0x02, 0x2b, 0x0d, 0x32, 0x15, 0xb2, 0xdc, 0xad, +0x87, 0x0e, 0x55, 0xcb, 0xcc, 0x8c, 0x4b, 0xca, 0xe8, 0xbd, 0x6c, 0x5f, +0x85, 0xb0, 0x8b, 0xf2, 0x21, 0xc2, 0x28, 0x2a, 0x2c, 0x5f, 0x1e, 0x82, +0x53, 0xd7, 0xd9, 0x6b, 0x63, 0xe3, 0x9c, 0xd5, 0xd3, 0xd2, 0xf6, 0xec, +0xde, 0xfd, 0xee, 0xbb, 0xef, 0xf2, 0xd6, 0x91, 0x19, 0xd8, 0x95, 0x0d, +0x3e, 0x0a, 0xbf, 0x43, 0x2a, 0x3c, 0x04, 0x3e, 0xa9, 0x3f, 0x49, 0x86, +0x83, 0x54, 0xec, 0x1b, 0x37, 0x6a, 0x54, 0xdd, 0xba, 0x75, 0x53, 0x8a, +0x5d, 0xfe, 0x3b, 0xf9, 0xc1, 0xa7, 0x96, 0x5c, 0xa3, 0x5e, 0x56, 0x4a, +0x12, 0xbb, 0x35, 0xb3, 0xe2, 0x9c, 0xa0, 0x58, 0x9f, 0xcc, 0x13, 0xd3, +0x81, 0xc1, 0x2d, 0x90, 0xd3, 0xc0, 0x06, 0xb7, 0x03, 0x1b, 0xdc, 0x17, +0x6c, 0xb0, 0x2c, 0xe8, 0x5a, 0xc8, 0x96, 0xd8, 0x31, 0x37, 0x6f, 0xda, +0xe4, 0x8c, 0x8d, 0x49, 0xc9, 0x6d, 0x44, 0xc0, 0x98, 0xbf, 0xc0, 0x08, +0x9c, 0x09, 0x04, 0x86, 0x16, 0x9b, 0x36, 0x28, 0x9e, 0x3c, 0x72, 0x78, +0x05, 0x90, 0xe8, 0x34, 0x65, 0x59, 0x6c, 0x6c, 0x5c, 0x5e, 0xf5, 0xcc, +0xfd, 0xfb, 0xf7, 0x03, 0x09, 0x04, 0x27, 0xe1, 0x12, 0x12, 0xf5, 0x54, +0xae, 0xd6, 0x58, 0x9d, 0x28, 0x15, 0x2a, 0xfe, 0xfc, 0x97, 0xbf, 0xf4, +0xe9, 0xd1, 0xbd, 0x45, 0x87, 0x1e, 0x3a, 0x9d, 0x15, 0xec, 0xf9, 0x32, +0x25, 0xa7, 0x41, 0x5e, 0x66, 0x1a, 0x15, 0x15, 0xca, 0xbb, 0x2b, 0x9f, +0x02, 0x86, 0xa0, 0x14, 0xa6, 0x21, 0x45, 0xd3, 0xe0, 0x1b, 0xe8, 0x3c, +0xdc, 0x5d, 0x04, 0x2a, 0x52, 0x9c, 0xd1, 0x34, 0x26, 0x8e, 0x1d, 0x13, +0x1b, 0x1b, 0x3f, 0x70, 0xe9, 0x0e, 0x7f, 0x51, 0x11, 0x18, 0x4d, 0xfb, +0xeb, 0xa2, 0x2d, 0x9d, 0xad, 0x4d, 0x5e, 0x11, 0x39, 0xa8, 0x00, 0x12, +0x6d, 0x87, 0x4c, 0x67, 0x59, 0x9a, 0x35, 0x6a, 0x74, 0xd7, 0xc9, 0x93, +0x02, 0x09, 0x36, 0x42, 0x09, 0x79, 0x52, 0x9e, 0xec, 0xf2, 0xb3, 0xc6, +0x9a, 0x51, 0x01, 0x09, 0x3e, 0xf7, 0xec, 0xb3, 0xf5, 0x72, 0x6b, 0xf4, +0xb9, 0xe4, 0x2a, 0x9d, 0xce, 0x7a, 0xcf, 0x5b, 0xc7, 0x3c, 0x17, 0xcc, +0x9d, 0x83, 0x0c, 0x03, 0x5c, 0x95, 0xf6, 0x5f, 0x4e, 0xec, 0x4b, 0x4f, +0x06, 0xe4, 0xf1, 0x51, 0xeb, 0x15, 0xdf, 0xe0, 0xd6, 0xa2, 0x6c, 0x20, +0xcb, 0xc1, 0x51, 0xcf, 0x9d, 0x3b, 0x97, 0xe4, 0x70, 0x34, 0xea, 0xd4, +0x3f, 0x7b, 0xc7, 0x45, 0x2d, 0xc8, 0x17, 0x78, 0x28, 0x9f, 0x5a, 0xe5, +0x25, 0x75, 0xda, 0x41, 0x05, 0x8c, 0x32, 0x12, 0x50, 0x51, 0xf7, 0x96, +0xdf, 0x77, 0x5f, 0xbc, 0xd3, 0x99, 0xdb, 0x90, 0x35, 0xe9, 0xde, 0xa5, +0xf3, 0x23, 0x8f, 0x3c, 0x82, 0x2e, 0x81, 0xe0, 0x24, 0x99, 0xd9, 0x22, +0x38, 0x19, 0xb8, 0x44, 0x39, 0xd1, 0x9f, 0x41, 0x82, 0x02, 0x15, 0x4b, +0x17, 0x2f, 0x66, 0x56, 0xe3, 0x37, 0xde, 0xad, 0x89, 0x4f, 0x5f, 0x26, +0xe7, 0x36, 0xac, 0x99, 0x99, 0xfe, 0xc2, 0x0b, 0x2f, 0xc0, 0xc6, 0x2b, +0x00, 0x15, 0x62, 0x13, 0x13, 0xa6, 0x21, 0xb6, 0x29, 0xc1, 0x06, 0xd3, +0xc3, 0x9d, 0x82, 0x40, 0x05, 0xd3, 0x10, 0x60, 0xa0, 0x80, 0x15, 0xf5, +0xe8, 0xea, 0xac, 0x5e, 0xb7, 0xcd, 0x2e, 0xdc, 0x17, 0x3e, 0x6d, 0xfc, +0x06, 0x48, 0xf8, 0x74, 0x6d, 0xf0, 0x4e, 0x8e, 0xa2, 0x42, 0xbd, 0xb6, +0x2e, 0x73, 0x37, 0xc6, 0x39, 0xd3, 0xf0, 0x1f, 0x4f, 0x9f, 0x3a, 0xf5, +0xf1, 0xc7, 0x1f, 0x7f, 0xfb, 0xed, 0xb7, 0x79, 0xbb, 0xec, 0x7c, 0xa2, +0x5e, 0x9b, 0xb9, 0x44, 0x79, 0x43, 0x42, 0xa8, 0x10, 0xca, 0xfb, 0xf0, +0x83, 0x0f, 0x5a, 0xe6, 0x37, 0x4c, 0xac, 0xd3, 0x5a, 0x39, 0x2b, 0x28, +0xbd, 0xd3, 0x67, 0xe1, 0x56, 0xde, 0xdd, 0x35, 0xab, 0xae, 0x86, 0x95, +0x55, 0x18, 0x2a, 0x94, 0x65, 0xcc, 0xc0, 0x37, 0x84, 0x69, 0x20, 0x50, +0x09, 0x30, 0x58, 0xb4, 0x49, 0xa3, 0x47, 0xc6, 0xa7, 0xd6, 0x18, 0xbd, +0xf5, 0x61, 0x5f, 0x50, 0x21, 0x90, 0xa8, 0x02, 0x81, 0xd8, 0x51, 0x54, +0xc8, 0x6b, 0xab, 0xbb, 0xe5, 0xf7, 0x09, 0xe9, 0xd9, 0x19, 0x69, 0xa9, +0x9b, 0x36, 0x6e, 0x7c, 0xf9, 0xe5, 0x97, 0x81, 0x04, 0xf2, 0xb1, 0x54, +0xb5, 0xa9, 0x60, 0x5d, 0xc2, 0x20, 0x41, 0xb1, 0x25, 0xff, 0xe8, 0xd9, +0x67, 0xd3, 0x09, 0x40, 0x1a, 0xb2, 0xb0, 0xcb, 0x91, 0xbf, 0x2b, 0x3d, +0x3b, 0xb5, 0x7e, 0x1b, 0xde, 0xdd, 0x99, 0xd3, 0xa7, 0x55, 0x9c, 0xa2, +0x68, 0xdb, 0x81, 0x7b, 0xb5, 0xed, 0x98, 0x01, 0x14, 0x3c, 0x14, 0xd3, +0x90, 0x8a, 0xe5, 0x12, 0x1b, 0x82, 0x82, 0x31, 0x63, 0xca, 0xe4, 0xb8, +0xa4, 0x6a, 0x5d, 0xaf, 0xbe, 0xdd, 0x77, 0x54, 0x54, 0x9e, 0xe0, 0xa4, +0xd8, 0x9a, 0x09, 0x15, 0x62, 0x65, 0x31, 0xfa, 0xb6, 0x91, 0xa0, 0x78, +0xd4, 0x30, 0xb6, 0xcc, 0xf6, 0x5b, 0xb6, 0x3b, 0x2e, 0x36, 0x7e, 0xd8, +0xe0, 0x41, 0x08, 0x24, 0x6f, 0xbd, 0xf5, 0x96, 0x40, 0x42, 0x62, 0xc2, +0x54, 0xa5, 0x82, 0x8a, 0xd1, 0x25, 0xcc, 0xa8, 0x80, 0xf4, 0x59, 0xf9, +0xc6, 0x33, 0xb6, 0x14, 0x1e, 0xb9, 0xd8, 0xef, 0xbd, 0xe7, 0x05, 0x8d, +0xe2, 0x8a, 0x05, 0x0b, 0xb0, 0xf9, 0x48, 0xed, 0x67, 0xb1, 0xcc, 0x56, +0x30, 0x2a, 0x74, 0x99, 0x4a, 0xe5, 0x45, 0x89, 0xbc, 0xbd, 0xf8, 0xf2, +0xf9, 0x8e, 0xf8, 0xe4, 0x2e, 0x2b, 0x0e, 0xfb, 0x82, 0x8a, 0xe0, 0x89, +0x40, 0xbe, 0x89, 0x6d, 0xde, 0xfd, 0x15, 0x16, 0xa8, 0x90, 0xe7, 0x0c, +0x6f, 0x54, 0xb4, 0x1b, 0x3e, 0x33, 0x35, 0x31, 0x71, 0x7b, 0x71, 0xf1, +0x6b, 0xaf, 0xbd, 0x26, 0xa4, 0x06, 0x24, 0x24, 0xac, 0xa3, 0x5c, 0xb3, +0x4f, 0x3d, 0x6f, 0xcc, 0xe2, 0xaf, 0x38, 0x7a, 0xf8, 0x30, 0x18, 0x68, +0x7a, 0xc5, 0xa1, 0xb6, 0xb7, 0xba, 0xe2, 0xb7, 0x29, 0x3f, 0x13, 0x9f, +0xd5, 0xb0, 0x59, 0xa3, 0xfa, 0x0f, 0x3f, 0xf4, 0x90, 0xd8, 0x8b, 0x91, +0xf1, 0x50, 0x76, 0x65, 0x9e, 0x15, 0xc9, 0x2b, 0x0c, 0x1c, 0x03, 0x1d, +0x43, 0xd8, 0x05, 0xd4, 0x32, 0x63, 0xca, 0xc4, 0xb8, 0x94, 0xac, 0x71, +0x3b, 0xce, 0x85, 0x39, 0x2a, 0xc2, 0xdb, 0x32, 0x5b, 0xab, 0x5d, 0xbf, +0xf4, 0x24, 0xe7, 0x3d, 0xa7, 0x4e, 0x61, 0x74, 0x12, 0x99, 0x44, 0xb8, +0x84, 0x04, 0x66, 0x57, 0x3c, 0x97, 0xd0, 0x7d, 0xdb, 0x3b, 0xb6, 0x6e, +0x01, 0x15, 0xcd, 0x97, 0x1c, 0x6f, 0x7e, 0xd0, 0xe5, 0xc2, 0x1b, 0xb6, +0xf9, 0x2c, 0xbf, 0xce, 0x9e, 0x31, 0x03, 0xf4, 0x62, 0x93, 0x15, 0x63, +0x80, 0xca, 0x1d, 0xaf, 0x78, 0x54, 0xa8, 0xc8, 0x14, 0x89, 0x98, 0x02, +0x9c, 0x90, 0x4a, 0x41, 0x9d, 0x9a, 0x69, 0xf5, 0xdb, 0x10, 0xac, 0x15, +0xce, 0xa8, 0x60, 0xd7, 0x0c, 0x6f, 0x5e, 0x51, 0xbb, 0x6d, 0xdf, 0xf4, +0xa4, 0xa4, 0x07, 0xee, 0xbf, 0x1f, 0x52, 0x53, 0xb9, 0x13, 0xbc, 0x60, +0x3d, 0x77, 0xa2, 0x02, 0xd4, 0x6b, 0x03, 0xeb, 0x10, 0x5e, 0xb1, 0x7e, +0xcd, 0x1a, 0x60, 0xd0, 0x62, 0xe5, 0xdd, 0x0d, 0xf6, 0xb9, 0x4a, 0xdd, +0x14, 0x2c, 0xba, 0x95, 0x5f, 0x97, 0x2f, 0x5d, 0x4a, 0x9c, 0x05, 0x00, +0xc6, 0x6a, 0x4c, 0x44, 0xb3, 0x94, 0x69, 0x0b, 0x24, 0x2b, 0xd5, 0xbe, +0x3a, 0x61, 0xe9, 0xe6, 0xd3, 0x3b, 0xbf, 0xbc, 0xf6, 0xea, 0xab, 0x38, +0xdd, 0x5b, 0x0e, 0xbc, 0x24, 0x6f, 0xa7, 0xab, 0xe4, 0x42, 0xe8, 0xfd, +0xd8, 0xd1, 0x2b, 0x24, 0x58, 0x32, 0xbc, 0x51, 0xd1, 0x69, 0xc2, 0x95, +0xc9, 0x09, 0x09, 0xf8, 0x65, 0x55, 0xee, 0x84, 0x04, 0xdb, 0xa9, 0xa8, +0xec, 0x8a, 0x87, 0x84, 0xda, 0x83, 0x57, 0xaf, 0x5c, 0xce, 0x6b, 0x6a, +0x73, 0xdd, 0x7d, 0xd9, 0xbb, 0x5c, 0xf5, 0x33, 0x47, 0x94, 0xb8, 0x9a, +0x35, 0x4e, 0x9f, 0x32, 0x19, 0xe5, 0x07, 0x77, 0x32, 0xce, 0x0a, 0x50, +0x51, 0xf1, 0xdd, 0x33, 0x74, 0xf3, 0xb1, 0x1e, 0x44, 0x88, 0x7a, 0xb3, +0x66, 0xf5, 0x75, 0xf1, 0xb1, 0x09, 0xa3, 0xae, 0x3f, 0x1a, 0x7a, 0x78, +0x30, 0x55, 0x5f, 0x96, 0xac, 0x23, 0x6b, 0xbd, 0x22, 0xec, 0x51, 0x31, +0x74, 0xdd, 0x3d, 0xa4, 0x09, 0x90, 0x90, 0x8d, 0xa1, 0x53, 0x0a, 0x9f, +0x09, 0xa3, 0x28, 0xbf, 0x0a, 0x99, 0x5e, 0xf7, 0x66, 0xf1, 0x0c, 0xa0, +0x2a, 0xac, 0x58, 0xbc, 0xc8, 0xe5, 0x42, 0x59, 0xff, 0x68, 0xe2, 0x36, +0x57, 0x28, 0x44, 0x73, 0x97, 0x5e, 0x51, 0x9f, 0x36, 0x4b, 0x8f, 0x9d, +0x3b, 0x57, 0x15, 0x78, 0x85, 0x21, 0x13, 0x03, 0x25, 0xa7, 0x69, 0x83, +0xfa, 0x29, 0x79, 0x8d, 0x99, 0x67, 0x18, 0xa0, 0x42, 0xba, 0xf6, 0xf8, +0x8d, 0x0a, 0x77, 0xfe, 0x97, 0xca, 0x8e, 0x69, 0xb1, 0xc7, 0xc1, 0x1b, +0x6e, 0xff, 0x53, 0x52, 0xcd, 0x26, 0x79, 0xd9, 0x35, 0xce, 0x3d, 0xf2, +0x88, 0x28, 0xaf, 0xe5, 0x5a, 0x21, 0xd3, 0x2b, 0x24, 0x14, 0xa3, 0x80, +0x5f, 0x2d, 0x5d, 0x74, 0x05, 0xa8, 0x18, 0x70, 0xcb, 0xe3, 0x8a, 0xc8, +0xfa, 0x2d, 0x76, 0xd5, 0x99, 0x25, 0x5d, 0x1b, 0x0b, 0xb2, 0xae, 0x57, +0x54, 0xbc, 0x04, 0x65, 0x08, 0xaa, 0x85, 0xc1, 0xee, 0xd8, 0xb6, 0x2d, +0x21, 0x3e, 0xbe, 0xf7, 0xec, 0xd5, 0xa1, 0x0a, 0x89, 0xb2, 0x35, 0xc9, +0xad, 0x51, 0x71, 0xfb, 0xed, 0xb7, 0xdb, 0x90, 0xa0, 0xcc, 0x36, 0x66, +0x95, 0xf5, 0xa7, 0x42, 0xd8, 0xab, 0x7a, 0x9e, 0x77, 0xaf, 0xcb, 0x5d, +0x4a, 0xed, 0x84, 0x31, 0x63, 0xd8, 0x18, 0x14, 0x2a, 0xca, 0x29, 0xc9, +0xce, 0x12, 0x15, 0xe2, 0x1a, 0x53, 0x87, 0x64, 0x6c, 0xa3, 0x2d, 0x5c, +0x39, 0x8f, 0x9a, 0xb6, 0xf1, 0x23, 0x76, 0x3c, 0xa3, 0xe8, 0x8c, 0x30, +0xf2, 0xac, 0xf6, 0x83, 0x99, 0x2d, 0x46, 0x33, 0xd5, 0x2a, 0xa0, 0xfc, +0xa2, 0x03, 0x3d, 0x60, 0x58, 0x31, 0x0a, 0x09, 0xa7, 0x65, 0xe9, 0x3a, +0xb4, 0x6c, 0xc9, 0x6c, 0x43, 0x98, 0x51, 0x94, 0x03, 0x2a, 0x74, 0xce, +0x50, 0x05, 0x02, 0x5a, 0xec, 0x31, 0x0a, 0xa1, 0xb6, 0xb6, 0x3b, 0x7e, +0x9d, 0x90, 0xdb, 0xb4, 0x55, 0xd3, 0x82, 0x77, 0xde, 0x7e, 0x1b, 0xf3, +0xbf, 0x04, 0x77, 0x94, 0x37, 0x2a, 0x0c, 0x48, 0x30, 0xc7, 0x53, 0xc0, +0x2b, 0xae, 0x5d, 0xbe, 0x0c, 0x00, 0x8c, 0xdd, 0x51, 0xca, 0x2b, 0x98, +0xed, 0xc0, 0x1b, 0xef, 0x74, 0xc4, 0x25, 0xcd, 0x98, 0x36, 0x15, 0xe3, +0xac, 0x54, 0x1b, 0xf1, 0x90, 0x75, 0x64, 0xbe, 0x8b, 0xfa, 0xc6, 0x0e, +0xd7, 0x72, 0x77, 0x8e, 0xce, 0x28, 0xc4, 0x26, 0xbb, 0xe8, 0x0a, 0x17, +0x5b, 0xeb, 0x79, 0xe9, 0xd5, 0x21, 0xcc, 0x28, 0xca, 0xa2, 0xc2, 0x5a, +0xaf, 0x80, 0x57, 0x48, 0xce, 0xae, 0x95, 0xb6, 0xed, 0x35, 0x6a, 0x45, +0x3f, 0xa1, 0xaa, 0xdb, 0x22, 0x9a, 0xef, 0xfc, 0x43, 0x5c, 0x46, 0xed, +0xc2, 0xb6, 0x6d, 0xa0, 0x33, 0x88, 0xac, 0xfc, 0x50, 0x61, 0x60, 0x08, +0x2a, 0xac, 0x08, 0x1d, 0x46, 0x2c, 0x39, 0x7a, 0xec, 0x1d, 0xea, 0x8d, +0x14, 0xca, 0x1f, 0xbb, 0xe9, 0xb4, 0x4e, 0x6a, 0xed, 0xf6, 0xfc, 0x31, +0xb9, 0x56, 0xd3, 0x36, 0x4d, 0x1a, 0x62, 0xf0, 0xd1, 0x2b, 0x53, 0xe9, +0x19, 0xaa, 0x3a, 0xdb, 0x91, 0xbb, 0x88, 0x5a, 0xac, 0x3e, 0xfb, 0x87, +0x0d, 0x7d, 0x58, 0xc9, 0xd4, 0x93, 0x5e, 0x92, 0xc7, 0x8e, 0x1c, 0x49, +0x8e, 0x8f, 0x4d, 0x2f, 0xe8, 0x1e, 0xf2, 0x05, 0xfd, 0x35, 0x1b, 0x94, +0x5b, 0x09, 0xca, 0x36, 0x2a, 0x68, 0x18, 0x69, 0x26, 0xfd, 0xd0, 0xd0, +0x2b, 0x5c, 0x41, 0x1f, 0x25, 0x5f, 0xa6, 0x64, 0xe4, 0xf4, 0xea, 0xda, +0x45, 0x9c, 0x15, 0x4a, 0xdb, 0x0e, 0xa2, 0xf5, 0xc9, 0x40, 0xa6, 0x02, +0x03, 0x1d, 0x09, 0x12, 0x88, 0x2a, 0x71, 0xda, 0xec, 0xbe, 0x92, 0x14, +0xba, 0x63, 0xab, 0x2b, 0xe4, 0x69, 0xc2, 0x2d, 0xf7, 0xeb, 0xa8, 0xc8, +0x29, 0xf9, 0x67, 0xe3, 0xee, 0xc3, 0x53, 0x1d, 0x8e, 0xc7, 0x1f, 0x7b, +0x0c, 0x21, 0x4a, 0xcf, 0x85, 0x52, 0x35, 0xfa, 0x15, 0xf5, 0x03, 0x33, +0xec, 0x54, 0xa0, 0x1d, 0x5b, 0x82, 0x2a, 0x77, 0x60, 0x86, 0x87, 0x1d, +0xbe, 0x61, 0x80, 0x84, 0xca, 0xea, 0x06, 0x9c, 0x8d, 0x48, 0xc4, 0x8b, +0x4b, 0x1a, 0xb1, 0xed, 0x62, 0x61, 0x9e, 0x10, 0x66, 0x17, 0xf6, 0x51, +0x81, 0x65, 0xc6, 0x14, 0xf1, 0x61, 0x96, 0x91, 0xaa, 0xba, 0xf2, 0xe0, +0xe1, 0x55, 0xa5, 0x6c, 0xfb, 0xb6, 0x61, 0xdb, 0xee, 0xed, 0x5a, 0xb6, +0x20, 0x11, 0x19, 0xde, 0xa8, 0x2c, 0xb3, 0x01, 0x0a, 0x51, 0xe6, 0x0d, +0x5b, 0x45, 0x9b, 0x0a, 0x06, 0x74, 0x18, 0x80, 0x04, 0x78, 0x14, 0x60, +0x60, 0xeb, 0x55, 0xb9, 0xa0, 0x57, 0x11, 0x3d, 0xe1, 0x88, 0x99, 0xb2, +0xe7, 0xe9, 0xb2, 0x93, 0x3f, 0xdf, 0x77, 0xd6, 0x2a, 0xde, 0xc8, 0xcc, +0xe9, 0xd3, 0x25, 0x40, 0x50, 0x0a, 0x19, 0x4a, 0x92, 0xa0, 0xa4, 0x1f, +0x29, 0xb6, 0x73, 0xf3, 0x86, 0x0d, 0xfd, 0x7b, 0xf7, 0x6e, 0x5f, 0xd0, +0xb8, 0x55, 0x7e, 0xc3, 0xc5, 0x0b, 0x17, 0x52, 0x29, 0x87, 0x13, 0xb8, +0xbb, 0x74, 0x97, 0x14, 0xeb, 0xb3, 0x0e, 0x12, 0x33, 0x33, 0x51, 0xdf, +0x08, 0xb7, 0x91, 0x47, 0x50, 0x91, 0xe4, 0x3f, 0xfd, 0xe4, 0x13, 0xda, +0xab, 0x32, 0x99, 0x81, 0x57, 0xef, 0x0f, 0x87, 0xc2, 0x9b, 0x6e, 0x50, +0x41, 0xef, 0x79, 0xd2, 0x21, 0x1d, 0xfc, 0x53, 0xda, 0xb6, 0x37, 0x54, +0x08, 0x97, 0x08, 0x61, 0x54, 0x30, 0xff, 0x6e, 0x53, 0x96, 0x54, 0x4f, +0x76, 0xd2, 0x03, 0x92, 0x9d, 0xd5, 0x32, 0x6e, 0x5c, 0x48, 0xdc, 0xec, +0x6b, 0xd3, 0x8d, 0xf7, 0x66, 0xa5, 0x59, 0xa7, 0x24, 0x88, 0x09, 0x1a, +0x42, 0xd8, 0xd8, 0xbf, 0x77, 0xef, 0x53, 0x4f, 0x3e, 0x09, 0x0c, 0x14, +0x12, 0x60, 0x0b, 0xb4, 0x50, 0xe1, 0xe7, 0x67, 0x90, 0xf9, 0x27, 0x9f, +0x7c, 0xfc, 0xd1, 0x47, 0xaf, 0xbf, 0xf6, 0xda, 0xd2, 0xab, 0x16, 0xe7, +0xa4, 0x3a, 0x53, 0xeb, 0xb5, 0x32, 0x53, 0x5b, 0xe3, 0x92, 0xbf, 0x74, +0x18, 0x30, 0x9e, 0x5a, 0x86, 0x03, 0x8b, 0x8a, 0xf6, 0xef, 0xdb, 0xc7, +0x85, 0xaa, 0x56, 0x1a, 0x63, 0x4a, 0xe7, 0x48, 0x81, 0x5c, 0xcf, 0x2e, +0x94, 0xc4, 0x8c, 0x49, 0x69, 0xde, 0x2f, 0xa9, 0x7e, 0x07, 0xde, 0xf8, +0xdd, 0x27, 0x4f, 0xaa, 0x0e, 0x7a, 0x72, 0x8e, 0x19, 0x21, 0x8a, 0x8f, +0x19, 0x18, 0x9a, 0x92, 0xee, 0x24, 0x80, 0x1c, 0x00, 0x7f, 0xf2, 0xf1, +0xc7, 0x3d, 0x0a, 0x0b, 0x19, 0xb6, 0xdf, 0xe5, 0x1b, 0x43, 0x5e, 0x76, +0x32, 0xf9, 0x2b, 0x74, 0x09, 0xaa, 0x0c, 0x2a, 0x44, 0x82, 0x32, 0xa1, +0x42, 0x0f, 0xfa, 0xd5, 0xc1, 0x10, 0xc2, 0xc0, 0x18, 0xbe, 0xf6, 0x24, +0x6f, 0xf7, 0xca, 0x85, 0x0b, 0x55, 0x15, 0x0f, 0xd5, 0x1e, 0x45, 0x36, +0x54, 0x7d, 0xcb, 0xb4, 0xfc, 0x6c, 0x20, 0x26, 0x5d, 0x49, 0x60, 0x28, +0x0a, 0xe7, 0xd0, 0x21, 0xbb, 0x6e, 0x6e, 0x4e, 0x86, 0xd3, 0x99, 0x96, +0x90, 0x90, 0x5b, 0x2d, 0xb3, 0x55, 0x93, 0xfc, 0xd6, 0x05, 0x4d, 0xf8, +0x69, 0x55, 0xd0, 0xa4, 0x79, 0xe3, 0x46, 0x8d, 0x6a, 0xd7, 0xe2, 0xa7, +0xa1, 0xfc, 0xd4, 0xaa, 0xc5, 0x99, 0x34, 0xbc, 0x73, 0xe6, 0x36, 0x9a, +0xb4, 0xd3, 0x5a, 0x2c, 0x01, 0x18, 0xed, 0x07, 0x4d, 0x62, 0xce, 0x69, +0x89, 0x09, 0x2d, 0x0b, 0x9a, 0xcc, 0xba, 0x64, 0xda, 0xfe, 0x3d, 0xbb, +0xdf, 0x78, 0xfd, 0x35, 0x5e, 0x19, 0x4c, 0x43, 0x0e, 0x2c, 0x07, 0x9d, +0xdb, 0xb6, 0x71, 0x66, 0xe4, 0xd0, 0x05, 0x66, 0xcc, 0x8e, 0x27, 0x63, +0x53, 0xaa, 0xb7, 0x2e, 0x68, 0x0c, 0xea, 0x38, 0x87, 0x03, 0x96, 0x28, +0x15, 0x07, 0x31, 0x1f, 0xbd, 0xfd, 0xd6, 0x5b, 0x6f, 0xbf, 0xf9, 0xe6, +0x3b, 0x6f, 0xbd, 0x25, 0x3f, 0xef, 0xbe, 0xfd, 0xb6, 0xfa, 0x71, 0xfd, +0xfa, 0xce, 0x3b, 0xd4, 0x9e, 0xba, 0xf3, 0xe4, 0x89, 0x3b, 0x4f, 0xdc, +0x41, 0x3b, 0xfa, 0x13, 0x77, 0x1c, 0xbf, 0x83, 0x22, 0x8a, 0x47, 0x0e, +0x77, 0x6e, 0xd7, 0xce, 0x05, 0x89, 0x79, 0xeb, 0x42, 0xdb, 0xee, 0xa4, +0x0b, 0xff, 0x56, 0xbc, 0x82, 0x65, 0xf4, 0x15, 0x15, 0x06, 0x75, 0x22, +0x64, 0x74, 0x09, 0x83, 0x40, 0xd5, 0x78, 0xe7, 0xe7, 0x38, 0xc8, 0xea, +0xe5, 0x64, 0x53, 0xd1, 0x15, 0x81, 0x44, 0xda, 0xb5, 0xa8, 0x7d, 0x57, +0xc9, 0x1b, 0x4a, 0x38, 0x31, 0x7f, 0x90, 0x4d, 0x57, 0x0e, 0xd9, 0xa7, +0x45, 0x49, 0x60, 0xcb, 0x99, 0x34, 0x66, 0x14, 0x24, 0x1e, 0xeb, 0x88, +0x49, 0x6b, 0xd4, 0xb1, 0xde, 0xa4, 0x1b, 0x1b, 0x4c, 0x5b, 0x5f, 0xbd, +0xcd, 0xc0, 0xf8, 0xd4, 0x9c, 0xd8, 0xc4, 0xd4, 0x58, 0x67, 0xba, 0x33, +0x35, 0x2b, 0xa7, 0x6e, 0x93, 0x82, 0x6e, 0xc3, 0x5a, 0xf7, 0x19, 0xdd, +0x71, 0xe0, 0x84, 0x6e, 0xc3, 0xa6, 0xf4, 0x1c, 0x79, 0x49, 0x9f, 0x09, +0x73, 0x46, 0x5e, 0xb3, 0x17, 0x3b, 0xac, 0x07, 0xc1, 0x8f, 0x39, 0x8f, +0xdc, 0xfc, 0x40, 0xb3, 0xa1, 0xb3, 0x9d, 0x35, 0xea, 0x27, 0xc4, 0x27, +0x26, 0x3b, 0x93, 0xd2, 0x12, 0xe3, 0x6b, 0xa4, 0x24, 0xb6, 0x6e, 0xd2, +0xa8, 0x7f, 0x8f, 0x6e, 0x97, 0x4e, 0x9a, 0xd8, 0xac, 0x7e, 0x5d, 0xee, +0xdb, 0x6f, 0xf6, 0xf5, 0x0c, 0xd2, 0xf2, 0xd0, 0xb7, 0x83, 0x56, 0xee, +0x8d, 0x8b, 0x89, 0x4d, 0x8f, 0x73, 0x54, 0x73, 0xc6, 0x95, 0xfd, 0x89, +0xcf, 0x70, 0x26, 0x7a, 0xfe, 0x49, 0xa3, 0xd4, 0xb3, 0x33, 0x49, 0xff, +0x49, 0x49, 0x74, 0xc6, 0xc7, 0x39, 0xc3, 0x0a, 0x12, 0x6e, 0x2c, 0xb3, +0x16, 0xa8, 0x80, 0x35, 0x9b, 0x78, 0x85, 0xca, 0x0e, 0x09, 0x61, 0xe6, +0x60, 0xa6, 0xb6, 0x5e, 0x57, 0xdc, 0xc2, 0x4e, 0x31, 0x67, 0xd6, 0x2c, +0x89, 0xa4, 0x00, 0x18, 0xd2, 0x53, 0x0b, 0x51, 0x81, 0x0d, 0x15, 0x84, +0x40, 0xe2, 0xee, 0x0e, 0x11, 0x87, 0x44, 0x22, 0x92, 0x7c, 0x7f, 0x76, +0x62, 0x0c, 0x44, 0xbb, 0x76, 0xec, 0xc8, 0x49, 0x4f, 0x21, 0x34, 0xa8, +0x7a, 0x8b, 0x9e, 0x63, 0x76, 0x3d, 0xdb, 0xfd, 0xe8, 0xdf, 0xbb, 0x1e, +0xfd, 0x07, 0x61, 0xe1, 0xed, 0x6f, 0xfd, 0xba, 0xe5, 0xc1, 0x7f, 0xe6, +0xef, 0xff, 0xa6, 0xce, 0x9e, 0x6f, 0xb3, 0x4a, 0x5c, 0xbd, 0x36, 0xfd, +0xd6, 0x50, 0x51, 0xbe, 0xdb, 0xef, 0xfb, 0xf3, 0x84, 0x9d, 0x4f, 0x0c, +0x59, 0xb6, 0xb3, 0xe3, 0xe8, 0x39, 0x35, 0x9b, 0x75, 0x4e, 0xad, 0x99, +0x9f, 0x9c, 0x55, 0xd7, 0x99, 0x9e, 0x4d, 0xc5, 0x83, 0xbe, 0x73, 0x6e, +0x50, 0x75, 0x38, 0x5b, 0x1c, 0xf8, 0x7a, 0xcc, 0x75, 0xfb, 0xfb, 0x8f, +0x9d, 0xd1, 0x77, 0xd4, 0xd4, 0x3e, 0x23, 0xa7, 0xf4, 0x1e, 0x3e, 0xb9, +0xfb, 0xd0, 0x09, 0x9d, 0x07, 0x8c, 0x29, 0x1c, 0x32, 0xa5, 0xd3, 0xd8, +0x05, 0x6d, 0x46, 0xcc, 0x69, 0x36, 0x78, 0x66, 0xc3, 0x7e, 0xd3, 0x6a, +0xf6, 0x98, 0x98, 0xd3, 0x75, 0x5c, 0xcd, 0x1e, 0x13, 0x1a, 0xf4, 0x9d, +0xc6, 0x37, 0x6d, 0x46, 0xcc, 0xed, 0x38, 0x66, 0x41, 0xcf, 0x99, 0xd7, +0xf5, 0x5f, 0x5c, 0x3c, 0x68, 0xe9, 0x8e, 0x61, 0xcb, 0x4b, 0x86, 0xaf, +0xd8, 0x35, 0x72, 0xe5, 0xee, 0x51, 0xab, 0xf6, 0xc0, 0xc7, 0xc2, 0x41, +0x97, 0xf0, 0x83, 0x57, 0x58, 0xa1, 0xc2, 0xe0, 0xb9, 0x0b, 0x55, 0xfe, +0x60, 0x20, 0xc4, 0xfc, 0x9d, 0x5f, 0x64, 0x36, 0xe9, 0x42, 0xa1, 0xc8, +0x0d, 0xeb, 0xd7, 0x11, 0x3f, 0x8b, 0xb9, 0x1a, 0xd3, 0x8d, 0x04, 0xa5, +0x02, 0x0f, 0x91, 0x37, 0x2c, 0x0f, 0xfe, 0xc4, 0x21, 0x62, 0x09, 0x48, +0x40, 0x35, 0xf8, 0xd1, 0x73, 0xcf, 0xed, 0xdf, 0xb7, 0xb7, 0x3f, 0x35, +0xff, 0x1c, 0x54, 0xfd, 0x6b, 0x34, 0xf4, 0x86, 0xdb, 0xc1, 0x80, 0xdf, +0x74, 0x6f, 0xff, 0xc2, 0xb4, 0xed, 0xdf, 0x37, 0xdc, 0xfb, 0xcf, 0xb6, +0x07, 0xff, 0xde, 0xf9, 0xe0, 0xe7, 0x53, 0xf6, 0x3f, 0xef, 0x46, 0xb0, +0x39, 0x4f, 0x42, 0x9f, 0xe9, 0xa7, 0xaa, 0x5b, 0xcf, 0xed, 0x2f, 0x42, +0x40, 0x67, 0xda, 0x94, 0xa0, 0x3c, 0xa2, 0x22, 0x4c, 0xf0, 0xa0, 0xd6, +0x71, 0xc2, 0x9e, 0x67, 0x9d, 0x35, 0x5c, 0x52, 0x47, 0xc7, 0x56, 0xcd, +0xbb, 0xb6, 0x6f, 0xdb, 0xb3, 0x53, 0x87, 0x51, 0x83, 0x07, 0x4d, 0x1e, +0x37, 0x66, 0xe2, 0x98, 0x51, 0xf3, 0x2e, 0x9b, 0xbd, 0x7c, 0xc9, 0x92, +0xa5, 0x57, 0x5d, 0x75, 0xc3, 0x75, 0xd7, 0x6d, 0xb9, 0xf9, 0xe6, 0x6b, +0xae, 0xbe, 0x7a, 0xd9, 0x92, 0x25, 0x2b, 0x96, 0x2e, 0x5d, 0x72, 0xe5, +0x95, 0xd3, 0x27, 0x4f, 0x9c, 0x34, 0x66, 0xf4, 0xa4, 0xb1, 0xa3, 0x39, +0xad, 0xa8, 0x7b, 0xb7, 0x6e, 0xed, 0x5a, 0xe7, 0x56, 0xcb, 0x60, 0x79, +0x63, 0x12, 0x52, 0x6a, 0xf6, 0xbd, 0x74, 0x64, 0xc9, 0x33, 0xcd, 0xf7, +0xfb, 0x91, 0xda, 0x1f, 0x25, 0xd3, 0xca, 0x58, 0x01, 0xfb, 0xa8, 0x40, +0x1b, 0x2b, 0x6b, 0x99, 0x0d, 0x2b, 0xc1, 0xc9, 0xb0, 0xb5, 0x34, 0xd9, +0xf5, 0xc5, 0x80, 0x79, 0x37, 0xb6, 0xef, 0x3d, 0x3c, 0xbf, 0x63, 0xdf, +0xf4, 0x7a, 0xad, 0x1c, 0x09, 0x69, 0x90, 0xb7, 0xc3, 0x41, 0x55, 0x7c, +0x0f, 0x87, 0x9c, 0xc0, 0x4f, 0x7c, 0x4a, 0xcd, 0xfc, 0x86, 0xed, 0xfb, +0x76, 0x19, 0x7f, 0xf9, 0x88, 0x35, 0xb7, 0x4d, 0xde, 0xfb, 0x5c, 0xb3, +0x7d, 0x9e, 0x14, 0x83, 0x80, 0x76, 0x35, 0x5f, 0x9c, 0xf7, 0xd1, 0x1b, +0xd9, 0x5d, 0x01, 0x3b, 0x96, 0x59, 0x44, 0x02, 0x78, 0x85, 0x1b, 0x54, +0x84, 0x1b, 0xa3, 0x30, 0x2f, 0x5c, 0x5a, 0xf1, 0x77, 0x0d, 0xf6, 0x7c, +0xdd, 0x66, 0xff, 0x97, 0x85, 0x07, 0xff, 0x32, 0xe5, 0xc0, 0x4b, 0x63, +0x77, 0x3e, 0x3d, 0x68, 0xeb, 0xe3, 0xed, 0x57, 0x9e, 0x68, 0x74, 0x59, +0x49, 0x87, 0xeb, 0x4e, 0x0f, 0xda, 0xf2, 0xd8, 0xb8, 0x5d, 0xcf, 0x4c, +0x39, 0xf0, 0x22, 0xe2, 0x4a, 0x87, 0x83, 0x5f, 0x22, 0xae, 0xd4, 0xdd, +0xfd, 0x4d, 0x4a, 0xb1, 0x2b, 0xe4, 0x3b, 0xfa, 0x13, 0xaa, 0x2b, 0x60, +0x42, 0x85, 0x38, 0x49, 0x8d, 0x36, 0x28, 0xf7, 0x12, 0x54, 0xf4, 0xdd, +0x47, 0x57, 0x20, 0xec, 0x56, 0xc0, 0x2b, 0x2a, 0x8e, 0x1f, 0x3f, 0x8e, +0x12, 0x69, 0xc5, 0x2b, 0xc2, 0x6e, 0x2d, 0xa2, 0xbb, 0x7b, 0x74, 0x05, +0xdc, 0x78, 0xf1, 0x8c, 0xbc, 0x22, 0x8a, 0x8a, 0x50, 0x15, 0x03, 0xa2, +0x24, 0xee, 0xf7, 0x0a, 0xd8, 0xe4, 0x15, 0xc4, 0x90, 0x9a, 0xf4, 0x8a, +0x28, 0xaf, 0x88, 0xae, 0x40, 0x98, 0xae, 0x80, 0x86, 0x0a, 0xd2, 0x80, +0x55, 0x21, 0x7a, 0xa3, 0x5e, 0x01, 0x2a, 0x60, 0x22, 0x65, 0xec, 0x2f, +0x9b, 0xfd, 0x77, 0x39, 0x45, 0x77, 0xdf, 0xe8, 0x0a, 0x54, 0xe9, 0x15, +0xf0, 0x8a, 0x0a, 0x91, 0xa0, 0x04, 0x15, 0xb1, 0xb1, 0x84, 0xa2, 0xfd, +0x70, 0x6c, 0x0a, 0xb3, 0xde, 0xb2, 0x61, 0xba, 0xed, 0xf9, 0x2d, 0x45, +0x44, 0xec, 0x85, 0x10, 0xf6, 0x0f, 0x07, 0x04, 0x6f, 0xcd, 0x2b, 0x74, +0x54, 0xe4, 0xe4, 0xe4, 0x94, 0xa2, 0x62, 0xe5, 0x27, 0x55, 0x1a, 0xee, +0x11, 0xfb, 0x52, 0xa3, 0x0f, 0x1e, 0xe0, 0x0a, 0x40, 0xd8, 0x3f, 0x1c, +0x35, 0x6a, 0xd4, 0x70, 0x8b, 0x0a, 0x89, 0xbb, 0x84, 0x57, 0x74, 0xeb, +0xd6, 0xad, 0x14, 0x15, 0x13, 0x8e, 0x44, 0x51, 0x11, 0x5d, 0x81, 0x30, +0x5c, 0x01, 0x08, 0xfb, 0x87, 0xa3, 0x73, 0xe7, 0xce, 0x82, 0x0a, 0x42, +0x7e, 0x88, 0x88, 0xa3, 0x73, 0xea, 0xc5, 0xfc, 0x0a, 0x78, 0x85, 0xa0, +0x82, 0x3f, 0x2c, 0x59, 0xb2, 0xa4, 0x14, 0x15, 0x05, 0x83, 0xc2, 0x70, +0x45, 0x02, 0xdc, 0x66, 0xa2, 0x97, 0x87, 0xc1, 0x0a, 0x14, 0x0c, 0x4a, +0x4b, 0x23, 0x94, 0xc1, 0x75, 0x2c, 0x58, 0xb0, 0x40, 0x5a, 0xe6, 0x5a, +0xa0, 0x82, 0x70, 0x51, 0x80, 0x42, 0x00, 0x29, 0x2d, 0x1d, 0xca, 0x28, +0xdc, 0xb3, 0x1f, 0x8d, 0x02, 0x23, 0xba, 0x02, 0x61, 0xb5, 0x02, 0x90, +0xb4, 0x76, 0xdc, 0x79, 0xe7, 0x9d, 0xc4, 0x86, 0x4a, 0xf4, 0x34, 0xe1, +0xa1, 0xa5, 0xbc, 0xe2, 0x8e, 0x3b, 0xee, 0x90, 0xbe, 0x04, 0xe4, 0x1b, +0x00, 0x9a, 0x1e, 0x3d, 0x7a, 0x94, 0x5e, 0x95, 0xdd, 0xd4, 0x71, 0x53, +0x68, 0x16, 0x12, 0x0d, 0x83, 0x2d, 0x2d, 0xfa, 0x08, 0x41, 0x5f, 0x01, +0x88, 0x39, 0xbb, 0xe9, 0x94, 0x29, 0x53, 0x84, 0xc2, 0x11, 0x9f, 0xa4, +0x6b, 0xae, 0xca, 0xfe, 0x2d, 0x45, 0xc5, 0x89, 0x13, 0x27, 0xa4, 0x03, +0x39, 0xee, 0x6d, 0x40, 0x83, 0x40, 0x55, 0x86, 0x5d, 0xe4, 0x17, 0x45, +0x81, 0x11, 0x56, 0x9b, 0x65, 0xd0, 0x49, 0x2d, 0x54, 0x06, 0x04, 0x12, +0xf9, 0x45, 0x57, 0x5e, 0x79, 0xa5, 0x22, 0xef, 0xdd, 0xbb, 0x77, 0x93, +0xc1, 0x4f, 0x75, 0x46, 0x55, 0x9d, 0x9e, 0x6c, 0xed, 0x8b, 0x7a, 0x05, +0xa8, 0x20, 0x8d, 0x86, 0x00, 0x41, 0x8c, 0xb3, 0x14, 0xbf, 0xe0, 0xa4, +0x69, 0xd3, 0xa6, 0x95, 0x01, 0x06, 0x1c, 0x23, 0x2a, 0x4a, 0x85, 0xca, +0xbb, 0x8f, 0xce, 0xd3, 0x72, 0x05, 0x20, 0xe0, 0xec, 0xa6, 0x3a, 0x24, +0xc6, 0x8d, 0x1b, 0xf7, 0xca, 0x2b, 0xaf, 0xd0, 0x2b, 0x59, 0xda, 0x83, +0x48, 0x67, 0x9f, 0x32, 0xa8, 0x20, 0xf5, 0x0c, 0x85, 0x1b, 0xd5, 0x82, +0x3f, 0x53, 0x64, 0x05, 0x00, 0x75, 0xed, 0xda, 0xb5, 0x0c, 0x30, 0xf8, +0x05, 0xe5, 0x1b, 0xe5, 0x1d, 0xab, 0x56, 0xd4, 0x8f, 0x11, 0xa5, 0xbc, +0xaa, 0xbf, 0x02, 0xf8, 0xa0, 0x21, 0x54, 0xc8, 0x15, 0xa2, 0x85, 0x74, +0x1d, 0x0e, 0x25, 0x38, 0xf1, 0xb9, 0x53, 0xa7, 0x4e, 0xcf, 0x3c, 0xf3, +0xcc, 0xeb, 0xaf, 0xbf, 0x2e, 0x1d, 0xd6, 0xa5, 0x51, 0x28, 0x10, 0x40, +0x50, 0xba, 0xc8, 0x2b, 0x4e, 0x9e, 0x3c, 0x29, 0x4d, 0x09, 0x10, 0xa2, +0xd0, 0x39, 0x50, 0x2d, 0x48, 0x41, 0xa6, 0x21, 0x50, 0x17, 0x57, 0xd9, +0x08, 0x37, 0x47, 0x8c, 0xe6, 0xec, 0x73, 0x7b, 0x52, 0xf4, 0x0f, 0xd1, +0x15, 0xa8, 0x12, 0x2b, 0xa0, 0x2c, 0x4e, 0x32, 0x9b, 0xf6, 0xed, 0xdb, +0x9f, 0x3d, 0x7b, 0x16, 0x0a, 0xa7, 0x86, 0x2f, 0xed, 0x41, 0xd0, 0x1a, +0xa4, 0xa4, 0x10, 0x10, 0x28, 0x45, 0x05, 0x6a, 0xb8, 0xea, 0x61, 0x23, +0xf1, 0xe4, 0x9c, 0x4a, 0xea, 0x26, 0xcd, 0xe3, 0xe0, 0x32, 0x55, 0xe2, +0xb1, 0xa2, 0x93, 0x88, 0xae, 0x40, 0x90, 0x56, 0x60, 0xc4, 0x88, 0x11, +0x18, 0x5a, 0x9f, 0x7d, 0xf6, 0x59, 0x69, 0x79, 0xa5, 0x7a, 0x85, 0x12, +0xde, 0x81, 0x1e, 0x81, 0x36, 0x71, 0x91, 0x57, 0x80, 0x0a, 0x55, 0x1f, +0x0e, 0xc4, 0xc0, 0x2e, 0xe0, 0x29, 0xb8, 0x36, 0x68, 0x1e, 0xf7, 0xe2, +0x8b, 0x2f, 0x6e, 0xdb, 0xb6, 0xad, 0x79, 0x7b, 0x57, 0x79, 0xac, 0xe8, +0x11, 0x5d, 0x81, 0x90, 0x5e, 0x81, 0xc6, 0xad, 0x3a, 0xae, 0x5b, 0xb7, +0xee, 0xd1, 0x47, 0x1f, 0x7d, 0xfa, 0xe9, 0xa7, 0xd1, 0x28, 0xd8, 0xf7, +0xd9, 0xfd, 0x51, 0xa4, 0x55, 0x17, 0x38, 0x24, 0xa6, 0x32, 0xa8, 0x90, +0x5a, 0xa2, 0x68, 0x17, 0xd2, 0x21, 0x53, 0xb4, 0x0b, 0xe4, 0xa8, 0x37, +0xdf, 0x7c, 0x93, 0xeb, 0x9f, 0x7e, 0xe6, 0xb9, 0x8d, 0xdb, 0xf7, 0xf6, +0x9f, 0x38, 0x3b, 0x35, 0xbf, 0x5b, 0x5c, 0x5a, 0x0d, 0x47, 0x54, 0x7c, +0x0a, 0x69, 0xea, 0x88, 0x9c, 0xc9, 0xd3, 0xaf, 0x24, 0x2d, 0x3b, 0xa5, +0x51, 0xe7, 0x6e, 0xa3, 0x2e, 0x5d, 0xbb, 0xb9, 0xf8, 0xfe, 0x87, 0x1e, +0x79, 0xe2, 0x89, 0x27, 0x9e, 0x7b, 0xee, 0x39, 0x48, 0x1a, 0x83, 0xac, +0x68, 0x14, 0x52, 0xe4, 0x45, 0xca, 0x31, 0x02, 0x01, 0x38, 0x84, 0x8b, +0x57, 0xa4, 0xa4, 0xa4, 0xdc, 0x75, 0xd7, 0x5d, 0x52, 0x32, 0x9e, 0xea, +0x46, 0x98, 0x68, 0x55, 0xc5, 0x34, 0x74, 0x73, 0x38, 0x06, 0x90, 0x42, +0x29, 0x79, 0xe9, 0xa5, 0x97, 0x9e, 0x7c, 0xfa, 0xb9, 0xfb, 0x1e, 0x7d, +0xf2, 0xde, 0x87, 0xce, 0xdd, 0xf3, 0xe0, 0x23, 0x77, 0xdd, 0x77, 0xf6, +0xce, 0x33, 0x0f, 0xde, 0x79, 0xef, 0x03, 0xfc, 0x9c, 0x3c, 0x7d, 0xbf, +0x4f, 0x3f, 0x27, 0xee, 0xb9, 0xcf, 0x8f, 0x9f, 0x3b, 0x4e, 0x9d, 0xf1, +0xfa, 0x73, 0xfc, 0xee, 0x7b, 0x0d, 0xe7, 0xf0, 0x8d, 0xd7, 0x9f, 0xdb, +0xef, 0x3a, 0xed, 0xf5, 0xe7, 0xb6, 0x3b, 0xef, 0x31, 0x9c, 0xc3, 0x37, +0x5e, 0x7f, 0x8e, 0x9d, 0x3c, 0x65, 0x38, 0x87, 0x6f, 0x82, 0xf5, 0xe3, +0xf5, 0xee, 0x96, 0x73, 0xf6, 0xfa, 0xa4, 0x9c, 0x60, 0x58, 0x31, 0xf3, +0x37, 0x96, 0x4b, 0x6a, 0x5e, 0x79, 0xaf, 0xef, 0x8b, 0x13, 0xec, 0x53, +0x82, 0x7d, 0x1a, 0x13, 0xb2, 0x74, 0xd1, 0xe7, 0x99, 0x07, 0xef, 0xbe, +0xff, 0xa1, 0x53, 0xf7, 0x3f, 0x7c, 0xf6, 0x91, 0x73, 0x4f, 0x3e, 0xf9, +0x24, 0x78, 0x40, 0xf6, 0x41, 0x70, 0x12, 0x48, 0x48, 0x27, 0x17, 0x78, +0x80, 0xc8, 0x4e, 0x52, 0xa1, 0xb4, 0x14, 0x15, 0x77, 0xdf, 0x7d, 0xb7, +0x74, 0x67, 0x13, 0x76, 0xa1, 0x3c, 0x7a, 0x30, 0x17, 0x38, 0x06, 0x9e, +0x3f, 0xac, 0x57, 0xe8, 0x25, 0x0c, 0x87, 0xa6, 0xf1, 0xfc, 0xf3, 0xcf, +0x33, 0x3a, 0x3c, 0xe8, 0xa9, 0xa7, 0xa8, 0x16, 0xe9, 0x3a, 0xc0, 0x9f, +0x4f, 0x07, 0xed, 0xdf, 0xfd, 0x38, 0x1e, 0xf3, 0xeb, 0x38, 0x67, 0xfb, +0x80, 0xb1, 0xfa, 0x74, 0x20, 0x9b, 0xfa, 0x71, 0x3c, 0x1c, 0x8c, 0xc3, +0xfe, 0x7d, 0x7d, 0x7a, 0x22, 0x75, 0xb2, 0xed, 0x35, 0x2b, 0x73, 0xa2, +0x5f, 0xef, 0xe7, 0x31, 0x3b, 0x94, 0xe0, 0x13, 0x75, 0x71, 0xb2, 0x90, +0x25, 0xf4, 0xc9, 0x81, 0xa1, 0x09, 0x72, 0x45, 0xb1, 0x66, 0x5b, 0x87, +0x80, 0x51, 0x0a, 0xde, 0x7f, 0xff, 0x7d, 0x20, 0x21, 0x4d, 0xa5, 0x45, +0x76, 0xd2, 0xdb, 0x85, 0xc2, 0x21, 0x2e, 0xf2, 0x0a, 0x41, 0x85, 0x54, +0x4a, 0x95, 0x6a, 0xbb, 0x62, 0xa5, 0x45, 0x31, 0xe7, 0x4a, 0x4c, 0x52, +0xb4, 0x66, 0x63, 0x20, 0x86, 0x03, 0x64, 0x6f, 0xbc, 0xf1, 0x06, 0xa3, +0xc3, 0x83, 0x40, 0x08, 0x77, 0xe2, 0x00, 0x7f, 0x3e, 0x1d, 0x4c, 0xd1, +0x8f, 0x03, 0x34, 0xfa, 0x71, 0xfc, 0xc8, 0xf6, 0xc1, 0xda, 0xf9, 0x74, +0xa0, 0xae, 0xf9, 0x71, 0xf0, 0x92, 0x02, 0x3f, 0xec, 0xdf, 0xd7, 0xa7, +0x27, 0x52, 0x27, 0xdb, 0x5e, 0xb3, 0x32, 0x27, 0xfa, 0xf1, 0x76, 0xb8, +0xc4, 0x0e, 0x25, 0xf8, 0x44, 0x5d, 0x9c, 0x2c, 0x64, 0x09, 0x7d, 0x72, +0xfc, 0xf8, 0xc7, 0x3f, 0x86, 0x5c, 0x51, 0x04, 0xd8, 0xd6, 0x21, 0x60, +0x64, 0x1f, 0xdc, 0x71, 0x70, 0x09, 0x81, 0x84, 0xd8, 0x9d, 0x44, 0x76, +0x82, 0xf8, 0x41, 0x01, 0xa8, 0x40, 0x7a, 0x72, 0x49, 0x50, 0xa0, 0x42, +0xba, 0x51, 0x29, 0x39, 0x4a, 0xfa, 0x77, 0x00, 0x0c, 0xae, 0xc4, 0x94, +0x8b, 0x3f, 0x1c, 0x09, 0x0c, 0x6c, 0xe0, 0x1b, 0x47, 0xd9, 0x80, 0x75, +0xe0, 0xd0, 0x40, 0xb2, 0x02, 0x24, 0x1e, 0x0e, 0xe6, 0xe1, 0xf7, 0x01, +0xa6, 0x83, 0x72, 0xb0, 0x1c, 0x36, 0x0f, 0xd0, 0xee, 0xd3, 0x81, 0x54, +0x19, 0x94, 0x83, 0x77, 0x66, 0xe7, 0xf0, 0xef, 0x5e, 0x3e, 0x3d, 0x91, +0x3a, 0xd9, 0xe6, 0x8a, 0x19, 0x4e, 0x0b, 0xca, 0xfb, 0x62, 0x10, 0xfb, +0x34, 0xe3, 0x99, 0xfc, 0xa0, 0x4f, 0x0e, 0x90, 0x00, 0xb9, 0x02, 0x06, +0x44, 0x1e, 0xf0, 0x00, 0x8b, 0xc0, 0x0e, 0x8b, 0xe0, 0x04, 0x61, 0x2b, +0x75, 0x42, 0xef, 0x07, 0x02, 0x16, 0x8c, 0xa8, 0x30, 0x00, 0x03, 0x8e, +0x01, 0x7f, 0x41, 0xf0, 0x12, 0x6c, 0x00, 0x2f, 0x46, 0x04, 0x67, 0x0c, +0x0d, 0x42, 0xb8, 0x07, 0x2a, 0xbc, 0xd7, 0x03, 0x20, 0xa9, 0x73, 0xf8, +0x1c, 0xc4, 0x83, 0xe7, 0x0c, 0xca, 0x01, 0x1b, 0xf4, 0xe3, 0x60, 0xa1, +0x83, 0x72, 0xb0, 0xcb, 0xd8, 0x39, 0xfc, 0xbb, 0x97, 0x1f, 0xcf, 0x65, +0x79, 0x49, 0x50, 0xd6, 0x59, 0x7a, 0x6b, 0xf8, 0x7d, 0xe8, 0x54, 0xe4, +0x95, 0xea, 0x38, 0x01, 0xfa, 0xe4, 0x40, 0x37, 0x86, 0x5c, 0xd9, 0xd3, +0x21, 0x5d, 0x34, 0x02, 0x72, 0x25, 0x90, 0x80, 0x88, 0xe1, 0x90, 0x86, +0x07, 0x4a, 0x9d, 0x50, 0xad, 0x1a, 0x8c, 0xa8, 0x10, 0x76, 0xa1, 0x03, +0x43, 0x74, 0x0c, 0x98, 0x06, 0xd8, 0x00, 0x58, 0xb8, 0x32, 0x18, 0x11, +0x78, 0x30, 0x34, 0x08, 0x91, 0x83, 0x3b, 0x05, 0x7e, 0xc0, 0x8b, 0x18, +0x84, 0xff, 0xe5, 0xd0, 0x3f, 0xab, 0x2f, 0x03, 0xf9, 0xc0, 0x8a, 0xc8, +0xa1, 0x06, 0x51, 0xdf, 0x04, 0xf8, 0x01, 0xf1, 0xb2, 0x6a, 0x1e, 0x01, +0x3e, 0x97, 0xe1, 0x72, 0xd6, 0xcd, 0xc3, 0x1a, 0x06, 0xf2, 0x6a, 0xcc, +0xd7, 0xca, 0xdb, 0x0f, 0x9c, 0xa8, 0x84, 0x3e, 0x61, 0x0b, 0x90, 0x2b, +0x86, 0x26, 0x48, 0x17, 0x02, 0x66, 0x8b, 0x07, 0x0f, 0xd8, 0x93, 0x20, +0x6c, 0x33, 0x24, 0x80, 0x80, 0x05, 0x2a, 0x0c, 0xc0, 0x90, 0xbe, 0x4f, +0xaa, 0x25, 0x8f, 0x74, 0x21, 0x01, 0x21, 0x8c, 0x0b, 0x48, 0xe4, 0xe0, +0x36, 0xc1, 0x3a, 0x40, 0xb0, 0x1c, 0x6a, 0x40, 0x9f, 0xbe, 0x51, 0x27, +0x07, 0xf2, 0x81, 0x85, 0x53, 0x97, 0xf3, 0x59, 0x0e, 0x3b, 0xdf, 0xa8, +0x93, 0xab, 0xc8, 0x07, 0x3b, 0x73, 0xf6, 0x70, 0x4e, 0x20, 0x6b, 0x68, +0x79, 0xad, 0xaf, 0xef, 0x34, 0x70, 0xa2, 0x52, 0x24, 0x2a, 0xe5, 0x83, +0xa5, 0xb1, 0x81, 0x2a, 0xb0, 0x0d, 0x61, 0x4b, 0xfd, 0x79, 0xe1, 0x12, +0xaa, 0x63, 0x89, 0x35, 0x2a, 0x74, 0x60, 0xa8, 0x86, 0x3d, 0x7a, 0xab, +0x1e, 0xe9, 0xd3, 0xa3, 0x0e, 0x77, 0x85, 0x8a, 0xcb, 0xe9, 0x7b, 0xa9, +0x7f, 0xac, 0x17, 0x48, 0x0e, 0xf0, 0x1b, 0x75, 0x79, 0xe0, 0x1f, 0xa4, +0x2a, 0x33, 0x2f, 0x40, 0x0e, 0x69, 0x1c, 0xa1, 0x0e, 0xfd, 0x57, 0x39, +0x33, 0xf0, 0x6f, 0x0c, 0x73, 0x66, 0x40, 0x28, 0xc0, 0xce, 0xe1, 0x6e, +0x86, 0x32, 0x82, 0xfa, 0xab, 0xde, 0x22, 0xc3, 0xe6, 0x3a, 0xab, 0x47, +0x93, 0x41, 0xd4, 0x64, 0x0c, 0xab, 0xe1, 0xa1, 0xc4, 0x75, 0xb0, 0x28, +0x47, 0xa7, 0x52, 0x29, 0x20, 0x2f, 0xc5, 0xe4, 0xd9, 0xe5, 0x05, 0x12, +0xd2, 0xab, 0xc4, 0xd0, 0xc4, 0xc7, 0x2d, 0x2a, 0xa4, 0xa9, 0x8f, 0x92, +0xa6, 0xdc, 0x75, 0x76, 0x93, 0x0e, 0x3a, 0x15, 0x7c, 0x48, 0xb3, 0x08, +0xd5, 0xe3, 0x47, 0xb5, 0x8f, 0xa8, 0xdc, 0x6f, 0x78, 0xf7, 0xe8, 0x06, +0x58, 0x03, 0x89, 0xa2, 0xd9, 0xb4, 0x69, 0xd3, 0x9a, 0x35, 0x6b, 0x1e, +0x78, 0xe0, 0x01, 0xd5, 0x13, 0x43, 0xcd, 0x59, 0x26, 0xa9, 0xff, 0xea, +0xf7, 0x67, 0xd5, 0xe2, 0x48, 0xad, 0x06, 0xc1, 0x6c, 0xab, 0x57, 0xaf, +0xbe, 0xee, 0xba, 0xeb, 0xae, 0xbf, 0xfe, 0xfa, 0x1b, 0x6e, 0xb8, 0x81, +0x39, 0xac, 0x5d, 0xbb, 0x16, 0x57, 0xee, 0x86, 0x0d, 0x1b, 0x6e, 0xbe, +0xf9, 0xe6, 0xcd, 0x9b, 0x37, 0x6f, 0xd9, 0xb2, 0x65, 0xeb, 0xd6, 0xad, +0xdb, 0xb7, 0x6f, 0xdf, 0xb1, 0x63, 0xc7, 0xce, 0x9d, 0x3b, 0xd1, 0x41, +0x65, 0x86, 0x22, 0x0e, 0x60, 0x57, 0xe5, 0xfc, 0xf5, 0xeb, 0xd7, 0x1f, +0x3a, 0x74, 0xe8, 0xbe, 0xfb, 0xee, 0xc3, 0xba, 0xc4, 0x09, 0x88, 0x31, +0x90, 0xaf, 0xf9, 0x5e, 0xe6, 0x6f, 0x20, 0x7a, 0x14, 0x4e, 0xcc, 0x06, +0xf7, 0xdf, 0x7f, 0xff, 0xae, 0x5d, 0xbb, 0x96, 0x2f, 0x5f, 0xbe, 0x7f, +0xff, 0x7e, 0xa6, 0xc1, 0x04, 0xf8, 0x95, 0x04, 0x1e, 0x2c, 0xd2, 0xd8, +0x85, 0x58, 0x25, 0xe4, 0x19, 0xa1, 0xcb, 0x0a, 0xa3, 0x1c, 0x44, 0x5c, +0x0c, 0x53, 0x38, 0xad, 0x59, 0x0a, 0xe6, 0xc3, 0x6b, 0x92, 0xbe, 0x81, +0x96, 0x7d, 0x34, 0xbd, 0xa0, 0xc2, 0x80, 0x0d, 0xbd, 0x3f, 0xa7, 0xb9, +0x73, 0x94, 0xbb, 0x6f, 0xf4, 0x3e, 0x40, 0x3a, 0x41, 0x48, 0xc8, 0x3a, +0x3a, 0x10, 0x12, 0x24, 0x9f, 0xcd, 0xb4, 0x2e, 0xdc, 0xcd, 0xb2, 0xab, +0x90, 0x87, 0x7e, 0x2b, 0x41, 0xfc, 0x93, 0x34, 0x6d, 0x51, 0x44, 0xc3, +0x8b, 0x64, 0x71, 0x31, 0xf3, 0x41, 0x31, 0x7b, 0xf6, 0xec, 0x81, 0xfe, +0x66, 0xce, 0x9c, 0x39, 0x60, 0xc0, 0x80, 0x96, 0x2d, 0x5b, 0x56, 0xab, +0x56, 0xcd, 0xd2, 0x59, 0x3c, 0x64, 0xc8, 0x10, 0xd5, 0xd2, 0xdb, 0xb2, +0x59, 0x8c, 0xde, 0x1a, 0xc6, 0x40, 0x67, 0xfa, 0x7d, 0xb9, 0x35, 0xd6, +0x0e, 0xee, 0x0e, 0xd9, 0xf1, 0x41, 0x35, 0xd6, 0x50, 0x18, 0xc3, 0x1e, +0xd8, 0xa6, 0x4d, 0x1b, 0x3f, 0x1c, 0xd6, 0x57, 0x5f, 0x7d, 0xb5, 0x6c, +0xcc, 0x13, 0x27, 0x4e, 0xf4, 0x70, 0x79, 0x7c, 0x7c, 0x7c, 0x66, 0x66, +0x66, 0x5e, 0x5e, 0x5e, 0xfd, 0xfa, 0xf5, 0x1b, 0x37, 0x6e, 0x9c, 0x9f, +0x9f, 0xdf, 0xa4, 0x49, 0x13, 0xfe, 0x6f, 0x44, 0xdb, 0xa6, 0xda, 0xb5, +0xab, 0x57, 0xaf, 0x9e, 0x98, 0x48, 0xd7, 0x03, 0xdf, 0x0e, 0x06, 0x6c, +0xd0, 0xa0, 0x01, 0x51, 0x7a, 0x45, 0x45, 0x45, 0xe3, 0xc7, 0x8f, 0xbf, +0xec, 0xb2, 0xcb, 0xc8, 0x75, 0x23, 0x1a, 0x75, 0xf8, 0xf0, 0xe1, 0x33, +0x66, 0xcc, 0x58, 0xb1, 0x62, 0x05, 0x30, 0x3e, 0x7c, 0xf8, 0x30, 0x18, +0x03, 0x4b, 0xa8, 0xe9, 0xc8, 0xa5, 0x86, 0xcd, 0x45, 0x7a, 0x9a, 0xa9, +0x96, 0x7f, 0xe2, 0x83, 0xc6, 0xd4, 0x0b, 0x02, 0xa1, 0xfe, 0xb9, 0x73, +0xe7, 0x0e, 0x1a, 0x34, 0xa8, 0x69, 0xd3, 0xa6, 0x96, 0x73, 0x23, 0x51, +0x02, 0xd6, 0xc1, 0xe5, 0xe6, 0x7e, 0x88, 0xb6, 0x50, 0xa1, 0xb7, 0x87, +0x33, 0x34, 0x83, 0xf3, 0xfa, 0xab, 0xd8, 0x79, 0xb1, 0x56, 0x9d, 0x3e, +0x7d, 0x9a, 0xad, 0x6b, 0xd2, 0xa4, 0x49, 0x85, 0x85, 0x85, 0xb5, 0x6a, +0xd5, 0x8a, 0x8b, 0x33, 0xd6, 0xfd, 0x66, 0xdd, 0x1b, 0x36, 0x6c, 0x38, +0x70, 0xe0, 0xc0, 0x95, 0x2b, 0x57, 0xb2, 0x10, 0x32, 0x63, 0x5d, 0xe6, +0xf3, 0x7a, 0xaf, 0xa0, 0x9f, 0x80, 0x51, 0x81, 0x7d, 0x85, 0x17, 0x46, +0x79, 0x87, 0x7a, 0xf5, 0xea, 0x99, 0xe7, 0x6c, 0x87, 0x0a, 0xa6, 0x4f, +0x9f, 0x0e, 0xcd, 0x89, 0xe1, 0x4f, 0x9f, 0xa1, 0x6c, 0x31, 0x6a, 0xcb, +0x40, 0x11, 0xc4, 0x80, 0x88, 0x63, 0x14, 0x63, 0x79, 0x49, 0x49, 0xc9, +0xb5, 0xd7, 0x5e, 0x0b, 0x95, 0x10, 0xc4, 0x46, 0xa6, 0x18, 0x84, 0x98, +0x94, 0x94, 0xa4, 0xdf, 0x2b, 0x23, 0x23, 0x83, 0x20, 0x7f, 0x08, 0x1a, +0x63, 0xbc, 0x6c, 0x34, 0x16, 0x31, 0xff, 0x76, 0x26, 0x77, 0xe1, 0x1c, +0xf8, 0xc6, 0xe2, 0xc5, 0x8b, 0x6d, 0x9f, 0x5e, 0x99, 0x27, 0xb2, 0x0e, +0x75, 0xeb, 0xd6, 0x05, 0x48, 0xd0, 0x09, 0x64, 0x4d, 0xd2, 0x9c, 0x02, +0x06, 0x8b, 0x89, 0x4f, 0xba, 0x4e, 0x9d, 0x3a, 0xf6, 0xe7, 0xb7, 0x6a, +0xd5, 0x2a, 0x71, 0x53, 0x18, 0x80, 0xe1, 0x33, 0x2a, 0xec, 0x34, 0xa5, +0x15, 0xd1, 0x0b, 0x3e, 0x00, 0xd0, 0x99, 0x3a, 0xf4, 0x64, 0x7f, 0xa2, +0xea, 0x4c, 0x9c, 0x8b, 0xec, 0xc4, 0x70, 0x5b, 0xc5, 0xe9, 0x6c, 0xde, +0x3a, 0x28, 0xa7, 0x31, 0x7f, 0xe4, 0x87, 0xec, 0xec, 0x6c, 0x3f, 0x66, +0x6e, 0xbe, 0x84, 0xa8, 0x4c, 0x38, 0x06, 0x2f, 0x40, 0xcd, 0x0d, 0x1b, +0x2b, 0x7b, 0xe1, 0xd0, 0xa1, 0x43, 0x3b, 0x74, 0xe8, 0xc0, 0x8b, 0x4c, +0x48, 0x48, 0xf0, 0xfb, 0x46, 0x7d, 0xfb, 0xf6, 0x45, 0x54, 0xf3, 0xfb, +0x72, 0x2e, 0x64, 0x37, 0x75, 0xb9, 0x72, 0x43, 0xf3, 0x18, 0x39, 0x72, +0xa4, 0xf8, 0x1c, 0xf0, 0x67, 0xfb, 0xfa, 0x04, 0xbc, 0x5f, 0xa8, 0x14, +0x9d, 0x9e, 0x57, 0xc3, 0xf6, 0xa4, 0xde, 0x4e, 0xf0, 0x51, 0xc1, 0x14, +0xf7, 0xee, 0xdd, 0xcb, 0xab, 0xf2, 0x75, 0x8a, 0xee, 0xce, 0x07, 0x57, +0x18, 0x9e, 0x03, 0x6c, 0xfb, 0xab, 0x1e, 0x58, 0xa4, 0x7f, 0x44, 0x4c, +0xa2, 0x0c, 0x88, 0x55, 0x60, 0x51, 0x2c, 0x7b, 0xa5, 0xc2, 0xdc, 0x10, +0x0c, 0x7c, 0x7a, 0x04, 0x67, 0x42, 0x6c, 0x7e, 0x9d, 0xf4, 0xde, 0x6d, +0x73, 0x27, 0x17, 0x35, 0x58, 0x3e, 0xb9, 0x45, 0xb5, 0xb4, 0x52, 0x89, +0x82, 0x55, 0x46, 0x4a, 0x44, 0xef, 0x14, 0x5e, 0x01, 0x11, 0xc7, 0xc4, +0xd0, 0x04, 0xa3, 0x5c, 0x8e, 0x76, 0x4d, 0xaa, 0xdf, 0x30, 0xa3, 0x8d, +0xe5, 0xcf, 0xd5, 0x53, 0x5b, 0x5e, 0x39, 0xae, 0x99, 0xfc, 0xcc, 0x1e, +0x96, 0xaf, 0x6e, 0xaf, 0xf3, 0x40, 0xa6, 0xcd, 0x69, 0xb3, 0x86, 0xe6, +0x0f, 0xed, 0x5a, 0xbb, 0x4b, 0x8b, 0x1a, 0x05, 0x75, 0xd3, 0xf3, 0xaa, +0x27, 0xa5, 0x24, 0x79, 0x6e, 0xe8, 0x71, 0x71, 0xa4, 0xd4, 0xa4, 0xf8, +0x3a, 0xd9, 0xc9, 0x1d, 0x0a, 0xb2, 0x06, 0x77, 0xae, 0x3d, 0x67, 0x44, +0x13, 0x2e, 0xe7, 0x0f, 0x19, 0xa9, 0x09, 0xd7, 0x5e, 0xd2, 0x6a, 0xc1, +0xe8, 0x02, 0x96, 0x65, 0x50, 0xe7, 0x5a, 0x9d, 0x9b, 0xd7, 0x68, 0x52, +0x37, 0xbd, 0x46, 0x86, 0x33, 0x36, 0x36, 0x68, 0x2b, 0x40, 0x49, 0x1a, +0x38, 0x2d, 0xdc, 0xc3, 0xc3, 0x82, 0xe6, 0x54, 0x73, 0x76, 0x6a, 0x96, +0x35, 0xbe, 0x4f, 0xfd, 0x25, 0x13, 0x9b, 0xeb, 0xa7, 0x11, 0x9f, 0x81, +0x0c, 0xcf, 0xab, 0xd1, 0xf7, 0xac, 0xe0, 0xa0, 0x42, 0x02, 0xa8, 0xe0, +0xe6, 0xb3, 0x66, 0xcd, 0xb2, 0xff, 0xbe, 0x59, 0xaf, 0x7a, 0xb9, 0x29, +0xf5, 0x73, 0x53, 0xf9, 0x3f, 0x3d, 0x85, 0x96, 0x43, 0x6e, 0x0f, 0xc4, +0x56, 0x64, 0x2a, 0xec, 0x09, 0xca, 0x27, 0x6f, 0x87, 0x21, 0xc8, 0xac, +0xb8, 0x8a, 0xe4, 0x12, 0x78, 0x25, 0xc2, 0x6b, 0x6e, 0x6e, 0xae, 0xf9, +0x1e, 0x6c, 0xd8, 0x67, 0xce, 0x9c, 0x41, 0x60, 0x13, 0x21, 0x47, 0x64, +0xd3, 0x32, 0xc5, 0x1c, 0xb4, 0x6b, 0x58, 0xdc, 0xf6, 0x4d, 0xaa, 0x0f, +0xeb, 0x56, 0x67, 0xee, 0x88, 0x26, 0x6b, 0x67, 0xb7, 0x3d, 0xb4, 0xb2, +0xdb, 0x43, 0x9b, 0x8b, 0xde, 0x3e, 0x3a, 0xe2, 0xff, 0x1e, 0x9c, 0xf8, +0xcd, 0x33, 0xd3, 0xf5, 0x9f, 0xec, 0x4c, 0xa7, 0xba, 0x0e, 0x25, 0x18, +0x5f, 0x12, 0xfa, 0x00, 0x83, 0xa3, 0x92, 0x22, 0x9d, 0xfb, 0x01, 0x88, +0xb4, 0xe4, 0x78, 0x59, 0xab, 0x64, 0xa7, 0x27, 0x1a, 0x5d, 0x3f, 0xa7, +0x9d, 0x61, 0x26, 0x96, 0xbf, 0x1e, 0xbf, 0xbe, 0xa7, 0x9a, 0x43, 0x56, +0x56, 0x96, 0xfa, 0x3c, 0xaa, 0x47, 0x5d, 0x77, 0x97, 0xff, 0xe9, 0xe1, +0xc9, 0x9f, 0x9d, 0x9d, 0xf4, 0x3f, 0xf7, 0x8c, 0xfb, 0xe9, 0x9d, 0x63, +0xf4, 0x9f, 0x4f, 0xef, 0x9f, 0xc8, 0xf7, 0xe6, 0xab, 0xd8, 0x20, 0x18, +0x16, 0x44, 0x79, 0x18, 0xf0, 0x67, 0x77, 0x8d, 0x7d, 0xfd, 0xd6, 0xe1, +0x4f, 0x6e, 0x1f, 0x78, 0xea, 0xa6, 0xde, 0x07, 0x57, 0x76, 0xbd, 0xe9, +0xb2, 0x76, 0xcf, 0xef, 0x19, 0xf2, 0xe0, 0xcd, 0xfd, 0x0e, 0xaf, 0xea, +0xbe, 0x69, 0x7e, 0xfb, 0x15, 0x93, 0x5b, 0xce, 0x1c, 0xda, 0x18, 0x7c, +0x82, 0xa5, 0x46, 0xb5, 0xd2, 0x40, 0x9d, 0xbb, 0x75, 0x83, 0x8e, 0x0d, +0x4f, 0xc1, 0xb5, 0xbb, 0x97, 0x74, 0x3e, 0xbb, 0xb9, 0xdf, 0xbb, 0xc7, +0x46, 0x7e, 0x71, 0x6e, 0x8a, 0x9a, 0x03, 0xb7, 0x53, 0x83, 0xa4, 0xa7, +0xa7, 0xa3, 0x84, 0xc0, 0xb7, 0xd1, 0x58, 0x20, 0x80, 0x20, 0xf3, 0x0a, +0xf8, 0xd7, 0xe8, 0xd1, 0xa3, 0x3d, 0xbc, 0x69, 0x9e, 0xa7, 0x6f, 0xfb, +0xbc, 0x65, 0x93, 0x5a, 0xf0, 0xb4, 0xcf, 0xed, 0x1e, 0xfc, 0xbf, 0xa7, +0xc7, 0x7f, 0xf5, 0xe4, 0x34, 0xc3, 0x62, 0x7d, 0xf9, 0xd8, 0xd4, 0x9f, +0xdc, 0x3e, 0xea, 0xae, 0xb5, 0xbd, 0x17, 0x8d, 0x6b, 0x56, 0x37, 0x27, +0xc5, 0x30, 0x1a, 0x0a, 0x13, 0x2c, 0x12, 0x12, 0x87, 0x64, 0xed, 0xf0, +0x0d, 0x20, 0x01, 0x2d, 0x8e, 0x1d, 0x3b, 0xd6, 0xa6, 0x32, 0x80, 0xae, +0x89, 0x16, 0x81, 0xb4, 0x86, 0x4d, 0x66, 0xe1, 0xc2, 0x85, 0xfa, 0xdd, +0x2f, 0x1f, 0xdd, 0xf4, 0x47, 0xbb, 0x07, 0xf3, 0xfe, 0xfe, 0xf6, 0xf8, +0x54, 0x3b, 0x04, 0xc7, 0x39, 0x9f, 0x3f, 0x7a, 0xb1, 0x7e, 0x84, 0x8c, +0x73, 0xea, 0xd4, 0x29, 0x74, 0x06, 0xdc, 0x49, 0x6c, 0x48, 0x47, 0x8f, +0x1e, 0xb5, 0x5c, 0x28, 0xb6, 0xcf, 0xa6, 0xf5, 0x32, 0xfa, 0xb4, 0xcb, +0x9b, 0xd8, 0xaf, 0x01, 0x2b, 0xb0, 0x6e, 0x4e, 0xbb, 0x03, 0x2b, 0xba, +0x3e, 0xb0, 0xa9, 0xdf, 0x8b, 0xfb, 0x86, 0x70, 0xeb, 0xbf, 0x3e, 0x56, +0xe6, 0xd6, 0xbf, 0xba, 0x77, 0xfc, 0x89, 0x1b, 0x7a, 0x0e, 0xe8, 0x54, +0xd3, 0x3c, 0xd4, 0xfd, 0x1b, 0xfb, 0xda, 0x99, 0xe4, 0x88, 0xee, 0xa5, +0xf2, 0x37, 0xd6, 0x02, 0x35, 0xce, 0x96, 0xcb, 0x3b, 0xda, 0xb9, 0xdc, +0xeb, 0x39, 0xac, 0x40, 0x42, 0xbc, 0x2b, 0x55, 0x93, 0xfd, 0xce, 0xeb, +0xc9, 0xea, 0x84, 0x37, 0x0e, 0x0f, 0xf7, 0x7c, 0x32, 0x44, 0xf2, 0xcb, +0x7b, 0xc6, 0xbd, 0x7a, 0x70, 0xd8, 0xc3, 0xb7, 0x14, 0xd5, 0xaa, 0x51, +0x2a, 0xf5, 0xb5, 0x6a, 0xd5, 0x4a, 0x3d, 0x02, 0xc4, 0xf6, 0xf5, 0x53, +0x97, 0xb8, 0x1b, 0x67, 0xcf, 0xd2, 0xd2, 0x34, 0x21, 0xec, 0x13, 0x0f, +0x3d, 0xf4, 0x10, 0x41, 0x2b, 0xb8, 0xf9, 0xb0, 0xb3, 0x05, 0x0d, 0x15, +0xe2, 0x05, 0x47, 0x29, 0xb4, 0x7c, 0xd3, 0x5d, 0x5b, 0x66, 0xf3, 0x76, +0x5f, 0xde, 0x3f, 0xd4, 0x8c, 0x01, 0xcf, 0x0f, 0xcf, 0xf9, 0xa7, 0xd7, +0xf7, 0x69, 0xdd, 0xa8, 0x9a, 0x3e, 0x2c, 0x4f, 0x0e, 0xe1, 0xc2, 0xec, +0x64, 0x53, 0x37, 0xb3, 0x0b, 0x99, 0x0c, 0xbb, 0x32, 0xfa, 0xba, 0xbe, +0x73, 0xd8, 0xdc, 0x98, 0x5b, 0xb4, 0x68, 0x41, 0xcc, 0x0c, 0xba, 0x90, +0x7e, 0xfe, 0xe8, 0x9e, 0x75, 0x3d, 0x2c, 0xb1, 0xbb, 0xa7, 0xe0, 0x91, +0xd5, 0x20, 0x98, 0xa7, 0x50, 0xa0, 0x09, 0xec, 0x81, 0x53, 0xc3, 0x28, +0xf4, 0xb5, 0xba, 0x74, 0x70, 0xe3, 0x1f, 0x1f, 0x1c, 0xc6, 0xee, 0xfb, +0xf7, 0x27, 0x8c, 0x7b, 0x84, 0x4d, 0x4a, 0x3a, 0xb3, 0xa1, 0xaf, 0x81, +0xcd, 0xfe, 0xf4, 0xae, 0x31, 0x5e, 0xaf, 0x85, 0xb3, 0xc5, 0xc7, 0x95, +0x0a, 0x30, 0xa9, 0xa9, 0xa9, 0x6a, 0xb6, 0xcc, 0xdc, 0xeb, 0xe5, 0x76, +0x4e, 0x80, 0x6a, 0x65, 0x4c, 0xa0, 0x6e, 0xe7, 0x7c, 0x39, 0x07, 0x8e, +0x61, 0xff, 0x64, 0xb6, 0x0c, 0xcb, 0x37, 0xdb, 0xab, 0x4d, 0xae, 0x87, +0x41, 0xa6, 0x0f, 0x6a, 0xa4, 0xae, 0x42, 0x27, 0x41, 0x4c, 0xc0, 0x94, +0x8c, 0x20, 0xcd, 0xab, 0x09, 0x1a, 0x2a, 0xa0, 0x42, 0xc2, 0x3f, 0x0d, +0x93, 0x43, 0xbc, 0x86, 0xfd, 0xfd, 0xe2, 0xd4, 0x38, 0xfb, 0x4f, 0x68, +0x79, 0x26, 0xe4, 0xb8, 0xfa, 0xd2, 0xd6, 0xfa, 0xe0, 0x37, 0xde, 0x78, +0x23, 0xc0, 0x80, 0xd9, 0xe9, 0xba, 0x91, 0x32, 0x1f, 0x63, 0xbc, 0x9b, +0x37, 0x6f, 0x9e, 0x67, 0x0c, 0x20, 0x7e, 0xf0, 0x9e, 0x58, 0xb8, 0x91, +0x3d, 0xea, 0x76, 0x6c, 0x5a, 0x2a, 0x39, 0xc8, 0x55, 0xed, 0xda, 0xb5, +0xd3, 0xa5, 0x2c, 0x1e, 0xe4, 0x8f, 0x0f, 0x4d, 0xf6, 0xe3, 0x29, 0x76, +0x5d, 0x55, 0xba, 0x21, 0x61, 0xc1, 0xa4, 0x66, 0x04, 0x81, 0x7d, 0x12, +0xa7, 0xa9, 0x4f, 0x0f, 0x48, 0xf8, 0x31, 0xb8, 0xe1, 0x12, 0x78, 0x6f, +0xdc, 0x0f, 0x32, 0x3a, 0x08, 0xf9, 0xe7, 0xd3, 0x6e, 0xb7, 0x49, 0x75, +0x21, 0x82, 0x9f, 0x0e, 0x5a, 0xf5, 0x19, 0x99, 0xd6, 0xd7, 0xfd, 0xcb, +0xdd, 0xfc, 0xd1, 0xac, 0x64, 0x58, 0x98, 0x92, 0xcd, 0x67, 0x84, 0x01, +0xde, 0x76, 0x5d, 0x0f, 0x9b, 0x27, 0xcb, 0x69, 0x97, 0x0c, 0x2c, 0x25, +0x71, 0xf5, 0x14, 0x68, 0x0e, 0x1e, 0x06, 0xe1, 0x9d, 0xaa, 0x33, 0x11, +0x0a, 0x10, 0xbd, 0x30, 0xfb, 0x62, 0xf2, 0x46, 0xe1, 0x0c, 0x0e, 0x2a, +0xd8, 0x9b, 0xd9, 0xb6, 0xaf, 0xb8, 0xe2, 0x0a, 0x75, 0x9b, 0x96, 0x0d, +0x33, 0x91, 0xe4, 0xfc, 0xd8, 0x5c, 0x3d, 0x3c, 0xc6, 0xb4, 0x01, 0x0d, +0xd5, 0xf8, 0x98, 0xb7, 0x09, 0x5c, 0x33, 0x48, 0x81, 0x4c, 0x03, 0x06, +0xb2, 0x74, 0xe9, 0x52, 0x77, 0x78, 0x68, 0x5c, 0x3b, 0x6d, 0xe1, 0xd8, +0xa6, 0x77, 0xde, 0xd8, 0x0b, 0x69, 0xd8, 0x40, 0x34, 0x2f, 0xed, 0x1b, +0x6a, 0xc6, 0x86, 0x8c, 0x03, 0xa9, 0xf9, 0x4d, 0xb5, 0xe3, 0x7a, 0x97, +0x9a, 0xdd, 0x30, 0x3c, 0xe0, 0x3c, 0x82, 0x4d, 0x13, 0x12, 0x87, 0xc9, +0x55, 0x4d, 0x92, 0xd7, 0x63, 0x87, 0x82, 0xed, 0x50, 0xc9, 0xe2, 0xf1, +0xcd, 0x64, 0xd8, 0x6e, 0x2d, 0xb3, 0xed, 0x9c, 0xdf, 0xbf, 0x63, 0xa9, +0xe8, 0xd5, 0xb1, 0x63, 0xc7, 0xd2, 0xbd, 0xd3, 0xbd, 0x52, 0x61, 0x67, +0x58, 0xfd, 0x1c, 0x94, 0x7e, 0x19, 0x96, 0x7d, 0xcd, 0xe6, 0xb5, 0x3b, +0xae, 0x2c, 0xfc, 0xe8, 0xc4, 0x68, 0x9b, 0x27, 0xcb, 0x69, 0xbf, 0x7f, +0x60, 0x22, 0xc6, 0x00, 0xc3, 0x7b, 0x47, 0x65, 0x72, 0x37, 0xc8, 0xef, +0xee, 0x9f, 0xa0, 0x9f, 0x8c, 0x49, 0x1a, 0xd7, 0x13, 0xbc, 0x02, 0xe1, +0x36, 0x38, 0xbc, 0x42, 0xe9, 0xb2, 0x35, 0x6b, 0x96, 0x2e, 0xf1, 0xbd, +0xeb, 0xfb, 0xf8, 0xf4, 0x54, 0x76, 0x4e, 0x46, 0x09, 0x11, 0x09, 0x55, +0x0e, 0xdc, 0xa5, 0xc4, 0xa8, 0x81, 0x6c, 0x65, 0xfb, 0xa7, 0x07, 0x87, +0xa5, 0xfe, 0x8a, 0xbe, 0xcb, 0x8e, 0xf5, 0xa6, 0x0d, 0x51, 0x15, 0xbe, +0x61, 0x46, 0xd4, 0x8d, 0xb3, 0xda, 0xda, 0x99, 0x9e, 0xf9, 0x1c, 0xd4, +0x0f, 0x5d, 0xaa, 0xc1, 0xbe, 0x8c, 0x1d, 0x1d, 0x09, 0x0a, 0x3c, 0xf7, +0xef, 0xdf, 0x5f, 0xdd, 0xc8, 0x3e, 0xb9, 0x78, 0x9d, 0xc6, 0x6b, 0x87, +0x86, 0xc9, 0xb0, 0xd8, 0x00, 0xbc, 0x9e, 0xfc, 0x9b, 0x33, 0x13, 0x74, +0x03, 0x98, 0x6e, 0x6a, 0x43, 0x3d, 0xf5, 0x7a, 0xb9, 0x9d, 0x13, 0x74, +0xe2, 0xb3, 0xa9, 0xe7, 0x30, 0xec, 0x84, 0xbe, 0xf5, 0xfd, 0xd8, 0x26, +0x90, 0xb4, 0x0d, 0xef, 0x0e, 0xed, 0xd4, 0xdd, 0x24, 0x99, 0x8c, 0x3a, +0x19, 0xba, 0xc5, 0x85, 0x4f, 0xf2, 0x16, 0xaf, 0x06, 0x01, 0x04, 0xdd, +0x38, 0x08, 0xbc, 0x42, 0x92, 0x93, 0x10, 0xcb, 0xd4, 0x6d, 0xe0, 0xbf, +0x28, 0x43, 0x76, 0x56, 0xcd, 0xd7, 0x73, 0x30, 0xa8, 0xa9, 0xbb, 0x4c, +0x9d, 0x3a, 0x95, 0x4d, 0x97, 0xf8, 0x47, 0x34, 0x63, 0x18, 0x1f, 0x2e, +0x36, 0x33, 0x41, 0x37, 0xab, 0x9f, 0x81, 0x5a, 0x6f, 0x7f, 0x32, 0x7f, +0x79, 0x64, 0x4a, 0xfd, 0xbc, 0x52, 0xd9, 0x9a, 0x01, 0x5b, 0x34, 0xc8, +0xb4, 0xaf, 0x5b, 0x1b, 0x1e, 0x47, 0x97, 0x77, 0x09, 0xd3, 0xdf, 0xb8, +0x71, 0x23, 0x1e, 0x4c, 0xa9, 0x96, 0xa2, 0x4f, 0x15, 0xcb, 0x95, 0xaf, +0xeb, 0xe0, 0xee, 0x7c, 0xd4, 0x12, 0x19, 0x79, 0xe7, 0x55, 0x85, 0x5e, +0xc7, 0xe4, 0x1c, 0x35, 0x0d, 0x2a, 0xd4, 0xeb, 0x53, 0x42, 0xad, 0xf7, +0x7a, 0xb9, 0x9d, 0x13, 0x4e, 0xae, 0xe9, 0xa5, 0x86, 0x65, 0x3b, 0xb7, +0x73, 0x09, 0xea, 0x10, 0xe2, 0x90, 0x9d, 0x33, 0xcd, 0xe7, 0x4c, 0xea, +0xd7, 0x40, 0xdd, 0x8e, 0xfd, 0xc8, 0x83, 0xa8, 0x82, 0x8d, 0x58, 0x9d, +0x89, 0x37, 0x19, 0x27, 0x20, 0x6e, 0x53, 0xbc, 0x49, 0x98, 0x07, 0x83, +0x63, 0x83, 0x42, 0xb2, 0xc7, 0x5c, 0x83, 0xe3, 0x56, 0xdd, 0x66, 0xc6, +0x90, 0xc6, 0xfe, 0x3d, 0x95, 0xd7, 0xab, 0x8e, 0x5e, 0xdb, 0x5d, 0xdd, +0x05, 0x9d, 0x9b, 0x44, 0x13, 0xf0, 0x00, 0xa9, 0xe9, 0x6c, 0x4a, 0x4e, +0x68, 0x58, 0x2b, 0x0d, 0x06, 0xea, 0x87, 0x08, 0x07, 0x8a, 0x74, 0xfa, +0x78, 0xaa, 0x64, 0xa0, 0xd7, 0x59, 0xb9, 0x3b, 0x81, 0x3d, 0x4f, 0x0d, +0x85, 0x17, 0x96, 0xf2, 0x28, 0x38, 0x28, 0x08, 0x28, 0x42, 0x29, 0x52, +0xdf, 0x23, 0x6a, 0x9a, 0x2f, 0x87, 0xd3, 0xee, 0x5d, 0xd6, 0xe5, 0xad, +0x23, 0x3e, 0xa3, 0x05, 0x65, 0x40, 0x46, 0x7e, 0x72, 0x87, 0xf7, 0x69, +0xf7, 0x68, 0x5d, 0xda, 0x9c, 0x04, 0xca, 0x28, 0x9d, 0x6a, 0x93, 0xea, +0x7e, 0x3f, 0xb2, 0xe1, 0x42, 0xdc, 0x1d, 0x32, 0x2c, 0xf6, 0x12, 0x9b, +0x63, 0xa2, 0x88, 0xf2, 0x0a, 0x6c, 0x9e, 0x6c, 0x38, 0x0d, 0xd6, 0xa4, +0xec, 0xe0, 0x18, 0xf1, 0x3c, 0x0c, 0x82, 0x21, 0x54, 0x3d, 0x2f, 0xfb, +0x29, 0x3c, 0x9c, 0xad, 0x0a, 0x6f, 0x98, 0x44, 0xe5, 0x04, 0x81, 0x57, +0x60, 0x64, 0x44, 0x9a, 0x27, 0xf4, 0x40, 0xdd, 0xe6, 0x91, 0x2d, 0xfd, +0xfd, 0x7b, 0x2a, 0xaf, 0x57, 0x7d, 0x70, 0x7c, 0x94, 0xba, 0x0b, 0x77, +0xc4, 0x07, 0x47, 0xe4, 0x99, 0x4e, 0xc4, 0x7c, 0x4e, 0x4a, 0x8c, 0xc3, +0x54, 0x6f, 0x9f, 0x3f, 0x18, 0x6e, 0x8a, 0xe9, 0x53, 0x99, 0xc3, 0xd1, +0x0a, 0xbc, 0x4e, 0xc9, 0xdd, 0x09, 0xbf, 0xbd, 0x6f, 0x82, 0x2e, 0xef, +0xe1, 0xc0, 0x41, 0xe4, 0x23, 0x19, 0x9a, 0x0d, 0x49, 0xef, 0x0a, 0x82, +0x61, 0xde, 0x30, 0x02, 0xc2, 0x43, 0xed, 0x1f, 0x4c, 0x8d, 0x37, 0xcf, +0xef, 0xe0, 0xd3, 0x04, 0xd0, 0x97, 0x64, 0x35, 0xb8, 0xbb, 0xe7, 0x0b, +0x7f, 0x7e, 0xf7, 0x58, 0x7d, 0xdd, 0xf4, 0xf6, 0x3d, 0xbe, 0xde, 0xd4, +0xdd, 0x8d, 0x78, 0x10, 0x65, 0x58, 0xbf, 0x6a, 0x82, 0x27, 0xc5, 0x57, +0x1f, 0x01, 0x2f, 0x10, 0xa2, 0xb2, 0x4f, 0x4f, 0xad, 0x9f, 0x8c, 0xd2, +0x28, 0xcf, 0x85, 0xf5, 0xdf, 0xdd, 0x20, 0xec, 0x1d, 0xba, 0xc7, 0x83, +0xd8, 0x02, 0x24, 0x1d, 0xc4, 0x27, 0x76, 0x58, 0x94, 0x0a, 0x04, 0x9f, +0x20, 0xa0, 0x02, 0xd7, 0x01, 0x31, 0x58, 0x6a, 0x89, 0x01, 0xeb, 0x3f, +0x4c, 0x2e, 0x08, 0xbf, 0x1f, 0xd2, 0x70, 0x21, 0x23, 0xeb, 0xa2, 0xb0, +0xd9, 0x10, 0x8c, 0x4d, 0xc9, 0x57, 0x45, 0xcd, 0x3c, 0xb7, 0x21, 0x5d, +0x5c, 0xce, 0x6c, 0x7c, 0xae, 0x80, 0xd0, 0xef, 0x99, 0x6f, 0x98, 0xdb, +0x5e, 0xad, 0x09, 0xce, 0x47, 0x18, 0x05, 0x06, 0x28, 0x49, 0xa8, 0xd7, +0xc9, 0xf1, 0xc3, 0x3b, 0x8c, 0x6a, 0x25, 0x36, 0x78, 0x75, 0x42, 0x9b, +0xc6, 0x76, 0xb7, 0x58, 0x99, 0xe7, 0xed, 0xab, 0x5d, 0x05, 0xe4, 0x79, +0x05, 0x5e, 0xa7, 0xbd, 0x79, 0x41, 0x07, 0x75, 0x17, 0xdd, 0xda, 0xc6, +0xf2, 0x62, 0x20, 0xf6, 0x7a, 0xb9, 0x9d, 0x13, 0xde, 0x39, 0x36, 0x52, +0xdd, 0x02, 0x17, 0xa7, 0x9d, 0x4b, 0xde, 0xbf, 0x7d, 0x14, 0xda, 0xb9, +0x9d, 0x33, 0x3d, 0x9c, 0x33, 0xf6, 0x82, 0x85, 0x03, 0x37, 0x8e, 0xbb, +0x73, 0x74, 0xff, 0x1d, 0x11, 0x2e, 0xa8, 0xda, 0xc4, 0xf0, 0x62, 0xb7, +0x24, 0x80, 0xd7, 0x60, 0xd5, 0xf4, 0xdf, 0xb7, 0x0d, 0xbc, 0x74, 0x99, +0x1e, 0x97, 0x7e, 0x80, 0x4f, 0xe5, 0xf9, 0x72, 0x9c, 0x5c, 0x06, 0xe6, +0x20, 0xbf, 0xf2, 0x3a, 0xd9, 0x77, 0x83, 0x62, 0x4f, 0xc4, 0x1b, 0xca, +0x80, 0x38, 0x53, 0xfd, 0x7e, 0x10, 0xe4, 0x7b, 0x42, 0x1e, 0xd4, 0x3c, +0xfb, 0xf5, 0xeb, 0xb7, 0x6f, 0xdf, 0x3e, 0x09, 0xc9, 0xbe, 0xe6, 0x9a, +0x6b, 0xd4, 0xf7, 0xc4, 0x44, 0x98, 0x6f, 0x81, 0xa7, 0x5c, 0x9d, 0x80, +0xa0, 0xec, 0xd3, 0x1c, 0xc4, 0xe4, 0xe5, 0x59, 0x78, 0x90, 0x01, 0xb9, +0xb5, 0xba, 0x8b, 0x1e, 0x71, 0xe8, 0xc1, 0xa5, 0xed, 0xd3, 0x4c, 0x38, +0xf9, 0x96, 0xcb, 0x2f, 0x02, 0x0f, 0xee, 0xad, 0x3b, 0x95, 0x3d, 0x8c, +0x73, 0xc3, 0xcc, 0x36, 0xd7, 0xdb, 0x36, 0x55, 0xb9, 0x1b, 0xe7, 0xd7, +0x67, 0xc6, 0x57, 0x4f, 0x4f, 0xf4, 0xb0, 0x39, 0xea, 0xfe, 0x3b, 0xcc, +0xe5, 0x94, 0x22, 0xc7, 0x2f, 0x8c, 0x13, 0x89, 0x78, 0x6d, 0x83, 0x07, +0xcc, 0x4f, 0x54, 0x60, 0xff, 0x21, 0xf2, 0xc4, 0xe9, 0x2c, 0xa5, 0xd4, +0xa7, 0x77, 0x0e, 0xf2, 0x75, 0xf9, 0x7c, 0x3a, 0xdf, 0xec, 0xed, 0xe6, +0xed, 0xb2, 0x0a, 0x8f, 0x6d, 0x1b, 0xe0, 0xd3, 0x38, 0x1e, 0x4e, 0x46, +0x84, 0x00, 0x63, 0x81, 0xf0, 0x1c, 0xd9, 0xb3, 0xd5, 0x41, 0xdc, 0x2b, +0xfa, 0x1c, 0xa1, 0xfc, 0x58, 0xc4, 0x89, 0x02, 0x54, 0xdf, 0xb3, 0x61, +0x9b, 0xa7, 0x21, 0x51, 0x43, 0x1c, 0x44, 0x76, 0x78, 0xb0, 0xa2, 0x98, +0x2f, 0x64, 0x8f, 0x17, 0x97, 0x1c, 0x1e, 0x71, 0xcf, 0x4b, 0xa1, 0x0b, +0xa2, 0x86, 0x2d, 0xc6, 0x8e, 0x42, 0x62, 0x73, 0x9d, 0xfb, 0x75, 0xb8, +0x28, 0xbb, 0x13, 0x17, 0x63, 0xf3, 0x12, 0x3c, 0x48, 0x7e, 0x1b, 0xc1, +0xf5, 0x5b, 0x60, 0xe7, 0xf0, 0x60, 0xc5, 0xd2, 0xfd, 0x77, 0x84, 0xff, +0x20, 0xd9, 0x52, 0xd0, 0x04, 0xeb, 0x13, 0xfb, 0xbb, 0x84, 0x33, 0x07, +0x24, 0x41, 0x89, 0x4d, 0xf6, 0xd6, 0x5b, 0x6f, 0x55, 0x2b, 0xcb, 0x06, +0xe9, 0x87, 0x82, 0x6b, 0x73, 0xc9, 0xe4, 0xb4, 0x9a, 0x59, 0x46, 0xb3, +0x34, 0x81, 0x31, 0x3e, 0x89, 0x3a, 0x68, 0x0e, 0x18, 0x5b, 0xf1, 0x4e, +0x10, 0x49, 0x61, 0x79, 0x6b, 0x14, 0x3e, 0xa2, 0x2d, 0x7c, 0x9a, 0x95, +0x7e, 0x32, 0xef, 0x03, 0xc9, 0x47, 0xad, 0x09, 0x7a, 0x36, 0xf9, 0x3d, +0xc4, 0x7a, 0x10, 0x7f, 0xa6, 0x5b, 0xea, 0x38, 0xc1, 0x6c, 0xea, 0x41, +0x1f, 0x90, 0x0b, 0x89, 0x1a, 0x7a, 0x62, 0xbb, 0x6f, 0x38, 0xbf, 0x62, +0x4c, 0x53, 0xb9, 0x96, 0x38, 0x22, 0xcf, 0x93, 0xe7, 0xf1, 0x0d, 0x60, +0x90, 0x5f, 0x6d, 0x7a, 0x39, 0xec, 0xac, 0x0c, 0x4e, 0x4f, 0xe5, 0x35, +0xdf, 0xb7, 0xac, 0x8b, 0x9d, 0x4b, 0x30, 0x2b, 0x63, 0x00, 0xf4, 0xc3, +0x26, 0x6b, 0x67, 0x70, 0xfd, 0x1c, 0xa2, 0x12, 0xd5, 0xe3, 0xcf, 0x9e, +0x3d, 0xfb, 0xc8, 0x91, 0x23, 0xec, 0x56, 0x30, 0x0a, 0x74, 0x01, 0x43, +0x84, 0xa8, 0x3f, 0xbc, 0x42, 0x2a, 0xa9, 0xe9, 0xc2, 0xfd, 0xd2, 0x89, +0x6e, 0x55, 0x1c, 0x5f, 0xa7, 0xee, 0xee, 0x7c, 0x43, 0xd8, 0x26, 0xc6, +0x0d, 0x38, 0xa6, 0xfd, 0xc1, 0x89, 0x6c, 0xe3, 0xdd, 0xcb, 0xa2, 0xf0, +0x0e, 0x2c, 0x2f, 0x44, 0x82, 0x22, 0xe8, 0xc8, 0xfe, 0x98, 0x86, 0x33, +0x71, 0x5f, 0xea, 0x34, 0x37, 0x7f, 0xfe, 0x7c, 0x78, 0x34, 0x81, 0x89, +0xe4, 0x03, 0xe9, 0xd9, 0x0b, 0xdd, 0x5b, 0xe5, 0x98, 0x6f, 0x71, 0xe4, +0x1a, 0x97, 0x05, 0x0c, 0x6f, 0x23, 0xb2, 0xaf, 0x4f, 0x13, 0xe0, 0x7c, +0x15, 0x7c, 0xea, 0x35, 0x58, 0xa3, 0x79, 0xfd, 0x52, 0xd3, 0x88, 0x3e, +0xd5, 0x20, 0x32, 0x8a, 0xbb, 0xd7, 0xf6, 0x56, 0x23, 0xdb, 0xd4, 0x9e, +0x57, 0x4e, 0x69, 0x89, 0x5b, 0xc9, 0xa7, 0xa7, 0xf6, 0xe3, 0x64, 0x42, +0x18, 0xf5, 0x47, 0x26, 0xdf, 0x10, 0xad, 0x18, 0xff, 0x9d, 0x21, 0x5a, +0x56, 0xd8, 0x85, 0xcf, 0xa8, 0x00, 0x55, 0x40, 0x02, 0x77, 0x81, 0x7e, +0x8f, 0x57, 0x0e, 0xd8, 0x0d, 0x9e, 0x61, 0x9b, 0x24, 0x74, 0x07, 0x19, +0x1a, 0x51, 0x18, 0xbe, 0x09, 0x7c, 0x09, 0x69, 0xf6, 0x1a, 0x55, 0x81, +0x3f, 0x41, 0xbf, 0x1d, 0x90, 0xe0, 0x21, 0xed, 0x2f, 0x0d, 0x7c, 0x0c, +0x6e, 0xae, 0x46, 0x70, 0xa7, 0xd8, 0x05, 0x68, 0x84, 0xd1, 0x2d, 0x9e, +0x88, 0xad, 0x64, 0x84, 0xb2, 0x1b, 0xa1, 0x67, 0x63, 0xf8, 0xd3, 0x63, +0xd7, 0xf0, 0xe0, 0x9a, 0x67, 0x4e, 0x94, 0x35, 0xc6, 0x13, 0x1e, 0xd3, +0xfe, 0x43, 0x71, 0x26, 0xdc, 0x4f, 0x71, 0x27, 0x3c, 0xf1, 0x86, 0x08, +0x42, 0xc3, 0x50, 0x2c, 0x02, 0x0e, 0x4d, 0x89, 0x75, 0x25, 0x18, 0x87, +0x28, 0x57, 0x7e, 0x7c, 0xbd, 0xa3, 0xd7, 0xe9, 0x11, 0xd9, 0x25, 0xeb, +0x8c, 0x40, 0xe8, 0xf5, 0x64, 0x4e, 0x80, 0x45, 0x10, 0x08, 0x6c, 0x9f, +0x7e, 0xec, 0x8c, 0x69, 0x79, 0x8e, 0xee, 0x44, 0xc2, 0xcc, 0x40, 0xc6, +0x2c, 0x96, 0x7d, 0x0c, 0x50, 0x92, 0x7c, 0x6b, 0x88, 0xa9, 0xf3, 0x07, +0x15, 0xd8, 0x64, 0x51, 0x22, 0x15, 0x91, 0xb1, 0xc3, 0xd9, 0x64, 0x7f, +0x98, 0x4d, 0xd1, 0xc0, 0xcc, 0x4c, 0x9c, 0xdd, 0xc2, 0xf3, 0xd3, 0xea, +0x66, 0x0d, 0x02, 0x25, 0xf0, 0xce, 0xfa, 0xb4, 0x3a, 0xba, 0x9a, 0xc5, +0xdd, 0xc9, 0x1f, 0xb0, 0xbc, 0x3c, 0x90, 0x2d, 0x93, 0x6b, 0xf5, 0xe7, +0xc2, 0xd5, 0x48, 0x70, 0x07, 0x8b, 0x8b, 0x39, 0x9c, 0x22, 0x7f, 0xea, +0x4f, 0xe8, 0x2d, 0x44, 0xfb, 0x98, 0xef, 0xfe, 0xb1, 0x8f, 0x91, 0x0e, +0x32, 0xc2, 0x65, 0xc3, 0x9b, 0xa8, 0x91, 0xdb, 0xe6, 0x07, 0x6a, 0xc3, +0xf1, 0x69, 0x49, 0x2d, 0x4f, 0xc6, 0xe6, 0xa1, 0xfc, 0x06, 0x88, 0xa3, +0x76, 0x06, 0x24, 0x18, 0x99, 0x9d, 0xd1, 0x26, 0xfd, 0xd8, 0x19, 0xd0, +0xdd, 0x39, 0xba, 0xff, 0x8e, 0x66, 0x2e, 0x07, 0x0f, 0x1e, 0x84, 0x8d, +0xe3, 0x44, 0x92, 0x34, 0xc9, 0x80, 0x50, 0x21, 0x1a, 0x05, 0xda, 0x09, +0xc9, 0xca, 0xea, 0x7d, 0x5c, 0x37, 0xdd, 0x6e, 0xa0, 0x8b, 0x81, 0x74, +0xd4, 0x08, 0xf3, 0x46, 0x7a, 0xb1, 0x5f, 0xdd, 0xb3, 0xee, 0xa2, 0x57, +0x9f, 0x45, 0xf7, 0x95, 0x80, 0xd8, 0x41, 0x73, 0xab, 0x95, 0xea, 0x24, +0xd0, 0xa5, 0xd9, 0x2a, 0xca, 0x52, 0x12, 0x46, 0x1a, 0xc8, 0xc6, 0xa9, +0xbb, 0x87, 0x48, 0x65, 0xa6, 0x9a, 0x01, 0x11, 0xe3, 0xb8, 0x29, 0x08, +0x7f, 0x22, 0x8f, 0x54, 0x3d, 0x29, 0xa7, 0x05, 0xf2, 0x6a, 0xf5, 0x6b, +0xb7, 0x5e, 0x51, 0x1a, 0xbf, 0xc4, 0xf8, 0x76, 0x62, 0x3d, 0x82, 0x75, +0x6b, 0x77, 0xe3, 0x3c, 0xbb, 0xcb, 0xd5, 0x4c, 0x48, 0x0e, 0x9b, 0x46, +0x0b, 0x2c, 0x04, 0x08, 0x0e, 0xe5, 0x3d, 0x31, 0xc6, 0xd7, 0x5f, 0xd0, +0x84, 0x09, 0x13, 0x30, 0x97, 0x63, 0x80, 0xc2, 0x2c, 0x6b, 0x19, 0x69, +0xea, 0x1b, 0xaf, 0x90, 0x3c, 0x63, 0xb2, 0x34, 0xf4, 0x7d, 0x91, 0x8d, +0xdc, 0xe6, 0x53, 0x19, 0x02, 0x60, 0xd5, 0x20, 0x24, 0x9d, 0x78, 0x1e, +0x01, 0xb3, 0x1d, 0x27, 0xa3, 0xc6, 0x3d, 0xe3, 0xbb, 0xa5, 0x4b, 0x4f, +0xaf, 0x61, 0x10, 0x77, 0x0e, 0x78, 0xcf, 0xe2, 0x87, 0xe7, 0xe9, 0x31, +0x2b, 0x7d, 0x41, 0xf0, 0xf7, 0x53, 0xeb, 0xe0, 0xde, 0x7b, 0xef, 0xa5, +0x7c, 0x2a, 0xbb, 0x91, 0x9e, 0xbd, 0xb0, 0x7f, 0xb9, 0x2d, 0x05, 0xd4, +0xeb, 0x7a, 0x1e, 0x5e, 0x55, 0x1a, 0xf4, 0x2a, 0xb7, 0xf6, 0xdb, 0x31, +0xec, 0xf5, 0x5e, 0xf6, 0x4f, 0x40, 0x08, 0x94, 0xc9, 0xe0, 0x92, 0xb3, +0x73, 0x15, 0xbc, 0x85, 0x1c, 0x09, 0x24, 0x3a, 0x3b, 0x27, 0x07, 0x72, +0x8e, 0xc1, 0x7f, 0x87, 0x95, 0x1c, 0x2b, 0x08, 0xf9, 0x46, 0x64, 0x5c, +0xe2, 0xd2, 0x36, 0xc7, 0x5f, 0xfb, 0x86, 0x0a, 0x89, 0x7d, 0xa2, 0xf2, +0x82, 0x22, 0x82, 0x56, 0xb6, 0x5d, 0xfa, 0x3c, 0x95, 0xd2, 0x77, 0x75, +0x1a, 0xb2, 0xe3, 0xe8, 0x18, 0x58, 0x58, 0x8b, 0x4b, 0x2c, 0x25, 0x72, +0xaf, 0x8b, 0xa5, 0xc7, 0x5f, 0x10, 0x5f, 0xe9, 0xce, 0xfb, 0xeb, 0x77, +0x86, 0x03, 0x13, 0x28, 0xd2, 0x42, 0x50, 0x49, 0x52, 0xa7, 0xba, 0x0c, +0x9a, 0x1c, 0x19, 0xb0, 0xd4, 0x4b, 0xc5, 0x59, 0xa1, 0x1e, 0x16, 0xd1, +0xdf, 0x27, 0x75, 0xc8, 0xdd, 0xa3, 0x61, 0xdb, 0xd1, 0x17, 0x50, 0x3e, +0x5b, 0x32, 0x40, 0xaf, 0x8b, 0x13, 0xc4, 0x13, 0x90, 0x82, 0xb0, 0x0a, +0xca, 0x64, 0x36, 0xce, 0xb3, 0x25, 0x3e, 0x3d, 0x5e, 0x3c, 0xc0, 0x8e, +0x8f, 0x25, 0xf0, 0x49, 0x92, 0xcc, 0xa4, 0x56, 0x8c, 0xc8, 0x34, 0x6c, +0xb2, 0xc4, 0xe0, 0xbc, 0xfa, 0xea, 0xab, 0x38, 0x2b, 0x50, 0x07, 0xcc, +0xb9, 0x3a, 0xbe, 0xa1, 0x42, 0x62, 0x9f, 0xf4, 0xec, 0x4d, 0x9b, 0xf9, +0x90, 0x3c, 0x18, 0x56, 0x20, 0x95, 0x06, 0xa0, 0xa6, 0x48, 0x76, 0xaf, +0x57, 0x07, 0x1c, 0x51, 0x7a, 0x18, 0xa0, 0xc8, 0xfe, 0xf1, 0x4f, 0xfa, +0x54, 0xf6, 0x38, 0xbc, 0xfd, 0x2f, 0xec, 0xb5, 0x36, 0x31, 0x21, 0x3e, +0xf9, 0x6d, 0x59, 0x46, 0x32, 0xd6, 0x69, 0x94, 0x6e, 0x69, 0x62, 0x7a, +0x92, 0x62, 0x2d, 0x7a, 0x98, 0x3d, 0xd9, 0xcc, 0x01, 0xbe, 0x60, 0xd6, +0x0a, 0x1d, 0xcc, 0x0c, 0x09, 0x76, 0x5c, 0xff, 0x16, 0x27, 0xc0, 0xf9, +0xe8, 0x97, 0xeb, 0x94, 0xf7, 0xc9, 0x49, 0x5b, 0xdb, 0x3f, 0x7a, 0x11, +0xc6, 0xb7, 0x20, 0xce, 0xc1, 0xdd, 0x50, 0x44, 0x97, 0xa9, 0x45, 0x6b, +0xd6, 0xac, 0x19, 0xc2, 0x2d, 0x29, 0xfb, 0x44, 0xd3, 0x11, 0x40, 0xae, +0xfb, 0xef, 0xbc, 0xd7, 0x0e, 0xb4, 0x4c, 0x8c, 0xc6, 0xfa, 0x44, 0x38, +0xb4, 0xfe, 0x56, 0xec, 0x4b, 0xf9, 0x86, 0xcc, 0x29, 0x5c, 0x1c, 0x1e, +0x9c, 0xf3, 0xfa, 0xe3, 0xb1, 0xa3, 0xa0, 0x18, 0x10, 0x01, 0xe6, 0xdf, +0xf2, 0x61, 0x09, 0x65, 0xc2, 0xd8, 0x6a, 0x3c, 0x44, 0xdd, 0xf9, 0x6a, +0x0f, 0xd5, 0x67, 0x22, 0x71, 0x22, 0x72, 0xc0, 0x28, 0x28, 0x0a, 0xc6, +0xa2, 0xe3, 0x1e, 0xc2, 0xbe, 0x41, 0xc5, 0x5f, 0x4a, 0x27, 0xa9, 0xbf, +0x06, 0x48, 0x01, 0xa8, 0xe9, 0x3a, 0x53, 0xd2, 0xdf, 0xc2, 0xd4, 0x01, +0x0d, 0xfd, 0x5b, 0x9c, 0x20, 0x5e, 0x25, 0x52, 0x2e, 0x87, 0x4d, 0xeb, +0x13, 0x9b, 0x1d, 0x26, 0x72, 0x4b, 0x5d, 0xee, 0xcf, 0x8f, 0x4c, 0x0e, +0xae, 0x58, 0x75, 0xe9, 0xe0, 0xd2, 0xe4, 0x24, 0x2a, 0x44, 0x11, 0x14, +0x88, 0x09, 0x04, 0x4a, 0xc6, 0x94, 0x2a, 0x65, 0x6f, 0x54, 0xe2, 0x9a, +0x3f, 0x96, 0x59, 0x82, 0xb7, 0x31, 0x38, 0xaa, 0xf7, 0x51, 0xd8, 0xcc, +0x96, 0xf5, 0x4d, 0x96, 0x9e, 0x0c, 0x29, 0x5c, 0xd1, 0x64, 0x66, 0xa1, +0x5d, 0xa1, 0x3d, 0xdb, 0x0f, 0xe3, 0xc3, 0x4b, 0x45, 0x32, 0xb7, 0xdf, +0xef, 0x0f, 0x3f, 0x31, 0x01, 0xb0, 0x1e, 0x58, 0x01, 0x66, 0x4a, 0xbf, +0xad, 0x4f, 0x7a, 0x68, 0x0d, 0xcb, 0x42, 0x08, 0x0c, 0x71, 0xe3, 0xc8, +0xac, 0x28, 0xd9, 0x30, 0x0a, 0x72, 0x82, 0xd5, 0x5a, 0x25, 0x26, 0xc4, +0xfe, 0xc1, 0x2a, 0xe5, 0xdf, 0xe6, 0x73, 0xa1, 0x1d, 0x65, 0x65, 0xb8, +0x2d, 0x43, 0x86, 0x9a, 0x61, 0x73, 0x9c, 0xf2, 0x3b, 0x8d, 0xe8, 0x7d, +0x79, 0x58, 0x9b, 0x82, 0x2e, 0xbb, 0x24, 0xbc, 0xc2, 0x72, 0x3e, 0x64, +0x41, 0x6c, 0x5b, 0xd8, 0x29, 0x88, 0x53, 0xd5, 0xfd, 0x77, 0x0b, 0x16, +0x2c, 0xc0, 0xa9, 0x8a, 0x6b, 0x95, 0xbc, 0x48, 0x5c, 0x78, 0x52, 0x70, +0xcc, 0x4f, 0x54, 0x48, 0x4a, 0x34, 0x5e, 0x40, 0x3d, 0xf6, 0xd8, 0xa7, +0xa9, 0xe3, 0xd3, 0xf1, 0x43, 0x4a, 0x41, 0xdc, 0xf7, 0x3b, 0xec, 0xde, +0xe6, 0xb2, 0x92, 0xc8, 0x66, 0x1f, 0xa2, 0x86, 0x31, 0xf1, 0x33, 0x28, +0xba, 0xa7, 0xac, 0x13, 0x90, 0x38, 0x70, 0xe0, 0x00, 0x75, 0x29, 0x31, +0x48, 0xa0, 0xc9, 0x5d, 0x7e, 0xf9, 0xe5, 0xea, 0xaf, 0x7e, 0x07, 0x1a, +0x51, 0xa2, 0xc2, 0x5c, 0xb5, 0x40, 0x8f, 0xb5, 0xe1, 0x16, 0x36, 0xfd, +0x65, 0x36, 0x17, 0xc4, 0x8f, 0xd3, 0xf0, 0x84, 0xc8, 0x93, 0xe2, 0x52, +0xb4, 0x69, 0x37, 0x27, 0xc5, 0xd2, 0x9d, 0x40, 0xcb, 0x3e, 0xe8, 0x39, +0xf7, 0xda, 0xa7, 0x19, 0x1a, 0xfc, 0x77, 0x04, 0x1c, 0x48, 0xa6, 0x11, +0x15, 0x0c, 0xcc, 0xb1, 0x1e, 0xbe, 0xf1, 0x0a, 0xb1, 0x3e, 0xd1, 0xf2, +0x43, 0x67, 0xdc, 0xc1, 0x8a, 0xb2, 0xf4, 0xf0, 0x90, 0x64, 0x5a, 0x79, +0x4d, 0xa6, 0xf3, 0x69, 0x8d, 0x0c, 0x27, 0xe3, 0x0f, 0x1e, 0xd3, 0xcb, +0xcf, 0xb8, 0x71, 0x12, 0x65, 0xf4, 0xa2, 0x46, 0x63, 0xc6, 0x8c, 0x41, +0xa3, 0xb8, 0xe7, 0x9e, 0x7b, 0xf0, 0x51, 0xa0, 0xc6, 0xb1, 0x15, 0x51, +0xf3, 0x4f, 0x2d, 0x97, 0x4d, 0x71, 0x51, 0x9f, 0x1e, 0x51, 0xdf, 0xec, +0xa6, 0xe6, 0xba, 0x49, 0x54, 0x5e, 0xec, 0xd9, 0xb3, 0xb4, 0x6e, 0x8d, +0x65, 0xac, 0x61, 0x20, 0x6b, 0xe2, 0xc7, 0xb5, 0xab, 0xa6, 0x5d, 0xcc, +0xe6, 0xb1, 0xa9, 0x3b, 0x11, 0x35, 0x88, 0xa0, 0xe5, 0x4e, 0x17, 0x92, +0xad, 0xdd, 0xd2, 0xb1, 0xe3, 0xc7, 0xdc, 0x74, 0xd1, 0x9d, 0xc8, 0x79, +0x54, 0x6d, 0x32, 0x8d, 0xa8, 0x09, 0x46, 0x71, 0x34, 0xcc, 0xb2, 0x96, +0xf5, 0x62, 0xec, 0x6a, 0xdb, 0x40, 0x02, 0x6d, 0x9d, 0xb2, 0xbe, 0xea, +0x35, 0x53, 0xed, 0xc7, 0x8f, 0x29, 0xfa, 0x7a, 0x49, 0xb0, 0x72, 0x26, +0x2d, 0xef, 0x0b, 0x23, 0xc2, 0xcf, 0x4d, 0xe5, 0x01, 0x5f, 0x67, 0xa5, +0x64, 0x42, 0xb5, 0x1a, 0x54, 0xa1, 0x23, 0x88, 0x80, 0x5c, 0x59, 0x62, +0x01, 0x49, 0xbb, 0x63, 0x1f, 0x02, 0x1e, 0xea, 0xaf, 0x94, 0x50, 0xf0, +0xc9, 0x19, 0xc2, 0x46, 0x40, 0xe8, 0xae, 0x5e, 0x86, 0xa3, 0x54, 0x6a, +0x2d, 0x2c, 0x24, 0x7e, 0x84, 0xfc, 0x75, 0xf5, 0x4d, 0xc5, 0xd8, 0xfb, +0x3d, 0x2c, 0x11, 0x22, 0x00, 0xfe, 0x69, 0x99, 0x0f, 0xf1, 0x91, 0x76, +0x16, 0x13, 0x91, 0x18, 0x7f, 0x8b, 0xe5, 0x99, 0x2a, 0x57, 0xc4, 0xa6, +0x24, 0xe6, 0xf5, 0x76, 0xba, 0xff, 0xae, 0x6d, 0xdb, 0xb6, 0xd4, 0x70, +0xc1, 0x62, 0x4e, 0x65, 0x09, 0xbc, 0xda, 0x68, 0x04, 0xe6, 0x1a, 0x79, +0x3e, 0x44, 0x7c, 0xa0, 0xaa, 0x33, 0x8a, 0x1e, 0xb9, 0x80, 0x5e, 0xef, +0x75, 0x42, 0x01, 0x9e, 0x40, 0xc1, 0xac, 0x40, 0x02, 0x93, 0xbc, 0xde, +0x5d, 0x14, 0xc4, 0xf7, 0x6e, 0xb3, 0xeb, 0x6f, 0xd1, 0x07, 0x84, 0xca, +0xc9, 0xc8, 0x55, 0xa4, 0x49, 0x95, 0x65, 0x58, 0x33, 0x41, 0x04, 0xb0, +0x53, 0x56, 0x9c, 0x7a, 0x0b, 0xc4, 0x9f, 0xa9, 0xbf, 0xda, 0x8c, 0x0c, +0xc7, 0x14, 0x86, 0x43, 0x43, 0xcc, 0x03, 0xe6, 0x83, 0x04, 0x6b, 0xaa, +0xf4, 0x52, 0xd4, 0x47, 0xb7, 0x6b, 0xf9, 0x3d, 0x7f, 0xaf, 0x8b, 0x63, +0xff, 0x04, 0xe5, 0x9c, 0x25, 0xda, 0x97, 0x32, 0x50, 0x76, 0x2e, 0x9c, +0xd2, 0xbf, 0xa1, 0x3b, 0xf3, 0x89, 0xb2, 0x17, 0x51, 0x19, 0xcd, 0xce, +0x50, 0x5e, 0xcf, 0x51, 0x31, 0xbc, 0xac, 0xd5, 0xb0, 0x61, 0xc3, 0xf0, +0xdf, 0x11, 0xfe, 0x44, 0xa6, 0x91, 0xa1, 0x8a, 0xa6, 0x6e, 0x5e, 0xb2, +0xcb, 0x2b, 0x30, 0xc8, 0x92, 0x24, 0xa0, 0x5e, 0x15, 0x36, 0x56, 0xbf, +0x8d, 0x42, 0x5e, 0x1f, 0x43, 0x9d, 0x50, 0xae, 0x41, 0x63, 0xbc, 0x4b, +0xfc, 0xdc, 0xd4, 0x02, 0xf4, 0xcf, 0xa6, 0x09, 0xf9, 0xaa, 0xd5, 0x20, +0x51, 0x81, 0x02, 0xf7, 0x88, 0x4f, 0x08, 0xac, 0xb0, 0x66, 0x34, 0x39, +0x8a, 0x7a, 0xe8, 0x05, 0x16, 0x90, 0x03, 0xdd, 0x3d, 0x35, 0xc6, 0x56, +0x82, 0x46, 0xa9, 0x4d, 0xc6, 0xcb, 0x33, 0x5b, 0xae, 0xe5, 0x16, 0xa4, +0x1f, 0x52, 0x06, 0x81, 0x22, 0x26, 0x18, 0xb8, 0x70, 0x16, 0xf1, 0x6a, +0xd5, 0xad, 0x3d, 0x07, 0x7a, 0x10, 0x66, 0x0f, 0x4b, 0xef, 0xd9, 0x3a, +0x07, 0x13, 0x1c, 0xc1, 0x63, 0x52, 0x7a, 0x10, 0x30, 0x23, 0xb8, 0xdb, +0x7f, 0x0b, 0x5e, 0xcf, 0xc4, 0x31, 0x2a, 0xf3, 0xb1, 0x99, 0x9a, 0x42, +0xd8, 0x1b, 0x46, 0x21, 0x77, 0xc3, 0x22, 0xd0, 0xaa, 0xa7, 0xf3, 0x29, +0x26, 0xda, 0x72, 0x40, 0x83, 0xff, 0x8e, 0x0d, 0x05, 0x8a, 0x47, 0xa9, +0xc0, 0x26, 0xab, 0xeb, 0xd9, 0x7e, 0x46, 0x7c, 0xc0, 0x28, 0xf4, 0xd2, +0x32, 0x36, 0xc5, 0x47, 0xaf, 0x0b, 0xea, 0xe1, 0x84, 0x47, 0xb7, 0xf6, +0xa7, 0xc2, 0x5a, 0x20, 0x23, 0x78, 0xb8, 0x16, 0x95, 0x00, 0x3c, 0xb0, +0xfa, 0x7e, 0x2b, 0x15, 0xd8, 0xdf, 0xd4, 0xcb, 0x23, 0xae, 0x86, 0x20, +0x02, 0x4c, 0x7e, 0x54, 0x91, 0x31, 0x57, 0x67, 0x23, 0xbf, 0xde, 0xec, +0x38, 0x47, 0x05, 0xa4, 0xd8, 0x2b, 0x3e, 0x2c, 0xf6, 0x57, 0x4b, 0xce, +0x20, 0x5f, 0x52, 0xf2, 0x11, 0x15, 0x02, 0x91, 0x89, 0x74, 0x4a, 0xc4, +0x57, 0xfc, 0x83, 0x94, 0xa5, 0xd0, 0xcb, 0x6e, 0xbb, 0x93, 0x43, 0xe4, +0xd9, 0xf5, 0x2a, 0x10, 0xfa, 0x5d, 0x82, 0xc8, 0xe7, 0xb1, 0xa2, 0xaa, +0x70, 0x66, 0x9b, 0xc9, 0xee, 0x64, 0xe1, 0xf3, 0x72, 0x2d, 0xdf, 0x0e, +0x49, 0x97, 0x3a, 0x07, 0x5e, 0xe3, 0x6f, 0x99, 0x15, 0x35, 0xb8, 0xee, +0x45, 0x21, 0xff, 0x8e, 0x48, 0x1c, 0x0c, 0x50, 0x04, 0x1c, 0x90, 0x56, +0xe1, 0xa1, 0x02, 0xa5, 0x2d, 0x5e, 0x81, 0xec, 0x45, 0xa5, 0x19, 0xe2, +0x40, 0xd5, 0xca, 0x06, 0x68, 0x7a, 0xf7, 0x4a, 0xeb, 0x18, 0xb3, 0xb1, +0xf4, 0x05, 0x25, 0x13, 0xc5, 0x7c, 0x2f, 0xaa, 0x4e, 0xa8, 0x98, 0x6a, +0xff, 0xe2, 0x64, 0xb1, 0xf6, 0x7a, 0x20, 0x65, 0xc3, 0x9f, 0x2c, 0xf7, +0x45, 0xf4, 0x25, 0xcf, 0x23, 0x50, 0xa8, 0x41, 0x9a, 0x16, 0xc0, 0x1f, +0x78, 0x97, 0x74, 0x60, 0x21, 0xa1, 0x05, 0x43, 0x3b, 0xbf, 0xaa, 0x0b, +0x51, 0x3c, 0x3c, 0x24, 0x6a, 0xe3, 0x36, 0xa5, 0x20, 0xb4, 0xe5, 0x5d, +0xfc, 0x28, 0x98, 0xe0, 0xee, 0x95, 0xa9, 0x82, 0x6b, 0x38, 0xb6, 0x6d, +0x72, 0x5d, 0xa2, 0x19, 0xdc, 0x59, 0x23, 0xf5, 0x48, 0x2a, 0x66, 0xee, +0x53, 0xe4, 0x84, 0xe5, 0x0c, 0x75, 0xff, 0x1d, 0x04, 0x2c, 0x59, 0xa9, +0x78, 0x2a, 0x28, 0xea, 0x61, 0xa9, 0x51, 0xf8, 0x60, 0x83, 0xe2, 0x7a, +0xbd, 0x0c, 0x3a, 0xa6, 0x77, 0xaf, 0xb1, 0xdf, 0x5e, 0xe9, 0xde, 0xf3, +0x09, 0x94, 0xd4, 0xe6, 0x8d, 0x96, 0x47, 0x22, 0x38, 0x90, 0xd0, 0xb3, +0x34, 0xfd, 0xf3, 0x54, 0x90, 0x13, 0x6b, 0x1f, 0x15, 0x96, 0xb9, 0xcb, +0x48, 0x35, 0x96, 0x23, 0x20, 0x2c, 0xa1, 0x11, 0xc2, 0x79, 0x16, 0x2d, +0x5a, 0x44, 0xc5, 0x68, 0xba, 0x67, 0x10, 0x7b, 0x8b, 0x5b, 0x90, 0x1d, +0x8e, 0xa0, 0x74, 0x9c, 0x83, 0x7a, 0x60, 0x01, 0xd2, 0xb9, 0x87, 0x65, +0xa4, 0x0e, 0x9f, 0xe5, 0x2d, 0x88, 0xb0, 0xf4, 0xc3, 0x44, 0xee, 0xee, +0x46, 0x2a, 0x8a, 0xc7, 0x5c, 0x9f, 0xc1, 0xf2, 0x12, 0x98, 0xa4, 0x87, +0x78, 0x08, 0xe5, 0x0a, 0x54, 0x33, 0xb7, 0x53, 0x20, 0xd4, 0xc3, 0x22, +0xe8, 0xfe, 0x3b, 0xa4, 0x50, 0xec, 0xe6, 0x50, 0x32, 0x8a, 0x1f, 0x9e, +0x8a, 0x80, 0x50, 0x21, 0x36, 0x59, 0x5d, 0xc3, 0xf3, 0x5b, 0xea, 0xb0, +0x09, 0x15, 0x62, 0x28, 0x30, 0x47, 0xc2, 0x2b, 0x6c, 0x9e, 0x6f, 0xff, +0x34, 0x1c, 0x76, 0x94, 0x9c, 0xd1, 0x69, 0xc5, 0x3f, 0x78, 0xeb, 0xe2, +0x93, 0x99, 0xf2, 0x32, 0x53, 0x13, 0x7a, 0xb7, 0xcb, 0xc5, 0x0d, 0x42, +0x04, 0x3b, 0x5e, 0x79, 0x73, 0x84, 0x15, 0xd3, 0xd0, 0xaf, 0xa2, 0x9d, +0x0d, 0x4e, 0x71, 0xc8, 0xfd, 0x92, 0x4b, 0x2e, 0x81, 0x39, 0x10, 0xbb, +0x46, 0xfb, 0x1b, 0x2c, 0x5a, 0x6c, 0x6c, 0xc8, 0x4b, 0x70, 0x73, 0x62, +0x6f, 0x29, 0x6b, 0x42, 0xf6, 0x12, 0x36, 0x2e, 0xfd, 0x42, 0xcf, 0xa6, +0x08, 0x4a, 0x79, 0xab, 0x93, 0xf5, 0x36, 0x48, 0x9e, 0xb1, 0x64, 0x7f, +0x31, 0x39, 0x13, 0x5f, 0x8a, 0xdc, 0x02, 0x0d, 0xcd, 0x66, 0x01, 0x55, +0x12, 0x21, 0x3d, 0x54, 0x9d, 0x42, 0xc3, 0x36, 0xac, 0xa7, 0xcd, 0x84, +0x3e, 0x77, 0xd3, 0xd6, 0xfd, 0x77, 0x54, 0x5b, 0x45, 0xd5, 0x66, 0x67, +0xc1, 0x68, 0x4e, 0xa9, 0x9b, 0x80, 0x50, 0x21, 0x36, 0x59, 0x1a, 0xcc, +0xa8, 0xe9, 0x52, 0x65, 0xc4, 0xa7, 0xb5, 0xf3, 0xe9, 0x64, 0x32, 0xec, +0xa4, 0x00, 0x4c, 0xb0, 0x4c, 0x10, 0xea, 0xee, 0x80, 0xcd, 0x90, 0xe6, +0x4a, 0xf1, 0x28, 0x9f, 0xe6, 0x26, 0x27, 0x93, 0xac, 0x63, 0x78, 0x73, +0x0d, 0x6a, 0xa6, 0xe2, 0xa4, 0x23, 0x25, 0x9f, 0x82, 0x4e, 0xfa, 0xde, +0x46, 0x62, 0x1a, 0x81, 0x5e, 0xe6, 0x5b, 0xa0, 0x5b, 0xab, 0x11, 0xb0, +0xa0, 0xa3, 0x36, 0x50, 0xc8, 0x87, 0x24, 0x6f, 0x0a, 0x46, 0xd1, 0xb7, +0x0a, 0xe5, 0x81, 0x9c, 0x18, 0x12, 0x00, 0x90, 0x97, 0x88, 0xa7, 0x92, +0xe0, 0x11, 0x52, 0x97, 0xb0, 0xf6, 0x62, 0xe9, 0x52, 0x17, 0x7a, 0xf6, +0x73, 0xc1, 0x12, 0x75, 0xc3, 0x2e, 0xd5, 0x46, 0xd4, 0x85, 0x36, 0x8d, +0xa7, 0x76, 0x56, 0x46, 0xf5, 0x82, 0x20, 0xec, 0xc5, 0xce, 0xf9, 0x9c, +0x43, 0x0d, 0x14, 0x77, 0x67, 0x32, 0x67, 0x73, 0x57, 0x0f, 0x9b, 0xe6, +0x3b, 0x77, 0x7c, 0x49, 0x7f, 0x53, 0x2c, 0xac, 0x24, 0x0c, 0xab, 0x5e, +0x22, 0xee, 0xfa, 0x3d, 0x78, 0xef, 0x16, 0x09, 0x24, 0x30, 0xad, 0xa8, +0xd1, 0x89, 0xb1, 0xb3, 0x69, 0x7d, 0xb3, 0xb9, 0x4c, 0xfa, 0x69, 0x8c, +0xac, 0x76, 0x8b, 0x20, 0xf2, 0x0a, 0x0c, 0x11, 0x44, 0x71, 0x9a, 0x2d, +0x3c, 0xf6, 0x0b, 0x03, 0xeb, 0x93, 0x44, 0xa7, 0xc4, 0xcb, 0x81, 0xe1, +0x65, 0xfb, 0xa2, 0x4e, 0x7c, 0xf6, 0x10, 0xc7, 0x41, 0xbe, 0xa1, 0x65, +0x12, 0xb6, 0x5e, 0xd9, 0x16, 0x16, 0x81, 0x1a, 0x0d, 0x18, 0xe0, 0x0c, +0x20, 0x81, 0x60, 0x5b, 0x42, 0xd0, 0x61, 0x0e, 0x80, 0x81, 0xa0, 0x4e, +0xf8, 0x03, 0x78, 0xe0, 0x2d, 0x52, 0x9d, 0x85, 0x0e, 0x1e, 0xfa, 0x3b, +0xf6, 0x5c, 0x7d, 0x8b, 0x2d, 0x59, 0x9d, 0xac, 0xf7, 0xec, 0x03, 0x2a, +0x96, 0xbd, 0x26, 0xfc, 0x78, 0x59, 0x04, 0x04, 0xa8, 0x20, 0x14, 0x0f, +0x46, 0x36, 0x7d, 0x64, 0xdc, 0xbe, 0x1e, 0xbc, 0x99, 0xaa, 0xa6, 0x93, +0xfe, 0x98, 0xc4, 0xcb, 0xf9, 0x31, 0x37, 0xb9, 0x84, 0x3e, 0x18, 0x6a, +0x28, 0x4c, 0x82, 0x2c, 0xaf, 0x65, 0x5d, 0x7e, 0x33, 0x36, 0x3c, 0xa1, +0x42, 0x72, 0x8c, 0x48, 0x56, 0xa2, 0x41, 0x9b, 0x1a, 0xbd, 0xfc, 0x02, +0xd1, 0x30, 0xd4, 0x48, 0xc4, 0xb8, 0x1c, 0x10, 0x31, 0xfa, 0xa2, 0xdf, +0x2b, 0xa2, 0x2e, 0x24, 0x54, 0xc9, 0xcc, 0x97, 0xe5, 0x16, 0x5e, 0x73, +0x00, 0x03, 0xb9, 0x3b, 0x93, 0x87, 0x17, 0x99, 0x23, 0x82, 0x09, 0xf9, +0xd6, 0xdf, 0x3a, 0x1d, 0x0d, 0x89, 0x13, 0x21, 0xb7, 0x11, 0x63, 0x2e, +0xef, 0x0c, 0x30, 0x48, 0x9d, 0x66, 0x4c, 0x87, 0x68, 0x84, 0xd2, 0x29, +0x9d, 0x8d, 0x09, 0x1b, 0x60, 0xaf, 0x5e, 0xa5, 0x65, 0x2a, 0xf1, 0x69, +0x78, 0x56, 0x6d, 0xf5, 0x24, 0x1b, 0x14, 0x15, 0x75, 0x47, 0xfb, 0x75, +0x37, 0xbc, 0x3e, 0xbb, 0x2a, 0x68, 0x02, 0x07, 0xb6, 0x19, 0x87, 0x4f, +0xbc, 0x96, 0x87, 0x5a, 0x38, 0xaa, 0xe2, 0xe0, 0x05, 0x91, 0xac, 0xb4, +0x91, 0x80, 0xdf, 0x21, 0x14, 0xe4, 0xc3, 0xa9, 0x07, 0xc7, 0x4e, 0x28, +0xf5, 0x33, 0x31, 0x40, 0x51, 0x9e, 0x86, 0x55, 0xf5, 0xd0, 0x18, 0xc8, +0x0b, 0x2a, 0x10, 0x9f, 0x70, 0x8c, 0xeb, 0xed, 0xe1, 0xec, 0x17, 0xd3, +0xf5, 0xba, 0xac, 0xfa, 0x09, 0xc8, 0xf7, 0xfa, 0x8b, 0x94, 0x87, 0x09, +0x50, 0xa6, 0x44, 0xd2, 0x25, 0x62, 0xc2, 0x43, 0xab, 0x2d, 0xec, 0x27, +0x3e, 0x4d, 0xd2, 0xa7, 0x93, 0x8f, 0x5d, 0xd7, 0x83, 0x42, 0xe8, 0xe6, +0x4b, 0x74, 0x4d, 0x1d, 0xb9, 0xf4, 0xa6, 0x9b, 0x6e, 0x92, 0x6c, 0x49, +0xa2, 0x38, 0xc1, 0x03, 0x01, 0x54, 0x48, 0xbd, 0xd8, 0x0d, 0x31, 0xfa, +0x09, 0x1e, 0xe4, 0x40, 0xa6, 0xd2, 0xb1, 0x84, 0xad, 0xc6, 0xc3, 0x64, +0x88, 0x95, 0xd0, 0x9f, 0x5a, 0xef, 0x79, 0xe7, 0x47, 0xe0, 0x89, 0xbb, +0x1b, 0x29, 0x6f, 0xa3, 0xfd, 0x64, 0xcc, 0x5b, 0xaf, 0x76, 0xbb, 0xe0, +0x7a, 0xc5, 0x41, 0x9e, 0x54, 0x2f, 0x6a, 0x78, 0x9f, 0xbd, 0x3e, 0x35, +0xe6, 0x79, 0xea, 0xfe, 0x3b, 0xa9, 0x9f, 0x89, 0xf8, 0x24, 0xf5, 0x33, +0xf5, 0x7e, 0x5f, 0xbe, 0xf1, 0x0a, 0xc9, 0x31, 0x62, 0xac, 0x52, 0x5e, +0x9c, 0x96, 0xe8, 0x77, 0x4d, 0x62, 0x0f, 0x6f, 0x91, 0xed, 0x93, 0x6a, +0xc7, 0xfa, 0x5b, 0x97, 0xcf, 0xb8, 0x14, 0xfc, 0x8b, 0x7b, 0xc3, 0x2f, +0x46, 0x91, 0x04, 0xbd, 0xb2, 0xe5, 0x45, 0xfe, 0x13, 0x17, 0xa7, 0x2f, +0xb7, 0xd7, 0x1c, 0x40, 0x9f, 0x60, 0x60, 0x38, 0x19, 0x65, 0x97, 0xce, +0x12, 0xe6, 0x11, 0xf4, 0x27, 0xc5, 0xf6, 0x4a, 0x71, 0x41, 0xec, 0x4b, +0x12, 0x63, 0xab, 0xf8, 0x83, 0x24, 0x88, 0x49, 0x91, 0x22, 0x3e, 0x20, +0x41, 0xe9, 0x6e, 0x10, 0xaf, 0x05, 0x3f, 0x89, 0x95, 0x50, 0x8b, 0xa9, +0xd7, 0x57, 0xc6, 0x0c, 0x10, 0x48, 0xca, 0xa1, 0xfe, 0x2c, 0xaa, 0xd2, +0x21, 0xf0, 0xb3, 0x59, 0xb3, 0x99, 0xa4, 0x0b, 0x0f, 0x60, 0x56, 0x8a, +0xbb, 0x30, 0x8a, 0xe6, 0xcd, 0x4b, 0xbb, 0xd7, 0xf9, 0x57, 0x1c, 0x1e, +0x2e, 0xad, 0xfb, 0x82, 0xa4, 0x7e, 0xa6, 0x54, 0x28, 0xb6, 0xac, 0x60, +0x60, 0xd7, 0xb7, 0xcd, 0x5b, 0x01, 0x52, 0x93, 0x27, 0x4f, 0x56, 0x4b, +0x0c, 0xa9, 0x05, 0x42, 0x28, 0x96, 0xd7, 0xb2, 0x7b, 0x79, 0x68, 0x8a, +0x47, 0x1d, 0x10, 0x9b, 0x0e, 0x4e, 0xb8, 0x0d, 0x42, 0x3c, 0x49, 0xb0, +0x06, 0x2b, 0x93, 0x9a, 0x3c, 0x6d, 0x8b, 0xc9, 0x1d, 0x25, 0x15, 0x4b, +0x7d, 0x63, 0x33, 0x39, 0xc6, 0x8f, 0x47, 0x46, 0x71, 0xb4, 0x2c, 0xf2, +0x80, 0xa3, 0x40, 0x07, 0x3f, 0xaf, 0x8a, 0x60, 0x35, 0x6c, 0x85, 0x04, +0xd8, 0xa2, 0x4c, 0x53, 0x85, 0x05, 0xfe, 0x20, 0x3d, 0x63, 0xc5, 0xc7, +0xc4, 0xc1, 0x2b, 0xa0, 0x36, 0x82, 0xba, 0x8a, 0x90, 0x2a, 0xaf, 0xc6, +0x4a, 0x5a, 0x4c, 0xa9, 0xf3, 0xf5, 0x42, 0xfc, 0x5e, 0xcb, 0xa8, 0xd9, +0x7f, 0x52, 0x65, 0xf1, 0x1c, 0x6e, 0xbb, 0x14, 0x1a, 0x2f, 0xda, 0x83, +0xd4, 0x57, 0xbc, 0xa8, 0x93, 0x9a, 0x33, 0x6e, 0x4a, 0x5d, 0x5c, 0x24, +0x9b, 0xd2, 0xfe, 0xc4, 0xd4, 0x99, 0x06, 0xff, 0x1d, 0x6a, 0x1b, 0x02, +0x2a, 0x9e, 0x0a, 0x34, 0x34, 0x73, 0x56, 0xaa, 0x21, 0x1d, 0xcf, 0x93, +0x04, 0x25, 0x99, 0x77, 0x69, 0x69, 0x17, 0xd3, 0x0e, 0x99, 0x74, 0x10, +0x0b, 0xf5, 0x31, 0x7b, 0x1a, 0x9c, 0xe9, 0xdd, 0x4f, 0x64, 0x51, 0xa8, +0x4a, 0x42, 0xc3, 0x21, 0x9d, 0x74, 0x70, 0x8f, 0xcc, 0x1f, 0x55, 0x80, +0x63, 0xc1, 0x10, 0x60, 0x87, 0x37, 0x83, 0x48, 0x32, 0x24, 0xba, 0x6b, +0xa6, 0xb5, 0x72, 0xd7, 0x99, 0x45, 0xc6, 0xc1, 0x09, 0xc0, 0xae, 0x8c, +0x9d, 0xc7, 0x50, 0xb3, 0xd9, 0xef, 0x00, 0x72, 0xaf, 0x2f, 0x89, 0x78, +0x10, 0xcb, 0x70, 0x15, 0xa6, 0xaa, 0x1e, 0x8d, 0x08, 0x3f, 0xac, 0x22, +0xc7, 0x8f, 0x1f, 0xa7, 0xad, 0x3d, 0x71, 0x53, 0xe0, 0xc1, 0x50, 0xc1, +0x8e, 0xdd, 0x0b, 0x54, 0xd0, 0xac, 0x43, 0x5f, 0x0d, 0xcb, 0xba, 0x83, +0xfa, 0x7c, 0xc0, 0x8c, 0x99, 0xeb, 0xca, 0x37, 0xec, 0xc7, 0x5e, 0x67, +0x6e, 0xe7, 0x04, 0x55, 0xad, 0x90, 0x31, 0xe9, 0xf4, 0x65, 0xe7, 0x12, +0xce, 0xf1, 0x6c, 0xba, 0x24, 0x5a, 0x42, 0x4d, 0x9b, 0x32, 0xd5, 0x04, +0x20, 0xab, 0x5f, 0xed, 0x17, 0x36, 0xd7, 0x67, 0xa2, 0xe7, 0xf1, 0xaa, +0xfa, 0x99, 0x92, 0x53, 0x61, 0xee, 0x20, 0x67, 0x50, 0x33, 0x3c, 0xa1, +0x82, 0x8b, 0x69, 0xb8, 0xa8, 0x26, 0x47, 0xd2, 0xb3, 0xd7, 0x6c, 0x52, +0x9b, 0x0b, 0x84, 0xe0, 0x4b, 0x49, 0x32, 0x73, 0x15, 0x1c, 0x66, 0x8f, +0xf7, 0xea, 0xaa, 0xab, 0xae, 0x62, 0x5f, 0xb7, 0x7c, 0xb5, 0x78, 0xa0, +0x08, 0xe6, 0xe1, 0x87, 0xb2, 0xb3, 0x76, 0x7a, 0xf3, 0x02, 0x69, 0x22, +0x26, 0xe8, 0x3c, 0x8b, 0x9d, 0x07, 0xa5, 0x16, 0xbf, 0x98, 0x1a, 0x96, +0x14, 0x28, 0x9b, 0xb3, 0xf5, 0xe3, 0x34, 0x74, 0x24, 0xca, 0x10, 0x1a, +0x72, 0xa9, 0xd9, 0x29, 0xd1, 0xbf, 0xd5, 0x04, 0x86, 0x0f, 0x1f, 0x4e, +0x0b, 0x66, 0x61, 0xeb, 0x68, 0x11, 0xf0, 0x04, 0xb3, 0x05, 0x9d, 0x6f, +0x08, 0xf0, 0x54, 0x97, 0x20, 0x13, 0x12, 0x6d, 0x4a, 0x90, 0x85, 0x87, +0x29, 0x61, 0x6d, 0x53, 0xe7, 0xeb, 0xf5, 0x95, 0xc9, 0xe3, 0xf3, 0xe3, +0x41, 0x2c, 0x2f, 0x51, 0xdd, 0xbd, 0xe0, 0x87, 0x36, 0x1d, 0x82, 0x94, +0xbc, 0xc0, 0xe6, 0xc1, 0x66, 0x61, 0x6e, 0x36, 0xcb, 0x2d, 0x0c, 0x25, +0x91, 0xe0, 0x8d, 0xe4, 0x06, 0xa9, 0xa7, 0x80, 0x4e, 0x6c, 0x7a, 0xcd, +0xf5, 0xd9, 0xaa, 0xca, 0x54, 0x8c, 0x43, 0xc1, 0x5f, 0xfc, 0x77, 0x58, +0x32, 0xdc, 0xe5, 0x54, 0xe8, 0x65, 0xfa, 0xbd, 0xc4, 0xcc, 0xf2, 0x9e, +0xae, 0xbc, 0xf2, 0x4a, 0x35, 0x39, 0xaf, 0xf5, 0x69, 0xbc, 0x2e, 0x3a, +0x66, 0x19, 0xda, 0x01, 0x12, 0x9c, 0x63, 0x19, 0x23, 0xdd, 0xa5, 0x4b, +0x17, 0xc8, 0x17, 0x37, 0x16, 0xa5, 0x62, 0x20, 0x5f, 0x5a, 0xa3, 0xbb, +0xdb, 0xf3, 0xec, 0x7c, 0x8f, 0xe4, 0x40, 0x2d, 0x51, 0xe6, 0x0f, 0x7f, +0xc0, 0x2f, 0x46, 0x0a, 0x21, 0x76, 0x9e, 0xd5, 0xab, 0x57, 0xab, 0x6b, +0xf1, 0xef, 0x78, 0x9d, 0xb0, 0x7f, 0x27, 0xa0, 0x0b, 0x29, 0xc4, 0x62, +0xf3, 0x81, 0xc1, 0xca, 0x4b, 0xa5, 0xdb, 0x98, 0x3e, 0x73, 0x62, 0x37, +0xb0, 0x8a, 0x48, 0x8a, 0x92, 0x34, 0x4d, 0x36, 0xa8, 0x7d, 0x92, 0xe9, +0x65, 0x48, 0x09, 0x66, 0x04, 0xb0, 0x81, 0xb1, 0xae, 0x64, 0x71, 0xa1, +0xa5, 0x28, 0x45, 0xbc, 0xa0, 0xe5, 0xfa, 0x90, 0x66, 0xe0, 0xdf, 0xe3, +0x18, 0xae, 0x82, 0xac, 0x55, 0xbd, 0x7b, 0xfb, 0x69, 0x67, 0xaa, 0xbc, +0x0b, 0xaf, 0x1e, 0xa1, 0x8b, 0xd4, 0x42, 0x9d, 0xf3, 0xb3, 0x44, 0x6a, +0xce, 0x6c, 0x64, 0xd0, 0x00, 0xbb, 0x98, 0x9e, 0x59, 0xe5, 0x87, 0x7a, +0x49, 0xa7, 0x70, 0x35, 0x26, 0xfd, 0x12, 0xa8, 0x58, 0x47, 0xde, 0x0b, +0x8c, 0x02, 0x00, 0x98, 0x77, 0x1f, 0x5b, 0xa8, 0x50, 0x99, 0x77, 0x7a, +0x29, 0x48, 0xee, 0xc1, 0x9d, 0x28, 0x61, 0x8b, 0x08, 0x48, 0x2e, 0x35, +0x39, 0x31, 0x5e, 0xf7, 0x09, 0x56, 0x90, 0xb4, 0x1e, 0x8a, 0xb2, 0x10, +0x09, 0xc7, 0x56, 0xe1, 0x2e, 0x26, 0x14, 0x0d, 0x98, 0xc6, 0xbe, 0xd0, +0x2e, 0x01, 0x3f, 0xd4, 0x8c, 0x81, 0x7c, 0x91, 0xb6, 0x8b, 0x8b, 0x8b, +0xe9, 0x84, 0xad, 0xd7, 0xcd, 0xf6, 0x0a, 0x06, 0x62, 0xe9, 0xf2, 0xf3, +0xf3, 0xe9, 0x43, 0x37, 0x67, 0xce, 0x1c, 0x46, 0x23, 0x8e, 0x15, 0x30, +0x48, 0x04, 0x11, 0x3c, 0x91, 0x00, 0x18, 0xdc, 0x02, 0x6a, 0x90, 0xa0, +0x7b, 0x09, 0xa1, 0x1e, 0x4c, 0x11, 0x78, 0x03, 0xf4, 0x6a, 0xf8, 0x72, +0x3b, 0x34, 0x6c, 0xb6, 0x49, 0xe4, 0x40, 0x75, 0x77, 0x72, 0xea, 0x89, +0xb1, 0xc5, 0x35, 0x41, 0xd1, 0x03, 0xd2, 0xbb, 0x2d, 0xeb, 0xaf, 0x88, +0x65, 0x1c, 0x7b, 0x94, 0xbb, 0x16, 0xb5, 0x8c, 0x46, 0xa4, 0x10, 0x19, +0x3f, 0xa8, 0xf5, 0xc2, 0xc6, 0x89, 0x8a, 0xb7, 0x5c, 0x25, 0xd4, 0x33, +0xaf, 0x2f, 0xcb, 0x26, 0x66, 0x70, 0x56, 0xca, 0x2d, 0x08, 0x0a, 0xb4, +0xe9, 0xfa, 0x60, 0x53, 0xd0, 0x7b, 0x34, 0xca, 0xe5, 0x28, 0x48, 0x78, +0xe8, 0xb0, 0x2f, 0xb1, 0x68, 0x8a, 0xf9, 0xf0, 0x7d, 0xeb, 0xd6, 0xad, +0xb1, 0xcb, 0xc1, 0xd8, 0xf5, 0x96, 0x3d, 0xee, 0xb2, 0xf6, 0x98, 0x33, +0x73, 0x30, 0x3f, 0x1a, 0x7a, 0x9d, 0xbe, 0x0e, 0x04, 0x0a, 0x60, 0xf8, +0xa6, 0x61, 0xa7, 0xf0, 0x64, 0xb3, 0xd1, 0xc9, 0x16, 0x2a, 0x24, 0xca, +0x83, 0x21, 0x74, 0x03, 0x94, 0x79, 0xb9, 0xa1, 0x72, 0x9c, 0x2c, 0x14, +0xff, 0x21, 0x5c, 0x99, 0x0d, 0x80, 0xee, 0x72, 0xfc, 0xf0, 0x99, 0x80, +0x08, 0x78, 0xab, 0xa1, 0x32, 0xac, 0xe5, 0xdb, 0xa2, 0x8b, 0x76, 0xf7, +0xee, 0xdd, 0x11, 0x99, 0xd8, 0xc5, 0xa1, 0x60, 0x32, 0x42, 0xb0, 0x51, +0xe2, 0x34, 0x64, 0x07, 0x85, 0x8e, 0xc1, 0x06, 0xab, 0x03, 0x36, 0xa0, +0x75, 0x5d, 0x4b, 0x56, 0x43, 0x25, 0x24, 0x24, 0x60, 0x63, 0x29, 0x28, +0x28, 0x40, 0x39, 0x9b, 0x32, 0x65, 0x0a, 0x61, 0x29, 0x0c, 0x85, 0x0a, +0x4b, 0xc4, 0x04, 0x11, 0xd7, 0x00, 0x8c, 0xcd, 0x18, 0xe7, 0x17, 0x56, +0x6a, 0x64, 0x77, 0x3c, 0x62, 0x18, 0x7c, 0x4a, 0xe9, 0xd2, 0xd5, 0x25, +0xac, 0x1b, 0x3f, 0x6c, 0xba, 0xec, 0x79, 0x90, 0x32, 0xc1, 0x57, 0xfc, +0x50, 0xd4, 0x08, 0x0c, 0x63, 0x54, 0x45, 0xa1, 0xe4, 0x07, 0xce, 0xc6, +0x43, 0xe1, 0xef, 0xe3, 0xb9, 0xf8, 0x01, 0x4b, 0x44, 0x65, 0xf3, 0x23, +0x82, 0x1c, 0x52, 0x25, 0x31, 0x9e, 0x7a, 0x98, 0xa7, 0x57, 0xe8, 0xca, +0x09, 0xec, 0x02, 0x44, 0x37, 0xf1, 0x98, 0xa4, 0x28, 0x61, 0x7a, 0x42, +0xc3, 0x36, 0xd7, 0x5f, 0x91, 0xb7, 0xc0, 0x5f, 0xd9, 0xe4, 0xf4, 0x90, +0x0d, 0xcb, 0x5b, 0x20, 0x52, 0xb2, 0x61, 0xe9, 0x41, 0xb2, 0xba, 0x9e, +0x4d, 0xe8, 0x9e, 0xbc, 0x1d, 0x7e, 0x70, 0xc3, 0xcb, 0xa3, 0xe9, 0x3f, +0x3c, 0x2f, 0x4f, 0xad, 0xff, 0xa0, 0x02, 0xc9, 0x82, 0xa8, 0x1f, 0xdc, +0xd2, 0x2c, 0x54, 0xb5, 0xb4, 0x8b, 0xe9, 0xe3, 0xdc, 0x51, 0x8d, 0x89, +0xc4, 0x28, 0xeb, 0x63, 0xfe, 0xc1, 0x80, 0xeb, 0xce, 0xfe, 0x21, 0x0f, +0x82, 0x65, 0x0c, 0x69, 0x56, 0x3d, 0x14, 0x2d, 0xd2, 0x79, 0x4d, 0x28, +0xc7, 0x7a, 0x1d, 0x2d, 0xd2, 0x59, 0xa9, 0x65, 0x4c, 0xae, 0x32, 0xea, +0x07, 0xaf, 0x00, 0x8c, 0x71, 0x77, 0x83, 0xc4, 0x81, 0xa0, 0xc5, 0x97, +0x3c, 0x69, 0xa7, 0x66, 0x59, 0x7a, 0x48, 0x8e, 0xd7, 0xfa, 0x99, 0x80, +0xc4, 0x37, 0x54, 0xf0, 0x4a, 0xf4, 0x68, 0x7e, 0x9b, 0xaf, 0xdc, 0xce, +0x69, 0x68, 0xc0, 0xe0, 0x01, 0x5e, 0x04, 0x1e, 0x80, 0x32, 0x3b, 0x3a, +0x41, 0x3e, 0xe0, 0x01, 0x87, 0x2e, 0x89, 0x3b, 0xc4, 0x38, 0x20, 0x05, +0x52, 0xb4, 0x87, 0x2f, 0xb7, 0x6f, 0xdf, 0x0e, 0x36, 0xae, 0xbf, 0xfe, +0x7a, 0x64, 0x21, 0x42, 0x59, 0xe0, 0x86, 0x1c, 0x7c, 0xe0, 0x5a, 0x04, +0x2d, 0x0e, 0x62, 0x25, 0x60, 0xb8, 0x20, 0x81, 0x3d, 0x06, 0x68, 0x71, +0x3e, 0x70, 0x22, 0xe2, 0x05, 0x91, 0x9d, 0xa2, 0x4c, 0x98, 0xa8, 0x71, +0xdc, 0xe0, 0x17, 0x63, 0x4b, 0xd6, 0xdb, 0xd0, 0xd8, 0x99, 0x64, 0x39, +0x9d, 0x13, 0x1b, 0x1b, 0x0b, 0x68, 0x89, 0x3e, 0x40, 0x67, 0xc0, 0x7c, +0x8e, 0xb7, 0x4e, 0xaf, 0x34, 0x21, 0x4a, 0x36, 0x90, 0x40, 0xaf, 0x43, +0xd5, 0x86, 0xa5, 0x8c, 0x1a, 0x35, 0xca, 0x8f, 0xf6, 0xe1, 0xe5, 0x34, +0xf9, 0xf2, 0x1e, 0x16, 0x7a, 0xc0, 0x81, 0x03, 0x7b, 0xd7, 0x3b, 0x6b, +0x06, 0x72, 0x53, 0xc2, 0xfb, 0x55, 0xfd, 0x4c, 0x4b, 0x49, 0xd5, 0x07, +0x54, 0xf0, 0x9e, 0xe0, 0x15, 0x74, 0xe7, 0x86, 0x3a, 0xd9, 0xd8, 0x2c, +0x9b, 0x94, 0xfa, 0x31, 0x57, 0xa4, 0x46, 0x4c, 0xd1, 0x74, 0xff, 0x5e, +0xb6, 0x6c, 0x19, 0xa4, 0x0c, 0x1d, 0xb3, 0x31, 0x20, 0x32, 0xd1, 0xa7, +0x9d, 0x12, 0x3d, 0xe0, 0x81, 0x8c, 0x67, 0xcc, 0xf3, 0x68, 0x45, 0xc8, +0xd3, 0x6c, 0xf0, 0xc4, 0x3e, 0xc0, 0xfb, 0x58, 0x23, 0x42, 0x47, 0x39, +0x13, 0x62, 0x82, 0xee, 0x01, 0x89, 0x1c, 0x7c, 0xbe, 0xe5, 0x96, 0x5b, +0x64, 0x6b, 0x81, 0x7a, 0x00, 0x03, 0x28, 0x82, 0xbf, 0x01, 0x27, 0xcc, +0x9d, 0x08, 0x27, 0xec, 0xc4, 0xef, 0xbf, 0xff, 0x3e, 0xbf, 0x72, 0xf2, +0xb4, 0x69, 0xd3, 0xf0, 0xf2, 0xea, 0x1d, 0xd7, 0xfd, 0x98, 0xbf, 0x4f, +0x97, 0x50, 0xac, 0x5f, 0x4f, 0x25, 0x55, 0xd7, 0xa2, 0xfc, 0x61, 0x7d, +0x62, 0x0b, 0xc0, 0x4d, 0xc1, 0xbe, 0x83, 0x41, 0x56, 0xb7, 0x3e, 0x01, +0x09, 0x62, 0x01, 0x89, 0x89, 0xd2, 0x3b, 0x86, 0x99, 0xef, 0xab, 0x3b, +0x5e, 0x7c, 0x9a, 0x55, 0xe5, 0x9e, 0x8c, 0x34, 0x48, 0x46, 0xa7, 0xee, +0x58, 0xd4, 0xe7, 0x43, 0x97, 0x0f, 0x5e, 0x34, 0x6f, 0x1c, 0x33, 0x0f, +0x02, 0x70, 0x50, 0xa6, 0x8a, 0xf8, 0xe0, 0xb9, 0x7e, 0xa6, 0x5d, 0x54, +0xa8, 0x58, 0x0f, 0x7c, 0xe3, 0xa4, 0xf3, 0x21, 0xcc, 0xe0, 0x5b, 0x25, +0xeb, 0x88, 0x12, 0x60, 0xe8, 0xc4, 0xc8, 0x33, 0x6c, 0x5d, 0x44, 0x7a, +0xda, 0x99, 0x34, 0x30, 0xc0, 0x83, 0x0b, 0x39, 0x52, 0x9a, 0x16, 0x77, +0x01, 0xfa, 0x34, 0x12, 0x0e, 0x1b, 0x3f, 0x22, 0x3e, 0xfc, 0x01, 0x91, +0x89, 0xfc, 0x66, 0xf0, 0x80, 0x90, 0x40, 0xe7, 0x38, 0x3c, 0x2c, 0xb8, +0xd2, 0x41, 0x23, 0x91, 0x0e, 0xc8, 0xd3, 0xd8, 0xd1, 0xd8, 0xe6, 0xd9, +0xec, 0xf1, 0xfb, 0x42, 0x43, 0xc8, 0x42, 0xec, 0xaf, 0xe0, 0x47, 0x56, +0x8d, 0x83, 0x89, 0x91, 0x14, 0x0a, 0xd1, 0xf3, 0x57, 0x60, 0x40, 0x97, +0x2d, 0x76, 0x5f, 0xb0, 0x84, 0x65, 0x1a, 0x15, 0x05, 0x4f, 0x0b, 0xe2, +0xbb, 0x9d, 0x49, 0x56, 0xca, 0x39, 0xa3, 0x47, 0x8f, 0x06, 0xb1, 0xac, +0x30, 0x4e, 0x25, 0x50, 0x21, 0x0e, 0x0a, 0xac, 0x52, 0x86, 0xbe, 0xa6, +0x1e, 0xe6, 0x86, 0xad, 0xa6, 0x4f, 0x9f, 0x3e, 0x94, 0xb5, 0x8d, 0x8b, +0xb3, 0xa8, 0x69, 0x5d, 0x29, 0x0f, 0xe5, 0xe1, 0xa6, 0x50, 0x02, 0xd1, +0x8d, 0x50, 0x11, 0x1b, 0x22, 0xff, 0xf3, 0xf8, 0x2d, 0x5a, 0xb4, 0x40, +0x06, 0x56, 0x97, 0x20, 0x25, 0xb2, 0x79, 0x41, 0x12, 0xbc, 0x3e, 0x0e, +0x64, 0x69, 0x82, 0x88, 0x03, 0x79, 0x0a, 0x76, 0x40, 0xe4, 0x6a, 0xb6, +0x4b, 0x88, 0x04, 0xc2, 0xf8, 0xe5, 0x2f, 0x7f, 0xe9, 0x2e, 0x2b, 0xd5, +0x96, 0x04, 0x25, 0x4c, 0x9c, 0x21, 0x20, 0x50, 0xde, 0x1c, 0x34, 0xc7, +0x1e, 0xcc, 0xae, 0xcc, 0x06, 0x86, 0x7d, 0x00, 0x49, 0x06, 0xe2, 0xe6, +0x40, 0x8c, 0x61, 0xde, 0x40, 0x85, 0x0d, 0x80, 0x07, 0x1e, 0x3c, 0x78, +0x30, 0xff, 0x63, 0x70, 0xc4, 0xd8, 0x0c, 0x45, 0x22, 0xe7, 0x20, 0xe4, +0x80, 0x54, 0x39, 0x99, 0xb5, 0x00, 0x0f, 0x12, 0x19, 0xca, 0x4e, 0x09, +0x7f, 0x80, 0xa6, 0x11, 0xac, 0x21, 0x62, 0x8c, 0x30, 0x30, 0x25, 0x90, +0xa0, 0x7c, 0xba, 0xe2, 0x56, 0xe7, 0x57, 0x26, 0x40, 0x29, 0x2b, 0xd0, +0x82, 0x08, 0x84, 0x62, 0x80, 0x7c, 0x05, 0x48, 0x78, 0x42, 0x76, 0x53, +0x58, 0x01, 0xd7, 0xc2, 0x5e, 0x94, 0x80, 0xc4, 0x38, 0x14, 0x9b, 0xd1, +0x0b, 0x93, 0x05, 0xb2, 0xa6, 0xf6, 0xaf, 0x85, 0xf5, 0xe9, 0x41, 0x31, +0xf6, 0x2f, 0x24, 0x0f, 0x9b, 0xe8, 0x03, 0x2a, 0x4d, 0xf0, 0xbc, 0x1c, +0xbc, 0x3f, 0x0f, 0xd7, 0xa2, 0xbd, 0x10, 0xc3, 0xaf, 0xea, 0x06, 0x70, +0x26, 0x92, 0x15, 0x46, 0x36, 0x56, 0x98, 0x75, 0x36, 0x68, 0xe4, 0xd8, +0x85, 0x2d, 0xcb, 0xbf, 0x5b, 0x8e, 0x8f, 0x06, 0xa8, 0x57, 0x12, 0x21, +0x64, 0x08, 0xa9, 0x83, 0x6d, 0x1b, 0x5e, 0x87, 0xef, 0x88, 0x1d, 0x0d, +0x7a, 0x45, 0x4b, 0x31, 0x5b, 0x3e, 0x50, 0x0b, 0xd9, 0xec, 0x48, 0x42, +0xe4, 0xbd, 0xa3, 0xfe, 0xf1, 0xea, 0x99, 0x06, 0xab, 0xc1, 0xc1, 0xdc, +0xa0, 0x7b, 0x0e, 0x88, 0x01, 0x55, 0x01, 0xea, 0x84, 0x00, 0x10, 0x77, +0x11, 0x10, 0x90, 0x91, 0x38, 0xa0, 0x04, 0x7e, 0x85, 0x24, 0x38, 0x01, +0x29, 0x7d, 0xc6, 0x8c, 0x19, 0x10, 0x06, 0xd2, 0x2f, 0x54, 0x41, 0x2e, +0x34, 0x12, 0x0a, 0x7b, 0x1c, 0xf5, 0x48, 0x91, 0xae, 0xf1, 0x35, 0x31, +0x0d, 0xb6, 0xe3, 0xde, 0xbd, 0x7b, 0x43, 0x63, 0x8c, 0x09, 0x75, 0x71, +0x3e, 0xe4, 0xb7, 0x70, 0xe1, 0x42, 0x79, 0x7c, 0x54, 0x4a, 0x7e, 0xa5, +0xb5, 0x39, 0x37, 0xe2, 0x76, 0xcc, 0x87, 0xff, 0xa1, 0x55, 0x28, 0x4d, +0x95, 0xc1, 0x46, 0x06, 0xb1, 0xd4, 0xdf, 0xec, 0xf2, 0x0a, 0x51, 0xd2, +0x11, 0xa2, 0x78, 0x61, 0x50, 0x24, 0x8c, 0x5e, 0xa6, 0x88, 0x70, 0x02, +0x94, 0x31, 0xfd, 0xa2, 0xc8, 0xb2, 0xd3, 0xf3, 0x0c, 0x48, 0x2f, 0xdc, +0x18, 0xc0, 0x20, 0xcc, 0xe8, 0x07, 0xdf, 0xf0, 0x3d, 0x7f, 0xe5, 0x1c, +0xce, 0x14, 0xf1, 0x06, 0x41, 0x08, 0x5e, 0x26, 0x12, 0x0e, 0x78, 0x10, +0x09, 0x87, 0x14, 0x10, 0xe4, 0x25, 0x09, 0x4d, 0x41, 0xb9, 0x14, 0x87, +0xae, 0x30, 0x2b, 0x71, 0x23, 0xb2, 0x95, 0xc2, 0x40, 0x60, 0x1d, 0x08, +0xd9, 0xf8, 0x80, 0x11, 0xc4, 0x09, 0x8e, 0x00, 0x24, 0x1c, 0xfc, 0x8a, +0xb6, 0xc0, 0xd3, 0xf2, 0x57, 0xbe, 0xd4, 0xc3, 0x04, 0x3c, 0x90, 0x17, +0xfa, 0x22, 0x5e, 0x3f, 0x14, 0x53, 0x02, 0xa1, 0xc9, 0xc5, 0x23, 0x61, +0x12, 0x57, 0x20, 0xd1, 0x1f, 0x44, 0x31, 0x10, 0x2a, 0x22, 0x3f, 0xa4, +0x2e, 0x60, 0x67, 0x23, 0x14, 0x9c, 0x64, 0x2e, 0xac, 0x2e, 0x04, 0xae, +0xa1, 0x50, 0x92, 0xf4, 0x6c, 0x39, 0xac, 0x9e, 0xa5, 0x68, 0x1f, 0x12, +0x72, 0x26, 0xb9, 0x44, 0xc0, 0x9e, 0x67, 0xc7, 0x91, 0xa7, 0xbb, 0x17, +0xd4, 0x38, 0x4c, 0x95, 0x40, 0x23, 0x0a, 0x3c, 0x4b, 0x0e, 0x96, 0xde, +0x5b, 0x1a, 0x42, 0x44, 0xcc, 0x90, 0xc5, 0x87, 0x22, 0xf5, 0x4b, 0x38, +0x13, 0x3b, 0x38, 0xee, 0x64, 0x66, 0x8e, 0x17, 0x0c, 0x83, 0x8f, 0xfa, +0x2b, 0x91, 0x04, 0xc4, 0x23, 0x63, 0x32, 0x46, 0x7f, 0x25, 0xa7, 0x12, +0x77, 0xbb, 0xa1, 0xd6, 0x1b, 0x34, 0xc7, 0x2e, 0x8e, 0x84, 0xa6, 0x87, +0xe8, 0xb9, 0x7b, 0x2e, 0xf6, 0x63, 0x11, 0x86, 0x99, 0x09, 0x3b, 0x3d, +0x2c, 0x5a, 0x91, 0x01, 0xe2, 0xae, 0x1c, 0x22, 0xe5, 0x22, 0x1a, 0x41, +0x03, 0xd0, 0x28, 0x26, 0x10, 0x14, 0x3c, 0xfe, 0x87, 0x96, 0xd8, 0x1c, +0xf9, 0x1e, 0x01, 0x18, 0x3a, 0x11, 0x53, 0x21, 0x72, 0x01, 0xdb, 0x1c, +0x07, 0x9b, 0x20, 0x7b, 0x1f, 0x3b, 0x32, 0x34, 0xc3, 0xe5, 0x0c, 0x22, +0x62, 0x33, 0xb7, 0x90, 0x31, 0x21, 0x30, 0x2a, 0x48, 0xf0, 0x27, 0x75, +0xf0, 0x2b, 0x5f, 0x0a, 0x41, 0x62, 0xc3, 0x14, 0x61, 0x0c, 0x49, 0x04, +0x79, 0x07, 0x52, 0x61, 0x85, 0xdd, 0xe5, 0x6a, 0xdb, 0xe5, 0x15, 0xa0, +0x42, 0x59, 0xa2, 0x90, 0x7d, 0x19, 0x14, 0xa6, 0xc1, 0xc6, 0xcc, 0x3e, +0x8d, 0x49, 0x87, 0x3b, 0xc1, 0xe3, 0xc0, 0x09, 0xf2, 0x0f, 0x54, 0xce, +0xbd, 0xf1, 0xd1, 0x32, 0x7b, 0x1e, 0x95, 0xff, 0x39, 0xf8, 0x86, 0xef, +0x11, 0x78, 0x30, 0x3e, 0x3e, 0xf8, 0xe0, 0x83, 0x3c, 0x1b, 0xaf, 0x9f, +0x2a, 0xd0, 0xec, 0xee, 0xd4, 0x24, 0x96, 0xdd, 0x1d, 0xbc, 0x41, 0x10, +0xe0, 0x01, 0x1d, 0x08, 0xce, 0x60, 0x99, 0x05, 0x22, 0xf0, 0x10, 0xbe, +0x01, 0x3c, 0x60, 0x1d, 0x9c, 0x8f, 0xd5, 0x19, 0x9c, 0x88, 0xac, 0x85, +0x50, 0xce, 0xf7, 0x8c, 0xa0, 0xfb, 0x7d, 0xf4, 0x57, 0x88, 0xeb, 0x00, +0xb2, 0x20, 0xd1, 0x9e, 0xe8, 0x20, 0x48, 0x3f, 0xc0, 0x22, 0x0c, 0x58, +0xd9, 0x01, 0x0c, 0x50, 0xd1, 0x93, 0xee, 0x75, 0x55, 0x18, 0xeb, 0x87, +0x6e, 0xc2, 0xc2, 0xce, 0x43, 0x96, 0x8f, 0xb2, 0xd5, 0xe0, 0x67, 0xc0, +0x4a, 0xa3, 0x77, 0xbe, 0x64, 0x2f, 0x64, 0x6d, 0xe1, 0x93, 0xd0, 0x96, +0x9a, 0x36, 0x79, 0x88, 0x18, 0x94, 0x08, 0x4a, 0x35, 0xcf, 0x56, 0x5a, +0x5a, 0xca, 0x81, 0x7e, 0xc2, 0x76, 0x03, 0x85, 0xb1, 0xe0, 0x3a, 0x32, +0xc9, 0xdf, 0x30, 0x9b, 0x59, 0x99, 0x39, 0x46, 0x4c, 0xcb, 0xf4, 0x46, +0x3d, 0x61, 0xcd, 0xdc, 0xc2, 0xdc, 0x2b, 0xce, 0xc9, 0x1c, 0x84, 0x1c, +0xd9, 0x28, 0xf1, 0x09, 0x20, 0x53, 0x08, 0x01, 0x70, 0x40, 0x12, 0x1c, +0x4c, 0x8f, 0x03, 0x4a, 0x80, 0x5a, 0xd8, 0x0a, 0xe1, 0x03, 0xec, 0x86, +0x90, 0x29, 0x32, 0x33, 0xf4, 0x80, 0x39, 0x84, 0x2d, 0x92, 0x3f, 0x41, +0x27, 0x10, 0x15, 0xdf, 0x20, 0x48, 0xb3, 0x4b, 0x72, 0x40, 0x75, 0xec, +0x74, 0x90, 0x1c, 0x57, 0x41, 0x4e, 0x0c, 0xc8, 0xf8, 0x02, 0x2a, 0x86, +0x15, 0x02, 0x03, 0x45, 0x8c, 0x0c, 0x11, 0xf2, 0x3f, 0x07, 0xbf, 0xf2, +0x25, 0x87, 0x92, 0xae, 0xd9, 0xcd, 0x71, 0x92, 0x22, 0x3b, 0x61, 0xd2, +0xb0, 0x8c, 0x1e, 0x10, 0x06, 0xe0, 0x03, 0x2a, 0xc4, 0x12, 0xc2, 0x36, +0xc6, 0x3b, 0x83, 0x10, 0x09, 0x20, 0x81, 0x8e, 0xd9, 0xda, 0x11, 0x54, +0xd8, 0xe3, 0x99, 0xae, 0x08, 0x33, 0x80, 0x1b, 0x9c, 0x50, 0x07, 0x09, +0xc9, 0x5e, 0x0e, 0x3e, 0xf3, 0x0d, 0xdf, 0xf3, 0x90, 0xb2, 0x04, 0xd8, +0x94, 0x78, 0x5a, 0xb6, 0x79, 0x54, 0x05, 0x84, 0x25, 0xb6, 0x76, 0x80, +0xab, 0xc2, 0x42, 0x61, 0x4a, 0x66, 0xbb, 0xa4, 0x32, 0x2a, 0x2b, 0xbe, +0x01, 0x36, 0x98, 0x0c, 0x0f, 0xa0, 0x0e, 0x89, 0x27, 0xe5, 0x57, 0x1e, +0x98, 0x74, 0x36, 0xf5, 0xfe, 0x10, 0x1e, 0x70, 0xe5, 0x52, 0x28, 0x09, +0x18, 0xf8, 0x54, 0x88, 0xc9, 0xa6, 0xcd, 0x9e, 0xd3, 0xcc, 0xb9, 0x94, +0x72, 0x77, 0x3b, 0x7d, 0x0b, 0xb0, 0x8d, 0xaa, 0xa9, 0xb2, 0xcb, 0xf2, +0xda, 0xe0, 0xc6, 0x3a, 0xf1, 0x79, 0xc8, 0xe2, 0xd7, 0x23, 0xff, 0x3a, +0x77, 0xee, 0x0c, 0xa1, 0xb0, 0x3d, 0xb1, 0x07, 0xeb, 0x97, 0xdb, 0x4c, +0x8b, 0x93, 0x87, 0x25, 0xee, 0x46, 0x37, 0x71, 0x5a, 0x5a, 0xc0, 0xd5, +0xe0, 0x48, 0x71, 0x64, 0x3b, 0x11, 0x4f, 0xc5, 0x46, 0xa3, 0xbe, 0x84, +0x4d, 0x31, 0x01, 0x68, 0x91, 0xbd, 0x0f, 0xca, 0x16, 0x02, 0x50, 0x07, +0xbb, 0xa1, 0x6c, 0x88, 0x50, 0x0b, 0x4f, 0x0a, 0xa1, 0xb3, 0x0b, 0x60, +0x53, 0x81, 0x52, 0x75, 0xa9, 0x18, 0x3a, 0x61, 0x11, 0x20, 0x12, 0x38, +0x3f, 0xf4, 0xc6, 0x66, 0x07, 0x79, 0x80, 0x0d, 0xe8, 0x0d, 0x4a, 0x63, +0x04, 0xf0, 0x83, 0xe9, 0x85, 0xf1, 0x01, 0x89, 0x10, 0x18, 0x52, 0x16, +0xc3, 0x72, 0x40, 0x84, 0x1c, 0x7c, 0x00, 0x72, 0x50, 0x1d, 0x07, 0x60, +0xe0, 0x33, 0x5f, 0xc2, 0x70, 0xb8, 0x97, 0x84, 0x8e, 0xbb, 0xdb, 0x79, +0x7d, 0x43, 0x85, 0x99, 0x2e, 0x21, 0x41, 0xd2, 0x2d, 0xd8, 0xad, 0x21, +0x6b, 0x66, 0x8f, 0xf4, 0xc2, 0xa4, 0x31, 0x16, 0x51, 0xee, 0x85, 0xed, +0x1f, 0x66, 0xc2, 0x24, 0xf8, 0x9f, 0xcf, 0x3c, 0x1e, 0xe0, 0x01, 0x06, +0x3c, 0x3c, 0x92, 0x0f, 0x8f, 0x07, 0xae, 0x44, 0x73, 0x90, 0x28, 0x14, +0x11, 0x93, 0x3c, 0xc4, 0xb8, 0xdb, 0xf9, 0x93, 0x0c, 0xc2, 0x80, 0x7a, +0x4b, 0x0d, 0x36, 0xda, 0xf2, 0xcb, 0x8b, 0x12, 0x4a, 0x22, 0x9d, 0xc0, +0xdc, 0xbd, 0x12, 0x2a, 0xb1, 0x99, 0xbb, 0x8b, 0x6f, 0x47, 0x91, 0x14, +0x7a, 0x27, 0x2f, 0x0f, 0x05, 0x43, 0x7d, 0x43, 0x81, 0x71, 0x0f, 0x48, +0xd6, 0x1b, 0xcf, 0x61, 0xd1, 0x67, 0x77, 0xe4, 0x72, 0x44, 0x6a, 0x75, +0x39, 0x19, 0xe1, 0xf6, 0xb1, 0xcd, 0x99, 0x3a, 0xf3, 0xc9, 0xcc, 0x34, +0x46, 0x2e, 0x13, 0xa2, 0x42, 0x35, 0x78, 0x50, 0xea, 0x4a, 0x33, 0xfc, +0xa1, 0xd1, 0x04, 0x81, 0xb7, 0xba, 0x8b, 0x06, 0x05, 0x92, 0xcd, 0x5b, +0x4c, 0x88, 0x6c, 0x7f, 0x42, 0x00, 0xea, 0x80, 0x12, 0x38, 0xc4, 0x32, +0x2e, 0xa2, 0x32, 0xbc, 0x5d, 0x36, 0x32, 0xe8, 0x01, 0x7a, 0x65, 0xab, +0x65, 0xaf, 0x14, 0x3a, 0x91, 0x8e, 0xa6, 0xc8, 0x39, 0x72, 0x40, 0x6c, +0xec, 0x9e, 0x90, 0x35, 0xa3, 0xb1, 0x11, 0x33, 0x38, 0xb8, 0xe2, 0x03, +0xbf, 0xf2, 0xc6, 0x45, 0x90, 0x86, 0xc6, 0x20, 0x42, 0x39, 0xf8, 0x15, +0x6a, 0xe4, 0x4f, 0xf2, 0x57, 0xfe, 0x04, 0xc3, 0x01, 0x5d, 0xdc, 0xce, +0x1c, 0x63, 0xa6, 0x13, 0x98, 0x0f, 0xbc, 0x42, 0xbf, 0x4c, 0xf8, 0x06, +0x13, 0xd5, 0x85, 0x19, 0x08, 0x1d, 0xc6, 0x84, 0x14, 0xc4, 0xc3, 0x08, +0xd7, 0x53, 0x07, 0xdf, 0x70, 0xf0, 0x57, 0xce, 0x61, 0x21, 0x54, 0xf6, +0x8c, 0x0a, 0x90, 0xb6, 0x43, 0xf4, 0x5e, 0xcf, 0x11, 0x36, 0xc2, 0xfa, +0x62, 0x90, 0xf6, 0x9b, 0x2c, 0x7c, 0xa2, 0x21, 0x39, 0x59, 0x27, 0x4d, +0x7d, 0x93, 0xb6, 0x59, 0x94, 0x44, 0x2f, 0x63, 0x4e, 0xdc, 0x17, 0x52, +0xb5, 0x3e, 0x88, 0x87, 0x24, 0x04, 0x6e, 0x4d, 0x07, 0x67, 0x75, 0x32, +0xec, 0x91, 0x1d, 0x9a, 0x5d, 0x56, 0x8f, 0x8e, 0xf1, 0xa9, 0xda, 0x22, +0xba, 0x87, 0x4e, 0xdf, 0x28, 0xd9, 0x6a, 0x70, 0x04, 0x3f, 0x77, 0x49, +0xed, 0x27, 0xd7, 0x94, 0xe6, 0x3f, 0x61, 0x63, 0x45, 0x76, 0x12, 0xdf, +0x0b, 0x94, 0x0d, 0x89, 0x2b, 0x1a, 0x40, 0xb8, 0xe0, 0x33, 0xff, 0x73, +0x40, 0xfd, 0xfa, 0xb6, 0x28, 0x84, 0x24, 0xd9, 0x54, 0x90, 0x07, 0xc2, +0xb0, 0xc8, 0x0e, 0xaa, 0x9e, 0x9f, 0xf2, 0xd8, 0xf0, 0x72, 0xf9, 0xab, +0x08, 0x54, 0x6c, 0xc4, 0xfc, 0xcf, 0xc1, 0x80, 0x50, 0x17, 0x63, 0x72, +0x40, 0x63, 0xea, 0xe0, 0x57, 0xa8, 0x51, 0x08, 0x52, 0xfe, 0x04, 0xcf, +0x81, 0xe2, 0x11, 0x46, 0x3c, 0x6f, 0xc1, 0x7e, 0xa2, 0x42, 0xe7, 0x1b, +0x42, 0x8b, 0xa2, 0x0d, 0x73, 0x3f, 0x1e, 0xcf, 0xdd, 0xc1, 0x5f, 0x05, +0xf4, 0xca, 0xf2, 0xe8, 0x95, 0xd0, 0x7d, 0x3a, 0x81, 0x99, 0x30, 0x38, +0xcb, 0x7a, 0xe9, 0xa5, 0x97, 0xaa, 0xd7, 0x89, 0x53, 0xd6, 0x0f, 0x42, +0xf7, 0xe9, 0x12, 0xcb, 0x8a, 0xf9, 0xf6, 0x73, 0x97, 0xf5, 0x94, 0x43, +0xb6, 0x79, 0x4c, 0x3d, 0x6a, 0xf2, 0x48, 0x26, 0x9e, 0x43, 0x30, 0xf5, +0x3c, 0x04, 0xf4, 0x19, 0x04, 0x68, 0xf6, 0x69, 0x75, 0x39, 0xa6, 0x24, +0x0f, 0xb5, 0x70, 0xcc, 0xcf, 0xa8, 0x67, 0x90, 0x13, 0x77, 0xa4, 0xbb, +0xc3, 0x31, 0x42, 0xb8, 0x5b, 0x13, 0x1d, 0xd5, 0x48, 0x71, 0x88, 0x4f, +0x18, 0xcd, 0xd9, 0xc8, 0x21, 0x5f, 0x69, 0x33, 0x67, 0x3e, 0x84, 0x12, +0x74, 0x19, 0x41, 0xb7, 0xa9, 0x28, 0x22, 0x31, 0xec, 0xe8, 0xba, 0xf0, +0xcc, 0x98, 0x58, 0x90, 0xf4, 0x91, 0x19, 0x53, 0x11, 0x98, 0x90, 0xa2, +0x3a, 0x38, 0x4d, 0x3e, 0xdb, 0x24, 0xbc, 0x40, 0x51, 0x21, 0x54, 0x2b, +0x8f, 0x04, 0xf7, 0xe0, 0x10, 0x84, 0x58, 0x1e, 0x72, 0x82, 0x32, 0x2b, +0xf9, 0x44, 0xf1, 0x76, 0x4e, 0x66, 0x70, 0x9e, 0x9c, 0x5d, 0x41, 0xdf, +0x2c, 0x2d, 0x2b, 0xcd, 0xf8, 0x44, 0xf4, 0x9e, 0x4f, 0x76, 0xd7, 0xcb, +0xdd, 0x32, 0xc7, 0xc8, 0x72, 0x28, 0x3d, 0x47, 0x0c, 0xdf, 0xa2, 0xce, +0x28, 0xdc, 0x95, 0x0f, 0x53, 0xe3, 0x50, 0xed, 0x41, 0x9d, 0x8f, 0x0e, +0x80, 0xf6, 0x89, 0x17, 0x48, 0x7d, 0x03, 0xde, 0xec, 0x3f, 0x29, 0x72, +0x60, 0xdd, 0x9c, 0x52, 0xab, 0x1a, 0x06, 0x59, 0xdd, 0xe8, 0xe4, 0xae, +0x83, 0x04, 0xf1, 0xce, 0xba, 0x19, 0x17, 0x23, 0x87, 0xc4, 0x38, 0x22, +0x45, 0xb3, 0xd3, 0x4b, 0xeb, 0x20, 0xf3, 0xa1, 0x28, 0xc1, 0xf0, 0x5a, +0x15, 0x6d, 0x28, 0x3a, 0x31, 0x9f, 0xe0, 0x8e, 0xc6, 0x64, 0x4c, 0xcb, +0x43, 0xc0, 0xe0, 0x6e, 0x4c, 0x33, 0x69, 0x05, 0x07, 0x15, 0x76, 0x48, +0xb6, 0x02, 0xce, 0x11, 0xf3, 0x14, 0xbb, 0x94, 0xbe, 0x59, 0x06, 0x25, +0xdb, 0xdb, 0x03, 0x6d, 0x61, 0xd0, 0x34, 0x9b, 0x65, 0x7c, 0xea, 0x64, +0x45, 0x5d, 0x1c, 0x35, 0x82, 0x1e, 0x34, 0x30, 0xa8, 0xb3, 0x77, 0x9a, +0x26, 0xef, 0x59, 0x5d, 0x8b, 0xf3, 0x0e, 0xcb, 0xa6, 0x6e, 0x66, 0xf0, +0xa9, 0x91, 0x85, 0xa1, 0x60, 0x14, 0x1e, 0x06, 0x35, 0x32, 0x55, 0x4b, +0xdc, 0xad, 0x80, 0xce, 0x5e, 0x30, 0x25, 0x23, 0xfe, 0x89, 0x87, 0xc1, +0x5d, 0x8f, 0xb9, 0x0a, 0x20, 0x83, 0xc0, 0x6f, 0x11, 0x6e, 0xa8, 0x60, +0x73, 0xd2, 0x9d, 0x5f, 0x3e, 0x35, 0x9a, 0xb1, 0xbf, 0xad, 0xaa, 0x33, +0x51, 0x34, 0xf5, 0x50, 0x36, 0x45, 0x46, 0x38, 0x37, 0xec, 0x8f, 0x66, +0x59, 0x22, 0x0d, 0x0b, 0xb2, 0x9d, 0x92, 0x7e, 0xc4, 0x9f, 0xea, 0x98, +0xc4, 0x3d, 0xaa, 0x7e, 0x25, 0xc2, 0xdc, 0x7e, 0xe3, 0x18, 0xc6, 0xd1, +0x63, 0xce, 0x89, 0xc2, 0xd0, 0x05, 0x39, 0x0f, 0x59, 0x03, 0xaa, 0xc3, +0x37, 0xf7, 0xc5, 0x85, 0x27, 0x85, 0x33, 0xd0, 0xb3, 0xd1, 0x95, 0xdd, +0xf9, 0xc8, 0x02, 0xa7, 0xda, 0xf2, 0x1e, 0x21, 0xac, 0x50, 0x21, 0x6e, +0x3e, 0xdc, 0x99, 0x8a, 0x32, 0xdc, 0xf5, 0xd2, 0xb6, 0x4f, 0xb2, 0x9e, +0xcf, 0xc4, 0xed, 0x65, 0x66, 0x14, 0x64, 0x84, 0xfa, 0x34, 0xbe, 0x9e, +0x41, 0xaa, 0x46, 0x73, 0xd7, 0xf8, 0xc7, 0x3c, 0x32, 0xc9, 0x89, 0xea, +0x2a, 0x3d, 0x93, 0xd3, 0xa7, 0xc6, 0x31, 0xe7, 0xb6, 0xf6, 0xd7, 0x1f, +0x04, 0x41, 0x4e, 0x4f, 0xba, 0xa4, 0x66, 0x8c, 0xe5, 0x13, 0x19, 0xfc, +0x7d, 0x84, 0xeb, 0xe3, 0x37, 0xc0, 0x48, 0x8a, 0x95, 0x09, 0x05, 0xd7, +0x9c, 0xe3, 0x56, 0xde, 0xd4, 0x1c, 0xac, 0xf1, 0xc3, 0x0d, 0x15, 0xd8, +0x28, 0xf4, 0xe6, 0x29, 0xbc, 0x6c, 0x9f, 0x08, 0xd4, 0xd7, 0x93, 0x2d, +0x09, 0xda, 0xd7, 0x84, 0x1e, 0x73, 0xe9, 0x41, 0x62, 0x2e, 0xec, 0x37, +0x31, 0xd1, 0x43, 0xf4, 0xf5, 0x5a, 0x4f, 0x3e, 0xd5, 0xef, 0xd0, 0x35, +0x7e, 0x22, 0xa9, 0x08, 0xa3, 0x50, 0x20, 0xc1, 0xf9, 0xed, 0x2e, 0x77, +0xf7, 0xaa, 0x09, 0xa5, 0x45, 0x06, 0x08, 0x7c, 0x24, 0x6a, 0x41, 0x35, +0x23, 0xc5, 0xe6, 0x21, 0xa1, 0x09, 0xc1, 0xa2, 0xd4, 0x8a, 0x1c, 0x27, +0xac, 0x50, 0xc1, 0xe6, 0x84, 0xa7, 0x5c, 0xbd, 0x4e, 0x36, 0x51, 0x0f, +0xe5, 0x86, 0x7c, 0x05, 0x80, 0xf9, 0x7c, 0xc3, 0x4e, 0x29, 0xf7, 0xa5, +0x62, 0x9a, 0xaf, 0xf9, 0x93, 0x7a, 0xa1, 0x5b, 0x19, 0xc4, 0xa7, 0xe2, +0xdb, 0x96, 0x65, 0xcc, 0x81, 0x8a, 0x7d, 0x7f, 0xa5, 0x9e, 0xe9, 0xcf, +0xdd, 0xd1, 0x28, 0xc8, 0x51, 0x51, 0xcb, 0x48, 0x90, 0x88, 0xe5, 0x5a, +0xe1, 0x17, 0xa7, 0x40, 0xa8, 0x3a, 0x8d, 0x78, 0x13, 0x62, 0x7f, 0xf0, +0xaf, 0xc1, 0x28, 0x24, 0xef, 0x5c, 0xb4, 0xdb, 0x8a, 0xa4, 0xe6, 0x60, +0xdd, 0x2b, 0xac, 0x50, 0x81, 0x52, 0x41, 0xac, 0x81, 0x7a, 0x4f, 0xf6, +0x53, 0x93, 0x31, 0xbf, 0xb0, 0x59, 0x92, 0x4b, 0x44, 0xd1, 0x37, 0xf6, +0x3f, 0xa2, 0xa1, 0x08, 0xaf, 0xa0, 0x44, 0x08, 0xb9, 0x6c, 0x1e, 0x94, +0x75, 0xa4, 0x6d, 0xb3, 0xf8, 0x84, 0xef, 0xc2, 0x57, 0xbc, 0x19, 0x92, +0x48, 0x3d, 0xbb, 0xed, 0xcc, 0x83, 0xab, 0x04, 0x51, 0x7d, 0x32, 0x74, +0xe8, 0xb3, 0x3f, 0x0d, 0xc2, 0x49, 0xd4, 0xb5, 0xf4, 0x13, 0xd3, 0xad, +0x58, 0x7c, 0x4f, 0xe9, 0x51, 0xcb, 0xa1, 0xf4, 0x56, 0x5a, 0x44, 0x4c, +0xe3, 0x95, 0xc7, 0x28, 0x4c, 0xe0, 0x06, 0x7a, 0xb6, 0x87, 0xbe, 0x41, +0xc1, 0x22, 0xdc, 0x72, 0x1d, 0x27, 0x7c, 0x50, 0xc1, 0xb6, 0xc4, 0xfe, +0x44, 0x10, 0xa5, 0x7a, 0xc1, 0xb7, 0x5c, 0xde, 0xc1, 0x26, 0x65, 0x60, +0xbd, 0x35, 0xd3, 0xb7, 0xfa, 0x86, 0x80, 0x11, 0x72, 0x09, 0x49, 0x22, +0x23, 0x82, 0x70, 0xee, 0x88, 0x26, 0xc0, 0x46, 0xf2, 0xd1, 0xcc, 0xe4, +0x48, 0x98, 0x9d, 0x1f, 0x99, 0x9f, 0x86, 0xdc, 0x34, 0xcf, 0x6e, 0x3b, +0xf3, 0x13, 0x59, 0x06, 0xc3, 0x9e, 0xd9, 0xd0, 0xd7, 0xe6, 0xb3, 0x13, +0x0f, 0xa2, 0xa7, 0x0a, 0x13, 0xaf, 0xa1, 0x47, 0x55, 0x12, 0x8c, 0xe8, +0x6e, 0x1c, 0x3d, 0xd1, 0x8f, 0x40, 0x5a, 0xa2, 0xf4, 0x88, 0xd0, 0xc6, +0xd9, 0x4c, 0x08, 0x4f, 0xe8, 0xea, 0xd9, 0x02, 0xb6, 0x30, 0x41, 0x85, +0xf8, 0xef, 0x60, 0xdc, 0x7a, 0x80, 0xfe, 0xdb, 0x47, 0x47, 0xd8, 0xa4, +0x0c, 0x38, 0x03, 0x8d, 0x49, 0xc9, 0x66, 0xd6, 0x83, 0x49, 0x3d, 0xe0, +0xc4, 0xdd, 0x9f, 0x28, 0x10, 0x68, 0xf3, 0x8e, 0xfa, 0x69, 0xaa, 0x09, +0x2f, 0xc3, 0x7a, 0x75, 0xdb, 0x99, 0xc7, 0x37, 0xa7, 0xbf, 0x93, 0xe4, +0x69, 0xbf, 0x8a, 0x8f, 0x9e, 0x24, 0x4d, 0x55, 0x66, 0x22, 0xae, 0xf5, +0xa7, 0x73, 0x87, 0x2e, 0x52, 0xf0, 0x75, 0x2d, 0x9f, 0x40, 0x6e, 0x52, +0x6e, 0x08, 0x7c, 0x22, 0xb6, 0x02, 0x7f, 0x51, 0xe8, 0x6a, 0x14, 0x61, +0x85, 0x0a, 0x3c, 0x15, 0xec, 0x4f, 0x7a, 0x61, 0x1e, 0x12, 0x0f, 0x7c, +0x95, 0xef, 0x85, 0xe0, 0xc8, 0x7c, 0x27, 0x74, 0x9c, 0xb4, 0xfa, 0x9d, +0x57, 0x15, 0x12, 0x14, 0x44, 0xa8, 0x36, 0x3d, 0x19, 0x70, 0x6f, 0x79, +0xad, 0xac, 0x43, 0x8a, 0xb0, 0x87, 0x0e, 0x1b, 0x1e, 0x26, 0xa3, 0x97, +0x8f, 0xf7, 0xea, 0xb6, 0x33, 0xa0, 0x02, 0xd6, 0x64, 0x86, 0xa8, 0xcd, +0xd6, 0x5b, 0x0c, 0x45, 0x10, 0x87, 0x5e, 0x93, 0x8e, 0xca, 0x0f, 0x7a, +0x66, 0x48, 0x8f, 0xd6, 0x6e, 0xcb, 0xd7, 0xea, 0xed, 0x51, 0x50, 0xf1, +0x25, 0x6f, 0x81, 0x38, 0x3c, 0xa2, 0x9b, 0x3c, 0x57, 0xbd, 0x2f, 0x57, +0xc9, 0x27, 0x58, 0x83, 0x87, 0x09, 0xaf, 0x40, 0xcf, 0x26, 0xb8, 0x40, +0x0f, 0xf4, 0xa0, 0x83, 0x8e, 0x1f, 0xdb, 0xb6, 0x87, 0x4b, 0xa0, 0x78, +0x6a, 0x45, 0xb2, 0x77, 0xba, 0x63, 0x14, 0xd4, 0xfd, 0xf6, 0x70, 0x39, +0xfd, 0x90, 0xdc, 0xfd, 0x55, 0x55, 0x85, 0xf2, 0xdc, 0x48, 0x8d, 0x06, +0x28, 0xe6, 0x11, 0x08, 0x7c, 0x34, 0xcf, 0xc7, 0x3e, 0xb4, 0x10, 0x32, +0xd5, 0xe5, 0x84, 0x78, 0xe8, 0xdd, 0xd3, 0xd9, 0x05, 0xc8, 0x30, 0x71, +0x37, 0x67, 0xdd, 0xf8, 0x46, 0x89, 0x2d, 0x72, 0x06, 0x09, 0xff, 0x26, +0x1a, 0x9a, 0xa8, 0x24, 0x82, 0xdc, 0x42, 0x54, 0xc9, 0x56, 0xa0, 0x0a, +0x13, 0x54, 0xa0, 0x67, 0xb3, 0x45, 0xe9, 0xc9, 0x00, 0xf6, 0x8b, 0xd8, +0xf9, 0x04, 0x1e, 0xbd, 0x86, 0x8a, 0x9e, 0x94, 0x4b, 0x71, 0x13, 0xcf, +0x25, 0x77, 0x0f, 0xae, 0x74, 0x8b, 0x19, 0xc9, 0xa7, 0xf3, 0xea, 0xb6, +0xb3, 0x6c, 0x19, 0x4c, 0x98, 0x93, 0x01, 0x15, 0x54, 0xe3, 0xb5, 0xd9, +0x14, 0x0a, 0x1b, 0x03, 0xd3, 0x56, 0x97, 0x13, 0xe2, 0xa1, 0x0f, 0x45, +0x1b, 0x1a, 0x77, 0x2b, 0x63, 0x08, 0x72, 0x21, 0xf7, 0x4d, 0xea, 0x7b, +0x63, 0x7d, 0x92, 0xbc, 0x85, 0x60, 0xed, 0xd9, 0x95, 0x35, 0x4e, 0x98, +0xa0, 0x82, 0x37, 0xa1, 0x77, 0xd5, 0xc0, 0x58, 0x69, 0x5f, 0xb0, 0xf6, +0x09, 0x15, 0x1f, 0x9f, 0x28, 0x35, 0xe4, 0xeb, 0xe9, 0xd1, 0x9e, 0xbb, +0x41, 0x53, 0x35, 0xd0, 0x83, 0xb1, 0x55, 0x48, 0xd3, 0xb3, 0xdb, 0x0e, +0xa1, 0x8e, 0x3e, 0xed, 0xe6, 0xa9, 0x52, 0x1b, 0xd7, 0x80, 0x8a, 0xcb, +0x47, 0xdb, 0x6d, 0x88, 0x8a, 0x16, 0xa4, 0x5f, 0xab, 0xab, 0x64, 0x00, +0xd5, 0x43, 0x49, 0x42, 0xbd, 0xe4, 0x3d, 0x01, 0x26, 0x88, 0x4f, 0xd2, +0x43, 0x19, 0xf1, 0x89, 0xa0, 0x54, 0x44, 0xd9, 0xca, 0xa2, 0xe6, 0x60, +0xdd, 0x37, 0x1c, 0x50, 0x01, 0xbf, 0x86, 0x6b, 0xeb, 0x4d, 0xc9, 0x48, +0x53, 0xf6, 0x89, 0xd6, 0xed, 0x9f, 0x4c, 0xbf, 0x12, 0xb3, 0xc4, 0x82, +0xd9, 0xde, 0xb3, 0x63, 0x84, 0x6d, 0xde, 0x83, 0x7c, 0x45, 0x15, 0x29, +0xaf, 0x6e, 0x3b, 0x22, 0x08, 0x2d, 0x43, 0xfd, 0xcc, 0x3e, 0x13, 0x92, +0x57, 0x6d, 0x3e, 0x0e, 0x95, 0xbb, 0xd4, 0xb3, 0xe8, 0x7c, 0x0f, 0xae, +0xe5, 0xa1, 0x3f, 0xa0, 0xde, 0x64, 0x9e, 0xcb, 0x71, 0x53, 0xe0, 0xbc, +0x23, 0x01, 0x88, 0xec, 0x05, 0x62, 0xb6, 0x25, 0xd5, 0x3e, 0x58, 0xd4, +0x59, 0x59, 0xe3, 0x84, 0x09, 0x2a, 0x10, 0x9f, 0xf4, 0x5a, 0xb4, 0xe5, +0xd7, 0x94, 0x4c, 0xcf, 0xde, 0x54, 0x24, 0xe5, 0xb5, 0xf3, 0x2a, 0x3d, +0x5a, 0xcf, 0x6e, 0x76, 0x5b, 0xc1, 0x92, 0x6a, 0xb9, 0x9e, 0xab, 0xcf, +0x93, 0x47, 0xce, 0xbd, 0xc6, 0xf6, 0xae, 0x67, 0x26, 0x77, 0xba, 0x2b, +0xe9, 0x28, 0xc5, 0x2a, 0x60, 0xd3, 0x34, 0x8c, 0x8f, 0xcf, 0x9d, 0x82, +0xe4, 0xb9, 0x30, 0x26, 0xf9, 0x8c, 0xfa, 0x85, 0x52, 0xaf, 0x09, 0x3d, +0x9b, 0x6c, 0x07, 0xde, 0x82, 0xa1, 0x92, 0x55, 0x65, 0x91, 0x75, 0x80, +0xf7, 0x0d, 0x79, 0x54, 0x48, 0x04, 0x3b, 0x7b, 0x95, 0xee, 0x5e, 0xb0, +0xef, 0xd6, 0xb5, 0xb9, 0xad, 0xca, 0x69, 0x84, 0x6d, 0x9b, 0x9b, 0xf3, +0x12, 0x1d, 0xe8, 0x39, 0x2c, 0xf7, 0xcd, 0xc3, 0xae, 0xc2, 0x02, 0xf8, +0x8f, 0xdd, 0xdd, 0x8b, 0x32, 0x98, 0x1e, 0x26, 0x8c, 0xf4, 0x8f, 0xc9, +0x98, 0x11, 0x2c, 0xdb, 0x4a, 0x91, 0x13, 0xa7, 0xd3, 0x28, 0x95, 0x0e, +0x6d, 0x3e, 0x11, 0x66, 0x6b, 0x4b, 0x54, 0x50, 0x01, 0xd6, 0xf3, 0x08, +0x7a, 0x19, 0x63, 0x22, 0xf6, 0x0d, 0x75, 0xd4, 0x43, 0xd7, 0x9f, 0xad, +0x03, 0x29, 0xe4, 0x51, 0x21, 0x29, 0x81, 0xf3, 0xe7, 0xcf, 0x57, 0xef, +0x18, 0xef, 0x92, 0x4d, 0xca, 0xf0, 0xf5, 0x34, 0x44, 0x76, 0x33, 0x25, +0x79, 0x6d, 0x32, 0x22, 0xe5, 0xf8, 0x3d, 0x94, 0x4d, 0xb8, 0x67, 0x5d, +0x1f, 0x0f, 0x33, 0xd9, 0x75, 0xd5, 0xc5, 0x56, 0xdc, 0x96, 0xf6, 0x56, +0x5c, 0x7e, 0xfa, 0x94, 0x50, 0x3f, 0x6c, 0x3e, 0x94, 0xea, 0xc3, 0xa2, +0x2e, 0x47, 0x70, 0xa2, 0xb5, 0x9f, 0xe7, 0xcb, 0x41, 0xaf, 0xee, 0xbb, +0x24, 0x93, 0x96, 0xd8, 0x75, 0xac, 0x4f, 0x1e, 0xea, 0xa8, 0x07, 0xb8, +0x6d, 0x57, 0xca, 0xe5, 0x21, 0x8f, 0x0a, 0xc9, 0xa9, 0xd0, 0xad, 0x4f, +0xd4, 0x39, 0xb7, 0x49, 0x19, 0x3e, 0x9d, 0x06, 0x19, 0xe9, 0xe9, 0x35, +0x42, 0x4c, 0xa8, 0xf5, 0x96, 0xb5, 0xe6, 0xd5, 0xc8, 0x52, 0x8e, 0x9f, +0xa0, 0x6e, 0x0f, 0xfe, 0x0a, 0x0f, 0x7f, 0x22, 0x14, 0x5c, 0x55, 0x00, +0xb1, 0x6c, 0x20, 0x86, 0xf0, 0xa6, 0xc8, 0xda, 0xa7, 0x02, 0xd2, 0x8c, +0xac, 0x37, 0x7f, 0x42, 0xbd, 0xb6, 0xd3, 0xea, 0x49, 0x77, 0xf9, 0x11, +0x54, 0x4b, 0xc9, 0x19, 0xa9, 0xc3, 0x47, 0x7a, 0xb4, 0xbb, 0xea, 0x94, +0x95, 0x42, 0xd6, 0x01, 0xde, 0x34, 0xb4, 0x51, 0x81, 0xf8, 0x84, 0x4d, +0x96, 0x2a, 0x29, 0x8a, 0x32, 0xf0, 0x49, 0x05, 0xab, 0xab, 0x95, 0x8e, +0x19, 0x2c, 0x5a, 0x7a, 0x19, 0x0b, 0x75, 0x3b, 0x0a, 0x80, 0x7b, 0x86, +0x16, 0x75, 0x71, 0x38, 0xb9, 0x7e, 0x9e, 0xdb, 0xac, 0x1d, 0xcf, 0x97, +0xeb, 0xb5, 0x05, 0x2c, 0x65, 0x1b, 0x44, 0x26, 0x35, 0x19, 0xcb, 0x0a, +0x37, 0x1e, 0xc6, 0xc7, 0x13, 0x07, 0x62, 0xf1, 0x51, 0xc2, 0x22, 0xec, +0x14, 0x7c, 0xc0, 0x0d, 0xa2, 0xf3, 0x25, 0x92, 0x51, 0xc5, 0x4d, 0x41, +0xb5, 0x0e, 0xea, 0x0f, 0x84, 0x87, 0x9e, 0x1d, 0xf2, 0xbe, 0x6d, 0xc9, +0xe2, 0x25, 0x10, 0x8d, 0xba, 0xb7, 0xea, 0x6d, 0xb9, 0x0b, 0xf0, 0x34, +0x13, 0x07, 0x89, 0x41, 0x52, 0x48, 0xdc, 0xce, 0x8f, 0x1e, 0x1c, 0xaa, +0x2b, 0x30, 0x5e, 0xb3, 0xa2, 0xb1, 0xfa, 0x73, 0x3e, 0x31, 0x54, 0x3e, +0xf1, 0x25, 0x39, 0x99, 0xa4, 0x50, 0x3d, 0xaa, 0xc2, 0xd2, 0xf8, 0x4b, +0x5d, 0x6e, 0x35, 0x1f, 0x0f, 0xaa, 0x8b, 0x1f, 0x77, 0x37, 0x5c, 0x42, +0x82, 0x38, 0x81, 0x24, 0xea, 0x5e, 0x54, 0x43, 0xa3, 0xb6, 0x1f, 0x8c, +0x82, 0xaa, 0x33, 0x94, 0xd8, 0xa0, 0xbc, 0x40, 0xe8, 0x66, 0x53, 0x98, +0x19, 0x4b, 0x08, 0xf3, 0x0a, 0x89, 0x7d, 0x62, 0x97, 0xa2, 0xa6, 0xb7, +0x7a, 0x5b, 0xd8, 0x64, 0x6c, 0x52, 0x80, 0x1e, 0x28, 0xea, 0xce, 0x1a, +0xe3, 0xf9, 0x7b, 0xc2, 0x04, 0x3d, 0xdf, 0x0b, 0x73, 0x10, 0x01, 0xb0, +0x0c, 0xe2, 0x9f, 0xaa, 0xa3, 0xd7, 0x05, 0x64, 0x10, 0xcb, 0x68, 0x5c, +0x55, 0x48, 0x81, 0x22, 0x4e, 0x36, 0x9d, 0x77, 0x36, 0xd7, 0x47, 0x3f, +0x0d, 0xb7, 0x9d, 0x3c, 0x88, 0x3a, 0x28, 0x92, 0x49, 0xe0, 0x13, 0x55, +0x0b, 0x60, 0x14, 0xb8, 0x29, 0x28, 0xd8, 0x11, 0xea, 0xb1, 0x4f, 0x61, +0xa2, 0x6d, 0x8b, 0x46, 0x41, 0xc1, 0x46, 0xf5, 0xaa, 0x90, 0x07, 0x6c, +0xc6, 0x3e, 0x19, 0xb4, 0x46, 0x35, 0x02, 0x91, 0x76, 0x84, 0x33, 0x51, +0xcf, 0x8f, 0x0e, 0x7d, 0xaa, 0x9f, 0x03, 0xa5, 0xfe, 0x48, 0x81, 0x30, +0xf4, 0xdf, 0x40, 0x28, 0xf7, 0xda, 0xf8, 0x19, 0xab, 0xbf, 0x8c, 0xec, +0xc1, 0x4f, 0xec, 0x8e, 0x46, 0x69, 0x5c, 0x62, 0xc0, 0xe4, 0x2b, 0x07, +0x86, 0x9a, 0x4f, 0x56, 0x91, 0x85, 0xd8, 0x64, 0xfd, 0x20, 0x77, 0x3b, +0x97, 0xd0, 0x88, 0x07, 0x7f, 0xb9, 0x3e, 0x99, 0xae, 0x5d, 0xbb, 0x62, +0x90, 0xa5, 0x00, 0x26, 0xd9, 0x14, 0x94, 0x7b, 0xc2, 0x4d, 0x21, 0x15, +0xa3, 0x43, 0x3d, 0xd0, 0x23, 0x1c, 0x22, 0x3e, 0x24, 0x1f, 0x55, 0x4f, +0x2f, 0xf6, 0x6a, 0x0e, 0x52, 0x44, 0xa0, 0x5a, 0xa6, 0xf3, 0xb2, 0x71, +0x66, 0x51, 0xfd, 0x8e, 0x6f, 0xa8, 0xf3, 0xe7, 0xa1, 0x7d, 0x3a, 0x1b, +0x3f, 0xd6, 0x4c, 0x1a, 0x3b, 0x49, 0x30, 0x9f, 0x9d, 0x06, 0x68, 0x84, +0x9d, 0x0b, 0x31, 0x79, 0xed, 0xe9, 0x68, 0xa0, 0x4e, 0xb0, 0x8d, 0xb8, +0x6f, 0x40, 0x85, 0x39, 0x09, 0x9b, 0xd3, 0x94, 0x45, 0x88, 0xa2, 0xb7, +0x76, 0x48, 0xdc, 0xd7, 0x73, 0xf0, 0x7f, 0x1b, 0x22, 0xd5, 0x49, 0xe9, +0xa6, 0x59, 0x99, 0xf8, 0xb3, 0x69, 0x17, 0x04, 0xa3, 0xc0, 0x85, 0x8a, +0x3f, 0x3b, 0x6c, 0x20, 0x11, 0xda, 0x91, 0xe4, 0x38, 0x8c, 0xa8, 0x94, +0xa8, 0x48, 0x07, 0xc3, 0xa2, 0xfd, 0xd2, 0x91, 0xd8, 0xfe, 0x91, 0xa0, +0x28, 0xef, 0x45, 0x5c, 0x93, 0x4f, 0x84, 0x82, 0xda, 0x4d, 0xc1, 0x0b, +0x8c, 0x51, 0xee, 0x2a, 0xc1, 0xa8, 0xd1, 0x00, 0x58, 0x56, 0xc6, 0xc5, +0x9e, 0x3d, 0x40, 0xce, 0xa7, 0xbb, 0xe0, 0x85, 0x34, 0x40, 0x02, 0x01, +0xc6, 0x3c, 0x42, 0x99, 0xa0, 0xac, 0xb8, 0x98, 0xe0, 0xf6, 0x3e, 0xa7, +0x0a, 0xad, 0x59, 0xc8, 0xa4, 0x0c, 0x33, 0x6d, 0x0a, 0x31, 0x3d, 0xe1, +0xb9, 0xc3, 0xf4, 0x44, 0x41, 0x3e, 0x89, 0x1b, 0xc7, 0x3e, 0x1e, 0xa0, +0xd9, 0xa7, 0x4a, 0x5d, 0x1e, 0xaa, 0x7a, 0x85, 0x58, 0x9f, 0x28, 0xc5, +0xae, 0xa8, 0x87, 0xaa, 0xda, 0xf6, 0x29, 0xcf, 0xa6, 0x03, 0xd8, 0x3c, +0x20, 0x7e, 0x5f, 0xee, 0x88, 0x27, 0xcb, 0xeb, 0xbd, 0xf4, 0x4c, 0x26, +0x0f, 0x01, 0x14, 0xe6, 0x71, 0x00, 0x9e, 0xde, 0x5b, 0x55, 0x1e, 0xd0, +0x32, 0x9c, 0x96, 0xda, 0x84, 0x3a, 0x78, 0x1e, 0xd9, 0x12, 0x9c, 0x24, +0x75, 0x58, 0x10, 0xfb, 0x85, 0x41, 0x91, 0xe0, 0x46, 0xd4, 0xc7, 0x97, +0xce, 0x6c, 0x04, 0x8d, 0xab, 0x1e, 0x34, 0x30, 0x8a, 0xf0, 0xf0, 0xdc, +0x85, 0xbc, 0x5e, 0x21, 0xd6, 0x27, 0x42, 0x0c, 0x74, 0x3d, 0xdb, 0xd7, +0x1a, 0x02, 0x5e, 0xc9, 0xda, 0x7c, 0x02, 0xdb, 0xa7, 0xd4, 0xb9, 0x79, +0xdf, 0x7d, 0x58, 0xb8, 0xba, 0x4a, 0xdf, 0x68, 0xd1, 0x56, 0xed, 0xdf, +0x4e, 0x8f, 0xee, 0x56, 0x44, 0x4f, 0x40, 0x9e, 0x79, 0x04, 0x43, 0x25, +0x4f, 0x62, 0xa5, 0x6c, 0xaa, 0x55, 0x1e, 0x26, 0xf3, 0xec, 0xae, 0x41, +0x96, 0x95, 0x78, 0xa8, 0x1e, 0x42, 0xff, 0x07, 0x20, 0x41, 0x72, 0x36, +0x8d, 0x36, 0x29, 0xba, 0x45, 0xbd, 0x57, 0x91, 0x9d, 0xaa, 0xd4, 0x36, +0x1f, 0x94, 0xc9, 0x84, 0x24, 0xaf, 0x10, 0x3d, 0x9b, 0x76, 0x61, 0x8a, +0x68, 0x70, 0x08, 0x04, 0xab, 0xf9, 0xb7, 0x07, 0x8a, 0x59, 0x39, 0xc5, +0x55, 0x16, 0xdf, 0x4e, 0xe8, 0x21, 0x3e, 0x13, 0xbd, 0xc8, 0x80, 0x1d, +0x6f, 0x80, 0xdc, 0x97, 0x24, 0x0a, 0xcb, 0x66, 0x93, 0x84, 0x42, 0x99, +0x27, 0xb6, 0x69, 0x7e, 0x7b, 0x83, 0xa0, 0x65, 0x3f, 0x29, 0xd7, 0x30, +0x1a, 0xab, 0x47, 0xa2, 0x95, 0x5e, 0xaf, 0x4d, 0x8d, 0x4c, 0xa1, 0x4e, +0x8a, 0xef, 0xa3, 0x4b, 0x20, 0x38, 0xd1, 0x53, 0x02, 0x07, 0x05, 0xfd, +0x15, 0x80, 0x04, 0x99, 0x8f, 0xee, 0x7a, 0x05, 0x05, 0x85, 0x34, 0x2b, +0x71, 0x90, 0x90, 0x44, 0x05, 0x1a, 0x05, 0x9e, 0x54, 0x3d, 0x1c, 0x10, +0xfa, 0xb0, 0xbf, 0x19, 0xfb, 0x77, 0x26, 0xad, 0x93, 0x25, 0x08, 0x8a, +0xb8, 0x26, 0xaf, 0x23, 0xe0, 0x5f, 0x57, 0x54, 0x05, 0x95, 0x7b, 0x3d, +0x5f, 0x9d, 0x80, 0x03, 0xdb, 0x40, 0xe8, 0xf2, 0xab, 0x65, 0xca, 0xd1, +0x9c, 0x1f, 0xb4, 0x79, 0xfd, 0x12, 0x6a, 0x19, 0xda, 0x07, 0x21, 0xf7, +0xc5, 0xcb, 0x41, 0x4c, 0x8a, 0x5e, 0x4b, 0x53, 0x1f, 0x8d, 0x84, 0x6c, +0x7a, 0x59, 0x21, 0x38, 0x51, 0x26, 0x02, 0x48, 0x50, 0xd8, 0x86, 0xd6, +0x2a, 0x84, 0xc7, 0x12, 0x31, 0x0e, 0x24, 0xc2, 0x4f, 0x76, 0x0a, 0x61, +0x2f, 0x1e, 0x50, 0xa6, 0x51, 0x83, 0x7a, 0x79, 0x18, 0x49, 0x7c, 0x55, +0x9a, 0xed, 0x93, 0xa9, 0x3a, 0x53, 0xa2, 0x65, 0xb1, 0xd2, 0xda, 0xb9, +0x56, 0xcf, 0xf4, 0x27, 0x60, 0xd6, 0xce, 0x25, 0x9c, 0x43, 0xbe, 0x9e, +0x65, 0x0f, 0x72, 0xca, 0x1d, 0x58, 0x8e, 0x40, 0xdd, 0x4e, 0x4b, 0x08, +0x11, 0x9a, 0x4e, 0xb1, 0x05, 0xc8, 0xdd, 0x52, 0x7d, 0x82, 0x2d, 0x20, +0x01, 0x52, 0x3f, 0x13, 0x50, 0xc1, 0x63, 0x2d, 0x47, 0xe0, 0x4b, 0x12, +0x27, 0x08, 0x73, 0x42, 0xb7, 0x96, 0x96, 0x85, 0x94, 0x3f, 0xa3, 0x65, +0x04, 0xd9, 0x76, 0x54, 0xc0, 0x47, 0xc3, 0x56, 0x9d, 0xa8, 0x2a, 0x71, +0x47, 0x2f, 0xbf, 0x5b, 0x87, 0x1e, 0xaf, 0x40, 0xa9, 0xc0, 0x3a, 0x8e, +0xc9, 0x5c, 0xbd, 0x4e, 0x0c, 0xa0, 0x36, 0xc9, 0xce, 0xef, 0xd3, 0x54, +0x1a, 0xc3, 0x4b, 0xfb, 0x2c, 0x9c, 0x06, 0x86, 0x61, 0x09, 0xa1, 0xd5, +0xad, 0x99, 0xf6, 0x0b, 0xf0, 0x00, 0x39, 0xf5, 0x50, 0xe9, 0xe9, 0x2e, +0xfb, 0xaf, 0x1c, 0x96, 0x11, 0x50, 0xdc, 0xb4, 0x76, 0x59, 0xcf, 0x9a, +0x99, 0xbe, 0x91, 0xe2, 0xf0, 0xb4, 0xa0, 0xa9, 0xab, 0xde, 0xe7, 0x05, +0x75, 0xd3, 0xf5, 0xf0, 0x27, 0x4b, 0x48, 0x50, 0xfc, 0x86, 0xac, 0x09, +0x32, 0xec, 0xa8, 0x05, 0x88, 0x98, 0x4a, 0xe5, 0x7d, 0x1a, 0x00, 0x60, +0xee, 0xa3, 0xa0, 0x32, 0xf5, 0x3b, 0xa4, 0xa6, 0x72, 0xb8, 0x72, 0x89, +0x90, 0xe4, 0x15, 0x12, 0x37, 0x0e, 0x1f, 0xd7, 0x5f, 0x27, 0x55, 0x9b, +0xfc, 0x26, 0x77, 0x9b, 0x17, 0x4a, 0x69, 0x3d, 0xea, 0x80, 0xd8, 0x39, +0xdf, 0x50, 0xc6, 0x18, 0x26, 0x63, 0xe7, 0x2a, 0x43, 0xde, 0x82, 0x5e, +0x05, 0x10, 0x89, 0xdf, 0x3c, 0x02, 0xb9, 0x72, 0xfa, 0x22, 0x50, 0xf2, +0xc7, 0xdc, 0xbe, 0xd1, 0x1d, 0x1f, 0x70, 0xf7, 0x3d, 0x7d, 0xc3, 0x68, +0xf6, 0x09, 0x7f, 0x90, 0xfe, 0x7a, 0xc4, 0xc3, 0x52, 0xe2, 0x89, 0xba, +0xb1, 0x34, 0xa3, 0x20, 0xac, 0x83, 0x9c, 0x6c, 0x32, 0x28, 0x50, 0xaf, +0xc3, 0xc9, 0x8d, 0x6d, 0xc9, 0x70, 0x42, 0x8c, 0x57, 0x48, 0x94, 0x07, +0x3b, 0x99, 0x7a, 0xaf, 0x34, 0x0a, 0xb2, 0x43, 0x73, 0x81, 0x9c, 0xa3, +0x6a, 0xb0, 0xd2, 0x42, 0xc5, 0xce, 0x38, 0xd8, 0x88, 0x75, 0xb2, 0xb3, +0xd3, 0x40, 0x03, 0x51, 0x47, 0xcf, 0x8c, 0xd3, 0x2b, 0x93, 0x13, 0xca, +0x61, 0x99, 0x2c, 0xaa, 0x9b, 0x65, 0x33, 0x32, 0x32, 0x48, 0x45, 0x9c, +0x3b, 0x77, 0x6e, 0xeb, 0xd6, 0xad, 0x7d, 0x45, 0x02, 0xe7, 0xd7, 0xa9, +0x53, 0xa7, 0x47, 0x8f, 0x1e, 0xb3, 0x67, 0xcf, 0xa6, 0x01, 0x29, 0xc5, +0xce, 0x10, 0x99, 0xe0, 0x0f, 0x88, 0x4c, 0xe0, 0x81, 0x3e, 0x5a, 0x34, +0x13, 0xc2, 0x55, 0xe7, 0xb5, 0x6b, 0x56, 0xf9, 0xc9, 0x33, 0x15, 0x3f, +0x72, 0x28, 0xa1, 0x02, 0x48, 0xa0, 0x67, 0xf3, 0x9e, 0xf4, 0x17, 0x8f, +0x25, 0xd1, 0x0e, 0xa5, 0xfa, 0x7d, 0x0e, 0xf4, 0x4a, 0x91, 0x4c, 0xee, +0x48, 0x03, 0x38, 0x3b, 0x83, 0xa0, 0xe1, 0xe8, 0x7d, 0xe5, 0xb8, 0x90, +0x9e, 0xab, 0xf0, 0x01, 0x9c, 0xc4, 0xf8, 0x3a, 0x08, 0x6b, 0xe5, 0x7f, +0x3a, 0xa4, 0x3c, 0xb6, 0x6d, 0x00, 0x29, 0xe0, 0x2a, 0x72, 0xc9, 0x50, +0xc5, 0x59, 0x6f, 0x38, 0xef, 0x4e, 0x00, 0xd3, 0xdd, 0xf3, 0xd4, 0x78, +0x65, 0x83, 0xc7, 0x4c, 0x44, 0xe7, 0x72, 0x28, 0xbb, 0xa8, 0xa8, 0x88, +0x62, 0xbb, 0x1e, 0xba, 0x6e, 0x93, 0xa2, 0x8d, 0x98, 0x44, 0x58, 0x00, +0x9d, 0x7f, 0x69, 0x46, 0x4c, 0x4b, 0x5f, 0x1a, 0xfb, 0xc2, 0x1f, 0xa8, +0x74, 0x26, 0x5d, 0xcf, 0xcf, 0x9c, 0x39, 0x43, 0x75, 0x02, 0x5c, 0xd7, +0x84, 0x88, 0x63, 0x01, 0x97, 0xfe, 0x2c, 0x9e, 0xfb, 0x15, 0x56, 0x3c, +0xed, 0x96, 0xdf, 0x1d, 0x43, 0x06, 0x15, 0x22, 0x3b, 0x31, 0x5d, 0xac, +0x84, 0x0a, 0x15, 0x14, 0x2c, 0xb2, 0xa4, 0x54, 0xb2, 0xa8, 0x51, 0x28, +0xd9, 0xda, 0x71, 0x12, 0xef, 0x59, 0xda, 0x79, 0xdd, 0x9c, 0x76, 0x84, +0x64, 0x23, 0x9d, 0xab, 0xd0, 0xa6, 0xf9, 0xa3, 0x0a, 0xe8, 0x23, 0x7c, +0xd3, 0x65, 0xed, 0x88, 0xa6, 0xc6, 0xe8, 0x89, 0x59, 0xc9, 0x5d, 0xe2, +0xb5, 0x4a, 0xf9, 0xd7, 0x7d, 0x64, 0x94, 0x51, 0x22, 0x0c, 0x91, 0x6b, +0x19, 0x76, 0xda, 0x80, 0xd2, 0x9e, 0xa8, 0xf8, 0x28, 0x28, 0xcb, 0x69, +0x7f, 0xb7, 0x06, 0x3f, 0x24, 0xe2, 0x51, 0xfd, 0x52, 0x6f, 0xab, 0x97, +0x9f, 0x9f, 0xaf, 0xf7, 0x08, 0x27, 0xa5, 0x81, 0x48, 0x24, 0x22, 0x7c, +0x49, 0x19, 0x3f, 0xbc, 0xaa, 0x3b, 0x91, 0xb3, 0x4c, 0x1b, 0x1b, 0x31, +0x71, 0xb8, 0xea, 0x46, 0xb4, 0xea, 0x42, 0x01, 0x50, 0x9d, 0x9d, 0x21, +0x6e, 0x7e, 0x05, 0x21, 0x70, 0x0f, 0x02, 0x8a, 0x29, 0x07, 0x28, 0xbd, +0xcf, 0x09, 0xe9, 0xa3, 0x4d, 0x30, 0x19, 0x5a, 0x78, 0x1e, 0xa4, 0xd7, +0xf5, 0x9a, 0x35, 0x6b, 0xd6, 0xad, 0x5b, 0x87, 0x17, 0x82, 0x6e, 0xbc, +0xf0, 0x07, 0xf0, 0x40, 0xf3, 0x2e, 0x3c, 0x74, 0xb4, 0x11, 0xa3, 0x60, +0x07, 0xfd, 0xbb, 0x08, 0xfb, 0xf3, 0xd0, 0x6b, 0xb4, 0xfc, 0xe8, 0xb2, +0x72, 0x47, 0x0e, 0x25, 0x54, 0x20, 0x3b, 0xd1, 0x01, 0x4d, 0xa7, 0x39, +0xfc, 0xc7, 0x58, 0x54, 0x3e, 0x3a, 0x31, 0x9a, 0x44, 0xcd, 0x0d, 0x73, +0xdb, 0x43, 0xf4, 0x14, 0xc2, 0xd0, 0x1b, 0xf5, 0xda, 0x27, 0x50, 0xce, +0x24, 0x2e, 0x90, 0xa0, 0x40, 0x62, 0x96, 0x48, 0x8a, 0x90, 0x5d, 0x1c, +0xb7, 0x83, 0x94, 0xa5, 0xe9, 0xd4, 0x2c, 0x8b, 0x30, 0x24, 0xec, 0xad, +0xc0, 0x09, 0x9b, 0x92, 0x4f, 0xc3, 0xfa, 0x7a, 0x32, 0x65, 0x5e, 0x6d, +0x76, 0x0a, 0x57, 0x23, 0xb3, 0xe5, 0x93, 0xea, 0x40, 0x60, 0x92, 0x1c, +0x08, 0x3f, 0xb8, 0x9f, 0xd1, 0x0a, 0x68, 0x32, 0x8d, 0x7a, 0x80, 0x44, +0x04, 0xe9, 0x83, 0x13, 0xfe, 0xe7, 0xa0, 0x47, 0xb5, 0xf4, 0x9f, 0x86, +0x2d, 0x10, 0xb8, 0x41, 0xd1, 0x1a, 0xfa, 0xb0, 0xd0, 0xee, 0x99, 0x08, +0x0e, 0xf8, 0x30, 0xa5, 0x3a, 0xc0, 0x03, 0x22, 0x13, 0xa5, 0xf6, 0x3d, +0x77, 0x79, 0xae, 0x5c, 0xc2, 0x2d, 0xd7, 0xbb, 0x87, 0x0c, 0x2a, 0xcc, +0x7d, 0x8c, 0x08, 0x7c, 0x42, 0xb6, 0x31, 0x27, 0x52, 0xfb, 0x4a, 0x85, +0x96, 0xe7, 0x93, 0x4b, 0x40, 0x20, 0xf7, 0x8c, 0x21, 0x8d, 0xe5, 0xaf, +0xec, 0xe5, 0x96, 0x36, 0xd3, 0xa0, 0xdc, 0x4b, 0x1f, 0x04, 0xa9, 0x86, +0x5d, 0x5c, 0xef, 0x33, 0xe4, 0xf5, 0x16, 0x28, 0x15, 0x6c, 0xf6, 0xec, +0xf1, 0x04, 0x75, 0xe3, 0x5f, 0xc3, 0x78, 0x0a, 0x71, 0x43, 0xe2, 0xb8, +0xdb, 0xe8, 0x6c, 0x2d, 0xad, 0xdd, 0xe1, 0x03, 0x60, 0x80, 0x7e, 0x37, +0x1c, 0x38, 0xa7, 0xf9, 0x52, 0x9a, 0x5e, 0xa3, 0x39, 0x10, 0xf7, 0xca, +0x55, 0x20, 0x81, 0xe6, 0x8e, 0xd2, 0xdb, 0x56, 0x9a, 0x9a, 0xe2, 0x27, +0x95, 0x00, 0xa7, 0x70, 0x0a, 0xfb, 0xb3, 0x89, 0xa5, 0x50, 0x42, 0x05, +0xd6, 0x0f, 0x64, 0x5c, 0xdd, 0x38, 0xe3, 0x95, 0x62, 0x2a, 0xeb, 0x04, +0x64, 0xfa, 0xfe, 0xfd, 0xfb, 0x53, 0x77, 0x0c, 0x92, 0x65, 0x0e, 0xd4, +0x6f, 0xc5, 0xe7, 0x48, 0x68, 0x5d, 0x9b, 0x36, 0x6d, 0xe8, 0xff, 0x4b, +0x83, 0x08, 0x0a, 0x57, 0x26, 0x26, 0x5e, 0x8c, 0x1d, 0x54, 0x93, 0xa4, +0x3e, 0x3e, 0x52, 0x0d, 0xf2, 0x0f, 0xb4, 0x4b, 0x68, 0xaa, 0x9d, 0xc9, +0x33, 0x3e, 0x5a, 0x32, 0xe7, 0x23, 0xf6, 0x40, 0xd9, 0xd2, 0xbe, 0x1a, +0x65, 0x80, 0x9e, 0xce, 0x02, 0x0f, 0xd4, 0x03, 0xfc, 0x0c, 0x34, 0xaa, +0xa3, 0xe0, 0x83, 0x1c, 0x00, 0x86, 0x2f, 0xa5, 0xe3, 0x35, 0x3d, 0xad, +0x31, 0x2e, 0x71, 0x09, 0xf6, 0x25, 0x0a, 0x9c, 0x11, 0xc1, 0xf1, 0xf5, +0xd7, 0x5f, 0x0b, 0x1e, 0x82, 0xd5, 0xee, 0xd9, 0x26, 0x21, 0x56, 0xa9, +0xd3, 0x42, 0x06, 0x15, 0xbc, 0x27, 0xcc, 0xe4, 0x70, 0x76, 0xbd, 0x99, +0xb4, 0x07, 0xba, 0xc1, 0x4c, 0x59, 0xa3, 0x46, 0x0d, 0xac, 0x2b, 0x88, +0xe9, 0x50, 0x58, 0x87, 0x0e, 0x1d, 0xba, 0x74, 0xe9, 0xd2, 0xbd, 0x7b, +0x77, 0x8c, 0x2d, 0x1c, 0xb8, 0x3b, 0x90, 0xc5, 0xf9, 0x1e, 0x09, 0x1e, +0x83, 0x8f, 0xe7, 0x5e, 0xeb, 0x96, 0x77, 0x81, 0x1c, 0xd1, 0x71, 0x09, +0x98, 0x63, 0x34, 0xb4, 0x5b, 0x9a, 0x5f, 0xf5, 0xeb, 0xd7, 0x8f, 0xcf, +0x0c, 0x4b, 0xc8, 0x10, 0x61, 0x8b, 0x0b, 0x17, 0x2e, 0x44, 0xf1, 0xc5, +0x31, 0x4c, 0x0b, 0x6d, 0x3e, 0xc8, 0xc1, 0x67, 0xf5, 0x0d, 0x6a, 0x2e, +0x45, 0x8b, 0x11, 0xfa, 0x99, 0x0c, 0xd9, 0x9e, 0xf0, 0x07, 0xb8, 0x04, +0xd2, 0x0e, 0x5b, 0xfb, 0x5d, 0x77, 0xdd, 0xc5, 0xff, 0x83, 0x06, 0x0d, +0xa2, 0xd3, 0x1c, 0x59, 0x6f, 0x6c, 0x04, 0x39, 0x39, 0x39, 0x3c, 0x0b, +0xd0, 0xa2, 0xac, 0x86, 0xb4, 0xe7, 0xe2, 0x71, 0xd0, 0x16, 0x68, 0xf9, +0x05, 0x8a, 0xd8, 0xfb, 0xe9, 0xc1, 0x2e, 0x0d, 0xaa, 0x11, 0x7b, 0x88, +0xc5, 0xc0, 0x64, 0x04, 0xa1, 0x4b, 0x77, 0x77, 0xfc, 0x6e, 0x78, 0xa3, +0x69, 0x3e, 0x2d, 0x07, 0xbf, 0xf2, 0x25, 0x7f, 0x62, 0x8b, 0x81, 0x39, +0x70, 0x26, 0x3d, 0x7c, 0x51, 0x1e, 0xc4, 0x31, 0x17, 0x66, 0xd1, 0xaf, +0xfe, 0x81, 0xcd, 0xc0, 0x1e, 0x91, 0x30, 0x5d, 0x14, 0xc2, 0x3f, 0x3e, +0xf9, 0x37, 0x62, 0x39, 0x5d, 0xc5, 0xd6, 0xc5, 0x6b, 0xe3, 0x5d, 0xb2, +0xc3, 0x19, 0xea, 0x66, 0x63, 0x51, 0x81, 0xb2, 0xd9, 0x89, 0x29, 0x78, +0x4a, 0x93, 0x1e, 0xf6, 0x4e, 0x88, 0x0f, 0x9b, 0x0c, 0x44, 0x86, 0x1f, +0x8a, 0x83, 0x0d, 0x98, 0x83, 0xb0, 0x05, 0x0e, 0x74, 0x50, 0x39, 0xe4, +0x57, 0xbe, 0xc7, 0xfc, 0xc2, 0x39, 0x38, 0xad, 0xd0, 0x44, 0x7b, 0xf7, +0xee, 0x0d, 0x4e, 0xf4, 0x2a, 0x7a, 0x3a, 0x24, 0x40, 0x02, 0x9b, 0x3d, +0x74, 0x4c, 0xa7, 0x50, 0x51, 0x58, 0xb9, 0x56, 0x46, 0x56, 0xc3, 0x62, +0x08, 0xe2, 0xc0, 0x9e, 0xb3, 0x7e, 0xfd, 0x7a, 0xd1, 0x62, 0x49, 0x45, +0x20, 0x82, 0x48, 0x0e, 0x3e, 0xcb, 0x37, 0x48, 0xf6, 0x50, 0x33, 0xe7, +0x20, 0xee, 0x93, 0xea, 0xc9, 0xf9, 0xa2, 0x2e, 0x1f, 0x3a, 0x74, 0x08, +0xc5, 0x80, 0xbd, 0x9c, 0xff, 0x11, 0xfa, 0x39, 0x19, 0x85, 0x98, 0xc1, +0xb9, 0x91, 0x1c, 0xea, 0x59, 0xf8, 0x52, 0x14, 0x65, 0x89, 0x4d, 0x62, +0xd7, 0x57, 0xfd, 0xa4, 0xd9, 0xef, 0xa5, 0xa9, 0x3b, 0xe4, 0x0e, 0x48, +0x10, 0x8a, 0x38, 0x80, 0x8a, 0x1c, 0xd2, 0xf2, 0x9c, 0x3f, 0x11, 0xb5, +0x81, 0xb0, 0x24, 0x78, 0x10, 0xfb, 0x92, 0xb4, 0x30, 0x2d, 0xa7, 0x37, +0x18, 0xba, 0xc3, 0x56, 0x75, 0x54, 0x60, 0x15, 0x41, 0x30, 0x40, 0x1a, +0x86, 0xb0, 0xa8, 0xb5, 0x3c, 0x7e, 0xfc, 0x78, 0x9d, 0x40, 0x21, 0x14, +0x28, 0x0c, 0xf2, 0x62, 0xc7, 0x85, 0xe6, 0x14, 0x15, 0xa2, 0x59, 0x42, +0x70, 0xb4, 0xf7, 0x2c, 0x29, 0x29, 0x41, 0xbc, 0x96, 0x83, 0xcf, 0x7c, +0xa3, 0xec, 0x36, 0x9c, 0x8c, 0x1a, 0x0a, 0x9d, 0x41, 0x85, 0x50, 0x1e, +0xc1, 0x0e, 0x84, 0x00, 0x21, 0xea, 0xb0, 0x2b, 0x03, 0x42, 0x3c, 0x24, +0xb4, 0x8a, 0x03, 0x09, 0xe0, 0x07, 0xa2, 0xe7, 0x16, 0xa2, 0xb3, 0x42, +0xb5, 0x32, 0x32, 0x03, 0x92, 0xb1, 0x29, 0x82, 0x3b, 0x07, 0x3d, 0xa7, +0xa1, 0x6f, 0x14, 0x59, 0x14, 0x5f, 0x24, 0x78, 0xf2, 0x9b, 0xe5, 0xe0, +0x33, 0x85, 0xd3, 0xe5, 0x1b, 0x14, 0x62, 0x08, 0x1a, 0xd2, 0x87, 0x2d, +0x70, 0x3e, 0x07, 0x27, 0xe3, 0xa0, 0xa4, 0x01, 0x29, 0xf2, 0x0f, 0x7b, +0x3f, 0xb4, 0xce, 0x08, 0x8c, 0xc6, 0xf8, 0xdc, 0x48, 0x0e, 0xf5, 0x2c, +0xdc, 0x91, 0x4b, 0x18, 0x84, 0x34, 0x51, 0x4e, 0x86, 0x09, 0xe8, 0x3d, +0xdb, 0x85, 0x04, 0x55, 0xa3, 0x5e, 0x77, 0x1f, 0x42, 0x97, 0x52, 0x2b, +0x72, 0xe6, 0x55, 0x17, 0x15, 0xaa, 0x97, 0x36, 0xa2, 0x33, 0x01, 0x6a, +0x50, 0x0f, 0xa1, 0x50, 0x60, 0x43, 0xf6, 0x5d, 0x68, 0x05, 0x2a, 0xc7, +0x0e, 0x03, 0x91, 0x41, 0x28, 0x90, 0x1d, 0x41, 0x0a, 0x68, 0x93, 0xd8, +0xdd, 0x39, 0xf3, 0xec, 0xd9, 0xb3, 0x04, 0x3f, 0x23, 0x52, 0x9f, 0x3b, +0x77, 0x0e, 0x09, 0x5b, 0x0e, 0x3e, 0xf3, 0x0d, 0xdf, 0x63, 0x7e, 0x81, +0xfe, 0x38, 0x19, 0xa2, 0x3c, 0x76, 0xec, 0x18, 0x23, 0x40, 0xdf, 0x04, +0xc3, 0x41, 0xf7, 0x20, 0x44, 0x9c, 0x00, 0x80, 0x8d, 0x7d, 0x9d, 0x7b, +0x41, 0xa0, 0x10, 0x31, 0x12, 0x0b, 0x27, 0xb3, 0x9d, 0x33, 0xb8, 0x8c, +0x8c, 0xec, 0x8e, 0xbc, 0x4e, 0x6a, 0x3f, 0x07, 0xfa, 0x2b, 0xb5, 0xf4, +0x44, 0x70, 0xc7, 0xa4, 0x83, 0xd5, 0x1f, 0x24, 0xcb, 0xc1, 0xaf, 0x72, +0xf0, 0x19, 0x1d, 0x17, 0x03, 0x28, 0xa7, 0x71, 0x32, 0x64, 0xcd, 0xc1, +0x37, 0x14, 0x56, 0x82, 0xbe, 0x09, 0xac, 0xe0, 0x31, 0x39, 0x8d, 0xbf, +0x32, 0x4f, 0x76, 0x01, 0x66, 0x08, 0xf5, 0xcb, 0xb3, 0xf0, 0x2b, 0x5a, +0x04, 0x8f, 0x40, 0x14, 0x06, 0x5e, 0x67, 0x82, 0xba, 0x11, 0x90, 0x10, +0x84, 0x42, 0xbd, 0x97, 0x4a, 0x45, 0x12, 0xba, 0x4f, 0xf7, 0xaa, 0xba, +0xa8, 0x90, 0x9c, 0x0a, 0xa4, 0x02, 0x44, 0x61, 0xd4, 0x4a, 0xa8, 0x01, +0x12, 0x81, 0x3a, 0xe5, 0x20, 0x30, 0x01, 0x59, 0x1c, 0xd2, 0x81, 0x46, +0xa1, 0x4b, 0xb6, 0x5b, 0x5a, 0x51, 0x41, 0x8e, 0x50, 0x0c, 0x89, 0xc5, +0xb4, 0x1a, 0x51, 0xf2, 0x34, 0x9a, 0x89, 0x1c, 0x22, 0x70, 0x43, 0x7c, +0x8c, 0x86, 0xfb, 0x16, 0x32, 0x65, 0x4c, 0xae, 0x85, 0xe6, 0x40, 0x08, +0x9b, 0x34, 0x3b, 0xb1, 0xe2, 0x24, 0x80, 0x01, 0x33, 0x0e, 0x78, 0x03, +0x6c, 0xdc, 0x17, 0x8a, 0x14, 0x23, 0x26, 0x83, 0x33, 0xb2, 0x88, 0xe9, +0xf0, 0x31, 0x0e, 0x84, 0x75, 0x91, 0xd7, 0xc9, 0x66, 0x46, 0x56, 0x41, +0x4a, 0x61, 0xce, 0x96, 0x07, 0x32, 0x0c, 0xde, 0x31, 0xa8, 0x99, 0x93, +0xb1, 0x38, 0x73, 0x20, 0x02, 0x21, 0xdb, 0x88, 0x09, 0x88, 0xbf, 0x32, +0x02, 0x03, 0x42, 0xf1, 0x04, 0x20, 0x31, 0x43, 0x18, 0x08, 0x9a, 0x31, +0x9f, 0x51, 0xa6, 0xf9, 0x92, 0x9b, 0x72, 0x23, 0x51, 0x24, 0x70, 0xb1, +0xa1, 0x22, 0x47, 0x85, 0x1f, 0x9f, 0x68, 0xdd, 0xfe, 0xc9, 0x55, 0x1a, +0x15, 0xe2, 0xc5, 0x83, 0x08, 0xa0, 0x06, 0xa8, 0x19, 0xa2, 0x47, 0xfe, +0x96, 0x03, 0x1a, 0x65, 0xdf, 0x85, 0xb2, 0xe9, 0x16, 0x29, 0x30, 0x10, +0xba, 0x51, 0x3a, 0x25, 0xd4, 0x03, 0xfd, 0x41, 0x76, 0x1c, 0xc8, 0xd6, +0xf2, 0x81, 0x6f, 0xf8, 0x1e, 0xad, 0x14, 0xe2, 0xe3, 0x64, 0xc6, 0x84, +0xec, 0x18, 0x81, 0x3d, 0x9e, 0x9d, 0x9b, 0xbd, 0x1f, 0x84, 0xb0, 0x37, +0x0b, 0x43, 0x00, 0x09, 0x6c, 0xea, 0xdc, 0x85, 0xfb, 0x42, 0xa3, 0x9c, +0x0c, 0xb4, 0x84, 0x2e, 0x19, 0x0a, 0x00, 0x40, 0xe2, 0x1c, 0x4c, 0x8f, +0x03, 0x18, 0x40, 0xdc, 0xc8, 0xf7, 0xec, 0xdf, 0x1c, 0x90, 0xac, 0xf9, +0x40, 0x9a, 0xe7, 0x71, 0x20, 0x68, 0x85, 0x19, 0x3e, 0xf3, 0x8d, 0x04, +0x1a, 0xf1, 0x81, 0xef, 0x19, 0x10, 0x6c, 0xc8, 0x0c, 0x05, 0x6f, 0x7c, +0x16, 0xc8, 0xe9, 0x10, 0x0a, 0xa7, 0xaa, 0x33, 0xf6, 0x89, 0xb5, 0xc2, +0xce, 0xac, 0xba, 0xa8, 0x10, 0x29, 0x59, 0x2c, 0x51, 0x90, 0x0b, 0x94, +0x0d, 0x7d, 0x40, 0xca, 0x72, 0xc8, 0x56, 0xcd, 0x37, 0xec, 0xb8, 0xd0, +0xba, 0x52, 0x28, 0x39, 0x13, 0x52, 0x43, 0xa1, 0x84, 0xc8, 0xb8, 0x90, +0x43, 0xc8, 0x94, 0x43, 0x7e, 0xe5, 0x7b, 0xfe, 0x0a, 0x05, 0xb3, 0x37, +0x73, 0x15, 0xd7, 0x32, 0x02, 0xc4, 0x07, 0xc5, 0xc3, 0x49, 0xd8, 0x95, +0x01, 0x18, 0x07, 0x18, 0x80, 0x27, 0xf0, 0xa5, 0xdc, 0x45, 0xf1, 0x01, +0xa1, 0x63, 0xc6, 0x51, 0x44, 0x8f, 0xda, 0xca, 0xa1, 0x2c, 0x9b, 0x9e, +0xdf, 0x9c, 0x38, 0xec, 0xe1, 0x81, 0xea, 0x50, 0xfe, 0x01, 0xa9, 0x14, +0xca, 0xb0, 0x6a, 0x86, 0x4c, 0x52, 0x9e, 0x05, 0xb0, 0xc9, 0x4d, 0x45, +0x45, 0x8e, 0x4c, 0x97, 0x42, 0x85, 0x41, 0x82, 0x1b, 0x55, 0x69, 0x54, +0x08, 0x30, 0xc4, 0x9d, 0x07, 0x65, 0xc8, 0x56, 0x2a, 0x7b, 0x33, 0x34, +0xcd, 0x21, 0x3b, 0xb4, 0x60, 0x40, 0x27, 0x56, 0x21, 0x53, 0xa1, 0x54, +0xfd, 0x90, 0x2f, 0xf9, 0x2b, 0x03, 0xea, 0x08, 0x61, 0x1c, 0x31, 0xdd, +0x28, 0x96, 0x22, 0xdc, 0x40, 0x6e, 0xa4, 0x6e, 0x21, 0x60, 0x30, 0x0c, +0x0b, 0x8d, 0x0a, 0x99, 0xda, 0x94, 0x67, 0xcc, 0x7a, 0xb0, 0x52, 0x94, +0x05, 0x30, 0x6a, 0x86, 0x02, 0x3c, 0xfd, 0x59, 0x7c, 0xba, 0x51, 0x45, +0x92, 0x51, 0x98, 0xdd, 0xab, 0xaa, 0xa3, 0xc2, 0xb0, 0xdc, 0x06, 0x92, +0x0a, 0xe2, 0xcb, 0xf0, 0x60, 0xbd, 0x09, 0xe2, 0x5d, 0xa2, 0x43, 0x85, +0xc4, 0x0a, 0x84, 0x18, 0x2a, 0x42, 0x62, 0x4d, 0xa3, 0x93, 0x0c, 0xf5, +0x15, 0x88, 0xa2, 0x22, 0xd4, 0xdf, 0x60, 0x74, 0xfe, 0xc1, 0x5f, 0x81, +0x28, 0x2a, 0x82, 0xbf, 0xa6, 0xd1, 0x11, 0x43, 0x7d, 0x05, 0xa2, 0xa8, +0x08, 0xf5, 0x37, 0x18, 0x9d, 0x7f, 0xf0, 0x57, 0x20, 0x8a, 0x8a, 0xe0, +0xaf, 0x69, 0x74, 0xc4, 0x50, 0x5f, 0x81, 0x8b, 0xa8, 0xc8, 0xcc, 0xcc, +0x24, 0xae, 0x81, 0x6e, 0x29, 0x78, 0x79, 0xa3, 0x47, 0x74, 0x05, 0x22, +0x79, 0x05, 0x40, 0x01, 0x58, 0x00, 0x11, 0x0e, 0xd2, 0x03, 0x88, 0x5e, +0x4e, 0x4e, 0x4e, 0x26, 0x78, 0x36, 0x7a, 0x44, 0x57, 0x20, 0x92, 0x57, +0x00, 0x14, 0x80, 0x05, 0x10, 0xf1, 0xff, 0x0a, 0xfb, 0x09, 0x6c, 0x5e, +0xaf, 0x2e, 0x17, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, +0x42, 0x60, 0x82, }; diff --git a/Source/Core/InputCommon/InputCommon.vcxproj b/Source/Core/InputCommon/InputCommon.vcxproj index 03aaf1b3ea..4b2cd7cfeb 100644 --- a/Source/Core/InputCommon/InputCommon.vcxproj +++ b/Source/Core/InputCommon/InputCommon.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,153 +19,43 @@ - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F} - InputCommon + {6BBD47CF-91FD-4077-B676-8B76980178A9} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - ..\Common\Src;..\..\..\Externals\SDL\Include_1.2;%(AdditionalIncludeDirectories) - - - true - - - - - - ..\Common\Src;..\..\..\Externals\SDL\Include_1.2;%(AdditionalIncludeDirectories) - - - true - - - - - - ..\Common\Src;..\..\..\Externals\SDL\Include_1.2;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - ..\Common\Src;..\..\..\Externals\SDL\Include_1.2;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - ..\Common\Src;..\..\..\Externals\SDL\Include_1.2;%(AdditionalIncludeDirectories) - - - true - true - true - - - - - - ..\Common\Src;..\..\..\Externals\SDL\Include_1.2;%(AdditionalIncludeDirectories) - - - true - true - true - - - - + + + Create + @@ -181,22 +63,27 @@ - - + + - + + + + + {2e6c348c-c75c-4d94-8d1e-9c1fcbf3efe4} + - + \ No newline at end of file diff --git a/Source/Core/InputCommon/InputCommon.vcxproj.filters b/Source/Core/InputCommon/InputCommon.vcxproj.filters index c93a9289f4..0f28bafa56 100644 --- a/Source/Core/InputCommon/InputCommon.vcxproj.filters +++ b/Source/Core/InputCommon/InputCommon.vcxproj.filters @@ -1,34 +1,49 @@ - + + + + {3a755a86-0efa-4396-bf79-bb3a1910764d} + + + {0289ef91-50f5-4c16-9fa4-ff4c4d8208e7} + + + {770bf6f3-b0c3-4731-be52-46f54b4cb319} + + + {07bad1aa-7e03-4f5c-ade2-a44857c5cbc3} + + - - ControllerInterface\SDL - - - ControllerInterface\XInput - - - ControllerInterface - - + ControllerInterface\DInput ControllerInterface\DInput - + ControllerInterface\DInput - - ControllerInterface + + ControllerInterface\XInput + + + ControllerInterface\SDL ControllerInterface + + ControllerInterface + + + ControllerInterface + + @@ -36,12 +51,21 @@ - - ControllerInterface\SDL + + ControllerInterface\DInput + + + ControllerInterface\DInput + + + ControllerInterface\DInput ControllerInterface\XInput + + ControllerInterface\SDL + ControllerInterface @@ -51,34 +75,9 @@ ControllerInterface - - ControllerInterface\DInput - - - ControllerInterface\DInput - - - ControllerInterface\DInput - - - ControllerInterface\DInput - + - + - - - {63655b75-3fd6-4cd0-814a-eb9f3505f91d} - - - {64f2ab35-5cce-40a5-a4d3-232710267e05} - - - {08565cb5-f959-45dc-90b1-93a9c0135478} - - - {5a9c1b94-2eab-4357-b44f-87d5db50da3d} - - - + \ No newline at end of file diff --git a/Source/Core/InputCommon/Src/ControllerEmu.cpp b/Source/Core/InputCommon/Src/ControllerEmu.cpp index 328fcb8c2f..e2e37789c7 100644 --- a/Source/Core/InputCommon/Src/ControllerEmu.cpp +++ b/Source/Core/InputCommon/Src/ControllerEmu.cpp @@ -221,8 +221,8 @@ void ControllerEmu::SaveConfig(IniFile::Section *sec, const std::string& base) ControllerEmu::AnalogStick::AnalogStick(const char* const _name) : ControlGroup(_name, GROUP_TYPE_STICK) { - for (unsigned int i = 0; i < 4; ++i) - controls.push_back(new Input(named_directions[i])); + for (auto& named_direction : named_directions) + controls.push_back(new Input(named_direction)); controls.push_back(new Input(_trans("Modifier"))); @@ -290,8 +290,8 @@ ControllerEmu::Cursor::Cursor(const char* const _name) : ControlGroup(_name, GROUP_TYPE_CURSOR) , m_z(0) { - for (unsigned int i = 0; i < 4; ++i) - controls.push_back(new Input(named_directions[i])); + for (auto& named_direction : named_directions) + controls.push_back(new Input(named_direction)); controls.push_back(new Input("Forward")); controls.push_back(new Input("Backward")); controls.push_back(new Input(_trans("Hide"))); diff --git a/Source/Core/InputCommon/Src/ControllerEmu.h b/Source/Core/InputCommon/Src/ControllerEmu.h index 5dc54b463f..750aa692c4 100644 --- a/Source/Core/InputCommon/Src/ControllerEmu.h +++ b/Source/Core/InputCommon/Src/ControllerEmu.h @@ -42,7 +42,7 @@ enum SETTING_SQUARE, }; -const char * const named_directions[] = +const char * const named_directions[] = { "Up", "Down", @@ -109,7 +109,7 @@ public: ControlGroup(const char* const _name, const unsigned int _type = GROUP_TYPE_OTHER) : name(_name), type(_type) {} virtual ~ControlGroup(); - + virtual void LoadConfig(IniFile::Section *sec, const std::string& defdev = "", const std::string& base = "" ); virtual void SaveConfig(IniFile::Section *sec, const std::string& defdev = "", const std::string& base = "" ); @@ -325,7 +325,7 @@ public: { // this section might be all wrong, but its working good enough, I think - ControlState ang = atan2(yy, xx); + ControlState ang = atan2(yy, xx); ControlState ang_sin = sin(ang); ControlState ang_cos = cos(ang); @@ -352,7 +352,7 @@ public: // this is kinda silly here // gui being open will make this happen 2x as fast, o well - + // silly if (step) { @@ -391,7 +391,7 @@ public: m_z = std::max(m_z - 0.1f, zz); *z = m_z; - + // hide if (controls[6]->control_ref->State() > 0.5f) { diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp index bc1e115c17..7287c380d5 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp @@ -99,7 +99,7 @@ void ControllerInterface::Shutdown() m_devices.clear(); #ifdef CIFACE_USE_XINPUT - // nothing needed + ciface::XInput::DeInit(); #endif #ifdef CIFACE_USE_DINPUT // nothing needed @@ -249,7 +249,7 @@ Device::Control* ControllerInterface::InputReference::Detect(const unsigned int if (device->Inputs().size() == 0) return NULL; - // get starting state of all inputs, + // get starting state of all inputs, // so we can ignore those that were activated at time of Detect start std::vector::const_iterator i = device->Inputs().begin(), @@ -308,7 +308,7 @@ Device::Control* ControllerInterface::OutputReference::Detect(const unsigned int device->UpdateOutput(); Common::SleepCurrentThread(10); } - + State(0); device->UpdateOutput(); } diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h index 00b4b2c07d..4efb8941b7 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h @@ -109,7 +109,7 @@ public: }; ControllerInterface() : m_is_init(false), m_hwnd(NULL) {} - + void SetHwnd(void* const hwnd); void Initialize(); void Shutdown(); diff --git a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp index fa33595ee8..7211559e93 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp @@ -76,17 +76,17 @@ void GetXInputGUIDS( std::vector& guids ) bstrNamespace = SysAllocString( L"\\\\.\\root\\cimv2" );if( bstrNamespace == NULL ) goto LCleanup; bstrClassName = SysAllocString( L"Win32_PNPEntity" ); if( bstrClassName == NULL ) goto LCleanup; bstrDeviceID = SysAllocString( L"DeviceID" ); if( bstrDeviceID == NULL ) goto LCleanup; - - // Connect to WMI + + // Connect to WMI hr = pIWbemLocator->ConnectServer( bstrNamespace, NULL, NULL, 0L, 0L, NULL, NULL, &pIWbemServices ); if( FAILED(hr) || pIWbemServices == NULL ) goto LCleanup; - // Switch security level to IMPERSONATE. - CoSetProxyBlanket( pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, + // Switch security level to IMPERSONATE. + CoSetProxyBlanket( pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE ); - hr = pIWbemServices->CreateInstanceEnum( bstrClassName, 0, NULL, &pEnumDevices ); + hr = pIWbemServices->CreateInstanceEnum( bstrClassName, 0, NULL, &pEnumDevices ); if( FAILED(hr) || pEnumDevices == NULL ) goto LCleanup; @@ -105,7 +105,7 @@ void GetXInputGUIDS( std::vector& guids ) if( SUCCEEDED( hr ) && var.vt == VT_BSTR && var.bstrVal != NULL ) { // Check if the device ID contains "IG_". If it does, then it's an XInput device - // This information can not be found from DirectInput + // This information can not be found from DirectInput if( wcsstr( var.bstrVal, L"IG_" ) ) { // If it does, then get the VID/PID from var.bstrVal @@ -122,7 +122,7 @@ void GetXInputGUIDS( std::vector& guids ) guids.push_back( dwVidPid ); //bIsXinputDevice = true; } - } + } SAFE_RELEASE( pDevices[iDevice] ); } } @@ -324,7 +324,7 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI { eff.cbTypeSpecificParams = sizeof(DIPERIODIC); } - + LPDIRECTINPUTEFFECT pEffect; if (SUCCEEDED(m_device->CreateEffect(force_type_names[f].guid, &eff, &pEffect, NULL))) { diff --git a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.h b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.h index ad383bd764..20b38c8a69 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.h @@ -88,7 +88,7 @@ public: Joystick(const LPDIRECTINPUTDEVICE8 device, const unsigned int index); ~Joystick(); - + std::string GetName() const; int GetId() const; std::string GetSource() const; diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp index d91fbc587c..b313559907 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp @@ -222,22 +222,22 @@ public: ControlExpression(ControlQualifier qualifier_, Device::Control *control_) : qualifier(qualifier_), control(control_) {} - virtual ControlState GetValue() + virtual ControlState GetValue() override { return control->ToInput()->GetState(); } - virtual void SetValue(ControlState value) + virtual void SetValue(ControlState value) override { control->ToOutput()->SetState(value); } - virtual int CountNumControls() + virtual int CountNumControls() override { return 1; } - virtual operator std::string() + virtual operator std::string() override { return "`" + (std::string)qualifier + "`"; } @@ -257,7 +257,7 @@ public: delete rhs; } - virtual ControlState GetValue() + virtual ControlState GetValue() override { ControlState lhsValue = lhs->GetValue(); ControlState rhsValue = rhs->GetValue(); @@ -275,7 +275,7 @@ public: } } - virtual void SetValue(ControlState value) + virtual void SetValue(ControlState value) override { // Don't do anything special with the op we have. // Treat "A & B" the same as "A | B". @@ -283,12 +283,12 @@ public: rhs->SetValue(value); } - virtual int CountNumControls() + virtual int CountNumControls() override { return lhs->CountNumControls() + rhs->CountNumControls(); } - virtual operator std::string() + virtual operator std::string() override { return OpName(op) + "(" + (std::string)(*lhs) + ", " + (std::string)(*rhs) + ")"; } @@ -306,7 +306,7 @@ public: delete inner; } - virtual ControlState GetValue() + virtual ControlState GetValue() override { ControlState value = inner->GetValue(); switch (op) @@ -319,7 +319,7 @@ public: } } - virtual void SetValue(ControlState value) + virtual void SetValue(ControlState value) override { switch (op) { @@ -330,12 +330,12 @@ public: } } - virtual int CountNumControls() + virtual int CountNumControls() override { return inner->CountNumControls(); } - virtual operator std::string() + virtual operator std::string() override { return OpName(op) + "(" + (std::string)(*inner) + ")"; } diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm index 6473f00e77..93de15daa4 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm +++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm @@ -222,9 +222,9 @@ Keyboard::Key::Key(IOHIDElementRef element, IOHIDDeviceRef device) }; const uint32_t keycode = IOHIDElementGetUsage(m_element); - for (uint32_t i = 0; i < sizeof named_keys / sizeof *named_keys; i++) - if (named_keys[i].code == keycode) { - m_name = named_keys[i].name; + for (auto & named_key : named_keys) + if (named_key.code == keycode) { + m_name = named_key.name; return; } diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp index 40c822c577..bcd3586dc6 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp @@ -7,18 +7,14 @@ #include #ifdef _WIN32 - #if SDL_VERSION_ATLEAST(1, 3, 0) - #pragma comment(lib, "SDL.1.3.lib") - #else - #pragma comment(lib, "SDL.lib") - #endif +#pragma comment(lib, "SDL2.lib") #endif namespace ciface { namespace SDL { - + std::string GetJoystickName(int index) { #if SDL_VERSION_ATLEAST(2, 0, 0) @@ -29,7 +25,7 @@ std::string GetJoystickName(int index) } void Init( std::vector& devices ) -{ +{ // this is used to number the joysticks // multiple joysticks with the same name shall get unique ids starting at 0 std::map name_counts; @@ -83,7 +79,7 @@ Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index, const unsi // get buttons for (u8 i = 0; i != SDL_JoystickNumButtons(m_joystick); ++i) AddInput(new Button(i, m_joystick)); - + // get hats for (u8 i = 0; i != SDL_JoystickNumHats(m_joystick); ++i) { @@ -155,7 +151,7 @@ Joystick::~Joystick() { #ifdef USE_SDL_HAPTIC if (m_haptic) - { + { // stop/destroy all effects SDL_HapticStopAll(m_haptic); std::list::iterator @@ -201,7 +197,7 @@ std::string Joystick::TriangleEffect::GetName() const return "Triangle"; } -void Joystick::ConstantEffect::SetState(const ControlState state) +void Joystick::ConstantEffect::SetState(ControlState state) { if (state) { @@ -219,7 +215,7 @@ void Joystick::ConstantEffect::SetState(const ControlState state) m_effect.changed = true; } -void Joystick::RampEffect::SetState(const ControlState state) +void Joystick::RampEffect::SetState(ControlState state) { if (state) { @@ -237,7 +233,7 @@ void Joystick::RampEffect::SetState(const ControlState state) m_effect.changed = true; } -void Joystick::SineEffect::SetState(const ControlState state) +void Joystick::SineEffect::SetState(ControlState state) { if (state) { @@ -260,7 +256,7 @@ void Joystick::SineEffect::SetState(const ControlState state) } #ifdef SDL_HAPTIC_SQUARE -void Joystick::SquareEffect::SetState(const ControlState state) +void Joystick::SquareEffect::SetState(ControlState state) { if (state) { @@ -283,7 +279,7 @@ void Joystick::SquareEffect::SetState(const ControlState state) } #endif // defined(SDL_HAPTIC_SQUARE) -void Joystick::TriangleEffect::SetState(const ControlState state) +void Joystick::TriangleEffect::SetState(ControlState state) { if (state) { @@ -310,7 +306,7 @@ bool Joystick::UpdateInput() { // each joystick is doin this, o well SDL_JoystickUpdate(); - + return true; } diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h index 9b9794c481..f1714b253e 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h @@ -43,9 +43,9 @@ private: class Button : public Core::Device::Input { public: - std::string GetName() const; + std::string GetName() const override; Button(u8 index, SDL_Joystick* js) : m_js(js), m_index(index) {} - ControlState GetState() const; + ControlState GetState() const override; private: SDL_Joystick* const m_js; const u8 m_index; @@ -54,9 +54,9 @@ private: class Axis : public Core::Device::Input { public: - std::string GetName() const; + std::string GetName() const override; Axis(u8 index, SDL_Joystick* js, Sint16 range) : m_js(js), m_range(range), m_index(index) {} - ControlState GetState() const; + ControlState GetState() const override; private: SDL_Joystick* const m_js; const Sint16 m_range; @@ -66,9 +66,9 @@ private: class Hat : public Input { public: - std::string GetName() const; + std::string GetName() const override; Hat(u8 index, SDL_Joystick* js, u8 direction) : m_js(js), m_direction(direction), m_index(index) {} - ControlState GetState() const; + ControlState GetState() const override; private: SDL_Joystick* const m_js; const u8 m_direction; @@ -81,7 +81,7 @@ private: public: std::string GetName() const; ConstantEffect(EffectIDState& effect) : m_effect(effect) {} - void SetState(const ControlState state); + void SetState(ControlState state); private: EffectIDState& m_effect; }; @@ -91,7 +91,7 @@ private: public: std::string GetName() const; RampEffect(EffectIDState& effect) : m_effect(effect) {} - void SetState(const ControlState state); + void SetState(ControlState state); private: EffectIDState& m_effect; }; @@ -101,7 +101,7 @@ private: public: std::string GetName() const; SineEffect(EffectIDState& effect) : m_effect(effect) {} - void SetState(const ControlState state); + void SetState(ControlState state); private: EffectIDState& m_effect; }; @@ -112,7 +112,7 @@ private: public: std::string GetName() const; SquareEffect(EffectIDState& effect) : m_effect(effect) {} - void SetState(const ControlState state); + void SetState(ControlState state); private: EffectIDState& m_effect; }; @@ -123,22 +123,22 @@ private: public: std::string GetName() const; TriangleEffect(EffectIDState& effect) : m_effect(effect) {} - void SetState(const ControlState state); + void SetState(ControlState state); private: EffectIDState& m_effect; }; #endif public: - bool UpdateInput(); - bool UpdateOutput(); + bool UpdateInput() override; + bool UpdateOutput() override; Joystick(SDL_Joystick* const joystick, const int sdl_index, const unsigned int index); ~Joystick(); - std::string GetName() const; - int GetId() const; - std::string GetSource() const; + std::string GetName() const override; + int GetId() const override; + std::string GetSource() const override; private: SDL_Joystick* const m_joystick; diff --git a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp index c687bef856..0aa639aae8 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.cpp @@ -10,7 +10,7 @@ static const struct { const char* const name; const WORD bitmask; -} named_buttons[] = +} named_buttons[] = { { "Button A", XINPUT_GAMEPAD_A }, { "Button B", XINPUT_GAMEPAD_B }, @@ -48,14 +48,60 @@ static const char* const named_motors[] = "Motor R" }; +static HMODULE hXInput = nullptr; + +typedef decltype(&XInputGetCapabilities) XInputGetCapabilities_t; +typedef decltype(&XInputSetState) XInputSetState_t; +typedef decltype(&XInputGetState) XInputGetState_t; + +static XInputGetCapabilities_t PXInputGetCapabilities = nullptr; +static XInputSetState_t PXInputSetState = nullptr; +static XInputGetState_t PXInputGetState = nullptr; + void Init(std::vector& devices) { + if (!hXInput) + { + // Try for the most recent version we were compiled against (will only work if running on Win8+) + hXInput = ::LoadLibrary(XINPUT_DLL); + if (!hXInput) + { + // Drop back to DXSDK June 2010 version. Requires DX June 2010 redist. + hXInput = ::LoadLibrary(TEXT("xinput1_3.dll")); + if (!hXInput) + { + return; + } + } + + PXInputGetCapabilities = (XInputGetCapabilities_t)::GetProcAddress(hXInput, "XInputGetCapabilities"); + PXInputSetState = (XInputSetState_t)::GetProcAddress(hXInput, "XInputSetState"); + PXInputGetState = (XInputGetState_t)::GetProcAddress(hXInput, "XInputGetState"); + if (!PXInputGetCapabilities || + !PXInputSetState || + !PXInputGetState) + { + ::FreeLibrary(hXInput); + hXInput = nullptr; + return; + } + } + XINPUT_CAPABILITIES caps; for (int i = 0; i != 4; ++i) - if (ERROR_SUCCESS == XInputGetCapabilities(i, 0, &caps)) + if (ERROR_SUCCESS == PXInputGetCapabilities(i, 0, &caps)) devices.push_back(new Device(caps, i)); } +void DeInit() +{ + if (hXInput) + { + ::FreeLibrary(hXInput); + hXInput = nullptr; + } +} + Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) : m_index(index), m_subtype(caps.SubType) { @@ -107,25 +153,21 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) void Device::ClearInputState() { - ZeroMemory(&m_state_in, sizeof(m_state_in)); + ZeroMemory(&m_state_in, sizeof(m_state_in)); } std::string Device::GetName() const { - // why aren't these defined - // subtype doesn't seem to work, I tested with 2 different arcade sticks, both were shown as gamepad - // I'll leave it in anyway, maybe m$ will fix it - switch (m_subtype) { - case XINPUT_DEVSUBTYPE_GAMEPAD : return "Gamepad"; break; - case 0x02 /*XINPUT_DEVSUBTYPE_WHEEL*/ : return "Wheel"; break; - case 0x03 /*XINPUT_DEVSUBTYPE_ARCADE_STICK*/ : return "Arcade Stick"; break; - case 0x04 /*XINPUT_DEVSUBTYPE_FLIGHT_STICK*/ : return "Flight Stick"; break; - case 0x05 /*XINPUT_DEVSUBTYPE_DANCE_PAD*/ : return "Dance Pad"; break; - case 0x06 /*XINPUT_DEVSUBTYPE_GUITAR*/ : return "Guitar"; break; - case 0x08 /*XINPUT_DEVSUBTYPE_DRUM_KIT*/ : return "Drum Kit"; break; - default : return "Device"; break; + case XINPUT_DEVSUBTYPE_GAMEPAD: return "Gamepad"; break; + case XINPUT_DEVSUBTYPE_WHEEL: return "Wheel"; break; + case XINPUT_DEVSUBTYPE_ARCADE_STICK: return "Arcade Stick"; break; + case XINPUT_DEVSUBTYPE_FLIGHT_STICK: return "Flight Stick"; break; + case XINPUT_DEVSUBTYPE_DANCE_PAD: return "Dance Pad"; break; + case XINPUT_DEVSUBTYPE_GUITAR: return "Guitar"; break; + case XINPUT_DEVSUBTYPE_DRUM_KIT: return "Drum Kit"; break; + default: return "Device"; break; } } @@ -143,7 +185,7 @@ std::string Device::GetSource() const bool Device::UpdateInput() { - return (ERROR_SUCCESS == XInputGetState(m_index, &m_state_in)); + return (ERROR_SUCCESS == PXInputGetState(m_index, &m_state_in)); } bool Device::UpdateOutput() @@ -153,7 +195,7 @@ bool Device::UpdateOutput() if (memcmp(&m_state_out, &m_current_state_out, sizeof(m_state_out))) { m_current_state_out = m_state_out; - return (ERROR_SUCCESS == XInputSetState(m_index, &m_state_out)); + return (ERROR_SUCCESS == PXInputSetState(m_index, &m_state_out)); } else { diff --git a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.h b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.h index 8fe6dd1dee..17e49e5e2b 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/XInput/XInput.h @@ -1,3 +1,8 @@ +// XInput suffers a similar issue as XAudio2. Since Win8, it is part of the OS. +// However, unlike XAudio2 they have not made the API incompatible - so we just +// compile against the latest version and fall back to dynamically loading the +// old DLL. + #ifndef _CIFACE_XINPUT_H_ #define _CIFACE_XINPUT_H_ @@ -7,12 +12,17 @@ #include #include +#ifndef XINPUT_DEVSUBTYPE_FLIGHT_STICK +#error You are building this module against the wrong version of DirectX. You probably need to remove DXSDK_DIR from your include path and/or _WIN32_WINNT is wrong. +#endif + namespace ciface { namespace XInput { void Init(std::vector& devices); +void DeInit(); class Device : public Core::Device { diff --git a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.cpp b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.cpp index b42eda1f21..23cadd3ee6 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.cpp @@ -8,8 +8,8 @@ #include // This is an input plugin using the XInput 2.0 extension to the X11 protocol, -// loosely based on the old XLib plugin. (Has nothing to do with the XInput -// API on Windows.) +// loosely based on the old XLib plugin. (Has nothing to do with the XInput +// API on Windows.) // This plugin creates one KeyboardMouse object for each master pointer/ // keyboard pair. Each KeyboardMouse object exports four types of controls: @@ -20,20 +20,20 @@ // center of the emulator window. // * Mouse axis controls: one for each cardinal direction. Calculated using // a running average of relative mouse motion on each axis. -// * Key controls: these correspond to a limited subset of the keyboard +// * Key controls: these correspond to a limited subset of the keyboard // keys. // Mouse axis control tuning. Unlike absolute mouse position, relative mouse // motion data needs to be tweaked and smoothed out a bit to be usable. -// Mouse axis control output is simply divided by this number. In practice, +// Mouse axis control output is simply divided by this number. In practice, // that just means you can use a smaller "dead zone" if you bind axis controls // to a joystick. No real need to make this customizable. #define MOUSE_AXIS_SENSITIVITY 8.0f // The mouse axis controls use a weighted running average. Each frame, the new -// value is the average of the old value and the amount of relative mouse +// value is the average of the old value and the amount of relative mouse // motion during that frame. The old value is weighted by a ratio of // MOUSE_AXIS_SMOOTHING:1 compared to the new value. Increasing // MOUSE_AXIS_SMOOTHING makes the controls smoother, decreasing it makes them @@ -49,31 +49,31 @@ namespace XInput2 void Init(std::vector& devices, void* const hwnd) { Display* dpy; - + dpy = XOpenDisplay(NULL); - - // xi_opcode is important; it will be used to identify XInput events by + + // xi_opcode is important; it will be used to identify XInput events by // the polling loop in UpdateInput. int xi_opcode, event, error; - + // verify that the XInput extension is available if (!XQueryExtension(dpy, "XInputExtension", &xi_opcode, &event, &error)) return; - + // verify that the XInput extension is at at least version 2.0 int major = 2, minor = 0; - + if (XIQueryVersion(dpy, &major, &minor) != Success) return; - + // register all master devices with Dolphin - + XIDeviceInfo* all_masters; XIDeviceInfo* current_master; int num_masters; - + all_masters = XIQueryDevice(dpy, XIAllMasterDevices, &num_masters); - + for (int i = 0; i < num_masters; i++) { current_master = &all_masters[i]; @@ -82,34 +82,34 @@ void Init(std::vector& devices, void* const hwnd) // be a master keyboard. devices.push_back(new KeyboardMouse((Window)hwnd, xi_opcode, current_master->deviceid, current_master->attachment)); } - + XCloseDisplay(dpy); - + XIFreeDeviceInfo(all_masters); } -// Apply the event mask to the device and all its slaves. Only used in the +// Apply the event mask to the device and all its slaves. Only used in the // constructor. Remember, each KeyboardMouse has its own copy of the event // stream, which is how multiple event masks can "coexist." void KeyboardMouse::SelectEventsForDevice(Window window, XIEventMask *mask, int deviceid) { // Set the event mask for the master device. - + mask->deviceid = deviceid; XISelectEvents(m_display, window, mask, 1); - + // Query all the master device's slaves and set the same event mask for // those too. There are two reasons we want to do this. For mouse devices, // we want the raw motion events, and only slaves (i.e. physical hardware // devices) emit those. For keyboard devices, selecting slaves avoids // dealing with key focus. - + XIDeviceInfo* all_slaves; XIDeviceInfo* current_slave; int num_slaves; - + all_slaves = XIQueryDevice(m_display, XIAllDevices, &num_slaves); - + for (int i = 0; i < num_slaves; i++) { current_slave = &all_slaves[i]; @@ -118,33 +118,33 @@ void KeyboardMouse::SelectEventsForDevice(Window window, XIEventMask *mask, int mask->deviceid = current_slave->deviceid; XISelectEvents(m_display, window, mask, 1); } - + XIFreeDeviceInfo(all_slaves); } -KeyboardMouse::KeyboardMouse(Window window, int opcode, int pointer, int keyboard) +KeyboardMouse::KeyboardMouse(Window window, int opcode, int pointer, int keyboard) : m_window(window), xi_opcode(opcode), pointer_deviceid(pointer), keyboard_deviceid(keyboard) { memset(&m_state, 0, sizeof(m_state)); - + // The cool thing about each KeyboardMouse object having its own Display // is that each one gets its own separate copy of the X11 event stream, // which it can individually filter to get just the events it's interested // in. So be aware that each KeyboardMouse object actually has its own X11 // "context." m_display = XOpenDisplay(NULL); - + int min_keycode, max_keycode; XDisplayKeycodes(m_display, &min_keycode, &max_keycode); - + int unused; // should always be 1 XIDeviceInfo* pointer_device = XIQueryDevice(m_display, pointer_deviceid, &unused); name = std::string(pointer_device->name); XIFreeDeviceInfo(pointer_device); - + XIEventMask mask; unsigned char mask_buf[(XI_LASTEVENT + 7)/8]; - + mask.mask_len = sizeof(mask_buf); mask.mask = mask_buf; memset(mask_buf, 0, sizeof(mask_buf)); @@ -155,9 +155,9 @@ KeyboardMouse::KeyboardMouse(Window window, int opcode, int pointer, int keyboar XISetMask(mask_buf, XI_KeyPress); XISetMask(mask_buf, XI_KeyRelease); - SelectEventsForDevice(DefaultRootWindow(m_display), &mask, pointer_deviceid); + SelectEventsForDevice(DefaultRootWindow(m_display), &mask, pointer_deviceid); SelectEventsForDevice(DefaultRootWindow(m_display), &mask, keyboard_deviceid); - + // Keyboard Keys for (int i = min_keycode; i <= max_keycode; ++i) { @@ -175,7 +175,7 @@ KeyboardMouse::KeyboardMouse(Window window, int opcode, int pointer, int keyboar // Mouse Cursor, X-/+ and Y-/+ for (int i = 0; i != 4; ++i) AddInput(new Cursor(!!(i & 2), !!(i & 1), (&m_state.cursor.x)[!!(i & 2)])); - + // Mouse Axis, X-/+ and Y-/+ for (int i = 0; i != 4; ++i) AddInput(new Axis(!!(i & 2), !!(i & 1), (&m_state.axis.x)[!!(i & 2)])); @@ -191,15 +191,15 @@ void KeyboardMouse::UpdateCursor() { double root_x, root_y, win_x, win_y; Window root, child; - - // unused-- we're not interested in button presses here, as those are + + // unused-- we're not interested in button presses here, as those are // updated using events XIButtonState button_state; XIModifierState mods; XIGroupState group; - + XIQueryPointer(m_display, pointer_deviceid, m_window, &root, &child, &root_x, &root_y, &win_x, &win_y, &button_state, &mods, &group); - + free (button_state.mask); XWindowAttributes win_attribs; @@ -213,32 +213,32 @@ void KeyboardMouse::UpdateCursor() bool KeyboardMouse::UpdateInput() { XFlush(m_display); - + // Get the absolute position of the mouse pointer UpdateCursor(); - + // for the axis controls float delta_x = 0.0f, delta_y = 0.0f; double delta_delta; - + // Iterate through the event queue - update the axis controls, mouse // button controls, and keyboard controls. XEvent event; - while (XPending(m_display)) + while (XPending(m_display)) { XNextEvent(m_display, &event); - + if (event.xcookie.type != GenericEvent) continue; if (event.xcookie.extension != xi_opcode) continue; if (!XGetEventData(m_display, &event.xcookie)) continue; - + // only one of these will get used XIDeviceEvent* dev_event = (XIDeviceEvent*)event.xcookie.data; XIRawEvent* raw_event = (XIRawEvent*)event.xcookie.data; - + switch (event.xcookie.evtype) { case XI_ButtonPress: @@ -254,7 +254,7 @@ bool KeyboardMouse::UpdateInput() m_state.keyboard[dev_event->detail / 8] &= ~(1<<(dev_event->detail % 8)); break; case XI_RawMotion: - // always safe because there is always at least one byte in + // always safe because there is always at least one byte in // raw_event->valuators.mask, and if a bit is set in the mask, // then the value in raw_values is also available. if (XIMaskIsSet(raw_event->valuators.mask, 0)) @@ -273,10 +273,10 @@ bool KeyboardMouse::UpdateInput() } break; } - + XFreeEventData(m_display, &event.xcookie); } - + // apply axis smoothing m_state.axis.x *= MOUSE_AXIS_SMOOTHING; m_state.axis.x += delta_x; @@ -284,7 +284,7 @@ bool KeyboardMouse::UpdateInput() m_state.axis.y *= MOUSE_AXIS_SMOOTHING; m_state.axis.y += delta_y; m_state.axis.y /= MOUSE_AXIS_SMOOTHING+1.0f; - + return true; } @@ -322,10 +322,10 @@ KeyboardMouse::Key::Key(Display* const display, KeyCode keycode, const char* key } while (keysym == NoSymbol && i < 8); - // Convert to upper case for the keyname + // Convert to upper case for the keyname if (keysym >= 97 && keysym <= 122) keysym -= 32; - + // 0x0110ffff is the top of the unicode character range according // to keysymdef.h although it is probably more than we need. if (keysym == NoSymbol || keysym > 0x0110ffff || diff --git a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.h b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.h index 58a1a38c8c..dfb8fa285d 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/XInput2.h @@ -35,7 +35,7 @@ private: float x, y; } cursor, axis; }; - + class Key : public Input { friend class KeyboardMouse; @@ -43,21 +43,21 @@ private: std::string GetName() const { return m_keyname; } Key(Display* display, KeyCode keycode, const char* keyboard); ControlState GetState() const; - + private: std::string m_keyname; Display* const m_display; const char* const m_keyboard; const KeyCode m_keycode; }; - + class Button : public Input { public: std::string GetName() const { return name; } Button(unsigned int index, unsigned int& buttons); ControlState GetState() const; - + private: const unsigned int& m_buttons; const unsigned int m_index; @@ -71,14 +71,14 @@ private: bool IsDetectable() { return false; } Cursor(u8 index, bool positive, const float& cursor); ControlState GetState() const; - + private: const float& m_cursor; const u8 m_index; const bool m_positive; std::string name; }; - + class Axis : public Input { public: @@ -93,22 +93,22 @@ private: const bool m_positive; std::string name; }; - + private: void SelectEventsForDevice(Window window, XIEventMask *mask, int deviceid); void UpdateCursor(); - + public: bool UpdateInput(); bool UpdateOutput(); - + KeyboardMouse(Window window, int opcode, int pointer_deviceid, int keyboard_deviceid); ~KeyboardMouse(); - + std::string GetName() const; std::string GetSource() const; int GetId() const; - + private: Window m_window; Display* m_display; diff --git a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp index 7016c4908b..e507b88c9f 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp @@ -20,7 +20,7 @@ KeyboardMouse::KeyboardMouse(Window window) : m_window(window) int min_keycode, max_keycode; XDisplayKeycodes(m_display, &min_keycode, &max_keycode); - + // Keyboard Keys for (int i = min_keycode; i <= max_keycode; ++i) { @@ -99,7 +99,7 @@ KeyboardMouse::Key::Key(Display* const display, KeyCode keycode, const char* key i++; } while (keysym == NoSymbol && i < 8); - + // Convert to upper case for the keyname if (keysym >= 97 && keysym <= 122) keysym -= 32; diff --git a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.h b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.h index c178f1e9b4..35b6100081 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.h @@ -26,7 +26,7 @@ private: float x, y; } cursor; }; - + class Key : public Input { friend class KeyboardMouse; @@ -34,14 +34,14 @@ private: std::string GetName() const; Key(Display* display, KeyCode keycode, const char* keyboard); ControlState GetState() const; - + private: std::string m_keyname; Display* const m_display; const char* const m_keyboard; const KeyCode m_keycode; }; - + class Button : public Input { public: @@ -49,7 +49,7 @@ private: Button(unsigned int index, unsigned int& buttons) : m_buttons(buttons), m_index(index) {} ControlState GetState() const; - + private: const unsigned int& m_buttons; const unsigned int m_index; @@ -69,18 +69,18 @@ private: const u8 m_index; const bool m_positive; }; - + public: bool UpdateInput(); bool UpdateOutput(); - + KeyboardMouse(Window window); ~KeyboardMouse(); - + std::string GetName() const; std::string GetSource() const; int GetId() const; - + private: Window m_window; Display* m_display; diff --git a/Source/Core/InputCommon/Src/UDPWiimote.cpp b/Source/Core/InputCommon/Src/UDPWiimote.cpp index e0cf787e0f..5419cb61ce 100644 --- a/Source/Core/InputCommon/Src/UDPWiimote.cpp +++ b/Source/Core/InputCommon/Src/UDPWiimote.cpp @@ -59,12 +59,12 @@ struct UDPWiimote::_d int UDPWiimote::noinst = 0; -UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) : +UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) : port(_port), displayName(name), d(new _d) ,x(0),y(0),z(1.0f),naX(0),naY(0),naZ(-1.0f),nunX(0),nunY(0), pointerX(1001.0f/2),pointerY(0),nunMask(0),mask(0),index(_index), int_port(atoi(_port)) { - + static bool sranded=false; if (!sranded) { @@ -72,7 +72,7 @@ UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) : sranded=true; } bcastMagic=rand() & 0xFFFF; - + #ifdef _WIN32 u_long iMode = 1; #endif @@ -88,21 +88,21 @@ UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) : WSAStartup(sockVersion, &wsaData); } #endif - + noinst++; memset(&hints, 0, sizeof hints); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_PASSIVE; // use my IP - + if (!int_port) { cleanup; err=-1; return; } - + if ((rv = getaddrinfo(NULL, _port, &hints, &servinfo)) != 0) { cleanup; @@ -126,14 +126,14 @@ UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) : } d->sockfds.push_back(sock); } - + if (d->sockfds.empty()) { cleanup; err=-2; return; } - + freeaddrinfo(servinfo); err=0; d->exit=false; @@ -160,15 +160,15 @@ void UDPWiimote::mainThread() { int maxfd=0; FD_ZERO(&fds); - for (std::list::iterator i=d->sockfds.begin(); i!=d->sockfds.end(); i++) + for (auto& fd : d->sockfds) { - FD_SET(*i,&fds); + FD_SET(fd,&fds); #ifndef _WIN32 - if (*i>=maxfd) - maxfd=(*i)+1; + if (fd>=maxfd) + maxfd=(fd)+1; #endif } - + u64 tleft=timeout.tv_sec*1000+timeout.tv_usec/1000; u64 telapsed=time.GetTimeDifference(); time.Update(); @@ -184,29 +184,28 @@ void UDPWiimote::mainThread() timeout.tv_sec=(long)(tleft/1000); timeout.tv_usec=(tleft%1000)*1000; } - + lk.unlock(); //VERY hacky. don't like it - if (d->exit) return; + if (d->exit) return; int rt=select(maxfd,&fds,NULL,NULL,&timeout); if (d->exit) return; lk.lock(); if (d->exit) return; - + if (rt) { - for (std::list::iterator i=d->sockfds.begin(); i!=d->sockfds.end(); i++) + for (sock_t fd : d->sockfds) { - if (FD_ISSET(*i,&fds)) + if (FD_ISSET(fd,&fds)) { - sock_t fd=*i; u8 bf[64]; int size=60; size_t addr_len; struct sockaddr_storage their_addr; addr_len = sizeof their_addr; - if ((size = recvfrom(fd, - (dataz)bf, - size , 0,(struct sockaddr *)&their_addr, (socklen_t*)&addr_len)) == -1) + if ((size = recvfrom(fd, + (dataz)bf, + size , 0,(struct sockaddr *)&their_addr, (socklen_t*)&addr_len)) == -1) { ERROR_LOG(WIIMOTE,"UDPWii Packet error"); } @@ -235,8 +234,8 @@ UDPWiimote::~UDPWiimote() std::lock_guard lk(d->termLock); d->thread.join(); } - for (std::list::iterator i=d->sockfds.begin(); i!=d->sockfds.end(); i++) - close(*i); + for (auto& elem : d->sockfds) + close(elem); close(d->bipv4_fd); close(d->bipv6_fd); cleanup; @@ -328,7 +327,7 @@ void UDPWiimote::initBroadcastIPv4() WARN_LOG(WIIMOTE,"socket() failed"); return; } - + int broad=1; if (setsockopt(d->bipv4_fd,SOL_SOCKET,SO_BROADCAST, (const dataz)(&broad), sizeof broad) == -1) { @@ -345,7 +344,7 @@ void UDPWiimote::broadcastIPv4(const void * data, size_t size) their_addr.sin_port = htons(4431); their_addr.sin_addr.s_addr = INADDR_BROADCAST; memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero); - + int num; if ((num=sendto(d->bipv4_fd,(const dataz)data,(int)size,0,(struct sockaddr *) &their_addr, sizeof their_addr)) == -1) { diff --git a/Source/Core/InputCommon/Src/UDPWiimote.h b/Source/Core/InputCommon/Src/UDPWiimote.h index 01b9b11969..877cb87473 100644 --- a/Source/Core/InputCommon/Src/UDPWiimote.h +++ b/Source/Core/InputCommon/Src/UDPWiimote.h @@ -38,7 +38,7 @@ private: std::string port,displayName; int pharsePacket(u8 * data, size_t size); struct _d; //using pimpl because Winsock2.h doesn't have include guards -_- - _d *d; + _d *d; double x,y,z; double naX,naY,naZ; double nunX,nunY; diff --git a/Source/Core/InputCommon/Src/UDPWrapper.cpp b/Source/Core/InputCommon/Src/UDPWrapper.cpp index e176a2164d..7fc77c4f44 100644 --- a/Source/Core/InputCommon/Src/UDPWrapper.cpp +++ b/Source/Core/InputCommon/Src/UDPWrapper.cpp @@ -12,7 +12,7 @@ const char* DefaultPort(const int index) return s.c_str(); } -UDPWrapper::UDPWrapper(int indx, const char* const _name) : +UDPWrapper::UDPWrapper(int indx, const char* const _name) : ControllerEmu::ControlGroup(_name,GROUP_TYPE_UDPWII), inst(NULL), index(indx), updIR(false),updAccel(false), diff --git a/Source/Core/InputCommon/Src/X11InputBase.cpp b/Source/Core/InputCommon/Src/X11InputBase.cpp index d23d2d77c5..b555a21449 100644 --- a/Source/Core/InputCommon/Src/X11InputBase.cpp +++ b/Source/Core/InputCommon/Src/X11InputBase.cpp @@ -105,7 +105,7 @@ KeySym wxCharCodeWXToX(int id) if (id >= 65 && id <= 90) // Standard uppercase letter: return lowercase keycode keySym = (KeySym)id + 32; - else + else // All other keyboard characters keySym = id <= 255 ? (KeySym)id : 0; } @@ -126,7 +126,7 @@ int wxKeyModWXToX(int modstate) #endif void XKeyToString(unsigned int keycode, char *keyStr) { switch (keycode) - { + { case XK_Insert: sprintf(keyStr, "INSERT"); break; @@ -148,10 +148,10 @@ void XKeyToString(unsigned int keycode, char *keyStr) { case XK_Left: sprintf(keyStr, "LEFT"); break; - case XK_Up: + case XK_Up: sprintf(keyStr, "UP"); break; - case XK_Right: + case XK_Right: sprintf(keyStr, "RIGHT"); break; case XK_Down: @@ -178,10 +178,10 @@ void XKeyToString(unsigned int keycode, char *keyStr) { case XK_KP_Left: sprintf(keyStr, "KP LEFT"); break; - case XK_KP_Up: + case XK_KP_Up: sprintf(keyStr, "KP UP"); break; - case XK_KP_Right: + case XK_KP_Right: sprintf(keyStr, "KP RIGHT"); break; case XK_KP_Down: diff --git a/Source/Core/InputCommon/Src/stdafx.cpp b/Source/Core/InputCommon/Src/stdafx.cpp new file mode 100644 index 0000000000..b602b39925 --- /dev/null +++ b/Source/Core/InputCommon/Src/stdafx.cpp @@ -0,0 +1,5 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "stdafx.h" diff --git a/Source/Core/InputCommon/Src/stdafx.h b/Source/Core/InputCommon/Src/stdafx.h new file mode 100644 index 0000000000..498a15a12f --- /dev/null +++ b/Source/Core/InputCommon/Src/stdafx.h @@ -0,0 +1,14 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#pragma once +/* +#define _WIN32_WINNT 0x501 +#ifndef _WIN32_IE +#define _WIN32_IE 0x0500 // Default value is 0x0400 +#endif +*/ +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +#include diff --git a/Source/Core/VideoBackends/D3D/D3D.vcxproj b/Source/Core/VideoBackends/D3D/D3D.vcxproj index a4e8563fc4..a4177f6909 100644 --- a/Source/Core/VideoBackends/D3D/D3D.vcxproj +++ b/Source/Core/VideoBackends/D3D/D3D.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,124 +19,29 @@ - {9A4C733C-BADE-4AC6-B58A-6E274395E90E} - VideoD3D - VideoD3D + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - false - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) - - @@ -162,12 +59,7 @@ - Create - Create - Create - Create - Create - Create + Create @@ -201,8 +93,11 @@ - - {3e5c4e02-1ba9-4776-bdbe-e3f91ffa34cf} + + {1c8436c9-dbaf-42be-83bc-cf3ec9175abe} + + + {3de9ee35-3e91-4f27-a014-2866ad8c3fe3} diff --git a/Source/Core/VideoBackends/D3D/D3D.vcxproj.filters b/Source/Core/VideoBackends/D3D/D3D.vcxproj.filters index 4b8efac92b..efd5c46a08 100644 --- a/Source/Core/VideoBackends/D3D/D3D.vcxproj.filters +++ b/Source/Core/VideoBackends/D3D/D3D.vcxproj.filters @@ -1,8 +1,14 @@  - - + + {ae700f7e-33c8-45b5-b7ee-a0ded3630549} + + + {3683d29b-19f6-4e7a-803f-4ac70b1d49fd} + + + D3D @@ -24,15 +30,30 @@ Render + + Render + Render + + Render + Render + + Render + + + Render + Render + + Render + Render @@ -42,33 +63,13 @@ Render - - Render - Render - - Render - - - Render - - - Render - - - Render - + + - - - - - - D3D - D3D @@ -81,55 +82,54 @@ D3D + + D3D + D3D Render - - Render - - - Render - - - Render - - - Render - - - Render - - - Render - - - Render - - - Render - - - Render - Render - - Render - Render - - - - {8dda993d-a0ed-4c2e-9651-c13c743e3e27} - - - {41d3f9d1-16f3-4a48-a486-292b1593dc92} - + + Render + + + Render + + + Render + + + Render + + + Render + + + Render + + + Render + + + Render + + + Render + + + Render + + + + + \ No newline at end of file diff --git a/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp b/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp index 0bd9a14ed8..5434354f37 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.cpp @@ -14,15 +14,9 @@ namespace DX11 HINSTANCE hD3DCompilerDll = NULL; D3DREFLECT PD3DReflect = NULL; +pD3DCompile PD3DCompile = NULL; int d3dcompiler_dll_ref = 0; -HINSTANCE hD3DXDll = NULL; -D3DX11COMPILEFROMMEMORYTYPE PD3DX11CompileFromMemory = NULL; -D3DX11FILTERTEXTURETYPE PD3DX11FilterTexture = NULL; -D3DX11SAVETEXTURETOFILEATYPE PD3DX11SaveTextureToFileA = NULL; -D3DX11SAVETEXTURETOFILEWTYPE PD3DX11SaveTextureToFileW = NULL; -int d3dx_dll_ref = 0; - CREATEDXGIFACTORY PCreateDXGIFactory = NULL; HINSTANCE hDXGIDll = NULL; int dxgi_dll_ref = 0; @@ -97,44 +91,6 @@ HRESULT LoadD3D() return S_OK; } -HRESULT LoadD3DX() -{ - if (d3dx_dll_ref++ > 0) return S_OK; - if (hD3DXDll) return S_OK; - - // try to load D3DX11 first to check whether we have proper runtime support - // try to use the dll the backend was compiled against first - don't bother about debug runtimes - hD3DXDll = LoadLibraryA(D3DX11_DLL_A); - if (!hD3DXDll) - { - // if that fails, use the dll which should be available in every SDK which officially supports DX11. - hD3DXDll = LoadLibraryA("d3dx11_42.dll"); - if (!hD3DXDll) - { - MessageBoxA(NULL, "Failed to load d3dx11_42.dll, update your DX11 runtime, please", "Critical error", MB_OK | MB_ICONERROR); - return E_FAIL; - } - else - { - NOTICE_LOG(VIDEO, "Successfully loaded d3dx11_42.dll. If you're having trouble, try updating your DX runtime first."); - } - } - - PD3DX11CompileFromMemory = (D3DX11COMPILEFROMMEMORYTYPE)GetProcAddress(hD3DXDll, "D3DX11CompileFromMemory"); - if (PD3DX11CompileFromMemory == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11CompileFromMemory!", "Critical error", MB_OK | MB_ICONERROR); - - PD3DX11FilterTexture = (D3DX11FILTERTEXTURETYPE)GetProcAddress(hD3DXDll, "D3DX11FilterTexture"); - if (PD3DX11FilterTexture == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11FilterTexture!", "Critical error", MB_OK | MB_ICONERROR); - - PD3DX11SaveTextureToFileA = (D3DX11SAVETEXTURETOFILEATYPE)GetProcAddress(hD3DXDll, "D3DX11SaveTextureToFileA"); - if (PD3DX11SaveTextureToFileA == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11SaveTextureToFileA!", "Critical error", MB_OK | MB_ICONERROR); - - PD3DX11SaveTextureToFileW = (D3DX11SAVETEXTURETOFILEWTYPE)GetProcAddress(hD3DXDll, "D3DX11SaveTextureToFileW"); - if (PD3DX11SaveTextureToFileW == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DX11SaveTextureToFileW!", "Critical error", MB_OK | MB_ICONERROR); - - return S_OK; -} - HRESULT LoadD3DCompiler() { if (d3dcompiler_dll_ref++ > 0) return S_OK; @@ -160,6 +116,8 @@ HRESULT LoadD3DCompiler() PD3DReflect = (D3DREFLECT)GetProcAddress(hD3DCompilerDll, "D3DReflect"); if (PD3DReflect == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DReflect!", "Critical error", MB_OK | MB_ICONERROR); + PD3DCompile = (pD3DCompile)GetProcAddress(hD3DCompilerDll, "D3DCompile"); + if (PD3DCompile == NULL) MessageBoxA(NULL, "GetProcAddress failed for D3DCompile!", "Critical error", MB_OK | MB_ICONERROR); return S_OK; } @@ -174,18 +132,6 @@ void UnloadDXGI() PCreateDXGIFactory = NULL; } -void UnloadD3DX() -{ - if (!d3dx_dll_ref) return; - if (--d3dx_dll_ref != 0) return; - - if(hD3DXDll) FreeLibrary(hD3DXDll); - hD3DXDll = NULL; - PD3DX11FilterTexture = NULL; - PD3DX11SaveTextureToFileA = NULL; - PD3DX11SaveTextureToFileW = NULL; -} - void UnloadD3D() { if (!d3d_dll_ref) return; @@ -269,13 +215,11 @@ HRESULT Create(HWND wnd) hr = LoadDXGI(); if (SUCCEEDED(hr)) hr = LoadD3D(); - if (SUCCEEDED(hr)) hr = LoadD3DX(); if (SUCCEEDED(hr)) hr = LoadD3DCompiler(); if (FAILED(hr)) { UnloadDXGI(); UnloadD3D(); - UnloadD3DX(); UnloadD3DCompiler(); return hr; } @@ -416,7 +360,6 @@ void Close() device = NULL; // unload DLLs - UnloadD3DX(); UnloadD3D(); UnloadDXGI(); } diff --git a/Source/Core/VideoBackends/D3D/Src/D3DBase.h b/Source/Core/VideoBackends/D3D/Src/D3DBase.h index 03c1ed9d13..7f26cbd3cc 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DBase.h +++ b/Source/Core/VideoBackends/D3D/Src/D3DBase.h @@ -4,12 +4,13 @@ #pragma once -#include -#include +#include +#include +#include #include "Common.h" #include -namespace DX11 +namespace DX11 { #define SAFE_RELEASE(x) { if (x) (x)->Release(); (x) = NULL; } @@ -24,11 +25,9 @@ namespace D3D HRESULT LoadDXGI(); HRESULT LoadD3D(); -HRESULT LoadD3DX(); HRESULT LoadD3DCompiler(); void UnloadDXGI(); void UnloadD3D(); -void UnloadD3DX(); void UnloadD3DCompiler(); D3D_FEATURE_LEVEL GetFeatureLevel(IDXGIAdapter* adapter); @@ -71,36 +70,15 @@ void SetDebugObjectName(T resource, const char* name) #endif } -} // namespace +} // namespace D3D - -// Used to not require the SDK and runtime versions to match: -// Linking with d3dx11.lib makes the most recent d3dx11_xx.dll of the -// compiler's SDK a requirement, but this backend works with DX11 runtimes -// back to August 2009 even if the backend was built with June 2010. -// Add any d3dx11 functions which you want to use here and load them in Create() -typedef HRESULT (WINAPI* D3DX11COMPILEFROMMEMORYTYPE)(LPCSTR, SIZE_T, LPCSTR, const D3D10_SHADER_MACRO*, LPD3D10INCLUDE, LPCSTR, LPCSTR, UINT, UINT, ID3DX11ThreadPump*, ID3D10Blob**, ID3D10Blob**, HRESULT*); -typedef HRESULT (WINAPI* D3DX11FILTERTEXTURETYPE)(ID3D11DeviceContext*, ID3D11Resource*, UINT, UINT); -typedef HRESULT (WINAPI* D3DX11SAVETEXTURETOFILEATYPE)(ID3D11DeviceContext*, ID3D11Resource*, D3DX11_IMAGE_FILE_FORMAT, LPCSTR); -typedef HRESULT (WINAPI* D3DX11SAVETEXTURETOFILEWTYPE)(ID3D11DeviceContext*, ID3D11Resource*, D3DX11_IMAGE_FILE_FORMAT, LPCWSTR); - -extern D3DX11COMPILEFROMMEMORYTYPE PD3DX11CompileFromMemory; -extern D3DX11FILTERTEXTURETYPE PD3DX11FilterTexture; -extern D3DX11SAVETEXTURETOFILEATYPE PD3DX11SaveTextureToFileA; -extern D3DX11SAVETEXTURETOFILEWTYPE PD3DX11SaveTextureToFileW; - -#ifdef UNICODE -#define PD3DX11SaveTextureToFile PD3DX11SaveTextureToFileW -#else -#define PD3DX11SaveTextureToFile PD3DX11SaveTextureToFileA -#endif - -typedef HRESULT (WINAPI* CREATEDXGIFACTORY)(REFIID, void**); +typedef HRESULT (WINAPI *CREATEDXGIFACTORY)(REFIID, void**); extern CREATEDXGIFACTORY PCreateDXGIFactory; -typedef HRESULT (WINAPI* D3D11CREATEDEVICE)(IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, CONST D3D_FEATURE_LEVEL*, UINT, UINT, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext**); +typedef HRESULT (WINAPI *D3D11CREATEDEVICE)(IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, CONST D3D_FEATURE_LEVEL*, UINT, UINT, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext**); extern D3D11CREATEDEVICE PD3D11CreateDevice; typedef HRESULT (WINAPI *D3DREFLECT)(LPCVOID, SIZE_T, REFIID, void**); extern D3DREFLECT PD3DReflect; +extern pD3DCompile PD3DCompile; } // namespace DX11 diff --git a/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp b/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp index 602dcf9807..51a51b7233 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp +++ b/Source/Core/VideoBackends/D3D/Src/D3DShader.cpp @@ -37,9 +37,8 @@ bool CompileVertexShader(const char* code, unsigned int len, D3DBlob** blob) #else UINT flags = D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY|D3D10_SHADER_OPTIMIZATION_LEVEL3|D3D10_SHADER_SKIP_VALIDATION; #endif - HRESULT hr = PD3DX11CompileFromMemory(code, len, NULL, NULL, NULL, "main", D3D::VertexShaderVersionString(), - flags, 0, NULL, &shaderBuffer, &errorBuffer, NULL); - + HRESULT hr = PD3DCompile(code, len, NULL, NULL, NULL, "main", D3D::VertexShaderVersionString(), + flags, 0, &shaderBuffer, &errorBuffer); if (errorBuffer) { INFO_LOG(VIDEO, "Vertex shader compiler messages:\n%s\n", @@ -95,9 +94,9 @@ bool CompileGeometryShader(const char* code, unsigned int len, D3DBlob** blob, #else UINT flags = D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY|D3D10_SHADER_OPTIMIZATION_LEVEL3|D3D10_SHADER_SKIP_VALIDATION; #endif - HRESULT hr = PD3DX11CompileFromMemory(code, len, NULL, pDefines, NULL, "main", D3D::GeometryShaderVersionString(), - flags, 0, NULL, &shaderBuffer, &errorBuffer, NULL); - + HRESULT hr = PD3DCompile(code, len, NULL, pDefines, NULL, "main", D3D::GeometryShaderVersionString(), + flags, 0, &shaderBuffer, &errorBuffer); + if (errorBuffer) { INFO_LOG(VIDEO, "Geometry shader compiler messages:\n%s\n", @@ -155,9 +154,9 @@ bool CompilePixelShader(const char* code, unsigned int len, D3DBlob** blob, #else UINT flags = D3D10_SHADER_OPTIMIZATION_LEVEL3; #endif - HRESULT hr = PD3DX11CompileFromMemory(code, len, NULL, pDefines, NULL, "main", D3D::PixelShaderVersionString(), - flags, 0, NULL, &shaderBuffer, &errorBuffer, NULL); - + HRESULT hr = PD3DCompile(code, len, NULL, pDefines, NULL, "main", D3D::PixelShaderVersionString(), + flags, 0, &shaderBuffer, &errorBuffer); + if (errorBuffer) { INFO_LOG(VIDEO, "Pixel shader compiler messages:\n%s", @@ -233,4 +232,4 @@ ID3D11PixelShader* CompileAndCreatePixelShader(const char* code, } // namespace -} // namespace DX11 \ No newline at end of file +} // namespace DX11 diff --git a/Source/Core/VideoBackends/D3D/Src/D3DTexture.cpp b/Source/Core/VideoBackends/D3D/Src/D3DTexture.cpp index abf34b3cca..94d778d17b 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DTexture.cpp +++ b/Source/Core/VideoBackends/D3D/Src/D3DTexture.cpp @@ -5,12 +5,138 @@ #include "D3DBase.h" #include "D3DTexture.h" +#include +#include +#include +#pragma comment(lib, "WindowsCodecs.lib") + namespace DX11 { namespace D3D { +HRESULT TextureToPng(D3D11_MAPPED_SUBRESOURCE &map, LPCWSTR wzFilename, int width, int height, bool saveAlpha) +{ + IWICImagingFactory *piFactory = NULL; + IWICBitmapEncoder *piEncoder = NULL; + IWICBitmapFrameEncode *piBitmapFrame = NULL; + IPropertyBag2 *pPropertybag = NULL; + + IWICStream *piStream = NULL; + + HRESULT hr = CoCreateInstance( + CLSID_WICImagingFactory, + NULL, + CLSCTX_INPROC_SERVER, + IID_IWICImagingFactory, + (LPVOID*)&piFactory); + + if (SUCCEEDED(hr)) + { + hr = piFactory->CreateStream(&piStream); + } + + if (SUCCEEDED(hr)) + { + hr = piStream->InitializeFromFilename(wzFilename, GENERIC_WRITE); + } + + if (SUCCEEDED(hr)) + { + hr = piFactory->CreateEncoder(GUID_ContainerFormatPng, NULL, &piEncoder); + } + + if (SUCCEEDED(hr)) + { + hr = piEncoder->Initialize(piStream, WICBitmapEncoderNoCache); + } + + if (SUCCEEDED(hr)) + { + hr = piEncoder->CreateNewFrame(&piBitmapFrame, &pPropertybag); + } + + if (SUCCEEDED(hr)) + { + if (SUCCEEDED(hr)) + { + hr = piBitmapFrame->Initialize(pPropertybag); + } + } + + if (SUCCEEDED(hr)) + { + hr = piBitmapFrame->SetSize(width, height); + } + + WICPixelFormatGUID formatGUID = GUID_WICPixelFormat32bppBGRA; + if (SUCCEEDED(hr)) + { + hr = piBitmapFrame->SetPixelFormat(&formatGUID); + } + + if (SUCCEEDED(hr)) + { + // We're expecting to write out 32bppBGRA. Fail if the encoder cannot do it. + hr = IsEqualGUID(formatGUID, GUID_WICPixelFormat32bppBGRA) ? S_OK : E_FAIL; + } + + if (SUCCEEDED(hr)) + { + if (map.pData != NULL) + { + for (int y = 0; y < height; ++y) + { + u8* ptr = (u8*)map.pData + y * map.RowPitch; + for (unsigned int x = 0; x < map.RowPitch/4; ++x) + { + u8 r = ptr[0]; + u8 g = ptr[1]; + u8 b = ptr[2]; + ptr[0] = b; + ptr[1] = g; + ptr[2] = r; + if (!saveAlpha) + ptr[3] = 0xff; + + + ptr += 4; + } + } + hr = piBitmapFrame->WritePixels(height, map.RowPitch, height * map.RowPitch, (BYTE*)map.pData); + } + else + { + hr = E_OUTOFMEMORY; + } + } + + if (SUCCEEDED(hr)) + { + hr = piBitmapFrame->Commit(); + } + + if (SUCCEEDED(hr)) + { + hr = piEncoder->Commit(); + } + + if (piFactory) + piFactory->Release(); + + if (piBitmapFrame) + piBitmapFrame->Release(); + + if (piEncoder) + piEncoder->Release(); + + if (piStream) + piStream->Release(); + + return hr; +} + void ReplaceRGBATexture2D(ID3D11Texture2D* pTexture, const u8* buffer, unsigned int width, unsigned int height, unsigned int pitch, unsigned int level, D3D11_USAGE usage) { if (usage == D3D11_USAGE_DYNAMIC || usage == D3D11_USAGE_STAGING) diff --git a/Source/Core/VideoBackends/D3D/Src/D3DTexture.h b/Source/Core/VideoBackends/D3D/Src/D3DTexture.h index 5c2aa57f4a..d047d3f249 100644 --- a/Source/Core/VideoBackends/D3D/Src/D3DTexture.h +++ b/Source/Core/VideoBackends/D3D/Src/D3DTexture.h @@ -11,6 +11,7 @@ namespace DX11 namespace D3D { + HRESULT TextureToPng(D3D11_MAPPED_SUBRESOURCE& map, LPCWSTR wzFilename, int width, int height, bool saveAlpha = true); void ReplaceRGBATexture2D(ID3D11Texture2D* pTexture, const u8* buffer, unsigned int width, unsigned int height, unsigned int pitch, unsigned int level, D3D11_USAGE usage); } diff --git a/Source/Core/VideoBackends/D3D/Src/FramebufferManager.cpp b/Source/Core/VideoBackends/D3D/Src/FramebufferManager.cpp index 2e72380603..973cf38181 100644 --- a/Source/Core/VideoBackends/D3D/Src/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/D3D/Src/FramebufferManager.cpp @@ -196,7 +196,7 @@ void XFBSource::DecodeToTexture(u32 xfbAddr, u32 fbWidth, u32 fbHeight) void XFBSource::CopyEFB(float Gamma) { g_renderer->ResetAPIState(); // reset any game specific settings - + // Copy EFB data to XFB and restore render target again const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)texWidth, (float)texHeight); @@ -211,7 +211,7 @@ void XFBSource::CopyEFB(float Gamma) D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), FramebufferManager::GetEFBDepthTexture()->GetDSV()); - + g_renderer->RestoreAPIState(); } diff --git a/Source/Core/VideoBackends/D3D/Src/LineGeometryShader.cpp b/Source/Core/VideoBackends/D3D/Src/LineGeometryShader.cpp index 4b96953a3a..a68dadaabb 100644 --- a/Source/Core/VideoBackends/D3D/Src/LineGeometryShader.cpp +++ b/Source/Core/VideoBackends/D3D/Src/LineGeometryShader.cpp @@ -177,7 +177,7 @@ bool LineGeometryShader::SetShader(u32 components, float lineWidth, std::stringstream numTexCoordsStream; numTexCoordsStream << xfregs.numTexGen.numTexGens; - + INFO_LOG(VIDEO, "Compiling line geometry shader for components 0x%.08X (num texcoords %d)", components, xfregs.numTexGen.numTexGens); diff --git a/Source/Core/VideoBackends/D3D/Src/NativeVertexFormat.cpp b/Source/Core/VideoBackends/D3D/Src/NativeVertexFormat.cpp index 373026bcd3..4c6332dedd 100644 --- a/Source/Core/VideoBackends/D3D/Src/NativeVertexFormat.cpp +++ b/Source/Core/VideoBackends/D3D/Src/NativeVertexFormat.cpp @@ -76,7 +76,7 @@ void D3DVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl) for (int i = 0; i < 3; i++) { - if (_vtx_decl.normal_offset[i] > 0) + if (_vtx_decl.normal_offset[i] > 0) { m_elems[m_num_elems].SemanticName = "NORMAL"; m_elems[m_num_elems].SemanticIndex = i; @@ -89,7 +89,7 @@ void D3DVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl) for (int i = 0; i < 2; i++) { - if (_vtx_decl.color_offset[i] > 0) + if (_vtx_decl.color_offset[i] > 0) { m_elems[m_num_elems].SemanticName = "COLOR"; m_elems[m_num_elems].SemanticIndex = i; diff --git a/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.cpp b/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.cpp index 5282c4cbb7..82e95d2bf0 100644 --- a/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.cpp +++ b/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.cpp @@ -31,7 +31,7 @@ namespace DX11 { - + union EFBEncodeParams { struct @@ -384,7 +384,7 @@ static const char EFB_ENCODE_PS[] = "sample[y*8+x] = SampleEFB(subBlockUL+float2(x,y));\n" "}\n" "}\n" - + "uint dw[4];\n" "for (uint i = 0; i < 4; ++i) {\n" "dw[i] = UINT_44444444_BE(\n" @@ -433,7 +433,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample2.r, sample6.r, sampleA.r, sampleE.r),\n" "255*float4(sample3.r, sample7.r, sampleB.r, sampleF.r)\n" ");\n" - + "return dw4;\n" "}\n" @@ -444,7 +444,7 @@ static const char EFB_ENCODE_PS[] = "float2 blockUL = blockCoord * float2(8,4);\n" "float2 subBlockUL = blockUL + float2(0, 2*(cacheCoord.x%2));\n" - + "float4 sample0 = SampleEFB(subBlockUL+float2(0,0));\n" "float4 sample1 = SampleEFB(subBlockUL+float2(1,0));\n" "float4 sample2 = SampleEFB(subBlockUL+float2(2,0));\n" @@ -486,7 +486,7 @@ static const char EFB_ENCODE_PS[] = "Float8ToUint4(sampleE.a), Float8ToUint4(sampleE.r),\n" "Float8ToUint4(sampleF.a), Float8ToUint4(sampleF.r)\n" ");\n" - + "return uint4(dw0, dw1, dw2, dw3);\n" "}\n" @@ -513,7 +513,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample1.a, sample3.a, sample5.a, sample7.a),\n" "255*float4(sample1.r, sample3.r, sample5.r, sample7.r)\n" ");\n" - + "return dw4;\n" "}\n" @@ -532,7 +532,7 @@ static const char EFB_ENCODE_PS[] = "float4 sample5 = SampleEFB(subBlockUL+float2(1,1));\n" "float4 sample6 = SampleEFB(subBlockUL+float2(2,1));\n" "float4 sample7 = SampleEFB(subBlockUL+float2(3,1));\n" - + "uint dw0 = UINT_1616(EncodeRGB565(sample0), EncodeRGB565(sample1));\n" "uint dw1 = UINT_1616(EncodeRGB565(sample2), EncodeRGB565(sample3));\n" "uint dw2 = UINT_1616(EncodeRGB565(sample4), EncodeRGB565(sample5));\n" @@ -556,12 +556,12 @@ static const char EFB_ENCODE_PS[] = "float4 sample5 = SampleEFB(subBlockUL+float2(1,1));\n" "float4 sample6 = SampleEFB(subBlockUL+float2(2,1));\n" "float4 sample7 = SampleEFB(subBlockUL+float2(3,1));\n" - + "uint dw0 = UINT_1616(EncodeRGB5A3(sample0), EncodeRGB5A3(sample1));\n" "uint dw1 = UINT_1616(EncodeRGB5A3(sample2), EncodeRGB5A3(sample3));\n" "uint dw2 = UINT_1616(EncodeRGB5A3(sample4), EncodeRGB5A3(sample5));\n" "uint dw3 = UINT_1616(EncodeRGB5A3(sample6), EncodeRGB5A3(sample7));\n" - + "return Swap4_32(uint4(dw0, dw1, dw2, dw3));\n" "}\n" @@ -602,7 +602,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample1.b, sample3.b, sample5.b, sample7.b)\n" ");\n" "}\n" - + "return dw4;\n" "}\n" @@ -612,7 +612,7 @@ static const char EFB_ENCODE_PS[] = "float2 blockUL = blockCoord * float2(8,4);\n" "float2 subBlockUL = blockUL + float2(0, 2*(cacheCoord.x%2));\n" - + "float4 sample0 = SampleEFB(subBlockUL+float2(0,0));\n" "float4 sample1 = SampleEFB(subBlockUL+float2(1,0));\n" "float4 sample2 = SampleEFB(subBlockUL+float2(2,0));\n" @@ -636,7 +636,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample2.a, sample6.a, sampleA.a, sampleE.a),\n" "255*float4(sample3.a, sample7.a, sampleB.a, sampleF.a)\n" ");\n" - + "return dw4;\n" "}\n" @@ -670,7 +670,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample2.r, sample6.r, sampleA.r, sampleE.r),\n" "255*float4(sample3.r, sample7.r, sampleB.r, sampleF.r)\n" ");\n" - + "return dw4;\n" "}\n" @@ -705,7 +705,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample2.g, sample6.g, sampleA.g, sampleE.g),\n" "255*float4(sample3.g, sample7.g, sampleB.g, sampleF.g)\n" ");\n" - + "return dw4;\n" "}\n" @@ -715,7 +715,7 @@ static const char EFB_ENCODE_PS[] = "float2 blockUL = blockCoord * float2(8,4);\n" "float2 subBlockUL = blockUL + float2(0, 2*(cacheCoord.x%2));\n" - + "float4 sample0 = SampleEFB(subBlockUL+float2(0,0));\n" "float4 sample1 = SampleEFB(subBlockUL+float2(1,0));\n" "float4 sample2 = SampleEFB(subBlockUL+float2(2,0));\n" @@ -739,7 +739,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample2.b, sample6.b, sampleA.b, sampleE.b),\n" "255*float4(sample3.b, sample7.b, sampleB.b, sampleF.b)\n" ");\n" - + "return dw4;\n" "}\n" @@ -765,7 +765,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample1.g, sample3.g, sample5.g, sample7.g),\n" "255*float4(sample1.r, sample3.r, sample5.r, sample7.r)\n" ");\n" - + "return dw4;\n" "}\n" @@ -792,7 +792,7 @@ static const char EFB_ENCODE_PS[] = "255*float4(sample1.b, sample3.b, sample5.b, sample7.b),\n" "255*float4(sample1.g, sample3.g, sample5.g, sample7.g)\n" ");\n" - + "return dw4;\n" "}\n" @@ -902,7 +902,7 @@ void PSTextureEncoder::Init() D3D::SetDebugObjectName(m_outRTV, "efb encoder output rtv"); // Create output staging buffer - + t2dd.Usage = D3D11_USAGE_STAGING; t2dd.BindFlags = 0; t2dd.CPUAccessFlags = D3D11_CPU_ACCESS_READ; @@ -998,7 +998,7 @@ void PSTextureEncoder::Init() void PSTextureEncoder::Shutdown() { m_ready = false; - + for (size_t i = 0; i < 4; ++i) SAFE_RELEASE(m_fetchClass[i]); for (size_t i = 0; i < 2; ++i) @@ -1008,7 +1008,7 @@ void PSTextureEncoder::Shutdown() for (size_t i = 0; i < 16; ++i) SAFE_RELEASE(m_generatorClass[i]); m_linkageArray.clear(); - + SAFE_RELEASE(m_classLinkage); SAFE_RELEASE(m_dynamicShader); @@ -1073,13 +1073,13 @@ size_t PSTextureEncoder::Encode(u8* dst, unsigned int dstFormat, _assert_msg_(VIDEO, totalCacheLines*32 <= MAX_BYTES_PER_ENCODE, "total encode size sanity check"); size_t encodeSize = 0; - + // Reset API g_renderer->ResetAPIState(); // Set up all the state for EFB encoding - + #ifdef USE_DYNAMIC_MODE if (SetDynamicShader(dstFormat, srcFormat, isIntensity, scaleByHalf)) #else @@ -1092,7 +1092,7 @@ size_t PSTextureEncoder::Encode(u8* dst, unsigned int dstFormat, D3D::stateman->PushDepthState(m_efbEncodeDepthState); D3D::stateman->PushRasterizerState(m_efbEncodeRastState); D3D::stateman->Apply(); - + D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, FLOAT(cacheLinesPerRow*2), FLOAT(numBlocksY)); D3D::context->RSSetViewports(1, &vp); @@ -1101,14 +1101,14 @@ size_t PSTextureEncoder::Encode(u8* dst, unsigned int dstFormat, UINT stride = sizeof(QuadVertex); UINT offset = 0; D3D::context->IASetVertexBuffers(0, 1, &m_quad, &stride, &offset); - + EFBRectangle fullSrcRect; fullSrcRect.left = 0; fullSrcRect.top = 0; fullSrcRect.right = EFB_WIDTH; fullSrcRect.bottom = EFB_HEIGHT; TargetRectangle targetRect = g_renderer->ConvertEFBRectangle(fullSrcRect); - + EFBEncodeParams params = { 0 }; params.NumHalfCacheLinesX = FLOAT(cacheLinesPerRow*2); params.NumBlocksY = FLOAT(numBlocksY); @@ -1121,7 +1121,7 @@ size_t PSTextureEncoder::Encode(u8* dst, unsigned int dstFormat, D3D::context->UpdateSubresource(m_encodeParams, 0, NULL, ¶ms, 0, 0); D3D::context->VSSetConstantBuffers(0, 1, &m_encodeParams); - + D3D::context->OMSetRenderTargets(1, &m_outRTV, NULL); ID3D11ShaderResourceView* pEFB = (srcFormat == PIXELFMT_Z24) ? @@ -1145,17 +1145,17 @@ size_t PSTextureEncoder::Encode(u8* dst, unsigned int dstFormat, D3D::context->CopySubresourceRegion(m_outStage, 0, 0, 0, 0, m_out, 0, &srcBox); // Clean up state - + IUnknown* nullDummy = NULL; D3D::context->PSSetSamplers(0, 1, (ID3D11SamplerState**)&nullDummy); D3D::context->PSSetShaderResources(0, 1, (ID3D11ShaderResourceView**)&nullDummy); D3D::context->PSSetConstantBuffers(0, 1, (ID3D11Buffer**)&nullDummy); - + D3D::context->OMSetRenderTargets(0, NULL, NULL); D3D::context->VSSetConstantBuffers(0, 1, (ID3D11Buffer**)&nullDummy); - + D3D::stateman->PopRasterizerState(); D3D::stateman->PopDepthState(); D3D::stateman->PopBlendState(); @@ -1312,7 +1312,7 @@ bool PSTextureEncoder::InitDynamicMode() hr = D3D::device->CreatePixelShader(bytecode->Data(), bytecode->Size(), m_classLinkage, &m_dynamicShader); CHECK(SUCCEEDED(hr), "create efb encode pixel shader"); D3D::SetDebugObjectName(m_dynamicShader, "efb encoder pixel shader"); - + // Use D3DReflect ID3D11ShaderReflection* reflect = NULL; @@ -1438,7 +1438,7 @@ bool PSTextureEncoder::SetDynamicShader(unsigned int dstFormat, m_linkageArray[m_intensitySlot] = m_intensityClass[intensityNum]; if (m_generatorSlot != UINT(-1)) m_linkageArray[m_generatorSlot] = m_generatorClass[generatorNum]; - + D3D::context->PSSetShader(m_dynamicShader, m_linkageArray.empty() ? NULL : &m_linkageArray[0], (UINT)m_linkageArray.size()); diff --git a/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.h b/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.h index 14cdfa8bae..ff33e22c0a 100644 --- a/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.h +++ b/Source/Core/VideoBackends/D3D/Src/PSTextureEncoder.h @@ -37,7 +37,7 @@ public: bool scaleByHalf); private: - + bool m_ready; ID3D11Texture2D* m_out; @@ -73,7 +73,7 @@ private: // Stuff only used for dynamic-linking mode (SM5.0+, available as soon as // Microsoft fixes their bloody HLSL compiler) - + bool InitDynamicMode(); bool SetDynamicShader(unsigned int dstFormat, unsigned int srcFormat, bool isIntensity, bool scaleByHalf); diff --git a/Source/Core/VideoBackends/D3D/Src/PerfQuery.cpp b/Source/Core/VideoBackends/D3D/Src/PerfQuery.cpp index 1bcd314291..b2c77a876e 100644 --- a/Source/Core/VideoBackends/D3D/Src/PerfQuery.cpp +++ b/Source/Core/VideoBackends/D3D/Src/PerfQuery.cpp @@ -116,7 +116,7 @@ void PerfQuery::FlushOne() } // NOTE: Reported pixel metrics should be referenced to native resolution - m_results[entry.query_type] += (u64)result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight(); + m_results[entry.query_type] += (u32)(result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight()); m_query_read_pos = (m_query_read_pos + 1) % ArraySize(m_query_buffer); --m_query_count; @@ -147,7 +147,7 @@ void PerfQuery::WeakFlush() if (hr == S_OK) { // NOTE: Reported pixel metrics should be referenced to native resolution - m_results[entry.query_type] += (u64)result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight(); + m_results[entry.query_type] += (u32)(result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight()); m_query_read_pos = (m_query_read_pos + 1) % ArraySize(m_query_buffer); --m_query_count; diff --git a/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp b/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp index 04a1722d04..d8716c85f2 100644 --- a/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp +++ b/Source/Core/VideoBackends/D3D/Src/PixelShaderCache.cpp @@ -80,7 +80,7 @@ const char color_matrix_program_code[] = { "sampler samp0 : register(s0);\n" "Texture2D Tex0 : register(t0);\n" "uniform float4 cColMatrix[7] : register(c0);\n" - "void main(\n" + "void main(\n" "out float4 ocol0 : SV_Target,\n" "in float4 pos : SV_Position,\n" " in float2 uv0 : TEXCOORD0){\n" @@ -94,7 +94,7 @@ const char color_matrix_program_code_msaa[] = { "sampler samp0 : register(s0);\n" "Texture2DMS Tex0 : register(t0);\n" "uniform float4 cColMatrix[7] : register(c0);\n" - "void main(\n" + "void main(\n" "out float4 ocol0 : SV_Target,\n" "in float4 pos : SV_Position,\n" " in float2 uv0 : TEXCOORD0){\n" @@ -343,7 +343,7 @@ ID3D11Buffer* &PixelShaderCache::GetConstantBuffer() memcpy(map.pData, &PixelShaderManager::constants, sizeof(PixelShaderConstants)); D3D::context->Unmap(pscbuf, 0); PixelShaderManager::dirty = false; - + ADDSTAT(stats.thisFrame.bytesUniformStreamed, sizeof(PixelShaderConstants)); } return pscbuf; @@ -368,7 +368,7 @@ void PixelShaderCache::Init() D3D::SetDebugObjectName((ID3D11DeviceChild*)pscbuf, "pixel shader constant buffer used to emulate the GX pipeline"); // used when drawing clear quads - s_ClearProgram = D3D::CompileAndCreatePixelShader(clear_program_code, sizeof(clear_program_code)); + s_ClearProgram = D3D::CompileAndCreatePixelShader(clear_program_code, sizeof(clear_program_code)); CHECK(s_ClearProgram!=NULL, "Create clear pixel shader"); D3D::SetDebugObjectName((ID3D11DeviceChild*)s_ClearProgram, "clear pixel shader"); @@ -441,7 +441,7 @@ void PixelShaderCache::Shutdown() SAFE_RELEASE(s_rgba6_to_rgb8[i]); SAFE_RELEASE(s_rgb8_to_rgba6[i]); } - + Clear(); g_ps_disk_cache.Sync(); g_ps_disk_cache.Close(); @@ -477,7 +477,7 @@ bool PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components) { const PSCacheEntry &entry = iter->second; last_entry = &entry; - + GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE,true); return (entry.shader != NULL); } diff --git a/Source/Core/VideoBackends/D3D/Src/PointGeometryShader.cpp b/Source/Core/VideoBackends/D3D/Src/PointGeometryShader.cpp index f33d7444a2..30e4434521 100644 --- a/Source/Core/VideoBackends/D3D/Src/PointGeometryShader.cpp +++ b/Source/Core/VideoBackends/D3D/Src/PointGeometryShader.cpp @@ -168,7 +168,7 @@ bool PointGeometryShader::SetShader(u32 components, float pointSize, code.SetBuffer(buffer); GenerateVSOutputStructForGS(code, components, API_D3D); code.Write("\n%s", POINT_GS_COMMON); - + std::stringstream numTexCoordsStream; numTexCoordsStream << xfregs.numTexGen.numTexGens; diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index d58cc59e98..33528359c5 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -2,7 +2,8 @@ // Licensed under GPLv2 // Refer to the license.txt file included. -#include +#include +#include #include "Timer.h" @@ -293,7 +294,7 @@ bool Renderer::CheckForResize() // Sanity check if ((client_width != Renderer::GetBackbufferWidth() || - client_height != Renderer::GetBackbufferHeight()) && + client_height != Renderer::GetBackbufferHeight()) && client_width >= 4 && client_height >= 4) { return true; @@ -449,7 +450,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) else if (bpmem.zcontrol.pixel_format == PIXELFMT_RGB565_Z16) { ret = RGBA8ToRGB565ToRGBA8(ret); - } + } if(bpmem.zcontrol.pixel_format != PIXELFMT_RGBA6_Z24) { ret |= 0xFF000000; @@ -477,30 +478,9 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) } } -// Viewport correction: -// Say you want a viewport at (ix, iy) with size (iw, ih), -// but your viewport must be clamped at (ax, ay) with size (aw, ah). -// Just multiply the projection matrix with the following to get the same -// effect: -// [ (iw/aw) 0 0 ((iw - 2*(ax-ix)) / aw - 1) ] -// [ 0 (ih/ah) 0 ((-ih + 2*(ay-iy)) / ah + 1) ] -// [ 0 0 1 0 ] -// [ 0 0 0 1 ] -static void ViewportCorrectionMatrix(Matrix44& result, - float ix, float iy, float iw, float ih, // Intended viewport (x, y, width, height) - float ax, float ay, float aw, float ah) // Actual viewport (x, y, width, height) -{ - Matrix44::LoadIdentity(result); - if (aw == 0.f || ah == 0.f) - return; - result.data[4*0+0] = iw / aw; - result.data[4*0+3] = (iw - 2.f * (ax - ix)) / aw - 1.f; - result.data[4*1+1] = ih / ah; - result.data[4*1+3] = (-ih + 2.f * (ay - iy)) / ah + 1.f; -} // Called from VertexShaderManager -void Renderer::UpdateViewport(Matrix44& vpCorrection) +void Renderer::UpdateViewport() { // reversed gxsetviewport(xorig, yorig, width, height, nearz, farz) // [0] = width/2 @@ -513,50 +493,30 @@ void Renderer::UpdateViewport(Matrix44& vpCorrection) int scissorXOff = bpmem.scissorOffset.x * 2; int scissorYOff = bpmem.scissorOffset.y * 2; - // TODO: ceil, floor or just cast to int? - // TODO: Directly use the floats instead of rounding them? - int intendedX = Renderer::EFBToScaledX((int)ceil(xfregs.viewport.xOrig - xfregs.viewport.wd - scissorXOff)); - int intendedY = Renderer::EFBToScaledY((int)ceil(xfregs.viewport.yOrig + xfregs.viewport.ht - scissorYOff)); - int intendedWd = Renderer::EFBToScaledX((int)ceil(2.0f * xfregs.viewport.wd)); - int intendedHt = Renderer::EFBToScaledY((int)ceil(-2.0f * xfregs.viewport.ht)); - if (intendedWd < 0) + float X = Renderer::EFBToScaledXf(xfregs.viewport.xOrig - xfregs.viewport.wd - scissorXOff); + float Y = Renderer::EFBToScaledYf(xfregs.viewport.yOrig + xfregs.viewport.ht - scissorYOff); + float Wd = Renderer::EFBToScaledXf(2.0f * xfregs.viewport.wd); + float Ht = Renderer::EFBToScaledYf(-2.0f * xfregs.viewport.ht); + if (Wd < 0.0f) { - intendedX += intendedWd; - intendedWd = -intendedWd; + X += Wd; + Wd = -Wd; } - if (intendedHt < 0) + if (Ht < 0.0f) { - intendedY += intendedHt; - intendedHt = -intendedHt; + Y += Ht; + Ht = -Ht; } // In D3D, the viewport rectangle must fit within the render target. - int X = intendedX; - if (X < 0) - X = 0; - - int Y = intendedY; - if (Y < 0) - Y = 0; - - int Wd = intendedWd; - if (X + Wd > GetTargetWidth()) - Wd = GetTargetWidth() - X; - int Ht = intendedHt; - if (Y + Ht > GetTargetHeight()) - Ht = GetTargetHeight() - Y; - - // If GX viewport is off the render target, we must clamp our viewport - // within the bounds. Use the correction matrix to compensate. - ViewportCorrectionMatrix(vpCorrection, - (float)intendedX, (float)intendedY, - (float)intendedWd, (float)intendedHt, - (float)X, (float)Y, - (float)Wd, (float)Ht); + X = (X >= 0.f) ? X : 0.f; + Y = (Y >= 0.f) ? Y : 0.f; + Wd = (X + Wd <= GetTargetWidth()) ? Wd : (GetTargetWidth() - X); + Ht = (Y + Ht <= GetTargetHeight()) ? Ht : (GetTargetHeight() - Y); // Some games set invalid values for z-min and z-max so fix them to the max and min allowed and let the shaders do this work - D3D11_VIEWPORT vp = CD3D11_VIEWPORT((float)X, (float)Y, - (float)Wd, (float)Ht, + D3D11_VIEWPORT vp = CD3D11_VIEWPORT(X, Y, + Wd, Ht, 0.f, // (xfregs.viewport.farZ - xfregs.viewport.zRange) / 16777216.0f; 1.f); // xfregs.viewport.farZ / 16777216.0f; D3D::context->RSSetViewports(1, &vp); @@ -578,7 +538,7 @@ void Renderer::ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaE // Update the view port for clearing the picture TargetRectangle targetRc = Renderer::ConvertEFBRectangle(rc); - D3D11_VIEWPORT vp = CD3D11_VIEWPORT((float)targetRc.left, (float)targetRc.top, (float)targetRc.GetWidth(), (float)targetRc.GetHeight(), 0.f, 1.f); + D3D11_VIEWPORT vp = CD3D11_VIEWPORT((float)targetRc.left, (float)targetRc.top, (float)targetRc.GetWidth(), (float)targetRc.GetHeight(), 0.f, 1.f); D3D::context->RSSetViewports(1, &vp); // Color is passed in bgra mode so we need to convert it to rgba @@ -730,22 +690,13 @@ bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle D3D11_BOX box = CD3D11_BOX(rc.left, rc.top, 0, rc.right, rc.bottom, 1); D3D::context->CopySubresourceRegion(s_screenshot_texture, 0, 0, 0, 0, (ID3D11Resource*)D3D::GetBackBuffer()->GetTex(), 0, &box); - // D3DX11SaveTextureToFileA doesn't allow us to ignore the alpha channel, so we need to strip it out ourselves D3D11_MAPPED_SUBRESOURCE map; D3D::context->Map(s_screenshot_texture, 0, D3D11_MAP_READ_WRITE, 0, &map); - for (unsigned int y = 0; y < rc.GetHeight(); ++y) - { - u8* ptr = (u8*)map.pData + y * map.RowPitch + 3; - for (unsigned int x = 0; x < rc.GetWidth(); ++x) - { - *ptr = 0xFF; - ptr += 4; - } - } - D3D::context->Unmap(s_screenshot_texture, 0); // ready to be saved - HRESULT hr = PD3DX11SaveTextureToFileA(D3D::context, s_screenshot_texture, D3DX11_IFF_PNG, filename.c_str()); + HRESULT hr = D3D::TextureToPng(map, UTF8ToUTF16(filename.c_str()).c_str(), rc.GetWidth(), rc.GetHeight(), false); + D3D::context->Unmap(s_screenshot_texture, 0); + if (SUCCEEDED(hr)) { OSD::AddMessage(StringFromFormat("Saved %i x %i %s", rc.GetWidth(), @@ -842,7 +793,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r { xfbSource = xfbSourceList[i]; MathUtil::Rectangle sourceRc; - + sourceRc.left = 0; sourceRc.top = 0; sourceRc.right = (float)xfbSource->texWidth; @@ -969,7 +920,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r if (SConfig::GetInstance().m_ShowLag) { char lag[10]; - StringCchPrintfA(lag, 10, "Lag: %llu\n", Movie::g_currentLagCount); + StringCchPrintfA(lag, 10, "Lag: %" PRIu64 "\n", Movie::g_currentLagCount); D3D::font.DrawTextScaled(0, 18, 20, 0.0f, 0xFF00FFFF, lag); } @@ -1067,10 +1018,10 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r } // begin next frame - Renderer::RestoreAPIState(); + RestoreAPIState(); D3D::BeginFrame(); D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), FramebufferManager::GetEFBDepthTexture()->GetDSV()); - VertexShaderManager::SetViewportChanged(); + UpdateViewport(); Core::Callback_VideoCopiedToXFB(XFBWrited || (g_ActiveConfig.bUseXFB && g_ActiveConfig.bUseRealXFB)); XFBWrited = false; @@ -1090,7 +1041,7 @@ void Renderer::RestoreAPIState() D3D::stateman->PopBlendState(); D3D::stateman->PopDepthState(); D3D::stateman->PopRasterizerState(); - VertexShaderManager::SetViewportChanged(); + UpdateViewport(); BPFunctions::SetScissor(); } @@ -1300,7 +1251,7 @@ void Renderer::SetLogicOpMode() D3D11_BLEND_INV_DEST_COLOR,//10 D3D11_BLEND_ONE,//11 D3D11_BLEND_INV_SRC_COLOR,//12 - D3D11_BLEND_INV_SRC_COLOR,//13 + D3D11_BLEND_INV_SRC_COLOR,//13 D3D11_BLEND_INV_DEST_COLOR,//14 D3D11_BLEND_ONE//15 }; @@ -1319,7 +1270,7 @@ void Renderer::SetLogicOpMode() D3D11_BLEND_INV_DEST_COLOR,//10 D3D11_BLEND_INV_DEST_COLOR,//11 D3D11_BLEND_INV_SRC_COLOR,//12 - D3D11_BLEND_ONE,//13 + D3D11_BLEND_ONE,//13 D3D11_BLEND_INV_SRC_COLOR,//14 D3D11_BLEND_ONE//15 }; @@ -1370,7 +1321,7 @@ void Renderer::SetSamplerState(int stage, int texindex) const FourTexUnits &tex = bpmem.tex[texindex]; const TexMode0 &tm0 = tex.texMode0[stage]; const TexMode1 &tm1 = tex.texMode1[stage]; - + unsigned int mip = d3dMipFilters[tm0.min_filter & 3]; if (texindex) stage += 4; diff --git a/Source/Core/VideoBackends/D3D/Src/Render.h b/Source/Core/VideoBackends/D3D/Src/Render.h index 39b5b90d81..12e5b595d3 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.h +++ b/Source/Core/VideoBackends/D3D/Src/Render.h @@ -46,7 +46,7 @@ public: void ReinterpretPixelData(unsigned int convtype); - void UpdateViewport(Matrix44& vpCorrection); + void UpdateViewport(); bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc); diff --git a/Source/Core/VideoBackends/D3D/Src/Television.cpp b/Source/Core/VideoBackends/D3D/Src/Television.cpp index daabf6d8b3..029ba9ce9f 100644 --- a/Source/Core/VideoBackends/D3D/Src/Television.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Television.cpp @@ -103,7 +103,7 @@ void Television::Init() D3D::SetDebugObjectName(m_pShader, "yuyv decoder pixel shader"); // Create sampler state and set border color - // + // // The default sampler border color of { 0.f, 0.f, 0.f, 0.f } // creates a green border around the image - see issue 6483 // (remember, the XFB is being interpreted as YUYV, and 0,0,0,0 diff --git a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp index e803f4a8f2..9d1e28b9b0 100644 --- a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp +++ b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp @@ -42,7 +42,33 @@ bool TextureCache::TCacheEntry::Save(const char filename[], unsigned int level) warn_once = false; return false; } - return SUCCEEDED(PD3DX11SaveTextureToFileA(D3D::context, texture->GetTex(), D3DX11_IFF_PNG, filename)); + + ID3D11Texture2D* pNewTexture = NULL; + ID3D11Texture2D* pSurface = texture->GetTex(); + D3D11_TEXTURE2D_DESC desc; + pSurface->GetDesc(&desc); + + desc.BindFlags = 0; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; + desc.Usage = D3D11_USAGE_STAGING; + + HRESULT hr = D3D::device->CreateTexture2D(&desc, NULL, &pNewTexture); + + if (SUCCEEDED(hr) && pNewTexture) + { + D3D::context->CopyResource(pNewTexture, pSurface); + + D3D11_MAPPED_SUBRESOURCE map; + HRESULT hr = D3D::context->Map(pNewTexture, 0, D3D11_MAP_READ_WRITE, 0, &map); + if (SUCCEEDED(hr)) + { + hr = D3D::TextureToPng(map, UTF8ToUTF16(filename).c_str(), desc.Width, desc.Height); + D3D::context->Unmap(pNewTexture, 0); + } + SAFE_RELEASE(pNewTexture); + } + + return SUCCEEDED(hr); } void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, @@ -82,10 +108,10 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, // TODO: better debug names D3D::SetDebugObjectName((ID3D11DeviceChild*)entry->texture->GetTex(), "a texture of the TextureCache"); - D3D::SetDebugObjectName((ID3D11DeviceChild*)entry->texture->GetSRV(), "shader resource view of a texture of the TextureCache"); + D3D::SetDebugObjectName((ID3D11DeviceChild*)entry->texture->GetSRV(), "shader resource view of a texture of the TextureCache"); SAFE_RELEASE(pTexture); - + if (tex_levels != 1) entry->Load(width, height, expanded_width, 0); @@ -137,7 +163,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo VertexShaderCache::GetSimpleVertexShader(), VertexShaderCache::GetSimpleInputLayout()); D3D::context->OMSetRenderTargets(1, &FramebufferManager::GetEFBColorTexture()->GetRTV(), FramebufferManager::GetEFBDepthTexture()->GetDSV()); - + g_renderer->RestoreAPIState(); } diff --git a/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp b/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp index b16a91ad95..b951a7464f 100644 --- a/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp +++ b/Source/Core/VideoBackends/D3D/Src/VertexManager.cpp @@ -40,7 +40,7 @@ void VertexManager::CreateDeviceObjects() m_line_draw_index = 0; m_point_draw_index = 0; m_index_buffers = new PID3D11Buffer[MAX_VBUFFER_COUNT]; - m_vertex_buffers = new PID3D11Buffer[MAX_VBUFFER_COUNT]; + m_vertex_buffers = new PID3D11Buffer[MAX_VBUFFER_COUNT]; for (m_current_index_buffer = 0; m_current_index_buffer < MAX_VBUFFER_COUNT; m_current_index_buffer++) { m_index_buffers[m_current_index_buffer] = NULL; @@ -74,7 +74,7 @@ void VertexManager::DestroyDeviceObjects() SAFE_RELEASE(m_vertex_buffers[m_current_vertex_buffer]); SAFE_RELEASE(m_index_buffers[m_current_vertex_buffer]); } - + } VertexManager::VertexManager() @@ -96,7 +96,7 @@ void VertexManager::PrepareDrawBuffers() if (m_vertex_buffer_cursor + vSize >= VBUFFER_SIZE) { // Wrap around - m_current_vertex_buffer = (m_current_vertex_buffer + 1) % MAX_VBUFFER_COUNT; + m_current_vertex_buffer = (m_current_vertex_buffer + 1) % MAX_VBUFFER_COUNT; m_vertex_buffer_cursor = 0; MapType = D3D11_MAP_WRITE_DISCARD; } @@ -114,7 +114,7 @@ void VertexManager::PrepareDrawBuffers() if (m_index_buffer_cursor + iCount >= (IBUFFER_SIZE / sizeof(u16))) { // Wrap around - m_current_index_buffer = (m_current_index_buffer + 1) % MAX_VBUFFER_COUNT; + m_current_index_buffer = (m_current_index_buffer + 1) % MAX_VBUFFER_COUNT; m_index_buffer_cursor = 0; MapType = D3D11_MAP_WRITE_DISCARD; } @@ -128,7 +128,7 @@ void VertexManager::PrepareDrawBuffers() memcpy((u16*)map.pData + m_point_draw_index, GetPointIndexBuffer(), sizeof(u16) * IndexGenerator::GetPointindexLen()); D3D::context->Unmap(m_index_buffers[m_current_index_buffer], 0); m_index_buffer_cursor += iCount; - + ADDSTAT(stats.thisFrame.bytesVertexStreamed, vSize); ADDSTAT(stats.thisFrame.bytesIndexStreamed, iCount*sizeof(u16)); } @@ -141,7 +141,7 @@ void VertexManager::Draw(UINT stride) { D3D::context->IASetVertexBuffers(0, 1, &m_vertex_buffers[m_current_vertex_buffer], &stride, &m_vertex_draw_offset); D3D::context->IASetIndexBuffer(m_index_buffers[m_current_index_buffer], DXGI_FORMAT_R16_UINT, 0); - + if (IndexGenerator::GetNumTriangles() > 0) { D3D::context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); @@ -217,14 +217,14 @@ void VertexManager::vFlush() { g_renderer->SetSamplerState(i & 3, i >> 2); const FourTexUnits &tex = bpmem.tex[i >> 2]; - const TextureCache::TCacheEntryBase* tentry = TextureCache::Load(i, + const TextureCache::TCacheEntryBase* tentry = TextureCache::Load(i, (tex.texImage3[i&3].image_base/* & 0x1FFFFF*/) << 5, tex.texImage0[i&3].width + 1, tex.texImage0[i&3].height + 1, - tex.texImage0[i&3].format, tex.texTlut[i&3].tmem_offset<<9, + tex.texImage0[i&3].format, tex.texTlut[i&3].tmem_offset<<9, tex.texTlut[i&3].tlut_format, - (tex.texMode0[i&3].min_filter & 3), + ((tex.texMode0[i&3].min_filter & 3) != 0), (tex.texMode1[i&3].max_lod + 0xf) / 0x10, - tex.texImage1[i&3].image_type); + (tex.texImage1[i&3].image_type != 0)); if (tentry) { diff --git a/Source/Core/VideoBackends/D3D/Src/VertexManager.h b/Source/Core/VideoBackends/D3D/Src/VertexManager.h index 889c2ee0eb..b4b7aa0ef4 100644 --- a/Source/Core/VideoBackends/D3D/Src/VertexManager.h +++ b/Source/Core/VideoBackends/D3D/Src/VertexManager.h @@ -23,7 +23,7 @@ public: void DestroyDeviceObjects(); private: - + void PrepareDrawBuffers(); void Draw(u32 stride); // temp diff --git a/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.cpp b/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.cpp index 28a03b3bca..e17f273a85 100644 --- a/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.cpp +++ b/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.cpp @@ -47,7 +47,7 @@ ID3D11Buffer* &VertexShaderCache::GetConstantBuffer() memcpy(map.pData, &VertexShaderManager::constants, sizeof(VertexShaderConstants)); D3D::context->Unmap(vscbuf, 0); VertexShaderManager::dirty = false; - + ADDSTAT(stats.thisFrame.bytesUniformStreamed, sizeof(VertexShaderConstants)); } return vscbuf; @@ -87,7 +87,7 @@ const char clear_shader_code[] = { "struct VSOUTPUT\n" "{\n" "float4 vPosition : POSITION;\n" - "float4 vColor0 : COLOR0;\n" + "float4 vColor0 : COLOR0;\n" "};\n" "VSOUTPUT main(float4 inPosition : POSITION,float4 inColor0: COLOR0)\n" "{\n" @@ -104,7 +104,7 @@ void VertexShaderCache::Init() { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - + }; const D3D11_INPUT_ELEMENT_DESC clearelems[2] = { diff --git a/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.h b/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.h index b80dbcd7b1..5fe81a11d5 100644 --- a/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.h +++ b/Source/Core/VideoBackends/D3D/Src/VertexShaderCache.h @@ -35,7 +35,7 @@ public: private: struct VSCacheEntry - { + { ID3D11VertexShader* shader; D3DBlob* bytecode; // needed to initialize the input layout @@ -55,7 +55,7 @@ private: } }; typedef std::map VSCache; - + static VSCache vshaders; static const VSCacheEntry* last_entry; static VertexShaderUid last_uid; diff --git a/Source/Core/VideoBackends/D3D/Src/main.cpp b/Source/Core/VideoBackends/D3D/Src/main.cpp index 989fb2ef91..0514106da5 100644 --- a/Source/Core/VideoBackends/D3D/Src/main.cpp +++ b/Source/Core/VideoBackends/D3D/Src/main.cpp @@ -90,6 +90,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsFormatReinterpretation = true; g_Config.backend_info.bSupportsPixelLighting = true; g_Config.backend_info.bSupportsPrimitiveRestart = true; + g_Config.backend_info.bSupportsOversizedViewports = false; IDXGIFactory* factory; IDXGIAdapter* ad; diff --git a/Source/Core/VideoBackends/D3D/Src/stdafx.h b/Source/Core/VideoBackends/D3D/Src/stdafx.h index 2431184aaf..81bb44dc19 100644 --- a/Source/Core/VideoBackends/D3D/Src/stdafx.h +++ b/Source/Core/VideoBackends/D3D/Src/stdafx.h @@ -9,4 +9,4 @@ #endif #include -#include +#include diff --git a/Source/Core/VideoBackends/OGL/OGL.vcxproj b/Source/Core/VideoBackends/OGL/OGL.vcxproj index 46113f53ce..a0c804a051 100644 --- a/Source/Core/VideoBackends/OGL/OGL.vcxproj +++ b/Source/Core/VideoBackends/OGL/OGL.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,124 +19,29 @@ - {1909CD2D-1707-456F-86CA-0DF42A727C99} - VideoOGL - VideoOGL + {EC1A314C-5588-4506-9C1E-2E58E5817F75} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - false - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\include;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - @@ -156,15 +53,10 @@ - - Create - Create - Create - Create - Create - Create + Create + @@ -180,25 +72,31 @@ - + - + - - {3e1339f5-9311-4122-9442-369702e8fcad} + + {2a3f751d-69e9-45f2-9199-9a00bfb6cc72} - - {3e5c4e02-1ba9-4776-bdbe-e3f91ffa34cf} + + {1c8436c9-dbaf-42be-83bc-cf3ec9175abe} + + + {ff213b23-2c26-4214-9f88-85271e557e87} + + + {3de9ee35-3e91-4f27-a014-2866ad8c3fe3} - + \ No newline at end of file diff --git a/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters b/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters index bf498a83e0..c284f425dd 100644 --- a/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters +++ b/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters @@ -1,8 +1,20 @@  - - + + {f29f8e7f-21ba-49da-8044-e5279a091c8f} + + + {5bfec41c-1031-4925-8f98-38c7b49b1924} + + + {00dadfd8-a906-4b0c-b415-d42a69cf3ca7} + + + {696df73b-378e-4399-8f21-999b65d78dcd} + + + Decoder @@ -21,7 +33,7 @@ Render - + Render @@ -39,19 +51,11 @@ Render - - Render - - - Render - + + - - - - Decoder @@ -67,6 +71,9 @@ Render + + Render + Render @@ -76,30 +83,19 @@ Render + + Render + Render - - Render - + + - + + - - - - - {a0bb3390-6085-4d10-af48-b60eb4c920e7} - - - {5b16573b-fb79-4a51-aa7a-d760df844128} - - - {14fca297-ab2f-4686-855f-65ab18602248} - - - {aaa16061-dca9-4155-be44-f77538e839fc} - + \ No newline at end of file diff --git a/Source/Core/VideoBackends/OGL/Src/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/Src/FramebufferManager.cpp index 4c395d7257..081c5e71d0 100644 --- a/Source/Core/VideoBackends/OGL/Src/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/OGL/Src/FramebufferManager.cpp @@ -47,7 +47,7 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms m_resolvedColorTexture = 0; m_resolvedDepthTexture = 0; m_xfbFramebuffer = 0; - + m_targetWidth = targetWidth; m_targetHeight = targetHeight; @@ -95,7 +95,7 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms glBindTexture(getFbType(), m_efbDepth); glTexParameteri(getFbType(), GL_TEXTURE_MAX_LEVEL, 0); glTexImage2D(getFbType(), 0, depthType, m_targetWidth, m_targetHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); - + glBindTexture(getFbType(), m_resolvedColorTexture); glTexParameteri(getFbType(), GL_TEXTURE_MAX_LEVEL, 0); glTexImage2D(getFbType(), 0, GL_RGBA, m_targetWidth, m_targetHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); @@ -177,14 +177,14 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms // Create XFB framebuffer; targets will be created elsewhere. glGenFramebuffers(1, &m_xfbFramebuffer); - + // EFB framebuffer is currently bound, make sure to clear its alpha value to 1.f glViewport(0, 0, m_targetWidth, m_targetHeight); glScissor(0, 0, m_targetWidth, m_targetHeight); glClearColor(0.f, 0.f, 0.f, 1.f); glClearDepthf(1.0f); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - + // reinterpret pixel format glGenBuffers(1, &m_pixel_format_vbo); glGenVertexArrays(1, &m_pixel_format_vao); @@ -192,7 +192,7 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms glBindBuffer(GL_ARRAY_BUFFER, m_pixel_format_vbo); glEnableVertexAttribArray(SHADER_POSITION_ATTRIB); glVertexAttribPointer(SHADER_POSITION_ATTRIB, 2, GL_FLOAT, 0, sizeof(GLfloat)*2, NULL); - + float vertices[] = { -1.0, -1.0, 1.0, -1.0, @@ -200,14 +200,14 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms 1.0, 1.0, }; glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - char vs[] = + + char vs[] = "ATTRIN vec2 rawpos;\n" "void main(void) {\n" " gl_Position = vec4(rawpos,0,1);\n" "}\n"; - - char ps_rgba6_to_rgb8[] = + + char ps_rgba6_to_rgb8[] = "uniform sampler2DRect samp9;\n" "COLOROUT(ocol0)\n" "void main()\n" @@ -220,8 +220,8 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms " dst8.a = 255;\n" " ocol0 = float4(dst8) / 255.f;\n" "}"; - - char ps_rgb8_to_rgba6[] = + + char ps_rgb8_to_rgba6[] = "uniform sampler2DRect samp9;\n" "COLOROUT(ocol0)\n" "void main()\n" @@ -234,11 +234,11 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms " dst6.a = src8.b & 0x3F;\n" " ocol0 = float4(dst6) / 63.f;\n" "}"; - + if(g_ogl_config.eSupportedGLSLVersion != GLSLES2) { // HACK: This shaders aren't glsles2 compatible as glsles2 don't support bit operations - // it could be workaround by floor + frac + tons off additions, but I think it isn't worth + // it could be workaround by floor + frac + tons off additions, but I think it isn't worth ProgramShaderCache::CompileShader(m_pixel_format_shaders[0], vs, ps_rgb8_to_rgba6); ProgramShaderCache::CompileShader(m_pixel_format_shaders[1], vs, ps_rgba6_to_rgb8); } @@ -273,7 +273,7 @@ FramebufferManager::~FramebufferManager() glDeleteRenderbuffers(2, glObj); m_efbColor = 0; m_efbDepth = 0; - + // reinterpret pixel format glDeleteVertexArrays(1, &m_pixel_format_vao); glDeleteBuffers(1, &m_pixel_format_vbo); @@ -386,9 +386,9 @@ void FramebufferManager::ReinterpretPixelData(unsigned int convtype) return; } g_renderer->ResetAPIState(); - + GLuint src_texture = 0; - + if(m_msaaSamples > 1) { // MSAA mode, so resolve first @@ -402,7 +402,7 @@ void FramebufferManager::ReinterpretPixelData(unsigned int convtype) // Return to EFB. glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_efbFramebuffer); - + src_texture = m_resolvedColorTexture; } else @@ -411,18 +411,18 @@ void FramebufferManager::ReinterpretPixelData(unsigned int convtype) src_texture = m_efbColor; m_efbColor = m_resolvedColorTexture; m_resolvedColorTexture = src_texture; - + // also switch them on fbo glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, getFbType(), m_efbColor, 0); } glViewport(0,0, m_targetWidth, m_targetHeight); glActiveTexture(GL_TEXTURE0 + 9); glBindTexture(getFbType(), src_texture); - + m_pixel_format_shaders[convtype ? 1 : 0].Bind(); glBindVertexArray(m_pixel_format_vao); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - + g_renderer->RestoreAPIState(); } @@ -452,7 +452,7 @@ void XFBSource::DecodeToTexture(u32 xfbAddr, u32 fbWidth, u32 fbHeight) void XFBSource::CopyEFB(float Gamma) { g_renderer->ResetAPIState(); - + // Copy EFB data to XFB and restore render target again glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetEFBFramebuffer()); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferManager::GetXFBFramebuffer()); @@ -469,7 +469,7 @@ void XFBSource::CopyEFB(float Gamma) // Return to EFB. FramebufferManager::SetFramebuffer(0); - + g_renderer->RestoreAPIState(); } @@ -479,7 +479,7 @@ XFBSourceBase* FramebufferManager::CreateXFBSource(unsigned int target_width, un GLuint texture; glGenTextures(1, &texture); - + glActiveTexture(GL_TEXTURE0 + 9); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); diff --git a/Source/Core/VideoBackends/OGL/Src/FramebufferManager.h b/Source/Core/VideoBackends/OGL/Src/FramebufferManager.h index 5b0d66f7f6..47c8b2048d 100644 --- a/Source/Core/VideoBackends/OGL/Src/FramebufferManager.h +++ b/Source/Core/VideoBackends/OGL/Src/FramebufferManager.h @@ -49,10 +49,10 @@ struct XFBSource : public XFBSourceBase XFBSource(GLuint tex) : texture(tex) {} ~XFBSource(); - void CopyEFB(float Gamma); - void DecodeToTexture(u32 xfbAddr, u32 fbWidth, u32 fbHeight); + void CopyEFB(float Gamma) override; + void DecodeToTexture(u32 xfbAddr, u32 fbWidth, u32 fbHeight) override; void Draw(const MathUtil::Rectangle &sourcerc, - const MathUtil::Rectangle &drawrc, int width, int height) const; + const MathUtil::Rectangle &drawrc, int width, int height) const override; const GLuint texture; }; @@ -93,16 +93,16 @@ public: // Same as above but for the depth Target. // After calling this, before you render anything else, you MUST bind the framebuffer you want to draw to. static GLuint ResolveAndGetDepthTarget(const EFBRectangle &rect); - - // Convert EFB content on pixel format change. + + // Convert EFB content on pixel format change. // convtype=0 -> rgb8->rgba6, convtype=2 -> rgba6->rgb8 static void ReinterpretPixelData(unsigned int convtype); private: - XFBSourceBase* CreateXFBSource(unsigned int target_width, unsigned int target_height); - void GetTargetSize(unsigned int *width, unsigned int *height, const EFBRectangle& sourceRc); + XFBSourceBase* CreateXFBSource(unsigned int target_width, unsigned int target_height) override; + void GetTargetSize(unsigned int *width, unsigned int *height, const EFBRectangle& sourceRc) override; - void CopyToRealXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc,float Gamma); + void CopyToRealXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc,float Gamma) override; static int m_targetWidth; static int m_targetHeight; @@ -119,7 +119,7 @@ private: static GLuint m_resolvedDepthTexture; static GLuint m_xfbFramebuffer; // Only used in MSAA mode - + // For pixel format draw static GLuint m_pixel_format_vbo; static GLuint m_pixel_format_vao; diff --git a/Source/Core/VideoBackends/OGL/Src/GLFunctions.cpp b/Source/Core/VideoBackends/OGL/Src/GLFunctions.cpp index 598f336036..6ff264aebe 100644 --- a/Source/Core/VideoBackends/OGL/Src/GLFunctions.cpp +++ b/Source/Core/VideoBackends/OGL/Src/GLFunctions.cpp @@ -120,11 +120,11 @@ namespace GLFunc LoadFunction("glBindSampler", (void**)&glBindSampler); LoadFunction("glDeleteSamplers", (void**)&glDeleteSamplers); LoadFunction("glGenSamplers", (void**)&glGenSamplers); - + LoadFunction("glGetProgramBinary", (void**)&glGetProgramBinary); LoadFunction("glProgramBinary", (void**)&glProgramBinary); LoadFunction("glProgramParameteri", (void**)&glProgramParameteri); - + LoadFunction("glDrawRangeElements", (void**)&glDrawRangeElements); LoadFunction("glRenderbufferStorageMultisample", (void**)&glRenderbufferStorageMultisample); diff --git a/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp b/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp index 256b30ace8..f2cf74acf2 100644 --- a/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp +++ b/Source/Core/VideoBackends/OGL/Src/GLUtil.cpp @@ -10,7 +10,6 @@ #include "ConfigManager.h" #include "Render.h" -#include "VertexShaderManager.h" #include "GLUtil.h" @@ -54,7 +53,7 @@ GLuint OpenGL_CompileProgram ( const char* vertexShader, const char* fragmentSha GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER); GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); GLuint programID = glCreateProgram(); - + // compile vertex shader glShaderSource(vertexShaderID, 1, &vertexShader, NULL); glCompileShader(vertexShaderID); @@ -73,7 +72,7 @@ GLuint OpenGL_CompileProgram ( const char* vertexShader, const char* fragmentSha } bool shader_errors = !Result; #endif - + // compile fragment shader glShaderSource(fragmentShaderID, 1, &fragmentShader, NULL); glCompileShader(fragmentShaderID); @@ -89,7 +88,7 @@ GLuint OpenGL_CompileProgram ( const char* vertexShader, const char* fragmentSha } shader_errors |= !Result; #endif - + // link them glAttachShader(programID, vertexShaderID); glAttachShader(programID, fragmentShaderID); @@ -103,11 +102,11 @@ GLuint OpenGL_CompileProgram ( const char* vertexShader, const char* fragmentSha ERROR_LOG(VIDEO, "GLSL linker error:\n%s%s%s", stringBuffer, vertexShader, fragmentShader); } #endif - + // cleanup glDeleteShader(vertexShaderID); glDeleteShader(fragmentShaderID); - + return programID; } diff --git a/Source/Core/VideoBackends/OGL/Src/GLUtil.h b/Source/Core/VideoBackends/OGL/Src/GLUtil.h index 54a2ac5735..48466fe580 100644 --- a/Source/Core/VideoBackends/OGL/Src/GLUtil.h +++ b/Source/Core/VideoBackends/OGL/Src/GLUtil.h @@ -32,11 +32,12 @@ #define GL_BGRA GL_RGBA #define glDrawElementsBaseVertex(...) #define glDrawRangeElementsBaseVertex(...) -#define glRenderbufferStorageMultisampleCoverageNV(...) +#define glRenderbufferStorageMultisampleCoverageNV(...) +#define glViewportIndexedf(...) #endif #else #define TEX2D GL_TEXTURE_RECTANGLE_ARB -#define PREC +#define PREC #define TEXTYPE "sampler2DRect" #define TEXFUNC "texture2DRect" #endif @@ -70,14 +71,14 @@ __forceinline GLenum GL_REPORT_ERROR() { return GL_NO_ERROR; } #endif // this should be removed in future, but as long as glsl is unstable, we should really read this messages -#if defined(_DEBUG) || defined(DEBUGFAST) +#if defined(_DEBUG) || defined(DEBUGFAST) #define DEBUG_GLSL 1 #else #define DEBUG_GLSL 0 #endif // Isn't defined if we aren't using GLEW 1.6 -#ifndef GL_ONE_MINUS_SRC1_ALPHA +#ifndef GL_ONE_MINUS_SRC1_ALPHA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #endif diff --git a/Source/Core/VideoBackends/OGL/Src/NativeVertexFormat.cpp b/Source/Core/VideoBackends/OGL/Src/NativeVertexFormat.cpp index 293e674cbb..c0112c4e9e 100644 --- a/Source/Core/VideoBackends/OGL/Src/NativeVertexFormat.cpp +++ b/Source/Core/VideoBackends/OGL/Src/NativeVertexFormat.cpp @@ -48,21 +48,21 @@ void GLVertexFormat::Initialize(const PortableVertexDeclaration &_vtx_decl) vertex_stride = vtx_decl.stride; // We will not allow vertex components causing uneven strides. - if (vertex_stride & 3) + if (vertex_stride & 3) PanicAlert("Uneven vertex stride: %i", vertex_stride); - + VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; - + glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); - + // the element buffer is bound directly to the vao, so we must it set for every vao glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vm->m_index_buffers); glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers); glEnableVertexAttribArray(SHADER_POSITION_ATTRIB); glVertexAttribPointer(SHADER_POSITION_ATTRIB, 3, GL_FLOAT, GL_FALSE, vtx_decl.stride, (u8*)NULL); - + for (int i = 0; i < 3; i++) { if (vtx_decl.num_normals > i) { glEnableVertexAttribArray(SHADER_NORM0_ATTRIB+i); diff --git a/Source/Core/VideoBackends/OGL/Src/PerfQuery.cpp b/Source/Core/VideoBackends/OGL/Src/PerfQuery.cpp index f981a105e0..7cb408b62e 100644 --- a/Source/Core/VideoBackends/OGL/Src/PerfQuery.cpp +++ b/Source/Core/VideoBackends/OGL/Src/PerfQuery.cpp @@ -11,7 +11,7 @@ PerfQuery::PerfQuery() { for (u32 i = 0; i != ArraySize(m_query_buffer); ++i) glGenQueries(1, &m_query_buffer[i].query_id); - + ResetQuery(); } @@ -29,21 +29,21 @@ void PerfQuery::EnableQuery(PerfQueryGroup type) // Is this sane? if (m_query_count > ArraySize(m_query_buffer) / 2) WeakFlush(); - + if (ArraySize(m_query_buffer) == m_query_count) { FlushOne(); //ERROR_LOG(VIDEO, "Flushed query buffer early!"); } - + // start query if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP) { auto& entry = m_query_buffer[(m_query_read_pos + m_query_count) % ArraySize(m_query_buffer)]; - + glBeginQuery(GL_SAMPLES_PASSED, entry.query_id); entry.query_type = type; - + ++m_query_count; } } @@ -103,10 +103,10 @@ void PerfQuery::WeakFlush() while (!IsFlushed()) { auto& entry = m_query_buffer[m_query_read_pos]; - + GLuint result = GL_FALSE; glGetQueryObjectuiv(entry.query_id, GL_QUERY_RESULT_AVAILABLE, &result); - + if (GL_TRUE == result) { FlushOne(); @@ -130,7 +130,7 @@ u32 PerfQuery::GetQueryResult(PerfQueryType type) return 0; u32 result = 0; - + if (type == PQ_ZCOMP_INPUT_ZCOMPLOC || type == PQ_ZCOMP_OUTPUT_ZCOMPLOC) { result = m_results[PQG_ZCOMP_ZCOMPLOC]; @@ -147,7 +147,7 @@ u32 PerfQuery::GetQueryResult(PerfQueryType type) { result = m_results[PQG_EFB_COPY_CLOCKS]; } - + return result / 4; } diff --git a/Source/Core/VideoBackends/OGL/Src/PerfQuery.h b/Source/Core/VideoBackends/OGL/Src/PerfQuery.h index b96fe7a4a0..c47fa194d1 100644 --- a/Source/Core/VideoBackends/OGL/Src/PerfQuery.h +++ b/Source/Core/VideoBackends/OGL/Src/PerfQuery.h @@ -11,11 +11,11 @@ public: PerfQuery(); ~PerfQuery(); - void EnableQuery(PerfQueryGroup type); - void DisableQuery(PerfQueryGroup type); - void ResetQuery(); - u32 GetQueryResult(PerfQueryType type); - void FlushResults(); + void EnableQuery(PerfQueryGroup type) override; + void DisableQuery(PerfQueryGroup type) override; + void ResetQuery() override; + u32 GetQueryResult(PerfQueryType type) override; + void FlushResults() override; bool IsFlushed() const; private: diff --git a/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp b/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp index a748ab5085..84fb0c4d1c 100644 --- a/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp +++ b/Source/Core/VideoBackends/OGL/Src/PostProcessing.cpp @@ -37,7 +37,7 @@ static char s_vertex_shader[] = "void main(void) {\n" " gl_Position = vec4(rawpos,0,1);\n" " uv0 = tex0;\n" - "}\n"; + "}\n"; void Init() { @@ -45,7 +45,7 @@ void Init() s_enable = 0; s_width = 0; s_height = 0; - + glGenFramebuffers(1, &s_fbo); glGenTextures(1, &s_texture); glBindTexture(GL_TEXTURE_2D, s_texture); @@ -56,17 +56,17 @@ void Init() glBindFramebuffer(GL_FRAMEBUFFER, s_fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, s_texture, 0); FramebufferManager::SetFramebuffer(0); - + glGenBuffers(1, &s_vbo); glBindBuffer(GL_ARRAY_BUFFER, s_vbo); - GLfloat vertices[] = { - -1.f, -1.f, 0.f, 0.f, - -1.f, 1.f, 0.f, 1.f, - 1.f, -1.f, 1.f, 0.f, + GLfloat vertices[] = { + -1.f, -1.f, 0.f, 0.f, + -1.f, 1.f, 0.f, 1.f, + 1.f, -1.f, 1.f, 0.f, 1.f, 1.f, 1.f, 1.f }; glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - + glGenVertexArrays(1, &s_vao); glBindVertexArray( s_vao ); glEnableVertexAttribArray(SHADER_POSITION_ATTRIB); @@ -78,10 +78,10 @@ void Init() void Shutdown() { s_shader.Destroy(); - + glDeleteFramebuffers(1, &s_vbo); glDeleteTextures(1, &s_texture); - + glDeleteBuffers(1, &s_vbo); glDeleteVertexArrays(1, &s_vao); } @@ -99,22 +99,22 @@ void BindTargetFramebuffer () void BlitToScreen() { if(!s_enable) return; - + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glViewport(0, 0, s_width, s_height); - + glBindVertexArray(s_vao); s_shader.Bind(); - + glUniform4f(s_uniform_resolution, (float)s_width, (float)s_height, 1.0f/(float)s_width, 1.0f/(float)s_height); - + glActiveTexture(GL_TEXTURE0+9); glBindTexture(GL_TEXTURE_2D, s_texture); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glBindTexture(GL_TEXTURE_2D, 0); - + /* glBindFramebuffer(GL_READ_FRAMEBUFFER, s_fbo); - + glBlitFramebuffer(rc.left, rc.bottom, rc.right, rc.top, rc.left, rc.bottom, rc.right, rc.top, GL_COLOR_BUFFER_BIT, GL_NEAREST);*/ @@ -127,7 +127,7 @@ void Update ( u32 width, u32 height ) if(s_enable && (width != s_width || height != s_height)) { s_width = width; s_height = height; - + // alloc texture for framebuffer glActiveTexture(GL_TEXTURE0+9); glBindTexture(GL_TEXTURE_2D, s_texture); @@ -143,12 +143,12 @@ void ApplyShader() s_currentShader = g_ActiveConfig.sPostProcessingShader; s_enable = false; s_shader.Destroy(); - + // shader disabled if (g_ActiveConfig.sPostProcessingShader == "") return; - + // so need to compile shader - + // loading shader code std::string code; std::string path = File::GetUserPath(D_SHADERS_IDX) + g_ActiveConfig.sPostProcessingShader + ".glsl"; @@ -157,20 +157,20 @@ void ApplyShader() // Fallback to shared user dir path = File::GetSysDirectory() + SHADERS_DIR DIR_SEP + g_ActiveConfig.sPostProcessingShader + ".glsl"; } - if(!File::ReadFileToString(true, path.c_str(), code)) { + if(!File::ReadFileToString(path.c_str(), code)) { ERROR_LOG(VIDEO, "Post-processing shader not found: %s", path.c_str()); return; } - + // and compile it if (!ProgramShaderCache::CompileShader(s_shader, s_vertex_shader, code.c_str())) { ERROR_LOG(VIDEO, "Failed to compile post-processing shader %s", s_currentShader.c_str()); return; } - + // read uniform locations s_uniform_resolution = glGetUniformLocation(s_shader.glprogid, "resolution"); - + // successful s_enable = true; } diff --git a/Source/Core/VideoBackends/OGL/Src/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/Src/ProgramShaderCache.cpp index 40eb206903..cc807b7952 100644 --- a/Source/Core/VideoBackends/OGL/Src/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/Src/ProgramShaderCache.cpp @@ -94,19 +94,19 @@ void SHADER::SetProgramVariables() { // glsl shader must be bind to set samplers Bind(); - - // Bind UBO + + // Bind UBO if (g_ActiveConfig.backend_info.bSupportsGLSLUBO) { GLint PSBlock_id = glGetUniformBlockIndex(glprogid, "PSBlock"); GLint VSBlock_id = glGetUniformBlockIndex(glprogid, "VSBlock"); - + if(PSBlock_id != -1) glUniformBlockBinding(glprogid, PSBlock_id, 1); if(VSBlock_id != -1) glUniformBlockBinding(glprogid, VSBlock_id, 2); } - + // UBO workaround for (int a = 0; a < NUM_UNIFORMS; ++a) { @@ -120,7 +120,7 @@ void SHADER::SetProgramVariables() int max_uniforms = 0; char name[50]; int size; - + glGetProgramiv(glprogid, GL_ACTIVE_UNIFORMS, &max_uniforms); for(int i=0; iUpload(tmpbuffer, s_ubo_buffer_size); - glBindBufferRange(GL_UNIFORM_BUFFER, 1, + glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_buffer->getBuffer(), offset, sizeof(PixelShaderConstants)); - glBindBufferRange(GL_UNIFORM_BUFFER, 2, + glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_buffer->getBuffer(), offset+ROUND_UP(sizeof(PixelShaderConstants), s_ubo_align), sizeof(VertexShaderConstants)); } else { size_t offset = s_buffer->Upload((u8*)&PixelShaderManager::constants, ROUND_UP(sizeof(PixelShaderConstants), s_ubo_align)); - glBindBufferRange(GL_UNIFORM_BUFFER, 1, + glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_buffer->getBuffer(), offset, sizeof(PixelShaderConstants)); offset = s_buffer->Upload((u8*)&VertexShaderManager::constants, ROUND_UP(sizeof(VertexShaderConstants), s_ubo_align)); - glBindBufferRange(GL_UNIFORM_BUFFER, 2, + glBindBufferRange(GL_UNIFORM_BUFFER, 2, s_buffer->getBuffer(), offset, sizeof(VertexShaderConstants)); } PixelShaderManager::dirty = false; VertexShaderManager::dirty = false; - + ADDSTAT(stats.thisFrame.bytesUniformStreamed, s_ubo_buffer_size); } } @@ -241,10 +241,10 @@ void ProgramShaderCache::UploadConstants() if(last_entry->shader.UniformSize[a+10] > 0) glUniform4fv(last_entry->shader.UniformLocations[a+10], last_entry->shader.UniformSize[a+10], (float*) &VertexShaderManager::constants + 4*VSVar_Loc[a]); } - + ADDSTAT(stats.thisFrame.bytesUniformStreamed, s_ubo_buffer_size); } - + } GLuint ProgramShaderCache::GetCurrentProgram(void) @@ -317,7 +317,7 @@ SHADER* ProgramShaderCache::SetShader ( DSTALPHA_MODE dstAlphaMode, u32 componen INCSTAT(stats.numPixelShadersCreated); SETSTAT(stats.numPixelShadersAlive, pshaders.size()); GFX_DEBUGGER_PAUSE_AT(NEXT_PIXEL_SHADER_CHANGE, true); - + last_entry->shader.Bind(); return &last_entry->shader; } @@ -333,9 +333,9 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons glDeleteShader(psid); return false; } - + GLuint pid = shader.glprogid = glCreateProgram();; - + glAttachShader(pid, vsid); glAttachShader(pid, psid); @@ -343,13 +343,13 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons glProgramParameteri(pid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); shader.SetProgramBindings(); - + glLinkProgram(pid); - + // original shaders aren't needed any more glDeleteShader(vsid); glDeleteShader(psid); - + GLint linkStatus; glGetProgramiv(pid, GL_LINK_STATUS, &linkStatus); GLsizei length = 0; @@ -366,7 +366,7 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons OpenFStream(file, szTemp, std::ios_base::out); file << s_glsl_header << vcode << s_glsl_header << pcode << infoLog; file.close(); - + if(linkStatus != GL_TRUE) PanicAlert("Failed to link shaders!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%s, %s, %s):\n%s", szTemp, @@ -374,7 +374,7 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons g_ogl_config.gl_renderer, g_ogl_config.gl_version, infoLog); - + delete [] infoLog; } if (linkStatus != GL_TRUE) @@ -388,7 +388,7 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons } shader.SetProgramVariables(); - + return true; } @@ -397,7 +397,7 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code ) GLuint result = glCreateShader(type); const char *src[] = {s_glsl_header, code}; - + glShaderSource(result, 2, src, NULL); glCompileShader(result); GLint compileStatus; @@ -415,16 +415,16 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code ) glGetShaderInfoLog(result, length, &charsWritten, infoLog); ERROR_LOG(VIDEO, "PS Shader info log:\n%s", infoLog); char szTemp[MAX_PATH]; - sprintf(szTemp, - "%sbad_%s_%04i.txt", - File::GetUserPath(D_DUMP_IDX).c_str(), - type==GL_VERTEX_SHADER ? "vs" : "ps", + sprintf(szTemp, + "%sbad_%s_%04i.txt", + File::GetUserPath(D_DUMP_IDX).c_str(), + type==GL_VERTEX_SHADER ? "vs" : "ps", num_failures++); std::ofstream file; OpenFStream(file, szTemp, std::ios_base::out); file << s_glsl_header << code << infoLog; file.close(); - + if(compileStatus != GL_TRUE) PanicAlert("Failed to compile %s shader!\nThis usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.\n\nIf you're sure this is Dolphin's error anyway, post the contents of %s along with this error message at the forums.\n\nDebug info (%s, %s, %s):\n%s", type==GL_VERTEX_SHADER ? "vertex" : "pixel", @@ -433,7 +433,7 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code ) g_ogl_config.gl_renderer, g_ogl_config.gl_version, infoLog); - + delete[] infoLog; } if (compileStatus != GL_TRUE) @@ -502,19 +502,19 @@ void ProgramShaderCache::Init(void) { if (!File::Exists(File::GetUserPath(D_SHADERCACHE_IDX))) File::CreateDir(File::GetUserPath(D_SHADERCACHE_IDX).c_str()); - + char cache_filename[MAX_PATH]; sprintf(cache_filename, "%sogl-%s-shaders.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(), SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str()); - + ProgramShaderCacheInserter inserter; g_program_disk_cache.OpenAndRead(cache_filename, inserter); } SETSTAT(stats.numPixelShadersAlive, pshaders.size()); } - + CreateHeader(); - + CurrentProgram = 0; last_entry = NULL; } @@ -528,16 +528,16 @@ void ProgramShaderCache::Shutdown(void) for (; iter != pshaders.end(); ++iter) { if(iter->second.in_cache) continue; - + GLint binary_size; glGetProgramiv(iter->second.shader.glprogid, GL_PROGRAM_BINARY_LENGTH, &binary_size); if(!binary_size) continue; - + u8 *data = new u8[binary_size+sizeof(GLenum)]; u8 *binary = data + sizeof(GLenum); GLenum *prog_format = (GLenum*)data; glGetProgramBinary(iter->second.shader.glprogid, binary_size, NULL, prog_format, binary); - + g_program_disk_cache.Append(iter->first, data, binary_size+sizeof(GLenum)); delete [] data; } @@ -547,7 +547,7 @@ void ProgramShaderCache::Shutdown(void) } glUseProgram(0); - + PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) iter->second.Destroy(); @@ -566,11 +566,11 @@ void ProgramShaderCache::Shutdown(void) void ProgramShaderCache::CreateHeader ( void ) { GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion; - snprintf(s_glsl_header, sizeof(s_glsl_header), + snprintf(s_glsl_header, sizeof(s_glsl_header), "%s\n" "%s\n" // ubo "%s\n" // early-z - + // Precision defines for GLSLES2/3 "%s\n" @@ -604,18 +604,18 @@ void ProgramShaderCache::CreateHeader ( void ) "%s\n" "#define COLOROUT(name) %s\n" - + , v==GLSLES2 ? "" : v==GLSLES3 ? "#version 300 es" : v==GLSL_130 ? "#version 130" : v==GLSL_140 ? "#version 140" : "#version 150" , g_ActiveConfig.backend_info.bSupportsGLSLUBO && v { public: - void Read(const SHADERUID &key, const u8 *value, u32 value_size); + void Read(const SHADERUID &key, const u8 *value, u32 value_size) override; }; static PCache pshaders; diff --git a/Source/Core/VideoBackends/OGL/Src/RasterFont.cpp b/Source/Core/VideoBackends/OGL/Src/RasterFont.cpp index 9e46a5eb86..c1817f3eeb 100644 --- a/Source/Core/VideoBackends/OGL/Src/RasterFont.cpp +++ b/Source/Core/VideoBackends/OGL/Src/RasterFont.cpp @@ -16,104 +16,104 @@ static const u32 char_offset = 32; static const u32 char_count = 95; const u8 rasters[char_count][char_height] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36}, - {0x00, 0x00, 0x00, 0x66, 0x66, 0xff, 0x66, 0x66, 0xff, 0x66, 0x66, 0x00, 0x00}, - {0x00, 0x00, 0x18, 0x7e, 0xff, 0x1b, 0x1f, 0x7e, 0xf8, 0xd8, 0xff, 0x7e, 0x18}, - {0x00, 0x00, 0x0e, 0x1b, 0xdb, 0x6e, 0x30, 0x18, 0x0c, 0x76, 0xdb, 0xd8, 0x70}, - {0x00, 0x00, 0x7f, 0xc6, 0xcf, 0xd8, 0x70, 0x70, 0xd8, 0xcc, 0xcc, 0x6c, 0x38}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x0c, 0x0e}, - {0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c}, - {0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30}, - {0x00, 0x00, 0x00, 0x00, 0x99, 0x5a, 0x3c, 0xff, 0x3c, 0x5a, 0x99, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00}, - {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03}, - {0x00, 0x00, 0x3c, 0x66, 0xc3, 0xe3, 0xf3, 0xdb, 0xcf, 0xc7, 0xc3, 0x66, 0x3c}, - {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0xe7, 0x7e}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0x07, 0x03, 0x03, 0xe7, 0x7e}, - {0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xff, 0xcc, 0x6c, 0x3c, 0x1c, 0x0c}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x03, 0x7f, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, - {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06}, - {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60}, - {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x0c, 0x06, 0x03, 0xc3, 0xc3, 0x7e}, - {0x00, 0x00, 0x3f, 0x60, 0xcf, 0xdb, 0xd3, 0xdd, 0xc3, 0x7e, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18}, - {0x00, 0x00, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, - {0x00, 0x00, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0xfc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xce, 0xfc}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, - {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e}, - {0x00, 0x00, 0x7c, 0xee, 0xc6, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06}, - {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xe0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc3}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xff, 0xff, 0xe7, 0xc3}, - {0x00, 0x00, 0xc7, 0xc7, 0xcf, 0xcf, 0xdf, 0xdb, 0xfb, 0xf3, 0xf3, 0xe3, 0xe3}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e}, - {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, - {0x00, 0x00, 0x3f, 0x6e, 0xdf, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}, - {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0xe0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, - {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x7e, 0x0c, 0x06, 0x03, 0x03, 0xff}, - {0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c}, - {0x00, 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60}, - {0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18}, - {0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x70}, - {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0x7f, 0x03, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x03, 0x03, 0x03, 0x03, 0x03}, - {0x00, 0x00, 0x7f, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x33, 0x1e}, - {0x7e, 0xc3, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00}, - {0x38, 0x6c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x00}, - {0x00, 0x00, 0xc6, 0xcc, 0xf8, 0xf0, 0xd8, 0xcc, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78}, - {0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xfe, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, - {0xc0, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0x00, 0x00, 0x00, 0x00}, - {0x03, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xfe, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xfe, 0x03, 0x03, 0x7e, 0xc0, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x1c, 0x36, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x00}, - {0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0xc0, 0x60, 0x60, 0x30, 0x18, 0x3c, 0x66, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xff, 0x60, 0x30, 0x18, 0x0c, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x0f, 0x18, 0x18, 0x18, 0x38, 0xf0, 0x38, 0x18, 0x18, 0x18, 0x0f}, - {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, - {0x00, 0x00, 0xf0, 0x18, 0x18, 0x18, 0x1c, 0x0f, 0x1c, 0x18, 0x18, 0x18, 0xf0}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8f, 0xf1, 0x60, 0x00, 0x00, 0x00} + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36}, + {0x00, 0x00, 0x00, 0x66, 0x66, 0xff, 0x66, 0x66, 0xff, 0x66, 0x66, 0x00, 0x00}, + {0x00, 0x00, 0x18, 0x7e, 0xff, 0x1b, 0x1f, 0x7e, 0xf8, 0xd8, 0xff, 0x7e, 0x18}, + {0x00, 0x00, 0x0e, 0x1b, 0xdb, 0x6e, 0x30, 0x18, 0x0c, 0x76, 0xdb, 0xd8, 0x70}, + {0x00, 0x00, 0x7f, 0xc6, 0xcf, 0xd8, 0x70, 0x70, 0xd8, 0xcc, 0xcc, 0x6c, 0x38}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x0c, 0x0e}, + {0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c}, + {0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30}, + {0x00, 0x00, 0x00, 0x00, 0x99, 0x5a, 0x3c, 0xff, 0x3c, 0x5a, 0x99, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00}, + {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03}, + {0x00, 0x00, 0x3c, 0x66, 0xc3, 0xe3, 0xf3, 0xdb, 0xcf, 0xc7, 0xc3, 0x66, 0x3c}, + {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18}, + {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0xe7, 0x7e}, + {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0x07, 0x03, 0x03, 0xe7, 0x7e}, + {0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xff, 0xcc, 0x6c, 0x3c, 0x1c, 0x0c}, + {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, + {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, + {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03, 0xff}, + {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, + {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x03, 0x7f, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, + {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06}, + {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60}, + {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x0c, 0x06, 0x03, 0xc3, 0xc3, 0x7e}, + {0x00, 0x00, 0x3f, 0x60, 0xcf, 0xdb, 0xd3, 0xdd, 0xc3, 0x7e, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18}, + {0x00, 0x00, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, + {0x00, 0x00, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, + {0x00, 0x00, 0xfc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xce, 0xfc}, + {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, + {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xff}, + {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, + {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, + {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e}, + {0x00, 0x00, 0x7c, 0xee, 0xc6, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06}, + {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xe0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc3}, + {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, + {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xff, 0xff, 0xe7, 0xc3}, + {0x00, 0x00, 0xc7, 0xc7, 0xcf, 0xcf, 0xdf, 0xdb, 0xfb, 0xf3, 0xf3, 0xe3, 0xe3}, + {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e}, + {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, + {0x00, 0x00, 0x3f, 0x6e, 0xdf, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}, + {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, + {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0xe0, 0xc0, 0xc0, 0xe7, 0x7e}, + {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff}, + {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, + {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, + {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, + {0x00, 0x00, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, + {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, + {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x7e, 0x0c, 0x06, 0x03, 0x03, 0xff}, + {0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c}, + {0x00, 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60}, + {0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18}, + {0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x70}, + {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0x7f, 0x03, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, + {0x00, 0x00, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x03, 0x03, 0x03, 0x03, 0x03}, + {0x00, 0x00, 0x7f, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x33, 0x1e}, + {0x7e, 0xc3, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0}, + {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00}, + {0x38, 0x6c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x00}, + {0x00, 0x00, 0xc6, 0xcc, 0xf8, 0xf0, 0xd8, 0xcc, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0}, + {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78}, + {0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xfe, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, + {0xc0, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0x00, 0x00, 0x00, 0x00}, + {0x03, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xfe, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xfe, 0x03, 0x03, 0x7e, 0xc0, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x1c, 0x36, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x00}, + {0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, + {0xc0, 0x60, 0x60, 0x30, 0x18, 0x3c, 0x66, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xff, 0x60, 0x30, 0x18, 0x0c, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x0f, 0x18, 0x18, 0x18, 0x38, 0xf0, 0x38, 0x18, 0x18, 0x18, 0x0f}, + {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, + {0x00, 0x00, 0xf0, 0x18, 0x18, 0x18, 0x1c, 0x0f, 0x1c, 0x18, 0x18, 0x18, 0xf0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8f, 0xf1, 0x60, 0x00, 0x00, 0x00} }; -static const char *s_vertexShaderSrc = +static const char *s_vertexShaderSrc = "uniform vec2 charSize;\n" "ATTRIN vec2 rawpos;\n" "ATTRIN vec2 tex0;\n" @@ -121,7 +121,7 @@ static const char *s_vertexShaderSrc = "void main(void) {\n" " gl_Position = vec4(rawpos,0,1);\n" " uv0 = tex0 * charSize;\n" - "}\n"; + "}\n"; static const char *s_fragmentShaderSrc = "uniform sampler2D samp8;\n" @@ -131,9 +131,9 @@ static const char *s_fragmentShaderSrc = "void main(void) {\n" " ocol0 = texture(samp8,uv0) * color;\n" "}\n"; - + static SHADER s_shader; - + RasterFont::RasterFont() { // generate the texture @@ -253,16 +253,16 @@ void RasterFont::printMultilineText(const char *text, double start_x, double sta glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, usage*sizeof(GLfloat), vertices, GL_STREAM_DRAW); - + delete [] vertices; s_shader.Bind(); - + if(color != cached_color) { glUniform4f(uniform_color_id, GLfloat((color>>16)&0xff)/255.f,GLfloat((color>>8)&0xff)/255.f,GLfloat((color>>0)&0xff)/255.f,GLfloat((color>>24)&0xff)/255.f); cached_color = color; } - + glActiveTexture(GL_TEXTURE0+8); glDrawArrays(GL_TRIANGLES, 0, usage/4); } diff --git a/Source/Core/VideoBackends/OGL/Src/RasterFont.h b/Source/Core/VideoBackends/OGL/Src/RasterFont.h index 97ad877082..7f3cff1414 100644 --- a/Source/Core/VideoBackends/OGL/Src/RasterFont.h +++ b/Source/Core/VideoBackends/OGL/Src/RasterFont.h @@ -15,7 +15,7 @@ public: void printMultilineText(const char *text, double x, double y, double z, int bbWidth, int bbHeight, u32 color); private: - + u32 VBO; u32 VAO; u32 texture; diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index 4dca112031..63f8a3db49 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "GLUtil.h" #if defined(HAVE_WX) && HAVE_WX @@ -33,7 +34,6 @@ #include "RasterFont.h" #include "VertexShaderGen.h" #include "DLCache.h" -#include "PixelShaderManager.h" #include "ProgramShaderCache.h" #include "VertexShaderManager.h" #include "VertexLoaderManager.h" @@ -168,9 +168,9 @@ int GetNumMSAASamples(int MSAAMode) default: samples = 1; } - + if(samples <= g_ogl_config.max_samples) return samples; - + // TODO: move this to InitBackendInfo OSD::AddMessage(StringFromFormat("%d Anti Aliasing samples selected, but only %d supported by your GPU.", samples, g_ogl_config.max_samples), 10000); return g_ogl_config.max_samples; @@ -195,7 +195,7 @@ int GetNumMSAACoverageSamples(int MSAAMode) samples = 0; } if(g_ogl_config.bSupportCoverageMSAA || samples == 0) return samples; - + // TODO: move this to InitBackendInfo OSD::AddMessage("CSAA Anti Aliasing isn't supported by your GPU.", 10000); return 0; @@ -279,7 +279,7 @@ void InitDriverInfo() // Get the vendor first if (svendor == "NVIDIA Corporation" && srenderer != "NVIDIA Tegra") - vendor = DriverDetails::VENDOR_NVIDIA; + vendor = DriverDetails::VENDOR_NVIDIA; else if (svendor == "ATI Technologies Inc." || svendor == "Advanced Micro Devices, Inc.") vendor = DriverDetails::VENDOR_ATI; else if (std::string::npos != sversion.find("Mesa")) @@ -301,7 +301,7 @@ void InitDriverInfo() vendor = DriverDetails::VENDOR_TEGRA; else if (svendor == "Vivante Corporation") vendor = DriverDetails::VENDOR_VIVANTE; - + // Get device family and driver version...if we care about it switch(vendor) { @@ -329,7 +329,7 @@ void InitDriverInfo() driver = DriverDetails::DRIVER_I965; else if(std::string::npos != srenderer.find("AMD") || std::string::npos != srenderer.find("ATI")) driver = DriverDetails::DRIVER_R600; - + int major = 0; int minor = 0; int release = 0; @@ -361,7 +361,7 @@ Renderer::Renderer() g_ogl_config.gl_renderer = (const char*)glGetString(GL_RENDERER); g_ogl_config.gl_version = (const char*)glGetString(GL_VERSION); g_ogl_config.glsl_version = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); - + InitDriverInfo(); // Init extension support. @@ -371,21 +371,22 @@ Renderer::Renderer() WARN_LOG(VIDEO, "Running the OpenGL ES 3 backend!"); g_Config.backend_info.bSupportsDualSourceBlend = false; - g_Config.backend_info.bSupportsGLSLUBO = !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS); - g_Config.backend_info.bSupportsPrimitiveRestart = true; + g_Config.backend_info.bSupportsGLSLUBO = !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS); + g_Config.backend_info.bSupportsPrimitiveRestart = true; g_Config.backend_info.bSupportsEarlyZ = false; -#ifdef ANDROID - g_ogl_config.bSupportsGLSLCache = false; +#ifdef ANDROID + g_ogl_config.bSupportsGLSLCache = false; #else - g_ogl_config.bSupportsGLSLCache = true; + g_ogl_config.bSupportsGLSLCache = true; #endif - g_ogl_config.bSupportsGLPinnedMemory = false; - g_ogl_config.bSupportsGLSync = true; - g_ogl_config.bSupportsGLBaseVertex = false; + g_ogl_config.bSupportsGLPinnedMemory = false; + g_ogl_config.bSupportsGLSync = true; + g_ogl_config.bSupportsGLBaseVertex = false; g_ogl_config.bSupportCoverageMSAA = false; // XXX: GLES3 spec has MSAA - g_ogl_config.bSupportSampleShading = false; - g_ogl_config.bSupportOGL31 = false; + g_ogl_config.bSupportSampleShading = false; + g_ogl_config.bSupportOGL31 = false; + g_ogl_config.bSupportViewportFloat = false; if (DriverDetails::HasBug(DriverDetails::BUG_ISTEGRA) || DriverDetails::HasBug(DriverDetails::BUG_ISPOWERVR)) g_ogl_config.eSupportedGLSLVersion = GLSLES2; else @@ -399,7 +400,7 @@ Renderer::Renderer() PanicAlert("glewInit() failed! Does your video card support OpenGL 2.x?"); return; } - + // check for the max vertex attributes GLint numvertexattribs = 0; glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &numvertexattribs); @@ -420,7 +421,7 @@ Renderer::Renderer() max_texture_size); bSuccess = false; } - + #if defined(_DEBUG) || defined(DEBUGFAST) if (GLEW_ARB_debug_output) { @@ -454,7 +455,7 @@ Renderer::Renderer() "GPU: Does your video card support OpenGL 3.0?"); bSuccess = false; } - + if (!GLEW_ARB_map_buffer_range) { // ogl3 buffer mapping for better streaming support. @@ -473,7 +474,7 @@ Renderer::Renderer() "Please report this issue, then there will be a workaround"); bSuccess = false; } - + // OpenGL 3 doesn't provide GLES like float functions for depth. // They are in core in OpenGL 4.1, so almost every driver should support them. // But for the oldest ones, we provide fallbacks to the old double functions. @@ -481,14 +482,14 @@ Renderer::Renderer() { glDepthRangef = DepthRangef; glClearDepthf = ClearDepthf; - + } - + g_Config.backend_info.bSupportsDualSourceBlend = GLEW_ARB_blend_func_extended; g_Config.backend_info.bSupportsGLSLUBO = GLEW_ARB_uniform_buffer_object; g_Config.backend_info.bSupportsPrimitiveRestart = GLEW_VERSION_3_1 || GLEW_NV_primitive_restart; g_Config.backend_info.bSupportsEarlyZ = GLEW_ARB_shader_image_load_store; - + g_ogl_config.bSupportsGLSLCache = GLEW_ARB_get_program_binary; g_ogl_config.bSupportsGLPinnedMemory = GLEW_AMD_pinned_memory; g_ogl_config.bSupportsGLSync = GLEW_ARB_sync; @@ -496,6 +497,7 @@ Renderer::Renderer() g_ogl_config.bSupportCoverageMSAA = GLEW_NV_framebuffer_multisample_coverage; g_ogl_config.bSupportSampleShading = GLEW_ARB_sample_shading; g_ogl_config.bSupportOGL31 = GLEW_VERSION_3_1; + g_ogl_config.bSupportViewportFloat = GLEW_ARB_viewport_array; if(strstr(g_ogl_config.glsl_version, "1.00") || strstr(g_ogl_config.glsl_version, "1.10") || strstr(g_ogl_config.glsl_version, "1.20")) { @@ -519,17 +521,30 @@ Renderer::Renderer() g_ogl_config.eSupportedGLSLVersion = GLSL_150; } #endif + int samples; + glGetIntegerv(GL_SAMPLES, &samples); + if(samples > 1) + { + // MSAA on default framebuffer isn't working because of glBlitFramebuffer. + // It also isn't useful as we don't render anything to the default framebuffer. + // We also try to get a non-msaa fb, so this only happens when forced by the driver. + PanicAlert("MSAA on default framebuffer isn't supported.\n" + "Please avoid forcing dolphin to use MSAA by the driver.\n" + "%d samples on default framebuffer found.", samples); + bSuccess = false; + } + if (!bSuccess) { // Not all needed extensions are supported, so we have to stop here. // Else some of the next calls might crash. return; } - + glGetIntegerv(GL_MAX_SAMPLES, &g_ogl_config.max_samples); - if(g_ogl_config.max_samples < 1) + if(g_ogl_config.max_samples < 1) g_ogl_config.max_samples = 1; - + if(g_Config.backend_info.bSupportsGLSLUBO && DriverDetails::HasBug(DriverDetails::BUG_BROKENUBO)) { g_Config.backend_info.bSupportsGLSLUBO = false; @@ -537,14 +552,14 @@ Renderer::Renderer() OSD::AddMessage("Major performance warning: Buggy GPU driver detected.", 20000); OSD::AddMessage("Please either install the closed-source GPU driver or update your Mesa 3D version.", 20000); } - + UpdateActiveConfig(); OSD::AddMessage(StringFromFormat("Video Info: %s, %s, %s", g_ogl_config.gl_vendor, g_ogl_config.gl_renderer, g_ogl_config.gl_version), 5000); - + WARN_LOG(VIDEO,"Missing OGL Extensions: %s%s%s%s%s%s%s%s%s%s", g_ActiveConfig.backend_info.bSupportsDualSourceBlend ? "" : "DualSourceBlend ", g_ActiveConfig.backend_info.bSupportsGLSLUBO ? "" : "UniformBuffer ", @@ -557,12 +572,12 @@ Renderer::Renderer() g_ogl_config.bSupportCoverageMSAA ? "" : "CSAA ", g_ogl_config.bSupportSampleShading ? "" : "SSAA " ); - + s_LastMultisampleMode = g_ActiveConfig.iMultisampleMode; s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); s_MSAACoverageSamples = GetNumMSAACoverageSamples(s_LastMultisampleMode); ApplySSAASettings(); - + // Decide framebuffer size s_backbuffer_width = (int)GLInterface->GetBackBufferWidth(); s_backbuffer_height = (int)GLInterface->GetBackBufferHeight(); @@ -583,7 +598,7 @@ Renderer::Renderer() // Because of the fixed framebuffer size we need to disable the resolution // options while running g_Config.bRunning = true; - + glStencilFunc(GL_ALWAYS, 0, 0); glBlendFunc(GL_ONE, GL_ONE); @@ -635,14 +650,14 @@ Renderer::~Renderer() void Renderer::Shutdown() { delete g_framebuffer_manager; - + g_Config.bRunning = false; UpdateActiveConfig(); - + glDeleteBuffers(1, &s_ShowEFBCopyRegions_VBO); glDeleteVertexArrays(1, &s_ShowEFBCopyRegions_VAO); s_ShowEFBCopyRegions_VBO = 0; - + delete s_pfont; s_pfont = 0; s_ShowEFBCopyRegions.Destroy(); @@ -653,10 +668,10 @@ void Renderer::Init() // Initialize the FramebufferManager g_framebuffer_manager = new FramebufferManager(s_target_width, s_target_height, s_MSAASamples, s_MSAACoverageSamples); - + s_pfont = new RasterFont(); - - ProgramShaderCache::CompileShader(s_ShowEFBCopyRegions, + + ProgramShaderCache::CompileShader(s_ShowEFBCopyRegions, "ATTRIN vec2 rawpos;\n" "ATTRIN vec3 color0;\n" "VARYOUT vec4 c;\n" @@ -669,7 +684,7 @@ void Renderer::Init() "void main(void) {\n" " ocol0 = c;\n" "}\n"); - + // creating buffers glGenBuffers(1, &s_ShowEFBCopyRegions_VBO); glGenVertexArrays(1, &s_ShowEFBCopyRegions_VAO); @@ -695,7 +710,7 @@ void Renderer::DrawDebugInfo() p+=sprintf(p, "FPS: %d\n", s_fps); if (SConfig::GetInstance().m_ShowLag) - p+=sprintf(p, "Lag: %llu\n", Movie::g_currentLagCount); + p+=sprintf(p, "Lag: %" PRIu64 "\n", Movie::g_currentLagCount); if (g_ActiveConfig.bShowInputDisplay) p+=sprintf(p, "%s", Movie::GetInputDisplay().c_str()); @@ -715,7 +730,7 @@ void Renderer::DrawDebugInfo() // Draw EFB copy regions rectangles int a = 0; GLfloat color[3] = {0.0f, 1.0f, 1.0f}; - + for (std::vector::const_iterator it = stats.efb_regions.begin(); it != stats.efb_regions.end(); ++it) { @@ -731,78 +746,78 @@ void Renderer::DrawDebugInfo() Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - + Vertices[a++] = x2; Vertices[a++] = y; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - - + + Vertices[a++] = x2; Vertices[a++] = y; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - + Vertices[a++] = x2; Vertices[a++] = y2; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - - + + Vertices[a++] = x2; Vertices[a++] = y2; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - + Vertices[a++] = x; Vertices[a++] = y2; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - - + + Vertices[a++] = x; Vertices[a++] = y2; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - + Vertices[a++] = x; Vertices[a++] = y; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - - + + Vertices[a++] = x; Vertices[a++] = y; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - + Vertices[a++] = x2; Vertices[a++] = y2; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - - + + Vertices[a++] = x2; Vertices[a++] = y; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - + Vertices[a++] = x; Vertices[a++] = y2; Vertices[a++] = color[0]; Vertices[a++] = color[1]; Vertices[a++] = color[2]; - + // TO DO: build something nicer here GLfloat temp = color[0]; color[0] = color[1]; @@ -810,7 +825,7 @@ void Renderer::DrawDebugInfo() color[2] = temp; } glUnmapBuffer(GL_ARRAY_BUFFER); - + s_ShowEFBCopyRegions.Bind(); glBindVertexArray( s_ShowEFBCopyRegions_VAO ); glDrawArrays(GL_LINES, 0, stats.efb_regions.size() * 2*6); @@ -972,11 +987,11 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) if (s_MSAASamples > 1) { g_renderer->ResetAPIState(); - + // Resolve our rectangle. FramebufferManager::GetEFBDepthTexture(efbPixelRc); glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetResolvedFramebuffer()); - + g_renderer->RestoreAPIState(); } @@ -1025,11 +1040,11 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) if (s_MSAASamples > 1) { g_renderer->ResetAPIState(); - + // Resolve our rectangle. FramebufferManager::GetEFBColorTexture(efbPixelRc); glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetResolvedFramebuffer()); - + g_renderer->RestoreAPIState(); } @@ -1091,7 +1106,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) } // Called from VertexShaderManager -void Renderer::UpdateViewport(Matrix44& vpCorrection) +void Renderer::UpdateViewport() { // reversed gxsetviewport(xorig, yorig, width, height, nearz, farz) // [0] = width/2 @@ -1105,12 +1120,12 @@ void Renderer::UpdateViewport(Matrix44& vpCorrection) int scissorYOff = bpmem.scissorOffset.y * 2; // TODO: ceil, floor or just cast to int? - int X = EFBToScaledX((int)ceil(xfregs.viewport.xOrig - xfregs.viewport.wd - (float)scissorXOff)); - int Y = EFBToScaledY((int)ceil((float)EFB_HEIGHT - xfregs.viewport.yOrig + xfregs.viewport.ht + (float)scissorYOff)); - int Width = EFBToScaledX((int)ceil(2.0f * xfregs.viewport.wd)); - int Height = EFBToScaledY((int)ceil(-2.0f * xfregs.viewport.ht)); - double GLNear = (xfregs.viewport.farZ - xfregs.viewport.zRange) / 16777216.0f; - double GLFar = xfregs.viewport.farZ / 16777216.0f; + float X = EFBToScaledXf(xfregs.viewport.xOrig - xfregs.viewport.wd - (float)scissorXOff); + float Y = EFBToScaledYf((float)EFB_HEIGHT - xfregs.viewport.yOrig + xfregs.viewport.ht + (float)scissorYOff); + float Width = EFBToScaledXf(2.0f * xfregs.viewport.wd); + float Height = EFBToScaledYf(-2.0f * xfregs.viewport.ht); + float GLNear = (xfregs.viewport.farZ - xfregs.viewport.zRange) / 16777216.0f; + float GLFar = xfregs.viewport.farZ / 16777216.0f; if (Width < 0) { X += Width; @@ -1122,11 +1137,15 @@ void Renderer::UpdateViewport(Matrix44& vpCorrection) Height *= -1; } - // OpenGL does not require any viewport correct - Matrix44::LoadIdentity(vpCorrection); - // Update the view port - glViewport(X, Y, Width, Height); + if(g_ogl_config.bSupportViewportFloat) + { + glViewportIndexedf(0, X, Y, Width, Height); + } + else + { + glViewport(ceil(X), ceil(Y), ceil(Width), ceil(Height)); + } glDepthRangef(GLNear, GLFar); } @@ -1182,10 +1201,10 @@ void Renderer::SetBlendMode(bool forceUpdate) // Our render target always uses an alpha channel, so we need to override the blend functions to assume a destination alpha of 1 if the render target isn't supposed to have an alpha channel // Example: D3DBLEND_DESTALPHA needs to be D3DBLEND_ONE since the result without an alpha channel is assumed to always be 1. bool target_has_alpha = bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24; - + bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate && target_has_alpha; bool useDualSource = useDstAlpha && g_ActiveConfig.backend_info.bSupportsDualSourceBlend; - + const GLenum glSrcFactors[8] = { GL_ZERO, @@ -1239,7 +1258,7 @@ void Renderer::SetBlendMode(bool forceUpdate) // subtract enable change GLenum equation = newval & 4 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_ADD; GLenum equationAlpha = useDualSource ? GL_FUNC_ADD : equation; - + glBlendEquationSeparate(equation, equationAlpha); } @@ -1255,7 +1274,7 @@ void Renderer::SetBlendMode(bool forceUpdate) { srcidx = GX_BL_ONE; dstidx = GX_BL_ZERO; - } + } else { // we can't use GL_DST_COLOR or GL_ONE_MINUS_DST_COLOR for source in alpha channel so use their alpha equivalent instead @@ -1265,7 +1284,7 @@ void Renderer::SetBlendMode(bool forceUpdate) // we can't use GL_SRC_COLOR or GL_ONE_MINUS_SRC_COLOR for destination in alpha channel so use their alpha equivalent instead if (dstidx == GX_BL_SRCCLR) dstidx = GX_BL_SRCALPHA; if (dstidx == GX_BL_INVSRCCLR) dstidx = GX_BL_INVSRCALPHA; - } + } GLenum srcFactorAlpha = glSrcFactors[srcidx]; GLenum dstFactorAlpha = glDestFactors[dstidx]; // blend RGB change @@ -1314,7 +1333,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r int tmp = flipped_trc.top; flipped_trc.top = flipped_trc.bottom; flipped_trc.bottom = tmp; - + GL_REPORT_ERRORD(); // Copy the framebuffer to screen. @@ -1325,7 +1344,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r { // Render to the real/postprocessing buffer now. PostProcessing::BindTargetFramebuffer(); - + // draw each xfb source glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetXFBFramebuffer()); @@ -1348,12 +1367,12 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r int xfbHeight = xfbSource->srcHeight; int xfbWidth = xfbSource->srcWidth; int hOffset = ((s32)xfbSource->srcAddr - (s32)xfbAddr) / ((s32)fbWidth * 2); - + drawRc.top = flipped_trc.top - hOffset * flipped_trc.GetHeight() / fbHeight; drawRc.bottom = flipped_trc.top - (hOffset + xfbHeight) * flipped_trc.GetHeight() / fbHeight; drawRc.left = flipped_trc.left + (flipped_trc.GetWidth() - xfbWidth * flipped_trc.GetWidth() / fbWidth)/2; drawRc.right = flipped_trc.left + (flipped_trc.GetWidth() + xfbWidth * flipped_trc.GetWidth() / fbWidth)/2; - + // The following code disables auto stretch. Kept for reference. // scale draw area for a 1 to 1 pixel mapping with the draw target //float vScale = (float)fbHeight / (float)flipped_trc.GetHeight(); @@ -1378,22 +1397,22 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r else { TargetRectangle targetRc = ConvertEFBRectangle(rc); - + // for msaa mode, we must resolve the efb content to non-msaa FramebufferManager::ResolveAndGetRenderTarget(rc); - + // Render to the real/postprocessing buffer now. (resolve have changed this in msaa mode) PostProcessing::BindTargetFramebuffer(); - + // always the non-msaa fbo GLuint fb = s_MSAASamples>1?FramebufferManager::GetResolvedFramebuffer():FramebufferManager::GetEFBFramebuffer(); - + glBindFramebuffer(GL_READ_FRAMEBUFFER, fb); glBlitFramebuffer(targetRc.left, targetRc.bottom, targetRc.right, targetRc.top, flipped_trc.left, flipped_trc.bottom, flipped_trc.right, flipped_trc.top, GL_COLOR_BUFFER_BIT, GL_LINEAR); } - + PostProcessing::BlitToScreen(); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); @@ -1447,7 +1466,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r #ifndef _WIN32 FlipImageData(&frame_data[0], w, h); #endif - + AVIDump::AddFrame(&frame_data[0], w, h); } @@ -1546,7 +1565,7 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r s_MSAASamples = GetNumMSAASamples(s_LastMultisampleMode); s_MSAACoverageSamples = GetNumMSAACoverageSamples(s_LastMultisampleMode); ApplySSAASettings(); - + delete g_framebuffer_manager; g_framebuffer_manager = new FramebufferManager(s_target_width, s_target_height, s_MSAASamples, s_MSAACoverageSamples); @@ -1655,16 +1674,16 @@ void Renderer::RestoreAPIState() SetDepthMode(); SetBlendMode(true); SetLogicOpMode(); - VertexShaderManager::SetViewportChanged(); + UpdateViewport(); #ifndef USE_GLES3 glPolygonMode(GL_FRONT_AND_BACK, g_ActiveConfig.bWireFrame ? GL_LINE : GL_FILL); #endif - + VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers); vm->m_last_vao = 0; - + TextureCache::SetStage(); } @@ -1772,7 +1791,7 @@ void Renderer::SetSamplerState(int stage, int texindex) auto const& tex = bpmem.tex[texindex]; auto const& tm0 = tex.texMode0[stage]; auto const& tm1 = tex.texMode1[stage]; - + g_sampler_cache->SetSamplerState((texindex * 4) + stage, tm0, tm1); } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index 8c6a8ca8f8..9b4838ee25 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -27,12 +27,13 @@ extern struct VideoConfig { bool bSupportSampleShading; GLSL_VERSION eSupportedGLSLVersion; bool bSupportOGL31; - + bool bSupportViewportFloat; + const char *gl_vendor; const char *gl_renderer; const char* gl_version; const char* glsl_version; - + s32 max_samples; } g_ogl_config; @@ -41,43 +42,43 @@ class Renderer : public ::Renderer public: Renderer(); ~Renderer(); - + static void Init(); static void Shutdown(); - void SetColorMask(); - void SetBlendMode(bool forceUpdate); - void SetScissorRect(const TargetRectangle& rc); - void SetGenerationMode(); - void SetDepthMode(); - void SetLogicOpMode(); - void SetDitherMode(); - void SetLineWidth(); - void SetSamplerState(int stage,int texindex); - void SetInterlacingMode(); + void SetColorMask() override; + void SetBlendMode(bool forceUpdate) override; + void SetScissorRect(const TargetRectangle& rc) override; + void SetGenerationMode() override; + void SetDepthMode() override; + void SetLogicOpMode() override; + void SetDitherMode() override; + void SetLineWidth() override; + void SetSamplerState(int stage,int texindex) override; + void SetInterlacingMode() override; // TODO: Implement and use these - void ApplyState(bool bUseDstAlpha) {} - void RestoreState() {} + void ApplyState(bool bUseDstAlpha) override {} + void RestoreState() override {} - void RenderText(const char* pstr, int left, int top, u32 color); + void RenderText(const char* pstr, int left, int top, u32 color) override; void DrawDebugInfo(); void FlipImageData(u8 *data, int w, int h); - u32 AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data); + u32 AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) override; - void ResetAPIState(); - void RestoreAPIState(); + void ResetAPIState() override; + void RestoreAPIState() override; - TargetRectangle ConvertEFBRectangle(const EFBRectangle& rc); + TargetRectangle ConvertEFBRectangle(const EFBRectangle& rc) override; - void Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& rc,float Gamma); + void Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& rc,float Gamma) override; - void ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaEnable, bool zEnable, u32 color, u32 z); + void ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaEnable, bool zEnable, u32 color, u32 z) override; - void ReinterpretPixelData(unsigned int convtype); + void ReinterpretPixelData(unsigned int convtype) override; - void UpdateViewport(Matrix44& vpCorrection); + void UpdateViewport() override; bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc); diff --git a/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp b/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp index 713b0e21fa..8419777fae 100644 --- a/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp +++ b/Source/Core/VideoBackends/OGL/Src/SamplerCache.cpp @@ -30,18 +30,18 @@ void SamplerCache::SetSamplerState(int stage, const TexMode0& tm0, const TexMode m_last_max_anisotropy = g_ActiveConfig.iMaxAnisotropy; Clear(); } - + Params params(tm0, tm1); - + // take equivalent forced linear when bForceFiltering if (g_ActiveConfig.bForceFiltering) { params.tm0.min_filter |= 0x4; params.tm0.mag_filter |= 0x1; } - + // TODO: Should keep a circular buffer for each stage of recently used samplers. - + auto& active_sampler = m_active_samplers[stage]; if (active_sampler.first != params || !active_sampler.second.sampler_id) { @@ -60,11 +60,11 @@ auto SamplerCache::GetEntry(const Params& params) -> Value& // Sampler not found in cache, create it. glGenSamplers(1, &val.sampler_id); SetParameters(val.sampler_id, params); - + // TODO: Maybe kill old samplers if the cache gets huge. It doesn't seem to get huge though. //ERROR_LOG(VIDEO, "Sampler cache size is now %ld.", m_cache.size()); } - + return val; } @@ -81,7 +81,7 @@ void SamplerCache::SetParameters(GLuint sampler_id, const Params& params) GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, }; - + static const GLint wrap_settings[4] = { GL_CLAMP_TO_EDGE, @@ -89,7 +89,7 @@ void SamplerCache::SetParameters(GLuint sampler_id, const Params& params) GL_MIRRORED_REPEAT, GL_REPEAT, }; - + auto& tm0 = params.tm0; auto& tm1 = params.tm1; @@ -98,7 +98,7 @@ void SamplerCache::SetParameters(GLuint sampler_id, const Params& params) glSamplerParameteri(sampler_id, GL_TEXTURE_WRAP_S, wrap_settings[tm0.wrap_s]); glSamplerParameteri(sampler_id, GL_TEXTURE_WRAP_T, wrap_settings[tm0.wrap_t]); - + glSamplerParameterf(sampler_id, GL_TEXTURE_MIN_LOD, tm1.min_lod / 16.f); glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_LOD, tm1.max_lod / 16.f); @@ -112,9 +112,9 @@ void SamplerCache::SetParameters(GLuint sampler_id, const Params& params) void SamplerCache::Clear() { - for (auto it = m_cache.begin(); it != m_cache.end(); ++it) + for (auto& p : m_cache) { - glDeleteSamplers(1, &it->second.sampler_id); + glDeleteSamplers(1, &p.second.sampler_id); } m_cache.clear(); } diff --git a/Source/Core/VideoBackends/OGL/Src/SamplerCache.h b/Source/Core/VideoBackends/OGL/Src/SamplerCache.h index 81180d2a7a..4de716b27d 100644 --- a/Source/Core/VideoBackends/OGL/Src/SamplerCache.h +++ b/Source/Core/VideoBackends/OGL/Src/SamplerCache.h @@ -15,10 +15,10 @@ class SamplerCache : NonCopyable public: SamplerCache(); ~SamplerCache(); - + void SetSamplerState(int stage, const TexMode0& tm0, const TexMode1& tm1); void Clear(); - + private: struct Params { @@ -29,47 +29,47 @@ private: TexMode0 tm0; TexMode1 tm1; }; - + u64 hex; }; - + Params() : hex() {} - + Params(const TexMode0& _tm0, const TexMode1& _tm1) : tm0(_tm0) , tm1(_tm1) { static_assert(sizeof(Params) == 8, "Assuming I can treat this as a 64bit int."); } - + bool operator<(const Params& other) const { return hex < other.hex; } - + bool operator!=(const Params& other) const { return hex != other.hex; } }; - + struct Value { Value() : sampler_id() {} - + GLuint sampler_id; }; - + void SetParameters(GLuint sampler_id, const Params& params); Value& GetEntry(const Params& params); std::map m_cache; std::pair m_active_samplers[8]; - + int m_last_max_anisotropy; }; diff --git a/Source/Core/VideoBackends/OGL/Src/StreamBuffer.cpp b/Source/Core/VideoBackends/OGL/Src/StreamBuffer.cpp index 59d8a1b3ca..9826033098 100644 --- a/Source/Core/VideoBackends/OGL/Src/StreamBuffer.cpp +++ b/Source/Core/VideoBackends/OGL/Src/StreamBuffer.cpp @@ -20,9 +20,9 @@ StreamBuffer::StreamBuffer(u32 type, size_t size, StreamType uploadType) : m_uploadtype(uploadType), m_buffertype(type), m_size(size) { glGenBuffers(1, &m_buffer); - + bool nvidia = !strcmp(g_ogl_config.gl_vendor, "NVIDIA Corporation"); - + if(m_uploadtype & STREAM_DETECT) { // TODO: move this to InitBackendInfo @@ -32,8 +32,8 @@ StreamBuffer::StreamBuffer(u32 type, size_t size, StreamType uploadType) g_ActiveConfig.bHackedBufferUpload = false; g_Config.bHackedBufferUpload = false; } - - if(!g_ogl_config.bSupportsGLBaseVertex && (m_uploadtype & BUFFERSUBDATA) + + if(!g_ogl_config.bSupportsGLBaseVertex && (m_uploadtype & BUFFERSUBDATA) && !DriverDetails::HasBug(DriverDetails::BUG_BROKENBUFFERSTREAM)) m_uploadtype = BUFFERSUBDATA; else if(!g_ogl_config.bSupportsGLBaseVertex && (m_uploadtype & BUFFERDATA)) @@ -46,7 +46,7 @@ StreamBuffer::StreamBuffer(u32 type, size_t size, StreamType uploadType) m_uploadtype = BUFFERSUBDATA; else if(g_ogl_config.bSupportsGLSync && (m_uploadtype & MAP_AND_SYNC)) m_uploadtype = MAP_AND_SYNC; - else + else m_uploadtype = MAP_AND_ORPHAN; } @@ -69,7 +69,7 @@ void StreamBuffer::Alloc ( size_t size, u32 stride ) m_iterator_aligned = m_iterator_aligned - (m_iterator_aligned % stride) + stride; } size_t iter_end = m_iterator_aligned + size; - + switch(m_uploadtype) { case MAP_AND_ORPHAN: if(iter_end >= m_size) { @@ -79,14 +79,14 @@ void StreamBuffer::Alloc ( size_t size, u32 stride ) break; case MAP_AND_SYNC: case PINNED_MEMORY: - + // insert waiting slots for used memory for(u32 i=SLOT(m_used_iterator); i= m_size) { - + // insert waiting slots in unused space at the end of the buffer for(u32 i=SLOT(m_used_iterator); i < SYNC_POINTS; i++) fences[i] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); - + // move to the start m_used_iterator = m_iterator_aligned = m_iterator = 0; // offset 0 is always aligned iter_end = size; - + // wait for space at the start for(u32 i=0; i<=SLOT(iter_end); i++) { @@ -114,7 +114,7 @@ void StreamBuffer::Alloc ( size_t size, u32 stride ) } m_free_iterator = iter_end; } - + break; case MAP_AND_RISK: if(iter_end >= m_size) { @@ -170,13 +170,13 @@ void StreamBuffer::Init() m_iterator = 0; m_used_iterator = 0; m_free_iterator = 0; - + switch(m_uploadtype) { case MAP_AND_SYNC: fences = new GLsync[SYNC_POINTS]; for(u32 i=0; iframebuffer); FramebufferManager::SetFramebuffer(entry->framebuffer); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, entry->texture, 0); @@ -357,7 +355,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glBindBuffer(GL_ARRAY_BUFFER, vbo_it->second.vbo); glBufferData(GL_ARRAY_BUFFER, 4*4*sizeof(GLfloat), vertices, GL_STREAM_DRAW); - + vbo_it->second.targetSource = targetSource; } @@ -372,10 +370,10 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo int encoded_size = TextureConverter::EncodeToRamFromTexture( addr, read_texture, - srcFormat == PIXELFMT_Z24, - isIntensity, - dstFormat, - scaleByHalf, + srcFormat == PIXELFMT_Z24, + isIntensity, + dstFormat, + scaleByHalf, srcRect); u8* dst = Memory::GetPointer(addr); @@ -391,7 +389,6 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo } FramebufferManager::SetFramebuffer(0); - VertexShaderManager::SetViewportChanged(); GL_REPORT_ERRORD(); @@ -407,7 +404,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo TextureCache::TextureCache() { - const char *pColorMatrixProg = + const char *pColorMatrixProg = "uniform sampler2DRect samp9;\n" "uniform vec4 colmat[7];\n" "VARYIN vec2 uv0;\n" @@ -452,8 +449,8 @@ TextureCache::TextureCache() s_ActiveTexture = -1; s_NextStage = -1; - for(int i=0; i<8; i++) - s_Textures[i] = -1; + for(auto& gtex : s_Textures) + gtex = -1; } @@ -461,10 +458,10 @@ TextureCache::~TextureCache() { s_ColorMatrixProgram.Destroy(); s_DepthMatrixProgram.Destroy(); - - for(std::map::iterator it = s_VBO.begin(); it != s_VBO.end(); it++) { - glDeleteBuffers(1, &it->second.vbo); - glDeleteVertexArrays(1, &it->second.vao); + + for(auto& cache : s_VBO) { + glDeleteBuffers(1, &cache.second.vbo); + glDeleteVertexArrays(1, &cache.second.vao); } s_VBO.clear(); } diff --git a/Source/Core/VideoBackends/OGL/Src/TextureCache.h b/Source/Core/VideoBackends/OGL/Src/TextureCache.h index 137d26704b..1c95d35f98 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureCache.h +++ b/Source/Core/VideoBackends/OGL/Src/TextureCache.h @@ -45,23 +45,23 @@ private: ~TCacheEntry(); void Load(unsigned int width, unsigned int height, - unsigned int expanded_width, unsigned int level); + unsigned int expanded_width, unsigned int level) override; void FromRenderTarget(u32 dstAddr, unsigned int dstFormat, unsigned int srcFormat, const EFBRectangle& srcRect, bool isIntensity, bool scaleByHalf, unsigned int cbufid, - const float *colmat); + const float *colmat) override; - void Bind(unsigned int stage); + void Bind(unsigned int stage) override; bool Save(const char filename[], unsigned int level); }; ~TextureCache(); TCacheEntryBase* CreateTexture(unsigned int width, unsigned int height, - unsigned int expanded_width, unsigned int tex_levels, PC_TexFormat pcfmt); + unsigned int expanded_width, unsigned int tex_levels, PC_TexFormat pcfmt) override; - TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h); + TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h) override; }; bool SaveTexture(const char* filename, u32 textarget, u32 tex, int virtual_width, int virtual_height, unsigned int level); diff --git a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp index d4ce2eb5bb..0c1800381e 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp +++ b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp @@ -9,7 +9,6 @@ #include "TextureConversionShader.h" #include "TextureCache.h" #include "ProgramShaderCache.h" -#include "VertexShaderManager.h" #include "FramebufferManager.h" #include "Globals.h" #include "VideoConfig.h" @@ -170,7 +169,7 @@ void Init() glBindTexture(GL_TEXTURE_2D, s_dstTexture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - + CreatePrograms(); } @@ -187,8 +186,8 @@ void Shutdown() s_rgbToYuyvProgram.Destroy(); s_yuyvToRgbProgram.Destroy(); - for (unsigned int i = 0; i < NUM_ENCODING_PROGRAMS; i++) - s_encodingPrograms[i].Destroy(); + for (auto& program : s_encodingPrograms) + program.Destroy(); s_srcTexture = 0; s_dstTexture = 0; @@ -230,7 +229,7 @@ void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, GL_REPORT_ERRORD(); if(!(s_cached_sourceRc == sourceRc)) { GLfloat vertices[] = { - -1.f, -1.f, + -1.f, -1.f, (float)sourceRc.left, (float)sourceRc.top, -1.f, 1.f, (float)sourceRc.left, (float)sourceRc.bottom, @@ -241,13 +240,13 @@ void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc, }; glBindBuffer(GL_ARRAY_BUFFER, s_encode_VBO ); glBufferData(GL_ARRAY_BUFFER, 4*4*sizeof(GLfloat), vertices, GL_STREAM_DRAW); - + s_cached_sourceRc = sourceRc; - } + } glBindVertexArray( s_encode_VAO ); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - + GL_REPORT_ERRORD(); // .. and then read back the results. @@ -304,16 +303,16 @@ int EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, int size_in_bytes = TexDecoder_GetTextureSizeInBytes(width, height, format); u16 blkW = TexDecoder_GetBlockWidthInTexels(format) - 1; - u16 blkH = TexDecoder_GetBlockHeightInTexels(format) - 1; - u16 samples = TextureConversionShader::GetEncodedSampleCount(format); + u16 blkH = TexDecoder_GetBlockHeightInTexels(format) - 1; + u16 samples = TextureConversionShader::GetEncodedSampleCount(format); // only copy on cache line boundaries // extra pixels are copied but not displayed in the resulting texture s32 expandedWidth = (width + blkW) & (~blkW); s32 expandedHeight = (height + blkH) & (~blkH); - + float sampleStride = bScaleByHalf ? 2.f : 1.f; - + float params[] = { Renderer::EFBToScaledXf(sampleStride), Renderer::EFBToScaledYf(sampleStride), 0.0f, 0.0f, @@ -345,12 +344,11 @@ int EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, void EncodeToRamYUYV(GLuint srcTexture, const TargetRectangle& sourceRc, u8* destAddr, int dstWidth, int dstHeight) { g_renderer->ResetAPIState(); - + s_rgbToYuyvProgram.Bind(); - + EncodeToRamUsingShader(srcTexture, sourceRc, destAddr, dstWidth / 2, dstHeight, 0, false, false); FramebufferManager::SetFramebuffer(0); - VertexShaderManager::SetViewportChanged(); TextureCache::DisableStage(0); g_renderer->RestoreAPIState(); GL_REPORT_ERRORD(); @@ -401,7 +399,7 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur s_yuyvToRgbProgram.Bind(); GL_REPORT_ERRORD(); - + if(s_cached_srcHeight != srcHeight || s_cached_srcWidth != srcWidth) { GLfloat vertices[] = { 1.f, -1.f, @@ -413,20 +411,18 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur -1.f, 1.f, 0.f, 0.f }; - + glBindBuffer(GL_ARRAY_BUFFER, s_decode_VBO ); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*4*4, vertices, GL_STREAM_DRAW); - + s_cached_srcHeight = srcHeight; s_cached_srcWidth = srcWidth; } - + glBindVertexArray( s_decode_VAO ); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - GL_REPORT_ERRORD(); - VertexShaderManager::SetViewportChanged(); + GL_REPORT_ERRORD(); FramebufferManager::SetFramebuffer(0); diff --git a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp index 620df0c161..44d8ddeaa4 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp @@ -60,10 +60,10 @@ void VertexManager::CreateDeviceObjects() { s_vertexBuffer = new StreamBuffer(GL_ARRAY_BUFFER, MAX_VBUFFER_SIZE); m_vertex_buffers = s_vertexBuffer->getBuffer(); - + s_indexBuffer = new StreamBuffer(GL_ELEMENT_ARRAY_BUFFER, MAX_IBUFFER_SIZE); m_index_buffers = s_indexBuffer->getBuffer(); - + m_CurrentVertexFmt = NULL; m_last_vao = 0; } @@ -74,7 +74,7 @@ void VertexManager::DestroyDeviceObjects() glBindBuffer(GL_ARRAY_BUFFER, 0 ); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0 ); GL_REPORT_ERROR(); - + delete s_vertexBuffer; delete s_indexBuffer; GL_REPORT_ERROR(); @@ -87,7 +87,7 @@ void VertexManager::PrepareDrawBuffers(u32 stride) u32 line_index_size = IndexGenerator::GetLineindexLen(); u32 point_index_size = IndexGenerator::GetPointindexLen(); u32 index_size = (triangle_index_size+line_index_size+point_index_size) * sizeof(u16); - + s_vertexBuffer->Alloc(vertex_data_size, stride); u32 offset = s_vertexBuffer->Upload(GetVertexBuffer(), vertex_data_size); s_baseVertex = offset / stride; @@ -105,7 +105,7 @@ void VertexManager::PrepareDrawBuffers(u32 stride) { s_offset[2] = s_indexBuffer->Upload((u8*)GetPointIndexBuffer(), point_index_size * sizeof(u16)); } - + ADDSTAT(stats.thisFrame.bytesVertexStreamed, vertex_data_size); ADDSTAT(stats.thisFrame.bytesIndexStreamed, index_size); } @@ -117,7 +117,7 @@ void VertexManager::Draw(u32 stride) u32 point_index_size = IndexGenerator::GetPointindexLen(); u32 max_index = IndexGenerator::GetNumVerts(); GLenum triangle_mode = g_ActiveConfig.backend_info.bSupportsPrimitiveRestart?GL_TRIANGLE_STRIP:GL_TRIANGLES; - + if(g_ogl_config.bSupportsGLBaseVertex) { if (triangle_index_size > 0) { @@ -134,7 +134,7 @@ void VertexManager::Draw(u32 stride) glDrawRangeElementsBaseVertex(GL_POINTS, 0, max_index, point_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[2], s_baseVertex); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - } + } else if (DriverDetails::HasBug(DriverDetails::BUG_ISTEGRA)) { if (triangle_index_size > 0) @@ -168,17 +168,17 @@ void VertexManager::Draw(u32 stride) glDrawRangeElements(GL_POINTS, 0, max_index, point_index_size, GL_UNSIGNED_SHORT, (u8*)NULL+s_offset[2]); INCSTAT(stats.thisFrame.numIndexedDrawCalls); } - } + } } void VertexManager::vFlush() { -#if defined(_DEBUG) || defined(DEBUGFAST) +#if defined(_DEBUG) || defined(DEBUGFAST) PRIM_LOG("frame%d:\n texgen=%d, numchan=%d, dualtex=%d, ztex=%d, cole=%d, alpe=%d, ze=%d", g_ActiveConfig.iSaveTargetId, xfregs.numTexGen.numTexGens, xfregs.numChan.numColorChans, xfregs.dualTexTrans.enabled, bpmem.ztex2.op, bpmem.blendmode.colorupdate, bpmem.blendmode.alphaupdate, bpmem.zmode.updateenable); - for (unsigned int i = 0; i < xfregs.numChan.numColorChans; ++i) + for (unsigned int i = 0; i < xfregs.numChan.numColorChans; ++i) { LitChannel* ch = &xfregs.color[i]; PRIM_LOG("colchan%d: matsrc=%d, light=0x%x, ambsrc=%d, diffunc=%d, attfunc=%d", i, ch->matsource, ch->GetFullLightMask(), ch->ambsource, ch->diffusefunc, ch->attnfunc); @@ -186,7 +186,7 @@ void VertexManager::vFlush() PRIM_LOG("alpchan%d: matsrc=%d, light=0x%x, ambsrc=%d, diffunc=%d, attfunc=%d", i, ch->matsource, ch->GetFullLightMask(), ch->ambsource, ch->diffusefunc, ch->attnfunc); } - for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) { TexMtxInfo tinfo = xfregs.texMtxInfo[i]; if (tinfo.texgentype != XF_TEXGEN_EMBOSS_MAP) tinfo.hex &= 0x7ff; @@ -202,10 +202,10 @@ void VertexManager::vFlush() #endif (void)GL_REPORT_ERROR(); - + GLVertexFormat *nativeVertexFmt = (GLVertexFormat*)g_nativeVertexFmt; u32 stride = nativeVertexFmt->GetVertexStride(); - + if(m_last_vao != nativeVertexFmt->VAO) { glBindVertexArray(nativeVertexFmt->VAO); m_last_vao = nativeVertexFmt->VAO; @@ -231,10 +231,10 @@ void VertexManager::vFlush() TextureCache::SetNextStage(i); g_renderer->SetSamplerState(i % 4, i / 4); FourTexUnits &tex = bpmem.tex[i >> 2]; - TextureCache::TCacheEntryBase* tentry = TextureCache::Load(i, + TextureCache::TCacheEntryBase* tentry = TextureCache::Load(i, (tex.texImage3[i&3].image_base/* & 0x1FFFFF*/) << 5, tex.texImage0[i&3].width + 1, tex.texImage0[i&3].height + 1, - tex.texImage0[i&3].format, tex.texTlut[i&3].tmem_offset<<9, + tex.texImage0[i&3].format, tex.texTlut[i&3].tmem_offset<<9, tex.texTlut[i&3].tlut_format, (tex.texMode0[i&3].min_filter & 3), (tex.texMode1[i&3].max_lod + 0xf) / 0x10, @@ -279,7 +279,7 @@ void VertexManager::vFlush() VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(g_nativeVertexFmt->m_components); ProgramShaderCache::UploadConstants(); - + // setup the pointers if (g_nativeVertexFmt) g_nativeVertexFmt->SetupVertexPointers(); @@ -300,24 +300,24 @@ void VertexManager::vFlush() VertexShaderManager::SetConstants(); PixelShaderManager::SetConstants(g_nativeVertexFmt->m_components); } - + // only update alpha glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); glDisable(GL_BLEND); Draw(stride); - + // restore color mask g_renderer->SetColorMask(); - if (bpmem.blendmode.blendenable || bpmem.blendmode.subtract) + if (bpmem.blendmode.blendenable || bpmem.blendmode.subtract) glEnable(GL_BLEND); } GFX_DEBUGGER_PAUSE_AT(NEXT_FLUSH, true); - + #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS) + if (g_ActiveConfig.iLog & CONF_SAVESHADERS) { // save the shaders ProgramShaderCache::PCacheEntry prog = ProgramShaderCache::GetShaderProgram(); @@ -332,7 +332,7 @@ void VertexManager::vFlush() fvs << prog.shader.strvprog.c_str(); } - if (g_ActiveConfig.iLog & CONF_SAVETARGETS) + if (g_ActiveConfig.iLog & CONF_SAVETARGETS) { char str[128]; sprintf(str, "%starg%.3d.tga", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(), g_ActiveConfig.iSaveTargetId); diff --git a/Source/Core/VideoBackends/OGL/Src/VertexManager.h b/Source/Core/VideoBackends/OGL/Src/VertexManager.h index e31c8d48ec..f96ec7ec97 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.h +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.h @@ -19,9 +19,9 @@ namespace OGL GLVertexFormat(); ~GLVertexFormat(); - virtual void Initialize(const PortableVertexDeclaration &_vtx_decl); - virtual void SetupVertexPointers(); - + virtual void Initialize(const PortableVertexDeclaration &_vtx_decl) override; + virtual void SetupVertexPointers() override; + GLuint VAO; }; @@ -32,17 +32,17 @@ class VertexManager : public ::VertexManager public: VertexManager(); ~VertexManager(); - NativeVertexFormat* CreateNativeVertexFormat(); - void CreateDeviceObjects(); - void DestroyDeviceObjects(); - + NativeVertexFormat* CreateNativeVertexFormat() override; + void CreateDeviceObjects() override; + void DestroyDeviceObjects() override; + // NativeVertexFormat use this GLuint m_vertex_buffers; - GLuint m_index_buffers; + GLuint m_index_buffers; GLuint m_last_vao; private: void Draw(u32 stride); - void vFlush(); + void vFlush() override; void PrepareDrawBuffers(u32 stride); NativeVertexFormat *m_CurrentVertexFmt; }; diff --git a/Source/Core/VideoBackends/OGL/Src/VideoBackend.h b/Source/Core/VideoBackends/OGL/Src/VideoBackend.h index 137c09a973..ed4a748eb4 100644 --- a/Source/Core/VideoBackends/OGL/Src/VideoBackend.h +++ b/Source/Core/VideoBackends/OGL/Src/VideoBackend.h @@ -9,19 +9,19 @@ namespace OGL class VideoBackend : public VideoBackendHardware { - bool Initialize(void *&); - void Shutdown(); + bool Initialize(void *&) override; + void Shutdown() override; - std::string GetName(); - std::string GetDisplayName(); + std::string GetName() override; + std::string GetDisplayName() override; - void Video_Prepare(); - void Video_Cleanup(); + void Video_Prepare() override; + void Video_Cleanup() override; - void ShowConfig(void* parent); + void ShowConfig(void* parent) override; - void UpdateFPSDisplay(const char*); - unsigned int PeekMessages(); + void UpdateFPSDisplay(const char*) override; + unsigned int PeekMessages() override; }; } diff --git a/Source/Core/VideoBackends/OGL/Src/main.cpp b/Source/Core/VideoBackends/OGL/Src/main.cpp index b109fcdd8b..7ad18bca25 100644 --- a/Source/Core/VideoBackends/OGL/Src/main.cpp +++ b/Source/Core/VideoBackends/OGL/Src/main.cpp @@ -5,7 +5,7 @@ // OpenGL Backend Documentation -/* +/* 1.1 Display settings @@ -110,16 +110,16 @@ void GetShaders(std::vector &shaders) File::GetUserPath(D_SHADERS_IDX), File::GetSysDirectory() + SHADERS_DIR DIR_SEP, }; - for (size_t i = 0; i < ArraySize(directories); ++i) + for (auto& directory : directories) { - if (!File::IsDirectory(directories[i])) + if (!File::IsDirectory(directory)) continue; File::FSTEntry entry; - File::ScanDirectoryTree(directories[i], entry); - for (u32 j = 0; j < entry.children.size(); j++) + File::ScanDirectoryTree(directory, entry); + for (auto& file : entry.children) { - std::string name = entry.children[j].virtualName.c_str(); + std::string name = file.virtualName.c_str(); if (name.size() < 5) continue; if (strcasecmp(name.substr(name.size() - 5).c_str(), ".glsl")) @@ -146,6 +146,7 @@ void InitBackendInfo() g_Config.backend_info.bSupportsFormatReinterpretation = true; g_Config.backend_info.bSupportsPixelLighting = true; //g_Config.backend_info.bSupportsEarlyZ = true; // is gpu dependent and must be set in renderer + g_Config.backend_info.bSupportsOversizedViewports = true; // aamodes const char* caamodes[] = {_trans("None"), "2x", "4x", "8x", "8x CSAA", "8xQ CSAA", "16x CSAA", "16xQ CSAA", "4x SSAA"}; @@ -181,7 +182,7 @@ bool VideoBackend::Initialize(void *&window_handle) if (!GLInterface->Create(window_handle)) return false; - // Do our OSD callbacks + // Do our OSD callbacks OSD::DoCallbacks(OSD::OSD_INIT); s_BackendInitialized = true; @@ -232,14 +233,14 @@ void VideoBackend::Shutdown() { s_BackendInitialized = false; - // Do our OSD callbacks + // Do our OSD callbacks OSD::DoCallbacks(OSD::OSD_SHUTDOWN); GLInterface->Shutdown(); } void VideoBackend::Video_Cleanup() { - + if (g_renderer) { s_efbAccessRequested = false; diff --git a/Source/Core/VideoBackends/OGL/Src/stdafx.h b/Source/Core/VideoBackends/OGL/Src/stdafx.h index 2431184aaf..81bb44dc19 100644 --- a/Source/Core/VideoBackends/OGL/Src/stdafx.h +++ b/Source/Core/VideoBackends/OGL/Src/stdafx.h @@ -9,4 +9,4 @@ #endif #include -#include +#include diff --git a/Source/Core/VideoBackends/Software/Software.vcxproj b/Source/Core/VideoBackends/Software/Software.vcxproj index a87a05fac9..cd393dd437 100644 --- a/Source/Core/VideoBackends/Software/Software.vcxproj +++ b/Source/Core/VideoBackends/Software/Software.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,160 +19,61 @@ - {9E9DA440-E9AD-413C-B648-91030E792211} - VideoSoftware - VideoSoftware + {A4C423AA-F57C-46C7-A172-D1A777017D29} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - false - - - StaticLibrary - false - Unicode - - - StaticLibrary - - - Unicode - - - StaticLibrary - - - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\Include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\Include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\Include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\Include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\Include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - ..\..\Common\Src;..\..\Core\Src;..\..\VideoCommon\Src;..\..\DolphinWX\Src;$(SolutionDir)..\Externals\GLew\include;$(SolutionDir)..\Externals\wxWidgets3;$(SolutionDir)..\Externals\wxWidgets3\Include;$(SolutionDir)..\Externals;%(AdditionalIncludeDirectories) - - - - - - - + - - Create - Create - Create - Create - Create - Create + Create + + + + + + - - @@ -188,30 +81,37 @@ - - - + - + + + + + - - + - - {3e5c4e02-1ba9-4776-bdbe-e3f91ffa34cf} + + {2a3f751d-69e9-45f2-9199-9a00bfb6cc72} + + + {1c8436c9-dbaf-42be-83bc-cf3ec9175abe} + + + {3de9ee35-3e91-4f27-a014-2866ad8c3fe3} diff --git a/Source/Core/VideoBackends/Software/Software.vcxproj.filters b/Source/Core/VideoBackends/Software/Software.vcxproj.filters deleted file mode 100644 index 14be6ff447..0000000000 --- a/Source/Core/VideoBackends/Software/Software.vcxproj.filters +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {081288cb-a63b-4ae9-93eb-e668568520b8} - - - \ No newline at end of file diff --git a/Source/Core/VideoBackends/Software/Src/BPMemLoader.cpp b/Source/Core/VideoBackends/Software/Src/BPMemLoader.cpp index 6317398f39..f6f810791d 100644 --- a/Source/Core/VideoBackends/Software/Src/BPMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/Src/BPMemLoader.cpp @@ -97,7 +97,7 @@ void SWBPWritten(int address, int newvalue) case BPMEM_LOADTLUT1: // Load a Texture Look Up Table { u32 tlutTMemAddr = (newvalue & 0x3FF) << 9; - u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5; + u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5; u8 *ptr = 0; diff --git a/Source/Core/VideoBackends/Software/Src/Clipper.cpp b/Source/Core/VideoBackends/Software/Src/Clipper.cpp index ff71ee491d..6d6069b262 100644 --- a/Source/Core/VideoBackends/Software/Src/Clipper.cpp +++ b/Source/Core/VideoBackends/Software/Src/Clipper.cpp @@ -8,18 +8,18 @@ Copyright (c) 2007, 2008 Markus Trenkwalder All rights reserved. -Redistribution and use in source and binary forms, with or without +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright notice, +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation + this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name of the library's copyright owner nor the names of its - contributors may be used to endorse or promote products derived from this +* Neither the name of the library's copyright owner 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 COPYRIGHT HOLDERS AND CONTRIBUTORS @@ -55,8 +55,8 @@ namespace Clipper void DoState(PointerWrap &p) { p.DoArray(m_ViewOffset,2); - for (int i = 0; i< NUM_CLIPPED_VERTICES; ++i) - ClippedVertices[i].DoState(p); + for (auto& ClippedVertice : ClippedVertices) + ClippedVertice.DoState(p); } void Init() @@ -190,7 +190,7 @@ namespace Clipper inlist[1] = 1; inlist[2] = 2; - // mark this triangle as unused in case it should be completely + // mark this triangle as unused in case it should be completely // clipped indices[0] = SKIP_FLAG; indices[1] = SKIP_FLAG; @@ -229,13 +229,13 @@ namespace Clipper mask |= clip_mask[i]; } - if (mask == 0) + if (mask == 0) return; float t0 = 0; float t1 = 0; - // Mark unused in case of early termination + // Mark unused in case of early termination // of the macros below. (When fully clipped) indices[0] = SKIP_FLAG; indices[1] = SKIP_FLAG; @@ -247,7 +247,7 @@ namespace Clipper LINE_CLIP(CLIP_POS_Z_BIT, 0, 0, -1, 1); LINE_CLIP(CLIP_NEG_Z_BIT, 0, 0, 1, 1); - // Restore the old values as this line + // Restore the old values as this line // was not fully clipped. indices[0] = 0; indices[1] = 1; @@ -305,7 +305,7 @@ namespace Clipper PerspectiveDivide(Vertices[indices[i+1]]); PerspectiveDivide(Vertices[indices[i+2]]); - Rasterizer::DrawTriangleFrontFace(Vertices[indices[i]], Vertices[indices[i+1]], Vertices[indices[i+2]]); + Rasterizer::DrawTriangleFrontFace(Vertices[indices[i]], Vertices[indices[i+1]], Vertices[indices[i+2]]); } } } @@ -349,7 +349,7 @@ namespace Clipper float dx = v1->screenPosition.x - v0->screenPosition.x; float dy = v1->screenPosition.y - v0->screenPosition.y; - + float screenDx = 0; float screenDy = 0; @@ -405,7 +405,7 @@ namespace Clipper float w1 = v1->projectedPosition.w; float w2 = v2->projectedPosition.w; - float normalZDir = (x0*w2 - x2*w0)*y1 + (x2*y0 - x0*y2)*w1 + (y2*w0 - y0*w2)*x1; + float normalZDir = (x0*w2 - x2*w0)*y1 + (x2*y0 - x0*y2)*w1 + (y2*w0 - y0*w2)*x1; backface = normalZDir <= 0.0f; diff --git a/Source/Core/VideoBackends/Software/Src/DebugUtil.h b/Source/Core/VideoBackends/Software/Src/DebugUtil.h index 89b0db9b72..3cbb318ffb 100644 --- a/Source/Core/VideoBackends/Software/Src/DebugUtil.h +++ b/Source/Core/VideoBackends/Software/Src/DebugUtil.h @@ -24,4 +24,4 @@ namespace DebugUtil void CopyTempBuffer(s16 x, s16 y, int bufferBase, int subBuffer, const char *name); } -#endif +#endif diff --git a/Source/Core/VideoBackends/Software/Src/EfbCopy.cpp b/Source/Core/VideoBackends/Software/Src/EfbCopy.cpp index 303d5a06ad..1191b3c6df 100644 --- a/Source/Core/VideoBackends/Software/Src/EfbCopy.cpp +++ b/Source/Core/VideoBackends/Software/Src/EfbCopy.cpp @@ -19,7 +19,7 @@ namespace EfbCopy { void CopyToXfb() { - GLInterface->Update(); // just updates the render window position and the backbuffer size + GLInterface->Update(); // just updates the render window position and the backbuffer size if (!g_SWVideoConfig.bHwRasterizer) { diff --git a/Source/Core/VideoBackends/Software/Src/EfbInterface.cpp b/Source/Core/VideoBackends/Software/Src/EfbInterface.cpp index 3d8ea0f9f1..f13f6a47b1 100644 --- a/Source/Core/VideoBackends/Software/Src/EfbInterface.cpp +++ b/Source/Core/VideoBackends/Software/Src/EfbInterface.cpp @@ -185,7 +185,7 @@ namespace EfbInterface u32 *dst = (u32*)&efb[offset]; u32 val = *dst & 0xff000000; val |= depth & 0x00ffffff; - *dst = val; + *dst = val; } break; case PIXELFMT_RGB565_Z16: @@ -194,7 +194,7 @@ namespace EfbInterface u32 *dst = (u32*)&efb[offset]; u32 val = *dst & 0xff000000; val |= depth & 0x00ffffff; - *dst = val; + *dst = val; } break; default: diff --git a/Source/Core/VideoBackends/Software/Src/HwRasterizer.cpp b/Source/Core/VideoBackends/Software/Src/HwRasterizer.cpp index 5e3e4a4ae0..996b440dc4 100644 --- a/Source/Core/VideoBackends/Software/Src/HwRasterizer.cpp +++ b/Source/Core/VideoBackends/Software/Src/HwRasterizer.cpp @@ -130,7 +130,7 @@ namespace HwRasterizer glDepthFunc(GL_LEQUAL); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - + CreateShaders(); GL_REPORT_ERRORD(); } @@ -141,7 +141,7 @@ namespace HwRasterizer u32 imageAddr = texUnit.texImage3[0].image_base; // Texture Rectangle uses pixel coordinates // While GLES uses texture coordinates -#ifdef USE_GLES +#ifdef USE_GLES width = texUnit.texImage0[0].width; height = texUnit.texImage0[0].height; #else @@ -303,7 +303,7 @@ namespace HwRasterizer { glUseProgram(clearProg); glVertexAttribPointer(clear_apos, 3, GL_FLOAT, GL_FALSE, 0, verts); - glUniform4f(clear_ucol, r, g, b, a); + glUniform4f(clear_ucol, r, g, b, a); glEnableVertexAttribArray(col_apos); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableVertexAttribArray(col_apos); diff --git a/Source/Core/VideoBackends/Software/Src/HwRasterizer.h b/Source/Core/VideoBackends/Software/Src/HwRasterizer.h index ac0892841f..c3af17cec2 100644 --- a/Source/Core/VideoBackends/Software/Src/HwRasterizer.h +++ b/Source/Core/VideoBackends/Software/Src/HwRasterizer.h @@ -28,10 +28,10 @@ namespace HwRasterizer struct TexCacheEntry { - TexImage0 texImage0; - TexImage1 texImage1; - TexImage2 texImage2; - TexImage3 texImage3; + TexImage0 texImage0; + TexImage1 texImage1; + TexImage2 texImage2; + TexImage3 texImage3; TexTLUT texTlut; GLuint texture; @@ -47,4 +47,4 @@ namespace HwRasterizer static TextureCache textures; } -#endif +#endif diff --git a/Source/Core/VideoBackends/Software/Src/NativeVertexFormat.h b/Source/Core/VideoBackends/Software/Src/NativeVertexFormat.h index 2f0213d469..9f9610910a 100644 --- a/Source/Core/VideoBackends/Software/Src/NativeVertexFormat.h +++ b/Source/Core/VideoBackends/Software/Src/NativeVertexFormat.h @@ -85,11 +85,11 @@ struct OutputVertexData mvPosition.DoState(p); p.Do(projectedPosition); screenPosition.DoState(p); - for (int i = 0; i < 3;++i) - normal[i].DoState(p); + for (auto& vec : normal) + vec.DoState(p); p.DoArray(color, sizeof color); - for (int i = 0; i < 8;++i) - texCoords[i].DoState(p); + for (auto& vec : texCoords) + vec.DoState(p); } }; diff --git a/Source/Core/VideoBackends/Software/Src/OpcodeDecoder.cpp b/Source/Core/VideoBackends/Software/Src/OpcodeDecoder.cpp index 7c3408a316..21f0a97abd 100644 --- a/Source/Core/VideoBackends/Software/Src/OpcodeDecoder.cpp +++ b/Source/Core/VideoBackends/Software/Src/OpcodeDecoder.cpp @@ -82,7 +82,7 @@ void DecodePrimitiveStream(u32 iBufferSize) void ReadXFData(u32 iBufferSize) { - _assert_msg_(VIDEO, iBufferSize >= (u32)(streamSize * 4), "Underflow during standard opcode decoding"); + _assert_msg_(VIDEO, iBufferSize >= (u32)(streamSize * 4), "Underflow during standard opcode decoding"); u32 pData[16]; for (int i = 0; i < streamSize; i++) @@ -109,7 +109,7 @@ void ExecuteDisplayList(u32 addr, u32 count) u32 readCount = (u32)(g_pVideoData - dlStart); dlStart = g_pVideoData; - _assert_msg_(VIDEO, count >= readCount, "Display list underrun"); + _assert_msg_(VIDEO, count >= readCount, "Display list underrun"); count -= readCount; } @@ -119,7 +119,7 @@ void ExecuteDisplayList(u32 addr, u32 count) void DecodeStandard(u32 bufferSize) { - _assert_msg_(VIDEO, CommandRunnable(bufferSize), "Underflow during standard opcode decoding"); + _assert_msg_(VIDEO, CommandRunnable(bufferSize), "Underflow during standard opcode decoding"); int Cmd = DataReadU8(); @@ -191,7 +191,7 @@ void DecodeStandard(u32 bufferSize) // zelda 4 swords calls it and checks the metrics registers after that break; - case GX_CMD_INVL_VC:// Invalidate (vertex cache?) + case GX_CMD_INVL_VC:// Invalidate (vertex cache?) DEBUG_LOG(VIDEO, "Invalidate (vertex cache?)"); break; @@ -202,7 +202,7 @@ void DecodeStandard(u32 bufferSize) } break; - // draw primitives + // draw primitives default: if (Cmd & 0x80) { @@ -284,7 +284,7 @@ bool CommandRunnable(u32 iBufferSize) minSize = 5; break; - // draw primitives + // draw primitives default: if (Cmd & 0x80) minSize = 3; diff --git a/Source/Core/VideoBackends/Software/Src/Rasterizer.cpp b/Source/Core/VideoBackends/Software/Src/Rasterizer.cpp index 3c45ee7d25..fa10ac38af 100644 --- a/Source/Core/VideoBackends/Software/Src/Rasterizer.cpp +++ b/Source/Core/VideoBackends/Software/Src/Rasterizer.cpp @@ -54,12 +54,12 @@ void DoState(PointerWrap &p) { ZSlope.DoState(p); WSlope.DoState(p); - for (int i=0;i<2;++i) + for (auto& ColorSlope : ColorSlopes) for (int n=0; n<4; ++n) - ColorSlopes[i][n].DoState(p); - for (int i=0;i<8;++i) + ColorSlope[n].DoState(p); + for (auto& TexSlope : TexSlopes) for (int n=0; n<3; ++n) - TexSlopes[i][n].DoState(p); + TexSlope[n].DoState(p); p.Do(vertex0X); p.Do(vertex0Y); p.Do(vertexOffsetX); diff --git a/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.cpp b/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.cpp index 5fd1353a94..06876a2035 100644 --- a/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.cpp +++ b/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.cpp @@ -88,7 +88,7 @@ void Init() cpreg.bboxbottom = 0; cpreg.token = 0; - + et_UpdateInterrupts = CoreTiming::RegisterEvent("UpdateInterrupts", UpdateInterrupts_Wrapper); // internal buffer position @@ -174,7 +174,7 @@ void Write16(const u16 _Value, const u32 _Address) cpreg.status.UnderflowLoWatermark = 0; INFO_LOG(COMMANDPROCESSOR,"\t write to CLEAR_REGISTER : %04x",_Value); - } + } break; // Fifo Registers diff --git a/Source/Core/VideoBackends/Software/Src/SWPixelEngine.cpp b/Source/Core/VideoBackends/Software/Src/SWPixelEngine.cpp index 6c81aedac7..a747a669ed 100644 --- a/Source/Core/VideoBackends/Software/Src/SWPixelEngine.cpp +++ b/Source/Core/VideoBackends/Software/Src/SWPixelEngine.cpp @@ -81,7 +81,7 @@ void Write16(const u16 _iValue, const u32 _iAddress) switch (address) { - case PE_CTRL_REGISTER: + case PE_CTRL_REGISTER: { UPECtrlReg tmpCtrl(_iValue); @@ -135,7 +135,7 @@ void SetToken_OnMainThread(u64 userdata, int cyclesLate) void SetFinish_OnMainThread(u64 userdata, int cyclesLate) { - g_bSignalFinishInterrupt = true; + g_bSignalFinishInterrupt = true; UpdateInterrupts(); } diff --git a/Source/Core/VideoBackends/Software/Src/SWPixelEngine.h b/Source/Core/VideoBackends/Software/Src/SWPixelEngine.h index b61af07a06..01fb49685b 100644 --- a/Source/Core/VideoBackends/Software/Src/SWPixelEngine.h +++ b/Source/Core/VideoBackends/Software/Src/SWPixelEngine.h @@ -46,7 +46,7 @@ namespace SWPixelEngine union UPEZConfReg { u16 Hex; - struct + struct { u16 ZCompEnable : 1; // Z Comparator Enable u16 Function : 3; @@ -58,7 +58,7 @@ namespace SWPixelEngine union UPEAlphaConfReg { u16 Hex; - struct + struct { u16 BMMath : 1; // GX_BM_BLEND || GX_BM_SUBSTRACT u16 BMLogic : 1; // GX_BM_LOGIC @@ -75,7 +75,7 @@ namespace SWPixelEngine union UPEDstAlphaConfReg { u16 Hex; - struct + struct { u16 DstAlpha : 8; u16 Enable : 1; @@ -86,7 +86,7 @@ namespace SWPixelEngine union UPEAlphaModeConfReg { u16 Hex; - struct + struct { u16 Threshold : 8; u16 CompareMode : 8; @@ -96,7 +96,7 @@ namespace SWPixelEngine union UPEAlphaReadReg { u16 Hex; - struct + struct { u16 ReadMode : 3; u16 : 13; @@ -105,7 +105,7 @@ namespace SWPixelEngine union UPECtrlReg { - struct + struct { u16 PETokenEnable : 1; u16 PEFinishEnable : 1; diff --git a/Source/Core/VideoBackends/Software/Src/SWRenderer.cpp b/Source/Core/VideoBackends/Software/Src/SWRenderer.cpp index 57557c1ee8..1d894b18da 100644 --- a/Source/Core/VideoBackends/Software/Src/SWRenderer.cpp +++ b/Source/Core/VideoBackends/Software/Src/SWRenderer.cpp @@ -30,7 +30,7 @@ void SWRenderer::Init() void SWRenderer::Shutdown() { glDeleteProgram(program); - glDeleteTextures(1, &s_RenderTarget); + glDeleteTextures(1, &s_RenderTarget); #ifndef USE_GLES delete s_pfont; s_pfont = 0; @@ -62,7 +62,7 @@ void CreateShaders() uni_tex = glGetUniformLocation(program, "Texture"); attr_pos = glGetAttribLocation(program, "pos"); - attr_tex = glGetAttribLocation(program, "TexCoordIn"); + attr_tex = glGetAttribLocation(program, "TexCoordIn"); } void SWRenderer::Prepare() @@ -100,7 +100,7 @@ void SWRenderer::DrawDebugText() char *p = debugtext_buffer; p[0] = 0; - if (g_SWVideoConfig.bShowStats) + if (g_SWVideoConfig.bShowStats) { p+=sprintf(p,"Objects: %i\n",swstats.thisFrame.numDrawnObjects); p+=sprintf(p,"Primitives: %i\n",swstats.thisFrame.numPrimatives); @@ -136,7 +136,7 @@ void SWRenderer::DrawTexture(u8 *texture, int width, int height) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)width, (GLsizei)height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - + glUseProgram(program); static const GLfloat verts[4][2] = { { -1, -1}, // Left top @@ -161,13 +161,13 @@ void SWRenderer::DrawTexture(u8 *texture, int width, int height) glDisableVertexAttribArray(attr_pos); glDisableVertexAttribArray(attr_tex); - glBindTexture(GL_TEXTURE_2D, 0); + glBindTexture(GL_TEXTURE_2D, 0); GL_REPORT_ERRORD(); } void SWRenderer::SwapBuffer() { - // Do our OSD callbacks + // Do our OSD callbacks OSD::DoCallbacks(OSD::OSD_ONFRAME); DrawDebugText(); @@ -177,7 +177,7 @@ void SWRenderer::SwapBuffer() GLInterface->Swap(); swstats.ResetFrame(); - + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GL_REPORT_ERRORD(); diff --git a/Source/Core/VideoBackends/Software/Src/SWVertexLoader.cpp b/Source/Core/VideoBackends/Software/Src/SWVertexLoader.cpp index f176acd635..f08e2f3825 100644 --- a/Source/Core/VideoBackends/Software/Src/SWVertexLoader.cpp +++ b/Source/Core/VideoBackends/Software/Src/SWVertexLoader.cpp @@ -76,13 +76,13 @@ void SWVertexLoader::SetFormat(u8 attributeIndex, u8 primitiveType) g_VtxDesc.Tex4Coord, g_VtxDesc.Tex5Coord, g_VtxDesc.Tex6Coord, (const u32)((g_VtxDesc.Hex >> 31) & 3) }; const u32 tcElements[8] = { - m_CurrentVat->g0.Tex0CoordElements, m_CurrentVat->g1.Tex1CoordElements, m_CurrentVat->g1.Tex2CoordElements, + m_CurrentVat->g0.Tex0CoordElements, m_CurrentVat->g1.Tex1CoordElements, m_CurrentVat->g1.Tex2CoordElements, m_CurrentVat->g1.Tex3CoordElements, m_CurrentVat->g1.Tex4CoordElements, m_CurrentVat->g2.Tex5CoordElements, m_CurrentVat->g2.Tex6CoordElements, m_CurrentVat->g2.Tex7CoordElements }; const u32 tcFormat[8] = { - m_CurrentVat->g0.Tex0CoordFormat, m_CurrentVat->g1.Tex1CoordFormat, m_CurrentVat->g1.Tex2CoordFormat, + m_CurrentVat->g0.Tex0CoordFormat, m_CurrentVat->g1.Tex1CoordFormat, m_CurrentVat->g1.Tex2CoordFormat, m_CurrentVat->g1.Tex3CoordFormat, m_CurrentVat->g1.Tex4CoordFormat, m_CurrentVat->g2.Tex5CoordFormat, m_CurrentVat->g2.Tex6CoordFormat, m_CurrentVat->g2.Tex7CoordFormat }; @@ -161,10 +161,10 @@ void SWVertexLoader::SetFormat(u8 attributeIndex, u8 primitiveType) { m_VertexSize += VertexLoader_Normal::GetSize(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3); - + m_normalLoader = VertexLoader_Normal::GetFunction(g_VtxDesc.Normal, m_CurrentVat->g0.NormalFormat, m_CurrentVat->g0.NormalElements, m_CurrentVat->g0.NormalIndex3); - + if (m_normalLoader == 0) { ERROR_LOG(VIDEO, "VertexLoader_Normal::GetFunction returned zero!"); @@ -192,7 +192,7 @@ void SWVertexLoader::SetFormat(u8 attributeIndex, u8 primitiveType) } AddAttributeLoader(LoadColor, i); break; - case INDEX8: + case INDEX8: m_VertexSize += 1; switch (colComp[i]) { diff --git a/Source/Core/VideoBackends/Software/Src/SWVideoConfig.cpp b/Source/Core/VideoBackends/Software/Src/SWVideoConfig.cpp index a6ebb97eb9..43b6a96ef7 100644 --- a/Source/Core/VideoBackends/Software/Src/SWVideoConfig.cpp +++ b/Source/Core/VideoBackends/Software/Src/SWVideoConfig.cpp @@ -12,7 +12,7 @@ SWVideoConfig::SWVideoConfig() { bFullscreen = false; bHideCursor = false; - renderToMainframe = false; + renderToMainframe = false; bHwRasterizer = false; diff --git a/Source/Core/VideoBackends/Software/Src/SWVideoConfig.h b/Source/Core/VideoBackends/Software/Src/SWVideoConfig.h index 94e3a6b2a8..ce1857d774 100644 --- a/Source/Core/VideoBackends/Software/Src/SWVideoConfig.h +++ b/Source/Core/VideoBackends/Software/Src/SWVideoConfig.h @@ -19,7 +19,7 @@ struct SWVideoConfig : NonCopyable // General bool bFullscreen; bool bHideCursor; - bool renderToMainframe; + bool renderToMainframe; bool bHwRasterizer; diff --git a/Source/Core/VideoBackends/Software/Src/SWmain.cpp b/Source/Core/VideoBackends/Software/Src/SWmain.cpp index 7f6792fc1c..939dd4553a 100644 --- a/Source/Core/VideoBackends/Software/Src/SWmain.cpp +++ b/Source/Core/VideoBackends/Software/Src/SWmain.cpp @@ -61,8 +61,8 @@ void VideoSoftware::ShowConfig(void *_hParent) bool VideoSoftware::Initialize(void *&window_handle) { g_SWVideoConfig.Load((File::GetUserPath(D_CONFIG_IDX) + "gfx_software.ini").c_str()); - InitInterface(); - + InitInterface(); + if (!GLInterface->Create(window_handle)) { INFO_LOG(VIDEO, "%s", "SWRenderer::Create failed\n"); @@ -150,7 +150,7 @@ void VideoSoftware::Shutdown() HwRasterizer::Shutdown(); SWRenderer::Shutdown(); - // Do our OSD callbacks + // Do our OSD callbacks OSD::DoCallbacks(OSD::OSD_SHUTDOWN); GLInterface->Shutdown(); @@ -177,7 +177,7 @@ void VideoSoftware::Video_Prepare() // Handle VSync on/off GLInterface->SwapInterval(VSYNC_ENABLED); - // Do our OSD callbacks + // Do our OSD callbacks OSD::DoCallbacks(OSD::OSD_INIT); HwRasterizer::Prepare(); @@ -188,7 +188,7 @@ void VideoSoftware::Video_Prepare() // Run from the CPU thread (from VideoInterface.cpp) void VideoSoftware::Video_BeginField(u32 xfbAddr, u32 fbWidth, u32 fbHeight) -{ +{ } // Run from the CPU thread (from VideoInterface.cpp) @@ -263,7 +263,7 @@ void VideoSoftware::Video_EnterLoop() Common::SleepCurrentThread(1); m_csSWVidOccupied.lock(); } - } + } } void VideoSoftware::Video_ExitLoop() diff --git a/Source/Core/VideoBackends/Software/Src/SetupUnit.cpp b/Source/Core/VideoBackends/Software/Src/SetupUnit.cpp index f0cc179f25..b08584e0a9 100644 --- a/Source/Core/VideoBackends/Software/Src/SetupUnit.cpp +++ b/Source/Core/VideoBackends/Software/Src/SetupUnit.cpp @@ -99,7 +99,7 @@ void SetupUnit::SetupTriStrip() m_VertPointer[2 - (m_VertexCounter & 1)] = m_VertPointer[0]; m_VertWritePointer = m_VertPointer[0]; - m_VertPointer[0] = &m_Vertices[(m_VertexCounter + 1) % 3]; + m_VertPointer[0] = &m_Vertices[(m_VertexCounter + 1) % 3]; } void SetupUnit::SetupTriFan() diff --git a/Source/Core/VideoBackends/Software/Src/Tev.cpp b/Source/Core/VideoBackends/Software/Src/Tev.cpp index effe1d3261..da9b30fe78 100644 --- a/Source/Core/VideoBackends/Software/Src/Tev.cpp +++ b/Source/Core/VideoBackends/Software/Src/Tev.cpp @@ -179,7 +179,7 @@ void Tev::DrawColorRegular(TevStageCombiner::ColorCombiner &cc) InputReg.c = *m_ColorInputLUT[cc.c][i]; InputReg.d = *m_ColorInputLUT[cc.d][i]; - u16 c = InputReg.c + (InputReg.c >> 7); + u16 c = InputReg.c + (InputReg.c >> 7); s32 temp = InputReg.a * (256 - c) + (InputReg.b * c); temp = cc.op?(-temp >> 8):(temp >> 8); @@ -285,7 +285,7 @@ void Tev::DrawColorCompare(TevStageCombiner::ColorCombiner &cc) Reg[cc.dest][BLU_C + i] = InputReg.d + ((InputReg.a > InputReg.b) ? InputReg.c : 0); } break; - case TEVCMP_RGB8_EQ: + case TEVCMP_RGB8_EQ: for (int i = 0; i < 3; i++) { InputReg.a = *m_ColorInputLUT[cc.a][i]; @@ -307,7 +307,7 @@ void Tev::DrawAlphaRegular(TevStageCombiner::AlphaCombiner &ac) InputReg.c = m_AlphaInputLUT[ac.c][ALP_C]; InputReg.d = m_AlphaInputLUT[ac.d][ALP_C]; - u16 c = InputReg.c + (InputReg.c >> 7); + u16 c = InputReg.c + (InputReg.c >> 7); s32 temp = InputReg.a * (256 - c) + (InputReg.b * c); temp = ac.op?(-temp >> 8):(temp >> 8); @@ -736,8 +736,8 @@ void Tev::Draw() s32 denom = bpmem.fog.b_magnitude - (Position[2] >> bpmem.fog.b_shift); //in addition downscale magnitude and zs to 0.24 bits ze = (bpmem.fog.a.GetA() * 16777215.0f) / (float)denom; - } - else + } + else { // orthographic // ze = a*Zs @@ -848,7 +848,7 @@ void Tev::SetRegColor(int reg, int comp, bool konst, s16 color) void Tev::DoState(PointerWrap &p) { p.DoArray(Reg, sizeof(Reg)); - + p.DoArray(KonstantColors, sizeof(KonstantColors)); p.DoArray(TexColor,4); p.DoArray(RasColor,4); diff --git a/Source/Core/VideoBackends/Software/Src/Tev.h b/Source/Core/VideoBackends/Software/Src/Tev.h index fee3c8022e..e86768ac0b 100644 --- a/Source/Core/VideoBackends/Software/Src/Tev.h +++ b/Source/Core/VideoBackends/Software/Src/Tev.h @@ -9,7 +9,7 @@ #include "ChunkFile.h" class Tev -{ +{ struct InputRegType { unsigned a : 8; @@ -49,7 +49,7 @@ class Tev { BLU_INP, GRN_INP, - RED_INP + RED_INP }; enum BufferBase diff --git a/Source/Core/VideoBackends/Software/Src/TextureEncoder.cpp b/Source/Core/VideoBackends/Software/Src/TextureEncoder.cpp index 9874e13449..07bb162cd6 100644 --- a/Source/Core/VideoBackends/Software/Src/TextureEncoder.cpp +++ b/Source/Core/VideoBackends/Software/Src/TextureEncoder.cpp @@ -359,7 +359,7 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format) SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); ENCODE_LOOP_BLOCKS { - RGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); + RGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); src += readStride; dst += 2; } @@ -563,7 +563,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format) boxfilterRGBA_to_RGB8(src, r, g, b); src += readStride; - u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); + u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); *(u16*)dst = Common::swap16(val); dst+=2; } @@ -595,7 +595,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format) SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); ENCODE_LOOP_BLOCKS { - boxfilterRGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); + boxfilterRGBA_to_RGBA8(src, dst[1], dst[32], dst[33], dst[0]); src += readStride; dst += 2; } @@ -721,7 +721,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format) default: PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; + break; } } @@ -790,7 +790,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format) SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); ENCODE_LOOP_BLOCKS { - u16 val = ((src[2] << 8) & 0xf800) | ((src[1] << 3) & 0x07e0) | ((src[0] >> 3) & 0x001e); + u16 val = ((src[2] << 8) & 0xf800) | ((src[1] << 3) & 0x07e0) | ((src[0] >> 3) & 0x001e); *(u16*)dst = Common::swap16(val); src += readStride; dst+=2; @@ -935,7 +935,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format) default: PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; + break; } } @@ -1010,7 +1010,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format) ENCODE_LOOP_BLOCKS { boxfilterRGB_to_RGB8(src, r, g, b); - u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); + u16 val = ((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | ((b >> 3) & 0x001e); *(u16*)dst = Common::swap16(val); src += readStride; dst+=2; @@ -1166,7 +1166,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format) default: PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; + break; } } @@ -1270,7 +1270,7 @@ void EncodeZ24(u8 *dst, u8 *src, u32 format) default: PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; + break; } } @@ -1314,7 +1314,7 @@ void EncodeZ24halfscale(u8 *dst, u8 *src, u32 format) SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride); ENCODE_LOOP_BLOCKS { - boxfilterRGB_to_RGB8(src, dst[33], dst[32], dst[1]); + boxfilterRGB_to_RGB8(src, dst[33], dst[32], dst[1]); dst[0] = 255; src += readStride; dst += 2; @@ -1380,7 +1380,7 @@ void EncodeZ24halfscale(u8 *dst, u8 *src, u32 format) default: PanicAlert("Unknown texture copy format: 0x%x\n", format); - break; + break; } } @@ -1389,7 +1389,7 @@ void Encode(u8 *dest_ptr) int pixelformat = bpmem.zcontrol.pixel_format; bool bFromZBuffer = pixelformat == PIXELFMT_Z24; bool bIsIntensityFmt = bpmem.triggerEFBCopy.intensity_fmt > 0; - u32 copyfmt = ((bpmem.triggerEFBCopy.target_pixel_format / 2) + ((bpmem.triggerEFBCopy.target_pixel_format & 1) * 8)); + u32 copyfmt = ((bpmem.triggerEFBCopy.target_pixel_format / 2) + ((bpmem.triggerEFBCopy.target_pixel_format & 1) * 8)); // pack copy format information into a single variable u32 format = copyfmt; diff --git a/Source/Core/VideoBackends/Software/Src/TextureSampler.cpp b/Source/Core/VideoBackends/Software/Src/TextureSampler.cpp index f7c87ba513..0657f701f2 100644 --- a/Source/Core/VideoBackends/Software/Src/TextureSampler.cpp +++ b/Source/Core/VideoBackends/Software/Src/TextureSampler.cpp @@ -124,7 +124,7 @@ void SampleMip(s32 s, s32 t, s32 mip, bool linear, u8 texmap, u8 *sample) int imageHeight = ti0.height; int tlutAddress = texTlut.tmem_offset << 9; - + // reduce sample location and texture size to mip level // move texture pointer to mip location if (mip) diff --git a/Source/Core/VideoBackends/Software/Src/TransformUnit.cpp b/Source/Core/VideoBackends/Software/Src/TransformUnit.cpp index a1c2bd190a..e00f05e4aa 100644 --- a/Source/Core/VideoBackends/Software/Src/TransformUnit.cpp +++ b/Source/Core/VideoBackends/Software/Src/TransformUnit.cpp @@ -248,7 +248,7 @@ void LightColor(const Vec3 &pos, const Vec3 &normal, u8 lightNum, const LitChann float attn; if (chan.attnfunc == 3) // spot - { + { float dist2 = ldir.length2(); float dist = sqrtf(dist2); ldir = ldir / dist; @@ -259,7 +259,7 @@ void LightColor(const Vec3 &pos, const Vec3 &normal, u8 lightNum, const LitChann attn = SafeDivide(max(0.0f, cosAtt), distAtt); } else if (chan.attnfunc == 1) // specular - { + { // donko - what is going on here? 655.36 is a guess but seems about right. attn = (light->pos * normal) > -655.36 ? max(0.0f, (light->dir * normal)) : 0; ldir.set(1.0f, attn, attn * attn); diff --git a/Source/Core/VideoBackends/Software/Src/Vec3.h b/Source/Core/VideoBackends/Software/Src/Vec3.h index d4b1502dcb..117a6f4197 100644 --- a/Source/Core/VideoBackends/Software/Src/Vec3.h +++ b/Source/Core/VideoBackends/Software/Src/Vec3.h @@ -62,7 +62,7 @@ public: Vec3 operator %(const Vec3 &v) const { return Vec3(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); - } + } float length2() const { return x*x+y*y+z*z; } @@ -88,11 +88,11 @@ public: { return *((&x) + i); } - bool operator == (const Vec3 &other) const + bool operator == (const Vec3 &other) const { if (x==other.x && y==other.y && z==other.z) return true; - else + else return false; } void setZero() diff --git a/Source/Core/VideoBackends/Software/Src/VideoBackend.h b/Source/Core/VideoBackends/Software/Src/VideoBackend.h index 6c382aa0b2..4d85c637f0 100644 --- a/Source/Core/VideoBackends/Software/Src/VideoBackend.h +++ b/Source/Core/VideoBackends/Software/Src/VideoBackend.h @@ -9,57 +9,57 @@ namespace SW class VideoSoftware : public VideoBackend { - bool Initialize(void *&); - void Shutdown(); + bool Initialize(void *&) override; + void Shutdown() override; - std::string GetName(); + std::string GetName() override; - void EmuStateChange(EMUSTATE_CHANGE newState); + void EmuStateChange(EMUSTATE_CHANGE newState) override; - void RunLoop(bool enable); + void RunLoop(bool enable) override; - void ShowConfig(void* parent); + void ShowConfig(void* parent) override; - void Video_Prepare(); - void Video_Cleanup(); + void Video_Prepare() override; + void Video_Cleanup() override; - void Video_EnterLoop(); - void Video_ExitLoop(); - void Video_BeginField(u32, u32, u32); - void Video_EndField(); - - u32 Video_AccessEFB(EFBAccessType, u32, u32, u32); - u32 Video_GetQueryResult(PerfQueryType type); + void Video_EnterLoop() override; + void Video_ExitLoop() override; + void Video_BeginField(u32, u32, u32) override; + void Video_EndField() override; - void Video_AddMessage(const char* pstr, unsigned int milliseconds); - void Video_ClearMessages(); - bool Video_Screenshot(const char* filename); + u32 Video_AccessEFB(EFBAccessType, u32, u32, u32) override; + u32 Video_GetQueryResult(PerfQueryType type) override; + + void Video_AddMessage(const char* pstr, unsigned int milliseconds) override; + void Video_ClearMessages() override; + bool Video_Screenshot(const char* filename) override; int Video_LoadTexture(char *imagedata, u32 width, u32 height); void Video_DeleteTexture(int texID); void Video_DrawTexture(int texID, float *coords); - void Video_SetRendering(bool bEnabled); + void Video_SetRendering(bool bEnabled) override; - void Video_GatherPipeBursted(); - bool Video_IsHiWatermarkActive(); - bool Video_IsPossibleWaitingSetDrawDone(); - void Video_AbortFrame(); + void Video_GatherPipeBursted() override; + bool Video_IsHiWatermarkActive() override; + bool Video_IsPossibleWaitingSetDrawDone() override; + void Video_AbortFrame() override; - readFn16 Video_CPRead16(); - writeFn16 Video_CPWrite16(); - readFn16 Video_PERead16(); - writeFn16 Video_PEWrite16(); - writeFn32 Video_PEWrite32(); + readFn16 Video_CPRead16() override; + writeFn16 Video_CPWrite16() override; + readFn16 Video_PERead16() override; + writeFn16 Video_PEWrite16() override; + writeFn32 Video_PEWrite32() override; - void UpdateFPSDisplay(const char*); - unsigned int PeekMessages(); + void UpdateFPSDisplay(const char*) override; + unsigned int PeekMessages() override; + + void PauseAndLock(bool doLock, bool unpauseOnUnlock=true) override; + void DoState(PointerWrap &p) override; - void PauseAndLock(bool doLock, bool unpauseOnUnlock=true); - void DoState(PointerWrap &p); - public: - void CheckInvalidState(); + void CheckInvalidState() override; }; } diff --git a/Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp b/Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp index eea908edfc..5ac6946d23 100644 --- a/Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp +++ b/Source/Core/VideoBackends/Software/Src/VideoConfigDialog.cpp @@ -28,7 +28,7 @@ VideoConfigDialog::VideoConfigDialog(wxWindow* parent, const std::string& title, { vconfig.Load((File::GetUserPath(D_CONFIG_IDX) + ininame + ".ini").c_str()); - wxNotebook* const notebook = new wxNotebook(this, -1, wxDefaultPosition, wxDefaultSize); + wxNotebook* const notebook = new wxNotebook(this, -1, wxDefaultPosition, wxDefaultSize); // -- GENERAL -- { @@ -79,7 +79,7 @@ VideoConfigDialog::VideoConfigDialog(wxWindow* parent, const std::string& title, szr_info->Add(new SettingCheckBox(page_general, wxT("Various Statistics"), wxT(""), vconfig.bShowStats)); } - + // - utility { wxStaticBoxSizer* const group_utility = new wxStaticBoxSizer(wxVERTICAL, page_general, wxT("Utility")); diff --git a/Source/Core/VideoBackends/Software/Src/XFMemLoader.cpp b/Source/Core/VideoBackends/Software/Src/XFMemLoader.cpp index 4580bafad8..899a5fab48 100644 --- a/Source/Core/VideoBackends/Software/Src/XFMemLoader.cpp +++ b/Source/Core/VideoBackends/Software/Src/XFMemLoader.cpp @@ -23,7 +23,7 @@ void XFWritten(u32 transferSize, u32 baseAddress) if (baseAddress <= 0x1026 && topAddress >= 0x1020) Clipper::SetViewOffset(); - // fix lights so invalid values don't trash the lighting computations + // fix lights so invalid values don't trash the lighting computations if (baseAddress <= 0x067f && topAddress >= 0x0604) { u32* x = swxfregs.lights; diff --git a/Source/Core/VideoBackends/Software/Src/XFMemLoader.h b/Source/Core/VideoBackends/Software/Src/XFMemLoader.h index 75e05110bf..ff6c7267dd 100644 --- a/Source/Core/VideoBackends/Software/Src/XFMemLoader.h +++ b/Source/Core/VideoBackends/Software/Src/XFMemLoader.h @@ -158,7 +158,7 @@ struct Projection union TexMtxInfo { - struct + struct { u32 unknown : 1; u32 projection : 1; // XF_TEXPROJ_X @@ -173,7 +173,7 @@ union TexMtxInfo union PostMtxInfo { - struct + struct { u32 index : 6; // base row of dual transform matrix u32 unused : 2; diff --git a/Source/Core/VideoBackends/Software/Src/stdafx.h b/Source/Core/VideoBackends/Software/Src/stdafx.h index 60f0912113..9d8868e8a9 100644 --- a/Source/Core/VideoBackends/Software/Src/stdafx.h +++ b/Source/Core/VideoBackends/Software/Src/stdafx.h @@ -9,5 +9,5 @@ #endif #include -#include +#include diff --git a/Source/Core/VideoCommon/Src/AVIDump.cpp b/Source/Core/VideoCommon/Src/AVIDump.cpp index 0910381d74..d6f2755e33 100644 --- a/Source/Core/VideoCommon/Src/AVIDump.cpp +++ b/Source/Core/VideoCommon/Src/AVIDump.cpp @@ -4,7 +4,7 @@ #if defined(__FreeBSD__) #define __STDC_CONSTANT_MACROS 1 -#endif +#endif #include "AVIDump.h" #include "HW/VideoInterface.h" //for TargetRefreshRate @@ -71,9 +71,9 @@ bool AVIDump::CreateFile() HRESULT hr = AVIFileOpenA(&m_file, movie_file_name, OF_WRITE | OF_CREATE, NULL); if (FAILED(hr)) { - if (hr == AVIERR_BADFORMAT) NOTICE_LOG(VIDEO, "The file couldn't be read, indicating a corrupt file or an unrecognized format."); - if (hr == AVIERR_MEMORY) NOTICE_LOG(VIDEO, "The file could not be opened because of insufficient memory."); - if (hr == AVIERR_FILEREAD) NOTICE_LOG(VIDEO, "A disk error occurred while reading the file."); + if (hr == AVIERR_BADFORMAT) NOTICE_LOG(VIDEO, "The file couldn't be read, indicating a corrupt file or an unrecognized format."); + if (hr == AVIERR_MEMORY) NOTICE_LOG(VIDEO, "The file could not be opened because of insufficient memory."); + if (hr == AVIERR_FILEREAD) NOTICE_LOG(VIDEO, "A disk error occurred while reading the file."); if (hr == AVIERR_FILEOPEN) NOTICE_LOG(VIDEO, "A disk error occurred while opening the file."); if (hr == REGDB_E_CLASSNOTREG) NOTICE_LOG(VIDEO, "AVI class not registered"); Stop(); diff --git a/Source/Core/VideoCommon/Src/AVIDump.h b/Source/Core/VideoCommon/Src/AVIDump.h index dced69887e..f5697613ca 100644 --- a/Source/Core/VideoCommon/Src/AVIDump.h +++ b/Source/Core/VideoCommon/Src/AVIDump.h @@ -29,7 +29,7 @@ class AVIDump static bool Start(int w, int h); #endif static void AddFrame(const u8* data, int width, int height); - + static void Stop(); }; diff --git a/Source/Core/VideoCommon/Src/BPFunctions.cpp b/Source/Core/VideoCommon/Src/BPFunctions.cpp index 9f4f4f3060..43623a94a8 100644 --- a/Source/Core/VideoCommon/Src/BPFunctions.cpp +++ b/Source/Core/VideoCommon/Src/BPFunctions.cpp @@ -49,8 +49,6 @@ void SetScissor() TargetRectangle trc = g_renderer->ConvertEFBRectangle(rc); g_renderer->SetScissorRect(trc); - - UpdateViewportWithCorrection(); } void SetLineWidth() diff --git a/Source/Core/VideoCommon/Src/BPMemory.cpp b/Source/Core/VideoCommon/Src/BPMemory.cpp index 7272ed0993..7bc976a943 100644 --- a/Source/Core/VideoCommon/Src/BPMemory.cpp +++ b/Source/Core/VideoCommon/Src/BPMemory.cpp @@ -19,15 +19,18 @@ void LoadBPReg(u32 value0) int opcode = value0 >> 24; int oldval = ((u32*)&bpmem)[opcode]; int newval = (oldval & ~bpmem.bpMask) | (value0 & bpmem.bpMask); - int changes = (oldval ^ newval) & 0xFFFFFF; - BPCmd bp = {opcode, changes, newval}; - - //reset the mask register if (opcode != 0xFE) + { + //reset the mask register bpmem.bpMask = 0xFFFFFF; - BPWritten(bp); + int changes = (oldval ^ newval) & 0xFFFFFF; + BPCmd bp = {opcode, changes, newval}; + BPWritten(bp); + } + else + bpmem.bpMask = newval; } void GetBPRegInfo(const u8* data, char* name, size_t name_size, char* desc, size_t desc_size) diff --git a/Source/Core/VideoCommon/Src/BPMemory.h b/Source/Core/VideoCommon/Src/BPMemory.h index 83dbefed50..94455b04bf 100644 --- a/Source/Core/VideoCommon/Src/BPMemory.h +++ b/Source/Core/VideoCommon/Src/BPMemory.h @@ -21,7 +21,7 @@ #define BPMEM_LINEPTWIDTH 0x22 #define BPMEM_PERF0_TRI 0x23 #define BPMEM_PERF0_QUAD 0x24 -#define BPMEM_RAS1_SS0 0x25 +#define BPMEM_RAS1_SS0 0x25 #define BPMEM_RAS1_SS1 0x26 #define BPMEM_IREF 0x27 #define BPMEM_TREF 0x28 // 0x28 + 8 @@ -47,7 +47,7 @@ #define BPMEM_TRIGGER_EFB_COPY 0x52 #define BPMEM_COPYFILTER0 0x53 #define BPMEM_COPYFILTER1 0x54 -#define BPMEM_CLEARBBOX1 0x55 +#define BPMEM_CLEARBBOX1 0x55 #define BPMEM_CLEARBBOX2 0x56 #define BPMEM_CLEAR_PIXEL_PERF 0x57 #define BPMEM_REVBITS 0x58 @@ -181,7 +181,7 @@ enum Compare enum AlphaOp { - ALPHAOP_AND = 0, + ALPHAOP_AND = 0, ALPHAOP_OR, ALPHAOP_XOR, ALPHAOP_XNOR, @@ -289,7 +289,7 @@ struct TevStageCombiner }; union AlphaCombiner { - struct + struct { u32 rswap : 2; u32 tswap : 2; @@ -367,7 +367,7 @@ struct TevStageCombiner }; struct { - u32 hex : 21; + u32 hex : 21; u32 unused : 11; }; @@ -442,7 +442,7 @@ union RAS1_IREF union TexMode0 { - struct + struct { u32 wrap_s : 2; u32 wrap_t : 2; @@ -458,7 +458,7 @@ union TexMode0 }; union TexMode1 { - struct + struct { u32 min_lod : 8; u32 max_lod : 8; @@ -467,7 +467,7 @@ union TexMode1 }; union TexImage0 { - struct + struct { u32 width : 10; //actually w-1 u32 height : 10; //actually h-1 @@ -477,7 +477,7 @@ union TexImage0 }; union TexImage1 { - struct + struct { u32 tmem_even : 15; // tmem line index for even LODs u32 cache_width : 3; @@ -489,10 +489,10 @@ union TexImage1 union TexImage2 { - struct + struct { u32 tmem_odd : 15; // tmem line index for odd LODs - u32 cache_width : 3; + u32 cache_width : 3; u32 cache_height : 3; }; u32 hex; @@ -500,7 +500,7 @@ union TexImage2 union TexImage3 { - struct + struct { u32 image_base: 24; //address in memory >> 5 (was 20 for GC) }; @@ -508,7 +508,7 @@ union TexImage3 }; union TexTLUT { - struct + struct { u32 tmem_offset : 10; u32 tlut_format : 2; @@ -518,7 +518,7 @@ union TexTLUT union ZTex1 { - struct + struct { u32 bias : 24; }; @@ -527,7 +527,7 @@ union ZTex1 union ZTex2 { - struct + struct { u32 type : 2; // TEV_Z_TYPE_X u32 op : 2; // GXZTexOp @@ -563,7 +563,7 @@ struct FourTexUnits union GenMode { - struct + struct { u32 numtexgens : 4; // 0xF u32 numcolchans : 5; // 0x1E0 @@ -578,7 +578,7 @@ union GenMode union LPSize { - struct + struct { u32 linesize : 8; // in 1/6th pixels u32 pointsize : 8; // in 1/6th pixels @@ -593,7 +593,7 @@ union LPSize union X12Y12 { - struct + struct { u32 y : 12; u32 x : 12; @@ -602,7 +602,7 @@ union X12Y12 }; union X10Y10 { - struct + struct { u32 x : 10; u32 y : 10; @@ -626,7 +626,7 @@ union X10Y10 union BlendMode { - struct + struct { u32 blendenable : 1; u32 logicopenable : 1; @@ -644,7 +644,7 @@ union BlendMode union FogParam0 { - struct + struct { u32 mantissa : 11; u32 exponent : 8; @@ -674,7 +674,7 @@ union FogParam3 // amount to subtract from eyespacez after range adjustment float GetC() - { + { union { u32 i; float f; } dummy; dummy.i = ((u32)c_sign << 31) | ((u32)c_exp << 23) | ((u32)c_mant << 12); // scale mantissa from 11 to 23 bits return dummy.f; @@ -814,7 +814,7 @@ union PE_CONTROL union TCInfo { - struct + struct { u32 scale_minus_1 : 16; u32 range_bias : 1; @@ -924,7 +924,7 @@ union AlphaTest union UPE_Copy { u32 Hex; - struct + struct { u32 clamp0 : 1; // if set clamp top u32 clamp1 : 1; // if set clamp bottom @@ -939,7 +939,7 @@ union UPE_Copy u32 intensity_fmt : 1; // if set, is an intensity format (I4,I8,IA4,IA8) u32 auto_conv : 1; // if 0 automatic color conversion by texture format and pixel type }; - u32 tp_realFormat() { + u32 tp_realFormat() { return target_pixel_format / 2 + (target_pixel_format & 1) * 8; } }; @@ -983,7 +983,7 @@ struct BPMemory // indirect matrices (set by GXSetIndTexMtx, selected by TevStageIndirect::mid) // abc form a 2x3 offset matrix, there's 3 such matrices // the 3 offset matrices can either be indirect type, S-type, or T-type - // 6bit scale factor s is distributed across IND_MTXA/B/C. + // 6bit scale factor s is distributed across IND_MTXA/B/C. // before using matrices scale by 2^-(s-17) IND_MTX indmtx[3];//06-0e GXSetIndTexMtx, 2x3 matrices IND_IMASK imask;//0f diff --git a/Source/Core/VideoCommon/Src/BPStructs.cpp b/Source/Core/VideoCommon/Src/BPStructs.cpp index ab5789a078..ed3fcce5dc 100644 --- a/Source/Core/VideoCommon/Src/BPStructs.cpp +++ b/Source/Core/VideoCommon/Src/BPStructs.cpp @@ -27,7 +27,7 @@ static int numWrites; extern volatile bool g_bSkipCurrentFrame; -static const float s_gammaLUT[] = +static const float s_gammaLUT[] = { 1.0f, 1.7f, @@ -67,7 +67,7 @@ void BPWritten(const BPCmd& bp) just stuff geometry in them and don't put state changes there ---------------------------------------------------------------------------------------------------------------- */ - + // check for invalid state, else unneeded configuration are built g_video_backend->CheckInvalidState(); @@ -104,7 +104,7 @@ void BPWritten(const BPCmd& bp) { numWrites = 0; } - else if (++numWrites >= 100) // seem that if 100 consecutive BP writes are called to either of these addresses in ZTP, + else if (++numWrites >= 100) // seem that if 100 consecutive BP writes are called to either of these addresses in ZTP, { // then it is safe to assume the map texture address is currently loaded into the BP memory mapTexAddress = bpmem.tex[0].texImage3[0].hex << 5; mapTexFound = true; @@ -119,7 +119,7 @@ void BPWritten(const BPCmd& bp) FlushPipeline(); } } // END ZTP SPEEDUP HACK - else + else { if (((s32*)&bpmem)[bp.address] == bp.newvalue) { @@ -143,7 +143,7 @@ void BPWritten(const BPCmd& bp) } ((u32*)&bpmem)[bp.address] = bp.newvalue; - + switch (bp.address) { case BPMEM_GENMODE: // Set the Generation Mode @@ -185,6 +185,7 @@ void BPWritten(const BPCmd& bp) case BPMEM_SCISSORBR: // Scissor Rectable Bottom, Right case BPMEM_SCISSOROFFSET: // Scissor Offset SetScissor(); + VertexShaderManager::SetViewportChanged(); break; case BPMEM_LINEPTWIDTH: // Line Width SetLineWidth(); @@ -198,7 +199,7 @@ void BPWritten(const BPCmd& bp) { if (bp.changes & 0xFFFF) { - PRIM_LOG("blendmode: en=%d, open=%d, colupd=%d, alphaupd=%d, dst=%d, src=%d, sub=%d, mode=%d", + PRIM_LOG("blendmode: en=%d, open=%d, colupd=%d, alphaupd=%d, dst=%d, src=%d, sub=%d, mode=%d", bpmem.blendmode.blendenable, bpmem.blendmode.logicopenable, bpmem.blendmode.colorupdate, bpmem.blendmode.alphaupdate, bpmem.blendmode.dstfactor, bpmem.blendmode.srcfactor, bpmem.blendmode.subtract, bpmem.blendmode.logicmode); @@ -264,7 +265,7 @@ void BPWritten(const BPCmd& bp) EFBRectangle rc; rc.left = (int)bpmem.copyTexSrcXY.x; rc.top = (int)bpmem.copyTexSrcXY.y; - + // Here Width+1 like Height, otherwise some textures are corrupted already since the native resolution. rc.right = (int)(bpmem.copyTexSrcXY.x + bpmem.copyTexSrcWH.x + 1); rc.bottom = (int)(bpmem.copyTexSrcXY.y + bpmem.copyTexSrcWH.y + 1); @@ -286,7 +287,7 @@ void BPWritten(const BPCmd& bp) // We should be able to get away with deactivating the current bbox tracking // here. Not sure if there's a better spot to put this. // the number of lines copied is determined by the y scale * source efb height - + PixelEngine::bbox_active = false; float yScale; @@ -302,8 +303,8 @@ void BPWritten(const BPCmd& bp) xfbLines = MAX_XFB_HEIGHT; } - RenderToXFB(bp, rc, yScale, xfbLines, - bpmem.copyTexDest << 5, + RenderToXFB(bp, rc, yScale, xfbLines, + bpmem.copyTexDest << 5, bpmem.copyMipMapStrideChannels << 4, (u32)xfbLines, s_gammaLUT[PE_copy.gamma]); @@ -376,7 +377,7 @@ void BPWritten(const BPCmd& bp) { if (bp.changes & 3) PixelShaderManager::SetZTextureTypeChanged(); - #if defined(_DEBUG) || defined(DEBUGFAST) + #if defined(_DEBUG) || defined(DEBUGFAST) const char* pzop[] = {"DISABLE", "ADD", "REPLACE", "?"}; const char* pztype[] = {"Z8", "Z16", "Z24", "?"}; PRIM_LOG("ztex op=%s, type=%s", pzop[bpmem.ztex2.op], pztype[bpmem.ztex2.type]); @@ -441,7 +442,7 @@ void BPWritten(const BPCmd& bp) { int right = bp.newvalue >> 10; int left = bp.newvalue & 0x3ff; - + // We should only set these if bbox is calculated properly. PixelEngine::bbox[0] = left; PixelEngine::bbox[1] = right; @@ -497,7 +498,7 @@ void BPWritten(const BPCmd& bp) case BPMEM_IND_IMASK: // Index Mask ? case BPMEM_REVBITS: // Always set to 0x0F when GX_InitRevBits() is called. break; - + case BPMEM_CLEAR_PIXEL_PERF: // GXClearPixMetric writes 0xAAA here, Sunshine alternates this register between values 0x000 and 0xAAA g_perf_query->ResetQuery(); diff --git a/Source/Core/VideoCommon/Src/CPMemory.h b/Source/Core/VideoCommon/Src/CPMemory.h index 28bc3d7d95..0647c2ae39 100644 --- a/Source/Core/VideoCommon/Src/CPMemory.h +++ b/Source/Core/VideoCommon/Src/CPMemory.h @@ -38,7 +38,7 @@ enum enum { FORMAT_16B_565 = 0, // NA - FORMAT_24B_888 = 1, + FORMAT_24B_888 = 1, FORMAT_32B_888x = 2, FORMAT_16B_4444 = 3, FORMAT_24B_6666 = 4, @@ -56,7 +56,7 @@ enum union TVtxDesc { u64 Hex; - struct + struct { // 0: not present // 1: present @@ -70,9 +70,9 @@ union TVtxDesc u32 Tex6MatIdx : 1; u32 Tex7MatIdx : 1; - // 00: not present - // 01: direct - // 10: 8 bit index + // 00: not present + // 01: direct + // 10: 8 bit index // 11: 16 bit index u32 Position : 2; u32 Normal : 2; @@ -98,21 +98,21 @@ union TVtxDesc union UVAT_group0 { u32 Hex; - struct + struct { // 0:8 u32 PosElements : 1; - u32 PosFormat : 3; - u32 PosFrac : 5; + u32 PosFormat : 3; + u32 PosFrac : 5; // 9:12 - u32 NormalElements : 1; - u32 NormalFormat : 3; + u32 NormalElements : 1; + u32 NormalFormat : 3; // 13:16 u32 Color0Elements : 1; - u32 Color0Comp : 3; + u32 Color0Comp : 3; // 17:20 u32 Color1Elements : 1; - u32 Color1Comp : 3; + u32 Color1Comp : 3; // 21:29 u32 Tex0CoordElements : 1; u32 Tex0CoordFormat : 3; @@ -126,7 +126,7 @@ union UVAT_group0 union UVAT_group1 { u32 Hex; - struct + struct { // 0:8 u32 Tex1CoordElements : 1; @@ -143,7 +143,7 @@ union UVAT_group1 // 27:30 u32 Tex4CoordElements : 1; u32 Tex4CoordFormat : 3; - // + // u32 : 1; }; }; @@ -151,7 +151,7 @@ union UVAT_group1 union UVAT_group2 { u32 Hex; - struct + struct { // 0:4 u32 Tex4Frac : 5; @@ -186,10 +186,10 @@ struct TexAttr struct TVtxAttr { u8 PosElements; - u8 PosFormat; - u8 PosFrac; + u8 PosFormat; + u8 PosFrac; u8 NormalElements; - u8 NormalFormat; + u8 NormalFormat; ColorAttr color[2]; TexAttr texCoord[8]; u8 ByteDequant; diff --git a/Source/Core/VideoCommon/Src/CommandProcessor.cpp b/Source/Core/VideoCommon/Src/CommandProcessor.cpp index d0645c31ea..4f64d4172c 100644 --- a/Source/Core/VideoCommon/Src/CommandProcessor.cpp +++ b/Source/Core/VideoCommon/Src/CommandProcessor.cpp @@ -108,7 +108,7 @@ void Init() m_bboxbottom = 480; m_tokenReg = 0; - + memset(&fifo,0,sizeof(fifo)); fifo.CPCmdIdle = 1; fifo.CPReadIdle = 1; @@ -613,7 +613,7 @@ void ProcessFifoEvents() void Shutdown() { - + } void SetCpStatusRegister() @@ -656,7 +656,7 @@ void SetCpControlRegister() ProcessorInterface::Fifo_CPUBase = fifo.CPBase; ProcessorInterface::Fifo_CPUEnd = fifo.CPEnd; } - + if(fifo.bFF_GPReadEnable && !m_CPCtrlReg.GPReadEnable) { fifo.bFF_GPReadEnable = m_CPCtrlReg.GPReadEnable; diff --git a/Source/Core/VideoCommon/Src/CommandProcessor.h b/Source/Core/VideoCommon/Src/CommandProcessor.h index 4cfa6cf8bf..6d480ef0bc 100644 --- a/Source/Core/VideoCommon/Src/CommandProcessor.h +++ b/Source/Core/VideoCommon/Src/CommandProcessor.h @@ -23,7 +23,7 @@ extern volatile bool interruptSet; extern volatile bool interruptWaiting; extern volatile bool interruptTokenWaiting; extern volatile bool interruptFinishWaiting; - + // internal hardware addresses enum { diff --git a/Source/Core/VideoCommon/Src/DataReader.h b/Source/Core/VideoCommon/Src/DataReader.h index 3488642385..95c992a011 100644 --- a/Source/Core/VideoCommon/Src/DataReader.h +++ b/Source/Core/VideoCommon/Src/DataReader.h @@ -43,7 +43,7 @@ __forceinline u16 DataPeek16(int _uOffset) return DataPeek(_uOffset); } -__forceinline u32 DataPeek32(int _uOffset) +__forceinline u32 DataPeek32(int _uOffset) { return DataPeek(_uOffset); } diff --git a/Source/Core/VideoCommon/Src/Debugger.cpp b/Source/Core/VideoCommon/Src/Debugger.cpp index 85a9ba61f6..321fed8291 100644 --- a/Source/Core/VideoCommon/Src/Debugger.cpp +++ b/Source/Core/VideoCommon/Src/Debugger.cpp @@ -108,7 +108,7 @@ void GFXDebuggerBase::DumpPixelShader(const char* path) } File::CreateEmptyFile(filename); - File::WriteStringToFile(true, output, filename); + File::WriteStringToFile(output, filename); } void GFXDebuggerBase::DumpVertexShader(const char* path) @@ -117,7 +117,7 @@ void GFXDebuggerBase::DumpVertexShader(const char* path) sprintf(filename, "%sdump_vs.txt", path); File::CreateEmptyFile(filename); -/// File::WriteStringToFile(true, GenerateVertexShaderCode(g_nativeVertexFmt->m_components, g_ActiveConfig.backend_info.APIType), filename); +/// File::WriteStringToFile(GenerateVertexShaderCode(g_nativeVertexFmt->m_components, g_ActiveConfig.backend_info.APIType), filename); } void GFXDebuggerBase::DumpPixelShaderConstants(const char* path) diff --git a/Source/Core/VideoCommon/Src/DriverDetails.cpp b/Source/Core/VideoCommon/Src/DriverDetails.cpp index 4072f475f4..21b2273a49 100644 --- a/Source/Core/VideoCommon/Src/DriverDetails.cpp +++ b/Source/Core/VideoCommon/Src/DriverDetails.cpp @@ -51,7 +51,7 @@ namespace DriverDetails m_vendor = vendor; m_driver = driver; m_version = version; - + if (driver == DRIVER_UNKNOWN) switch(vendor) { @@ -74,16 +74,16 @@ namespace DriverDetails default: break; } - - for(unsigned int a = 0; a < (sizeof(m_known_bugs) / sizeof(BugInfo)); ++a) + + for(auto& bug : m_known_bugs) { if( - ( m_known_bugs[a].m_vendor == m_vendor || m_known_bugs[a].m_vendor == VENDOR_ALL ) && - ( m_known_bugs[a].m_driver == m_driver || m_known_bugs[a].m_driver == DRIVER_ALL ) && - ( m_known_bugs[a].m_versionstart <= m_version || m_known_bugs[a].m_versionstart == -1 ) && - ( m_known_bugs[a].m_versionend > m_version || m_known_bugs[a].m_versionend == -1 ) + ( bug.m_vendor == m_vendor || bug.m_vendor == VENDOR_ALL ) && + ( bug.m_driver == m_driver || bug.m_driver == DRIVER_ALL ) && + ( bug.m_versionstart <= m_version || bug.m_versionstart == -1 ) && + ( bug.m_versionend > m_version || bug.m_versionend == -1 ) ) - m_bugs.insert(std::make_pair(m_known_bugs[a].m_bug, m_known_bugs[a])); + m_bugs.insert(std::make_pair(bug.m_bug, bug)); } } @@ -91,7 +91,7 @@ namespace DriverDetails { auto it = m_bugs.find(bug); if (it == m_bugs.end()) - return false; + return false; return it->second.m_hasbug; } } diff --git a/Source/Core/VideoCommon/Src/DriverDetails.h b/Source/Core/VideoCommon/Src/DriverDetails.h index cc1b0d783c..b9ace5b4f5 100644 --- a/Source/Core/VideoCommon/Src/DriverDetails.h +++ b/Source/Core/VideoCommon/Src/DriverDetails.h @@ -69,7 +69,7 @@ namespace DriverDetails // Affected devices: Qualcomm/Adreno // Started Version: ? (Noticed on v14) // Ended Version: -1 - // When compiling a shader, it is important that when it fails, + // When compiling a shader, it is important that when it fails, // you first get the length of the information log prior to grabbing it. // This allows you to allocate an array to store all of the log // Adreno devices /always/ return 0 when querying GL_INFO_LOG_LENGTH @@ -129,7 +129,7 @@ namespace DriverDetails // PowerVR 5 hardware limitations don't allow it to support OpenGL ES 3 // This is fixed in PowerVR6 BUG_ISPOWERVR, - // Bug: glBufferSubData/glMapBufferRange stalls + OOM + // Bug: glBufferSubData/glMapBufferRange stalls + OOM // Affected devices: Adreno a3xx/Mali-t6xx // Started Version: -1 // Ended Version: -1 @@ -138,10 +138,10 @@ namespace DriverDetails // Apparently Mali and Adreno share code in this regard since it was wrote by the same person. BUG_BROKENBUFFERSTREAM, }; - - // Initializes our internal vendor, device family, and driver version + + // Initializes our internal vendor, device family, and driver version void Init(Vendor vendor, Driver driver, const double version); - + // Once Vendor and driver version is set, this will return if it has the applicable bug passed to it. bool HasBug(Bug bug); } diff --git a/Source/Core/VideoCommon/Src/EmuWindow.cpp b/Source/Core/VideoCommon/Src/EmuWindow.cpp index fc4c049c80..9b8cde5178 100644 --- a/Source/Core/VideoCommon/Src/EmuWindow.cpp +++ b/Source/Core/VideoCommon/Src/EmuWindow.cpp @@ -145,8 +145,8 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) // Called when a screensaver wants to show up while this window is active case WM_SYSCOMMAND: - - switch (wParam) + + switch (wParam) { case SC_SCREENSAVE: case SC_MONITORPOWER: diff --git a/Source/Core/VideoCommon/Src/Fifo.cpp b/Source/Core/VideoCommon/Src/Fifo.cpp index b7e00e128a..92b9753623 100644 --- a/Source/Core/VideoCommon/Src/Fifo.cpp +++ b/Source/Core/VideoCommon/Src/Fifo.cpp @@ -28,7 +28,7 @@ static u8 *videoBuffer; static int size = 0; } // namespace -void Fifo_DoState(PointerWrap &p) +void Fifo_DoState(PointerWrap &p) { p.DoArray(videoBuffer, FIFO_SIZE); p.Do(size); @@ -148,7 +148,7 @@ void RunGpuLoop() Common::AtomicStore(CommandProcessor::VITicks, CommandProcessor::m_cpClockOrigin); - // check if we are able to run this buffer + // check if we are able to run this buffer while (GpuRunningState && !CommandProcessor::interruptWaiting && fifo.bFF_GPReadEnable && fifo.CPReadWriteDistance && !AtBreakpoint()) { fifo.isGpuReadingData = true; @@ -181,11 +181,11 @@ void RunGpuLoop() } CommandProcessor::SetCpStatus(); - + // This call is pretty important in DualCore mode and must be called in the FIFO Loop. // If we don't, s_swapRequested or s_efbAccessRequested won't be set to false // leading the CPU thread to wait in Video_BeginField or Video_AccessEFB thus slowing things down. - VideoFifo_CheckAsyncRequest(); + VideoFifo_CheckAsyncRequest(); CommandProcessor::isPossibleWaitingSetDrawDone = false; } diff --git a/Source/Core/VideoCommon/Src/GenericDLCache.cpp b/Source/Core/VideoCommon/Src/GenericDLCache.cpp index d6826bbbde..d5ed12c9c8 100644 --- a/Source/Core/VideoCommon/Src/GenericDLCache.cpp +++ b/Source/Core/VideoCommon/Src/GenericDLCache.cpp @@ -32,7 +32,7 @@ void Shutdown() { } -void Clear() +void Clear() { } diff --git a/Source/Core/VideoCommon/Src/GenericTextureDecoder.cpp b/Source/Core/VideoCommon/Src/GenericTextureDecoder.cpp index c5d14bfe9e..fa9c2b1520 100644 --- a/Source/Core/VideoCommon/Src/GenericTextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/GenericTextureDecoder.cpp @@ -50,7 +50,7 @@ extern const unsigned char sfont_raw[][9*10]; int TexDecoder_GetTexelSizeInNibbles(int format) { switch (format & 0x3f) { - case GX_TF_I4: return 1; + case GX_TF_I4: return 1; case GX_TF_I8: return 2; case GX_TF_IA4: return 2; case GX_TF_IA8: return 4; @@ -61,7 +61,7 @@ int TexDecoder_GetTexelSizeInNibbles(int format) case GX_TF_C8: return 2; case GX_TF_C14X2: return 4; case GX_TF_CMPR: return 1; - case GX_CTF_R4: return 1; + case GX_CTF_R4: return 1; case GX_CTF_RA4: return 2; case GX_CTF_RA8: return 4; case GX_CTF_YUVA8: return 8; @@ -76,7 +76,7 @@ int TexDecoder_GetTexelSizeInNibbles(int format) case GX_TF_Z16: return 4; case GX_TF_Z24X8: return 8; - case GX_CTF_Z4: return 1; + case GX_CTF_Z4: return 1; case GX_CTF_Z8M: return 2; case GX_CTF_Z8L: return 2; case GX_CTF_Z16L: return 4; @@ -93,7 +93,7 @@ int TexDecoder_GetBlockWidthInTexels(u32 format) { switch (format) { - case GX_TF_I4: return 8; + case GX_TF_I4: return 8; case GX_TF_I8: return 8; case GX_TF_IA4: return 8; case GX_TF_IA8: return 4; @@ -130,7 +130,7 @@ int TexDecoder_GetBlockHeightInTexels(u32 format) { switch (format) { - case GX_TF_I4: return 8; + case GX_TF_I4: return 8; case GX_TF_I8: return 4; case GX_TF_IA4: return 4; case GX_TF_IA8: return 4; @@ -307,7 +307,7 @@ inline void decodebytesC4RGB565_To_RGBA(u32* dst, const u8* src, int tlutaddr) //inline void decodebytesC8(u32 *dst, const u8 *src, int numbytes, int tlutaddr, int tlutfmt) inline void decodebytesC8_5A3_To_BGRA32(u32 *dst, const u8 *src, int tlutaddr) -{ +{ u16 *tlut = (u16*)(texMem + tlutaddr); for (int x = 0; x < 8; x++) { @@ -317,7 +317,7 @@ inline void decodebytesC8_5A3_To_BGRA32(u32 *dst, const u8 *src, int tlutaddr) } inline void decodebytesC8_5A3_To_RGBA32(u32 *dst, const u8 *src, int tlutaddr) -{ +{ u16 *tlut = (u16*)(texMem + tlutaddr); for (int x = 0; x < 8; x++) { @@ -471,7 +471,7 @@ inline void decodebytesARGB8_4(u32 *dst, const u16 *src, const u16 *src2) // some unpack instruction x2: // ABABABABABABABAB 1212121212121212 -> // AB12AB12AB12AB12 AB12AB12AB12AB12 - // 2x pshufb-> + // 2x pshufb-> // 21BA21BA21BA21BA 21BA21BA21BA21BA // and we are done. } @@ -521,7 +521,7 @@ void decodeDXTBlock(u32 *dst, const DXTBlock *src, int pitch) int green3 = ((green2 - green1) >> 1) - ((green2 - green1) >> 3); int red3 = ((red2 - red1) >> 1) - ((red2 - red1) >> 3); colors[2] = makecol(red1 + red3, green1 + green3, blue1 + blue3, 255); - colors[3] = makecol(red2 - red3, green2 - green3, blue2 - blue3, 255); + colors[3] = makecol(red2 - red3, green2 - green3, blue2 - blue3, 255); } else { @@ -532,7 +532,7 @@ void decodeDXTBlock(u32 *dst, const DXTBlock *src, int pitch) } for (int y = 0; y < 4; y++) - { + { int val = src->lines[y]; for (int x = 0; x < 4; x++) { @@ -564,7 +564,7 @@ void decodeDXTBlockRGBA(u32 *dst, const DXTBlock *src, int pitch) int green3 = ((green2 - green1) >> 1) - ((green2 - green1) >> 3); int red3 = ((red2 - red1) >> 1) - ((red2 - red1) >> 3); colors[2] = makeRGBA(red1 + red3, green1 + green3, blue1 + blue3, 255); - colors[3] = makeRGBA(red2 - red3, green2 - green3, blue2 - blue3, 255); + colors[3] = makeRGBA(red2 - red3, green2 - green3, blue2 - blue3, 255); } else { @@ -575,7 +575,7 @@ void decodeDXTBlockRGBA(u32 *dst, const DXTBlock *src, int pitch) } for (int y = 0; y < 4; y++) - { + { int val = src->lines[y]; for (int x = 0; x < 4; x++) { @@ -629,7 +629,7 @@ PC_TexFormat GetPC_TexFormat(int texformat, int tlutfmt) return PC_TEX_FMT_IA4_AS_IA8; case GX_TF_IA8: return PC_TEX_FMT_IA8; - case GX_TF_C14X2: + case GX_TF_C14X2: return GetPCFormatFromTLUTFormat(tlutfmt); case GX_TF_RGB565: return PC_TEX_FMT_RGB565; @@ -739,7 +739,7 @@ PC_TexFormat TexDecoder_Decode_real(u8 *dst, const u8 *src, int width, int heigh } } return PC_TEX_FMT_IA8; - case GX_TF_C14X2: + case GX_TF_C14X2: if (tlutfmt == 2) { // Special decoding is required for TLUT format 5A3 @@ -817,14 +817,14 @@ PC_TexFormat TexDecoder_Decode_real(u8 *dst, const u8 *src, int width, int heigh { for (int x = 0, yStep = (y / 8) * Wsteps8; x < width; x += 8, yStep++) { - const u8* src2 = src + 4 * sizeof(DXTBlock) * yStep; + const u8* src2 = src + 4 * sizeof(DXTBlock) * yStep; decodeDXTBlock((u32*)dst + y * width + x, (DXTBlock*)src2, width); src2 += sizeof(DXTBlock); decodeDXTBlock((u32*)dst + y * width + x + 4, (DXTBlock*)src2, width); src2 += sizeof(DXTBlock); decodeDXTBlock((u32*)dst + (y + 4) * width + x, (DXTBlock*)src2, width); src2 += sizeof(DXTBlock); - decodeDXTBlock((u32*)dst + (y + 4) * width + x + 4, (DXTBlock*)src2, width); + decodeDXTBlock((u32*)dst + (y + 4) * width + x + 4, (DXTBlock*)src2, width); } } #endif @@ -937,7 +937,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he for (int y = 0; y < height; y += 4) for (int x = 0, yStep = (y / 4) * Wsteps8; x < width; x += 8, yStep++) for (int iy = 0, xStep = 4 * yStep; iy < 4; iy++, xStep++) - decodebytesC8RGB565_To_RGBA(dst + (y + iy) * width + x, src + 8 * xStep, tlutaddr); + decodebytesC8RGB565_To_RGBA(dst + (y + iy) * width + x, src + 8 * xStep, tlutaddr); } break; @@ -1088,7 +1088,7 @@ PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, in { int xcnt = 0; int nchar = sfont_map[(int)*fmt]; - + const unsigned char *ptr = sfont_raw[nchar]; // each char is up to 9x10 for (int x = 0; x < 9;x++) @@ -1147,7 +1147,7 @@ PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, in void TexDecoder_DecodeTexel(u8 *dst, const u8 *src, int s, int t, int imageWidth, int texformat, int tlutaddr, int tlutfmt) { /* General formula for computing texture offset - // + // u16 sBlk = s / blockWidth; u16 tBlk = t / blockHeight; u16 widthBlks = (width / blockWidth) + 1; @@ -1289,7 +1289,7 @@ void TexDecoder_DecodeTexel(u8 *dst, const u8 *src, int s, int t, int imageWidth *((u32*)dst) = decodeIA8Swapped(*valAddr); } break; - case GX_TF_C14X2: + case GX_TF_C14X2: { u16 sBlk = s >> 2; u16 tBlk = t >> 2; @@ -1515,696 +1515,696 @@ const unsigned char sfont_map[] = { const unsigned char sfont_raw[][9*10] = { { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, }, }; diff --git a/Source/Core/VideoCommon/Src/HiresTextures.cpp b/Source/Core/VideoCommon/Src/HiresTextures.cpp index 80bc41f089..c88e4ae5d5 100644 --- a/Source/Core/VideoCommon/Src/HiresTextures.cpp +++ b/Source/Core/VideoCommon/Src/HiresTextures.cpp @@ -27,27 +27,27 @@ void Init(const char *gameCode) char szDir[MAX_PATH]; sprintf(szDir, "%s%s", File::GetUserPath(D_HIRESTEXTURES_IDX).c_str(), gameCode); Directories.push_back(std::string(szDir)); - + for (u32 i = 0; i < Directories.size(); i++) { File::FSTEntry FST_Temp; File::ScanDirectoryTree(Directories[i], FST_Temp); - for (u32 j = 0; j < FST_Temp.children.size(); j++) + for (auto& entry : FST_Temp.children) { - if (FST_Temp.children.at(j).isDirectory) + if (entry.isDirectory) { bool duplicate = false; - for (u32 k = 0; k < Directories.size(); k++) + for (auto& Directory : Directories) { - if (strcmp(Directories[k].c_str(), FST_Temp.children.at(j).physicalName.c_str()) == 0) + if (strcmp(Directory.c_str(), entry.physicalName.c_str()) == 0) { duplicate = true; break; } } if (!duplicate) - Directories.push_back(FST_Temp.children.at(j).physicalName.c_str()); + Directories.push_back(entry.physicalName.c_str()); } } } @@ -66,13 +66,13 @@ void Init(const char *gameCode) if (rFilenames.size() > 0) { - for (u32 i = 0; i < rFilenames.size(); i++) + for (auto& rFilename : rFilenames) { std::string FileName; - SplitPath(rFilenames[i], NULL, &FileName, NULL); + SplitPath(rFilename, NULL, &FileName, NULL); if (FileName.substr(0, strlen(code)).compare(code) == 0 && textureMap.find(FileName) == textureMap.end()) - textureMap.insert(std::map::value_type(FileName, rFilenames[i])); + textureMap.insert(std::map::value_type(FileName, rFilename)); } } } diff --git a/Source/Core/VideoCommon/Src/ImageWrite.cpp b/Source/Core/VideoCommon/Src/ImageWrite.cpp index e8f3f68123..f53bd1c18f 100644 --- a/Source/Core/VideoCommon/Src/ImageWrite.cpp +++ b/Source/Core/VideoCommon/Src/ImageWrite.cpp @@ -26,7 +26,7 @@ struct TGA_HEADER s16 height; // image height in pixels u8 bits; // image bits per pixel 8,16,24,32 u8 descriptor; // image descriptor bits (vh flip bits) - + // pixel data follows header }; diff --git a/Source/Core/VideoCommon/Src/IndexGenerator.cpp b/Source/Core/VideoCommon/Src/IndexGenerator.cpp index 25597862e0..4b49a4db5e 100644 --- a/Source/Core/VideoCommon/Src/IndexGenerator.cpp +++ b/Source/Core/VideoCommon/Src/IndexGenerator.cpp @@ -74,7 +74,7 @@ template __forceinline void IndexGenerator::WriteTriangle(u32 index1, *Tptr++ = index3; if(pr) *Tptr++ = s_primitive_restart; - + ++numT; } @@ -96,7 +96,7 @@ template void IndexGenerator::AddStrip(u32 const numVerts) } *Tptr++ = s_primitive_restart; numT += numVerts - 2; - + } else { @@ -115,27 +115,27 @@ template void IndexGenerator::AddStrip(u32 const numVerts) /** * FAN simulator: - * + * * 2---3 * / \ / \ * 1---0---4 - * + * * would generate this triangles: * 012, 023, 034 - * + * * rotated (for better striping): * 120, 302, 034 - * + * * as odd ones have to winded, following strip is fine: * 12034 - * + * * so we use 6 indices for 3 triangles */ template void IndexGenerator::AddFan(u32 numVerts) { u32 i = 2; - + if(pr) { for(; i+3<=numVerts; i+=3) @@ -148,7 +148,7 @@ template void IndexGenerator::AddFan(u32 numVerts) *Tptr++ = s_primitive_restart; numT += 3; } - + for(; i+2<=numVerts; i+=2) { *Tptr++ = index + i - 1; @@ -159,7 +159,7 @@ template void IndexGenerator::AddFan(u32 numVerts) numT += 2; } } - + for (; i < numVerts; ++i) { WriteTriangle(index, index + i - 1, index + i); @@ -168,18 +168,18 @@ template void IndexGenerator::AddFan(u32 numVerts) /* * QUAD simulator - * + * * 0---1 4---5 * |\ | |\ | * | \ | | \ | * | \| | \| * 3---2 7---6 - * + * * 012,023, 456,467 ... * or 120,302, 564,746 * or as strip: 1203, 5647 - * - * Warning: + * + * Warning: * A simple triangle has to be rendered for three vertices. * ZWW do this for sun rays */ @@ -220,7 +220,7 @@ void IndexGenerator::AddLineList(u32 numVerts) *Lptr++ = index + i; ++numL; } - + } // shouldn't be used as strips as LineLists are much more common diff --git a/Source/Core/VideoCommon/Src/IndexGenerator.h b/Source/Core/VideoCommon/Src/IndexGenerator.h index 1f25119bc0..1f72e6e74f 100644 --- a/Source/Core/VideoCommon/Src/IndexGenerator.h +++ b/Source/Core/VideoCommon/Src/IndexGenerator.h @@ -29,7 +29,7 @@ public: static u32 GetTriangleindexLen() {return (u32)(Tptr - BASETptr);} static u32 GetLineindexLen() {return (u32)(Lptr - BASELptr);} static u32 GetPointindexLen() {return (u32)(Pptr - BASEPptr);} - + static u32 GetRemainingIndices(); /* enum IndexPrimitiveType diff --git a/Source/Core/VideoCommon/Src/MainBase.cpp b/Source/Core/VideoCommon/Src/MainBase.cpp index 9df7ba9325..320f2d6752 100644 --- a/Source/Core/VideoCommon/Src/MainBase.cpp +++ b/Source/Core/VideoCommon/Src/MainBase.cpp @@ -181,12 +181,12 @@ void VideoFifo_CheckPerfQueryRequest() if (s_perf_query_requested) { g_perf_query->FlushResults(); - + { std::lock_guard lk(s_perf_query_lock); s_perf_query_requested = false; } - + s_perf_query_cond.notify_one(); } } @@ -262,7 +262,7 @@ void VideoBackendHardware::CheckInvalidState() if (m_invalid) { m_invalid = false; - + BPReload(); TextureCache::Invalidate(); } diff --git a/Source/Core/VideoCommon/Src/NativeVertexFormat.h b/Source/Core/VideoCommon/Src/NativeVertexFormat.h index f97b493e67..f4f060e7bb 100644 --- a/Source/Core/VideoCommon/Src/NativeVertexFormat.h +++ b/Source/Core/VideoCommon/Src/NativeVertexFormat.h @@ -92,7 +92,7 @@ struct PortableVertexDeclaration // The implementation of this class is specific for GL/DX, so NativeVertexFormat.cpp // is in the respective backend, not here in VideoCommon. -// Note that this class can't just invent arbitrary vertex formats out of its input - +// Note that this class can't just invent arbitrary vertex formats out of its input - // all the data loading code must always be made compatible. class NativeVertexFormat : NonCopyable { diff --git a/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp b/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp index 818a2365fe..72b0584908 100644 --- a/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp +++ b/Source/Core/VideoCommon/Src/OpcodeDecoding.cpp @@ -130,7 +130,7 @@ u32 FifoCommandRunnable(u32 &command_size) if (buffer_size == 0) return 0; // can't peek - u8 cmd_byte = DataPeek8(0); + u8 cmd_byte = DataPeek8(0); switch (cmd_byte) { @@ -340,14 +340,14 @@ static void Decode() u32 address = DataReadU32(); u32 count = DataReadU32(); ExecuteDisplayList(address, count); - } + } break; case GX_CMD_UNKNOWN_METRICS: // zelda 4 swords calls it and checks the metrics registers after that DEBUG_LOG(VIDEO, "GX 0x44: %08x", cmd_byte); break; - case GX_CMD_INVL_VC: // Invalidate Vertex Cache + case GX_CMD_INVL_VC: // Invalidate Vertex Cache DEBUG_LOG(VIDEO, "Invalidate (vertex cache?)"); break; @@ -359,7 +359,7 @@ static void Decode() } break; - // draw primitives + // draw primitives default: if (cmd_byte & 0x80) { @@ -392,7 +392,7 @@ static void DecodeSemiNop() switch (cmd_byte) { case GX_CMD_UNKNOWN_METRICS: // zelda 4 swords calls it and checks the metrics registers after that - case GX_CMD_INVL_VC: // Invalidate Vertex Cache + case GX_CMD_INVL_VC: // Invalidate Vertex Cache case GX_NOP: break; @@ -432,7 +432,7 @@ static void DecodeSemiNop() break; case GX_CMD_CALL_DL: - // Hm, wonder if any games put tokens in display lists - in that case, + // Hm, wonder if any games put tokens in display lists - in that case, // we'll have to parse them too. DataSkip(8); break; @@ -447,7 +447,7 @@ static void DecodeSemiNop() } break; - // draw primitives + // draw primitives default: if (cmd_byte & 0x80) { diff --git a/Source/Core/VideoCommon/Src/OpenCL.cpp b/Source/Core/VideoCommon/Src/OpenCL.cpp index 6dac8725af..7781b04978 100644 --- a/Source/Core/VideoCommon/Src/OpenCL.cpp +++ b/Source/Core/VideoCommon/Src/OpenCL.cpp @@ -144,7 +144,7 @@ cl_program CompileProgram(const char *Kernel) buildlog = new char[buildlog_size + 1]; err = clGetProgramBuildInfo(program, OpenCL::device_id, CL_PROGRAM_BUILD_LOG, buildlog_size, buildlog, NULL); buildlog[buildlog_size] = 0; - + if(err != CL_SUCCESS) { HandleCLError(err, "Error: can't get build log"); @@ -192,7 +192,7 @@ void Destroy() { clReleaseContext(g_context); g_context = NULL; - } + } g_bInitialized = false; } diff --git a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp index 211244c457..daea0bfca1 100644 --- a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp @@ -140,7 +140,7 @@ void TexDecoder_OpenCL_Initialize() { std::string code; filename = File::GetSysDirectory() + OPENCL_DIR DIR_SEP "TextureDecoder.cl"; - if (!File::ReadFileToString(true, filename.c_str(), code)) + if (!File::ReadFileToString(filename.c_str(), code)) { ERROR_LOG(VIDEO, "Failed to load OpenCL code %s - file is missing?", filename.c_str()); return; diff --git a/Source/Core/VideoCommon/Src/PixelEngine.cpp b/Source/Core/VideoCommon/Src/PixelEngine.cpp index 5819f64a83..40a21a2132 100644 --- a/Source/Core/VideoCommon/Src/PixelEngine.cpp +++ b/Source/Core/VideoCommon/Src/PixelEngine.cpp @@ -26,7 +26,7 @@ namespace PixelEngine union UPEZConfReg { u16 Hex; - struct + struct { u16 ZCompEnable : 1; // Z Comparator Enable u16 Function : 3; @@ -38,7 +38,7 @@ union UPEZConfReg union UPEAlphaConfReg { u16 Hex; - struct + struct { u16 BMMath : 1; // GX_BM_BLEND || GX_BM_SUBSTRACT u16 BMLogic : 1; // GX_BM_LOGIC @@ -55,7 +55,7 @@ union UPEAlphaConfReg union UPEDstAlphaConfReg { u16 Hex; - struct + struct { u16 DstAlpha : 8; u16 Enable : 1; @@ -66,7 +66,7 @@ union UPEDstAlphaConfReg union UPEAlphaModeConfReg { u16 Hex; - struct + struct { u16 Threshold : 8; u16 CompareMode : 8; @@ -76,7 +76,7 @@ union UPEAlphaModeConfReg // fifo Control Register union UPECtrlReg { - struct + struct { u16 PETokenEnable : 1; u16 PEFinishEnable : 1; @@ -129,7 +129,7 @@ void DoState(PointerWrap &p) p.Do(g_bSignalFinishInterrupt); p.Do(interruptSetToken); p.Do(interruptSetFinish); - + p.Do(bbox); p.Do(bbox_active); } @@ -187,7 +187,7 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) case PE_ALPHAMODE: _uReturnValue = m_AlphaModeConf.Hex; INFO_LOG(PIXELENGINE, "(r16) ALPHAMODE"); - break; + break; case PE_ALPHAREAD: _uReturnValue = m_AlphaRead.Hex; WARN_LOG(PIXELENGINE, "(r16) ALPHAREAD"); @@ -303,7 +303,7 @@ void Read16(u16& _uReturnValue, const u32 _iAddress) _uReturnValue = 1; break; } - + } void Write16(const u16 _iValue, const u32 _iAddress) @@ -332,7 +332,7 @@ void Write16(const u16 _iValue, const u32 _iAddress) INFO_LOG(PIXELENGINE, "(w16) ALPHAREAD: %02x", _iValue); break; - case PE_CTRL_REGISTER: + case PE_CTRL_REGISTER: { UPECtrlReg tmpCtrl(_iValue); @@ -376,7 +376,7 @@ void UpdateInterrupts() { // check if there is a token-interrupt UpdateTokenInterrupt((g_bSignalTokenInterrupt & m_Control.PETokenEnable)); - + // check if there is a finish-interrupt UpdateFinishInterrupt((g_bSignalFinishInterrupt & m_Control.PEFinishEnable)); } diff --git a/Source/Core/VideoCommon/Src/PixelEngine.h b/Source/Core/VideoCommon/Src/PixelEngine.h index 65323590a1..c420dbe9f1 100644 --- a/Source/Core/VideoCommon/Src/PixelEngine.h +++ b/Source/Core/VideoCommon/Src/PixelEngine.h @@ -25,18 +25,18 @@ enum // NOTE: Order not verified // These indicate the number of quads that are being used as input/output for each particular stage - PE_PERF_ZCOMP_INPUT_ZCOMPLOC_L = 0x18, + PE_PERF_ZCOMP_INPUT_ZCOMPLOC_L = 0x18, PE_PERF_ZCOMP_INPUT_ZCOMPLOC_H = 0x1a, - PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_L = 0x1c, - PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_H = 0x1e, - PE_PERF_ZCOMP_INPUT_L = 0x20, + PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_L = 0x1c, + PE_PERF_ZCOMP_OUTPUT_ZCOMPLOC_H = 0x1e, + PE_PERF_ZCOMP_INPUT_L = 0x20, PE_PERF_ZCOMP_INPUT_H = 0x22, - PE_PERF_ZCOMP_OUTPUT_L = 0x24, - PE_PERF_ZCOMP_OUTPUT_H = 0x26, - PE_PERF_BLEND_INPUT_L = 0x28, - PE_PERF_BLEND_INPUT_H = 0x2a, - PE_PERF_EFB_COPY_CLOCKS_L = 0x2c, - PE_PERF_EFB_COPY_CLOCKS_H = 0x2e, + PE_PERF_ZCOMP_OUTPUT_L = 0x24, + PE_PERF_ZCOMP_OUTPUT_H = 0x26, + PE_PERF_BLEND_INPUT_L = 0x28, + PE_PERF_BLEND_INPUT_H = 0x2a, + PE_PERF_EFB_COPY_CLOCKS_L = 0x2c, + PE_PERF_EFB_COPY_CLOCKS_H = 0x2e, }; namespace PixelEngine diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp index 274e4f511d..f107da783e 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp @@ -316,8 +316,10 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T // compute window position if needed because binding semantic WPOS is not widely supported // Let's set up attributes - for (int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + { out.Write("VARYIN float3 uv%d_2;\n", i); + } out.Write("VARYIN float4 clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { @@ -392,9 +394,13 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T out.Write("float4 colors_1 = colors_12;\n"); // compute window position if needed because binding semantic WPOS is not widely supported // Let's set up attributes - if(numTexgen) - for (int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + if (numTexgen) + { + for (unsigned int i = 0; i < xfregs.numTexGen.numTexGens; ++i) + { out.Write("float3 uv%d = uv%d_2;\n", i, i); + } + } out.Write("float4 clipPos = clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) { @@ -529,7 +535,7 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T AlphaTest::TEST_RESULT Pretest = bpmem.alpha_test.TestResult(); uid_data.Pretest = Pretest; - // NOTE: Fragment may not be discarded if alpha test always fails and early depth test is enabled + // NOTE: Fragment may not be discarded if alpha test always fails and early depth test is enabled // (in this case we need to write a depth value if depth test passes regardless of the alpha testing result) if (Pretest == AlphaTest::UNDETERMINED || (Pretest == AlphaTest::FAIL && bpmem.UseLateDepthTest())) WriteAlphaTest(out, uid_data, ApiType, dstAlphaMode, per_pixel_depth); diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index 5f793b5a44..98722e48ce 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -29,7 +29,7 @@ void PixelShaderManager::Dirty() s_bFogRangeAdjustChanged = true; s_bViewPortChanged = true; nLightsChanged[0] = 0; nLightsChanged[1] = 0x80; - + SetColorChanged(0, 0); SetColorChanged(0, 1); SetColorChanged(0, 2); @@ -84,7 +84,7 @@ void PixelShaderManager::SetConstants(u32 components) // they are the coefficients from the center to the border of the screen // so to simplify I use the hi coefficient as K in the shader taking 256 as the scale constants.fog[2][0] = ScreenSpaceCenter; - constants.fog[2][1] = Renderer::EFBToScaledX((int)(2.0f * xfregs.viewport.wd)); + constants.fog[2][1] = (float)Renderer::EFBToScaledX((int)(2.0f * xfregs.viewport.wd)); constants.fog[2][2] = bpmem.fogRange.K[4].HI / 256.0f; } else @@ -135,7 +135,7 @@ void PixelShaderManager::SetConstants(u32 components) nLightsChanged[0] = nLightsChanged[1] = -1; } } - + if(s_bViewPortChanged) { constants.zbias[1][0] = xfregs.viewport.farZ / 16777216.0f; @@ -156,7 +156,7 @@ void PixelShaderManager::SetColorChanged(int type, int num) c[num][2] = bpmem.tevregs[num].high.a / 255.0f; c[num][1] = bpmem.tevregs[num].high.b / 255.0f; dirty = true; - + PRIM_LOG("pixel %scolor%d: %f %f %f %f\n", type?"k":"", num, c[num][0], c[num][1], c[num][2], c[num][3]); } @@ -179,7 +179,7 @@ void PixelShaderManager::SetTexDims(int texmapid, u32 width, u32 height, u32 wra // or better, use textureSize() in glsl if(constants.texdims[texmapid][0] != 1.0f/width || constants.texdims[texmapid][1] != 1.0f/height) dirty = true; - + constants.texdims[texmapid][0] = 1.0f/width; constants.texdims[texmapid][1] = 1.0f/height; } @@ -263,8 +263,8 @@ void PixelShaderManager::SetZTextureTypeChanged() void PixelShaderManager::SetTexCoordChanged(u8 texmapid) { TCoordInfo& tc = bpmem.texcoords[texmapid]; - constants.texdims[texmapid][2] = tc.s.scale_minus_1 + 1; - constants.texdims[texmapid][3] = tc.t.scale_minus_1 + 1; + constants.texdims[texmapid][2] = (float)(tc.s.scale_minus_1 + 1); + constants.texdims[texmapid][3] = (float)(tc.t.scale_minus_1 + 1); dirty = true; } @@ -283,7 +283,7 @@ void PixelShaderManager::SetFogParamChanged() constants.fog[1][0] = bpmem.fog.a.GetA(); constants.fog[1][1] = (float)bpmem.fog.b_magnitude / 0xFFFFFF; constants.fog[1][2] = bpmem.fog.c_proj_fsel.GetC(); - constants.fog[1][3] = 1 << bpmem.fog.b_shift; + constants.fog[1][3] = (float)(1 << bpmem.fog.b_shift); } else { @@ -336,7 +336,7 @@ void PixelShaderManager::DoState(PointerWrap &p) { p.Do(constants); p.Do(dirty); - + if (p.GetMode() == PointerWrap::MODE_READ) { Dirty(); diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.h b/Source/Core/VideoCommon/Src/PixelShaderManager.h index c68ae569a2..d0c3509baa 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.h +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.h @@ -42,7 +42,7 @@ public: static void SetFogRangeAdjustChanged(); static void InvalidateXFRange(int start, int end); static void SetMaterialColorChanged(int index, u32 color); - + static PixelShaderConstants constants; static bool dirty; }; diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index e06b00cdea..e509ccb980 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -30,7 +30,6 @@ #include "XFMemory.h" #include "FifoPlayer/FifoRecorder.h" #include "AVIDump.h" -#include "VertexShaderManager.h" #include #include @@ -67,7 +66,6 @@ unsigned int Renderer::efb_scale_numeratorX = 1; unsigned int Renderer::efb_scale_numeratorY = 1; unsigned int Renderer::efb_scale_denominatorX = 1; unsigned int Renderer::efb_scale_denominatorY = 1; -unsigned int Renderer::ssaa_multiplier = 1; Renderer::Renderer() @@ -90,7 +88,7 @@ Renderer::~Renderer() // invalidate previous efb format prev_efb_format = (unsigned int)-1; - efb_scale_numeratorX = efb_scale_numeratorY = efb_scale_denominatorX = efb_scale_denominatorY = ssaa_multiplier = 1; + efb_scale_numeratorX = efb_scale_numeratorY = efb_scale_denominatorX = efb_scale_denominatorY = 1; #if defined _WIN32 || defined HAVE_LIBAV if (g_ActiveConfig.bDumpFrames && bLastFrameDumped && bAVIDumping) @@ -130,10 +128,10 @@ int Renderer::EFBToScaledX(int x) switch (g_ActiveConfig.iEFBScale) { case SCALE_AUTO: // fractional - return (int)ssaa_multiplier * FramebufferManagerBase::ScaleToVirtualXfbWidth(x, s_backbuffer_width); + return FramebufferManagerBase::ScaleToVirtualXfbWidth(x, s_backbuffer_width); default: - return x * (int)ssaa_multiplier * (int)efb_scale_numeratorX / (int)efb_scale_denominatorX; + return x * (int)efb_scale_numeratorX / (int)efb_scale_denominatorX; }; } @@ -142,10 +140,10 @@ int Renderer::EFBToScaledY(int y) switch (g_ActiveConfig.iEFBScale) { case SCALE_AUTO: // fractional - return (int)ssaa_multiplier * FramebufferManagerBase::ScaleToVirtualXfbHeight(y, s_backbuffer_height); + return FramebufferManagerBase::ScaleToVirtualXfbHeight(y, s_backbuffer_height); default: - return y * (int)ssaa_multiplier * (int)efb_scale_numeratorY / (int)efb_scale_denominatorY; + return y * (int)efb_scale_numeratorY / (int)efb_scale_denominatorY; }; } @@ -164,7 +162,7 @@ void Renderer::CalculateTargetScale(int x, int y, int &scaledX, int &scaledY) } // return true if target size changed -bool Renderer::CalculateTargetSize(unsigned int framebuffer_width, unsigned int framebuffer_height, int multiplier) +bool Renderer::CalculateTargetSize(unsigned int framebuffer_width, unsigned int framebuffer_height) { int newEFBWidth, newEFBHeight; @@ -228,15 +226,10 @@ bool Renderer::CalculateTargetSize(unsigned int framebuffer_width, unsigned int break; } - newEFBWidth *= multiplier; - newEFBHeight *= multiplier; - ssaa_multiplier = multiplier; - if (newEFBWidth != s_target_width || newEFBHeight != s_target_height) { s_target_width = newEFBWidth; s_target_height = newEFBHeight; - VertexShaderManager::SetViewportChanged(); return true; } return false; @@ -525,8 +518,8 @@ void Renderer::RecordVideoMemory() FifoRecorder::GetInstance().SetVideoMemory(bpMem, cpMem, xfMem, xfRegs, sizeof(XFRegisters) / 4); } -void UpdateViewport(Matrix44& vpCorrection) +void UpdateViewport() { if (xfregs.viewport.wd != 0 && xfregs.viewport.ht != 0) - g_renderer->UpdateViewport(vpCorrection); + g_renderer->UpdateViewport(); } diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h index 4e093700a9..22d31cde23 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.h +++ b/Source/Core/VideoCommon/Src/RenderBase.h @@ -108,7 +108,7 @@ public: // Finish up the current frame, print some stats virtual void Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& rc,float Gamma = 1.0f) = 0; - virtual void UpdateViewport(Matrix44& vpCorrection) = 0; + virtual void UpdateViewport() = 0; virtual bool SaveScreenshot(const std::string &filename, const TargetRectangle &rc) = 0; @@ -118,7 +118,7 @@ public: protected: static void CalculateTargetScale(int x, int y, int &scaledX, int &scaledY); - static bool CalculateTargetSize(unsigned int framebuffer_width, unsigned int framebuffer_height, int multiplier = 1); + static bool CalculateTargetSize(unsigned int framebuffer_width, unsigned int framebuffer_height); static void CheckFifoRecording(); static void RecordVideoMemory(); @@ -159,11 +159,10 @@ private: static unsigned int efb_scale_numeratorY; static unsigned int efb_scale_denominatorX; static unsigned int efb_scale_denominatorY; - static unsigned int ssaa_multiplier; }; extern Renderer *g_renderer; -void UpdateViewport(Matrix44& vpCorrection); +void UpdateViewport(); #endif // _COMMON_RENDERBASE_H_ diff --git a/Source/Core/VideoCommon/Src/ShaderGenCommon.h b/Source/Core/VideoCommon/Src/ShaderGenCommon.h index 31ec8d3e71..b56e9f29ff 100644 --- a/Source/Core/VideoCommon/Src/ShaderGenCommon.h +++ b/Source/Core/VideoCommon/Src/ShaderGenCommon.h @@ -236,7 +236,7 @@ public: u32 value = ((u32*)&new_uid.GetUidData())[i]; if ((i % 4) == 0) { - unsigned int last_value = (i+3 < new_uid.GetUidDataSize()-1) ? i+3 : new_uid.GetUidDataSize(); + auto last_value = (i+3 < new_uid.GetUidDataSize()-1) ? i+3 : new_uid.GetUidDataSize(); file << std::setfill(' ') << std::dec; file << "Values " << std::setw(2) << i << " - " << last_value << ": "; } @@ -253,7 +253,7 @@ public: } } } - + private: std::map m_shaders; std::vector m_uids; diff --git a/Source/Core/VideoCommon/Src/Statistics.h b/Source/Core/VideoCommon/Src/Statistics.h index a7976651a5..3a79061b7a 100644 --- a/Source/Core/VideoCommon/Src/Statistics.h +++ b/Source/Core/VideoCommon/Src/Statistics.h @@ -21,7 +21,7 @@ struct Statistics int numRenderTargetsCreated; int numRenderTargetsAlive; - + int numDListsCalled; int numDListsCreated; int numDListsAlive; @@ -44,11 +44,11 @@ struct Statistics int numBPLoads; int numCPLoads; int numXFLoads; - + int numBPLoadsInDL; int numCPLoadsInDL; int numXFLoadsInDL; - + int numDLs; int numPrims; int numDLPrims; @@ -60,7 +60,7 @@ struct Statistics int numBufferSplits; int numDListsCalled; - + int bytesVertexStreamed; int bytesIndexStreamed; int bytesUniformStreamed; diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index 111f70cac1..05c2e88aae 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -112,7 +112,7 @@ void TextureCache::OnConfigChanged(VideoConfig& config) g_texture_cache->ClearRenderTargets(); } } - + backup_config.s_colorsamples = config.iSafeTextureCache_ColorSamples; backup_config.s_copy_efb_to_texture = config.bCopyEFBToTexture; backup_config.s_copy_efb_scaled = config.bCopyEFBScaled; @@ -131,7 +131,7 @@ void TextureCache::Cleanup() while (iter != tcend) { if ( frameCount > TEXTURE_KILL_THRESHOLD + iter->second->frameCount - + // EFB copies living on the host GPU are unrecoverable and thus shouldn't be deleted && ! iter->second->IsEfbCopy() ) { @@ -445,9 +445,12 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, expandedWidth = width; expandedHeight = height; - // If we thought we could reuse the texture before, make sure to delete it now! - delete entry; - entry = NULL; + // If we thought we could reuse the texture before, make sure to pool it now! + if(entry) + { + delete entry; + entry = NULL; + } } using_custom_texture = true; } @@ -499,7 +502,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, entry->SetGeneralParameters(address, texture_size, full_format, entry->num_mipmaps); entry->SetDimensions(nativeW, nativeH, width, height); entry->hash = tex_hash; - + if (entry->IsEfbCopy() && !g_ActiveConfig.bCopyEFBToTexture) entry->type = TCET_EC_DYNAMIC; else @@ -515,7 +518,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, if (use_native_mips) { src_data += texture_size; - + const u8* ptr_even = NULL; const u8* ptr_odd = NULL; if (from_tmem) @@ -530,13 +533,13 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, const u32 mip_height = CalculateLevelSize(height, level); const u32 expanded_mip_width = (mip_width + bsw) & (~bsw); const u32 expanded_mip_height = (mip_height + bsh) & (~bsh); - + const u8*& mip_src_data = from_tmem ? ((level % 2) ? ptr_odd : ptr_even) : src_data; TexDecoder_Decode(temp, mip_src_data, expanded_mip_width, expanded_mip_height, texformat, tlutaddr, tlutfmt, g_ActiveConfig.backend_info.bUseRGBATextures); mip_src_data += TexDecoder_GetTextureSizeInBytes(expanded_mip_width, expanded_mip_height, texformat); - + entry->Load(mip_width, mip_height, expanded_mip_width, level); if (g_ActiveConfig.bDumpTextures) @@ -566,19 +569,19 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat const EFBRectangle& srcRect, bool isIntensity, bool scaleByHalf) { // Emulation methods: - // + // // - EFB to RAM: // Encodes the requested EFB data at its native resolution to the emulated RAM using shaders. // Load() decodes the data from there again (using TextureDecoder) if the EFB copy is being used as a texture again. // Advantage: CPU can read data from the EFB copy and we don't lose any important updates to the texture // Disadvantage: Encoding+decoding steps often are redundant because only some games read or modify EFB copies before using them as textures. - // + // // - EFB to texture: // Copies the requested EFB data to a texture object in VRAM, performing any color conversion using shaders. // Advantage: Works for many games, since in most cases EFB copies aren't read or modified at all before being used as a texture again. // Since we don't do any further encoding or decoding here, this method is much faster. // It also allows enhancing the visual quality by doing scaled EFB copies. - // + // // - Hybrid EFB copies: // 1a) Whenever this function gets called, encode the requested EFB data to RAM (like EFB to RAM) // 1b) Set type to TCET_EC_DYNAMIC for all texture cache entries in the destination address range. @@ -667,10 +670,10 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat break; } } - else if (isIntensity) + else if (isIntensity) { fConstAdd[0] = fConstAdd[1] = fConstAdd[2] = 16.0f/255.0f; - switch (dstFormat) + switch (dstFormat) { case 0: // I4 case 1: // I8 @@ -682,7 +685,7 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat colmat[4] = 0.257f; colmat[5] = 0.504f; colmat[6] = 0.098f; colmat[8] = 0.257f; colmat[9] = 0.504f; colmat[10] = 0.098f; - if (dstFormat < 2 || dstFormat == 8) + if (dstFormat < 2 || dstFormat == 8) { colmat[12] = 0.257f; colmat[13] = 0.504f; colmat[14] = 0.098f; fConstAdd[3] = 16.0f/255.0f; @@ -710,7 +713,7 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat { cbufid = 11; } - + } break; @@ -723,7 +726,7 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat } else { - switch (dstFormat) + switch (dstFormat) { case 0: // R4 colmat[0] = colmat[4] = colmat[8] = colmat[12] = 1; diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index 9b6c8762ff..99e9f702c7 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -12,7 +12,6 @@ #include "TextureConversionShader.h" #include "TextureDecoder.h" -#include "PixelShaderManager.h" #include "PixelShaderGen.h" #include "BPMemory.h" #include "RenderBase.h" @@ -67,7 +66,7 @@ const char* WriteRegister(API_TYPE ApiType, const char *prefix, const u32 num) return result; } -// block dimensions : widthStride, heightStride +// block dimensions : widthStride, heightStride // texture dims : width, height, x offset, y offset void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) { @@ -76,9 +75,9 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) // Two were merged for GLSL WRITE(p, "uniform float4 " I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); - float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); - float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); - float samples = (float)GetEncodedSampleCount(format); + int blkW = TexDecoder_GetBlockWidthInTexels(format); + int blkH = TexDecoder_GetBlockHeightInTexels(format); + int samples = GetEncodedSampleCount(format); if (ApiType == API_OPENGL) { WRITE(p, "#define samp0 samp9\n"); @@ -102,19 +101,19 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) " float2 sampleUv;\n" " float2 uv1 = floor(uv0);\n"); - WRITE(p, " uv1.x = uv1.x * %f;\n", samples); + WRITE(p, " uv1.x = uv1.x * %d.0;\n", samples); - WRITE(p, " float xl = floor(uv1.x / %f);\n", blkW); - WRITE(p, " float xib = uv1.x - (xl * %f);\n", blkW); - WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); - WRITE(p, " float yb = yl * %f;\n", blkH); + WRITE(p, " float xl = floor(uv1.x / %d.0);\n", blkW); + WRITE(p, " float xib = uv1.x - (xl * %d.0);\n", blkW); + WRITE(p, " float yl = floor(uv1.y / %d.0);\n", blkH); + WRITE(p, " float yb = yl * %d.0;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); WRITE(p, " float xp = uv1.x + (yoff * " I_COLORS"[1].x);\n"); - WRITE(p, " float xel = floor(xp / %f);\n", blkW); - WRITE(p, " float xb = floor(xel / %f);\n", blkH); - WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); + WRITE(p, " float xel = floor(xp / %d.0);\n", blkW); + WRITE(p, " float xb = floor(xel / %d.0);\n", blkH); + WRITE(p, " float xoff = xel - (xb * %d.0);\n", blkH); - WRITE(p, " sampleUv.x = xib + (xb * %f);\n", blkW); + WRITE(p, " sampleUv.x = xib + (xb * %d.0);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); WRITE(p, " sampleUv = sampleUv * " I_COLORS"[0].xy;\n"); @@ -140,8 +139,8 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) // Two were merged for GLSL WRITE(p, "uniform float4 " I_COLORS"[2] %s;\n", WriteRegister(ApiType, "c", C_COLORS)); - float blkW = (float)TexDecoder_GetBlockWidthInTexels(format); - float blkH = (float)TexDecoder_GetBlockHeightInTexels(format); + int blkW = TexDecoder_GetBlockWidthInTexels(format); + int blkH = TexDecoder_GetBlockHeightInTexels(format); // 32 bit textures (RGBA8 and Z24) are store in 2 cache line increments if (ApiType == API_OPENGL) @@ -168,20 +167,20 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType) " float2 sampleUv;\n" " float2 uv1 = floor(uv0);\n"); - WRITE(p, " float yl = floor(uv1.y / %f);\n", blkH); - WRITE(p, " float yb = yl * %f;\n", blkH); + WRITE(p, " float yl = floor(uv1.y / %d.0);\n", blkH); + WRITE(p, " float yb = yl * %d.0;\n", blkH); WRITE(p, " float yoff = uv1.y - yb;\n"); WRITE(p, " float xp = uv1.x + (yoff * " I_COLORS"[1].x);\n"); WRITE(p, " float xel = floor(xp / 2.0);\n"); - WRITE(p, " float xb = floor(xel / %f);\n", blkH); - WRITE(p, " float xoff = xel - (xb * %f);\n", blkH); + WRITE(p, " float xb = floor(xel / %d.0);\n", blkH); + WRITE(p, " float xoff = xel - (xb * %d.0);\n", blkH); WRITE(p, " float x2 = uv1.x * 2.0;\n"); - WRITE(p, " float xl = floor(x2 / %f);\n", blkW); - WRITE(p, " float xib = x2 - (xl * %f);\n", blkW); + WRITE(p, " float xl = floor(x2 / %d.0);\n", blkW); + WRITE(p, " float xib = x2 - (xl * %d.0);\n", blkW); WRITE(p, " float halfxb = floor(xb / 2.0);\n"); - WRITE(p, " sampleUv.x = xib + (halfxb * %f);\n", blkW); + WRITE(p, " sampleUv.x = xib + (halfxb * %d.0);\n", blkW); WRITE(p, " sampleUv.y = yb + xoff;\n"); WRITE(p, " sampleUv = sampleUv * " I_COLORS"[0].xy;\n"); @@ -248,8 +247,7 @@ void WriteIncrementSampleX(char*& p,API_TYPE ApiType) void WriteToBitDepth(char*& p, u8 depth, const char* src, const char* dest) { - float result = 255 / pow(2.0, (8 - depth)); - WRITE(p, " %s = floor(%s * %ff);\n", dest, src, result); + WRITE(p, " %s = floor(%s * 255.0 / exp2(8.0 - %d.0));\n", dest, src, depth); } void WriteEncoderEnd(char* p, API_TYPE ApiType) @@ -335,12 +333,12 @@ void WriteI4Encoder(char* p, API_TYPE ApiType) void WriteIA8Encoder(char* p,API_TYPE ApiType) { WriteSwizzler(p, GX_TF_IA8, ApiType); - WRITE(p, " float4 texSample;\n"); + WRITE(p, " float4 texSample;\n"); WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " ocol0.b = texSample.a;\n"); WriteColorToIntensity(p, "texSample", "ocol0.g"); - WriteIncrementSampleX(p, ApiType); + WriteIncrementSampleX(p, ApiType); WriteSampleColor(p, "rgba", "texSample", ApiType); WRITE(p, " ocol0.r = texSample.a;\n"); diff --git a/Source/Core/VideoCommon/Src/TextureDecoder.h b/Source/Core/VideoCommon/Src/TextureDecoder.h index 968570a084..d474f1684b 100644 --- a/Source/Core/VideoCommon/Src/TextureDecoder.h +++ b/Source/Core/VideoCommon/Src/TextureDecoder.h @@ -5,7 +5,7 @@ #ifndef _TEXTUREDECODER_H #define _TEXTUREDECODER_H #include "Hash.h" -enum +enum { TMEM_SIZE = 1024*1024, TMEM_LINE_SIZE = 32, diff --git a/Source/Core/VideoCommon/Src/VertexLoader.cpp b/Source/Core/VideoCommon/Src/VertexLoader.cpp index 697db81338..d5cf003e76 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader.cpp +++ b/Source/Core/VideoCommon/Src/VertexLoader.cpp @@ -91,18 +91,18 @@ void LOADERDECL PosMtx_Write() DataWrite(0); } -void LOADERDECL UpdateBoundingBoxPrepare() +void LOADERDECL UpdateBoundingBoxPrepare() { if (!PixelEngine::bbox_active) return; - + // set our buffer as videodata buffer, so we will get a copy of the vertex positions // this is a big hack, but so we can use the same converting function then without bbox s_bbox_pCurBufferPointer_orig = VertexManager::s_pCurBufferPointer; VertexManager::s_pCurBufferPointer = (u8*)s_bbox_vertex_buffer; } -void LOADERDECL UpdateBoundingBox() +void LOADERDECL UpdateBoundingBox() { if (!PixelEngine::bbox_active) return; @@ -140,7 +140,7 @@ void LOADERDECL UpdateBoundingBox() o[1] = (1.0f - o[1]) * 242.0f; if (o[0] < PixelEngine::bbox[0]) PixelEngine::bbox[0] = (u16) std::max(0.0f, o[0]); - if (o[0] > PixelEngine::bbox[1]) PixelEngine::bbox[1] = (u16) o[0]; + if (o[0] > PixelEngine::bbox[1]) PixelEngine::bbox[1] = (u16) o[0]; if (o[1] < PixelEngine::bbox[2]) PixelEngine::bbox[2] = (u16) std::max(0.0f, o[1]); if (o[1] > PixelEngine::bbox[3]) PixelEngine::bbox[3] = (u16) o[1]; } @@ -172,7 +172,7 @@ void LOADERDECL TexMtx_Write_Float4() DataWrite(0.f); } -VertexLoader::VertexLoader(const TVtxDesc &vtx_desc, const VAT &vtx_attr) +VertexLoader::VertexLoader(const TVtxDesc &vtx_desc, const VAT &vtx_attr) { m_compiledCode = NULL; m_numLoadedVertices = 0; @@ -197,7 +197,7 @@ VertexLoader::VertexLoader(const TVtxDesc &vtx_desc, const VAT &vtx_attr) } -VertexLoader::~VertexLoader() +VertexLoader::~VertexLoader() { #ifdef USE_JIT FreeCodeSpace(); @@ -248,7 +248,7 @@ void VertexLoader::CompileVertexTranslator() m_VtxDesc.Tex0Coord, m_VtxDesc.Tex1Coord, m_VtxDesc.Tex2Coord, m_VtxDesc.Tex3Coord, m_VtxDesc.Tex4Coord, m_VtxDesc.Tex5Coord, m_VtxDesc.Tex6Coord, (const u32)((m_VtxDesc.Hex >> 31) & 3) }; - + // Reset pipeline m_numPipelineStages = 0; @@ -265,7 +265,7 @@ void VertexLoader::CompileVertexTranslator() } // m_VBVertexStride for texmtx and posmtx is computed later when writing. - + // Position Matrix Index if (m_VtxDesc.PosMatIdx) { @@ -303,7 +303,7 @@ void VertexLoader::CompileVertexTranslator() { m_VertexSize += VertexLoader_Normal::GetSize(m_VtxDesc.Normal, m_VtxAttr.NormalFormat, m_VtxAttr.NormalElements, m_VtxAttr.NormalIndex3); - + TPipelineFunction pFunc = VertexLoader_Normal::GetFunction(m_VtxDesc.Normal, m_VtxAttr.NormalFormat, m_VtxAttr.NormalElements, m_VtxAttr.NormalIndex3); @@ -347,7 +347,7 @@ void VertexLoader::CompileVertexTranslator() m_NativeFmt->m_components |= VB_HAS_COL0 << i; switch (col[i]) { - case NOT_PRESENT: + case NOT_PRESENT: m_NativeFmt->m_components &= ~(VB_HAS_COL0 << i); vtx_decl.color_offset[i] = -1; break; @@ -454,7 +454,7 @@ void VertexLoader::CompileVertexTranslator() if (tc[i] == NOT_PRESENT) { - // if there's more tex coords later, have to write a dummy call + // if there's more tex coords later, have to write a dummy call int j = i + 1; for (; j < 8; ++j) { @@ -551,8 +551,8 @@ int VertexLoader::SetupRunVertices(int vtx_attr_group, int primitive, int const if (g_nativeVertexFmt != NULL && g_nativeVertexFmt != m_NativeFmt) { // We really must flush here. It's possible that the native representations - // of the two vtx formats are the same, but we have no way to easily check that - // now. + // of the two vtx formats are the same, but we have no way to easily check that + // now. VertexManager::Flush(); // Also move the Set() here? } @@ -587,7 +587,7 @@ int VertexLoader::SetupRunVertices(int vtx_attr_group, int primitive, int const colElements[i] = m_VtxAttr.color[i].Elements; VertexManager::PrepareForAdditionalData(primitive, count, native_stride); - + return count; } @@ -627,10 +627,10 @@ void VertexLoader::RunCompiledVertices(int vtx_attr_group, int primitive, int co VertexManager::s_pCurBufferPointer += native_stride * new_count; DataSkip(new_count * m_VertexSize); - VertexManager::AddVertices(primitive, new_count); + VertexManager::AddVertices(primitive, new_count); } -void VertexLoader::SetVAT(u32 _group0, u32 _group1, u32 _group2) +void VertexLoader::SetVAT(u32 _group0, u32 _group1, u32 _group2) { VAT vat; vat.g0.Hex = _group0; @@ -674,7 +674,7 @@ void VertexLoader::SetVAT(u32 _group0, u32 _group1, u32 _group2) m_VtxAttr.texCoord[7].Elements = vat.g2.Tex7CoordElements; m_VtxAttr.texCoord[7].Format = vat.g2.Tex7CoordFormat; m_VtxAttr.texCoord[7].Frac = vat.g2.Tex7Frac; - + if(!m_VtxAttr.ByteDequant) { ERROR_LOG(VIDEO, "ByteDequant is set to zero"); } @@ -722,7 +722,7 @@ void VertexLoader::AppendToString(std::string *dest) const } } u32 tex_mode[8] = { - m_VtxDesc.Tex0Coord, m_VtxDesc.Tex1Coord, m_VtxDesc.Tex2Coord, m_VtxDesc.Tex3Coord, + m_VtxDesc.Tex0Coord, m_VtxDesc.Tex1Coord, m_VtxDesc.Tex2Coord, m_VtxDesc.Tex3Coord, m_VtxDesc.Tex4Coord, m_VtxDesc.Tex5Coord, m_VtxDesc.Tex6Coord, m_VtxDesc.Tex7Coord }; for (int i = 0; i < 8; i++) diff --git a/Source/Core/VideoCommon/Src/VertexLoader.h b/Source/Core/VideoCommon/Src/VertexLoader.h index 06c5508040..c9ef28175c 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader.h +++ b/Source/Core/VideoCommon/Src/VertexLoader.h @@ -24,7 +24,7 @@ class VertexLoaderUID u32 vid[5]; size_t hash; public: - VertexLoaderUID() + VertexLoaderUID() { } @@ -73,9 +73,9 @@ private: { size_t h = -1; - for (unsigned int i = 0; i < sizeof(vid) / sizeof(vid[0]); ++i) + for (auto word : vid) { - h = h * 137 + vid[i]; + h = h * 137 + word; } return h; @@ -94,7 +94,7 @@ public: ~VertexLoader(); int GetVertexSize() const {return m_VertexSize;} - + int SetupRunVertices(int vtx_attr_group, int primitive, int const count); void RunVertices(int vtx_attr_group, int primitive, int count); void RunCompiledVertices(int vtx_attr_group, int primitive, int count, u8* Data); diff --git a/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp b/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp index 856b5d9fa5..9ad3e013c6 100644 --- a/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp @@ -43,16 +43,16 @@ static VertexLoaderMap g_VertexLoaderMap; void Init() { MarkAllDirty(); - for (int i = 0; i < 8; i++) - g_VertexLoaders[i] = NULL; + for (auto& vertexLoader : g_VertexLoaders) + vertexLoader = NULL; RecomputeCachedArraybases(); } void Shutdown() { - for (VertexLoaderMap::iterator iter = g_VertexLoaderMap.begin(); iter != g_VertexLoaderMap.end(); ++iter) + for (auto& p : g_VertexLoaderMap) { - delete iter->second; + delete p.second; } g_VertexLoaderMap.clear(); } diff --git a/Source/Core/VideoCommon/Src/VertexLoader_Color.cpp b/Source/Core/VideoCommon/Src/VertexLoader_Color.cpp index 45af21138f..e32af6226c 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader_Color.cpp +++ b/Source/Core/VideoCommon/Src/VertexLoader_Color.cpp @@ -100,7 +100,7 @@ void LOADERDECL Color_ReadDirect_24b_6666() // F|RES: i am not 100 percent sure, but the colElements seems to be important for rendering only // at least it fixes mario party 4 // -// if (colElements[colIndex]) +// if (colElements[colIndex]) // else // col |= 0xFF< __forceinline void Normal_Index_Offset() { static_assert(!std::numeric_limits::is_signed, "Only unsigned I is sane!"); - + auto const index = DataRead(); auto const data = reinterpret_cast(cached_arraybases[ARRAY_NORMAL] + (index * arraystrides[ARRAY_NORMAL]) + sizeof(T) * 3 * Offset); diff --git a/Source/Core/VideoCommon/Src/VertexLoader_Normal.h b/Source/Core/VideoCommon/Src/VertexLoader_Normal.h index 40fd8cac06..4ad15c51b0 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader_Normal.h +++ b/Source/Core/VideoCommon/Src/VertexLoader_Normal.h @@ -65,7 +65,7 @@ private: gc_size = T::size; function = T::function; } - + int gc_size; TPipelineFunction function; }; diff --git a/Source/Core/VideoCommon/Src/VertexLoader_Position.cpp b/Source/Core/VideoCommon/Src/VertexLoader_Position.cpp index 2b383fc3f8..da844484ad 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader_Position.cpp +++ b/Source/Core/VideoCommon/Src/VertexLoader_Position.cpp @@ -27,7 +27,7 @@ MOVZX(32, R(EBX), MOffset(ESI, 1)); MOVZX(32, R(ECX), MOffset(ESI, 2)); MOVD(XMM0, R(EAX)); MOVD(XMM1, R(EBX)); -MOVD(XMM2, R(ECX)); +MOVD(XMM2, R(ECX)); CVTDQ2PS(XMM0, XMM0); CVTDQ2PS(XMM1, XMM1); CVTDQ2PS(XMM2, XMM2); diff --git a/Source/Core/VideoCommon/Src/VertexLoader_TextCoord.cpp b/Source/Core/VideoCommon/Src/VertexLoader_TextCoord.cpp index 2d956b242a..70c1f2de3f 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader_TextCoord.cpp +++ b/Source/Core/VideoCommon/Src/VertexLoader_TextCoord.cpp @@ -67,7 +67,7 @@ template void LOADERDECL TexCoord_ReadIndex() { static_assert(!std::numeric_limits::is_signed, "Only unsigned I is sane!"); - + auto const index = DataRead(); auto const data = reinterpret_cast(cached_arraybases[ARRAY_TEXCOORD0 + tcIndex] + (index * arraystrides[ARRAY_TEXCOORD0 + tcIndex])); diff --git a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp index 13fbd55641..b586ad1a99 100644 --- a/Source/Core/VideoCommon/Src/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/Src/VertexManagerBase.cpp @@ -50,13 +50,13 @@ u32 VertexManager::GetRemainingSize() } void VertexManager::PrepareForAdditionalData(int primitive, u32 count, u32 stride) -{ +{ u32 const needed_vertex_bytes = count * stride; - + if (count > IndexGenerator::GetRemainingIndices() || count > GetRemainingIndices(primitive) || needed_vertex_bytes > GetRemainingSize()) { Flush(); - + if(count > IndexGenerator::GetRemainingIndices()) ERROR_LOG(VIDEO, "Too little remaining index values. Use 32-bit or reset them on flush."); if (count > GetRemainingIndices(primitive)) @@ -75,7 +75,7 @@ bool VertexManager::IsFlushed() const u32 VertexManager::GetRemainingIndices(int primitive) { - + if(g_Config.backend_info.bSupportsPrimitiveRestart) { switch (primitive) @@ -125,7 +125,7 @@ u32 VertexManager::GetRemainingIndices(int primitive) default: return 0; } - } + } } void VertexManager::AddVertices(int primitive, u32 numVertices) @@ -158,12 +158,12 @@ void VertexManager::Flush() #if (0) void VertexManager::Flush() { -#if defined(_DEBUG) || defined(DEBUGFAST) +#if defined(_DEBUG) || defined(DEBUGFAST) PRIM_LOG("frame%d:\n texgen=%d, numchan=%d, dualtex=%d, ztex=%d, cole=%d, alpe=%d, ze=%d", g_ActiveConfig.iSaveTargetId, xfregs.numTexGens, xfregs.nNumChans, (int)xfregs.bEnableDualTexTransform, bpmem.ztex2.op, bpmem.blendmode.colorupdate, bpmem.blendmode.alphaupdate, bpmem.zmode.updateenable); - for (int i = 0; i < xfregs.nNumChans; ++i) + for (int i = 0; i < xfregs.nNumChans; ++i) { LitChannel* ch = &xfregs.colChans[i].color; PRIM_LOG("colchan%d: matsrc=%d, light=0x%x, ambsrc=%d, diffunc=%d, attfunc=%d", i, ch->matsource, ch->GetFullLightMask(), ch->ambsource, ch->diffusefunc, ch->attnfunc); @@ -171,7 +171,7 @@ void VertexManager::Flush() PRIM_LOG("alpchan%d: matsrc=%d, light=0x%x, ambsrc=%d, diffunc=%d, attfunc=%d", i, ch->matsource, ch->GetFullLightMask(), ch->ambsource, ch->diffusefunc, ch->attnfunc); } - for (int i = 0; i < xfregs.numTexGens; ++i) + for (int i = 0; i < xfregs.numTexGens; ++i) { TexMtxInfo tinfo = xfregs.texcoords[i].texmtxinfo; if (tinfo.texgentype != XF_TEXGEN_EMBOSS_MAP) tinfo.hex &= 0x7ff; @@ -206,10 +206,10 @@ void VertexManager::Flush() Renderer::SetSamplerState(i & 3, i >> 2); FourTexUnits &tex = bpmem.tex[i >> 2]; - TCacheEntry::TCacheEntryBase* tentry = TextureCache::Load(i, + TCacheEntry::TCacheEntryBase* tentry = TextureCache::Load(i, (tex.texImage3[i&3].image_base/* & 0x1FFFFF*/) << 5, tex.texImage0[i&3].width + 1, tex.texImage0[i&3].height + 1, - tex.texImage0[i&3].format, tex.texTlut[i&3].tmem_offset<<9, + tex.texImage0[i&3].format, tex.texTlut[i&3].tmem_offset<<9, tex.texTlut[i&3].tlut_format, (tex.texMode0[i&3].min_filter & 3) && (tex.texMode0[i&3].min_filter != 8), (tex.texMode1[i&3].max_lod >> 4)); @@ -257,7 +257,7 @@ void VertexManager::Flush() //IndexGenerator::Start(TIBuffer, LIBuffer, PIBuffer); #if defined(_DEBUG) || defined(DEBUGFAST) - if (g_ActiveConfig.iLog & CONF_SAVESHADERS) + if (g_ActiveConfig.iLog & CONF_SAVESHADERS) { // save the shaders char strfile[255]; @@ -271,7 +271,7 @@ void VertexManager::Flush() fvs << vs->strprog.c_str(); } - if (g_ActiveConfig.iLog & CONF_SAVETARGETS) + if (g_ActiveConfig.iLog & CONF_SAVETARGETS) { char str[128]; sprintf(str, "%starg%.3d.tga", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(), g_ActiveConfig.iSaveTargetId); @@ -297,12 +297,12 @@ void VertexManager::DoStateShared(PointerWrap& p) // It seems we half-assume to be flushed here // We update s_pCurBufferPointer yet don't worry about IndexGenerator's outdated pointers // and maybe other things are overlooked - + p.Do(LocalVBuffer); p.Do(TIBuffer); p.Do(LIBuffer); p.Do(PIBuffer); - + s_pBaseBufferPointer = &LocalVBuffer[0]; s_pEndBufferPointer = s_pBaseBufferPointer + LocalVBuffer.size(); p.DoPointer(s_pCurBufferPointer, s_pBaseBufferPointer); diff --git a/Source/Core/VideoCommon/Src/VertexManagerBase.h b/Source/Core/VideoCommon/Src/VertexManagerBase.h index fafde8de44..b5b13c8933 100644 --- a/Source/Core/VideoCommon/Src/VertexManagerBase.h +++ b/Source/Core/VideoCommon/Src/VertexManagerBase.h @@ -12,13 +12,13 @@ class VertexManager { private: static const u32 SMALLEST_POSSIBLE_VERTEX = sizeof(float)*3; // 3 pos - static const u32 LARGEST_POSSIBLE_VERTEX = sizeof(float)*45 + sizeof(u32)*2; // 3 pos, 3*3 normal, 2*u32 color, 8*4 tex, 1 posMat - + static const u32 LARGEST_POSSIBLE_VERTEX = sizeof(float)*45 + sizeof(u32)*2; // 3 pos, 3*3 normal, 2*u32 color, 8*4 tex, 1 posMat + static const u32 MAX_PRIMITIVES_PER_COMMAND = (u16)-1; - + public: static const u32 MAXVBUFFERSIZE = ROUND_UP_POW2 (MAX_PRIMITIVES_PER_COMMAND * LARGEST_POSSIBLE_VERTEX); - + // We may convert triangle-fans to triangle-lists, almost 3x as many indices. static const u32 MAXIBUFFERSIZE = ROUND_UP_POW2 (MAX_PRIMITIVES_PER_COMMAND * 3); @@ -43,7 +43,7 @@ public: static void DoState(PointerWrap& p); virtual void CreateDeviceObjects(){}; virtual void DestroyDeviceObjects(){}; - + protected: u16* GetTriangleIndexBuffer() { return &TIBuffer[0]; } u16* GetLineIndexBuffer() { return &LIBuffer[0]; } @@ -55,13 +55,13 @@ protected: private: bool IsFlushed() const; - + void ResetBuffer(); - + //virtual void Draw(u32 stride, bool alphapass) = 0; // temp virtual void vFlush() = 0; - + std::vector LocalVBuffer; std::vector TIBuffer; std::vector LIBuffer; diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 1b298c489a..78b3c57dda 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -130,13 +130,17 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ } // Let's set up attributes - for (int i = 0; i < 8; ++i) + for (size_t i = 0; i < 8; ++i) + { if (i < xfregs.numTexGen.numTexGens) + { out.Write("VARYOUT float3 uv%d_2;\n", i); + } + } out.Write("VARYOUT float4 clipPos_2;\n"); if (g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting) out.Write("VARYOUT float4 Normal_2;\n"); - + out.Write("VARYOUT float4 colors_02;\n"); out.Write("VARYOUT float4 colors_12;\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 1143867a25..378f2cd77d 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -39,7 +39,7 @@ #define I_TRANSFORMMATRICES "ctrmtx" #define I_NORMALMATRICES "cnmtx" #define I_POSTTRANSFORMMATRICES "cpostmtx" -#define I_DEPTHPARAMS "cDepth" // farZ, zRange, scaled viewport width, scaled viewport height +#define I_DEPTHPARAMS "cDepth" // farZ, zRange //TODO: get rid of them, they aren't used at all #define C_POSNORMALMATRIX 0 diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp index e603e6e6c4..5ec371a0ba 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp @@ -39,13 +39,6 @@ static float s_fViewRotation[2]; VertexShaderConstants VertexShaderManager::constants; bool VertexShaderManager::dirty; -void UpdateViewport(Matrix44& vpCorrection); - -void UpdateViewportWithCorrection() -{ - UpdateViewport(s_viewportCorrection); -} - struct ProjectionHack { float sign; @@ -130,6 +123,58 @@ void UpdateProjectionHack(int iPhackvalue[], std::string sPhackvalue[]) g_ProjHack3 = bProjHack3; } + +// Viewport correction: +// In D3D, the viewport rectangle must fit within the render target. +// Say you want a viewport at (ix, iy) with size (iw, ih), +// but your viewport must be clamped at (ax, ay) with size (aw, ah). +// Just multiply the projection matrix with the following to get the same +// effect: +// [ (iw/aw) 0 0 ((iw - 2*(ax-ix)) / aw - 1) ] +// [ 0 (ih/ah) 0 ((-ih + 2*(ay-iy)) / ah + 1) ] +// [ 0 0 1 0 ] +// [ 0 0 0 1 ] +static void ViewportCorrectionMatrix(Matrix44& result) +{ + int scissorXOff = bpmem.scissorOffset.x * 2; + int scissorYOff = bpmem.scissorOffset.y * 2; + + // TODO: ceil, floor or just cast to int? + // TODO: Directly use the floats instead of rounding them? + float intendedX = xfregs.viewport.xOrig - xfregs.viewport.wd - scissorXOff; + float intendedY = xfregs.viewport.yOrig + xfregs.viewport.ht - scissorYOff; + float intendedWd = 2.0f * xfregs.viewport.wd; + float intendedHt = -2.0f * xfregs.viewport.ht; + + if (intendedWd < 0.f) + { + intendedX += intendedWd; + intendedWd = -intendedWd; + } + if (intendedHt < 0.f) + { + intendedY += intendedHt; + intendedHt = -intendedHt; + } + + // fit to EFB size + float X = (intendedX >= 0.f) ? intendedX : 0.f; + float Y = (intendedY >= 0.f) ? intendedY : 0.f; + float Wd = (X + intendedWd <= EFB_WIDTH) ? intendedWd : (EFB_WIDTH - X); + float Ht = (Y + intendedHt <= EFB_HEIGHT) ? intendedHt : (EFB_HEIGHT - Y); + + Matrix44::LoadIdentity(result); + if (Wd == 0 || Ht == 0) + return; + + result.data[4*0+0] = intendedWd / Wd; + result.data[4*0+3] = (intendedWd - 2.f * (X - intendedX)) / Wd - 1.f; + result.data[4*1+1] = intendedHt / Ht; + result.data[4*1+3] = (-intendedHt + 2.f * (Y - intendedY)) / Ht + 1.f; +} + +void UpdateViewport(); + void VertexShaderManager::Init() { Dirty(); @@ -152,16 +197,16 @@ void VertexShaderManager::Shutdown() void VertexShaderManager::Dirty() { - nTransformMatricesChanged[0] = 0; + nTransformMatricesChanged[0] = 0; nTransformMatricesChanged[1] = 256; nNormalMatricesChanged[0] = 0; nNormalMatricesChanged[1] = 96; - nPostTransformMatricesChanged[0] = 0; + nPostTransformMatricesChanged[0] = 0; nPostTransformMatricesChanged[1] = 256; - nLightsChanged[0] = 0; + nLightsChanged[0] = 0; nLightsChanged[1] = 0x80; bPosNormalMatrixChanged = true; @@ -171,7 +216,7 @@ void VertexShaderManager::Dirty() bProjectionChanged = true; nMaterialsChanged = 15; - + dirty = true; } @@ -259,7 +304,7 @@ void VertexShaderManager::SetConstants() constants.materials[i][3] = ( data & 0xFF) / 255.0f; } } - + for (int i = 0; i < 2; ++i) { if (nMaterialsChanged & (1 << (i + 2))) @@ -293,7 +338,7 @@ void VertexShaderManager::SetConstants() if (bTexMatricesChanged[0]) { bTexMatricesChanged[0] = false; - const float *fptrs[] = + const float *fptrs[] = { (const float *)xfmem + MatrixIndexA.Tex0MtxIdx * 4, (const float *)xfmem + MatrixIndexA.Tex1MtxIdx * 4, (const float *)xfmem + MatrixIndexA.Tex2MtxIdx * 4, (const float *)xfmem + MatrixIndexA.Tex3MtxIdx * 4 @@ -326,18 +371,22 @@ void VertexShaderManager::SetConstants() bViewportChanged = false; constants.depthparams[0] = xfregs.viewport.farZ / 16777216.0f; constants.depthparams[1] = xfregs.viewport.zRange / 16777216.0f; - constants.depthparams[2] = -1.f / g_renderer->EFBToScaledX(ceilf(2.0f * xfregs.viewport.wd)); - constants.depthparams[3] = 1.f / g_renderer->EFBToScaledY(ceilf(-2.0f * xfregs.viewport.ht)); dirty = true; // This is so implementation-dependent that we can't have it here. - UpdateViewport(s_viewportCorrection); - bProjectionChanged = true; + UpdateViewport(); + + // Update projection if the viewport isn't 1:1 useable + if(!g_ActiveConfig.backend_info.bSupportsOversizedViewports) + { + ViewportCorrectionMatrix(s_viewportCorrection); + bProjectionChanged = true; + } } if (bProjectionChanged) { bProjectionChanged = false; - + float *rawProjection = xfregs.projection.rawProjection; switch(xfregs.projection.type) diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.h b/Source/Core/VideoCommon/Src/VertexShaderManager.h index 60e23902f1..93287ffe1e 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderManager.h +++ b/Source/Core/VideoCommon/Src/VertexShaderManager.h @@ -12,8 +12,6 @@ class PointerWrap; void UpdateProjectionHack(int iParams[], std::string sParams[]); -void UpdateViewportWithCorrection(); - // The non-API dependent parts. class VertexShaderManager { @@ -36,7 +34,7 @@ public: static void TranslateView(float x, float y, float z = 0.0f); static void RotateView(float x, float y); static void ResetView(); - + static VertexShaderConstants constants; static bool dirty; }; diff --git a/Source/Core/VideoCommon/Src/VideoBackendBase.cpp b/Source/Core/VideoCommon/Src/VideoBackendBase.cpp index 72947182fd..68ea7c9c35 100644 --- a/Source/Core/VideoCommon/Src/VideoBackendBase.cpp +++ b/Source/Core/VideoCommon/Src/VideoBackendBase.cpp @@ -21,7 +21,7 @@ static VideoBackend* s_default_backend = NULL; #include // http://msdn.microsoft.com/en-us/library/ms725491.aspx -static bool IsGteVista() +static bool IsGteVista() { OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0; @@ -50,11 +50,11 @@ void VideoBackend::PopulateList() #endif g_available_video_backends.push_back(backends[3] = new SW::VideoSoftware); - for (int i = 0; i < 4; ++i) + for (auto& backend : backends) { - if (backends[i]) + if (backend) { - s_default_backend = g_video_backend = backends[i]; + s_default_backend = g_video_backend = backend; break; } } diff --git a/Source/Core/VideoCommon/Src/VideoBackendBase.h b/Source/Core/VideoCommon/Src/VideoBackendBase.h index 1d691c8ba4..0e8c142e0e 100644 --- a/Source/Core/VideoCommon/Src/VideoBackendBase.h +++ b/Source/Core/VideoCommon/Src/VideoBackendBase.h @@ -55,7 +55,7 @@ struct SCPFifoStruct volatile u32 bFF_Breakpoint; volatile u32 CPCmdIdle; - volatile u32 CPReadIdle; + volatile u32 CPReadIdle; volatile u32 bFF_LoWatermarkInt; volatile u32 bFF_HiWatermarkInt; diff --git a/Source/Core/VideoCommon/Src/VideoConfig.h b/Source/Core/VideoCommon/Src/VideoConfig.h index 890b9b9eda..4e597e6235 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.h +++ b/Source/Core/VideoCommon/Src/VideoConfig.h @@ -6,7 +6,7 @@ // IMPORTANT: UI etc should modify g_Config. Graphics code should read g_ActiveConfig. // The reason for this is to get rid of race conditions etc when the configuration // changes in the middle of a frame. This is done by copying g_Config to g_ActiveConfig -// at the start of every frame. Noone should ever change members of g_ActiveConfig +// at the start of every frame. Noone should ever change members of g_ActiveConfig // directly. #ifndef _VIDEO_CONFIG_H_ @@ -112,7 +112,7 @@ struct VideoConfig bool bEFBCopyEnable; bool bEFBCopyCacheEnable; bool bEFBEmulateFormatChanges; - bool bCopyEFBToTexture; + bool bCopyEFBToTexture; bool bCopyEFBScaled; int iSafeTextureCache_ColorSamples; int iPhackvalue[4]; @@ -153,6 +153,7 @@ struct VideoConfig bool bSupportsPixelLighting; bool bSupportsPrimitiveRestart; bool bSupportsSeparateAlphaFunction; + bool bSupportsOversizedViewports; bool bSupportsGLSLUBO; // needed by PixelShaderGen, so must stay in VideoCommon bool bSupportsEarlyZ; // needed by PixelShaderGen, so must stay in VideoCommon } backend_info; diff --git a/Source/Core/VideoCommon/Src/VideoState.cpp b/Source/Core/VideoCommon/Src/VideoState.cpp index 00d6eba320..9bfbeeaf52 100644 --- a/Source/Core/VideoCommon/Src/VideoState.cpp +++ b/Source/Core/VideoCommon/Src/VideoState.cpp @@ -38,7 +38,7 @@ static void DoState(PointerWrap &p) // Texture decoder p.DoArray(texMem, TMEM_SIZE); p.DoMarker("texMem"); - + // FIFO Fifo_DoState(p); p.DoMarker("Fifo"); diff --git a/Source/Core/VideoCommon/Src/XFMemory.h b/Source/Core/VideoCommon/Src/XFMemory.h index c350f67395..f681e15f50 100644 --- a/Source/Core/VideoCommon/Src/XFMemory.h +++ b/Source/Core/VideoCommon/Src/XFMemory.h @@ -139,7 +139,7 @@ union INVTXSPEC union TexMtxInfo { - struct + struct { u32 unknown : 1; u32 projection : 1; // XF_TEXPROJ_X @@ -154,7 +154,7 @@ union TexMtxInfo union PostMtxInfo { - struct + struct { u32 index : 6; // base row of dual transform matrix u32 unused : 2; @@ -194,14 +194,14 @@ union DualTexInfo struct Light { - u32 useless[3]; + u32 useless[3]; u32 color; // rgba float a0; // attenuation - float a1; - float a2; + float a1; + float a2; float k0; // k stuff - float k1; - float k2; + float k1; + float k2; union { diff --git a/Source/Core/VideoCommon/Src/XFStructs.cpp b/Source/Core/VideoCommon/Src/XFStructs.cpp index 7d806fcabe..2b9e0d45a5 100644 --- a/Source/Core/VideoCommon/Src/XFStructs.cpp +++ b/Source/Core/VideoCommon/Src/XFStructs.cpp @@ -57,7 +57,7 @@ void XFRegWritten(int transferSize, u32 baseAddress, u32 *pData) case XFMEM_SETCHAN1_AMBCOLOR: { u8 chan = address - XFMEM_SETCHAN0_AMBCOLOR; - if (xfregs.ambColor[chan] != newValue) + if (xfregs.ambColor[chan] != newValue) { VertexManager::Flush(); VertexShaderManager::SetMaterialColorChanged(chan, newValue); @@ -226,7 +226,7 @@ void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData) { transferSize = 0; } - + XFMemWritten(xfMemTransferSize, xfMemBase); memcpy_gc(&xfmem[xfMemBase], pData, xfMemTransferSize * 4); @@ -235,9 +235,9 @@ void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData) // write to XF regs if (transferSize > 0) - { + { XFRegWritten(transferSize, baseAddress, pData); - memcpy_gc((u32*)(&xfregs) + (baseAddress - 0x1000), pData, transferSize * 4); + memcpy_gc((u32*)(&xfregs) + (baseAddress - 0x1000), pData, transferSize * 4); } } diff --git a/Source/Core/VideoCommon/Src/memcpy_amd.cpp b/Source/Core/VideoCommon/Src/memcpy_amd.cpp index bd393560d4..a563b80886 100644 --- a/Source/Core/VideoCommon/Src/memcpy_amd.cpp +++ b/Source/Core/VideoCommon/Src/memcpy_amd.cpp @@ -60,7 +60,7 @@ MEMCPY_AMD.CPP // uses the software prefetch instruction to pre-read the data. // USE 64 * 1024 FOR THIS VALUE IF YOU'RE ALWAYS FILLING A "CLEAN CACHE" -#define BLOCK_PREFETCH_COPY infinity // no limit for movq/movntq w/block prefetch +#define BLOCK_PREFETCH_COPY infinity // no limit for movq/movntq w/block prefetch #define CACHEBLOCK 80h // number of 64-byte blocks (cache lines) for block prefetch // For the largest size blocks, a special technique called Block Prefetch // can be used to accelerate the read operations. Block Prefetch reads @@ -233,7 +233,7 @@ $memcpy_bp_3: add esi, 64 ; update source pointer movntq [edi ], mm0 ; write 64 bits, bypassing cache movntq [edi+ 8], mm1 ; note: movntq also prevents the CPU - movntq [edi+16], mm2 ; from READING the destination address + movntq [edi+16], mm2 ; from READING the destination address movntq [edi+24], mm3 ; into the cache, only to be over-written, movntq [edi+32], mm4 ; so that also helps performance movntq [edi+40], mm5 @@ -273,7 +273,7 @@ $memcpy_last_few: ; dword aligned from before movsd''s jz $memcpy_final ; no more, lets leave rep movsb ; the last 1, 2, or 3 bytes -$memcpy_final: +$memcpy_final: emms ; clean up the MMX state sfence ; flush the write buffer mov eax, [dest] ; ret value = destination pointer @@ -294,7 +294,7 @@ unsigned char memcmp_mmx(const void* src1, const void* src2, int cmpsize) mov ecx, cmpsize mov edx, src1 mov esi, src2 - + cmp ecx, 32 jl Done4 @@ -358,7 +358,7 @@ Cmp8: pand mm0, mm6 pand mm0, mm7 pmovmskb eax, mm0 - + // check if eq cmp eax, 0xff je Continue diff --git a/Source/Core/VideoCommon/Src/stdafx.cpp b/Source/Core/VideoCommon/Src/stdafx.cpp new file mode 100644 index 0000000000..b602b39925 --- /dev/null +++ b/Source/Core/VideoCommon/Src/stdafx.cpp @@ -0,0 +1,5 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "stdafx.h" diff --git a/Source/Core/VideoCommon/Src/stdafx.h b/Source/Core/VideoCommon/Src/stdafx.h new file mode 100644 index 0000000000..bc5046304d --- /dev/null +++ b/Source/Core/VideoCommon/Src/stdafx.h @@ -0,0 +1,14 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#pragma once + +#define _WIN32_WINNT 0x501 +#ifndef _WIN32_IE +#define _WIN32_IE 0x0500 // Default value is 0x0400 +#endif + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +#include diff --git a/Source/Core/VideoCommon/Src/x64DLCache.cpp b/Source/Core/VideoCommon/Src/x64DLCache.cpp index 7c59a3a072..c2ad2a558c 100644 --- a/Source/Core/VideoCommon/Src/x64DLCache.cpp +++ b/Source/Core/VideoCommon/Src/x64DLCache.cpp @@ -58,7 +58,7 @@ struct ReferencedDataRegion ReferencedDataRegion* NextRegion; u32 size; u32 MustClean; - + int IntersectsMemoryRange(u8* range_address, u32 range_size) { @@ -78,7 +78,7 @@ struct CachedDisplayList uncachable(false), num_xf_reg(0), num_cp_reg(0), - num_bp_reg(0), + num_bp_reg(0), num_index_xf(0), num_draw_call(0), pass(DLPASS_ANALYZE), @@ -96,7 +96,7 @@ struct CachedDisplayList // Analytic data u32 num_xf_reg; u32 num_cp_reg; - u32 num_bp_reg; + u32 num_bp_reg; u32 num_index_xf; u32 num_draw_call; u32 pass; @@ -142,7 +142,7 @@ struct CachedDisplayList NewRegion = new ReferencedDataRegion; NewRegion->MustClean = false; NewRegion->size = Size; - NewRegion->start_address = RegionStartAddress; + NewRegion->start_address = RegionStartAddress; NewRegion->hash = GetHash64(RegionStartAddress, Size, DL_HASH_STEPS); InsertRegion(NewRegion); } @@ -241,11 +241,11 @@ u32 AnalyzeAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) u8* startAddress = Memory::GetPointer(address); u32 num_xf_reg = 0; u32 num_cp_reg = 0; - u32 num_bp_reg = 0; + u32 num_bp_reg = 0; u32 num_index_xf = 0; u32 num_draw_call = 0; u32 result = 0; - + // Avoid the crash if Memory::GetPointer failed .. if (startAddress != 0) @@ -322,7 +322,7 @@ u32 AnalyzeAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) case GX_CMD_UNKNOWN_METRICS: // zelda 4 swords calls it and checks the metrics registers after that DEBUG_LOG(VIDEO, "GX 0x44: %08x", cmd_byte); break; - case GX_CMD_INVL_VC: // Invalidate Vertex Cache + case GX_CMD_INVL_VC: // Invalidate Vertex Cache DEBUG_LOG(VIDEO, "Invalidate (vertex cache?)"); break; case GX_LOAD_BP_REG: //0x61 @@ -334,7 +334,7 @@ u32 AnalyzeAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) } break; - // draw primitives + // draw primitives default: if (cmd_byte & 0x80) { @@ -349,7 +349,7 @@ u32 AnalyzeAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) numVertices); num_draw_call++; const u32 tc[12] = { - g_VtxDesc.Position, g_VtxDesc.Normal, g_VtxDesc.Color0, g_VtxDesc.Color1, g_VtxDesc.Tex0Coord, g_VtxDesc.Tex1Coord, + g_VtxDesc.Position, g_VtxDesc.Normal, g_VtxDesc.Color0, g_VtxDesc.Color1, g_VtxDesc.Tex0Coord, g_VtxDesc.Tex1Coord, g_VtxDesc.Tex2Coord, g_VtxDesc.Tex3Coord, g_VtxDesc.Tex4Coord, g_VtxDesc.Tex5Coord, g_VtxDesc.Tex6Coord, (const u32)((g_VtxDesc.Hex >> 31) & 3) }; for(int i = 0; i < 12; i++) @@ -380,11 +380,11 @@ u32 AnalyzeAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) dl->num_index_xf = num_index_xf; dl->num_xf_reg = num_xf_reg; // reset to the old pointer - g_pVideoData = old_pVideoData; + g_pVideoData = old_pVideoData; return result; } -// The only sensible way to detect changes to vertex data is to convert several times +// The only sensible way to detect changes to vertex data is to convert several times // and hash the output. // Second pass - compile @@ -506,7 +506,7 @@ void CompileAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) // zelda 4 swords calls it and checks the metrics registers after that break; - case GX_CMD_INVL_VC:// Invalidate (vertex cache?) + case GX_CMD_INVL_VC:// Invalidate (vertex cache?) DEBUG_LOG(VIDEO, "Invalidate (vertex cache?)"); break; @@ -521,7 +521,7 @@ void CompileAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) } break; - // draw primitives + // draw primitives default: if (cmd_byte & 0x80) { @@ -543,13 +543,13 @@ void CompileAndRunDisplayList(u32 address, u32 size, CachedDisplayList *dl) ReferencedDataRegion* NewRegion = new ReferencedDataRegion; NewRegion->MustClean = true; NewRegion->size = Vdatasize; - NewRegion->start_address = (u8*)new u8[Vdatasize]; + NewRegion->start_address = (u8*)new u8[Vdatasize]; NewRegion->hash = 0; dl->InsertRegion(NewRegion); memcpy(NewRegion->start_address, StartAddress, Vdatasize); emitter.ABI_CallFunctionCCCP((void *)&VertexLoaderManager::RunCompiledVertices, cmd_byte & GX_VAT_MASK, (cmd_byte & GX_PRIMITIVE_MASK) >> GX_PRIMITIVE_SHIFT, numVertices, NewRegion->start_address); const u32 tc[12] = { - g_VtxDesc.Position, g_VtxDesc.Normal, g_VtxDesc.Color0, g_VtxDesc.Color1, g_VtxDesc.Tex0Coord, g_VtxDesc.Tex1Coord, + g_VtxDesc.Position, g_VtxDesc.Normal, g_VtxDesc.Color0, g_VtxDesc.Color1, g_VtxDesc.Tex0Coord, g_VtxDesc.Tex1Coord, g_VtxDesc.Tex2Coord, g_VtxDesc.Tex3Coord, g_VtxDesc.Tex4Coord, g_VtxDesc.Tex5Coord, g_VtxDesc.Tex6Coord, (const u32)((g_VtxDesc.Hex >> 31) & 3) }; for(int i = 0; i < 12; i++) @@ -592,11 +592,11 @@ void Init() void Shutdown() { Clear(); - FreeMemoryPages(dlcode_cache, DL_CODE_CACHE_SIZE); + FreeMemoryPages(dlcode_cache, DL_CODE_CACHE_SIZE); dlcode_cache = NULL; } -void Clear() +void Clear() { VDLMap::iterator iter = dl_map.begin(); while (iter != dl_map.end()) @@ -625,7 +625,7 @@ void ProgressiveCleanup() { VDlist &ParentEntry = iter->second; DLMap::iterator childiter = ParentEntry.dl_map.begin(); - while (childiter != ParentEntry.dl_map.end()) + while (childiter != ParentEntry.dl_map.end()) { CachedDisplayList &entry = childiter->second; int limit = 3600; @@ -712,9 +712,9 @@ bool HandleDisplayList(u32 address, u32 size) if (dl.check != CheckContextId) { dl.check = CheckContextId; - DlistChanged = !dl.CheckRegions() || dl.dl_hash != GetHash64(Memory::GetPointer(address), size, 0); + DlistChanged = !dl.CheckRegions() || dl.dl_hash != GetHash64(Memory::GetPointer(address), size, 0); } - if (DlistChanged) + if (DlistChanged) { dl.uncachable = true; dl.ClearRegions(); @@ -734,7 +734,7 @@ bool HandleDisplayList(u32 address, u32 size) INCSTAT(stats.numDListsCalled); INCSTAT(stats.thisFrame.numDListsCalled); - + Statistics::SwapDL(); g_pVideoData = old_datareader; break; @@ -744,7 +744,7 @@ bool HandleDisplayList(u32 address, u32 size) } DLCache::CachedDisplayList dl; - + u32 dlvatused = DLCache::AnalyzeAndRunDisplayList(address, size, &dl); dl.dl_hash = GetHash64(Memory::GetPointer(address), size,0); dl.pass = DLCache::DLPASS_COMPILE; @@ -754,14 +754,14 @@ bool HandleDisplayList(u32 address, u32 size) { DLCache::VDlist &vdl = Parentiter->second; vdl.dl_map[vhash] = dl; - vdl.VATUsed = dlvatused; + vdl.VATUsed = dlvatused; vdl.count++; } else { DLCache::VDlist vdl; vdl.dl_map[vhash] = dl; - vdl.VATUsed = dlvatused; + vdl.VATUsed = dlvatused; vdl.count = 1; DLCache::dl_map[dl_id] = vdl; } diff --git a/Source/Core/VideoCommon/Src/x64TextureDecoder.cpp b/Source/Core/VideoCommon/Src/x64TextureDecoder.cpp index 4c26509878..6887a0bdd0 100644 --- a/Source/Core/VideoCommon/Src/x64TextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/x64TextureDecoder.cpp @@ -54,7 +54,7 @@ extern const unsigned char sfont_raw[][9*10]; int TexDecoder_GetTexelSizeInNibbles(int format) { switch (format & 0x3f) { - case GX_TF_I4: return 1; + case GX_TF_I4: return 1; case GX_TF_I8: return 2; case GX_TF_IA4: return 2; case GX_TF_IA8: return 4; @@ -65,7 +65,7 @@ int TexDecoder_GetTexelSizeInNibbles(int format) case GX_TF_C8: return 2; case GX_TF_C14X2: return 4; case GX_TF_CMPR: return 1; - case GX_CTF_R4: return 1; + case GX_CTF_R4: return 1; case GX_CTF_RA4: return 2; case GX_CTF_RA8: return 4; case GX_CTF_YUVA8: return 8; @@ -80,7 +80,7 @@ int TexDecoder_GetTexelSizeInNibbles(int format) case GX_TF_Z16: return 4; case GX_TF_Z24X8: return 8; - case GX_CTF_Z4: return 1; + case GX_CTF_Z4: return 1; case GX_CTF_Z8M: return 2; case GX_CTF_Z8L: return 2; case GX_CTF_Z16L: return 4; @@ -97,7 +97,7 @@ int TexDecoder_GetBlockWidthInTexels(u32 format) { switch (format) { - case GX_TF_I4: return 8; + case GX_TF_I4: return 8; case GX_TF_I8: return 8; case GX_TF_IA4: return 8; case GX_TF_IA8: return 4; @@ -134,7 +134,7 @@ int TexDecoder_GetBlockHeightInTexels(u32 format) { switch (format) { - case GX_TF_I4: return 8; + case GX_TF_I4: return 8; case GX_TF_I8: return 4; case GX_TF_IA4: return 4; case GX_TF_IA8: return 4; @@ -311,7 +311,7 @@ inline void decodebytesC4RGB565_To_RGBA(u32* dst, const u8* src, int tlutaddr) //inline void decodebytesC8(u32 *dst, const u8 *src, int numbytes, int tlutaddr, int tlutfmt) inline void decodebytesC8_5A3_To_BGRA32(u32 *dst, const u8 *src, int tlutaddr) -{ +{ u16 *tlut = (u16*)(texMem + tlutaddr); for (int x = 0; x < 8; x++) { @@ -321,7 +321,7 @@ inline void decodebytesC8_5A3_To_BGRA32(u32 *dst, const u8 *src, int tlutaddr) } inline void decodebytesC8_5A3_To_RGBA32(u32 *dst, const u8 *src, int tlutaddr) -{ +{ u16 *tlut = (u16*)(texMem + tlutaddr); for (int x = 0; x < 8; x++) { @@ -501,7 +501,7 @@ inline void decodebytesARGB8_4(u32 *dst, const u16 *src, const u16 *src2) // some unpack instruction x2: // ABABABABABABABAB 1212121212121212 -> // AB12AB12AB12AB12 AB12AB12AB12AB12 - // 2x pshufb-> + // 2x pshufb-> // 21BA21BA21BA21BA 21BA21BA21BA21BA // and we are done. } @@ -551,7 +551,7 @@ void decodeDXTBlock(u32 *dst, const DXTBlock *src, int pitch) int green3 = ((green2 - green1) >> 1) - ((green2 - green1) >> 3); int red3 = ((red2 - red1) >> 1) - ((red2 - red1) >> 3); colors[2] = makecol(red1 + red3, green1 + green3, blue1 + blue3, 255); - colors[3] = makecol(red2 - red3, green2 - green3, blue2 - blue3, 255); + colors[3] = makecol(red2 - red3, green2 - green3, blue2 - blue3, 255); } else { @@ -562,7 +562,7 @@ void decodeDXTBlock(u32 *dst, const DXTBlock *src, int pitch) } for (int y = 0; y < 4; y++) - { + { int val = src->lines[y]; for (int x = 0; x < 4; x++) { @@ -592,9 +592,9 @@ void decodeDXTBlockRGBA(u32 *dst, const DXTBlock *src, int pitch) { int blue3 = ((blue2 - blue1) >> 1) - ((blue2 - blue1) >> 3); int green3 = ((green2 - green1) >> 1) - ((green2 - green1) >> 3); - int red3 = ((red2 - red1) >> 1) - ((red2 - red1) >> 3); + int red3 = ((red2 - red1) >> 1) - ((red2 - red1) >> 3); colors[2] = makeRGBA(red1 + red3, green1 + green3, blue1 + blue3, 255); - colors[3] = makeRGBA(red2 - red3, green2 - green3, blue2 - blue3, 255); + colors[3] = makeRGBA(red2 - red3, green2 - green3, blue2 - blue3, 255); } else { @@ -605,7 +605,7 @@ void decodeDXTBlockRGBA(u32 *dst, const DXTBlock *src, int pitch) } for (int y = 0; y < 4; y++) - { + { int val = src->lines[y]; for (int x = 0; x < 4; x++) { @@ -659,7 +659,7 @@ PC_TexFormat GetPC_TexFormat(int texformat, int tlutfmt) return PC_TEX_FMT_IA4_AS_IA8; case GX_TF_IA8: return PC_TEX_FMT_IA8; - case GX_TF_C14X2: + case GX_TF_C14X2: return GetPCFormatFromTLUTFormat(tlutfmt); case GX_TF_RGB565: return PC_TEX_FMT_RGB565; @@ -715,7 +715,7 @@ PC_TexFormat TexDecoder_Decode_real(u8 *dst, const u8 *src, int width, int heigh for (int y = 0; y < height; y += 8) for (int x = 0, yStep = (y / 8) * Wsteps8; x < width; x += 8, yStep++) for (int iy = 0, xStep = yStep * 8; iy < 8; iy++, xStep++) - decodebytesC4_5A3_To_BGRA32((u32*)dst + (y + iy) * width + x, src + 4 * xStep, tlutaddr); + decodebytesC4_5A3_To_BGRA32((u32*)dst + (y + iy) * width + x, src + 4 * xStep, tlutaddr); } else { @@ -723,7 +723,7 @@ PC_TexFormat TexDecoder_Decode_real(u8 *dst, const u8 *src, int width, int heigh for (int y = 0; y < height; y += 8) for (int x = 0, yStep = (y / 8) * Wsteps8; x < width; x += 8, yStep++) for (int iy = 0, xStep = yStep * 8; iy < 8; iy++, xStep++) - decodebytesC4_To_Raw16((u16*)dst + (y + iy) * width + x, src + 4 * xStep, tlutaddr); + decodebytesC4_To_Raw16((u16*)dst + (y + iy) * width + x, src + 4 * xStep, tlutaddr); } return GetPCFormatFromTLUTFormat(tlutfmt); case GX_TF_I4: @@ -807,7 +807,7 @@ PC_TexFormat TexDecoder_Decode_real(u8 *dst, const u8 *src, int width, int heigh } return PC_TEX_FMT_IA8; - case GX_TF_C14X2: + case GX_TF_C14X2: if (tlutfmt == 2) { // Special decoding is required for TLUT format 5A3 @@ -904,7 +904,7 @@ PC_TexFormat TexDecoder_Decode_real(u8 *dst, const u8 *src, int width, int heigh { const u8* src2 = src + 64 * yStep; for (int iy = 0; iy < 4; iy++) - decodebytesARGB8_4((u32*)dst + (y+iy)*width + x, (u16*)src2 + 4 * iy, (u16*)src2 + 4 * iy + 16); + decodebytesARGB8_4((u32*)dst + (y+iy)*width + x, (u16*)src2 + 4 * iy, (u16*)src2 + 4 * iy + 16); } } } @@ -936,14 +936,14 @@ PC_TexFormat TexDecoder_Decode_real(u8 *dst, const u8 *src, int width, int heigh { for (int x = 0, yStep = (y / 8) * Wsteps8; x < width; x += 8, yStep++) { - const u8* src2 = src + 4 * sizeof(DXTBlock) * yStep; + const u8* src2 = src + 4 * sizeof(DXTBlock) * yStep; decodeDXTBlock((u32*)dst + y * width + x, (DXTBlock*)src2, width); src2 += sizeof(DXTBlock); decodeDXTBlock((u32*)dst + y * width + x + 4, (DXTBlock*)src2, width); src2 += sizeof(DXTBlock); decodeDXTBlock((u32*)dst + (y + 4) * width + x, (DXTBlock*)src2, width); src2 += sizeof(DXTBlock); - decodeDXTBlock((u32*)dst + (y + 4) * width + x + 4, (DXTBlock*)src2, width); + decodeDXTBlock((u32*)dst + (y + 4) * width + x + 4, (DXTBlock*)src2, width); } } #endif @@ -991,7 +991,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he for (int x = 0, yStep = (y / 8) * Wsteps8; x < width; x += 8,yStep++) for (int iy = 0, xStep = 8 * yStep; iy < 8; iy++,xStep++) decodebytesC4IA8_To_RGBA(dst + (y + iy) * width + x, src + 4 * xStep, tlutaddr); - + } else { @@ -1140,7 +1140,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he _mm_storeu_si128(quaddst, rgba0); _mm_storeu_si128(quaddst+1, rgba1); } - + } else #endif // JSD optimized with SSE2 intrinsics. @@ -1224,7 +1224,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he _mm_storeu_si128(quaddst, rgba6); // Store (hhhh gggg ffff eeee) out: _mm_storeu_si128(quaddst+1, rgba7); - + } } } @@ -1246,7 +1246,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he for (int x = 0, yStep = (y / 4) * Wsteps8; x < width; x += 8, yStep++) for (int iy = 0, xStep = 4 * yStep; iy < 4; iy++, xStep++) decodebytesC8IA8_To_RGBA(dst + (y + iy) * width + x, src + 8 * xStep, tlutaddr); - + } else { @@ -1254,7 +1254,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he for (int y = 0; y < height; y += 4) for (int x = 0, yStep = (y / 4) * Wsteps8; x < width; x += 8, yStep++) for (int iy = 0, xStep = 4 * yStep; iy < 4; iy++, xStep++) - decodebytesC8RGB565_To_RGBA(dst + (y + iy) * width + x, src + 8 * xStep, tlutaddr); + decodebytesC8RGB565_To_RGBA(dst + (y + iy) * width + x, src + 8 * xStep, tlutaddr); } break; @@ -1404,7 +1404,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he // 0b_gggBBBbb_RRRrrGGg_gggBBBbb_RRRrrGGg >> 3 [32] = // 0b_000gggBB_BbbRRRrr_GGggggBB_BbbRRRrr & - // 0b_00000000_00000000_11111100_00000000 = + // 0b_00000000_00000000_11111100_00000000 = // 0b_00000000_00000000_GGgggg00_00000000 const __m128i gtmp = _mm_srli_epi32(c0, 3); const __m128i g0 = _mm_and_si128(gtmp, kMaskG0); @@ -1784,7 +1784,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he _mm_storeu_si128(dst128, rgba10); dst128 = (__m128i*)( dst + (y + 3) * width + x ); _mm_storeu_si128(dst128, rgba11); - } + } } } break; @@ -2017,7 +2017,7 @@ PC_TexFormat TexDecoder_Decode_RGBA(u32 * dst, const u8 * src, int width, int he assert( memcmp(&(tmp0[3]), &dst32[(width * 3)], 16) == 0 ); assert( memcmp(&(tmp1[3]), &dst32[(width * 3) + 4], 16) == 0 ); #endif - } + } } } break; @@ -2067,7 +2067,7 @@ PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, in { int xcnt = 0; int nchar = sfont_map[(int)*fmt]; - + const unsigned char *ptr = sfont_raw[nchar]; // each char is up to 9x10 for (int x = 0; x < 9;x++) @@ -2103,7 +2103,7 @@ PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, in dtp[(y + yoff)*width + x + xoff] = ptr[x] ? 0xFFFF : 0x0000; break; } - default: + default: case PC_TEX_FMT_BGRA32: { int *dtp = (int*)dst; @@ -2126,7 +2126,7 @@ PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, in void TexDecoder_DecodeTexel(u8 *dst, const u8 *src, int s, int t, int imageWidth, int texformat, int tlutaddr, int tlutfmt) { /* General formula for computing texture offset - // + // u16 sBlk = s / blockWidth; u16 tBlk = t / blockHeight; u16 widthBlks = (width / blockWidth) + 1; @@ -2268,7 +2268,7 @@ void TexDecoder_DecodeTexel(u8 *dst, const u8 *src, int s, int t, int imageWidth *((u32*)dst) = decodeIA8Swapped(*valAddr); } break; - case GX_TF_C14X2: + case GX_TF_C14X2: { u16 sBlk = s >> 2; u16 tBlk = t >> 2; @@ -2494,696 +2494,696 @@ const unsigned char sfont_map[] = { const unsigned char sfont_raw[][9*10] = { { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, - 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, },{ - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + },{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0x00, 0x00, 0x00, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x78, 0x78, 0x78, }, }; diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj b/Source/Core/VideoCommon/VideoCommon.vcxproj index c5896af1a6..dd8bbc6f6d 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -27,153 +19,29 @@ - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF} - VideoCommon + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3} - + StaticLibrary + v120 + Unicode + + true - Unicode - - StaticLibrary - true - Unicode - - - StaticLibrary + false - Unicode - false - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - ..\Common\Src;..\Core\Src;..\..\..\Externals\SOIL;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories) - false - - - true - - - - - - ..\Common\Src;..\Core\Src;..\..\..\Externals\SOIL;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories) - - - true - - - - - - ..\Common\Src;..\Core\Src;..\..\..\Externals\SOIL;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - - - - - - ..\Common\Src;..\Core\Src;..\..\..\Externals\SOIL;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - - - - - - ..\Common\Src;..\Core\Src;..\..\..\Externals\SOIL;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories) - true - - - true - true - true - - - - - - ..\Common\Src;..\Core\Src;..\..\..\Externals\SOIL;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories) - - - true - true - true - - - @@ -202,6 +70,9 @@ + + Create + @@ -230,8 +101,8 @@ - + @@ -254,6 +125,7 @@ + @@ -266,44 +138,28 @@ - + - - + {aa862e5e-a993-497a-b6a0-0e8e94b10050} - true - true - false - true - false - {8544f1ff-f2a5-42d8-a568-c56b5d3b4181} - true - true - false - true - false + {b441cc62-877e-4b3f-93e0-0de80544f705} - {c87a4178-44f6-49b2-b7aa-c79af1b8c534} - true - true - false - true - false + {2e6c348c-c75c-4d94-8d1e-9c1fcbf3efe4} - + \ No newline at end of file diff --git a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters index 3f864b0e7e..7d9534f4eb 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcxproj.filters +++ b/Source/Core/VideoCommon/VideoCommon.vcxproj.filters @@ -1,95 +1,38 @@  + + + {23908fac-d3fd-4fa5-a9b4-87b3bafc7bd9} + + + {2baa29c2-a528-4981-abcb-e0842c311f63} + + + {f32547ad-f1c1-4e47-9ded-c07f66de2100} + + + {6a88e4a0-754c-43df-98e6-405c99cd2ca7} + + + {7ce5076f-4e85-4f4d-b3f0-8c88267b8b2d} + + + {8c17624b-2ccb-4ee4-9ec0-593f8f3d1dd2} + + + {8edd4982-cce6-406e-9029-f7a6449311b1} + + + {cefc166b-1f5e-4e96-863d-1448e14c0741} + + + - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Util - - - Util - - - Util - - - Util - - - Util - - - Util - - - Util - - - Shader Managers - - - Shader Managers - - - Shader Generators - - - Shader Generators - - - Shader Generators - - - Register Sections - - - Register Sections - - - Register Sections - - - Register Sections - - - Register Sections - - - Register Sections - - - Decoding\OpenCL - - - Decoding\OpenCL - - - Decoding - - - Decoding - Base @@ -114,119 +57,109 @@ Base - - Util + + Decoding\OpenCL + + + Decoding\OpenCL + + + Decoding + + + Decoding Decoding + + Register Sections + + + Register Sections + + + Register Sections + + + Register Sections + + + Register Sections + + + Register Sections + + + Shader Generators + + + Shader Generators + + + Shader Generators + + + Shader Managers + + + Shader Managers + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + Vertex Loading + + - + - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Vertex Loading - - - Util - - - Util - - - Util - - - Util - - - Util - - - Util - - - Util - - - Util - - - Shader Managers - - - Shader Managers - - - Shader Generators - - - Shader Generators - - - Shader Generators - - - Register Sections - - - Register Sections - - - Register Sections - - - Register Sections - - - Register Sections - - - Register Sections - - - Decoding\OpenCL - - - Decoding\OpenCL - - - Decoding - - - Decoding - - - Decoding - Base @@ -251,46 +184,114 @@ Base + + Decoding\OpenCL + + + Decoding\OpenCL + + + Decoding + + + Decoding + + + Decoding + + + Register Sections + + + Register Sections + + + Register Sections + + + Register Sections + + + Register Sections + + + Register Sections + Shader Generators - - Util + + Shader Generators Shader Generators + + Shader Generators + + + Shader Generators + + + Shader Managers + + + Shader Managers + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Util + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + + Vertex Loading + + - - - Decoding\OpenCL - + - - - {7520d766-5816-4e85-8068-3744850718d9} - - - {ba650466-ae40-45ba-89f4-c3d4919d1f31} - - - {9b5b4ba1-ee30-4cdc-86b2-2c6b15bb47f5} - - - {a833e7b4-e178-4ed6-9692-ebb05e2196b4} - - - {b7c0a925-0c89-4a92-9f07-8b60bd44a8bb} - - - {2e8e6b8a-0d42-48a7-8a44-085830c6d033} - - - {448cb71f-7edd-4a5a-ab31-a6505f5a5820} - - - {e2a527a2-ccc8-4ab8-a93e-dd2628c0f3b6} - - - + \ No newline at end of file diff --git a/Source/DSPSpy/dsp_interface.cpp b/Source/DSPSpy/dsp_interface.cpp index 5a935f12ef..b6a56acacb 100644 --- a/Source/DSPSpy/dsp_interface.cpp +++ b/Source/DSPSpy/dsp_interface.cpp @@ -23,7 +23,7 @@ void IDSP::SendTask(void *addr, u16 iram_addr, u16 len, u16 start) // iram_addr dsp addr 4byte aligned (2 DSP words) // len block length in bytes multiple of 4 (wtf? if you want to fill whole iram, you need 8191) // (8191 % 4 = 3) wtffff - // start dsp iram entry point + // start dsp iram entry point while (CheckMailTo()); SendMailTo(0x80F3A001); while (CheckMailTo()); diff --git a/Source/DSPSpy/dsp_interface.h b/Source/DSPSpy/dsp_interface.h index 03ce9c4f60..e1842ccedc 100644 --- a/Source/DSPSpy/dsp_interface.h +++ b/Source/DSPSpy/dsp_interface.h @@ -36,7 +36,7 @@ class IDSP { public: virtual ~IDSP() {} - + virtual void Init() = 0; virtual void Reset() = 0; virtual u32 CheckMailTo() = 0; diff --git a/Source/DSPSpy/main_spy.cpp b/Source/DSPSpy/main_spy.cpp index aba2007852..0000eacb7c 100644 --- a/Source/DSPSpy/main_spy.cpp +++ b/Source/DSPSpy/main_spy.cpp @@ -21,7 +21,7 @@ // It's very unpolished though // Use Dolphin's dsptool to generate a new dsp_code.h. // Originally written by duddie and modified by FIRES. Then further modified by ector. - + #include #include #include @@ -75,7 +75,7 @@ u16 *dspbufC; u32 *dspbufU; u16 dspreg_in[32] = { - 0x0410, 0x0510, 0x0610, 0x0710, 0x0810, 0x0910, 0x0a10, 0x0b10, + 0x0410, 0x0510, 0x0610, 0x0710, 0x0810, 0x0910, 0x0a10, 0x0b10, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0855, 0x0966, 0x0a77, 0x0b88, 0x0014, 0xfff5, 0x00ff, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0004, 0x8000, 0x000C, 0x0007, 0x0008, 0x0009, 0x000a, @@ -84,22 +84,22 @@ u16 dspreg_in[32] = { /* ttt ? u16 dspreg_in[32] = { -0x0e4c, 0x03c0, 0x0bd9, 0x06a3, 0x0c06, 0x0240, 0x0010, 0x0ecc, +0x0e4c, 0x03c0, 0x0bd9, 0x06a3, 0x0c06, 0x0240, 0x0010, 0x0ecc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0322, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00ff, 0x1b41, 0x0000, 0x0040, 0x00ff, 0x0000, 0x1000, 0x96cc, 0x0000, 0x0000, 0x3fc0, 0x96cc, 0x0000, 0x0000, }; */ -// if i set bit 0x4000 of SR my tests crashes :( +// if i set bit 0x4000 of SR my tests crashes :( /* // zelda 0x00da u16 dspreg_in[32] = { -0x0a50, 0x0ca2, 0x04f8, 0x0ab0, 0x8039, 0x0000, 0x0000, 0x0000, +0x0a50, 0x0ca2, 0x04f8, 0x0ab0, 0x8039, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x03d1, 0x0000, 0x0418, 0x0002, // r08 must have a value ... no idea why (ector: it's the looped addressing regs) 0x0000, 0x0000, 0x00ff, 0x1804, 0xdb70, 0x4ddb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xde6d, 0x0000, 0x0000, 0x0000, 0x004e, -};*/ +};*/ u16 dspreg_out[1000][32]; @@ -470,16 +470,16 @@ void dump_all_ucodes(bool fastmode) sprintf(filename, "sd:/dsp_dump_all.bin"); FILE *f2 = fopen(filename, "ab"); - if (fastmode == false) + if (fastmode == false) { // Then write microcode dump to file sprintf(filename, "sd:/dsp_dump%d.bin", UCodeToDump); FILE *f = fopen(filename, "wb"); - if (f) + if (f) { // First write initial regs written = fwrite(dspreg_in, 1, 32 * 2, f); - + // Then write all the dumps. written += fwrite(dspreg_out, 1, dsp_steps * 32 * 2, f); fclose(f); diff --git a/Source/DSPSpy/mem_dump.h b/Source/DSPSpy/mem_dump.h index b3768f28ca..389c9f27c0 100644 --- a/Source/DSPSpy/mem_dump.h +++ b/Source/DSPSpy/mem_dump.h @@ -17,516 +17,516 @@ unsigned int mem_dump[] __attribute__ ((aligned (64))) = { - 0x0c3966ad, 0x0d46ffdf, 0x0b396696, 0x0e5fffd8, - 0x0a446669, 0x0f83ffd0, 0x095a6626, 0x10b4ffc8, - 0x087d65cd, 0x11f0ffbf, 0x07ab655e, 0x1338ffb6, - 0x06e464d9, 0x148cffac, 0x0628643f, 0x15ebffa1, - 0x0577638f, 0x1756ff96, 0x04d162cb, 0x18cbff8a, - 0x043561f3, 0x1a4cff7e, 0x03a46106, 0x1bd7ff71, - 0x031c6007, 0x1d6cff64, 0x029f5ef5, 0x1f0bff56, - 0x022a5dd0, 0x20b3ff48, 0x01be5c9a, 0x2264ff3a, - 0x015b5b53, 0x241eff2c, 0x010159fc, 0x25e0ff1e, - 0x00ae5896, 0x27a9ff10, 0x00635720, 0x297aff02, - 0x001f559d, 0x2b50fef4, 0xffe2540d, 0x2d2cfee8, - 0xffac5270, 0x2f0dfedb, 0xff7c50c7, 0x30f3fed0, - 0xff534f14, 0x32dcfec6, 0xff2e4d57, 0x34c8febd, - 0xff0f4b91, 0x36b6feb6, 0xfef549c2, 0x38a5feb0, - 0xfedf47ed, 0x3a95feac, 0xfece4611, 0x3c85feab, - 0xfec04430, 0x3e74feac, 0xfeb6424a, 0x4060feaf, - 0xfeaf4060, 0x424afeb6, 0xfeac3e74, 0x4430fec0, - 0xfeab3c85, 0x4611fece, 0xfeac3a95, 0x47edfedf, - 0xfeb038a5, 0x49c2fef5, 0xfeb636b6, 0x4b91ff0f, - 0xfebd34c8, 0x4d57ff2e, 0xfec632dc, 0x4f14ff53, - 0xfed030f3, 0x50c7ff7c, 0xfedb2f0d, 0x5270ffac, - 0xfee82d2c, 0x540dffe2, 0xfef42b50, 0x559d001f, - 0xff02297a, 0x57200063, 0xff1027a9, 0x589600ae, - 0xff1e25e0, 0x59fc0101, 0xff2c241e, 0x5b53015b, - 0xff3a2264, 0x5c9a01be, 0xff4820b3, 0x5dd0022a, - 0xff561f0b, 0x5ef5029f, 0xff641d6c, 0x6007031c, - 0xff711bd7, 0x610603a4, 0xff7e1a4c, 0x61f30435, - 0xff8a18cb, 0x62cb04d1, 0xff961756, 0x638f0577, - 0xffa115eb, 0x643f0628, 0xffac148c, 0x64d906e4, - 0xffb61338, 0x655e07ab, 0xffbf11f0, 0x65cd087d, - 0xffc810b4, 0x6626095a, 0xffd00f83, 0x66690a44, - 0xffd80e5f, 0x66960b39, 0xffdf0d46, 0x66ad0c39, - 0x00000c8b, 0x18f82527, 0x30fb3c56, 0x471c5133, - 0x5a8262f1, 0x6a6d70e2, 0x76417a7c, 0x7d897f61, - 0x7fff7f61, 0x7d897a7c, 0x764170e2, 0x6a6d62f1, - 0x5a825133, 0x471c3c56, 0x30fb2527, 0x18f80c8b, - 0x0000f375, 0xe708dad9, 0xcf05c3aa, 0xb8e4aecd, - 0xa57e9d0f, 0x95938f1e, 0x89bf8584, 0x8277809f, - 0x8001809f, 0x82778584, 0x89bf8f1e, 0x95939d0f, - 0xa57eaecd, 0xb8e4c3aa, 0xcf05dad9, 0xe708f375, - 0x000007ff, 0x0fff17ff, 0x1fff27ff, 0x2fff37ff, - 0x3fff47ff, 0x4fff57ff, 0x5fff67ff, 0x6fff77ff, - 0x7fff7800, 0x70006800, 0x60005800, 0x50004800, - 0x40003800, 0x30002800, 0x20001800, 0x10000800, - 0x0000f801, 0xf001e801, 0xe001d801, 0xd001c801, - 0xc001b801, 0xb001a801, 0xa0019801, 0x90018801, - 0x80018800, 0x90009800, 0xa000a800, 0xb000b800, - 0xc000c800, 0xd000d800, 0xe000e800, 0xf000f800, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x682e469b, 0x25080375, 0xe1e2c04f, 0x9ebc7d29, - 0x5b963a03, 0x1870f6dd, 0xd54ab3b7, 0x92247091, - 0x4efe2d6b, 0x0bd8ea45, 0xc8b2a71f, 0x858c63f9, - 0x426620d3, 0xff40ddad, 0xbc1a9a87, 0x78f45761, - 0x35ce143b, 0xf2a8d115, 0xaf828def, 0x6c5c4ac9, - 0x293607a3, 0xe610c47d, 0xa2ea8157, 0x5fc43e31, - 0x1c9efb0b, 0xd978b7e5, 0x965274bf, 0x532c3199, - 0x1006ee73, 0xcce0ab4d, 0x89ba6827, 0x46942501, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x00000001, 0x00020003, 0x00040005, 0x00060007, - 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, - 0x5a825b9c, 0x5cb35dc7, 0x5ed75fe3, 0x60eb61f0, - 0x62f163ee, 0x64e865dd, 0x66cf67bc, 0x68a6698b, - 0x6a6d6b4a, 0x6c236cf8, 0x6dc96e96, 0x6f5e7022, - 0x70e2719d, 0x72547307, 0x73b5745f, 0x750475a5, - 0x764176d8, 0x776b77fa, 0x78847909, 0x79897a05, - 0x7a7c7aee, 0x7b5c7bc5, 0x7c297c88, 0x7ce37d39, - 0x7d897dd5, 0x7e1d7e5f, 0x7e9c7ed5, 0x7f097f37, - 0x7f617f86, 0x7fa67fc1, 0x7fd87fe9, 0x7ff57ffd, - 0x00058100, 0x0040806a, 0x19e08039, 0x8f208039, - 0x8ee0806a, 0x79e00002, 0x8d00000a, 0x803ea5e0, - 0x00038207, 0x5ffb8069, 0xffa0806a, 0x04000003, - 0x82075ffb, 0x806a0860, 0x806a0cc0, 0x00038207, - 0x5ffb806a, 0x1120806a, 0x15800003, 0x82075ffb, - 0x8069ffa0, 0x806a0400, 0x00038207, 0x5ffb806a, - 0x0860806a, 0x0cc00003, 0x82075ffb, 0x806a1120, - 0x806a1580, 0x00038207, 0x5ffb8069, 0xffa0806a, - 0x04000003, 0x82075ffb, 0x806a0860, 0x806a0cc0, - 0x00038207, 0x5ffb806a, 0x1120806a, 0x15800003, - 0x82075ffb, 0x8069ffa0, 0x806a0400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x08000000, 0x00000800, 0x04000400, - 0x1000f800, 0x0e00fa00, 0x0c00fc00, 0x1200f600, - 0x1068f738, 0x12c0f704, 0x1400f400, 0x0800f800, - 0x0400fc00, 0xfc000400, 0xfc000000, 0xf8000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000002, 0x00400004, 0x00075ffb, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00400000, - 0x02d602d6, 0x00000000, 0x00400006, 0x82075ffb, - 0x8069ffa0, 0x806a0400, 0x80398ee0, 0x806a79e0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x803ea5e0, 0x000a0001, - 0x00000000, 0x00000000, 0x00010000, 0x00000000, - 0x806a19e0, 0x80398f20, 0x80398ee0, 0x806a79e0, - 0x806a02c0, 0x806a0720, 0x00000000, 0x5ffb0000, - 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x03a80f40, 0x03e80000, 0x003d003d, 0x003d003d, - 0x00010020, 0x80754380, 0x0d002000, 0x0d600000, - 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, - 0x00010020, 0x80755780, 0x0d000000, 0x0d602000, - 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, - 0x00010038, 0x80756b80, 0x0d004000, 0x0d600000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x00000000, 0x00000000, 0x00000000, 0x58000000, - 0x00501568, 0xffff0030, 0x00107f00, 0x08000100, - 0x0000002d, 0xabb80500, 0xffff0000, 0xff06f000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x82407fff, 0x7dbf843f, 0x00000000, 0x00000000, - 0xb23b7fff, 0x4dc4d808, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0c3966ad, 0x0d46ffdf, 0x0b396696, 0x0e5fffd8, + 0x0a446669, 0x0f83ffd0, 0x095a6626, 0x10b4ffc8, + 0x087d65cd, 0x11f0ffbf, 0x07ab655e, 0x1338ffb6, + 0x06e464d9, 0x148cffac, 0x0628643f, 0x15ebffa1, + 0x0577638f, 0x1756ff96, 0x04d162cb, 0x18cbff8a, + 0x043561f3, 0x1a4cff7e, 0x03a46106, 0x1bd7ff71, + 0x031c6007, 0x1d6cff64, 0x029f5ef5, 0x1f0bff56, + 0x022a5dd0, 0x20b3ff48, 0x01be5c9a, 0x2264ff3a, + 0x015b5b53, 0x241eff2c, 0x010159fc, 0x25e0ff1e, + 0x00ae5896, 0x27a9ff10, 0x00635720, 0x297aff02, + 0x001f559d, 0x2b50fef4, 0xffe2540d, 0x2d2cfee8, + 0xffac5270, 0x2f0dfedb, 0xff7c50c7, 0x30f3fed0, + 0xff534f14, 0x32dcfec6, 0xff2e4d57, 0x34c8febd, + 0xff0f4b91, 0x36b6feb6, 0xfef549c2, 0x38a5feb0, + 0xfedf47ed, 0x3a95feac, 0xfece4611, 0x3c85feab, + 0xfec04430, 0x3e74feac, 0xfeb6424a, 0x4060feaf, + 0xfeaf4060, 0x424afeb6, 0xfeac3e74, 0x4430fec0, + 0xfeab3c85, 0x4611fece, 0xfeac3a95, 0x47edfedf, + 0xfeb038a5, 0x49c2fef5, 0xfeb636b6, 0x4b91ff0f, + 0xfebd34c8, 0x4d57ff2e, 0xfec632dc, 0x4f14ff53, + 0xfed030f3, 0x50c7ff7c, 0xfedb2f0d, 0x5270ffac, + 0xfee82d2c, 0x540dffe2, 0xfef42b50, 0x559d001f, + 0xff02297a, 0x57200063, 0xff1027a9, 0x589600ae, + 0xff1e25e0, 0x59fc0101, 0xff2c241e, 0x5b53015b, + 0xff3a2264, 0x5c9a01be, 0xff4820b3, 0x5dd0022a, + 0xff561f0b, 0x5ef5029f, 0xff641d6c, 0x6007031c, + 0xff711bd7, 0x610603a4, 0xff7e1a4c, 0x61f30435, + 0xff8a18cb, 0x62cb04d1, 0xff961756, 0x638f0577, + 0xffa115eb, 0x643f0628, 0xffac148c, 0x64d906e4, + 0xffb61338, 0x655e07ab, 0xffbf11f0, 0x65cd087d, + 0xffc810b4, 0x6626095a, 0xffd00f83, 0x66690a44, + 0xffd80e5f, 0x66960b39, 0xffdf0d46, 0x66ad0c39, + 0x00000c8b, 0x18f82527, 0x30fb3c56, 0x471c5133, + 0x5a8262f1, 0x6a6d70e2, 0x76417a7c, 0x7d897f61, + 0x7fff7f61, 0x7d897a7c, 0x764170e2, 0x6a6d62f1, + 0x5a825133, 0x471c3c56, 0x30fb2527, 0x18f80c8b, + 0x0000f375, 0xe708dad9, 0xcf05c3aa, 0xb8e4aecd, + 0xa57e9d0f, 0x95938f1e, 0x89bf8584, 0x8277809f, + 0x8001809f, 0x82778584, 0x89bf8f1e, 0x95939d0f, + 0xa57eaecd, 0xb8e4c3aa, 0xcf05dad9, 0xe708f375, + 0x000007ff, 0x0fff17ff, 0x1fff27ff, 0x2fff37ff, + 0x3fff47ff, 0x4fff57ff, 0x5fff67ff, 0x6fff77ff, + 0x7fff7800, 0x70006800, 0x60005800, 0x50004800, + 0x40003800, 0x30002800, 0x20001800, 0x10000800, + 0x0000f801, 0xf001e801, 0xe001d801, 0xd001c801, + 0xc001b801, 0xb001a801, 0xa0019801, 0x90018801, + 0x80018800, 0x90009800, 0xa000a800, 0xb000b800, + 0xc000c800, 0xd000d800, 0xe000e800, 0xf000f800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x682e469b, 0x25080375, 0xe1e2c04f, 0x9ebc7d29, + 0x5b963a03, 0x1870f6dd, 0xd54ab3b7, 0x92247091, + 0x4efe2d6b, 0x0bd8ea45, 0xc8b2a71f, 0x858c63f9, + 0x426620d3, 0xff40ddad, 0xbc1a9a87, 0x78f45761, + 0x35ce143b, 0xf2a8d115, 0xaf828def, 0x6c5c4ac9, + 0x293607a3, 0xe610c47d, 0xa2ea8157, 0x5fc43e31, + 0x1c9efb0b, 0xd978b7e5, 0x965274bf, 0x532c3199, + 0x1006ee73, 0xcce0ab4d, 0x89ba6827, 0x46942501, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x00000001, 0x00020003, 0x00040005, 0x00060007, + 0x00080009, 0x000a000b, 0x000c000d, 0x000e000f, + 0x5a825b9c, 0x5cb35dc7, 0x5ed75fe3, 0x60eb61f0, + 0x62f163ee, 0x64e865dd, 0x66cf67bc, 0x68a6698b, + 0x6a6d6b4a, 0x6c236cf8, 0x6dc96e96, 0x6f5e7022, + 0x70e2719d, 0x72547307, 0x73b5745f, 0x750475a5, + 0x764176d8, 0x776b77fa, 0x78847909, 0x79897a05, + 0x7a7c7aee, 0x7b5c7bc5, 0x7c297c88, 0x7ce37d39, + 0x7d897dd5, 0x7e1d7e5f, 0x7e9c7ed5, 0x7f097f37, + 0x7f617f86, 0x7fa67fc1, 0x7fd87fe9, 0x7ff57ffd, + 0x00058100, 0x0040806a, 0x19e08039, 0x8f208039, + 0x8ee0806a, 0x79e00002, 0x8d00000a, 0x803ea5e0, + 0x00038207, 0x5ffb8069, 0xffa0806a, 0x04000003, + 0x82075ffb, 0x806a0860, 0x806a0cc0, 0x00038207, + 0x5ffb806a, 0x1120806a, 0x15800003, 0x82075ffb, + 0x8069ffa0, 0x806a0400, 0x00038207, 0x5ffb806a, + 0x0860806a, 0x0cc00003, 0x82075ffb, 0x806a1120, + 0x806a1580, 0x00038207, 0x5ffb8069, 0xffa0806a, + 0x04000003, 0x82075ffb, 0x806a0860, 0x806a0cc0, + 0x00038207, 0x5ffb806a, 0x1120806a, 0x15800003, + 0x82075ffb, 0x8069ffa0, 0x806a0400, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x08000000, 0x00000800, 0x04000400, + 0x1000f800, 0x0e00fa00, 0x0c00fc00, 0x1200f600, + 0x1068f738, 0x12c0f704, 0x1400f400, 0x0800f800, + 0x0400fc00, 0xfc000400, 0xfc000000, 0xf8000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0x00400004, 0x00075ffb, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00400000, + 0x02d602d6, 0x00000000, 0x00400006, 0x82075ffb, + 0x8069ffa0, 0x806a0400, 0x80398ee0, 0x806a79e0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x803ea5e0, 0x000a0001, + 0x00000000, 0x00000000, 0x00010000, 0x00000000, + 0x806a19e0, 0x80398f20, 0x80398ee0, 0x806a79e0, + 0x806a02c0, 0x806a0720, 0x00000000, 0x5ffb0000, + 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x03a80f40, 0x03e80000, 0x003d003d, 0x003d003d, + 0x00010020, 0x80754380, 0x0d002000, 0x0d600000, + 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, + 0x00010020, 0x80755780, 0x0d000000, 0x0d602000, + 0x00000000, 0x00000000, 0x00000000, 0x3fff0000, + 0x00010038, 0x80756b80, 0x0d004000, 0x0d600000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x00010038, 0x80758e80, 0x0d000000, 0x0d604000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x00000000, 0x00000000, 0x00000000, 0x58000000, + 0x00501568, 0xffff0030, 0x00107f00, 0x08000100, + 0x0000002d, 0xabb80500, 0xffff0000, 0xff06f000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x82407fff, 0x7dbf843f, 0x00000000, 0x00000000, + 0xb23b7fff, 0x4dc4d808, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; diff --git a/Source/DSPTool/DSPTool.vcxproj b/Source/DSPTool/DSPTool.vcxproj index e72c055233..386ea0ce61 100644 --- a/Source/DSPTool/DSPTool.vcxproj +++ b/Source/DSPTool/DSPTool.vcxproj @@ -1,14 +1,6 @@  - + - - DebugFast - Win32 - - - DebugFast - x64 - Debug Win32 @@ -28,164 +20,28 @@ {1970D175-3DE8-4738-942A-4D98D1CDBF64} - DSPTool - Win32Proj - - Application - Unicode - false - - + Application + v120 Unicode - - Application - Unicode - false + + true - - Application - Unicode - false - - - Application - Unicode - - - Application - Unicode - false + + false - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - ../../Binary/$(Platform)/ - ../../Binary/$(Platform)/ - ../../Binary/$(Platform)/ - ../../Binary/$(Platform)/ - ../../Binary/$(Platform)/ - ../../Binary/$(Platform)/ - $(ProjectName)DF - $(ProjectName)DF - $(ProjectName)D - $(ProjectName)D - - - - ../Core/Core/Src;../Core/Common/Src;%(AdditionalIncludeDirectories) - - - - - winmm.lib;%(AdditionalDependencies) - Console - - - - - ../Core/Core/Src;../Core/Common/Src;%(AdditionalIncludeDirectories) - - - - - winmm.lib;%(AdditionalDependencies) - Console - - - - - ../Core/Core/Src;../Core/Common/Src;%(AdditionalIncludeDirectories) - - - - - winmm.lib;%(AdditionalDependencies) - Console - - - - - /MP %(AdditionalOptions) - ../Core/Core/Src;../Core/Common/Src;%(AdditionalIncludeDirectories) - - - - - winmm.lib;%(AdditionalDependencies) - Console - - - - - ../Core/Core/Src;../Core/Common/Src;%(AdditionalIncludeDirectories) - - - - - winmm.lib;%(AdditionalDependencies) - Console - - - - - ../Core/Core/Src;../Core/Common/Src;%(AdditionalIncludeDirectories) - - - + winmm.lib;%(AdditionalDependencies) Console @@ -200,25 +56,26 @@ + + + - {c87a4178-44f6-49b2-b7aa-c79af1b8c534} - true - true - false - true - false + {2e6c348c-c75c-4d94-8d1e-9c1fcbf3efe4} - {8c60e805-0da5-4e25-8f84-038db504bb0d} - true - true - false - true - false + {e54cf649-140e-4255-81a5-30a673c1fb36} + + + + + + + + \ No newline at end of file diff --git a/Source/DSPTool/DSPTool.vcxproj.filters b/Source/DSPTool/DSPTool.vcxproj.filters index c5b78da492..f3000e3495 100644 --- a/Source/DSPTool/DSPTool.vcxproj.filters +++ b/Source/DSPTool/DSPTool.vcxproj.filters @@ -1,5 +1,5 @@  - + {0b70242b-1d98-432f-a60e-d4ca0674852e} @@ -22,4 +22,7 @@ + + + \ No newline at end of file diff --git a/Source/DSPTool/Src/DSPTool.cpp b/Source/DSPTool/Src/DSPTool.cpp index 78335d3026..9f38b1347b 100644 --- a/Source/DSPTool/Src/DSPTool.cpp +++ b/Source/DSPTool/Src/DSPTool.cpp @@ -72,8 +72,8 @@ bool SuperTrip(const char *asm_code) std::string text2; Disassemble(code1, true, &text1); Disassemble(code2, true, &text2); - File::WriteStringToFile(true, text1, "code1.txt"); - File::WriteStringToFile(true, text2, "code2.txt"); + File::WriteStringToFile(text1, "code1.txt"); + File::WriteStringToFile(text2, "code2.txt"); */ return true; } @@ -126,7 +126,7 @@ void RunAsmTests() /* std::vector code; std::string text_orig; - File::ReadFileToString(false, "testdata/dsp_test.S", &text_orig); + File::ReadFileToString("testdata/dsp_test.S", &text_orig); if (!Assemble(text_orig.c_str(), &code)) { printf("SuperTrip: First assembly failed\n"); @@ -168,15 +168,15 @@ void RunAsmTests() RoundTrip(rand_code); - if (File::ReadFileToString(true, "C:/devkitPro/examples/wii/asndlib/dsptest/dsp_test.ds", &dsp_test)) + if (File::ReadFileToString("C:/devkitPro/examples/wii/asndlib/dsptest/dsp_test.ds", &dsp_test)) SuperTrip(dsp_test.c_str()); - //.File::ReadFileToString(true, "C:/devkitPro/trunk/libogc/libasnd/dsp_mixer/dsp_mixer.s", &dsp_test); + //.File::ReadFileToString("C:/devkitPro/trunk/libogc/libasnd/dsp_mixer/dsp_mixer.s", &dsp_test); // This is CLOSE to working. Sorry about the local path btw. This is preliminary code. */ - + std::string dsp_test; - if (File::ReadFileToString(true, "Testdata/dsp_test.s", dsp_test)) + if (File::ReadFileToString("Testdata/dsp_test.s", dsp_test)) fail = fail || !SuperTrip(dsp_test.c_str()); if (!fail) printf("All passed!\n"); @@ -213,7 +213,7 @@ int main(int argc, const char *argv[]) printf("-ps : Print results of DSPSpy register dump (disable SR output)\n"); printf("-pm : Print results of DSPSpy register dump (convert PROD values)\n"); printf("-psm : Print results of DSPSpy register dump (convert PROD values/disable SR output)\n"); - + return 0; } @@ -227,7 +227,7 @@ int main(int argc, const char *argv[]) std::string output_header_name; std::string output_name; - bool disassemble = false, compare = false, multiple = false, outputSize = false, + bool disassemble = false, compare = false, multiple = false, outputSize = false, force = false, print_results = false, print_results_prodhack = false, print_results_srhack = false; for (int i = 1; i < argc; i++) { @@ -260,7 +260,7 @@ int main(int argc, const char *argv[]) print_results_srhack = true; print_results_prodhack = true; } - else + else { if (!input_name.empty()) { @@ -288,9 +288,9 @@ int main(int argc, const char *argv[]) // Two binary inputs, let's diff. std::string binary_code; std::vector code1, code2; - File::ReadFileToString(false, input_name.c_str(), binary_code); + File::ReadFileToString(input_name.c_str(), binary_code); BinaryStringBEToCode(binary_code, code1); - File::ReadFileToString(false, output_name.c_str(), binary_code); + File::ReadFileToString(output_name.c_str(), binary_code); BinaryStringBEToCode(binary_code, code2); Compare(code1, code2); return 0; @@ -301,7 +301,7 @@ int main(int argc, const char *argv[]) std::string dumpfile, results; std::vector reg_vector; - File::ReadFileToString(false, input_name.c_str(), dumpfile); + File::ReadFileToString(input_name.c_str(), dumpfile); BinaryStringBEToCode(dumpfile, reg_vector); results.append("Start:\n"); @@ -325,17 +325,17 @@ int main(int argc, const char *argv[]) { if ((reg >= 0x0c) && (reg <= 0x0f)) continue; if (print_results_srhack && (reg == 0x13)) continue; - + if ((print_results_prodhack) && (reg >= 0x15) && (reg <= 0x17)) { switch (reg) { case 0x15: //DSP_REG_PRODM last_reg = reg_vector.at((step*32-32)+reg) + reg_vector.at((step*32-32)+reg+2); - current_reg = reg_vector.at(step*32+reg) + reg_vector.at(step*32+reg+2); + current_reg = reg_vector.at(step*32+reg) + reg_vector.at(step*32+reg+2); break; case 0x16: //DSP_REG_PRODH - htemp = ((reg_vector.at(step*32+reg-1) + reg_vector.at(step*32+reg+1))&~0xffff)>>16; + htemp = ((reg_vector.at(step*32+reg-1) + reg_vector.at(step*32+reg+1))&~0xffff)>>16; current_reg = (u8)(reg_vector.at(step*32+reg) + htemp); - htemp = ((reg_vector.at(step*32-32+reg-1) + reg_vector.at(step*32-32+reg+1))&~0xffff)>>16; + htemp = ((reg_vector.at(step*32-32+reg-1) + reg_vector.at(step*32-32+reg+1))&~0xffff)>>16; last_reg = (u8)(reg_vector.at(step*32-32+reg) + htemp); break; case 0x17: //DSP_REG_PRODM2 @@ -362,7 +362,7 @@ int main(int argc, const char *argv[]) } if (!output_name.empty()) - File::WriteStringToFile(true, results, output_name.c_str()); + File::WriteStringToFile(results, output_name.c_str()); else printf("%s", results.c_str()); return 0; @@ -377,16 +377,16 @@ int main(int argc, const char *argv[]) } std::string binary_code; std::vector code; - File::ReadFileToString(false, input_name.c_str(), binary_code); + File::ReadFileToString(input_name.c_str(), binary_code); BinaryStringBEToCode(binary_code, code); std::string text; Disassemble(code, true, text); if (!output_name.empty()) - File::WriteStringToFile(true, text, output_name.c_str()); + File::WriteStringToFile(text, output_name.c_str()); else printf("%s", text.c_str()); } - else + else { if (input_name.empty()) { @@ -394,9 +394,9 @@ int main(int argc, const char *argv[]) return 1; } std::string source; - if (File::ReadFileToString(true, input_name.c_str(), source)) + if (File::ReadFileToString(input_name.c_str(), source)) { - if(multiple) + if(multiple) { // When specifying a list of files we must compile a header // (we can't assemble multiple files to one binary) @@ -408,8 +408,8 @@ int main(int argc, const char *argv[]) size_t lastPos = 0, pos = 0; source.append("\n"); - - while((pos = source.find('\n', lastPos)) != std::string::npos) + + while((pos = source.find('\n', lastPos)) != std::string::npos) { std::string temp = source.substr(lastPos, pos - lastPos); if(!temp.empty()) @@ -419,26 +419,26 @@ int main(int argc, const char *argv[]) lines = (int)files.size(); - if(lines == 0) + if(lines == 0) { printf("ERROR: Must specify at least one file\n"); return 1; } - + codes = new std::vector[lines]; - for (int i = 0; i < lines; i++) + for (int i = 0; i < lines; i++) { - if (!File::ReadFileToString(true, files[i].c_str(), currentSource)) + if (!File::ReadFileToString(files[i].c_str(), currentSource)) { printf("ERROR reading %s, skipping...\n", files[i].c_str()); lines--; } - else + else { - if (!Assemble(currentSource.c_str(), codes[i], force)) + if (!Assemble(currentSource.c_str(), codes[i], force)) { - printf("Assemble: Assembly of %s failed due to errors\n", + printf("Assemble: Assembly of %s failed due to errors\n", files[i].c_str()); lines--; } @@ -447,10 +447,10 @@ int main(int argc, const char *argv[]) } } } - + CodesToHeader(codes, &files, lines, output_header_name.c_str(), header); - File::WriteStringToFile(true, header, (output_header_name + ".h").c_str()); + File::WriteStringToFile(header, (output_header_name + ".h").c_str()); delete[] codes; } @@ -466,18 +466,18 @@ int main(int argc, const char *argv[]) if (outputSize) { printf("%s: %d\n", input_name.c_str(), (int)code.size()); } - + if (!output_name.empty()) { std::string binary_code; CodeToBinaryStringBE(code, binary_code); - File::WriteStringToFile(false, binary_code, output_name.c_str()); + File::WriteStringToFile(binary_code, output_name.c_str()); } if (!output_header_name.empty()) { std::string header; CodeToHeader(code, input_name, output_header_name.c_str(), header); - File::WriteStringToFile(true, header, (output_header_name + ".h").c_str()); + File::WriteStringToFile(header, (output_header_name + ".h").c_str()); } } } diff --git a/Source/Dolphin_2010.sln b/Source/Dolphin_2010.sln deleted file mode 100644 index f5201ab56c..0000000000 --- a/Source/Dolphin_2010.sln +++ /dev/null @@ -1,446 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\Dolphin.vcxproj", "{1B099EF8-6F87-47A2-A3E7-898A24584F49}" - ProjectSection(ProjectDependencies) = postProject - {8C60E805-0DA5-4E25-8F84-038DB504BB0D} = {8C60E805-0DA5-4E25-8F84-038DB504BB0D} - {69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06} - {9E9DA440-E9AD-413C-B648-91030E792211} = {9E9DA440-E9AD-413C-B648-91030E792211} - {93D73454-2512-424E-9CDA-4BB357FE13DD} = {93D73454-2512-424E-9CDA-4BB357FE13DD} - {B6398059-EBB6-4C34-B547-95F365B71FF4} = {B6398059-EBB6-4C34-B547-95F365B71FF4} - {AA862E5E-A993-497A-B6A0-0E8E94B10050} = {AA862E5E-A993-497A-B6A0-0E8E94B10050} - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F} = {B39AC394-5DB5-4DA9-9D98-09D46CA3701F} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {349EE8F9-7D25-4909-AAF5-FF3FADE72187} = {349EE8F9-7D25-4909-AAF5-FF3FADE72187} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcxproj", "{C87A4178-44F6-49B2-B7AA-C79AF1B8C534}" - ProjectSection(ProjectDependencies) = postProject - {46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554} - {69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioCommon", "Core\AudioCommon\AudioCommon.vcxproj", "{37D007BD-D66C-4EAF-B56C-BD1AAC340A05}" - ProjectSection(ProjectDependencies) = postProject - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SOIL", "..\Externals\SOIL\SOIL.vcxproj", "{8544F1FF-F2A5-42D8-A568-C56B5D3B4181}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SFML_Network", "..\Externals\SFML\build\vc2010\SFML_Network.vcxproj", "{93D73454-2512-424E-9CDA-4BB357FE13DD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LZO", "..\Externals\LZO\LZO.vcxproj", "{D8890B98-26F7-4CFF-BBFB-B95F371B5F20}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\Externals\zlib\zlib.vcxproj", "{3E1339F5-9311-4122-9442-369702E8FCAD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoCommon", "Core\VideoCommon\VideoCommon.vcxproj", "{3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}" - ProjectSection(ProjectDependencies) = postProject - {AA862E5E-A993-497A-B6A0-0E8E94B10050} = {AA862E5E-A993-497A-B6A0-0E8E94B10050} - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181} = {8544F1FF-F2A5-42D8-A568-C56B5D3B4181} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CLRun", "..\Externals\CLRun\clrun\CLRun.vcxproj", "{AA862E5E-A993-497A-B6A0-0E8E94B10050}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core\Core.vcxproj", "{8C60E805-0DA5-4E25-8F84-038DB504BB0D}" - ProjectSection(ProjectDependencies) = postProject - {46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554} - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6} = {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6} - {93D73454-2512-424E-9CDA-4BB357FE13DD} = {93D73454-2512-424E-9CDA-4BB357FE13DD} - {B6398059-EBB6-4C34-B547-95F365B71FF4} = {B6398059-EBB6-4C34-B547-95F365B71FF4} - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F} = {B39AC394-5DB5-4DA9-9D98-09D46CA3701F} - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20} = {D8890B98-26F7-4CFF-BBFB-B95F371B5F20} - {349EE8F9-7D25-4909-AAF5-FF3FADE72187} = {349EE8F9-7D25-4909-AAF5-FF3FADE72187} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Bochs_disasm", "..\Externals\Bochs_disasm\Bochs_disasm.vcxproj", "{CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DiscIO", "Core\DiscIO\DiscIO.vcxproj", "{B6398059-EBB6-4C34-B547-95F365B71FF4}" - ProjectSection(ProjectDependencies) = postProject - {46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554} - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - {3E1339F5-9311-4122-9442-369702E8FCAD} = {3E1339F5-9311-4122-9442-369702E8FCAD} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoD3D", "Core\VideoBackends\D3D\D3D.vcxproj", "{9A4C733C-BADE-4AC6-B58A-6E274395E90E}" - ProjectSection(ProjectDependencies) = postProject - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF} = {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoOGL", "Core\VideoBackends\OGL\OGL.vcxproj", "{1909CD2D-1707-456F-86CA-0DF42A727C99}" - ProjectSection(ProjectDependencies) = postProject - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF} = {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoSoftware", "Core\VideoBackends\Software\Software.vcxproj", "{9E9DA440-E9AD-413C-B648-91030E792211}" - ProjectSection(ProjectDependencies) = postProject - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InputCommon", "Core\InputCommon\InputCommon.vcxproj", "{B39AC394-5DB5-4DA9-9D98-09D46CA3701F}" - ProjectSection(ProjectDependencies) = postProject - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Languages", "..\Languages\Languages.vcxproj", "{0B8D0A82-C520-46BA-849D-3BB8F637EE0C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPTool", "DSPTool\DSPTool.vcxproj", "{1970D175-3DE8-4738-942A-4D98D1CDBF64}" - ProjectSection(ProjectDependencies) = postProject - {8C60E805-0DA5-4E25-8F84-038DB504BB0D} = {8C60E805-0DA5-4E25-8F84-038DB504BB0D} - {69F00340-5C3D-449F-9A80-958435C6CF06} = {69F00340-5C3D-449F-9A80-958435C6CF06} - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} = {C87A4178-44F6-49B2-B7AA-C79AF1B8C534} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxWidgets", "..\Externals\wxWidgets3\build\msw\wx_base.vcxproj", "{1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}" - ProjectSection(ProjectDependencies) = postProject - {01573C36-AC6E-49F6-94BA-572517EB9740} = {01573C36-AC6E-49F6-94BA-572517EB9740} - {3E1339F5-9311-4122-9442-369702E8FCAD} = {3E1339F5-9311-4122-9442-369702E8FCAD} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "png", "..\Externals\libpng\png\png.vcxproj", "{01573C36-AC6E-49F6-94BA-572517EB9740}" - ProjectSection(ProjectDependencies) = postProject - {3E1339F5-9311-4122-9442-369702E8FCAD} = {3E1339F5-9311-4122-9442-369702E8FCAD} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SCMRevGen", "Core\Common\SVNRevGen.vcxproj", "{69F00340-5C3D-449F-9A80-958435C6CF06}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "..\Externals\SoundTouch\SoundTouch.vcxproj", "{68A5DD20-7057-448B-8FE0-B6AC8D205509}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PolarSSL", "..\Externals\polarssl\visualc\VS2010\PolarSSL.vcxproj", "{46CF2D25-6A36-4189-B59C-E4815388E554}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTests", "UnitTests\UnitTests.vcxproj", "{40C636FA-B5BF-4D67-ABC8-376B524A7551}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniupnpc", "..\Externals\miniupnpc\miniupnpc.vcxproj", "{A680190D-0764-485B-9CF3-A82C5EDD5715}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb", "..\Externals\libusbx\msvc\libusb_static_2010.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - DebugFast|Win32 = DebugFast|Win32 - DebugFast|x64 = DebugFast|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Debug|Win32.ActiveCfg = Debug|Win32 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Debug|Win32.Build.0 = Debug|Win32 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Debug|x64.ActiveCfg = Debug|x64 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Debug|x64.Build.0 = Debug|x64 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.DebugFast|x64.Build.0 = DebugFast|x64 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Release|Win32.ActiveCfg = Release|Win32 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Release|Win32.Build.0 = Release|Win32 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Release|x64.ActiveCfg = Release|x64 - {1B099EF8-6F87-47A2-A3E7-898A24584F49}.Release|x64.Build.0 = Release|x64 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Debug|Win32.ActiveCfg = Debug|Win32 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Debug|Win32.Build.0 = Debug|Win32 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Debug|x64.ActiveCfg = Debug|x64 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Debug|x64.Build.0 = Debug|x64 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.DebugFast|x64.Build.0 = DebugFast|x64 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Release|Win32.ActiveCfg = Release|Win32 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Release|Win32.Build.0 = Release|Win32 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Release|x64.ActiveCfg = Release|x64 - {C87A4178-44F6-49B2-B7AA-C79AF1B8C534}.Release|x64.Build.0 = Release|x64 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Debug|Win32.ActiveCfg = Debug|Win32 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Debug|Win32.Build.0 = Debug|Win32 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Debug|x64.ActiveCfg = Debug|x64 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Debug|x64.Build.0 = Debug|x64 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.DebugFast|x64.Build.0 = DebugFast|x64 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Release|Win32.ActiveCfg = Release|Win32 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Release|Win32.Build.0 = Release|Win32 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Release|x64.ActiveCfg = Release|x64 - {37D007BD-D66C-4EAF-B56C-BD1AAC340A05}.Release|x64.Build.0 = Release|x64 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Debug|Win32.ActiveCfg = Debug|Win32 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Debug|Win32.Build.0 = Debug|Win32 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Debug|x64.ActiveCfg = Debug|x64 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Debug|x64.Build.0 = Debug|x64 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.DebugFast|x64.Build.0 = DebugFast|x64 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Release|Win32.ActiveCfg = Release|Win32 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Release|Win32.Build.0 = Release|Win32 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Release|x64.ActiveCfg = Release|x64 - {8544F1FF-F2A5-42D8-A568-C56B5D3B4181}.Release|x64.Build.0 = Release|x64 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|Win32.ActiveCfg = Debug|Win32 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|Win32.Build.0 = Debug|Win32 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|x64.ActiveCfg = Debug|x64 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|x64.Build.0 = Debug|x64 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.DebugFast|x64.Build.0 = DebugFast|x64 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|Win32.ActiveCfg = Release|Win32 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|Win32.Build.0 = Release|Win32 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|x64.ActiveCfg = Release|x64 - {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|x64.Build.0 = Release|x64 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Debug|Win32.ActiveCfg = Debug|Win32 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Debug|Win32.Build.0 = Debug|Win32 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Debug|x64.ActiveCfg = Debug|x64 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Debug|x64.Build.0 = Debug|x64 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.DebugFast|x64.Build.0 = DebugFast|x64 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Release|Win32.ActiveCfg = Release|Win32 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Release|Win32.Build.0 = Release|Win32 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Release|x64.ActiveCfg = Release|x64 - {D8890B98-26F7-4CFF-BBFB-B95F371B5F20}.Release|x64.Build.0 = Release|x64 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Debug|Win32.ActiveCfg = Debug|Win32 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Debug|Win32.Build.0 = Debug|Win32 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Debug|x64.ActiveCfg = Debug|x64 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Debug|x64.Build.0 = Debug|x64 - {3E1339F5-9311-4122-9442-369702E8FCAD}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {3E1339F5-9311-4122-9442-369702E8FCAD}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {3E1339F5-9311-4122-9442-369702E8FCAD}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {3E1339F5-9311-4122-9442-369702E8FCAD}.DebugFast|x64.Build.0 = DebugFast|x64 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Release|Win32.ActiveCfg = Release|Win32 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Release|Win32.Build.0 = Release|Win32 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Release|x64.ActiveCfg = Release|x64 - {3E1339F5-9311-4122-9442-369702E8FCAD}.Release|x64.Build.0 = Release|x64 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Debug|Win32.ActiveCfg = Debug|Win32 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Debug|Win32.Build.0 = Debug|Win32 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Debug|x64.ActiveCfg = Debug|x64 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Debug|x64.Build.0 = Debug|x64 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.DebugFast|x64.Build.0 = DebugFast|x64 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Release|Win32.ActiveCfg = Release|Win32 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Release|Win32.Build.0 = Release|Win32 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Release|x64.ActiveCfg = Release|x64 - {3E5C4E02-1BA9-4776-BDBE-E3F91FFA34CF}.Release|x64.Build.0 = Release|x64 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|Win32.Build.0 = Debug|Win32 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|x64.ActiveCfg = Debug|x64 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|x64.Build.0 = Debug|x64 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.DebugFast|x64.Build.0 = DebugFast|x64 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|Win32.ActiveCfg = Release|Win32 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|Win32.Build.0 = Release|Win32 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|x64.ActiveCfg = Release|x64 - {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|x64.Build.0 = Release|x64 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Debug|Win32.ActiveCfg = Debug|Win32 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Debug|Win32.Build.0 = Debug|Win32 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Debug|x64.ActiveCfg = Debug|x64 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Debug|x64.Build.0 = Debug|x64 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.DebugFast|x64.Build.0 = DebugFast|x64 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Release|Win32.ActiveCfg = Release|Win32 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Release|Win32.Build.0 = Release|Win32 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Release|x64.ActiveCfg = Release|x64 - {8C60E805-0DA5-4E25-8F84-038DB504BB0D}.Release|x64.Build.0 = Release|x64 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Debug|Win32.ActiveCfg = Debug|Win32 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Debug|Win32.Build.0 = Debug|Win32 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Debug|x64.ActiveCfg = Debug|x64 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Debug|x64.Build.0 = Debug|x64 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.DebugFast|x64.Build.0 = DebugFast|x64 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Release|Win32.ActiveCfg = Release|Win32 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Release|Win32.Build.0 = Release|Win32 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Release|x64.ActiveCfg = Release|x64 - {CD3D4C3C-1027-4D33-B047-AEC7B56D0BF6}.Release|x64.Build.0 = Release|x64 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Debug|Win32.ActiveCfg = Debug|Win32 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Debug|Win32.Build.0 = Debug|Win32 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Debug|x64.ActiveCfg = Debug|x64 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Debug|x64.Build.0 = Debug|x64 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.DebugFast|x64.Build.0 = DebugFast|x64 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Release|Win32.ActiveCfg = Release|Win32 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Release|Win32.Build.0 = Release|Win32 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Release|x64.ActiveCfg = Release|x64 - {B6398059-EBB6-4C34-B547-95F365B71FF4}.Release|x64.Build.0 = Release|x64 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Debug|Win32.ActiveCfg = Debug|Win32 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Debug|Win32.Build.0 = Debug|Win32 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Debug|x64.ActiveCfg = Debug|x64 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Debug|x64.Build.0 = Debug|x64 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.DebugFast|x64.Build.0 = DebugFast|x64 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Release|Win32.ActiveCfg = Release|Win32 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Release|Win32.Build.0 = Release|Win32 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Release|x64.ActiveCfg = Release|x64 - {9A4C733C-BADE-4AC6-B58A-6E274395E90E}.Release|x64.Build.0 = Release|x64 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Debug|Win32.ActiveCfg = Debug|Win32 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Debug|Win32.Build.0 = Debug|Win32 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Debug|x64.ActiveCfg = Debug|x64 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Debug|x64.Build.0 = Debug|x64 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.DebugFast|x64.Build.0 = DebugFast|x64 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Release|Win32.ActiveCfg = Release|Win32 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Release|Win32.Build.0 = Release|Win32 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Release|x64.ActiveCfg = Release|x64 - {1909CD2D-1707-456F-86CA-0DF42A727C99}.Release|x64.Build.0 = Release|x64 - {9E9DA440-E9AD-413C-B648-91030E792211}.Debug|Win32.ActiveCfg = Debug|Win32 - {9E9DA440-E9AD-413C-B648-91030E792211}.Debug|Win32.Build.0 = Debug|Win32 - {9E9DA440-E9AD-413C-B648-91030E792211}.Debug|x64.ActiveCfg = Debug|x64 - {9E9DA440-E9AD-413C-B648-91030E792211}.Debug|x64.Build.0 = Debug|x64 - {9E9DA440-E9AD-413C-B648-91030E792211}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {9E9DA440-E9AD-413C-B648-91030E792211}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {9E9DA440-E9AD-413C-B648-91030E792211}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {9E9DA440-E9AD-413C-B648-91030E792211}.DebugFast|x64.Build.0 = DebugFast|x64 - {9E9DA440-E9AD-413C-B648-91030E792211}.Release|Win32.ActiveCfg = Release|Win32 - {9E9DA440-E9AD-413C-B648-91030E792211}.Release|Win32.Build.0 = Release|Win32 - {9E9DA440-E9AD-413C-B648-91030E792211}.Release|x64.ActiveCfg = Release|x64 - {9E9DA440-E9AD-413C-B648-91030E792211}.Release|x64.Build.0 = Release|x64 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Debug|Win32.ActiveCfg = Debug|Win32 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Debug|Win32.Build.0 = Debug|Win32 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Debug|x64.ActiveCfg = Debug|x64 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Debug|x64.Build.0 = Debug|x64 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.DebugFast|x64.Build.0 = DebugFast|x64 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Release|Win32.ActiveCfg = Release|Win32 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Release|Win32.Build.0 = Release|Win32 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Release|x64.ActiveCfg = Release|x64 - {B39AC394-5DB5-4DA9-9D98-09D46CA3701F}.Release|x64.Build.0 = Release|x64 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Debug|Win32.ActiveCfg = Release|Win32 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Debug|Win32.Build.0 = Release|Win32 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Debug|x64.ActiveCfg = Release|x64 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Debug|x64.Build.0 = Release|x64 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.DebugFast|Win32.ActiveCfg = Release|Win32 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.DebugFast|Win32.Build.0 = Release|Win32 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.DebugFast|x64.ActiveCfg = Release|x64 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.DebugFast|x64.Build.0 = Release|x64 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Release|Win32.ActiveCfg = Release|Win32 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Release|Win32.Build.0 = Release|Win32 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Release|x64.ActiveCfg = Release|x64 - {0B8D0A82-C520-46BA-849D-3BB8F637EE0C}.Release|x64.Build.0 = Release|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.ActiveCfg = Debug|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.Build.0 = Debug|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.ActiveCfg = Debug|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.Build.0 = Debug|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|x64.Build.0 = DebugFast|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|Win32.ActiveCfg = Release|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|Win32.Build.0 = Release|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.ActiveCfg = Release|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.Build.0 = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.ActiveCfg = Debug|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.Build.0 = Debug|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.ActiveCfg = Debug|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.Build.0 = Debug|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|x64.Build.0 = DebugFast|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.ActiveCfg = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.Build.0 = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.ActiveCfg = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.Build.0 = Release|x64 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Debug|Win32.ActiveCfg = Debug|Win32 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Debug|Win32.Build.0 = Debug|Win32 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Debug|x64.ActiveCfg = Debug|x64 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Debug|x64.Build.0 = Debug|x64 - {01573C36-AC6E-49F6-94BA-572517EB9740}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {01573C36-AC6E-49F6-94BA-572517EB9740}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {01573C36-AC6E-49F6-94BA-572517EB9740}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {01573C36-AC6E-49F6-94BA-572517EB9740}.DebugFast|x64.Build.0 = DebugFast|x64 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Release|Win32.ActiveCfg = Release|Win32 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Release|Win32.Build.0 = Release|Win32 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Release|x64.ActiveCfg = Release|x64 - {01573C36-AC6E-49F6-94BA-572517EB9740}.Release|x64.Build.0 = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|Win32.ActiveCfg = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|Win32.Build.0 = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|x64.ActiveCfg = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Debug|x64.Build.0 = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|Win32.ActiveCfg = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|Win32.Build.0 = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|x64.ActiveCfg = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.DebugFast|x64.Build.0 = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|Win32.ActiveCfg = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|Win32.Build.0 = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|x64.ActiveCfg = Release|x64 - {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|x64.Build.0 = Release|x64 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|Win32.ActiveCfg = Debug|Win32 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|Win32.Build.0 = Debug|Win32 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|x64.ActiveCfg = Debug|x64 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|x64.Build.0 = Debug|x64 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|Win32.ActiveCfg = Debug|Win32 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|Win32.Build.0 = Debug|Win32 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|x64.ActiveCfg = Release|x64 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|x64.Build.0 = Release|x64 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|Win32.ActiveCfg = Release|Win32 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|Win32.Build.0 = Release|Win32 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|x64.ActiveCfg = Release|x64 - {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|x64.Build.0 = Release|x64 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|Win32.ActiveCfg = Debug|Win32 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|Win32.Build.0 = Debug|Win32 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|x64.ActiveCfg = Debug|x64 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|x64.Build.0 = Debug|x64 - {46CF2D25-6A36-4189-B59C-E4815388E554}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {46CF2D25-6A36-4189-B59C-E4815388E554}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {46CF2D25-6A36-4189-B59C-E4815388E554}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {46CF2D25-6A36-4189-B59C-E4815388E554}.DebugFast|x64.Build.0 = DebugFast|x64 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|Win32.ActiveCfg = Release|Win32 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|Win32.Build.0 = Release|Win32 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|x64.ActiveCfg = Release|x64 - {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|x64.Build.0 = Release|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|Win32.ActiveCfg = Debug|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|Win32.Build.0 = Debug|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|x64.ActiveCfg = Debug|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|x64.Build.0 = Debug|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|Win32.ActiveCfg = Debug|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|x64.ActiveCfg = Debug|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|x64.Build.0 = Debug|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|Win32.ActiveCfg = Release|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|Win32.Build.0 = Release|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|x64.ActiveCfg = Release|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|x64.Build.0 = Release|x64 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Debug|Win32.ActiveCfg = Debug|Win32 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Debug|Win32.Build.0 = Debug|Win32 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Debug|x64.ActiveCfg = Debug|x64 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Debug|x64.Build.0 = Debug|x64 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.DebugFast|Win32.ActiveCfg = Debug|Win32 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.DebugFast|Win32.Build.0 = Debug|Win32 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.DebugFast|x64.ActiveCfg = Debug|x64 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.DebugFast|x64.Build.0 = Debug|x64 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Release|Win32.ActiveCfg = Release|Win32 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Release|Win32.Build.0 = Release|Win32 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Release|x64.ActiveCfg = Release|x64 - {A680190D-0764-485B-9CF3-A82C5EDD5715}.Release|x64.Build.0 = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.DebugFast|x64.Build.0 = DebugFast|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 - {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Source/TestSuite/ASM/source/Init.cpp b/Source/TestSuite/ASM/source/Init.cpp index cd2ab852b1..610e7b5bb1 100644 --- a/Source/TestSuite/ASM/source/Init.cpp +++ b/Source/TestSuite/ASM/source/Init.cpp @@ -38,29 +38,29 @@ void init_crap() { VIDEO_Init(); WPAD_Init(); PAD_Init(); - + // Obtain the preferred video mode from the system // This will correspond to the settings in the Wii menu rmode = VIDEO_GetPreferredMode(NULL); - + // Allocate memory for the display in the uncached region xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); - + // Initialise the console, required for printf console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ); - + // Set up the video registers with the chosen mode VIDEO_Configure(rmode); - + // Tell the video hardware where our display memory is VIDEO_SetNextFramebuffer(xfb); - + // Make the display visible VIDEO_SetBlack(FALSE); - + // Flush the video register changes to the hardware VIDEO_Flush(); - + // Wait for Video setup to complete VIDEO_WaitVSync(); if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync(); diff --git a/Source/TestSuite/ASM/source/asm_tables.cpp b/Source/TestSuite/ASM/source/asm_tables.cpp index 6f3c1accef..d775b138aa 100644 --- a/Source/TestSuite/ASM/source/asm_tables.cpp +++ b/Source/TestSuite/ASM/source/asm_tables.cpp @@ -59,22 +59,22 @@ void ShowModifies(u32 inst) void RunInstruction(u32 inst) { u32 inval1, inval2, inval3; - + u32 outval = 0; - + // CR0 u32 cr1 = 0, cr2 = 0; - + //CR1 u32 cr11 = 0, cr12 = 0; - + //XER u32 xer1 = 0, xer2 = 0; - + bool modCR0 = instructions[inst].Modifies & MOD_CR0; bool modCR1 = instructions[inst].Modifies & MOD_CR1; bool modXER = instructions[inst].Modifies & MOD_XER; - + if(instructions[inst].numInput != 3) { Print("Don't support Input not 3 yet~!\n"); @@ -92,7 +92,7 @@ void RunInstruction(u32 inst) f = fopen(temp, "wb"); if (!f) printf("unable to open output file\n"); - + printf("%s: InputNum: %d Modifies(flags): ", instructions[inst].name, instructions[inst].numInput); if(f) fprintf(f, "%s: InputNum: %d Modifies(flags): ", instructions[inst].name, instructions[inst].numInput); @@ -119,7 +119,7 @@ void RunInstruction(u32 inst) //Actually call instruction instructions[inst].Call(&outval, &inval1, &inval2, 0); - + // Get flags after if(modCR0) cr2 = GetCR0(); @@ -130,7 +130,7 @@ void RunInstruction(u32 inst) // Print out value printf(":o=%08x\n\t", outval); - + // show off flag changes if(modCR0) printf("CR0:(%08x ~ %08x)", cr1,cr2); @@ -138,8 +138,8 @@ void RunInstruction(u32 inst) printf("CR1:(%08x ~ %08x)", cr11,cr12); if(modXER) printf("XER:(%08x ~ %08x)", xer1, xer2); - - + + // same in the file if(f) { diff --git a/Source/TestSuite/ASM/source/asm_tables.h b/Source/TestSuite/ASM/source/asm_tables.h index 1f47a4c406..62dde85be1 100644 --- a/Source/TestSuite/ASM/source/asm_tables.h +++ b/Source/TestSuite/ASM/source/asm_tables.h @@ -32,7 +32,7 @@ struct inst inst_type type; void (*Call)(u32*, u32*, u32*, u32*); void (*CallFP)(float*, float*, float*, float*); - + }; static inst instructions[] = { diff --git a/Source/TestSuite/ASM/source/dolphintest_asm.cpp b/Source/TestSuite/ASM/source/dolphintest_asm.cpp index da3afdf73e..8bedaf0a69 100644 --- a/Source/TestSuite/ASM/source/dolphintest_asm.cpp +++ b/Source/TestSuite/ASM/source/dolphintest_asm.cpp @@ -31,13 +31,13 @@ int main(int argc, char **argv) { init_crap(); initialise_fat(); - + for (uint a = 0; a < sizeof(instructions) / sizeof(inst); ++a) { RunInstruction(a); } - + end(); - + return 0; } diff --git a/Source/TestSuite/AX/source/dolphintest_ax.cpp b/Source/TestSuite/AX/source/dolphintest_ax.cpp index 0b4b4152bb..b97e7e33e6 100644 --- a/Source/TestSuite/AX/source/dolphintest_ax.cpp +++ b/Source/TestSuite/AX/source/dolphintest_ax.cpp @@ -23,7 +23,7 @@ int main(int argc, char **argv) { while(1) { PAD_ScanPads(); VIDEO_ClearFrameBuffer(rmode, xfb, 0); - + VIDEO_WaitVSync(); } @@ -37,12 +37,12 @@ void * Initialise() { VIDEO_Init(); PAD_Init(); - + rmode = VIDEO_GetPreferredMode(NULL); framebuffer = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); console_init(framebuffer,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ); - + VIDEO_Configure(rmode); VIDEO_SetNextFramebuffer(framebuffer); VIDEO_SetBlack(FALSE); diff --git a/Source/TestSuite/FPU/source/asm.h b/Source/TestSuite/FPU/source/asm.h index 2feed006f4..ed28f7895b 100644 --- a/Source/TestSuite/FPU/source/asm.h +++ b/Source/TestSuite/FPU/source/asm.h @@ -191,7 +191,7 @@ #define STATE_OFFSET 204 #define MODE_OFFSET 206 - + #define FPR0_OFFSET 208 #define FPR1_OFFSET 216 #define FPR2_OFFSET 224 @@ -267,13 +267,13 @@ #define EXCEPTION_FRAME_END 728 #define IBAT0U 528 -#define IBAT0L 529 -#define IBAT1U 530 -#define IBAT1L 531 -#define IBAT2U 532 -#define IBAT2L 533 -#define IBAT3U 534 -#define IBAT3L 535 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 #define IBAT4U 560 #define IBAT4L 561 #define IBAT5U 562 @@ -284,12 +284,12 @@ #define IBAT7L 567 #define DBAT0U 536 -#define DBAT0L 537 -#define DBAT1U 538 -#define DBAT1L 539 -#define DBAT2U 540 -#define DBAT2L 541 -#define DBAT3U 542 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 539 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 #define DBAT3L 543 #define DBAT4U 568 #define DBAT4L 569 @@ -302,7 +302,7 @@ #define HID0 1008 #define HID1 1009 -#define HID2 920 +#define HID2 920 #define HID4 1011 #define GQR0 912 diff --git a/Source/TestSuite/PAD/source/dolphintest_pad.cpp b/Source/TestSuite/PAD/source/dolphintest_pad.cpp index ef85a4c356..1643206b3b 100644 --- a/Source/TestSuite/PAD/source/dolphintest_pad.cpp +++ b/Source/TestSuite/PAD/source/dolphintest_pad.cpp @@ -58,7 +58,7 @@ int main() (pad[a].button & PAD_BUTTON_LEFT ? "Left " : "")<< (pad[a].button & PAD_BUTTON_RIGHT ? "Right " : "")<ir.angle<<" deg\n"; drawdot(screen_buffer, rmode, rmode->fbWidth, rmode->xfbHeight, wd->ir.x, wd->ir.y, COLOR_RED); - drawdot(screen_buffer, rmode, rmode->fbWidth, rmode->xfbHeight, wd->ir.x + 10*sinf(theta), wd->ir.y - 10*cosf(theta), COLOR_BLUE); + drawdot(screen_buffer, rmode, rmode->fbWidth, rmode->xfbHeight, wd->ir.x + 10*sinf(theta), wd->ir.y - 10*cosf(theta), COLOR_BLUE); } else { std::cout<<" No Cursor\n\n"; } diff --git a/Source/UnitTests/AudioJitTests.cpp b/Source/UnitTests/AudioJitTests.cpp index 7712f59fc3..f078e8541b 100644 --- a/Source/UnitTests/AudioJitTests.cpp +++ b/Source/UnitTests/AudioJitTests.cpp @@ -86,7 +86,7 @@ void sbset() tester.Report(); } -void nx_s() +void nx_s() { DSPJitTester tester(0x8000, 0x0020); tester.AddTestData(DSP_REG_AR0); @@ -96,7 +96,7 @@ void nx_s() tester.Report(); } -void nx_sn() +void nx_sn() { DSPJitTester tester(0x8000, 0x0024); tester.AddTestData(DSP_REG_AR0); @@ -107,7 +107,7 @@ void nx_sn() tester.Report(); } -void nx_l() +void nx_l() { DSPJitTester tester(0x8000, 0x0040); @@ -118,7 +118,7 @@ void nx_l() tester.Report(); } -void set16_l() +void set16_l() { DSPJitTester tester(0x8e00, 0x0070); @@ -131,7 +131,7 @@ void set16_l() tester.Report(); } -void nx_ln() +void nx_ln() { DSPJitTester tester(0x8000, 0x0044); tester.AddTestData(DSP_REG_AR0); @@ -142,7 +142,7 @@ void nx_ln() tester.Report(); } -void nx_ls() +void nx_ls() { DSPJitTester tester1(0x8000, 0x0080); tester1.AddTestData(DSP_REG_ACM0); @@ -159,7 +159,7 @@ void nx_ls() tester2.Report(); } -void nx_lsn() +void nx_lsn() { DSPJitTester tester1(0x8000, 0x0084); tester1.AddTestData(DSP_REG_ACM0); @@ -177,7 +177,7 @@ void nx_lsn() tester2.Report(); } -void nx_lsm() +void nx_lsm() { DSPJitTester tester1(0x8000, 0x0088); tester1.AddTestData(DSP_REG_ACM0); @@ -195,7 +195,7 @@ void nx_lsm() tester2.Report(); } -void nx_lsnm() +void nx_lsnm() { DSPJitTester tester1(0x8000, 0x008c); tester1.AddTestData(DSP_REG_ACM0); @@ -214,7 +214,7 @@ void nx_lsnm() tester2.Report(); } -void nx_sl() +void nx_sl() { DSPJitTester tester1(0x8000, 0x0082); tester1.AddTestData(DSP_REG_ACM0); @@ -231,7 +231,7 @@ void nx_sl() tester2.Report(); } -void nx_sln() +void nx_sln() { DSPJitTester tester1(0x8000, 0x0086); tester1.AddTestData(DSP_REG_ACM0); @@ -249,7 +249,7 @@ void nx_sln() tester2.Report(); } -void nx_slm() +void nx_slm() { DSPJitTester tester1(0x8000, 0x008a); tester1.AddTestData(DSP_REG_ACM0); @@ -267,7 +267,7 @@ void nx_slm() tester2.Report(); } -void nx_slnm() +void nx_slnm() { DSPJitTester tester1(0x8000, 0x008e); tester1.AddTestData(DSP_REG_ACM0); @@ -286,7 +286,7 @@ void nx_slnm() tester2.Report(); } -void nx_ld() +void nx_ld() { DSPJitTester tester1(0x8000, 0x00c0); tester1.AddTestData(DSP_REG_AXL0,0xdead); diff --git a/Source/UnitTests/DSPJitTester.cpp b/Source/UnitTests/DSPJitTester.cpp index 8980391c56..a0c37057c5 100644 --- a/Source/UnitTests/DSPJitTester.cpp +++ b/Source/UnitTests/DSPJitTester.cpp @@ -6,8 +6,8 @@ DSPJitTester::DSPJitTester(u16 opcode, u16 opcode_ext, bool verbose, bool only_f instruction = opcode | opcode_ext; opcode_template = GetOpTemplate(instruction); sprintf(instruction_name, "%s", opcode_template->name); - if (opcode_template->extended) - sprintf(&instruction_name[strlen(instruction_name)], "'%s", + if (opcode_template->extended) + sprintf(&instruction_name[strlen(instruction_name)], "'%s", extOpTable[instruction & (((instruction >> 12) == 0x3) ? 0x7F : 0xFF)]->name); } bool DSPJitTester::Test(SDSP dsp_settings) @@ -17,7 +17,7 @@ bool DSPJitTester::Test(SDSP dsp_settings) printf("Running %s: ", instruction_name); DumpRegs(dsp_settings); } - + last_input_dsp = dsp_settings; last_int_dsp = RunInterpreter(dsp_settings); last_jit_dsp = RunJit(dsp_settings); diff --git a/Source/UnitTests/DSPJitTester.h b/Source/UnitTests/DSPJitTester.h index ac40fa41c0..e507d6dca8 100644 --- a/Source/UnitTests/DSPJitTester.h +++ b/Source/UnitTests/DSPJitTester.h @@ -1,62 +1,62 @@ // How to use the DSPJitTester: -// +// // == Before running == // Make sure to call Initialize to set initial stuff required by int and jit: // DSPJitTester::Initialize(); -// +// // == Creation of a testcase == // Create a testcase for a normal operation: // DSPJitTester tester(0x0004); //taken from DSPTables.cpp, opcodes[] -// +// // Create a testcase for an extended operation: // DSPJitTester tester(0x8000, 0x0004); //NX from opcodes, DR from opcodes_ext -// +// // By default, no messages are written. // To log all operations, set verbose to true: // DSPJitTester tester(0x8000, 0x0004, true); -// +// // You can also choose to only print failing tests: // DSPJitTester tester(0x8000, 0x0004, verbosity_setting, true); -// verbose = true will give the same output as verbose, +// verbose = true will give the same output as verbose, // while verbose = false will only (really!) print failing tests. -// +// // == Setting up values == // You can set the tester up with values for each DSP register: // tester.AddTestData(DSP_REG_ACC0, 1); // tester.AddTestData(DSP_REG_ACC0, 2); // tester.AddTestData(DSP_REG_ACC0, 3); -// +// // You can also choose to have a few predefined values added for a register: // tester.AddTestData(DSP_REG_ACC0); //see the method body for the values added -// +// // == Running the tests == -// After setup, you can either run JIT against the interpreter +// After setup, you can either run JIT against the interpreter // using all predefined register values, pass your own set of // registers or run either of the two independently from each other. -// +// // int failed_tests = tester.TestAll(); //run jit against int, using values from AddTestData // int failed_tests = tester.TestAll(true); //override the value for only_failed to show failure -// +// // SDSP dsp = GetCustomSetOfRegisters(); // bool success = tester.Test(dsp); //run jit against int, using a custom set of register values -// +// // SDSP result = tester.RunInterpreter(dsp); //run int alone // SDSP result = tester.RunJit(dsp); //run jit alone -// +// // == Examining results == // When either verbose or only_failed is set to true, the tester will automatically report // failure to stdout, along with input registers and the differences in output registers. -// +// // tester.Report(); //display a small report afterwards -// +// // SDSP int = tester.GetLastInterpreterDSP(); //examine the DSP set left after running int // SDSP jit = tester.GetLastJitDSP(); //same for jit -// +// // int tests_run = tester.GetRunCount(); // int tests_failed = tester.GetFailCount(); // const char* tested_instruction = tester.GetInstructionName(); // printf("%s ran %d tests and failed %d times\n", tested_instruction, tests_run, tests_failed); -// +// // tester.DumpJittedCode(); //prints the code bytes produced by jit (examine with udcli/udis86 or similar) #ifndef __DSP_JIT_TESTER_ diff --git a/Source/VSProps/Base.props b/Source/VSProps/Base.props index e1201912fd..2ee5bd8e8e 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -1,28 +1,122 @@  - + - + + false + + D + $(SolutionDir)..\Build\ + $(SolutionDir)..\Binary\ + $(BinaryRootDir)$(Platform)\ + $(SolutionDir)..\Externals\ + $(SolutionDir)Core\ + - $(Platform)\$(Configuration)\ - $(SolutionDir)$(Platform)\$(Configuration)\ + + $(BuildRootDir)$(Platform)\$(Configuration)\$(ProjectName)\ + $(IntDir)bin\ + $(ProjectName)$(TargetSuffix) + - _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;USE_UPNP;%(PreprocessorDefinitions) + + $(CoreDir)AudioCommon\Src;%(AdditionalIncludeDirectories) + $(CoreDir)Common\Src;%(AdditionalIncludeDirectories) + $(CoreDir)Core\Src;%(AdditionalIncludeDirectories) + $(CoreDir)DiscIO\Src;%(AdditionalIncludeDirectories) + $(CoreDir)DolphinWX\Src;%(AdditionalIncludeDirectories) + $(CoreDir)InputCommon\Src;%(AdditionalIncludeDirectories) + $(CoreDir)VideoBackends\D3D\Src;%(AdditionalIncludeDirectories) + $(CoreDir)VideoBackends\OGL\Src;%(AdditionalIncludeDirectories) + $(CoreDir)VideoBackends\Software\Src;%(AdditionalIncludeDirectories) + $(CoreDir)VideoCommon\Src;%(AdditionalIncludeDirectories) + $(ExternalsDir);%(AdditionalIncludeDirectories) + $(ExternalsDir)Bochs_disasm;%(AdditionalIncludeDirectories) + $(ExternalsDir)CLRun\include;%(AdditionalIncludeDirectories) + $(ExternalsDir)GLew\include;%(AdditionalIncludeDirectories) + $(ExternalsDir)libusbx\libusb;%(AdditionalIncludeDirectories) + $(ExternalsDir)LZO;%(AdditionalIncludeDirectories) + $(ExternalsDir)miniupnpc\src;%(AdditionalIncludeDirectories) + $(ExternalsDir)polarssl\include;%(AdditionalIncludeDirectories) + $(ExternalsDir)portaudio\include;%(AdditionalIncludeDirectories) + $(ExternalsDir)SDL2-2.0.1\include;%(AdditionalIncludeDirectories) + $(ExternalsDir)SFML\include;%(AdditionalIncludeDirectories) + $(ExternalsDir)SOIL;%(AdditionalIncludeDirectories) + $(ExternalsDir)wxWidgets3;%(AdditionalIncludeDirectories) + $(ExternalsDir)wxWidgets3\Include;%(AdditionalIncludeDirectories) + $(ExternalsDir)zlib;%(AdditionalIncludeDirectories) + + + HAVE_DXSDK;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + USE_UPNP;%(PreprocessorDefinitions) Level3 true 16Bytes - true false + false true + /d2Zi+ /volatile:iso %(AdditionalOptions) + ProgramDatabase + + 4996 + true + + + _LIB;%(PreprocessorDefinitions) + + + + true + _DEBUG;_SECURE_SCL=1;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Disabled + + + + true + AnySuitable + Speed + true + true + true + MultiThreadedDLL + false + false + _SECURE_SCL=0;%(PreprocessorDefinitions) + + StreamingSIMDExtensions2 + + true - 0x00400000 + true - - ..\..\..\Externals\wxWidgets3\include;%(AdditionalIncludeDirectories) - + + + UseLinkTimeCodeGeneration + true + true + + + true + true + \ No newline at end of file diff --git a/Source/VSProps/CodeGen_Debug.props b/Source/VSProps/CodeGen_Debug.props deleted file mode 100644 index adbaeec9b2..0000000000 --- a/Source/VSProps/CodeGen_Debug.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - _DEBUG;_SECURE_SCL=1;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - MultiThreadedDebug - Disabled - false - - - - - \ No newline at end of file diff --git a/Source/VSProps/CodeGen_DebugFast.props b/Source/VSProps/CodeGen_DebugFast.props deleted file mode 100644 index 2c580c327d..0000000000 --- a/Source/VSProps/CodeGen_DebugFast.props +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - <_PropertySheetDisplayName>CodeGen_DebugFast - - - - DEBUGFAST;_SECURE_SCL=0;%(PreprocessorDefinitions) - MultiThreaded - false - - - - - \ No newline at end of file diff --git a/Source/VSProps/CodeGen_Release.props b/Source/VSProps/CodeGen_Release.props deleted file mode 100644 index 2b69dc0f63..0000000000 --- a/Source/VSProps/CodeGen_Release.props +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - <_PropertySheetDisplayName>CodeGen_Release - - - - AnySuitable - true - Speed - true - true - true - false - MultiThreaded - false - false - _SECURE_SCL=0;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - StreamingSIMDExtensions2 - - - true - true - - - - \ No newline at end of file diff --git a/Source/VSProps/Dolphin.Win32.props b/Source/VSProps/Dolphin.Win32.props deleted file mode 100644 index 8bd2334547..0000000000 --- a/Source/VSProps/Dolphin.Win32.props +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - ..\..\..\Binary\$(PlatformName)\ - - - - ..\..\..\Externals\SDL\$(PlatformName);..\..\..\Externals\GLew;..\..\..\Externals\portaudio\$(PlatformName)\$(ConfigurationName);..\..\..\Externals\libusbx\$(PlatformName)\$(ConfigurationName);..\..\..\Externals\polarssl\visualc\VS2010\$(PlatformName)\$(ConfigurationName) - portaudio.lib;dsound.lib;dxerr.lib;iphlpapi.lib;winmm.lib;setupapi.lib;xinput.lib;vfw32.lib;opengl32.lib;glew32s.lib;glu32.lib;rpcrt4.lib;comctl32.lib;PolarSSL.lib;%(AdditionalDependencies) - - - - \ No newline at end of file diff --git a/Source/VSProps/Dolphin.x64.props b/Source/VSProps/Dolphin.x64.props deleted file mode 100644 index ca50df6b83..0000000000 --- a/Source/VSProps/Dolphin.x64.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - <_PropertySheetDisplayName>Dolphin.x64 - ..\..\..\Binary\$(PlatformName)\ - - - - ..\..\..\Externals\SDL\$(PlatformName);..\..\..\Externals\GLew;..\..\..\Externals\portaudio\$(PlatformName)\$(ConfigurationName);..\..\..\Externals\polarssl\visualc\VS2010\$(PlatformName)\$(ConfigurationName) - portaudio.lib;dsound.lib;dxerr.lib;iphlpapi.lib;winmm.lib;setupapi.lib;xinput.lib;vfw32.lib;opengl32.lib;glew64s.lib;glu32.lib;rpcrt4.lib;comctl32.lib;PolarSSL.lib;%(AdditionalDependencies) - - - - \ No newline at end of file diff --git a/Source/VSProps/PrecompiledHeader.props b/Source/VSProps/PrecompiledHeader.props index c305a1f4c5..39ad2a5035 100644 --- a/Source/VSProps/PrecompiledHeader.props +++ b/Source/VSProps/PrecompiledHeader.props @@ -1,10 +1,11 @@  - + + Use stdafx.h diff --git a/Source/VSProps/WXWOverrides.props b/Source/VSProps/WXWOverrides.props index d979a83c43..2fb4b31762 100644 --- a/Source/VSProps/WXWOverrides.props +++ b/Source/VSProps/WXWOverrides.props @@ -1,18 +1,14 @@  - + - - $(ProjectName)$(Platform)\$(Configuration)\ - - - + wx/wxprec.h Async - 4267 - _LIB;__WXMSW__;WXBUILDING;%(PreprocessorDefinitions) + 4267;%(DisableSpecificWarnings) + __WXMSW__;WXBUILDING;%(PreprocessorDefinitions) ..\..\;..\..\include;..\..\..\zlib;..\..\..\libpng diff --git a/Source/dolphin-emu.sln b/Source/dolphin-emu.sln new file mode 100644 index 0000000000..97618922dd --- /dev/null +++ b/Source/dolphin-emu.sln @@ -0,0 +1,320 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DolphinWX", "Core\DolphinWX\DolphinWX.vcxproj", "{47411FDB-1BF2-48D0-AB4E-C7C41160F898}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core\Core.vcxproj", "{E54CF649-140E-4255-81A5-30A673C1FB36}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioCommon", "Core\AudioCommon\AudioCommon.vcxproj", "{54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcxproj", "{2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DiscIO", "Core\DiscIO\DiscIO.vcxproj", "{160BDC25-5626-4B0D-BDD8-2953D9777FB5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InputCommon", "Core\InputCommon\InputCommon.vcxproj", "{6BBD47CF-91FD-4077-B676-8B76980178A9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoCommon", "Core\VideoCommon\VideoCommon.vcxproj", "{3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Externals", "Externals", "{87ADDFF9-5768-4DA2-A33B-2477593D6677}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Bochs_disasm", "..\Externals\Bochs_disasm\Bochs_disasm.vcxproj", "{8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Languages", "..\Languages\Languages.vcxproj", "{0E033BE3-2E08-428E-9AE9-BC673EFA12B5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dolphin Core", "Dolphin Core", "{15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LZO", "..\Externals\LZO\LZO.vcxproj", "{AB993F38-C31D-4897-B139-A620C42BC565}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniupnpc", "..\Externals\miniupnpc\miniupnpc.vcxproj", "{31643FDB-1BB8-4965-9DE7-000FC88D35AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "png", "..\Externals\libpng\png\png.vcxproj", "{4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SOIL", "..\Externals\SOIL\SOIL.vcxproj", "{B441CC62-877E-4B3F-93E0-0DE80544F705}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\Externals\zlib\zlib.vcxproj", "{FF213B23-2C26-4214-9F88-85271E557E87}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "..\Externals\soundtouch\SoundTouch.vcxproj", "{EC082900-B4D8-42E9-9663-77F02F6936AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxWidgets", "..\Externals\wxWidgets3\build\msw\wx_base.vcxproj", "{1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PolarSSL", "..\Externals\polarssl\visualc\PolarSSL.vcxproj", "{BDB6578B-0691-4E80-A46C-DF21639FD3B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SCMRevGen", "Core\Common\SCMRevGen.vcxproj", "{41279555-F94F-4EBC-99DE-AF863C10C5C4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SFML_Network", "..\Externals\SFML\build\vc2010\SFML_Network.vcxproj", "{93D73454-2512-424E-9CDA-4BB357FE13DD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CLRun", "..\Externals\CLRun\clrun\CLRun.vcxproj", "{AA862E5E-A993-497A-B6A0-0E8E94B10050}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0", "..\Externals\libusbx\msvc\libusb_static_2013.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew", "..\Externals\GLew\glew.vcxproj", "{2A3F751D-69E9-45F2-9199-9A00BFB6CC72}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "..\Externals\portaudio\build\portaudio.vcxproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPTool", "DSPTool\DSPTool.vcxproj", "{1970D175-3DE8-4738-942A-4D98D1CDBF64}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "D3D", "Core\VideoBackends\D3D\D3D.vcxproj", "{96020103-4BA5-4FD2-B4AA-5B6D24492D4E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OGL", "Core\VideoBackends\OGL\OGL.vcxproj", "{EC1A314C-5588-4506-9C1E-2E58E5817F75}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Software", "Core\VideoBackends\Software\Software.vcxproj", "{A4C423AA-F57C-46C7-A172-D1A777017D29}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Video Backends", "Video Backends", "{AAD1BCD6-9804-44A5-A5FC-4782EA00E9D4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Debug|Win32.ActiveCfg = Debug|Win32 + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Debug|Win32.Build.0 = Debug|Win32 + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Debug|x64.ActiveCfg = Debug|x64 + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Debug|x64.Build.0 = Debug|x64 + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Release|Win32.ActiveCfg = Release|Win32 + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Release|Win32.Build.0 = Release|Win32 + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Release|x64.ActiveCfg = Release|x64 + {47411FDB-1BF2-48D0-AB4E-C7C41160F898}.Release|x64.Build.0 = Release|x64 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Debug|Win32.ActiveCfg = Debug|Win32 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Debug|Win32.Build.0 = Debug|Win32 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Debug|x64.ActiveCfg = Debug|x64 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Debug|x64.Build.0 = Debug|x64 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Release|Win32.ActiveCfg = Release|Win32 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Release|Win32.Build.0 = Release|Win32 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Release|x64.ActiveCfg = Release|x64 + {E54CF649-140E-4255-81A5-30A673C1FB36}.Release|x64.Build.0 = Release|x64 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Debug|Win32.ActiveCfg = Debug|Win32 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Debug|Win32.Build.0 = Debug|Win32 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Debug|x64.ActiveCfg = Debug|x64 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Debug|x64.Build.0 = Debug|x64 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Release|Win32.ActiveCfg = Release|Win32 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Release|Win32.Build.0 = Release|Win32 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Release|x64.ActiveCfg = Release|x64 + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}.Release|x64.Build.0 = Release|x64 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Debug|Win32.ActiveCfg = Debug|Win32 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Debug|Win32.Build.0 = Debug|Win32 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Debug|x64.ActiveCfg = Debug|x64 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Debug|x64.Build.0 = Debug|x64 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Release|Win32.ActiveCfg = Release|Win32 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Release|Win32.Build.0 = Release|Win32 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Release|x64.ActiveCfg = Release|x64 + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}.Release|x64.Build.0 = Release|x64 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Debug|Win32.ActiveCfg = Debug|Win32 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Debug|Win32.Build.0 = Debug|Win32 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Debug|x64.ActiveCfg = Debug|x64 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Debug|x64.Build.0 = Debug|x64 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Release|Win32.ActiveCfg = Release|Win32 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Release|Win32.Build.0 = Release|Win32 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Release|x64.ActiveCfg = Release|x64 + {160BDC25-5626-4B0D-BDD8-2953D9777FB5}.Release|x64.Build.0 = Release|x64 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Debug|Win32.ActiveCfg = Debug|Win32 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Debug|Win32.Build.0 = Debug|Win32 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Debug|x64.ActiveCfg = Debug|x64 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Debug|x64.Build.0 = Debug|x64 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Release|Win32.ActiveCfg = Release|Win32 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Release|Win32.Build.0 = Release|Win32 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Release|x64.ActiveCfg = Release|x64 + {6BBD47CF-91FD-4077-B676-8B76980178A9}.Release|x64.Build.0 = Release|x64 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Debug|Win32.ActiveCfg = Debug|Win32 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Debug|Win32.Build.0 = Debug|Win32 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Debug|x64.ActiveCfg = Debug|x64 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Debug|x64.Build.0 = Debug|x64 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Release|Win32.ActiveCfg = Release|Win32 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Release|Win32.Build.0 = Release|Win32 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Release|x64.ActiveCfg = Release|x64 + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3}.Release|x64.Build.0 = Release|x64 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Debug|Win32.ActiveCfg = Debug|Win32 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Debug|Win32.Build.0 = Debug|Win32 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Debug|x64.ActiveCfg = Debug|x64 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Debug|x64.Build.0 = Debug|x64 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Release|Win32.ActiveCfg = Release|Win32 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Release|Win32.Build.0 = Release|Win32 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Release|x64.ActiveCfg = Release|x64 + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}.Release|x64.Build.0 = Release|x64 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Debug|Win32.ActiveCfg = Debug|Win32 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Debug|Win32.Build.0 = Debug|Win32 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Debug|x64.ActiveCfg = Debug|x64 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Debug|x64.Build.0 = Debug|x64 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Release|Win32.ActiveCfg = Release|Win32 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Release|Win32.Build.0 = Release|Win32 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Release|x64.ActiveCfg = Release|x64 + {0E033BE3-2E08-428E-9AE9-BC673EFA12B5}.Release|x64.Build.0 = Release|x64 + {AB993F38-C31D-4897-B139-A620C42BC565}.Debug|Win32.ActiveCfg = Debug|Win32 + {AB993F38-C31D-4897-B139-A620C42BC565}.Debug|Win32.Build.0 = Debug|Win32 + {AB993F38-C31D-4897-B139-A620C42BC565}.Debug|x64.ActiveCfg = Debug|x64 + {AB993F38-C31D-4897-B139-A620C42BC565}.Debug|x64.Build.0 = Debug|x64 + {AB993F38-C31D-4897-B139-A620C42BC565}.Release|Win32.ActiveCfg = Release|Win32 + {AB993F38-C31D-4897-B139-A620C42BC565}.Release|Win32.Build.0 = Release|Win32 + {AB993F38-C31D-4897-B139-A620C42BC565}.Release|x64.ActiveCfg = Release|x64 + {AB993F38-C31D-4897-B139-A620C42BC565}.Release|x64.Build.0 = Release|x64 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Debug|Win32.Build.0 = Debug|Win32 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Debug|x64.ActiveCfg = Debug|x64 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Debug|x64.Build.0 = Debug|x64 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Release|Win32.ActiveCfg = Release|Win32 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Release|Win32.Build.0 = Release|Win32 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Release|x64.ActiveCfg = Release|x64 + {31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Release|x64.Build.0 = Release|x64 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Debug|Win32.ActiveCfg = Debug|Win32 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Debug|Win32.Build.0 = Debug|Win32 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Debug|x64.ActiveCfg = Debug|x64 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Debug|x64.Build.0 = Debug|x64 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Release|Win32.ActiveCfg = Release|Win32 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Release|Win32.Build.0 = Release|Win32 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Release|x64.ActiveCfg = Release|x64 + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}.Release|x64.Build.0 = Release|x64 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Debug|Win32.ActiveCfg = Debug|Win32 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Debug|Win32.Build.0 = Debug|Win32 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Debug|x64.ActiveCfg = Debug|x64 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Debug|x64.Build.0 = Debug|x64 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Release|Win32.ActiveCfg = Release|Win32 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Release|Win32.Build.0 = Release|Win32 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Release|x64.ActiveCfg = Release|x64 + {B441CC62-877E-4B3F-93E0-0DE80544F705}.Release|x64.Build.0 = Release|x64 + {FF213B23-2C26-4214-9F88-85271E557E87}.Debug|Win32.ActiveCfg = Debug|Win32 + {FF213B23-2C26-4214-9F88-85271E557E87}.Debug|Win32.Build.0 = Debug|Win32 + {FF213B23-2C26-4214-9F88-85271E557E87}.Debug|x64.ActiveCfg = Debug|x64 + {FF213B23-2C26-4214-9F88-85271E557E87}.Debug|x64.Build.0 = Debug|x64 + {FF213B23-2C26-4214-9F88-85271E557E87}.Release|Win32.ActiveCfg = Release|Win32 + {FF213B23-2C26-4214-9F88-85271E557E87}.Release|Win32.Build.0 = Release|Win32 + {FF213B23-2C26-4214-9F88-85271E557E87}.Release|x64.ActiveCfg = Release|x64 + {FF213B23-2C26-4214-9F88-85271E557E87}.Release|x64.Build.0 = Release|x64 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Debug|Win32.Build.0 = Debug|Win32 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Debug|x64.ActiveCfg = Debug|x64 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Debug|x64.Build.0 = Debug|x64 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Release|Win32.ActiveCfg = Release|Win32 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Release|Win32.Build.0 = Release|Win32 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Release|x64.ActiveCfg = Release|x64 + {EC082900-B4D8-42E9-9663-77F02F6936AE}.Release|x64.Build.0 = Release|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.Build.0 = Debug|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.ActiveCfg = Debug|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.Build.0 = Debug|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.ActiveCfg = Release|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.Build.0 = Release|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.ActiveCfg = Release|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.Build.0 = Release|x64 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Debug|Win32.Build.0 = Debug|Win32 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Debug|x64.ActiveCfg = Debug|x64 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Debug|x64.Build.0 = Debug|x64 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Release|Win32.ActiveCfg = Release|Win32 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Release|Win32.Build.0 = Release|Win32 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Release|x64.ActiveCfg = Release|x64 + {BDB6578B-0691-4E80-A46C-DF21639FD3B8}.Release|x64.Build.0 = Release|x64 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Debug|Win32.ActiveCfg = Release|Win32 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Debug|Win32.Build.0 = Release|Win32 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Debug|x64.ActiveCfg = Release|Win32 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Debug|x64.Build.0 = Release|Win32 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Release|Win32.ActiveCfg = Release|Win32 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Release|Win32.Build.0 = Release|Win32 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Release|x64.ActiveCfg = Release|Win32 + {41279555-F94F-4EBC-99DE-AF863C10C5C4}.Release|x64.Build.0 = Release|Win32 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|Win32.ActiveCfg = Debug|Win32 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|Win32.Build.0 = Debug|Win32 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|x64.ActiveCfg = Debug|x64 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Debug|x64.Build.0 = Debug|x64 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|Win32.ActiveCfg = Release|Win32 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|Win32.Build.0 = Release|Win32 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|x64.ActiveCfg = Release|x64 + {93D73454-2512-424E-9CDA-4BB357FE13DD}.Release|x64.Build.0 = Release|x64 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|Win32.Build.0 = Debug|Win32 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|x64.ActiveCfg = Debug|x64 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Debug|x64.Build.0 = Debug|x64 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|Win32.ActiveCfg = Release|Win32 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|Win32.Build.0 = Release|Win32 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|x64.ActiveCfg = Release|x64 + {AA862E5E-A993-497A-B6A0-0E8E94B10050}.Release|x64.Build.0 = Release|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Debug|Win32.ActiveCfg = Debug|Win32 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Debug|Win32.Build.0 = Debug|Win32 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Debug|x64.ActiveCfg = Debug|x64 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Debug|x64.Build.0 = Debug|x64 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Release|Win32.ActiveCfg = Release|Win32 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Release|Win32.Build.0 = Release|Win32 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Release|x64.ActiveCfg = Release|x64 + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72}.Release|x64.Build.0 = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.ActiveCfg = Debug|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.Build.0 = Debug|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.ActiveCfg = Debug|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.Build.0 = Debug|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|Win32.ActiveCfg = Release|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|Win32.Build.0 = Release|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.ActiveCfg = Release|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.Build.0 = Release|x64 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Debug|Win32.ActiveCfg = Debug|Win32 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Debug|Win32.Build.0 = Debug|Win32 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Debug|x64.ActiveCfg = Debug|x64 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Debug|x64.Build.0 = Debug|x64 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Release|Win32.ActiveCfg = Release|Win32 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Release|Win32.Build.0 = Release|Win32 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Release|x64.ActiveCfg = Release|x64 + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E}.Release|x64.Build.0 = Release|x64 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Debug|Win32.ActiveCfg = Debug|Win32 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Debug|Win32.Build.0 = Debug|Win32 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Debug|x64.ActiveCfg = Debug|x64 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Debug|x64.Build.0 = Debug|x64 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Release|Win32.ActiveCfg = Release|Win32 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Release|Win32.Build.0 = Release|Win32 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Release|x64.ActiveCfg = Release|x64 + {EC1A314C-5588-4506-9C1E-2E58E5817F75}.Release|x64.Build.0 = Release|x64 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Debug|Win32.ActiveCfg = Debug|Win32 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Debug|Win32.Build.0 = Debug|Win32 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Debug|x64.ActiveCfg = Debug|x64 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Debug|x64.Build.0 = Debug|x64 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Release|Win32.ActiveCfg = Release|Win32 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Release|Win32.Build.0 = Release|Win32 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Release|x64.ActiveCfg = Release|x64 + {A4C423AA-F57C-46C7-A172-D1A777017D29}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {54AA7840-5BEB-4A0C-9452-74BA4CC7FD44} = {15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6} + {2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4} = {15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6} + {160BDC25-5626-4B0D-BDD8-2953D9777FB5} = {15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6} + {6BBD47CF-91FD-4077-B676-8B76980178A9} = {15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6} + {3DE9EE35-3E91-4F27-A014-2866AD8C3FE3} = {15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6} + {E54CF649-140E-4255-81A5-30A673C1FB36} = {15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6} + {AAD1BCD6-9804-44A5-A5FC-4782EA00E9D4} = {15670B2E-CED6-4ED5-94CE-A00B1B2B5BA6} + {8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {AB993F38-C31D-4897-B139-A620C42BC565} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {31643FDB-1BB8-4965-9DE7-000FC88D35AE} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {4C9F135B-A85E-430C-BAD4-4C67EF5FC12C} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {B441CC62-877E-4B3F-93E0-0DE80544F705} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {FF213B23-2C26-4214-9F88-85271E557E87} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {EC082900-B4D8-42E9-9663-77F02F6936AE} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {BDB6578B-0691-4E80-A46C-DF21639FD3B8} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {93D73454-2512-424E-9CDA-4BB357FE13DD} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {AA862E5E-A993-497A-B6A0-0E8E94B10050} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {349EE8F9-7D25-4909-AAF5-FF3FADE72187} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {2A3F751D-69E9-45F2-9199-9A00BFB6CC72} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {87ADDFF9-5768-4DA2-A33B-2477593D6677} + {96020103-4BA5-4FD2-B4AA-5B6D24492D4E} = {AAD1BCD6-9804-44A5-A5FC-4782EA00E9D4} + {EC1A314C-5588-4506-9C1E-2E58E5817F75} = {AAD1BCD6-9804-44A5-A5FC-4782EA00E9D4} + {A4C423AA-F57C-46C7-A172-D1A777017D29} = {AAD1BCD6-9804-44A5-A5FC-4782EA00E9D4} + EndGlobalSection +EndGlobal diff --git a/Source/pch.h b/Source/pch.h index 64c1354717..2851adefca 100644 --- a/Source/pch.h +++ b/Source/pch.h @@ -1,4 +1,5 @@ #include "Common.h" +#include "Thread.h" #include #include #include